/** * Transaction Type is a MetaMask construct used internally * @typedef {Object} TransactionTypes * @property {'transfer'} TOKEN_METHOD_TRANSFER - A token transaction where the user * is sending tokens that they own to another address * @property {'transferfrom'} TOKEN_METHOD_TRANSFER_FROM - A token transaction * transferring tokens from an account that the sender has an allowance of. * For more information on allowances, see the approve type. * @property {'approve'} TOKEN_METHOD_APPROVE - A token transaction requesting an * allowance of the token to spend on behalf of the user * @property {'incoming'} INCOMING - An incoming (deposit) transaction * @property {'sentEther'} SENT_ETHER - A transaction sending ether to a recipient * @property {'contractInteraction'} CONTRACT_INTERACTION - A transaction that is * interacting with a smart contract's methods that we have not treated as a special * case, such as approve, transfer, and transferfrom * @property {'contractDeployment'} DEPLOY_CONTRACT - A transaction that deployed * a smart contract * @property {'swap'} SWAP - A transaction swapping one token for another through * MetaMask Swaps * @property {'swapApproval'} SWAP_APPROVAL - Similar to the approve type, a swap * approval is a special case of ERC20 approve method that requests an allowance of * the token to spend on behalf of the user for the MetaMask Swaps contract. The first * swap for any token will have an accompanying swapApproval transaction. * @property {'cancel'} CANCEL - A transaction submitted with the same nonce as a * previous transaction, a higher gas price and a zeroed out send amount. Useful * for users who accidentally send to erroneous addresses or if they send too much. * @property {'retry'} RETRY - When a transaction is failed it can be retried by * resubmitting the same transaction with a higher gas fee. This type is also used * to speed up pending transactions. This is accomplished by creating a new tx with * the same nonce and higher gas fees. */ /** * @type {TransactionTypes} */ export const TRANSACTION_TYPES = { CANCEL: 'cancel', RETRY: 'retry', TOKEN_METHOD_TRANSFER: 'transfer', TOKEN_METHOD_TRANSFER_FROM: 'transferfrom', TOKEN_METHOD_APPROVE: 'approve', INCOMING: 'incoming', SENT_ETHER: 'sentEther', CONTRACT_INTERACTION: 'contractInteraction', DEPLOY_CONTRACT: 'contractDeployment', SWAP: 'swap', SWAP_APPROVAL: 'swapApproval', }; /** * Transaction Status is a mix of Ethereum and MetaMask terminology, used internally * for transaction processing. * @typedef {Object} TransactionStatuses * @property {'unapproved'} UNAPPROVED - A new transaction that the user has not * approved or rejected * @property {'approved'} APPROVED - The user has approved the transaction in the * MetaMask UI * @property {'rejected'} REJECTED - The user has rejected the transaction in the * MetaMask UI * @property {'signed'} SIGNED - The transaction has been signed * @property {'submitted'} SUBMITTED - The transaction has been submitted to network * @property {'failed'} FAILED - The transaction has failed for some reason * @property {'dropped'} DROPPED - The transaction was dropped due to a tx with same * nonce being accepted * @property {'confirmed'} CONFIRMED - The transaction was confirmed by the network */ /** * @type {TransactionStatuses} */ export const TRANSACTION_STATUSES = { UNAPPROVED: 'unapproved', APPROVED: 'approved', REJECTED: 'rejected', SIGNED: 'signed', SUBMITTED: 'submitted', FAILED: 'failed', DROPPED: 'dropped', CONFIRMED: 'confirmed', }; /** * Transaction Group Status is a MetaMask construct to track the status of groups * of transactions. * @typedef {Object} TransactionGroupStatuses * @property {'cancelled'} CANCELLED - A cancel type transaction in the group was * confirmed * @property {'pending'} PENDING - The primaryTransaction of the group has a status * that is one of TRANSACTION_STATUSES.APPROVED, TRANSACTION_STATUSES.UNAPPROVED * or TRANSACTION_STATUSES.SUBMITTED */ /** * @type {TransactionGroupStatuses} */ export const TRANSACTION_GROUP_STATUSES = { CANCELLED: 'cancelled', PENDING: 'pending', }; /** * Transaction Group Category is a MetaMask construct to categorize the intent * of a group of transactions for purposes of displaying in the UI * @typedef {Object} TransactionGroupCategories * @property {'send'} SEND - Transaction group representing ether being sent from * the user. * @property {'receive'} RECEIVE - Transaction group representing a deposit/incoming * transaction. This category maps 1:1 with TRANSACTION_CATEGORIES.INCOMING. * @property {'interaction'} INTERACTION - Transaction group representing * an interaction with a smart contract's methods. * @property {'approval'} APPROVAL - Transaction group representing a request for an * allowance of a token to spend on the user's behalf. * @property {'signature-request'} SIGNATURE_REQUEST - Transaction group representing * a signature request This currently only shows up in the UI when its pending user * approval in the UI. Once the user approves or rejects it will no longer show in * activity. * @property {'swap'} SWAP - Transaction group representing a token swap through * MetaMask Swaps. This transaction group's primary currency changes depending * on context. If the user is viewing an asset page for a token received from a swap, * the primary currency will be the received token. Otherwise the token exchanged * will be shown. */ /** * @type {TransactionGroupCategories} */ export const TRANSACTION_GROUP_CATEGORIES = { SEND: 'send', RECEIVE: 'receive', INTERACTION: 'interaction', APPROVAL: 'approval', SIGNATURE_REQUEST: 'signature-request', SWAP: 'swap', };