From 9155e6a35492b3d443dca7be0538e9b55d5ee893 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 5 Mar 2019 12:24:21 +0100 Subject: [PATCH] turn API into promise --- src/app.js | 45 +++++++++++++-------- src/app/editor/SourceHighlighters.js | 26 +++++++----- src/app/files/browser-files-tree.js | 1 + src/app/tabs/compile-tab.js | 6 +++ src/universal-dapp.js | 60 +++++++++++++++++----------- 5 files changed, 88 insertions(+), 50 deletions(-) diff --git a/src/app.js b/src/app.js index 56c287f43a..5fc3e69559 100644 --- a/src/app.js +++ b/src/app.js @@ -253,32 +253,43 @@ class App { }) } - getExecutionContextProvider (cb) { - cb(null, executionContext.getProvider()) + getExecutionContextProvider () { + return new Promise((resolve, reject) => { + resolve(executionContext.getProvider()) + }) } - getProviderEndpoint (cb) { - if (executionContext.getProvider() === 'web3') { - cb(null, executionContext.web3().currentProvider.host) - } else { - cb('no endpoint: current provider is either injected or vm') - } + getProviderEndpoint () { + return new Promise((resolve, reject) => { + if (executionContext.getProvider() === 'web3') { + resolve(executionContext.web3().currentProvider.host) + } else { + reject('no endpoint: current provider is either injected or vm') + } + }) } - detectNetWork (cb) { - executionContext.detectNetwork((error, network) => { - cb(error, network) + detectNetWork () { + return new Promise((resolve, reject) => { + executionContext.detectNetwork((error, network) => { + if (error) return reject(error) + resolve(network) + }) }) } - addProvider (name, url, cb) { - executionContext.addProvider({ name, url }) - cb() + addProvider (name, url) { + return new Promise((resolve, reject) => { + executionContext.addProvider({ name, url }) + resolve() + }) } - removeProvider (name, cb) { - executionContext.removeProvider(name) - cb() + removeProvider (name) { + return new Promise((resolve, reject) => { + executionContext.removeProvider(name) + resolve() + }) } } diff --git a/src/app/editor/SourceHighlighters.js b/src/app/editor/SourceHighlighters.js index 6bf8886fa8..59243c646a 100644 --- a/src/app/editor/SourceHighlighters.js +++ b/src/app/editor/SourceHighlighters.js @@ -18,19 +18,25 @@ class SourceHighlighters { // TODO what to do with mod? async highlight (mod, lineColumnPos, filePath, hexColor) { - let position - try { - position = JSON.parse(lineColumnPos) - } catch (e) { - throw e - } - if (!this.highlighters[mod]) this.highlighters[mod] = new SourceHighlighter() - this.highlighters[mod].currentSourceLocation(null) - this.highlighters[mod].currentSourceLocationFromfileName(position, filePath, hexColor) + return new Promise((resolve, reject) => { + let position + try { + position = JSON.parse(lineColumnPos) + } catch (e) { + throw e + } + if (!this.highlighters[mod]) this.highlighters[mod] = new SourceHighlighter() + this.highlighters[mod].currentSourceLocation(null) + this.highlighters[mod].currentSourceLocationFromfileName(position, filePath, hexColor) + resolve() + }) } async discardHighlight (mod) { - if (this.highlighters[mod]) this.highlighters[mod].currentSourceLocation(null) + return new Promise((resolve, reject) => { + if (this.highlighters[mod]) this.highlighters[mod].currentSourceLocation(null) + resolve() + }) } } diff --git a/src/app/files/browser-files-tree.js b/src/app/files/browser-files-tree.js index 4482155201..8051b742c6 100644 --- a/src/app/files/browser-files-tree.js +++ b/src/app/files/browser-files-tree.js @@ -132,6 +132,7 @@ function FilesTree (name, storage) { } this.profile = function () { + // TODO should make them promisable return { name: this.type, methods: ['get', 'set', 'remove'], diff --git a/src/app/tabs/compile-tab.js b/src/app/tabs/compile-tab.js index 6fc7c859c1..3c26ea539c 100644 --- a/src/app/tabs/compile-tab.js +++ b/src/app/tabs/compile-tab.js @@ -143,6 +143,12 @@ class CompileTab { } } + getCompilationResult () { + return new Promise((resolve, reject) => { + resolve(this.compileTabLogic.compiler.lastCompilationResult) + }) + } + /********* * SUB-COMPONENTS */ diff --git a/src/universal-dapp.js b/src/universal-dapp.js index 18251b1c54..391ce2cf21 100644 --- a/src/universal-dapp.js +++ b/src/universal-dapp.js @@ -33,7 +33,7 @@ UniversalDApp.prototype.profile = function () { return { name: 'udapp', displayName: 'universal dapp', - methods: ['runTx', 'getAccounts', 'createVMAccount'], + methods: ['runTestTx', 'getAccounts', 'createVMAccount'], description: 'service - run transaction and access account' } } @@ -73,11 +73,13 @@ UniversalDApp.prototype.resetAPI = function (transactionContextAPI) { } UniversalDApp.prototype.createVMAccount = function (privateKey, balance, cb) { - if (executionContext.getProvider() !== 'vm') return cb('plugin API does not allow creating a new account through web3 connection. Only vm mode is allowed') - this._addAccount(privateKey, balance) - executionContext.vm().stateManager.cache.flush(function () {}) - privateKey = Buffer.from(privateKey, 'hex') - cb(null, '0x' + ethJSUtil.privateToAddress(privateKey).toString('hex')) + return new Promise((resolve, reject) => { + if (executionContext.getProvider() !== 'vm') return reject('plugin API does not allow creating a new account through web3 connection. Only vm mode is allowed') + this._addAccount(privateKey, balance) + executionContext.vm().stateManager.cache.flush(function () {}) + privateKey = Buffer.from(privateKey, 'hex') + resolve('0x' + ethJSUtil.privateToAddress(privateKey).toString('hex')) + }) } UniversalDApp.prototype.newAccount = function (password, passwordPromptCb, cb) { @@ -116,24 +118,36 @@ UniversalDApp.prototype._addAccount = function (privateKey, balance) { } } +// TODO should remove this cb UniversalDApp.prototype.getAccounts = function (cb) { var self = this - - if (!executionContext.isVM()) { - // Weirdness of web3: listAccounts() is sync, `getListAccounts()` is async - // See: https://github.com/ethereum/web3.js/issues/442 - if (this._deps.config.get('settings/personal-mode')) { - return executionContext.web3().personal.getListAccounts(cb) + return new Promise((resolve, reject) => { + if (!executionContext.isVM()) { + // Weirdness of web3: listAccounts() is sync, `getListAccounts()` is async + // See: https://github.com/ethereum/web3.js/issues/442 + if (this._deps.config.get('settings/personal-mode')) { + return executionContext.web3().personal.getListAccounts((error, accounts) => { + if (cb) cb(error, accounts) + if (error) return reject(error) + resolve(accounts) + }) + } else { + executionContext.web3().eth.getAccounts((error, accounts) => { + if (cb) cb(error, accounts) + if (error) return reject(error) + resolve(accounts) + }) + } } else { - executionContext.web3().eth.getAccounts(cb) - } - } else { - if (!self.accounts) { - return cb('No accounts?') + if (!self.accounts) { + if (cb) cb('No accounts?') + reject('No accounts?') + return + } + if (cb) cb(null, Object.keys(self.accounts)) + resolve(Object.keys(self.accounts)) } - - cb(null, Object.keys(self.accounts)) - } + }) } UniversalDApp.prototype.getBalance = function (address, cb) { @@ -235,12 +249,12 @@ UniversalDApp.prototype.getInputs = function (funABI) { UniversalDApp.prototype.runTestTx = function (tx) { return new Promise((resolve, reject) => { executionContext.detectNetwork((error, network) => { - if (error) reject(error) + if (error) return reject(error) if (network.name === 'Main' && network.id === '1') { - reject(new Error('It is not allowed to make this action against mainnet')) + return reject(new Error('It is not allowed to make this action against mainnet')) } this.silentRunTx(tx, (error, result) => { - if (error) reject(error) + if (error) return reject(error) resolve({ transactionHash: result.transactionHash, status: result.result.status,