From 9e6f599faf4205e95b4b3d9612224fa2218e99d5 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 3 Sep 2019 23:01:08 +0200 Subject: [PATCH] async instantiate remix simulator --- remix-simulator/src/methods/accounts.js | 27 ++++++++++++++------- remix-simulator/src/methods/transactions.js | 4 ++- remix-simulator/src/provider.js | 8 +++++- remix-simulator/src/server.js | 1 + remix-tests/src/runTestSources.ts | 10 +++++--- 5 files changed, 35 insertions(+), 15 deletions(-) diff --git a/remix-simulator/src/methods/accounts.js b/remix-simulator/src/methods/accounts.js index a32ab96f53..b0563c7c57 100644 --- a/remix-simulator/src/methods/accounts.js +++ b/remix-simulator/src/methods/accounts.js @@ -12,19 +12,28 @@ var Accounts = function () { this.accountsKeys = {} executionContext.init({get: () => { return true }}) +} - for (let _account of this.accountsList) { - this.accountsKeys[_account.address.toLowerCase()] = _account.privateKey - this.accounts[_account.address.toLowerCase()] = { privateKey: Buffer.from(_account.privateKey.replace('0x', ''), 'hex'), nonce: 0 } +Accounts.prototype.init = async function () { + let setBalance = (account) => { + return new Promise((resolve, reject) => { + this.accountsKeys[ethJSUtil.toChecksumAddress(account.address)] = account.privateKey + this.accounts[ethJSUtil.toChecksumAddress(account.address)] = { privateKey: Buffer.from(account.privateKey.replace('0x', ''), 'hex'), nonce: 0 } - executionContext.vm().stateManager.getAccount(Buffer.from(_account.address.toLowerCase().replace('0x', ''), 'hex'), (err, account) => { - if (err) { - throw new Error(err) - } - var balance = '0x56BC75E2D63100000' - account.balance = balance || '0xf00000000000000001' + executionContext.vm().stateManager.getAccount(Buffer.from(account.address.toLowerCase().replace('0x', ''), 'hex'), (err, account) => { + if (err) { + throw new Error(err) + } + var balance = '0x56BC75E2D63100000' + account.balance = balance || '0xf00000000000000001' + resolve() + }) }) } + + for (let _account of this.accountsList) { + await setBalance(_account) + } } Accounts.prototype.methods = function () { diff --git a/remix-simulator/src/methods/transactions.js b/remix-simulator/src/methods/transactions.js index 754b191604..75e82a20d1 100644 --- a/remix-simulator/src/methods/transactions.js +++ b/remix-simulator/src/methods/transactions.js @@ -5,7 +5,9 @@ var ethJSUtil = require('ethereumjs-util') var processTx = require('./txProcess.js') var BN = ethJSUtil.BN -var Transactions = function (accounts) { +var Transactions = function () {} + +Transactions.prototype.init = function (accounts) { this.accounts = accounts } diff --git a/remix-simulator/src/provider.js b/remix-simulator/src/provider.js index 3778b58876..4c1f9e706a 100644 --- a/remix-simulator/src/provider.js +++ b/remix-simulator/src/provider.js @@ -12,18 +12,24 @@ const generateBlock = require('./genesis.js') var Provider = function (options) { this.Accounts = new Accounts() + this.Transactions = new Transactions() this.methods = {} this.methods = merge(this.methods, this.Accounts.methods()) this.methods = merge(this.methods, (new Blocks(options)).methods()) this.methods = merge(this.methods, (new Misc()).methods()) this.methods = merge(this.methods, (new Net()).methods()) - this.methods = merge(this.methods, (new Transactions(this.Accounts.accounts)).methods()) + this.methods = merge(this.methods, (this.Transactions.methods())) this.methods = merge(this.methods, (new Whisper()).methods()) generateBlock() } +Provider.prototype.init = async function () { + await this.Accounts.init() + this.Transactions.init(this.Accounts.accounts) +} + Provider.prototype.sendAsync = function (payload, callback) { log.info('payload method is ', payload.method) diff --git a/remix-simulator/src/server.js b/remix-simulator/src/server.js index a8d33023c8..dcb3d4b35b 100644 --- a/remix-simulator/src/server.js +++ b/remix-simulator/src/server.js @@ -8,6 +8,7 @@ const log = require('./utils/logs.js') class Server { constructor (options) { this.provider = new Provider(options) + this.provider.init() } start (host, port) { diff --git a/remix-tests/src/runTestSources.ts b/remix-tests/src/runTestSources.ts index 4e765434fd..eefa1be9ba 100644 --- a/remix-tests/src/runTestSources.ts +++ b/remix-tests/src/runTestSources.ts @@ -10,15 +10,17 @@ import Web3 = require('web3') import { Provider } from 'remix-simulator' import { FinalResult } from './types' -const createWeb3Provider = function () { +const createWeb3Provider = async function () { let web3 = new Web3() - web3.setProvider(new Provider()) + let provider = new Provider() + await provider.init() + web3.setProvider(provider) return web3 } -export function runTestSources(contractSources, testCallback, resultCallback, finalCallback, importFileCb, opts) { +export async function runTestSources(contractSources, testCallback, resultCallback, finalCallback, importFileCb, opts) { opts = opts || {} - let web3 = opts.web3 || createWeb3Provider() + let web3 = opts.web3 || await createWeb3Provider() let accounts = opts.accounts || null async.waterfall([ function getAccountList (next) {