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/remixAppManager.js b/src/remixAppManager.js index 29deeec87e..6cd23199e2 100644 --- a/src/remixAppManager.js +++ b/src/remixAppManager.js @@ -76,7 +76,7 @@ export class RemixAppManager extends AppManagerApi { events: [], methods: [], notifications: {}, - url: 'http://localhost:8080', + url: 'https://remix-pipeline.surge.sh', description: ' - ', icon: 'data:image/png;base64,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', prefferedLocation: 'mainPanel' 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,