aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfrankiebee <frankie.diamond@gmail.com>2017-06-28 07:46:14 +0800
committerfrankiebee <frankie.diamond@gmail.com>2017-06-28 07:46:33 +0800
commit690685d20de310b4c4589e92a5053afd9c56e85a (patch)
tree36a47ef9bfc7243584a4dc1381d7b7c3f01157d0
parent0ee4502d716ebe28fa426a05c454a75c7f82d965 (diff)
downloadtangerine-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.js9
-rw-r--r--app/scripts/lib/nonce-tracker.js13
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)