Merge pull request #757 from ethereum/fixTxListener

Fix tx listener issues
pull/1/head
yann300 8 years ago committed by GitHub
commit a7e14ad141
  1. 28
      src/app/execution/txListener.js
  2. 16
      src/app/execution/txLogger.js
  3. 2
      src/app/execution/txRunner.js

@ -62,20 +62,34 @@ class TxListener {
this.loopId = 'vm-listener' this.loopId = 'vm-listener'
} else { } else {
this.loopId = setInterval(() => { this.loopId = setInterval(() => {
var currentLoopId = this.loopId
executionContext.web3().eth.getBlockNumber((error, blockNumber) => { executionContext.web3().eth.getBlockNumber((error, blockNumber) => {
if (this.loopId === null || this.loopId === 'vm-listener') return if (this.loopId === null || this.loopId === 'vm-listener') return
if (error) return console.log(error) 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 this.lastBlock = blockNumber
executionContext.web3().eth.getBlock(this.lastBlock, true, (error, result) => { while (blockNumber >= current) {
if (!error) { try {
this._newBlock(Object.assign({type: 'web3'}, result)) 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))
} }
})
} }
/** /**
@ -194,7 +208,7 @@ class TxListener {
fn: fn, fn: fn,
params: this._decodeInputParams(inputData.substring(8), getFunction(abi, fn)) params: this._decodeInputParams(inputData.substring(8), getFunction(abi, fn))
} }
return return this._resolvedTransactions[tx.hash]
} }
} }
// fallback function // fallback function

@ -22,6 +22,16 @@ class TxLogger {
opts.api.editorpanel.registerLogType('unknownTransaction', (data) => { opts.api.editorpanel.registerLogType('unknownTransaction', (data) => {
return renderUnknownTransaction(this, 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) => { opts.events.txListener.register('newTransaction', (tx) => {
log(this, tx, opts.api) log(this, tx, opts.api)
}) })
@ -66,11 +76,15 @@ function renderUnknownTransaction (self, data) {
return yo`<span id="tx${data.tx.hash}">${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))}, <button onclick=${detail}>Details</button> <button onclick=${debug}>Debug</button></span>` return yo`<span id="tx${data.tx.hash}">${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))}, <button onclick=${detail}>Details</button> <button onclick=${debug}>Debug</button></span>`
} }
function renderEmptyBlock (self, data) {
return yo`<span>block ${data.block.number} - O transactions</span>`
}
function context (self, tx) { function context (self, tx) {
if (executionContext.getProvider() === 'vm') { if (executionContext.getProvider() === 'vm') {
return yo`<span>(vm)</span>` return yo`<span>(vm)</span>`
} else { } else {
return yo`<span>block:${tx.blockNumber}, txIndex:${tx.transactionIndex}` return yo`<span>block:${tx.blockNumber}, txIndex:${tx.transactionIndex}</span>`
} }
} }

@ -69,7 +69,7 @@ TxRunner.prototype.execute = function (args, callback) {
return callback(err, resp) return callback(err, resp)
} }
tryTillResponse(self.web3, resp, callback) tryTillResponse(resp, callback)
}) })
}) })
} }

Loading…
Cancel
Save