From a10740af7e35aa60e0445598403e6bda22382c2f Mon Sep 17 00:00:00 2001 From: frankiebee Date: Wed, 14 Jun 2017 20:17:59 -0700 Subject: add a check for weather a tx is included in a block when jumping blocks --- app/scripts/controllers/transactions.js | 41 +++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'app/scripts/controllers') diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index 2db8041eb..41f651458 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -26,6 +26,7 @@ module.exports = class TransactionController extends EventEmitter { this.txProviderUtils = new TxProviderUtil(this.query) this.blockTracker.on('block', this.checkForTxInBlock.bind(this)) this.blockTracker.on('block', this.resubmitPendingTxs.bind(this)) + this.provider._blockTracker.on('sync', this.queryPendingTxs.bind(this)) this.signEthTx = opts.signTransaction this.nonceLock = Semaphore(1) @@ -369,6 +370,15 @@ module.exports = class TransactionController extends EventEmitter { }) } + queryPendingTxs ({oldBlock, newBlock}) { + if (!oldBlock) { + this._checkPendingTxs() + return + } + const diff = Number.parseInt(newBlock.number) - Number.parseInt(oldBlock.number) + if (diff > 1) this._checkPendingTxs() + } + // PRIVATE METHODS // Should find the tx in the tx list and @@ -443,6 +453,37 @@ module.exports = class TransactionController extends EventEmitter { this.txProviderUtils.publishTransaction(rawTx, cb) } + _checkPendingTxs () { + var signedTxList = this.getFilteredTxList({status: 'submitted'}) + if (!signedTxList.length) return + signedTxList.forEach((txMeta) => { + var txHash = txMeta.hash + var txId = txMeta.id + if (!txHash) { + const errReason = { + errCode: 'No hash was provided', + message: 'We had an error while submitting this transaction, please try again.', + } + return this.setTxStatusFailed(txId, errReason) + } + this.query.getTransactionByHash(txHash, (err, txParams) => { + if (err || !txParams) { + if (!txParams) return + txMeta.err = { + isWarning: true, + errorCode: err, + message: 'There was a problem loading this transaction.', + } + this.updateTx(txMeta) + return log.error(err) + } + if (txParams.blockNumber) { + this.setTxStatusConfirmed(txId) + } + }) + }) + } + } -- cgit v1.2.3