Unverified Commit 4a250485 authored by yann300's avatar yann300 Committed by GitHub

Merge pull request #929 from ethereum/fixVmRunner

Run tx synced way if javascript vm
parents 403b82f3 9d732c5f
...@@ -6,14 +6,16 @@ var BN = ethJSUtil.BN ...@@ -6,14 +6,16 @@ var BN = ethJSUtil.BN
var executionContext = require('../../execution-context') var executionContext = require('../../execution-context')
function TxRunner (vmaccounts, opts) { function TxRunner (vmaccounts, opts) {
this.queueTxs = opts.queueTxs
this.personalMode = opts.personalMode this.personalMode = opts.personalMode
this.blockNumber = 0 this.blockNumber = 0
this.runAsync = true
if (executionContext.isVM()) { if (executionContext.isVM()) {
this.blockNumber = 1150000 // The VM is running in Homestead mode, which started at this block. this.blockNumber = 1150000 // The VM is running in Homestead mode, which started at this block.
this.runAsync = false // We have to run like this cause the VM Event Manager does not support running multiple txs at the same time.
} }
this.pendingTxs = {} this.pendingTxs = {}
this.vmaccounts = vmaccounts this.vmaccounts = vmaccounts
this.queusTxs = []
} }
TxRunner.prototype.rawRun = function (args, cb) { TxRunner.prototype.rawRun = function (args, cb) {
...@@ -147,11 +149,19 @@ function tryTillResponse (txhash, done) { ...@@ -147,11 +149,19 @@ function tryTillResponse (txhash, done) {
} }
function run (self, tx, stamp, callback) { function run (self, tx, stamp, callback) {
self.pendingTxs[stamp] = tx if (!self.runAsync && Object.keys(self.pendingTxs).length) {
self.execute(tx, (error, result) => { self.queusTxs.push({ tx, stamp, callback })
delete self.pendingTxs[stamp] } else {
callback(error, result) self.pendingTxs[stamp] = tx
}) self.execute(tx, (error, result) => {
delete self.pendingTxs[stamp]
callback(error, result)
if (Object.keys(self.pendingTxs).length) {
var next = self.pendingTxs.pop()
run(self, next.tx, next.stamp, next.callback)
}
})
}
} }
module.exports = TxRunner module.exports = TxRunner
...@@ -172,7 +172,6 @@ function UniversalDApp (opts = {}) { ...@@ -172,7 +172,6 @@ function UniversalDApp (opts = {}) {
self.reset(self.contracts) self.reset(self.contracts)
}) })
self.txRunner = new TxRunner({}, { self.txRunner = new TxRunner({}, {
queueTxs: true,
personalMode: this.personalMode personalMode: this.personalMode
}) })
} }
...@@ -193,7 +192,6 @@ UniversalDApp.prototype.reset = function (contracts, transactionContextAPI) { ...@@ -193,7 +192,6 @@ UniversalDApp.prototype.reset = function (contracts, transactionContextAPI) {
executionContext.vm().stateManager.cache.flush(function () {}) executionContext.vm().stateManager.cache.flush(function () {})
} }
this.txRunner = new TxRunner(this.accounts, { this.txRunner = new TxRunner(this.accounts, {
queueTxs: true,
personalMode: this.personalMode personalMode: this.personalMode
}) })
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment