mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
3b2bbe0705
The code for checking whether a transaction was dropped or not was refactored in #8398, but in the process an off-by-one error was introduced. The old version of `_checkIfTxWasDropped` would query for an updated transaction count from the network, and would consider the pending transaction to be dropped if the count was above the nonce. However, the version introduced in #8398 considers the transaction to be dropped if the count is above *or equal to* the nonce. The pending transaction nonce is expected to be equal to the transaction count, because the nonce starts at zero. The transaction count is equal to the expected next nonce. The variable name has been updated to make this more clear (`networkNextNonce` is how the `nonce-tracker` refers to this value). `parseInt` is now called with an explicit radix of `16` as well, to ensure both nonce strings are always parsed as hex. In all cases I am aware of, these nonce strings were prefixed by `0x`, meaning that `parseInt` would default to a radix of `16`, so this likely doesn't constitute a functional change. Fixes #8688 |
||
---|---|---|
.. | ||
lib | ||
enums.js | ||
index.js | ||
pending-tx-tracker.js | ||
README.md | ||
tx-gas-utils.js | ||
tx-state-manager.js |
Transaction Controller
Transaction Controller is an aggregate of sub-controllers and trackers exposed to the MetaMask controller.
- txStateManager responsible for the state of a transaction and storing the transaction
- pendingTxTracker watching blocks for transactions to be include and emitting confirmed events
- txGasUtil gas calculations and safety buffering
- nonceTracker calculating nonces
Flow diagram of processing a transaction
txMeta's & txParams
A txMeta is the "meta" object it has all the random bits of info we need about a transaction on it. txParams are sacred every thing on txParams gets signed so it must be a valid key and be hex prefixed except for the network number. Extra stuff must go on the txMeta!
Here is a txMeta too look at:
txMeta = {
"id": 2828415030114568, // unique id for this txMeta used for look ups
"time": 1524094064821, // time of creation
"status": "confirmed",
"metamaskNetworkId": "1524091532133", //the network id for the transaction
"loadingDefaults": false, // used to tell the ui when we are done calculatyig gass defaults
"txParams": { // the txParams object
"from": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675",
"to": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675",
"value": "0x0",
"gasPrice": "0x3b9aca00",
"gas": "0x7b0c",
"nonce": "0x0"
},
"history": [
{ // debug information
"id": 2828415030114568,
"time": 1524094064821,
"status": "unapproved",
"metamaskNetworkId": "1524091532133",
"loadingDefaults": true,
"txParams": {
"from": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675",
"to": "0x8acce2391c0d510a6c5e5d8f819a678f79b7e675",
"value": "0x0"
}
},
[{
"op": "add",
"path": "/txParams/gasPrice",
"value": "0x3b9aca00"
}]
], // I've removed most of history for this
"origin": "MetaMask", //debug
"nonceDetails": {
"params": {
"highestLocallyConfirmed": 0,
"highestSuggested": 0,
"nextNetworkNonce": 0
},
"local": {
"name": "local",
"nonce": 0,
"details": {
"startPoint": 0,
"highest": 0
}
},
"network": {
"name": "network",
"nonce": 0,
"details": {
"baseCount": 0
}
}
},
"rawTx": "0xf86980843b9aca00827b0c948acce2391c0d510a6c5e5d8f819a678f79b7e67580808602c5b5de66eea05c01a320b96ac730cb210ca56d2cb71fa360e1fc2c21fa5cf333687d18eb323fa02ed05987a6e5fd0f2459fcff80710b76b83b296454ad9a37594a0ccb4643ea90", // used for rebroadcast
"hash": "0xa45ba834b97c15e6ff4ed09badd04ecd5ce884b455eb60192cdc73bcc583972a",
"submittedTime": 1524094077902 // time of the attempt to submit the raw tx to the network, used in the ui to show the retry button
}