mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-27 12:56:01 +01:00
transactions - make _markNonceDuplicatesDropped
This commit is contained in:
parent
8adb03074c
commit
4a3288fec9
@ -91,21 +91,7 @@ module.exports = class TransactionController extends EventEmitter {
|
|||||||
this.pendingTxTracker.on('tx:warning', (txMeta) => {
|
this.pendingTxTracker.on('tx:warning', (txMeta) => {
|
||||||
this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:warning')
|
this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:warning')
|
||||||
})
|
})
|
||||||
this.pendingTxTracker.on('tx:confirmed', (txId) => {
|
this.pendingTxTracker.on('tx:confirmed', (txId) => this._markNonceDuplicatesDropped(txId))
|
||||||
this.txStateManager.setTxStatusConfirmed(txId)
|
|
||||||
// get the confirmed transactions nonce and from address
|
|
||||||
const txMeta = this.txStateManager.getTx(txId)
|
|
||||||
const { nonce, from } = txMeta.txParams
|
|
||||||
const sameNonceTxs = this.txStateManager.getFilteredTxList({nonce, from})
|
|
||||||
if (!sameNonceTxs.length) return
|
|
||||||
// mark all same nonce transactions as dropped and give i a replacedBy hash
|
|
||||||
sameNonceTxs.forEach((otherTxMeta) => {
|
|
||||||
if (otherTxMeta === txId) return
|
|
||||||
otherTxMeta.replacedBy = txMeta.hash
|
|
||||||
this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce')
|
|
||||||
this.txStateManager.setTxStatusDropped(otherTxMeta.id)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
this.pendingTxTracker.on('tx:failed', this.txStateManager.setTxStatusFailed.bind(this.txStateManager))
|
this.pendingTxTracker.on('tx:failed', this.txStateManager.setTxStatusFailed.bind(this.txStateManager))
|
||||||
this.pendingTxTracker.on('tx:block-update', (txMeta, latestBlockNumber) => {
|
this.pendingTxTracker.on('tx:block-update', (txMeta, latestBlockNumber) => {
|
||||||
if (!txMeta.firstRetryBlockNumber) {
|
if (!txMeta.firstRetryBlockNumber) {
|
||||||
@ -238,7 +224,6 @@ module.exports = class TransactionController extends EventEmitter {
|
|||||||
txParams: originalTxMeta.txParams,
|
txParams: originalTxMeta.txParams,
|
||||||
lastGasPrice,
|
lastGasPrice,
|
||||||
loadingDefaults: false,
|
loadingDefaults: false,
|
||||||
nonceSpecified: true,
|
|
||||||
})
|
})
|
||||||
this.addTx(txMeta)
|
this.addTx(txMeta)
|
||||||
this.emit('newUnapprovedTx', txMeta)
|
this.emit('newUnapprovedTx', txMeta)
|
||||||
@ -264,11 +249,9 @@ module.exports = class TransactionController extends EventEmitter {
|
|||||||
// wait for a nonce
|
// wait for a nonce
|
||||||
nonceLock = await this.nonceTracker.getNonceLock(fromAddress)
|
nonceLock = await this.nonceTracker.getNonceLock(fromAddress)
|
||||||
// add nonce to txParams
|
// add nonce to txParams
|
||||||
const nonce = txMeta.nonceSpecified ? txMeta.txParams.nonce : nonceLock.nextNonce
|
// if txMeta has lastGasPrice then it is a retry at same nonce with higher
|
||||||
if (nonce > nonceLock.nextNonce) {
|
// gas price transaction and their for the nonce should not be calculated
|
||||||
const message = `Specified nonce may not be larger than account's next valid nonce.`
|
const nonce = txMeta.lastGasPrice ? txMeta.txParams.nonce : nonceLock.nextNonce
|
||||||
throw new Error(message)
|
|
||||||
}
|
|
||||||
txMeta.txParams.nonce = ethUtil.addHexPrefix(nonce.toString(16))
|
txMeta.txParams.nonce = ethUtil.addHexPrefix(nonce.toString(16))
|
||||||
// add nonce debugging information to txMeta
|
// add nonce debugging information to txMeta
|
||||||
txMeta.nonceDetails = nonceLock.nonceDetails
|
txMeta.nonceDetails = nonceLock.nonceDetails
|
||||||
@ -325,6 +308,22 @@ module.exports = class TransactionController extends EventEmitter {
|
|||||||
// PRIVATE METHODS
|
// PRIVATE METHODS
|
||||||
//
|
//
|
||||||
|
|
||||||
|
_markNonceDuplicatesDropped (txId) {
|
||||||
|
this.txStateManager.setTxStatusConfirmed(txId)
|
||||||
|
// get the confirmed transactions nonce and from address
|
||||||
|
const txMeta = this.txStateManager.getTx(txId)
|
||||||
|
const { nonce, from } = txMeta.txParams
|
||||||
|
const sameNonceTxs = this.txStateManager.getFilteredTxList({nonce, from})
|
||||||
|
if (!sameNonceTxs.length) return
|
||||||
|
// mark all same nonce transactions as dropped and give i a replacedBy hash
|
||||||
|
sameNonceTxs.forEach((otherTxMeta) => {
|
||||||
|
if (otherTxMeta === txId) return
|
||||||
|
otherTxMeta.replacedBy = txMeta.hash
|
||||||
|
this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce')
|
||||||
|
this.txStateManager.setTxStatusDropped(otherTxMeta.id)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
_updateMemstore () {
|
_updateMemstore () {
|
||||||
const unapprovedTxs = this.txStateManager.getUnapprovedTxList()
|
const unapprovedTxs = this.txStateManager.getUnapprovedTxList()
|
||||||
const selectedAddressTxList = this.txStateManager.getFilteredTxList({
|
const selectedAddressTxList = this.txStateManager.getFilteredTxList({
|
||||||
|
Loading…
Reference in New Issue
Block a user