diff --git a/src/app/execution/txListener.js b/src/app/execution/txListener.js index ed34067f3f..104300ac2d 100644 --- a/src/app/execution/txListener.js +++ b/src/app/execution/txListener.js @@ -62,22 +62,36 @@ class TxListener { this.loopId = 'vm-listener' } else { this.loopId = setInterval(() => { + var currentLoopId = this.loopId executionContext.web3().eth.getBlockNumber((error, blockNumber) => { if (this.loopId === null || this.loopId === 'vm-listener') return if (error) return console.log(error) - if (!this.lastBlock || blockNumber > this.lastBlock) { + if (currentLoopId === this.loopId && (!this.lastBlock || blockNumber > this.lastBlock)) { + if (!this.lastBlock) this.lastBlock = blockNumber - 1 + var current = this.lastBlock + 1 this.lastBlock = blockNumber - executionContext.web3().eth.getBlock(this.lastBlock, true, (error, result) => { - if (!error) { - this._newBlock(Object.assign({type: 'web3'}, result)) + while (blockNumber >= current) { + try { + this._manageBlock(current) + } catch (e) { + console.log(e) } - }) + current++ + } } }) - }, 2) + }, 2000) } } + _manageBlock (blockNumber) { + executionContext.web3().eth.getBlock(blockNumber, true, (error, result) => { + if (!error) { + this._newBlock(Object.assign({type: 'web3'}, result)) + } + }) + } + /** * stop listening for incoming transactions. do not reset the recorded pool. * @@ -194,7 +208,7 @@ class TxListener { fn: fn, params: this._decodeInputParams(inputData.substring(8), getFunction(abi, fn)) } - return + return this._resolvedTransactions[tx.hash] } } // fallback function diff --git a/src/app/execution/txLogger.js b/src/app/execution/txLogger.js index d5e28a501d..84781976b9 100644 --- a/src/app/execution/txLogger.js +++ b/src/app/execution/txLogger.js @@ -22,6 +22,16 @@ class TxLogger { opts.api.editorpanel.registerLogType('unknownTransaction', (data) => { return renderUnknownTransaction(this, data) }) + opts.api.editorpanel.registerLogType('emptyBlock', (data) => { + return renderEmptyBlock(this, data) + }) + + opts.events.txListener.register('newBlock', (block) => { + if (!block.transactions.length) { + opts.api.editorpanel.log({type: 'emptyBlock', value: { block: block }}) + } + }) + opts.events.txListener.register('newTransaction', (tx) => { log(this, tx, opts.api) }) @@ -66,11 +76,15 @@ function renderUnknownTransaction (self, data) { return yo`${context(self, data.tx)}: from:${helper.shortenAddress(data.tx.from)}, to:${to}, value:${value(data.tx.value)} wei, data:${helper.shortenHexData((data.tx.input))}, hash:${helper.shortenHexData((data.tx.hash))}, ` } +function renderEmptyBlock (self, data) { + return yo`block ${data.block.number} - O transactions` +} + function context (self, tx) { if (executionContext.getProvider() === 'vm') { return yo`(vm)` } else { - return yo`block:${tx.blockNumber}, txIndex:${tx.transactionIndex}` + return yo`block:${tx.blockNumber}, txIndex:${tx.transactionIndex}` } } diff --git a/src/app/execution/txRunner.js b/src/app/execution/txRunner.js index a754129f9b..2e7a59942e 100644 --- a/src/app/execution/txRunner.js +++ b/src/app/execution/txRunner.js @@ -69,7 +69,7 @@ TxRunner.prototype.execute = function (args, callback) { return callback(err, resp) } - tryTillResponse(self.web3, resp, callback) + tryTillResponse(resp, callback) }) }) }