Skip to content

Commit

Permalink
Fixed Vivek's bug (#5860)
Browse files Browse the repository at this point in the history
* Fixed Vivek's bug

Fixes #5850

What was happening:

It seems that his MetaMask had crashed while some new transactions had
been loading defaults. He probably had a network connectivity issue to
Infura (which we are working with Infura to address).

As a result of this network cutout, his three unapproved transactions
were not marked failed, and were not marked as `loadingDefaults =
false`, as their gas prices had not yet been estimated.

Normally this behavior is supposed to clean itself up when the
transaction controller starts up, via the
`TransactionController._onBootCleanUp()` function, but in this case,
during unlock, that function was unable to do its job because when it
requested the transaction list, the current network was in the `loading`
state, making it proceed as if there were no pending transactions.

To fix this, I am doing two things:
- Setting transactions to loadingDefaults = false in more catch blocks.
- Calling `onBootCleanUp()` when the network store's status changes, so
that it will re-trigger when loading completes.

* Fixed reference

* Fixed infinite loop bug

Was refreshing the tx list on every tx state change instead of just
network changes, creating an infinite loop.

* Add notes to tx updates to clarify logs
  • Loading branch information
danfinlay authored Nov 30, 2018
1 parent 4be3fe5 commit c7233e2
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions app/scripts/controllers/transactions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,10 @@ class TransactionController extends EventEmitter {
// memstore is computed from a few different stores
this._updateMemstore()
this.txStateManager.store.subscribe(() => this._updateMemstore())
this.networkStore.subscribe(() => this._updateMemstore())
this.networkStore.subscribe(() => {
this._onBootCleanUp()
this._updateMemstore()
})
this.preferencesStore.subscribe(() => this._updateMemstore())

// request state update to finalize initialization
Expand Down Expand Up @@ -191,10 +194,13 @@ class TransactionController extends EventEmitter {
txMeta = await this.addTxGasDefaults(txMeta)
} catch (error) {
log.warn(error)
this.txStateManager.setTxStatusFailed(txMeta.id, error)
txMeta.loadingDefaults = false
this.txStateManager.updateTx(txMeta, 'Failed to calculate gas defaults.')
throw error
}

txMeta.loadingDefaults = false

// save txMeta
this.txStateManager.updateTx(txMeta)

Expand Down Expand Up @@ -485,6 +491,8 @@ class TransactionController extends EventEmitter {
txMeta.loadingDefaults = false
this.txStateManager.updateTx(txMeta, 'transactions: gas estimation for tx on boot')
}).catch((error) => {
tx.loadingDefaults = false
this.txStateManager.updateTx(tx, 'failed to estimate gas during boot cleanup.')
this.txStateManager.setTxStatusFailed(tx.id, error)
})
})
Expand Down

0 comments on commit c7233e2

Please sign in to comment.