diff --git a/app/core/Analytics/MetaMetrics.events.ts b/app/core/Analytics/MetaMetrics.events.ts index ca82948b3f19..c7b944f72324 100644 --- a/app/core/Analytics/MetaMetrics.events.ts +++ b/app/core/Analytics/MetaMetrics.events.ts @@ -315,6 +315,8 @@ enum EVENT_NAME { UNSTAKE_TRANSACTION_SUBMITTED = 'Unstake Transaction Submitted', VISITED_ETH_OVERVIEW_WITH_STAKED_POSITIONS = 'Visited ETH Overview with Staked Positions', EARN_TOKEN_LIST_ITEM_CLICKED = 'Earn Token List Item Clicked', + TRANSACTION_SUBMITTED = 'Transaction Submitted', + TRANSACTION_FINALIZED = 'Transaction Finalized', // Force Upgrade | Automatic Security Checks FORCE_UPGRADE_UPDATE_NEEDED_PROMPT_VIEWED = 'Force Upgrade Update Needed Prompt Viewed', @@ -1025,6 +1027,10 @@ const events = { // Bridge BRIDGE_PAGE_VIEWED: generateOpt(EVENT_NAME.BRIDGE_PAGE_VIEWED), SWAP_PAGE_VIEWED: generateOpt(EVENT_NAME.SWAP_PAGE_VIEWED), // Temporary event until unified swap/bridge is done + + // Transactions + TRANSACTION_SUBMITTED: generateOpt(EVENT_NAME.TRANSACTION_SUBMITTED), + TRANSACTION_FINALIZED: generateOpt(EVENT_NAME.TRANSACTION_FINALIZED), }; /** diff --git a/app/core/Engine/Engine.ts b/app/core/Engine/Engine.ts index 1bb06b13f645..613af97fa9bf 100644 --- a/app/core/Engine/Engine.ts +++ b/app/core/Engine/Engine.ts @@ -17,6 +17,9 @@ import { import { AccountsController } from '@metamask/accounts-controller'; import { AddressBookController } from '@metamask/address-book-controller'; import { ComposableController } from '@metamask/composable-controller'; +///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps) +import { Transaction } from '@metamask/keyring-api'; +///: END:ONLY_INCLUDE_IF import { KeyringController, KeyringControllerState, @@ -1475,6 +1478,44 @@ export class Engine { }, ); + ///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps) + this.controllerMessenger.subscribe( + 'MultichainTransactionsController:transactionConfirmed', + (transaction: Transaction) => { + MetaMetrics.getInstance().trackEvent( + MetricsEventBuilder.createEventBuilder(MetaMetricsEvents.TRANSACTION_FINALIZED) + .addProperties({ + id: transaction.id, + timestamp: transaction.timestamp, + chain_id_caip: transaction.chain, + status: transaction.status, + type: transaction.type, + fees: transaction.fees, + }) + .build() + ); + }, + ); + + this.controllerMessenger.subscribe( + 'MultichainTransactionsController:transactionSubmitted', + (transaction: Transaction) => { + MetaMetrics.getInstance().trackEvent( + MetricsEventBuilder.createEventBuilder(MetaMetricsEvents.TRANSACTION_SUBMITTED) + .addProperties({ + id: transaction.id, + timestamp: transaction.timestamp, + chain_id_caip: transaction.chain, + status: transaction.status, + type: transaction.type, + fees: transaction.fees, + }) + .build() + ); + }, + ); + ///: END:ONLY_INCLUDE_IF + ///: BEGIN:ONLY_INCLUDE_IF(preinstalled-snaps,external-snaps) this.controllerMessenger.subscribe( `${snapController.name}:snapTerminated`, diff --git a/app/core/Engine/messengers/multichain-transactions-controller-messenger/types.ts b/app/core/Engine/messengers/multichain-transactions-controller-messenger/types.ts index da473f60d418..43ade579cb22 100644 --- a/app/core/Engine/messengers/multichain-transactions-controller-messenger/types.ts +++ b/app/core/Engine/messengers/multichain-transactions-controller-messenger/types.ts @@ -5,7 +5,7 @@ import { AccountsControllerAccountTransactionsUpdatedEvent, } from '@metamask/accounts-controller'; import { HandleSnapRequest } from '@metamask/snaps-controllers'; - +import { Transaction } from '@metamask/keyring-api'; export type MultichainTransactionsControllerActions = | AccountsControllerListMultichainAccountsAction | HandleSnapRequest; @@ -17,4 +17,12 @@ export type MultichainTransactionsControllerEvents = | { type: 'MultichainTransactionsController:stateChange'; payload: [unknown]; - }; + } + | { + type: 'MultichainTransactionsController:transactionConfirmed'; + payload: [Transaction]; + } + | { + type: 'MultichainTransactionsController:transactionSubmitted'; + payload: [Transaction]; + }; \ No newline at end of file