1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-23 10:30:04 +01:00
metamask-extension/app/scripts/controllers/transactions
Chi Kei Chan 31175625b4 Folder restructure (#6304)
* Remove ui/app/keychains/

* Remove ui/app/img/ (unused images)

* Move conversion-util to helpers/utils/

* Move token-util to helpers/utils/

* Move /helpers/*.js inside /helpers/utils/

* Move util tests inside /helpers/utils/

* Renameand move confirm-transaction/util.js to helpers/utils/

* Move higher-order-components to helpers/higher-order-components/

* Move infura-conversion.json to helpers/constants/

* Move all utility functions to helpers/utils/

* Move pages directory to top-level

* Move all constants to helpers/constants/

* Move metametrics inside helpers/

* Move app and root inside pages/

* Move routes inside helpers/

* Re-organize ducks/

* Move reducers to ducks/

* Move selectors inside selectors/

* Move test out of test folder

* Move action, reducer, store inside store/

* Move ui components inside ui/

* Move UI components inside ui/

* Move connected components inside components/app/

* Move i18n-helper inside helpers/

* Fix unit tests

* Fix unit test

* Move pages components

* Rename routes component

* Move reducers to ducks/index

* Fix bad path in unit test
2019-03-21 20:33:30 -02:30
..
lib lint - fix recipient-blacklist.js 2018-06-15 11:07:56 -07:00
enums.js Group transactions by nonce (#5886) 2018-12-09 12:48:06 -08:00
index.js Group transactions by nonce (#5886) 2018-12-09 12:48:06 -08:00
nonce-tracker.js Merge branch 'develop' into network-remove-provider-engine 2018-07-25 22:38:44 -07:00
pending-tx-tracker.js Tx controller now uses safe event emitter (#5769) 2018-11-16 10:34:08 -08:00
README.md Cleaned up some typos and JSDocs in Transactions 2018-04-23 09:43:18 -07:00
tx-gas-utils.js Folder restructure (#6304) 2019-03-21 20:33:30 -02:30
tx-state-manager.js Disallow loading as metamaskNetworkId (#5924) 2018-12-13 09:14:46 -10:00

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

transaction-flow

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
            "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
  "gasPriceSpecified": false, //whether or not the user/dapp has specified gasPrice
  "gasLimitSpecified": false, //whether or not the user/dapp has specified gas
  "estimatedGas": "5208",
  "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
}