diff options
author | frankiebee <frankie.diamond@gmail.com> | 2017-06-28 07:46:14 +0800 |
---|---|---|
committer | frankiebee <frankie.diamond@gmail.com> | 2017-06-28 07:46:33 +0800 |
commit | 690685d20de310b4c4589e92a5053afd9c56e85a (patch) | |
tree | 36a47ef9bfc7243584a4dc1381d7b7c3f01157d0 | |
parent | 0ee4502d716ebe28fa426a05c454a75c7f82d965 (diff) | |
download | tangerine-wallet-browser-690685d20de310b4c4589e92a5053afd9c56e85a.tar tangerine-wallet-browser-690685d20de310b4c4589e92a5053afd9c56e85a.tar.gz tangerine-wallet-browser-690685d20de310b4c4589e92a5053afd9c56e85a.tar.bz2 tangerine-wallet-browser-690685d20de310b4c4589e92a5053afd9c56e85a.tar.lz tangerine-wallet-browser-690685d20de310b4c4589e92a5053afd9c56e85a.tar.xz tangerine-wallet-browser-690685d20de310b4c4589e92a5053afd9c56e85a.tar.zst tangerine-wallet-browser-690685d20de310b4c4589e92a5053afd9c56e85a.zip |
nonce-tracker: only check transactions that are not supposed to be ignored
-rw-r--r-- | app/scripts/controllers/transactions.js | 9 | ||||
-rw-r--r-- | app/scripts/lib/nonce-tracker.js | 13 |
2 files changed, 15 insertions, 7 deletions
diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index 460280578..c74427cd5 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -26,7 +26,14 @@ module.exports = class TransactionController extends EventEmitter { this.nonceTracker = new NonceTracker({ provider: this.provider, blockTracker: this.provider._blockTracker, - getPendingTransactions: (address) => this.getFilteredTxList({ from: address, status: 'submitted', err: undefined }), + getPendingTransactions: (address) => { + return this.getFilteredTxList({ + from: address, + status: 'submitted', + err: undefined, + ignore: undefined, + }) + }, }) this.query = opts.ethQuery this.txProviderUtils = new TxProviderUtil(this.query) diff --git a/app/scripts/lib/nonce-tracker.js b/app/scripts/lib/nonce-tracker.js index 4ea511dec..9ef7706f9 100644 --- a/app/scripts/lib/nonce-tracker.js +++ b/app/scripts/lib/nonce-tracker.js @@ -12,15 +12,14 @@ class NonceTracker { // releaseLock must be called // releaseLock must be called after adding signed tx to pending transactions (or discarding) async getNonceLock (address) { + const pendingTransactions = this.getPendingTransactions(address) // await lock free - await this.lockMap[address] + if (pendingTransactions.length) await this.lockMap[address] + else if (this.lockMap[address]) await this.lockMap[address]() // take lock const releaseLock = this._takeLock(address) // calculate next nonce - const currentBlock = await this._getCurrentBlock() - const blockNumber = currentBlock.number - const pendingTransactions = this.getPendingTransactions(address) - const baseCount = await this._getTxCount(address, blockNumber) + const baseCount = await this._getTxCount(address) const nextNonce = parseInt(baseCount) + pendingTransactions.length // return next nonce and release cb return { nextNonce: nextNonce.toString(16), releaseLock } @@ -44,7 +43,9 @@ class NonceTracker { return releaseLock } - _getTxCount (address, blockNumber) { + async _getTxCount (address) { + const currentBlock = await this._getCurrentBlock() + const blockNumber = currentBlock.number return new Promise((resolve, reject) => { this.ethQuery.getTransactionCount(address, blockNumber, (err, result) => { err ? reject(err) : resolve(result) |