Repository: MetaMask/metamask-extension
Pull request #31407: feat: Sol 208 extension asset details UI
Author: login: xavier-brochard
Labels: name: team-networks
description: PRs from the Networks team
name: release-12.17.0
description: Issue or pull request that will be included in release 12.17.0
Created: 2025-03-28T16:43:23Z | Merged: 2025-04-08T12:03:22Z

## **Description**

- Adapts the Asset page to support non-EVM / Solana accounts
- Adapts the buttons `Send` and `Swap`
- Chart and market details are left for later, pending [SIP-29](https://metamask.github.io/SIPs/SIPS/sip-29)

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/31407?quickstart=1)

## **Related issues**

Fixes:

## **Manual testing steps**
1. Install
2. Create a Solana account
3. Ensure this account owns some SOL and some SPL token
4. Click on the `Solana` asset
  4.1. Verify that shown data is correct (see capture 1)
  4.2. From this page, click on the `Swap` button, verify that shown data is correct (capture 2)
  4.3. Repeat for the `Bridge` button (capture 3)
  4.4. Repeat for the `Send` button. 
     4.4.1 Make sure the correct `From` account is preselected. Paste a valid `To` address. Make sure that the correct asset (`SOL`) is preselected (capture 4)
8. Go back to the assets list
9. Click on the SPL token
10. Repeat the same steps as for the Solana asset (captures 5, 6, 7 and 8)

## **Screenshots/Recordings**
### Capture 1
![image](https://github.com/user-attachments/assets/7b0f6342-cbdb-4140-9781-46059fd6043c)
### Capture 2
![image](https://github.com/user-attachments/assets/faad096c-cec1-4552-809d-4654ea8086f2)
### Capture 3
![image](https://github.com/user-attachments/assets/52d8f92a-2212-42ff-88f6-fd803c321f39)
### Capture 4
![image](https://github.com/user-attachments/assets/e1a66ba9-99f5-4757-8a03-63e5fa7fe900)
### Capture 5
![image](https://github.com/user-attachments/assets/b5e804b9-6901-4ce8-95fe-1e70a45c2595)
### Capture 6
![image](https://github.com/user-attachments/assets/9bf7c212-5b91-4ed4-9b04-c38c7a345dfe)
### Capture 7
![image](https://github.com/user-attachments/assets/d8751e3e-ab35-4d33-a7b8-530a26afe0df)
### Capture 8
![image](https://github.com/user-attachments/assets/84cd011e-d186-4037-8755-19fb2f704148)

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable
- [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.



Diff:
diff --git a/ui/components/app/assets/asset-list/asset-list.tsx b/ui/components/app/assets/asset-list/asset-list.tsx
index e348dc28fb12..036d58084dbd 100644
--- a/ui/components/app/assets/asset-list/asset-list.tsx
+++ b/ui/components/app/assets/asset-list/asset-list.tsx
@@ -1,22 +1,17 @@
 import React, { useCallback, useContext } from 'react';
 import { useSelector } from 'react-redux';
-import TokenList from '../token-list';
-import {
-  getMultichainIsEvm,
-  getMultichainNetwork,
-} from '../../../../selectors/multichain';
-import { MetaMetricsContext } from '../../../../contexts/metametrics';
 import {
   MetaMetricsEventCategory,
   MetaMetricsEventName,
 } from '../../../../../shared/constants/metametrics';
+import { MetaMetricsContext } from '../../../../contexts/metametrics';
+import { getMultichainIsEvm } from '../../../../selectors/multichain';
 import DetectedToken from '../../detected-token/detected-token';
 import {
   useAssetListTokenDetection,
   usePrimaryCurrencyProperties,
 } from '../hooks';
-import { getSelectedInternalAccount } from '../../../../selectors';
-import { useMultichainSelector } from '../../../../hooks/useMultichainSelector';
+import TokenList from '../token-list';
 import AssetListControlBar from './asset-list-control-bar';
 import AssetListFundingModals from './asset-list-funding-modals';
 
@@ -27,27 +22,20 @@ type AssetListProps = {
 
 const TokenListContainer = React.memo(
   ({ onClickAsset }: Pick<AssetListProps, 'onClickAsset'>) => {
-    const account = useSelector(getSelectedInternalAccount);
-    const { isEvmNetwork } = useMultichainSelector(
-      getMultichainNetwork,
-      account,
-    );
     const trackEvent = useContext(MetaMetricsContext);
     const { primaryCurrencyProperties } = usePrimaryCurrencyProperties();
 
     const onTokenClick = useCallback(
       (chainId: string, tokenAddress: string) => {
-        if (isEvmNetwork) {
-          onClickAsset(chainId, tokenAddress);
-          trackEvent({
-            event: MetaMetricsEventName.TokenScreenOpened,
-            category: MetaMetricsEventCategory.Navigation,
-            properties: {
-              token_symbol: primaryCurrencyProperties.suffix,
-              location: 'Home',
-            },
-          });
-        }
+        onClickAsset(chainId, tokenAddress);
+        trackEvent({
+          event: MetaMetricsEventName.TokenScreenOpened,
+          category: MetaMetricsEventCategory.Navigation,
+          properties: {
+            token_symbol: primaryCurrencyProperties.suffix,
+            location: 'Home',
+          },
+        });
       },
       [],
     );
diff --git a/ui/components/app/transaction-list/transaction-list.component.js b/ui/components/app/transaction-list/transaction-list.component.js
index e90c20ac8d80..7b4a4baed648 100644
--- a/ui/components/app/transaction-list/transaction-list.component.js
+++ b/ui/components/app/transaction-list/transaction-list.component.js
@@ -230,6 +230,34 @@ const groupNonEvmTransactionsByDate = (nonEvmTransactions) =>
     nonEvmTransactions?.transactions,
     (transaction) => transaction.timestamp * 1000,
   );
+
+/**
+ * Returns a copy of the nonEvmTransactions object with only the transactions that involve the tokenAddress.
+ *
+ * @param nonEvmTransactions - The nonEvmTransactions object.
+ * @param tokenAddress - [Optional] The address of the token to filter for. Returns all transactions if not provided.
+ * @returns A copy of the nonEvmTransactions object with only the transactions
+ * that involve the tokenAddress.
+ */
+export const filterTransactionsByToken = (
+  nonEvmTransactions = { transactions: [] },
+  tokenAddress,
+) => {
+  if (!tokenAddress) {
+    return nonEvmTransactions;
+  }
+
+  const transactionForToken = (nonEvmTransactions.transactions || []).filter(
+    (transaction) => {
+      return transaction.to.some((item) => item.asset.type === tokenAddress);
+    },
+  );
+
+  return {
+    ...nonEvmTransactions,
+    transactions: transactionForToken,
+  };
+};
 ///: END:ONLY_INCLUDE_IF
 
 export default function TransactionList({
@@ -253,9 +281,15 @@ export default function TransactionList({
     getSelectedAccountMultichainTransactions,
   );
 
+  const nonEvmTransactionFilteredByToken = filterTransactionsByToken(
+    nonEvmTransactions,
+    tokenAddress,
+  );
+
   // Use our custom hook to map Solana bridge transactions with destination chain info
-  const modifiedNonEvmTransactions =
-    useSolanaBridgeTransactionMapping(nonEvmTransactions);
+  const modifiedNonEvmTransactions = useSolanaBridgeTransactionMapping(
+    nonEvmTransactionFilteredByToken,
+  );
   ///: END:ONLY_INCLUDE_IF
 
   const unfilteredPendingTransactionsCurrentChain = useSelector(
@@ -485,7 +519,8 @@ export default function TransactionList({
             {nonEvmTransactions?.transactions.length > 0 ? (
               <Box className="transaction-list__completed-transactions">
                 {groupNonEvmTransactionsByDate(
-                  modifiedNonEvmTransactions || nonEvmTransactions,
+                  modifiedNonEvmTransactions ||
+                    nonEvmTransactionFilteredByToken,
                 ).map((dateGroup) => (
                   <Fragment key={dateGroup.date}>
                     <Text
diff --git a/ui/components/app/transaction-list/transaction-list.test.js b/ui/components/app/transaction-list/transaction-list.test.js
index ede3ada3980d..65c8f34d8131 100644
--- a/ui/components/app/transaction-list/transaction-list.test.js
+++ b/ui/components/app/transaction-list/transaction-list.test.js
@@ -21,7 +21,9 @@ import {
 import { formatBlockExplorerAddressUrl } from '../../../../shared/lib/multichain/networks';
 import { MOCK_TRANSACTION_BY_TYPE } from '../../../../.storybook/initial-states/transactions';
 import { createMockInternalAccount } from '../../../../test/jest/mocks';
-import TransactionList from './transaction-list.component';
+import TransactionList, {
+  filterTransactionsByToken,
+} from './transaction-list.component';
 
 const MOCK_INTERNAL_ACCOUNT = createMockInternalAccount({
   address: '0xefga64466f257793eaa52fcfff5066894b76a149',
@@ -342,4 +344,72 @@ describe('TransactionList', () => {
     });
     expect(viewOnExplorerBtn).toBeInTheDocument();
   });
+
+  describe('keepOnlyNonEvmTransactionsForToken', () => {
+    const transactionWithSolAndToken = {
+      to: [
+        {
+          asset: {
+            type: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+          },
+        },
+        {
+          asset: {
+            type: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+          },
+        },
+      ],
+    };
+    const transactionWithOnlySol = {
+      to: [
+        {
+          asset: {
+            type: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+          },
+        },
+      ],
+    };
+    const transactionWithOnlyToken = {
+      to: [
+        {
+          asset: {
+            type: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+          },
+        },
+      ],
+    };
+
+    const nonEvmTransactions = {
+      transactions: [
+        transactionWithSolAndToken,
+        transactionWithOnlySol,
+        transactionWithOnlyToken,
+      ],
+    };
+
+    it('filters out transactions that do not involve the token address', () => {
+      const tokenAddress =
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
+
+      const result = filterTransactionsByToken(
+        nonEvmTransactions,
+        tokenAddress,
+      );
+
+      expect(result).toStrictEqual({
+        transactions: [transactionWithSolAndToken, transactionWithOnlyToken],
+      });
+    });
+
+    it('returns the original object if no token address is provided', () => {
+      const tokenAddress = undefined;
+
+      const result = filterTransactionsByToken(
+        nonEvmTransactions,
+        tokenAddress,
+      );
+
+      expect(result).toStrictEqual(nonEvmTransactions);
+    });
+  });
 });
diff --git a/ui/components/app/wallet-overview/coin-buttons.tsx b/ui/components/app/wallet-overview/coin-buttons.tsx
index 63088c9f34b5..31c9691b2e6e 100644
--- a/ui/components/app/wallet-overview/coin-buttons.tsx
+++ b/ui/components/app/wallet-overview/coin-buttons.tsx
@@ -1,11 +1,4 @@
-import React, {
-  useCallback,
-  useContext,
-  useState,
-  ///: BEGIN:ONLY_INCLUDE_IF(multichain)
-  useEffect,
-  ///: END:ONLY_INCLUDE_IF
-} from 'react';
+import React, { useCallback, useContext, useState } from 'react';
 import { useDispatch, useSelector } from 'react-redux';
 import {
   useHistory,
@@ -26,7 +19,6 @@ import {
 ///: BEGIN:ONLY_INCLUDE_IF(multichain)
 import { isEvmAccountType } from '@metamask/keyring-api';
 import { InternalAccount } from '@metamask/keyring-internal-api';
-import { SnapId } from '@metamask/snaps-sdk';
 ///: END:ONLY_INCLUDE_IF
 ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
 import { ChainId } from '../../../../shared/constants/network';
@@ -34,9 +26,6 @@ import { ChainId } from '../../../../shared/constants/network';
 
 import { I18nContext } from '../../../contexts/i18n';
 import {
-  ///: BEGIN:ONLY_INCLUDE_IF(multichain)
-  CONFIRMATION_V_NEXT_ROUTE,
-  ///: END:ONLY_INCLUDE_IF
   ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
   PREPARE_SWAP_ROUTE,
   ///: END:ONLY_INCLUDE_IF
@@ -48,9 +37,6 @@ import {
   getCurrentKeyring,
   ///: END:ONLY_INCLUDE_IF
   getUseExternalServices,
-  ///: BEGIN:ONLY_INCLUDE_IF(multichain)
-  getMemoizedUnapprovedTemplatedConfirmations,
-  ///: END:ONLY_INCLUDE_IF
   getNetworkConfigurationIdByChainId,
   isNonEvmAccount,
 } from '../../../selectors';
@@ -84,14 +70,7 @@ import { ReceiveModal } from '../../multichain/receive-modal';
 import {
   setSwitchedNetworkDetails,
   setActiveNetworkWithError,
-  ///: BEGIN:ONLY_INCLUDE_IF(multichain)
-  sendMultichainTransaction,
-  setDefaultHomeActiveTabName,
-  ///: END:ONLY_INCLUDE_IF
 } from '../../../store/actions';
-///: BEGIN:ONLY_INCLUDE_IF(multichain)
-import { isMultichainWalletSnap } from '../../../../shared/lib/accounts/snaps';
-///: END:ONLY_INCLUDE_IF
 import {
   getMultichainNativeCurrency,
   getMultichainNetwork,
@@ -101,6 +80,9 @@ import { getCurrentChainId } from '../../../../shared/modules/selectors/networks
 ///: BEGIN:ONLY_INCLUDE_IF(solana-swaps)
 import { MultichainNetworks } from '../../../../shared/constants/multichain/networks';
 ///: END:ONLY_INCLUDE_IF
+///: BEGIN:ONLY_INCLUDE_IF(multichain)
+import { useHandleSendNonEvm } from './hooks/useHandleSendNonEvm';
+///: END:ONLY_INCLUDE_IF
 
 type CoinButtonsProps = {
   account: InternalAccount;
@@ -144,12 +126,11 @@ const CoinButtons = ({
     string
   >;
   const currentChainId = useSelector(getCurrentChainId);
+
   ///: BEGIN:ONLY_INCLUDE_IF(multichain)
-  const currentActivityTabName = useSelector(
-    // @ts-expect-error TODO: fix state type
-    (state) => state.metamask.defaultHomeActiveTabName,
-  );
+  const handleSendNonEvm = useHandleSendNonEvm();
   ///: END:ONLY_INCLUDE_IF
+
   ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
   const location = useLocation();
   const keyring = useSelector(getCurrentKeyring);
@@ -244,29 +225,6 @@ const CoinButtons = ({
   const { openBridgeExperience } = useBridging();
   ///: END:ONLY_INCLUDE_IF
 
-  ///: BEGIN:ONLY_INCLUDE_IF(multichain)
-  const unapprovedTemplatedConfirmations = useSelector(
-    getMemoizedUnapprovedTemplatedConfirmations,
-  );
-
-  useEffect(() => {
-    const templatedSnapApproval = unapprovedTemplatedConfirmations.find(
-      (approval) => {
-        return (
-          approval.type === 'snap_dialog' &&
-          account.metadata.snap &&
-          account.metadata.snap.id === approval.origin &&
-          isMultichainWalletSnap(account.metadata.snap.id as SnapId)
-        );
-      },
-    );
-
-    if (templatedSnapApproval) {
-      history.push(`${CONFIRMATION_V_NEXT_ROUTE}/${templatedSnapApproval.id}`);
-    }
-  }, [unapprovedTemplatedConfirmations, history, account]);
-  ///: END:ONLY_INCLUDE_IF
-
   const setCorrectChain = useCallback(async () => {
     if (currentChainId !== chainId && multichainChainId !== chainId) {
       try {
@@ -305,31 +263,7 @@ const CoinButtons = ({
 
     ///: BEGIN:ONLY_INCLUDE_IF(multichain)
     if (!isEvmAccountType(account.type)) {
-      // Non-EVM (Snap) Send flow
-      if (!account.metadata.snap) {
-        throw new Error('Non-EVM needs to be Snap accounts');
-      }
-
-      // TODO: Remove this once we want to enable all non-EVM Snaps
-      if (!isMultichainWalletSnap(account.metadata.snap.id as SnapId)) {
-        throw new Error(
-          `Non-EVM Snap is not whitelisted: ${account.metadata.snap.id}`,
-        );
-      }
-
-      try {
-        // FIXME: We switch the tab before starting the send flow (we
-        // faced some inconsistencies when changing it after).
-        await dispatch(setDefaultHomeActiveTabName('activity'));
-        await sendMultichainTransaction(account.metadata.snap.id, {
-          account: account.id,
-          scope: chainId as CaipChainId,
-        });
-      } catch {
-        // Restore the previous tab in case of any error (see FIXME comment above).
-        await dispatch(setDefaultHomeActiveTabName(currentActivityTabName));
-      }
-
+      await handleSendNonEvm();
       // Early return, not to let the non-EVM flow slip into the native send flow.
       return;
     }
@@ -339,7 +273,14 @@ const CoinButtons = ({
     await setCorrectChain();
     await dispatch(startNewDraftTransaction({ type: AssetType.native }));
     history.push(SEND_ROUTE);
-  }, [chainId, account, setCorrectChain]);
+  }, [
+    chainId,
+    account,
+    setCorrectChain,
+    ///: BEGIN:ONLY_INCLUDE_IF(multichain)
+    handleSendNonEvm,
+    ///: END:ONLY_INCLUDE_IF
+  ]);
 
   ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
   const handleBuyAndSellOnClick = useCallback(() => {
diff --git a/ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.test.ts b/ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.test.ts
new file mode 100644
index 000000000000..606996470b73
--- /dev/null
+++ b/ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.test.ts
@@ -0,0 +1,249 @@
+import { renderHookWithProvider } from '../../../../../test/lib/render-helpers';
+import {
+  sendMultichainTransaction,
+  setDefaultHomeActiveTabName,
+} from '../../../../store/actions';
+import { SOLANA_WALLET_SNAP_ID } from '../../../../../shared/lib/accounts/solana-wallet-snap';
+import { CONFIRMATION_V_NEXT_ROUTE } from '../../../../helpers/constants/routes';
+import { useHandleSendNonEvm } from './useHandleSendNonEvm';
+
+jest.mock('../../../../store/actions', () => ({
+  sendMultichainTransaction: jest.fn(),
+  setDefaultHomeActiveTabName: jest.fn(),
+}));
+
+const mockDispatch = jest.fn();
+jest.mock('react-redux', () => {
+  const actual = jest.requireActual('react-redux');
+  return {
+    ...actual,
+    useDispatch: () => mockDispatch,
+  };
+});
+
+const mockHistory = {
+  push: jest.fn(),
+};
+
+jest.mock('react-router-dom', () => ({
+  ...jest.requireActual('react-router-dom'),
+  useHistory: () => mockHistory,
+}));
+
+const mockState = {
+  metamask: {
+    internalAccounts: {
+      accounts: {
+        '5132883f-598e-482c-a02b-84eeaa352f5b': {
+          id: '5132883f-598e-482c-a02b-84eeaa352f5b',
+          address: '8A4AptCThfbuknsbteHgGKXczfJpfjuVA9SLTSGaaLGC',
+          type: 'solana:data-account',
+          metadata: {
+            snap: {
+              id: SOLANA_WALLET_SNAP_ID,
+            },
+          },
+        },
+      },
+      selectedAccount: '5132883f-598e-482c-a02b-84eeaa352f5b',
+    },
+    accountsAssets: {
+      '5132883f-598e-482c-a02b-84eeaa352f5b': [
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+      ],
+    },
+    networkConfigurationsByChainId: {},
+    completedOnboarding: true,
+    pendingApprovals: [
+      {
+        id: '1',
+        type: 'snap_dialog',
+        origin: SOLANA_WALLET_SNAP_ID,
+        requestData: {},
+      },
+    ],
+    defaultHomeActiveTabName: 'activity',
+  },
+};
+
+describe('useHandleSendNonEvm', () => {
+  it('throws an error if the selected account has no snap metadata', async () => {
+    const mockStateWithoutSnapMetadata = {
+      metamask: {
+        ...mockState.metamask,
+        internalAccounts: {
+          accounts: {
+            '5132883f-598e-482c-a02b-84eeaa352f5b': {
+              id: '5132883f-598e-482c-a02b-84eeaa352f5b',
+              address: '8A4AptCThfbuknsbteHgGKXczfJpfjuVA9SLTSGaaLGC',
+              type: 'solana:data-account',
+              metadata: {}, // No snap metadata
+            },
+          },
+          selectedAccount: '5132883f-598e-482c-a02b-84eeaa352f5b',
+        },
+      },
+    };
+    const { result } = renderHookWithProvider(
+      () => useHandleSendNonEvm(),
+      mockStateWithoutSnapMetadata,
+    );
+    const handleSendNonEvm = result.current;
+
+    await expect(handleSendNonEvm()).rejects.toThrow(
+      'Non-EVM needs to be Snap accounts',
+    );
+  });
+
+  it('throws an error if the selected account is not a Snap account', async () => {
+    const mockStateWithoutSnapMetadata = {
+      metamask: {
+        ...mockState.metamask,
+        internalAccounts: {
+          accounts: {
+            '5132883f-598e-482c-a02b-84eeaa352f5b': {
+              id: '5132883f-598e-482c-a02b-84eeaa352f5b',
+              address: '8A4AptCThfbuknsbteHgGKXczfJpfjuVA9SLTSGaaLGC',
+              type: 'solana:data-account',
+              metadata: {
+                snap: {
+                  id: 'some-wrong-id',
+                },
+              },
+            },
+          },
+          selectedAccount: '5132883f-598e-482c-a02b-84eeaa352f5b',
+        },
+      },
+    };
+    const { result } = renderHookWithProvider(
+      () => useHandleSendNonEvm(),
+      mockStateWithoutSnapMetadata,
+    );
+    const handleSendNonEvm = result.current;
+
+    await expect(handleSendNonEvm()).rejects.toThrow(
+      'Non-EVM Snap is not whitelisted: some-wrong-id',
+    );
+  });
+
+  it('restores the previous tab in case of error with the snap', async () => {
+    (sendMultichainTransaction as jest.Mock).mockRejectedValue(
+      new Error('Error'),
+    );
+    const { result } = renderHookWithProvider(
+      () => useHandleSendNonEvm(),
+      mockState,
+    );
+    const handleSendNonEvm = result.current;
+
+    await handleSendNonEvm();
+
+    expect(setDefaultHomeActiveTabName).toHaveBeenCalledWith('activity');
+  });
+
+  describe('when a caipAssetType is provided', () => {
+    it('returns the caipAssetType', async () => {
+      const { result } = renderHookWithProvider(
+        () =>
+          useHandleSendNonEvm(
+            'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+          ),
+        mockState,
+      );
+      const handleSendNonEvm = result.current;
+
+      await handleSendNonEvm();
+
+      expect(sendMultichainTransaction).toHaveBeenCalledWith(
+        SOLANA_WALLET_SNAP_ID,
+        {
+          account: '5132883f-598e-482c-a02b-84eeaa352f5b',
+          scope: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
+          assetType:
+            'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+        },
+      );
+    });
+
+    it('pushes the confirmation page in history', async () => {
+      const { result } = renderHookWithProvider(
+        () =>
+          useHandleSendNonEvm(
+            'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+          ),
+        mockState,
+      );
+      const handleSendNonEvm = result.current;
+
+      await handleSendNonEvm();
+
+      expect(mockHistory.push).toHaveBeenCalledWith(
+        `${CONFIRMATION_V_NEXT_ROUTE}/${mockState.metamask.pendingApprovals[0].id}`,
+      );
+    });
+  });
+
+  describe('when a caipAssetType is not provided', () => {
+    describe('and the selected account has a native asset', () => {
+      it("returns the chain's native asset", async () => {
+        const { result } = renderHookWithProvider(
+          () => useHandleSendNonEvm(),
+          mockState,
+        );
+        const handleSendNonEvm = result.current;
+
+        await handleSendNonEvm();
+
+        expect(sendMultichainTransaction).toHaveBeenCalledWith(
+          SOLANA_WALLET_SNAP_ID,
+          {
+            account: '5132883f-598e-482c-a02b-84eeaa352f5b',
+            scope: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
+            assetType: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+          },
+        );
+      });
+
+      it('pushes the confirmation page in history', async () => {
+        const { result } = renderHookWithProvider(
+          () => useHandleSendNonEvm(),
+          mockState,
+        );
+        const handleSendNonEvm = result.current;
+
+        await handleSendNonEvm();
+
+        expect(mockHistory.push).toHaveBeenCalledWith(
+          `${CONFIRMATION_V_NEXT_ROUTE}/${mockState.metamask.pendingApprovals[0].id}`,
+        );
+      });
+    });
+
+    describe('and the selected account has no native asset', () => {
+      it('throws an error', async () => {
+        const mockStateWithoutNativeAsset = {
+          metamask: {
+            ...mockState.metamask,
+            accountsAssets: {
+              '5132883f-598e-482c-a02b-84eeaa352f5b': [
+                // No native asset
+                'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+              ],
+            },
+          },
+        };
+        const { result } = renderHookWithProvider(
+          () => useHandleSendNonEvm(),
+          mockStateWithoutNativeAsset,
+        );
+        const handleSendNonEvm = result.current;
+
+        await expect(handleSendNonEvm()).rejects.toThrow(
+          'No CAIP asset type provided, and could not find a fallback native asset for the selected account',
+        );
+      });
+    });
+  });
+});
diff --git a/ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.ts b/ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.ts
new file mode 100644
index 000000000000..5f26cee4b85e
--- /dev/null
+++ b/ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.ts
@@ -0,0 +1,105 @@
+import { SnapId } from '@metamask/snaps-sdk';
+import { parseCaipAssetType, CaipAssetType } from '@metamask/utils';
+import { useEffect } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { useHistory } from 'react-router-dom';
+import {
+  sendMultichainTransaction,
+  setDefaultHomeActiveTabName,
+} from '../../../../store/actions';
+import {
+  getMemoizedUnapprovedTemplatedConfirmations,
+  getSelectedInternalAccount,
+} from '../../../../selectors';
+import { isMultichainWalletSnap } from '../../../../../shared/lib/accounts/snaps';
+import { CONFIRMATION_V_NEXT_ROUTE } from '../../../../helpers/constants/routes';
+import { useMultichainSelector } from '../../../../hooks/useMultichainSelector';
+import { getMultichainNativeAssetType } from '../../../../selectors/assets';
+
+/**
+ * Use this hook to trigger the send flow for non-EVM accounts.
+ *
+ * On non-EVM, the send flow is delegated to a Snap that displays the UI,
+ * builds the transaction, and sends it to the blockchain.
+ *
+ * @param caipAssetType - The optional CAIP asset type to use for the send flow. Defaults to the chain's native asset if not provided.
+ * @returns A function that triggers the send flow for non-EVM accounts.
+ */
+export const useHandleSendNonEvm = (caipAssetType?: CaipAssetType) => {
+  const nativeAssetType = useMultichainSelector(getMultichainNativeAssetType);
+
+  const account = useSelector(getSelectedInternalAccount);
+  const history = useHistory();
+  const dispatch = useDispatch();
+
+  const currentActivityTabName = useSelector(
+    // @ts-expect-error TODO: fix state type
+    (state) => state.metamask.defaultHomeActiveTabName,
+  );
+
+  const unapprovedTemplatedConfirmations = useSelector(
+    getMemoizedUnapprovedTemplatedConfirmations,
+  );
+
+  useEffect(() => {
+    const templatedSnapApproval = unapprovedTemplatedConfirmations.find(
+      (approval) => {
+        return (
+          approval.type === 'snap_dialog' &&
+          account.metadata.snap &&
+          account.metadata.snap.id === approval.origin &&
+          isMultichainWalletSnap(account.metadata.snap.id as SnapId)
+        );
+      },
+    );
+
+    if (templatedSnapApproval) {
+      history.push(`${CONFIRMATION_V_NEXT_ROUTE}/${templatedSnapApproval.id}`);
+    }
+  }, [unapprovedTemplatedConfirmations, history, account]);
+
+  return async () => {
+    // Non-EVM (Snap) Send flow
+    if (!account.metadata.snap) {
+      throw new Error('Non-EVM needs to be Snap accounts');
+    }
+
+    // TODO: Remove this once we want to enable all non-EVM Snaps
+    if (!isMultichainWalletSnap(account.metadata.snap.id as SnapId)) {
+      throw new Error(
+        `Non-EVM Snap is not whitelisted: ${account.metadata.snap.id}`,
+      );
+    }
+
+    // Either use the passed caipAssetType, or fallback to the chain's native asset
+    const assetTypeToUse = (() => {
+      if (caipAssetType) {
+        return caipAssetType;
+      }
+
+      if (!nativeAssetType) {
+        throw new Error(
+          'No CAIP asset type provided, and could not find a fallback native asset for the selected account',
+        );
+      }
+
+      return nativeAssetType;
+    })();
+
+    const { chainId } = parseCaipAssetType(assetTypeToUse);
+
+    try {
+      // FIXME: We switch the tab before starting the send flow (we
+      // faced some inconsistencies when changing it after).
+      await dispatch(setDefaultHomeActiveTabName('activity'));
+      await sendMultichainTransaction(account.metadata.snap.id, {
+        account: account.id,
+        scope: chainId,
+        assetType: assetTypeToUse,
+      });
+    } catch (error) {
+      // Restore the previous tab in case of any error (see FIXME comment above).
+      await dispatch(setDefaultHomeActiveTabName(currentActivityTabName));
+    }
+  };
+};
diff --git a/ui/components/multichain/account-overview/account-overview-tabs.tsx b/ui/components/multichain/account-overview/account-overview-tabs.tsx
index 9d98fce45bca..ab42e61e25f2 100644
--- a/ui/components/multichain/account-overview/account-overview-tabs.tsx
+++ b/ui/components/multichain/account-overview/account-overview-tabs.tsx
@@ -116,7 +116,7 @@ export const AccountOverviewTabs = ({
 
   const onClickAsset = useCallback(
     (chainId: string, asset: string) =>
-      history.push(`${ASSET_ROUTE}/${chainId}/${asset}`),
+      history.push(`${ASSET_ROUTE}/${chainId}/${encodeURIComponent(asset)}`),
     [history],
   );
 
diff --git a/ui/components/ui/aggregated-balance/aggregated-balance.tsx b/ui/components/ui/aggregated-balance/aggregated-balance.tsx
index fc46a1e97a5b..1a8e0ff74ae6 100644
--- a/ui/components/ui/aggregated-balance/aggregated-balance.tsx
+++ b/ui/components/ui/aggregated-balance/aggregated-balance.tsx
@@ -66,7 +66,7 @@ export const AggregatedBalance = ({
   );
 
   const formattedTokenDisplay = formatWithThreshold(
-    multichainNativeTokenBalance.amount,
+    parseFloat(multichainNativeTokenBalance.amount.toString()),
     0.0,
     locale,
     {
diff --git a/ui/pages/asset/asset.tsx b/ui/pages/asset/asset.tsx
index f8efd94c8bf2..fcbb6c1bc223 100644
--- a/ui/pages/asset/asset.tsx
+++ b/ui/pages/asset/asset.tsx
@@ -1,38 +1,43 @@
+import { Nft } from '@metamask/assets-controllers';
+import { Hex } from '@metamask/utils';
 import React, { useEffect } from 'react';
 import { useSelector } from 'react-redux';
 import { Redirect, useParams } from 'react-router-dom';
-import { Hex } from '@metamask/utils';
-import { Nft } from '@metamask/assets-controllers';
 import { isEqualCaseInsensitive } from '../../../shared/modules/string-utils';
 import NftDetails from '../../components/app/assets/nfts/nft-details/nft-details';
-import { getSelectedAccountTokensAcrossChains } from '../../selectors';
 import { getNFTsByChainId } from '../../ducks/metamask/metamask';
 import { DEFAULT_ROUTE } from '../../helpers/constants/routes';
-import { Token } from '../../components/app/assets/types';
-import TokenAsset from './components/token-asset';
-import { findAssetByAddress } from './util';
+import { getTokenByAccountAndAddressAndChainId } from '../../selectors/assets';
 import NativeAsset from './components/native-asset';
+import TokenAsset from './components/token-asset';
 
 /** A page representing a native, token, or NFT asset */
 const Asset = () => {
-  const selectedAccountTokensChains: Record<Hex, Token[]> = useSelector(
-    getSelectedAccountTokensAcrossChains,
-  ) as Record<Hex, Token[]>;
   const params = useParams<{
     chainId: Hex;
     asset: string;
     id: string;
   }>();
+
   const { chainId, asset, id } = params;
+  const decodedAsset = asset ? decodeURIComponent(asset) : undefined;
 
   const nfts = useSelector((state) => getNFTsByChainId(state, chainId));
 
-  const token = findAssetByAddress(selectedAccountTokensChains, asset, chainId);
+  const token = useSelector((state) =>
+    getTokenByAccountAndAddressAndChainId(
+      state,
+      undefined, // Defaults to the selected account
+      decodedAsset,
+      chainId,
+    ),
+  );
 
   const nft: Nft = nfts.find(
     ({ address, tokenId }: { address: Hex; tokenId: string }) =>
       // @ts-expect-error TODO: Fix this type error by handling undefined parameters
-      isEqualCaseInsensitive(address, asset) && id === tokenId.toString(),
+      isEqualCaseInsensitive(address, decodedAsset) &&
+      id === tokenId.toString(),
   );
 
   useEffect(() => {
@@ -40,18 +45,24 @@ const Asset = () => {
     el?.scroll(0, 0);
   }, []);
 
-  let content;
-  if (nft) {
-    content = <NftDetails nft={nft} />;
-  } else if (token && chainId) {
-    if (token?.address) {
-      content = <TokenAsset chainId={chainId} token={token} />;
-    } else {
-      content = <NativeAsset chainId={chainId} token={token} />;
+  const content = (() => {
+    if (nft) {
+      return <NftDetails nft={nft} />;
+    }
+
+    const isInvalid = !token || !chainId;
+    if (isInvalid) {
+      return <Redirect to={{ pathname: DEFAULT_ROUTE }} />;
     }
-  } else {
-    content = <Redirect to={{ pathname: DEFAULT_ROUTE }} />;
-  }
+
+    const shouldShowToken = !token.isNative && token.address;
+    if (shouldShowToken) {
+      return <TokenAsset chainId={chainId} token={token} />;
+    }
+
+    return <NativeAsset chainId={chainId} token={token} />;
+  })();
+
   return <div className="main-container asset__container">{content}</div>;
 };
 
diff --git a/ui/pages/asset/components/asset-options.js b/ui/pages/asset/components/asset-options.js
index 8b2073cf943f..7a98028304ae 100644
--- a/ui/pages/asset/components/asset-options.js
+++ b/ui/pages/asset/components/asset-options.js
@@ -13,6 +13,7 @@ import {
   IconName,
 } from '../../../components/component-library';
 import { Color } from '../../../helpers/constants/design-system';
+import { getMultichainIsEvm } from '../../../selectors/multichain';
 
 const AssetOptions = ({
   onRemove,
@@ -26,6 +27,7 @@ const AssetOptions = ({
   const history = useHistory();
   const blockExplorerLinkText = useSelector(getBlockExplorerLinkText);
   const ref = useRef(false);
+  const isEvm = useSelector(getMultichainIsEvm);
 
   const routeToAddBlockExplorerUrl = () => {
     history.push(`${NETWORKS_ROUTE}#blockExplorerUrl`);
@@ -36,6 +38,8 @@ const AssetOptions = ({
     onClickBlockExplorer();
   };
 
+  const shouldShowHideTokenButton = isEvm && !isNativeAsset;
+
   return (
     <div ref={ref}>
       <ButtonIcon
@@ -68,7 +72,7 @@ const AssetOptions = ({
                 : [t('blockExplorerAssetAction')],
             )}
           </MenuItem>
-          {isNativeAsset ? null : (
+          {shouldShowHideTokenButton && (
             <MenuItem
               iconName={IconName.Trash}
               data-testid="asset-options__hide"
diff --git a/ui/pages/asset/components/asset-page.tsx b/ui/pages/asset/components/asset-page.tsx
index 8e6f90a44fef..eb05cf8a421e 100644
--- a/ui/pages/asset/components/asset-page.tsx
+++ b/ui/pages/asset/components/asset-page.tsx
@@ -1,34 +1,18 @@
+import { getNativeTokenAddress } from '@metamask/assets-controllers';
+import { EthMethod, SolMethod } from '@metamask/keyring-api';
+import { CaipAssetType, Hex, parseCaipAssetType } from '@metamask/utils';
+import { isEqual } from 'lodash';
 import React, { ReactNode, useMemo } from 'react';
-import { useHistory } from 'react-router-dom';
 import { useSelector } from 'react-redux';
-import { EthMethod } from '@metamask/keyring-api';
-import { isEqual } from 'lodash';
-import { getNativeTokenAddress } from '@metamask/assets-controllers';
-import { Hex } from '@metamask/utils';
-import {
-  getDataCollectionForMarketing,
-  getIsBridgeChain,
-  getIsSwapsChain,
-  getMetaMetricsId,
-  getParticipateInMetaMetrics,
-  getSelectedInternalAccount,
-  getSwapsDefaultToken,
-  getMarketData,
-  getCurrencyRates,
-  getSelectedAccountNativeTokenCachedBalanceByChainId,
-  getSelectedAccount,
-  getIsTestnet,
-  getShowFiatInTestnets,
-} from '../../../selectors';
-import {
-  AlignItems,
-  Display,
-  FlexDirection,
-  IconColor,
-  JustifyContent,
-  TextColor,
-  TextVariant,
-} from '../../../helpers/constants/design-system';
+import { useHistory } from 'react-router-dom';
+import { AssetType } from '../../../../shared/constants/transaction';
+import { hexToDecimal } from '../../../../shared/modules/conversion.utils';
+import { toChecksumHexAddress } from '../../../../shared/modules/hexstring-utils';
+import useMultiChainAssets from '../../../components/app/assets/hooks/useMultichainAssets';
+import TokenCell from '../../../components/app/assets/token-cell';
+import { calculateTokenBalance } from '../../../components/app/assets/util/calculateTokenBalance';
+import TransactionList from '../../../components/app/transaction-list';
+import CoinButtons from '../../../components/app/wallet-overview/coin-buttons';
 import {
   AvatarNetwork,
   AvatarNetworkSize,
@@ -39,31 +23,48 @@ import {
   IconName,
   Text,
 } from '../../../components/component-library';
-import { formatCurrency } from '../../../helpers/utils/confirm-tx.util';
-import { useI18nContext } from '../../../hooks/useI18nContext';
 import { AddressCopyButton } from '../../../components/multichain';
-import { AssetType } from '../../../../shared/constants/transaction';
-import TokenCell from '../../../components/app/assets/token-cell';
-import TransactionList from '../../../components/app/transaction-list';
-import { getPricePrecision, localizeLargeNumber } from '../util';
-import { DEFAULT_ROUTE } from '../../../helpers/constants/routes';
-import {
-  getConversionRate,
-  getCurrentCurrency,
-} from '../../../ducks/metamask/metamask';
-import { toChecksumHexAddress } from '../../../../shared/modules/hexstring-utils';
-import CoinButtons from '../../../components/app/wallet-overview/coin-buttons';
+import { getCurrentCurrency } from '../../../ducks/metamask/metamask';
 import { getIsNativeTokenBuyable } from '../../../ducks/ramps';
-import { calculateTokenBalance } from '../../../components/app/assets/util/calculateTokenBalance';
-import { useTokenBalances } from '../../../hooks/useTokenBalances';
+import {
+  AlignItems,
+  Display,
+  FlexDirection,
+  IconColor,
+  JustifyContent,
+  TextColor,
+  TextVariant,
+} from '../../../helpers/constants/design-system';
+import { DEFAULT_ROUTE } from '../../../helpers/constants/routes';
+import { formatCurrency } from '../../../helpers/utils/confirm-tx.util';
+import { getPortfolioUrl } from '../../../helpers/utils/portfolio';
+import { useI18nContext } from '../../../hooks/useI18nContext';
 import { useMultichainSelector } from '../../../hooks/useMultichainSelector';
+import { useTokenBalances } from '../../../hooks/useTokenBalances';
+import {
+  getCurrencyRates,
+  getDataCollectionForMarketing,
+  getIsBridgeChain,
+  getIsSwapsChain,
+  getMarketData,
+  getMetaMetricsId,
+  getParticipateInMetaMetrics,
+  getSelectedAccount,
+  getSelectedAccountNativeTokenCachedBalanceByChainId,
+  getSelectedInternalAccount,
+  getShowFiatInTestnets,
+  getSwapsDefaultToken,
+} from '../../../selectors';
 import {
   getImageForChainId,
+  getMultichainConversionRate,
+  getMultichainIsEvm,
+  getMultichainIsTestnet,
+  getMultichainNetworkConfigurationsByChainId,
   getMultichainShouldShowFiat,
 } from '../../../selectors/multichain';
-import { getNetworkConfigurationsByChainId } from '../../../../shared/modules/selectors/networks';
-import { getPortfolioUrl } from '../../../helpers/utils/portfolio';
-import { hexToDecimal } from '../../../../shared/modules/conversion.utils';
+import { getPricePrecision, localizeLargeNumber } from '../util';
+import { TokenWithFiatAmount } from '../../../components/app/assets/types';
 import AssetChart from './chart/asset-chart';
 import TokenButtons from './token-buttons';
 
@@ -110,11 +111,14 @@ const AssetPage = ({
   const history = useHistory();
   const selectedAccount = useSelector(getSelectedAccount);
   const currency = useSelector(getCurrentCurrency);
-  const conversionRate = useSelector(getConversionRate);
+  const conversionRate = useMultichainSelector(getMultichainConversionRate);
   const isBuyableChain = useSelector(getIsNativeTokenBuyable);
+  const isEvm = useMultichainSelector(getMultichainIsEvm);
 
   const { chainId, type, symbol, name, image, decimals } = asset;
 
+  const isNative = type === AssetType.native;
+
   // These need to be specific to the asset and not the current chain
   const defaultSwapsToken = useSelector(
     (state) => getSwapsDefaultToken(state, chainId),
@@ -128,16 +132,14 @@ const AssetPage = ({
   const account = useSelector(getSelectedInternalAccount, isEqual);
   const isSigningEnabled =
     account.methods.includes(EthMethod.SignTransaction) ||
-    account.methods.includes(EthMethod.SignUserOperation);
+    account.methods.includes(EthMethod.SignUserOperation) ||
+    account.methods.includes(SolMethod.SignTransaction);
 
   const marketData = useSelector(getMarketData);
   const currencyRates = useSelector(getCurrencyRates);
 
-  const isTestnet = useSelector(getIsTestnet);
-  const shouldShowFiat = useMultichainSelector(
-    getMultichainShouldShowFiat,
-    selectedAccount,
-  );
+  const isTestnet = useMultichainSelector(getMultichainIsTestnet);
+  const shouldShowFiat = useMultichainSelector(getMultichainShouldShowFiat);
   const isMainnet = !isTestnet;
   // Check if show conversion is enabled
   const showFiatInTestnets = useSelector(getShowFiatInTestnets);
@@ -149,23 +151,51 @@ const AssetPage = ({
   ) as Record<Hex, Hex>;
 
   const { tokenBalances } = useTokenBalances({ chainIds: [chainId] });
+
   const selectedAccountTokenBalancesAcrossChains =
     tokenBalances[selectedAccount.address];
 
+  const multiChainAssets = useMultiChainAssets();
+  const mutichainTokenWithFiatAmount = multiChainAssets
+    .filter((item) => item.chainId === chainId)
+    .filter((item) => item.address !== undefined)
+    .find((item) => {
+      switch (type) {
+        case AssetType.native:
+          return item.isNative;
+        case AssetType.token:
+          return item.address === asset.address;
+        default:
+          return false;
+      }
+    });
+
   const isMetaMetricsEnabled = useSelector(getParticipateInMetaMetrics);
   const isMarketingEnabled = useSelector(getDataCollectionForMarketing);
   const metaMetricsId = useSelector(getMetaMetricsId);
 
-  const address =
-    type === AssetType.token
-      ? toChecksumHexAddress(asset.address)
-      : getNativeTokenAddress(chainId);
+  const address = (() => {
+    if (type === AssetType.token) {
+      return isEvm ? toChecksumHexAddress(asset.address) : asset.address;
+    }
+    return getNativeTokenAddress(chainId);
+  })();
+
+  const shouldShowContractAddress = type === AssetType.token;
+  const contractAddress = (() => {
+    if (shouldShowContractAddress) {
+      return isEvm
+        ? toChecksumHexAddress(asset.address)
+        : parseCaipAssetType(address as CaipAssetType).assetReference;
+    }
+    return '';
+  })();
 
   const tokenHexBalance =
     selectedAccountTokenBalancesAcrossChains?.[chainId]?.[address as Hex];
 
   const balance = calculateTokenBalance({
-    isNative: type === AssetType.native,
+    isNative,
     chainId,
     address: address as Hex,
     decimals,
@@ -207,6 +237,8 @@ const AssetPage = ({
     display: String(balance),
     fiat: String(tokenFiatAmount),
   };
+
+  const shouldShowSpendingCaps = isEvm;
   const portfolioSpendingCapsUrl = useMemo(
     () =>
       getPortfolioUrl(
@@ -222,11 +254,35 @@ const AssetPage = ({
   );
 
   const networkConfigurationsByChainId = useSelector(
-    getNetworkConfigurationsByChainId,
+    getMultichainNetworkConfigurationsByChainId,
   );
   const networkName = networkConfigurationsByChainId[chainId]?.name;
   const tokenChainImage = getImageForChainId(chainId);
 
+  const tokenWithFiatAmount = isEvm
+    ? {
+        address: address as Hex,
+        chainId,
+        symbol,
+        image,
+        title: name ?? symbol,
+        tokenFiatAmount: showFiat && tokenMarketPrice ? tokenFiatAmount : null,
+        string: balance ? balance.toString() : '',
+        decimals: asset.decimals,
+        aggregators:
+          type === AssetType.token && asset.aggregators
+            ? asset.aggregators
+            : [],
+        isNative: type === AssetType.native,
+        primary: balance ? balance.toString() : '',
+        secondary: balance ? Number(balance) : 0,
+      }
+    : (mutichainTokenWithFiatAmount as TokenWithFiatAmount);
+
+  if (!tokenWithFiatAmount) {
+    throw new Error('Token with fiat amount not found');
+  }
+
   return (
     <Box
       marginLeft="auto"
@@ -292,27 +348,7 @@ const AssetPage = ({
           {t('yourBalance')}
         </Text>
         {[AssetType.token, AssetType.native].includes(type) && (
-          <TokenCell
-            key={`${symbol}-${address}`}
-            token={{
-              address: address as Hex,
-              chainId,
-              symbol,
-              image,
-              title: name ?? symbol,
-              tokenFiatAmount:
-                showFiat && tokenMarketPrice ? tokenFiatAmount : null,
-              string: balance ? balance.toString() : '',
-              decimals: asset.decimals,
-              aggregators:
-                type === AssetType.token && asset.aggregators
-                  ? asset.aggregators
-                  : [],
-              isNative: type === AssetType.native,
-              primary: balance ? balance.toString() : '',
-              secondary: balance ? Number(balance) : 0,
-            }}
-          />
+          <TokenCell key={`${symbol}-${address}`} token={tokenWithFiatAmount} />
         )}
         <Box
           marginTop={2}
@@ -351,11 +387,11 @@ const AssetPage = ({
                     {networkName}
                   </Text>,
                 )}
-                {type === AssetType.token && (
+                {shouldShowContractAddress && (
                   <Box>
                     {renderRow(
                       t('contractAddress'),
-                      <AddressCopyButton address={address} shorten />,
+                      <AddressCopyButton address={contractAddress} shorten />,
                     )}
                     <Box
                       display={Display.Flex}
@@ -387,17 +423,18 @@ const AssetPage = ({
                     </Box>
                   </Box>
                 )}
-                {renderRow(
-                  t('spendingCaps'),
-                  <ButtonLink
-                    className="asset-page__spending-caps mm-text--body-md-medium"
-                    href={portfolioSpendingCapsUrl}
-                    target="_blank"
-                    rel="noopener noreferrer"
-                  >
-                    {t('editInPortfolio')}
-                  </ButtonLink>,
-                )}
+                {shouldShowSpendingCaps &&
+                  renderRow(
+                    t('spendingCaps'),
+                    <ButtonLink
+                      className="asset-page__spending-caps mm-text--body-md-medium"
+                      href={portfolioSpendingCapsUrl}
+                      target="_blank"
+                      rel="noopener noreferrer"
+                    >
+                      {t('editInPortfolio')}
+                    </ButtonLink>,
+                  )}
               </Box>
             </Box>
           )}
diff --git a/ui/pages/asset/components/token-asset.tsx b/ui/pages/asset/components/token-asset.tsx
index 58af2b83cb98..170c83311009 100644
--- a/ui/pages/asset/components/token-asset.tsx
+++ b/ui/pages/asset/components/token-asset.tsx
@@ -1,32 +1,38 @@
-import React, { useContext } from 'react';
 import { Token } from '@metamask/assets-controllers';
-import { useSelector, useDispatch } from 'react-redux';
 import { getTokenTrackerLink } from '@metamask/etherscan-link';
-import { useHistory } from 'react-router-dom';
-import { Hex } from '@metamask/utils';
 import { NetworkConfiguration } from '@metamask/network-controller';
-import {
-  getSelectedInternalAccount,
-  getTokenList,
-  selectERC20TokensByChain,
-} from '../../../selectors';
-import { isEqualCaseInsensitive } from '../../../../shared/modules/string-utils';
-import { useTokenTracker } from '../../../hooks/useTokenTracker';
+import { CaipAssetType, Hex, parseCaipAssetType } from '@metamask/utils';
+import React, { useContext } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { useHistory } from 'react-router-dom';
+import { MetaMetricsEventCategory } from '../../../../shared/constants/metametrics';
 import { AssetType } from '../../../../shared/constants/transaction';
-import { useTokenFiatAmount } from '../../../hooks/useTokenFiatAmount';
+import { getNetworkConfigurationsByChainId } from '../../../../shared/modules/selectors/networks';
+import { isEqualCaseInsensitive } from '../../../../shared/modules/string-utils';
+import { MetaMetricsContext } from '../../../contexts/metametrics';
 import {
   getURLHostName,
   roundToDecimalPlacesRemovingExtraZeroes,
 } from '../../../helpers/utils/util';
-import { MetaMetricsContext } from '../../../contexts/metametrics';
+import { useTokenFiatAmount } from '../../../hooks/useTokenFiatAmount';
+import { useTokenTracker } from '../../../hooks/useTokenTracker';
+import {
+  getSelectedInternalAccount,
+  getTokenList,
+  selectERC20TokensByChain,
+} from '../../../selectors';
 import { showModal } from '../../../store/actions';
-import { MetaMetricsEventCategory } from '../../../../shared/constants/metametrics';
-import { getNetworkConfigurationsByChainId } from '../../../../shared/modules/selectors/networks';
+import { getMultichainAccountUrl } from '../../../helpers/utils/multichain/blockExplorer';
+import { useMultichainSelector } from '../../../hooks/useMultichainSelector';
+import {
+  getMultichainIsEvm,
+  getMultichainNetwork,
+} from '../../../selectors/multichain';
 import AssetOptions from './asset-options';
 import AssetPage from './asset-page';
 
 const TokenAsset = ({ token, chainId }: { token: Token; chainId: Hex }) => {
-  const { address, symbol, isERC721 } = token;
+  const { address, symbol, isERC721, image } = token;
 
   const tokenList = useSelector(getTokenList);
   const allNetworks: {
@@ -39,9 +45,17 @@ const TokenAsset = ({ token, chainId }: { token: Token; chainId: Hex }) => {
       ? null
       : allNetworks[chainId]?.blockExplorerUrls[defaultIdx];
 
-  const { address: walletAddress } = useSelector(getSelectedInternalAccount);
+  const selectedAccount = useSelector(getSelectedInternalAccount);
+  const { address: walletAddress } = selectedAccount;
+
   const erc20TokensByChain = useSelector(selectERC20TokensByChain);
 
+  const multichainNetwork = useMultichainSelector(
+    getMultichainNetwork,
+    selectedAccount,
+  );
+  const isEvm = useSelector(getMultichainIsEvm);
+
   const history = useHistory();
   const dispatch = useDispatch();
   const trackEvent = useContext(MetaMetricsContext);
@@ -58,7 +72,9 @@ const TokenAsset = ({ token, chainId }: { token: Token; chainId: Hex }) => {
     erc20TokensByChain?.[chainId]?.data?.[address.toLowerCase()];
 
   const name = tokenData?.name || tokenDataFromChain?.name || symbol;
-  const iconUrl = tokenData?.iconUrl || tokenDataFromChain?.iconUrl || '';
+  const iconUrl =
+    tokenData?.iconUrl || tokenDataFromChain?.iconUrl || image || '';
+
   const aggregators = tokenData?.aggregators;
 
   const {
@@ -77,6 +93,13 @@ const TokenAsset = ({ token, chainId }: { token: Token; chainId: Hex }) => {
     { blockExplorerUrl: currentTokenBlockExplorer ?? '' },
   );
 
+  const blockExplorerLink = isEvm
+    ? tokenTrackerLink
+    : getMultichainAccountUrl(
+        parseCaipAssetType(address as CaipAssetType).assetReference,
+        multichainNetwork,
+      );
+
   return (
     <AssetPage
       asset={{
@@ -116,7 +139,7 @@ const TokenAsset = ({ token, chainId }: { token: Token; chainId: Hex }) => {
                 block_explorer_domain: getURLHostName(tokenTrackerLink),
               },
             });
-            global.platform.openTab({ url: tokenTrackerLink });
+            global.platform.openTab({ url: blockExplorerLink });
           }}
           tokenSymbol={token.symbol}
         />
diff --git a/ui/pages/asset/components/token-buttons.tsx b/ui/pages/asset/components/token-buttons.tsx
index c92f1c6e877b..b68c23d84174 100644
--- a/ui/pages/asset/components/token-buttons.tsx
+++ b/ui/pages/asset/components/token-buttons.tsx
@@ -1,7 +1,11 @@
-import React, { useContext, useEffect } from 'react';
+import React, { useCallback, useContext, useEffect } from 'react';
 import { useDispatch, useSelector } from 'react-redux';
 import { useHistory } from 'react-router-dom';
-
+///: BEGIN:ONLY_INCLUDE_IF(multichain)
+import { isEvmAccountType } from '@metamask/keyring-api';
+import { CaipAssetType } from '@metamask/utils';
+///: END:ONLY_INCLUDE_IF
+import { isEqual } from 'lodash';
 import { I18nContext } from '../../../contexts/i18n';
 import {
   SEND_ROUTE,
@@ -22,8 +26,8 @@ import {
   getCurrentKeyring,
   ///: END:ONLY_INCLUDE_IF
   getNetworkConfigurationIdByChainId,
+  getSelectedInternalAccount,
 } from '../../../selectors';
-import { getCurrentChainId } from '../../../../shared/modules/selectors/networks';
 ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
 import useBridging from '../../../hooks/bridge/useBridging';
 ///: END:ONLY_INCLUDE_IF
@@ -56,6 +60,21 @@ import {
 ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
 import { getIsNativeTokenBuyable } from '../../../ducks/ramps';
 ///: END:ONLY_INCLUDE_IF
+import { useMultichainSelector } from '../../../hooks/useMultichainSelector';
+import {
+  getMultichainIsEvm,
+  getMultichainNetwork,
+} from '../../../selectors/multichain';
+
+///: BEGIN:ONLY_INCLUDE_IF(multichain)
+import { useHandleSendNonEvm } from '../../../components/app/wallet-overview/hooks/useHandleSendNonEvm';
+///: END:ONLY_INCLUDE_IF
+
+///: BEGIN:ONLY_INCLUDE_IF(solana-swaps)
+import { MultichainNetworks } from '../../../../shared/constants/multichain/networks';
+///: END:ONLY_INCLUDE_IF
+
+import { getCurrentChainId } from '../../../../shared/modules/selectors/networks';
 import type { Asset } from './asset-page';
 
 const TokenButtons = ({
@@ -72,13 +91,21 @@ const TokenButtons = ({
   // @ts-expect-error keyring type is wrong maybe?
   const usingHardwareWallet = isHardwareKeyring(keyring.type);
   ///: END:ONLY_INCLUDE_IF
+  const isEvm = useMultichainSelector(getMultichainIsEvm);
+
+  const account = useSelector(getSelectedInternalAccount, isEqual);
+
+  const { chainId: multichainChainId } =
+    useMultichainSelector(getMultichainNetwork);
 
   const currentChainId = useSelector(getCurrentChainId);
   const networks = useSelector(getNetworkConfigurationIdByChainId) as Record<
     string,
     string
   >;
-  const isSwapsChain = useSelector(getIsSwapsChain);
+  const isSwapsChain = useSelector((state) =>
+    getIsSwapsChain(state, isEvm ? currentChainId : multichainChainId),
+  );
   ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
   const isBridgeChain = useSelector(getIsBridgeChain);
   const isBuyableChain = useSelector(getIsNativeTokenBuyable);
@@ -86,6 +113,10 @@ const TokenButtons = ({
   const { openBridgeExperience } = useBridging();
   ///: END:ONLY_INCLUDE_IF
 
+  ///: BEGIN:ONLY_INCLUDE_IF(multichain)
+  const handleSendNonEvm = useHandleSendNonEvm(token.address as CaipAssetType);
+  ///: END:ONLY_INCLUDE_IF
+
   useEffect(() => {
     if (token.isERC721) {
       dispatch(
@@ -97,9 +128,12 @@ const TokenButtons = ({
     }
   }, [token.isERC721, token.address, dispatch]);
 
-  const setCorrectChain = async () => {
+  const setCorrectChain = useCallback(async () => {
     // If we aren't presently on the chain of the asset, change to it
-    if (currentChainId !== token.chainId) {
+    if (
+      currentChainId !== token.chainId &&
+      multichainChainId !== token.chainId
+    ) {
       try {
         const networkConfigurationId = networks[token.chainId];
         await dispatch(setActiveNetworkWithError(networkConfigurationId));
@@ -115,7 +149,142 @@ const TokenButtons = ({
         throw err;
       }
     }
-  };
+  }, [currentChainId, multichainChainId, networks, token.chainId, dispatch]);
+
+  const handleBuyAndSellOnClick = useCallback(() => {
+    openBuyCryptoInPdapp();
+    trackEvent({
+      event: MetaMetricsEventName.NavBuyButtonClicked,
+      category: MetaMetricsEventCategory.Navigation,
+      properties: {
+        location: 'Token Overview',
+        text: 'Buy',
+        chain_id: currentChainId,
+        token_symbol: token.symbol,
+      },
+    });
+  }, [currentChainId, token.symbol, trackEvent, openBuyCryptoInPdapp]);
+
+  const handleSendOnClick = useCallback(async () => {
+    trackEvent(
+      {
+        event: MetaMetricsEventName.NavSendButtonClicked,
+        category: MetaMetricsEventCategory.Navigation,
+        properties: {
+          token_symbol: token.symbol,
+          location: MetaMetricsSwapsEventSource.TokenView,
+          text: 'Send',
+          chain_id: token.chainId,
+        },
+      },
+      { excludeMetaMetricsId: false },
+    );
+
+    ///: BEGIN:ONLY_INCLUDE_IF(multichain)
+    if (!isEvmAccountType(account.type)) {
+      await handleSendNonEvm();
+      // Early return, not to let the non-EVM flow slip into the native send flow.
+      return;
+    }
+    ///: END:ONLY_INCLUDE_IF
+
+    try {
+      await setCorrectChain();
+      await dispatch(
+        startNewDraftTransaction({
+          type: AssetType.token,
+          details: token,
+        }),
+      );
+      history.push(SEND_ROUTE);
+      // eslint-disable-next-line @typescript-eslint/no-explicit-any
+    } catch (err: any) {
+      if (!err.message.includes(INVALID_ASSET_TYPE)) {
+        throw err;
+      }
+    }
+  }, [
+    trackEvent,
+    dispatch,
+    history,
+    token,
+    setCorrectChain,
+    account,
+    ///: BEGIN:ONLY_INCLUDE_IF(multichain)
+    handleSendNonEvm,
+    ///: END:ONLY_INCLUDE_IF
+  ]);
+
+  const handleBridgeOnClick = useCallback(
+    async (isSwap: boolean) => {
+      await setCorrectChain();
+      openBridgeExperience(
+        MetaMetricsSwapsEventSource.TokenView,
+        {
+          ...token,
+          iconUrl: token.image,
+          balance: token?.balance?.value,
+          string: token?.balance?.display,
+          name: token.name ?? '',
+        },
+        undefined,
+        isSwap,
+      );
+    },
+    [token, setCorrectChain, openBridgeExperience],
+  );
+
+  const handleSwapOnClick = useCallback(async () => {
+    ///: BEGIN:ONLY_INCLUDE_IF(solana-swaps)
+    if (multichainChainId === MultichainNetworks.SOLANA) {
+      handleBridgeOnClick(true);
+      return;
+    }
+    ///: END:ONLY_INCLUDE_IF
+
+    await setCorrectChain();
+
+    ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
+    trackEvent({
+      event: MetaMetricsEventName.NavSwapButtonClicked,
+      category: MetaMetricsEventCategory.Swaps,
+      properties: {
+        token_symbol: token.symbol,
+        location: MetaMetricsSwapsEventSource.TokenView,
+        text: 'Swap',
+        chain_id: currentChainId,
+      },
+    });
+    dispatch(
+      setSwapsFromToken({
+        ...token,
+        address: token.address?.toLowerCase(),
+        iconUrl: token.image,
+        balance: token?.balance?.value,
+        string: token?.balance?.display,
+      }),
+    );
+    if (usingHardwareWallet) {
+      global.platform.openExtensionInBrowser?.(
+        PREPARE_SWAP_ROUTE,
+        undefined,
+        false,
+      );
+    } else {
+      history.push(PREPARE_SWAP_ROUTE);
+    }
+    ///: END:ONLY_INCLUDE_IF
+  }, [
+    currentChainId,
+    trackEvent,
+    dispatch,
+    history,
+    token,
+    usingHardwareWallet,
+    setCorrectChain,
+    handleBridgeOnClick,
+    multichainChainId,
+  ]);
 
   return (
     <Box display={Display.Flex} justifyContent={JustifyContent.spaceEvenly}>
@@ -132,19 +301,7 @@ const TokenButtons = ({
           }
           label={t('buyAndSell')}
           data-testid="token-overview-buy"
-          onClick={() => {
-            openBuyCryptoInPdapp();
-            trackEvent({
-              event: MetaMetricsEventName.NavBuyButtonClicked,
-              category: MetaMetricsEventCategory.Navigation,
-              properties: {
-                location: 'Token Overview',
-                text: 'Buy',
-                chain_id: currentChainId,
-                token_symbol: token.symbol,
-              },
-            });
-          }}
+          onClick={handleBuyAndSellOnClick}
           disabled={token.isERC721 || !isBuyableChain}
           tooltipRender={null}
         />
@@ -153,36 +310,7 @@ const TokenButtons = ({
 
       <IconButton
         className="token-overview__button"
-        onClick={async () => {
-          trackEvent(
-            {
-              event: MetaMetricsEventName.NavSendButtonClicked,
-              category: MetaMetricsEventCategory.Navigation,
-              properties: {
-                token_symbol: token.symbol,
-                location: MetaMetricsSwapsEventSource.TokenView,
-                text: 'Send',
-                chain_id: token.chainId,
-              },
-            },
-            { excludeMetaMetricsId: false },
-          );
-          try {
-            await setCorrectChain();
-            await dispatch(
-              startNewDraftTransaction({
-                type: AssetType.token,
-                details: token,
-              }),
-            );
-            history.push(SEND_ROUTE);
-            // eslint-disable-next-line @typescript-eslint/no-explicit-any
-          } catch (err: any) {
-            if (!err.message.includes(INVALID_ASSET_TYPE)) {
-              throw err;
-            }
-          }
-        }}
+        onClick={handleSendOnClick}
         Icon={
           <Icon
             name={IconName.Arrow2UpRight}
@@ -205,40 +333,7 @@ const TokenButtons = ({
               size={IconSize.Sm}
             />
           }
-          onClick={async () => {
-            await setCorrectChain();
-
-            ///: BEGIN:ONLY_INCLUDE_IF(build-main,build-beta,build-flask)
-            trackEvent({
-              event: MetaMetricsEventName.NavSwapButtonClicked,
-              category: MetaMetricsEventCategory.Swaps,
-              properties: {
-                token_symbol: token.symbol,
-                location: MetaMetricsSwapsEventSource.TokenView,
-                text: 'Swap',
-                chain_id: currentChainId,
-              },
-            });
-            dispatch(
-              setSwapsFromToken({
-                ...token,
-                address: token.address?.toLowerCase(),
-                iconUrl: token.image,
-                balance: token?.balance?.value,
-                string: token?.balance?.display,
-              }),
-            );
-            if (usingHardwareWallet) {
-              global.platform.openExtensionInBrowser?.(
-                PREPARE_SWAP_ROUTE,
-                undefined,
-                false,
-              );
-            } else {
-              history.push(PREPARE_SWAP_ROUTE);
-            }
-            ///: END:ONLY_INCLUDE_IF
-          }}
+          onClick={handleSwapOnClick}
           label={t('swap')}
           tooltipRender={null}
         />
@@ -258,16 +353,7 @@ const TokenButtons = ({
               />
             }
             label={t('bridge')}
-            onClick={async () => {
-              await setCorrectChain();
-              openBridgeExperience(MetaMetricsSwapsEventSource.TokenView, {
-                ...token,
-                iconUrl: token.image,
-                balance: token?.balance?.value,
-                string: token?.balance?.display,
-                name: token.name ?? '',
-              });
-            }}
+            onClick={() => handleBridgeOnClick(false)}
             tooltipRender={null}
           />
         )
diff --git a/ui/pages/asset/util.ts b/ui/pages/asset/util.ts
index 2f4a41df6cc9..171f80baa947 100644
--- a/ui/pages/asset/util.ts
+++ b/ui/pages/asset/util.ts
@@ -1,4 +1,4 @@
-import { SUPPORTED_CHAIN_IDS, Token } from '@metamask/assets-controllers';
+import { SUPPORTED_CHAIN_IDS } from '@metamask/assets-controllers';
 import { Hex } from '@metamask/utils';
 
 /** Formats a datetime in a short human readable format like 'Feb 8, 12:11 PM' */
@@ -66,11 +66,11 @@ export const chainSupportsPricing = (chainId: Hex) =>
 /** The opacity components should set during transition */
 export const loadingOpacity = 0.2;
 
-export const findAssetByAddress = (
-  data: Record<string, Token[]>,
+export const findAssetByAddress = <TItem extends { address: string }>(
+  data: Record<string, TItem[]>,
   address?: string,
   chainId?: string,
-): Token | undefined | null => {
+): TItem | undefined | null => {
   if (!chainId) {
     console.error('Chain ID is required.');
     return null;
diff --git a/ui/selectors/assets.test.ts b/ui/selectors/assets.test.ts
index aa8e758b858b..9481b6efcbaf 100644
--- a/ui/selectors/assets.test.ts
+++ b/ui/selectors/assets.test.ts
@@ -1,10 +1,14 @@
+import { cloneDeep } from 'lodash';
+import { InternalAccount } from '@metamask/keyring-internal-api';
 import {
-  getAssetsRates,
   AssetsRatesState,
   AssetsState,
   getAccountAssets,
+  getTokenByAccountAndAddressAndChainId,
   getAssetsMetadata,
+  getAssetsRates,
   getMultiChainAssets,
+  getMultichainNativeAssetType,
 } from './assets';
 
 const mockRatesState = {
@@ -197,3 +201,210 @@ describe('getMultiChainAssets', () => {
     expect(result1 === result2).toBe(true);
   });
 });
+
+describe('getTokenByAccountAndAddressAndChainId', () => {
+  // Create a mock state with an EVM account and a non-EVM account, each having a token on their respective chains
+  const mockState = {
+    metamask: {
+      internalAccounts: {
+        accounts: {
+          '81b1ead4-334c-4921-9adf-282fde539752': {
+            id: '81b1ead4-334c-4921-9adf-282fde539752',
+            address: '0x458036e7bc0612e9b207640dc07ca7711346aae5',
+            type: 'eip155:eoa',
+          },
+          '5132883f-598e-482c-a02b-84eeaa352f5b': {
+            id: '5132883f-598e-482c-a02b-84eeaa352f5b',
+            address: '8A4AptCThfbuknsbteHgGKXczfJpfjuVA9SLTSGaaLGC',
+            type: 'solana:data-account',
+          },
+        },
+        selectedAccount: '', // To be populated in each case
+      },
+      accounts: {
+        '0x458036e7bc0612e9b207640dc07ca7711346aae5': {
+          address: '0x458036e7bc0612e9b207640dc07ca7711346aae5',
+          balance: '0x0',
+        },
+      },
+      accountsAssets: {
+        '5132883f-598e-482c-a02b-84eeaa352f5b': [
+          'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+        ],
+      },
+      assetsMetadata: {
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
+          name: 'Token 1',
+          symbol: 'TKN1',
+          iconUrl: 'https://example.com/token-1.png',
+          fungible: true,
+          units: [{ symbol: 'TKN1', name: 'Token 1', decimals: 9 }],
+        },
+      },
+      allTokens: {
+        'eip155:1': {
+          '0x458036e7bc0612e9b207640dc07ca7711346aae5': [
+            {
+              address: '0x458036e7bc0612e9b207640dc07ca7711346aae5',
+              chainId: 'eip155:1',
+              name: 'Token 2',
+            },
+          ],
+        },
+      },
+      accountsByChainId: {
+        'eip155:1': {
+          '0x458036e7bc0612e9b207640dc07ca7711346aae5': {
+            balance: '0x0',
+          },
+        },
+      },
+      completedOnboarding: true,
+    },
+  };
+
+  it('should return null if chainId is undefined', () => {
+    const result = getTokenByAccountAndAddressAndChainId(
+      mockState,
+      undefined,
+      '0x458036e7bc0612e9b207640dc07ca7711346aae5',
+      undefined,
+    );
+    expect(result).toBeNull();
+  });
+
+  describe('when the passed account is an EVM account', () => {
+    const account = mockState.metamask.internalAccounts.accounts[
+      '81b1ead4-334c-4921-9adf-282fde539752'
+    ] as unknown as InternalAccount;
+
+    it('should return the token from the state', () => {
+      const result = getTokenByAccountAndAddressAndChainId(
+        mockState,
+        account,
+        '0x458036e7bc0612e9b207640dc07ca7711346aae5',
+        'eip155:1',
+      );
+      expect(result).toEqual({
+        address: '0x458036e7bc0612e9b207640dc07ca7711346aae5',
+        chainId: 'eip155:1',
+        isNative: false,
+        name: 'Token 2',
+      });
+    });
+  });
+
+  describe('when the passed account is a non-EVM account', () => {
+    const account = mockState.metamask.internalAccounts.accounts[
+      '5132883f-598e-482c-a02b-84eeaa352f5b'
+    ] as unknown as InternalAccount;
+
+    it('should return the token from the state', () => {
+      const result = getTokenByAccountAndAddressAndChainId(
+        mockState,
+        account,
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
+      );
+
+      expect(result).toEqual({
+        address: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+        chainId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
+        decimals: 9,
+        image: 'https://example.com/token-1.png',
+        isNative: true,
+        isStakeable: false,
+        primary: '0',
+        secondary: 0,
+        string: '',
+        symbol: 'TKN1',
+        title: 'Token 1',
+        tokenFiatAmount: 0,
+      });
+    });
+  });
+
+  describe('when the passed account is undefined', () => {
+    it('should use the selected account to return the token from the state', () => {
+      const account = undefined;
+      const mockStateWithSelectedAccount = cloneDeep(mockState);
+      mockStateWithSelectedAccount.metamask.internalAccounts.selectedAccount =
+        '5132883f-598e-482c-a02b-84eeaa352f5b';
+
+      const result = getTokenByAccountAndAddressAndChainId(
+        mockStateWithSelectedAccount,
+        account,
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
+      );
+
+      expect(result).toEqual({
+        address: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+        chainId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
+        decimals: 9,
+        image: 'https://example.com/token-1.png',
+        isNative: true,
+        isStakeable: false,
+        primary: '0',
+        secondary: 0,
+        string: '',
+        symbol: 'TKN1',
+        title: 'Token 1',
+        tokenFiatAmount: 0,
+      });
+    });
+  });
+});
+
+describe('getMultichainNativeAssetType', () => {
+  const mockState = {
+    metamask: {
+      internalAccounts: {
+        accounts: {
+          '5132883f-598e-482c-a02b-84eeaa352f5b': {
+            id: '5132883f-598e-482c-a02b-84eeaa352f5b',
+            address: '8A4AptCThfbuknsbteHgGKXczfJpfjuVA9SLTSGaaLGC',
+            type: 'solana:data-account',
+          },
+        },
+        selectedAccount: '5132883f-598e-482c-a02b-84eeaa352f5b',
+      },
+      accountsAssets: {
+        '5132883f-598e-482c-a02b-84eeaa352f5b': [
+          'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+          'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+        ],
+      },
+      networkConfigurationsByChainId: {},
+      completedOnboarding: true,
+    },
+    // eslint-disable-next-line @typescript-eslint/no-explicit-any
+  } as any;
+
+  describe('when a native asset type is available', () => {
+    it('should return the native asset type', () => {
+      const result = getMultichainNativeAssetType(mockState);
+
+      expect(result).toEqual(
+        'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
+      );
+    });
+  });
+
+  describe('when a native asset type is not available', () => {
+    const mockStateWithoutNativeAssetType = cloneDeep(mockState);
+    mockStateWithoutNativeAssetType.metamask.accountsAssets[
+      '5132883f-598e-482c-a02b-84eeaa352f5b'
+    ] = [
+      'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
+    ];
+
+    it('should return undefined', () => {
+      const result = getMultichainNativeAssetType(
+        mockStateWithoutNativeAssetType,
+      );
+
+      expect(result).toBeUndefined();
+    });
+  });
+});
diff --git a/ui/selectors/assets.ts b/ui/selectors/assets.ts
index 63c21f436f57..2fe65a4fc30d 100644
--- a/ui/selectors/assets.ts
+++ b/ui/selectors/assets.ts
@@ -2,7 +2,6 @@ import {
   MultichainAssetsControllerState,
   MultichainAssetsRatesControllerState,
 } from '@metamask/assets-controllers';
-import { BigNumber } from 'bignumber.js';
 import { CaipAssetId } from '@metamask/keyring-api';
 import {
   CaipAssetType,
@@ -10,12 +9,22 @@ import {
   Hex,
   parseCaipAssetType,
 } from '@metamask/utils';
-import { createDeepEqualSelector } from '../../shared/modules/selectors/util';
-import { getTokenBalances } from '../ducks/metamask/metamask';
+import { BigNumber } from 'bignumber.js';
+import { groupBy } from 'lodash';
+import { InternalAccount } from '@metamask/keyring-internal-api';
 import { TEST_CHAINS } from '../../shared/constants/network';
+import { createDeepEqualSelector } from '../../shared/modules/selectors/util';
 import { Token, TokenWithFiatAmount } from '../components/app/assets/types';
 import { calculateTokenBalance } from '../components/app/assets/util/calculateTokenBalance';
 import { calculateTokenFiatAmount } from '../components/app/assets/util/calculateTokenFiatAmount';
+import { getTokenBalances } from '../ducks/metamask/metamask';
+import { findAssetByAddress } from '../pages/asset/util';
+import { getSelectedInternalAccount } from './accounts';
+import {
+  getMultichainBalances,
+  getMultichainIsEvm,
+  getMultichainNetwork,
+} from './multichain';
 import {
   getCurrencyRates,
   getCurrentNetwork,
@@ -23,9 +32,9 @@ import {
   getMarketData,
   getNativeTokenCachedBalanceByChainIdSelector,
   getPreferences,
+  getSelectedAccountTokensAcrossChains,
   getTokensAcrossChainsByAccountAddressSelector,
 } from './selectors';
-import { getMultichainBalances, getMultichainNetwork } from './multichain';
 
 export type AssetsState = {
   metamask: MultichainAssetsControllerState;
@@ -224,6 +233,54 @@ export const getMultiChainAssets = createDeepEqualSelector(
   },
 );
 
+/**
+ * Gets a {@link Token} (EVM or Multichain) owned by the passed account by address and chainId.
+ *
+ * @param state - Redux state object
+ * @param tokenAddress - Token address (Hex for EVM, or CaipAssetType for non-EVM)
+ * @param chainId - Chain ID (Hex for EVM, or CaipChainId for non-EVM)
+ * @param internalAccount - The account holding the token to search for
+ * @returns Token object
+ */
+export const getTokenByAccountAndAddressAndChainId = createDeepEqualSelector(
+  (state) => state,
+  (_state, account?: InternalAccount) => account,
+  (
+    _state,
+    _account?: InternalAccount,
+    tokenAddress?: Hex | CaipAssetType | string,
+  ) => tokenAddress,
+  (
+    _state,
+    _account?: InternalAccount,
+    _tokenAddress?: Hex | CaipAssetType | string,
+    _chainId?: Hex | CaipChainId,
+  ) => _chainId,
+  (
+    state,
+    account?: InternalAccount,
+    tokenAddress?: Hex | CaipAssetType | string,
+    chainId?: Hex | CaipChainId,
+  ) => {
+    const accountToUse = account ?? getSelectedInternalAccount(state);
+    const isEvm = getMultichainIsEvm(state, accountToUse);
+
+    const assetsToSearch = isEvm
+      ? (getSelectedAccountTokensAcrossChains(state) as Record<
+          Hex,
+          TokenWithFiatAmount[]
+        >)
+      : (groupBy(getMultiChainAssets(state, accountToUse), 'chainId') as Record<
+          CaipChainId,
+          TokenWithFiatAmount[]
+        >);
+
+    const result = findAssetByAddress(assetsToSearch, tokenAddress, chainId);
+
+    return result;
+  },
+);
+
 const zeroBalanceAssetFallback = { amount: 0, unit: '' };
 
 export const getMultichainAggregatedBalance = createDeepEqualSelector(
@@ -259,31 +316,54 @@ export const getMultichainAggregatedBalance = createDeepEqualSelector(
   },
 );
 
+/**
+ * Gets the CAIP asset type of the native token of the current network.
+ *
+ * @param state - Redux state object
+ * @param selectedAccount - Selected account
+ * @returns CAIP asset type of the native token, or undefined if no native token is found
+ */
+export const getMultichainNativeAssetType = createDeepEqualSelector(
+  getSelectedInternalAccount,
+  getAccountAssets,
+  getMultichainNetwork,
+  (
+    selectedAccount: ReturnType<typeof getSelectedInternalAccount>,
+    accountAssets: ReturnType<typeof getAccountAssets>,
+    currentNetwork: ReturnType<typeof getMultichainNetwork>,
+  ) => {
+    const assetTypes = accountAssets?.[selectedAccount.id] || [];
+    const nativeAssetType = assetTypes.find((assetType) => {
+      const { chainId, assetNamespace } = parseCaipAssetType(assetType);
+      return chainId === currentNetwork.chainId && assetNamespace === 'slip44';
+    });
+
+    return nativeAssetType;
+  },
+);
+
+/**
+ * Gets the balance of the native token of the current network for the selected account.
+ *
+ * @param state - Redux state object
+ * @param selectedAccount - Selected account
+ * @returns Balance of the native token, or fallbacks to { amount: 0, unit: '' } if no native token is found
+ */
 export const getMultichainNativeTokenBalance = createDeepEqualSelector(
   (_state, selectedAccount) => selectedAccount,
-  getMultichainNetwork,
   getMultichainBalances,
-  getAccountAssets,
+  getMultichainNativeAssetType,
   (
     selectedAccountAddress,
-    currentNetwork,
-    multichainBalances,
-    accountAssets,
+    multichainBalances: ReturnType<typeof getMultichainBalances>,
+    nativeAssetType: ReturnType<typeof getMultichainNativeAssetType>,
   ) => {
-    const assetIds = accountAssets?.[selectedAccountAddress.id] || [];
     const balances = multichainBalances?.[selectedAccountAddress.id];
 
-    let nativeTokenBalance = zeroBalanceAssetFallback;
-
-    assetIds.forEach((assetId: CaipAssetId) => {
-      const { chainId, assetNamespace } = parseCaipAssetType(assetId);
-      if (chainId === currentNetwork.chainId && assetNamespace === 'slip44') {
-        const balance = balances?.[assetId] || zeroBalanceAssetFallback;
-
-        nativeTokenBalance = balance;
-      }
-    });
+    if (!nativeAssetType || !balances?.[nativeAssetType]) {
+      return zeroBalanceAssetFallback;
+    }
 
-    return nativeTokenBalance;
+    return balances[nativeAssetType];
   },
 );
diff --git a/ui/selectors/multichain.ts b/ui/selectors/multichain.ts
index d6c82bc88df2..ba72b7f36da9 100644
--- a/ui/selectors/multichain.ts
+++ b/ui/selectors/multichain.ts
@@ -1,47 +1,47 @@
-import PropTypes from 'prop-types';
-import { isEvmAccountType, Transaction } from '@metamask/keyring-api';
-import { InternalAccount } from '@metamask/keyring-internal-api';
 import type {
-  MultichainBalancesControllerState,
-  RatesControllerState,
   MultichainAssetsControllerState,
   MultichainAssetsRatesControllerState,
+  MultichainBalancesControllerState,
+  RatesControllerState,
 } from '@metamask/assets-controllers';
-import { CaipChainId, Hex, KnownCaipNamespace } from '@metamask/utils';
-import { createSelector } from 'reselect';
 import { NetworkType } from '@metamask/controller-utils';
+import { isEvmAccountType, Transaction } from '@metamask/keyring-api';
+import { InternalAccount } from '@metamask/keyring-internal-api';
 import { MultichainTransactionsControllerState } from '@metamask/multichain-transactions-controller';
 import {
   NetworkConfiguration,
   RpcEndpointType,
 } from '@metamask/network-controller';
-import { Numeric } from '../../shared/modules/Numeric';
+import { CaipChainId, Hex, KnownCaipNamespace } from '@metamask/utils';
+import PropTypes from 'prop-types';
+import { createSelector } from 'reselect';
 import {
-  MultichainProviderConfig,
-  MULTICHAIN_PROVIDER_CONFIGS,
-  MultichainNetworks,
   MULTICHAIN_ACCOUNT_TYPE_TO_MAINNET,
+  MULTICHAIN_PROVIDER_CONFIGS,
   MULTICHAIN_TOKEN_IMAGE_MAP,
+  MultichainNetworks,
+  MultichainProviderConfig,
 } from '../../shared/constants/multichain/networks';
+import { Numeric } from '../../shared/modules/Numeric';
 import {
   getCompletedOnboarding,
   getConversionRate,
-  getNativeCurrency,
   getCurrentCurrency,
+  getNativeCurrency,
 } from '../ducks/metamask/metamask';
 // TODO: Remove restricted import
 // eslint-disable-next-line import/no-restricted-paths
 import { MULTICHAIN_NETWORK_TO_ASSET_TYPES } from '../../shared/constants/multichain/assets';
 import {
   CHAIN_ID_TO_NETWORK_IMAGE_URL_MAP,
-  TEST_NETWORK_IDS,
   CHAIN_IDS,
+  TEST_NETWORK_IDS,
 } from '../../shared/constants/network';
 import {
+  getCurrentChainId,
+  getNetworkConfigurationsByChainId,
   getProviderConfig,
   NetworkState,
-  getNetworkConfigurationsByChainId,
-  getCurrentChainId,
 } from '../../shared/modules/selectors/networks';
 // eslint-disable-next-line import/no-restricted-paths
 import { getConversionRatesForNativeAsset } from '../../app/scripts/lib/util';
@@ -389,10 +389,15 @@ export function getMultichainIsTestnet(
       // `getIsTestnet` here and uses the actual `TEST_NETWORK_IDS` which seems
       // more up-to-date
       (TEST_NETWORK_IDS as string[]).includes(providerConfig.chainId)
-    : // TODO: For now we only check for bitcoin, but we will need to
+    : // TODO: For now we only check for bitcoin and Solana, but we will need to
       // update this for other non-EVM networks later!
-      (providerConfig as MultichainProviderConfig).chainId ===
-        MultichainNetworks.BITCOIN_TESTNET;
+      (
+        [
+          MultichainNetworks.BITCOIN_TESTNET,
+          MultichainNetworks.SOLANA_DEVNET,
+          MultichainNetworks.SOLANA_TESTNET,
+        ] as string[]
+      ).includes(providerConfig.chainId);
 }
 
 export function getMultichainBalances(
diff --git a/ui/store/actions.ts b/ui/store/actions.ts
index 0a08830df476..caf7c3ad3273 100644
--- a/ui/store/actions.ts
+++ b/ui/store/actions.ts
@@ -6114,9 +6114,11 @@ export async function sendMultichainTransaction(
   {
     account,
     scope,
+    assetType,
   }: {
     account: string;
     scope: string;
+    assetType?: CaipAssetType;
   },
 ) {
   await handleSnapRequest({
@@ -6128,6 +6130,7 @@ export async function sendMultichainTransaction(
       params: {
         account,
         scope,
+        assetId: assetType, // The Solana snap names the parameter `assetId` while it is in fact an `assetType`
       },
     },
   });


Reviews:
user: login: GuillaumeRx
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T09:41:51Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T09:44:56Z
user: login: FrederikBolding
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-02T10:20:26Z
user: login: GuillaumeRx
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T10:21:07Z
user: login: FrederikBolding
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-02T10:22:27Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T13:27:28Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T13:27:36Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T13:27:48Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T13:27:55Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T13:28:32Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T16:09:32Z
user: login: gambinish
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-02T17:41:12Z
user: login: sahar-fehri
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-02T21:23:16Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T07:34:20Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T09:55:51Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T13:18:54Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T09:56:20Z
user: login: GuillaumeRx
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T12:45:44Z
user: login: GuillaumeRx
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T12:46:10Z
user: login: xavier-brochard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T13:35:21Z
user: login: GuillaumeRx
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T09:17:55Z
user: login: NidhiKJha
body: UI changes look good to me ✅ 
Checked the component in Multichain folder (routing works) ✅ 
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-04-07T12:51:11Z
user: login: aganglada
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T16:53:13Z
user: login: NidhiKJha
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-07T16:57:15Z
user: login: sahar-fehri
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T20:37:10Z
user: login: GuillaumeRx
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T09:12:30Z
user: login: salimtb
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T10:58:20Z

Review comments:
diff_hunk: @@ -205,7 +215,7 @@ export const getMultiChainAssets = createDeepEqualSelector(
       if (!hideZeroBalanceTokens || balance.amount !== '0' || isNative) {
         allAssets.push({
           title: metadata.name,
-          address: assetId,
+          address: assetReference, // The EVM address represents the asset_reference portion of the CAIP-19 asset type
path: ui/selectors/assets.ts
user: login: GuillaumeRx
body: We shouldn't be basing the implementation on the EVM one. We should be using full CAIPs Asset types. 
created_at: 2025-04-02T09:29:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -205,7 +215,7 @@ export const getMultiChainAssets = createDeepEqualSelector(
       if (!hideZeroBalanceTokens || balance.amount !== '0' || isNative) {
         allAssets.push({
           title: metadata.name,
-          address: assetId,
+          address: assetReference, // The EVM address represents the asset_reference portion of the CAIP-19 asset type
path: ui/selectors/assets.ts
user: login: GuillaumeRx
body: Furthermore this change will break features that relies on `address` being the full Asset Type, please revert
created_at: 2025-04-02T09:30:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -24,7 +24,7 @@ export type BaseToken = {
 
 // type created for non-evm tokens
 export type NonEvmBaseToken = {
-  address: CaipAssetType;
+  address: CaipAssetReference;
path: ui/components/app/assets/types.ts
user: login: GuillaumeRx
body: Please also revert.
created_at: 2025-04-02T09:32:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,116 @@
+import { SnapId } from '@metamask/snaps-sdk';
+import { parseCaipAssetType, CaipAssetType } from '@metamask/utils';
+import { useEffect } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { useHistory } from 'react-router-dom';
+import {
+  sendMultichainTransaction,
+  setDefaultHomeActiveTabName,
+} from '../../../../store/actions';
+import {
+  getMemoizedUnapprovedTemplatedConfirmations,
+  getSelectedInternalAccount,
+} from '../../../../selectors';
+import { isMultichainWalletSnap } from '../../../../../shared/lib/accounts/snaps';
+import { CONFIRMATION_V_NEXT_ROUTE } from '../../../../helpers/constants/routes';
+import { useMultichainSelector } from '../../../../hooks/useMultichainSelector';
+import { getAccountAssets } from '../../../../selectors/assets';
+import { getMultichainNetwork } from '../../../../selectors/multichain';
+
+/**
+ * Use this hook to trigger the send flow for non-EVM accounts.
+ *
+ * On non-EVM, the send flow is delegated to a Snap that displays the UI,
+ * builds the transaction, and sends it to the blockchain.
+ *
+ * @param caipAssetType - The optional CAIP asset type to use for the send flow. Defaults to the chain's native asset if not provided.
+ * @returns A function that triggers the send flow for non-EVM accounts.
+ */
+export const useHandleSendNonEvm = (caipAssetType?: CaipAssetType) => {
+  const selectedAccount = useMultichainSelector(getSelectedInternalAccount);
+  const currentNetwork = useMultichainSelector(getMultichainNetwork);
+  const accountAssets = useMultichainSelector(getAccountAssets);
+
+  const account = useSelector(getSelectedInternalAccount);
+  const history = useHistory();
+  const dispatch = useDispatch();
+
+  const currentActivityTabName = useSelector(
+    // @ts-expect-error TODO: fix state type
+    (state) => state.metamask.defaultHomeActiveTabName,
+  );
+
+  const unapprovedTemplatedConfirmations = useSelector(
+    getMemoizedUnapprovedTemplatedConfirmations,
+  );
+
+  useEffect(() => {
+    const templatedSnapApproval = unapprovedTemplatedConfirmations.find(
+      (approval) => {
+        return (
+          approval.type === 'snap_dialog' &&
+          account.metadata.snap &&
+          account.metadata.snap.id === approval.origin &&
+          isMultichainWalletSnap(account.metadata.snap.id as SnapId)
+        );
+      },
+    );
+
+    if (templatedSnapApproval) {
+      history.push(`${CONFIRMATION_V_NEXT_ROUTE}/${templatedSnapApproval.id}`);
+    }
+  }, [unapprovedTemplatedConfirmations, history, account]);
+
+  return async () => {
+    // Non-EVM (Snap) Send flow
+    if (!account.metadata.snap) {
+      throw new Error('Non-EVM needs to be Snap accounts');
+    }
+
+    // TODO: Remove this once we want to enable all non-EVM Snaps
+    if (!isMultichainWalletSnap(account.metadata.snap.id as SnapId)) {
+      throw new Error(
+        `Non-EVM Snap is not whitelisted: ${account.metadata.snap.id}`,
+      );
+    }
+
+    // Either use the passed caipAssetType, or fallback to the chain's native asset
+    const assetTypeToUse = (() => {
+      if (caipAssetType) {
+        return caipAssetType;
+      }
+
+      const assetTypes = accountAssets?.[selectedAccount.id] || [];
+      const nativeAssetType = assetTypes.find((assetType) => {
+        const { chainId, assetNamespace } = parseCaipAssetType(assetType);
+        return (
+          chainId === currentNetwork.chainId && assetNamespace === 'slip44'
+        );
path: ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.ts
user: login: GuillaumeRx
body: We use this logic in two selectors and now here, might be good to move this logic to a util function and create a selector to get the native asset rather than doing it here
created_at: 2025-04-02T09:34:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -44,10 +42,10 @@ const Asset = () => {
   if (nft) {
     content = <NftDetails nft={nft} />;
   } else if (token && chainId) {
-    if (token?.address) {
-      content = <TokenAsset chainId={chainId} token={token} />;
-    } else {
+    if (token.isNative || !token.address) {
       content = <NativeAsset chainId={chainId} token={token} />;
+    } else {
+      content = <TokenAsset chainId={chainId} token={token} />;
path: ui/pages/asset/asset.tsx
user: login: GuillaumeRx
body: Please avoid nested conditionals
created_at: 2025-04-02T09:36:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -149,23 +151,38 @@ const AssetPage = ({
   ) as Record<Hex, Hex>;
 
   const { tokenBalances } = useTokenBalances({ chainIds: [chainId] });
+
   const selectedAccountTokenBalancesAcrossChains =
     tokenBalances[selectedAccount.address];
 
+  const multiChainAssets = useMultiChainAssets();
+  const mutichainTokenWithFiatAmount = multiChainAssets.find((item) =>
+    item.chainId === chainId && isNative
+      ? item.isNative
+      : item.address ===
+        (asset.type === AssetType.token ? asset.address : undefined),
+  );
+
   const isMetaMetricsEnabled = useSelector(getParticipateInMetaMetrics);
   const isMarketingEnabled = useSelector(getDataCollectionForMarketing);
   const metaMetricsId = useSelector(getMetaMetricsId);
 
-  const address =
-    type === AssetType.token
-      ? toChecksumHexAddress(asset.address)
-      : getNativeTokenAddress(chainId);
+  let address: string;
+  if (type === AssetType.token) {
+    if (isEvm) {
+      address = toChecksumHexAddress(asset.address);
+    } else {
+      address = asset.address;
+    }
+  } else {
+    address = getNativeTokenAddress(chainId);
path: ui/pages/asset/components/asset-page.tsx
user: login: GuillaumeRx
body: Please avoid nested conditionals 
created_at: 2025-04-02T09:37:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -205,7 +215,7 @@ export const getMultiChainAssets = createDeepEqualSelector(
       if (!hideZeroBalanceTokens || balance.amount !== '0' || isNative) {
         allAssets.push({
           title: metadata.name,
-          address: assetId,
+          address: assetReference, // The EVM address represents the asset_reference portion of the CAIP-19 asset type
path: ui/selectors/assets.ts
user: login: xavier-brochard
body: This was discussed and agreed with the assets team [here](https://consensys.slack.com/archives/C05PK980JBC/p1742908466799269).

Do you know which features would break with this change? This change only impacts non-EVM

LMK What you think
created_at: 2025-04-02T09:44:56Z
author_association: CONTRIBUTOR
diff_hunk: @@ -205,7 +215,7 @@ export const getMultiChainAssets = createDeepEqualSelector(
       if (!hideZeroBalanceTokens || balance.amount !== '0' || isNative) {
         allAssets.push({
           title: metadata.name,
-          address: assetId,
+          address: assetReference, // The EVM address represents the asset_reference portion of the CAIP-19 asset type
path: ui/selectors/assets.ts
user: login: FrederikBolding
body: This would break the `AssetSelector` component and potentially others, but it also just feels like the wrong decision to me. We have chosen to use CAIP-19 identifiers everywhere in the API (as agreed in multiple SIPs and ADRs), why would we strip it away in the UI implementation?
created_at: 2025-04-02T10:20:26Z
author_association: MEMBER
diff_hunk: @@ -205,7 +215,7 @@ export const getMultiChainAssets = createDeepEqualSelector(
       if (!hideZeroBalanceTokens || balance.amount !== '0' || isNative) {
         allAssets.push({
           title: metadata.name,
-          address: assetId,
+          address: assetReference, // The EVM address represents the asset_reference portion of the CAIP-19 asset type
path: ui/selectors/assets.ts
user: login: GuillaumeRx
body: That's what I raised in the slack discussion

created_at: 2025-04-02T10:21:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -205,7 +215,7 @@ export const getMultiChainAssets = createDeepEqualSelector(
       if (!hideZeroBalanceTokens || balance.amount !== '0' || isNative) {
         allAssets.push({
           title: metadata.name,
-          address: assetId,
+          address: assetReference, // The EVM address represents the asset_reference portion of the CAIP-19 asset type
path: ui/selectors/assets.ts
user: login: FrederikBolding
body: I don't have access to the Slack thread mentioned, but I would agree with Guillaume, from my perspective it doesn't make sense to diverge from the standardized types we've agreed upon 
created_at: 2025-04-02T10:22:27Z
author_association: MEMBER
diff_hunk: @@ -205,7 +215,7 @@ export const getMultiChainAssets = createDeepEqualSelector(
       if (!hideZeroBalanceTokens || balance.amount !== '0' || isNative) {
         allAssets.push({
           title: metadata.name,
-          address: assetId,
+          address: assetReference, // The EVM address represents the asset_reference portion of the CAIP-19 asset type
path: ui/selectors/assets.ts
user: login: xavier-brochard
body: Reverted
created_at: 2025-04-02T13:27:28Z
author_association: CONTRIBUTOR
diff_hunk: @@ -149,23 +151,38 @@ const AssetPage = ({
   ) as Record<Hex, Hex>;
 
   const { tokenBalances } = useTokenBalances({ chainIds: [chainId] });
+
   const selectedAccountTokenBalancesAcrossChains =
     tokenBalances[selectedAccount.address];
 
+  const multiChainAssets = useMultiChainAssets();
+  const mutichainTokenWithFiatAmount = multiChainAssets.find((item) =>
+    item.chainId === chainId && isNative
+      ? item.isNative
+      : item.address ===
+        (asset.type === AssetType.token ? asset.address : undefined),
+  );
+
   const isMetaMetricsEnabled = useSelector(getParticipateInMetaMetrics);
   const isMarketingEnabled = useSelector(getDataCollectionForMarketing);
   const metaMetricsId = useSelector(getMetaMetricsId);
 
-  const address =
-    type === AssetType.token
-      ? toChecksumHexAddress(asset.address)
-      : getNativeTokenAddress(chainId);
+  let address: string;
+  if (type === AssetType.token) {
+    if (isEvm) {
+      address = toChecksumHexAddress(asset.address);
+    } else {
+      address = asset.address;
+    }
+  } else {
+    address = getNativeTokenAddress(chainId);
path: ui/pages/asset/components/asset-page.tsx
user: login: xavier-brochard
body: Fixed
created_at: 2025-04-02T13:27:36Z
author_association: CONTRIBUTOR
diff_hunk: @@ -44,10 +42,10 @@ const Asset = () => {
   if (nft) {
     content = <NftDetails nft={nft} />;
   } else if (token && chainId) {
-    if (token?.address) {
-      content = <TokenAsset chainId={chainId} token={token} />;
-    } else {
+    if (token.isNative || !token.address) {
       content = <NativeAsset chainId={chainId} token={token} />;
+    } else {
+      content = <TokenAsset chainId={chainId} token={token} />;
path: ui/pages/asset/asset.tsx
user: login: xavier-brochard
body: Fixed
created_at: 2025-04-02T13:27:48Z
author_association: CONTRIBUTOR
diff_hunk: @@ -24,7 +24,7 @@ export type BaseToken = {
 
 // type created for non-evm tokens
 export type NonEvmBaseToken = {
-  address: CaipAssetType;
+  address: CaipAssetReference;
path: ui/components/app/assets/types.ts
user: login: xavier-brochard
body: Reverted
created_at: 2025-04-02T13:27:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,116 @@
+import { SnapId } from '@metamask/snaps-sdk';
+import { parseCaipAssetType, CaipAssetType } from '@metamask/utils';
+import { useEffect } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { useHistory } from 'react-router-dom';
+import {
+  sendMultichainTransaction,
+  setDefaultHomeActiveTabName,
+} from '../../../../store/actions';
+import {
+  getMemoizedUnapprovedTemplatedConfirmations,
+  getSelectedInternalAccount,
+} from '../../../../selectors';
+import { isMultichainWalletSnap } from '../../../../../shared/lib/accounts/snaps';
+import { CONFIRMATION_V_NEXT_ROUTE } from '../../../../helpers/constants/routes';
+import { useMultichainSelector } from '../../../../hooks/useMultichainSelector';
+import { getAccountAssets } from '../../../../selectors/assets';
+import { getMultichainNetwork } from '../../../../selectors/multichain';
+
+/**
+ * Use this hook to trigger the send flow for non-EVM accounts.
+ *
+ * On non-EVM, the send flow is delegated to a Snap that displays the UI,
+ * builds the transaction, and sends it to the blockchain.
+ *
+ * @param caipAssetType - The optional CAIP asset type to use for the send flow. Defaults to the chain's native asset if not provided.
+ * @returns A function that triggers the send flow for non-EVM accounts.
+ */
+export const useHandleSendNonEvm = (caipAssetType?: CaipAssetType) => {
+  const selectedAccount = useMultichainSelector(getSelectedInternalAccount);
+  const currentNetwork = useMultichainSelector(getMultichainNetwork);
+  const accountAssets = useMultichainSelector(getAccountAssets);
+
+  const account = useSelector(getSelectedInternalAccount);
+  const history = useHistory();
+  const dispatch = useDispatch();
+
+  const currentActivityTabName = useSelector(
+    // @ts-expect-error TODO: fix state type
+    (state) => state.metamask.defaultHomeActiveTabName,
+  );
+
+  const unapprovedTemplatedConfirmations = useSelector(
+    getMemoizedUnapprovedTemplatedConfirmations,
+  );
+
+  useEffect(() => {
+    const templatedSnapApproval = unapprovedTemplatedConfirmations.find(
+      (approval) => {
+        return (
+          approval.type === 'snap_dialog' &&
+          account.metadata.snap &&
+          account.metadata.snap.id === approval.origin &&
+          isMultichainWalletSnap(account.metadata.snap.id as SnapId)
+        );
+      },
+    );
+
+    if (templatedSnapApproval) {
+      history.push(`${CONFIRMATION_V_NEXT_ROUTE}/${templatedSnapApproval.id}`);
+    }
+  }, [unapprovedTemplatedConfirmations, history, account]);
+
+  return async () => {
+    // Non-EVM (Snap) Send flow
+    if (!account.metadata.snap) {
+      throw new Error('Non-EVM needs to be Snap accounts');
+    }
+
+    // TODO: Remove this once we want to enable all non-EVM Snaps
+    if (!isMultichainWalletSnap(account.metadata.snap.id as SnapId)) {
+      throw new Error(
+        `Non-EVM Snap is not whitelisted: ${account.metadata.snap.id}`,
+      );
+    }
+
+    // Either use the passed caipAssetType, or fallback to the chain's native asset
+    const assetTypeToUse = (() => {
+      if (caipAssetType) {
+        return caipAssetType;
+      }
+
+      const assetTypes = accountAssets?.[selectedAccount.id] || [];
+      const nativeAssetType = assetTypes.find((assetType) => {
+        const { chainId, assetNamespace } = parseCaipAssetType(assetType);
+        return (
+          chainId === currentNetwork.chainId && assetNamespace === 'slip44'
+        );
path: ui/components/app/wallet-overview/hooks/useHandleSendNonEvm.ts
user: login: xavier-brochard
body: Added a selector `getMultichainNativeAssetType` in `assets.ts`
created_at: 2025-04-02T13:28:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -66,7 +66,7 @@ export const AggregatedBalance = ({
   );
 
   const formattedTokenDisplay = formatWithThreshold(
-    multichainNativeTokenBalance.amount,
+    parseFloat(multichainNativeTokenBalance.amount.toString()),
path: ui/components/ui/aggregated-balance/aggregated-balance.tsx
user: login: xavier-brochard
body: Adding typing to `getMultichainNativeTokenBalance` surfaced this existing type issue.
created_at: 2025-04-02T16:09:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -224,6 +232,43 @@ export const getMultiChainAssets = createDeepEqualSelector(
   },
 );
 
+/**
+ * Gets a {@link Token} (EVM or Multichain) owned by the selected account by address and chainId.
+ *
+ * @param state - Redux state object
+ * @param tokenAddress - Token address (Hex for EVM, or CaipAssetType for non-EVM)
+ * @param chainId - Chain ID (Hex for EVM, or CaipChainId for non-EVM)
+ * @returns Token object
+ */
+export const getSelectedAccountTokenByAddressAndChainId =
+  createDeepEqualSelector(
+    (state) => state,
+    (_state, tokenAddress?: Hex | CaipAssetType | string) => tokenAddress,
+    (
+      _state,
+      _tokenAddress?: Hex | CaipAssetType | string,
+      _chainId?: Hex | CaipChainId,
+    ) => _chainId,
+    (state) => getSelectedInternalAccount(state),
+    (state, tokenAddress, chainId, selectedInternalAccount) => {
+      const isEvm = getMultichainIsEvm(state, selectedInternalAccount);
+
+      const assetsToSearch = isEvm
+        ? (getSelectedAccountTokensAcrossChains(state) as Record<
+            Hex,
+            TokenWithFiatAmount[]
+          >)
+        : (groupBy(
+            getMultiChainAssets(state, selectedInternalAccount),
+            'chainId',
+          ) as Record<CaipChainId, TokenWithFiatAmount[]>);
+
+      const result = findAssetByAddress(assetsToSearch, tokenAddress, chainId);
+
+      return result;
+    },
+  );
+
path: ui/selectors/assets.ts
user: login: gambinish
body: Nice, I'll try to implement a similar selector on mobile.

Question: Is there any scenario where we won't be able to rely on `getSelectedInternalAccount`? Just wondering if we should pass this in as a prop from the UI rather than a memoized internal selector
created_at: 2025-04-02T17:41:12Z
author_association: MEMBER
diff_hunk: @@ -197,3 +200,180 @@ describe('getMultiChainAssets', () => {
     expect(result1 === result2).toBe(true);
   });
 });
+
+describe('getSelectedAccountTokenByAddressAndChainId', () => {
path: ui/selectors/assets.test.ts
user: login: sahar-fehri
body: Thanks for tests 🙏 
created_at: 2025-04-02T21:23:16Z
author_association: CONTRIBUTOR
diff_hunk: @@ -224,6 +232,43 @@ export const getMultiChainAssets = createDeepEqualSelector(
   },
 );
 
+/**
+ * Gets a {@link Token} (EVM or Multichain) owned by the selected account by address and chainId.
+ *
+ * @param state - Redux state object
+ * @param tokenAddress - Token address (Hex for EVM, or CaipAssetType for non-EVM)
+ * @param chainId - Chain ID (Hex for EVM, or CaipChainId for non-EVM)
+ * @returns Token object
+ */
+export const getSelectedAccountTokenByAddressAndChainId =
+  createDeepEqualSelector(
+    (state) => state,
+    (_state, tokenAddress?: Hex | CaipAssetType | string) => tokenAddress,
+    (
+      _state,
+      _tokenAddress?: Hex | CaipAssetType | string,
+      _chainId?: Hex | CaipChainId,
+    ) => _chainId,
+    (state) => getSelectedInternalAccount(state),
+    (state, tokenAddress, chainId, selectedInternalAccount) => {
+      const isEvm = getMultichainIsEvm(state, selectedInternalAccount);
+
+      const assetsToSearch = isEvm
+        ? (getSelectedAccountTokensAcrossChains(state) as Record<
+            Hex,
+            TokenWithFiatAmount[]
+          >)
+        : (groupBy(
+            getMultiChainAssets(state, selectedInternalAccount),
+            'chainId',
+          ) as Record<CaipChainId, TokenWithFiatAmount[]>);
+
+      const result = findAssetByAddress(assetsToSearch, tokenAddress, chainId);
+
+      return result;
+    },
+  );
+
path: ui/selectors/assets.ts
user: login: xavier-brochard
body: Hum, I don't really know 🤔  

Just in case, let's do the change.
created_at: 2025-04-03T07:34:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -224,6 +232,43 @@ export const getMultiChainAssets = createDeepEqualSelector(
   },
 );
 
+/**
+ * Gets a {@link Token} (EVM or Multichain) owned by the selected account by address and chainId.
+ *
+ * @param state - Redux state object
+ * @param tokenAddress - Token address (Hex for EVM, or CaipAssetType for non-EVM)
+ * @param chainId - Chain ID (Hex for EVM, or CaipChainId for non-EVM)
+ * @returns Token object
+ */
+export const getSelectedAccountTokenByAddressAndChainId =
+  createDeepEqualSelector(
+    (state) => state,
+    (_state, tokenAddress?: Hex | CaipAssetType | string) => tokenAddress,
+    (
+      _state,
+      _tokenAddress?: Hex | CaipAssetType | string,
+      _chainId?: Hex | CaipChainId,
+    ) => _chainId,
+    (state) => getSelectedInternalAccount(state),
+    (state, tokenAddress, chainId, selectedInternalAccount) => {
+      const isEvm = getMultichainIsEvm(state, selectedInternalAccount);
+
+      const assetsToSearch = isEvm
+        ? (getSelectedAccountTokensAcrossChains(state) as Record<
+            Hex,
+            TokenWithFiatAmount[]
+          >)
+        : (groupBy(
+            getMultiChainAssets(state, selectedInternalAccount),
+            'chainId',
+          ) as Record<CaipChainId, TokenWithFiatAmount[]>);
+
+      const result = findAssetByAddress(assetsToSearch, tokenAddress, chainId);
+
+      return result;
+    },
+  );
+
path: ui/selectors/assets.ts
user: login: xavier-brochard
body: Fixed ✅   

It's now `getTokenByAccountAndAddressAndChainId`.

Let me know what you think @gambinish
created_at: 2025-04-03T09:55:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -116,7 +116,7 @@ export const AccountOverviewTabs = ({
 
   const onClickAsset = useCallback(
     (chainId: string, asset: string) =>
-      history.push(`${ASSET_ROUTE}/${chainId}/${asset}`),
+      history.push(`${ASSET_ROUTE}/${chainId}/${encodeURIComponent(asset)}`),
path: ui/components/multichain/account-overview/account-overview-tabs.tsx
user: login: xavier-brochard
body: - For EVM, is transparent because `asset` does not contain any special characters
- For non-EVM, it allows to pass the CaipAssetType in `asset`, that contains `/` and `:` characters without breaking the URL parsing with `useParams()`
created_at: 2025-04-03T13:18:53Z
author_association: CONTRIBUTOR
diff_hunk: @@ -116,7 +116,7 @@ export const AccountOverviewTabs = ({
 
   const onClickAsset = useCallback(
     (chainId: string, asset: string) =>
-      history.push(`${ASSET_ROUTE}/${chainId}/${asset}`),
+      history.push(`${ASSET_ROUTE}/${chainId}/${encodeURIComponent(asset)}`),
path: ui/components/multichain/account-overview/account-overview-tabs.tsx
user: login: xavier-brochard
body: @MetaMask/wallet-ux 
created_at: 2025-04-04T09:56:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -230,6 +230,34 @@ const groupNonEvmTransactionsByDate = (nonEvmTransactions) =>
     nonEvmTransactions?.transactions,
     (transaction) => transaction.timestamp * 1000,
   );
+
+/**
+ * Returns a copy of the nonEvmTransactions object with only the transactions that involve the tokenAddress.
+ *
+ * @param nonEvmTransactions - The nonEvmTransactions object.
+ * @param tokenAddress - [Optional] The address of the token to filter for. Returns all transactions if not provided.
+ * @returns A copy of the nonEvmTransactions object with only the transactions
+ * that involve the tokenAddress.
+ */
+export const keepOnlyNonEvmTransactionsForToken = (
path: ui/components/app/transaction-list/transaction-list.component.js
user: login: GuillaumeRx
body: ```suggestion
export const filterTransactionsByToken = (
```
WDYT ? :smile: 
created_at: 2025-04-04T12:45:44Z
author_association: CONTRIBUTOR
diff_hunk: @@ -253,9 +281,15 @@ export default function TransactionList({
     getSelectedAccountMultichainTransactions,
   );
 
+  const nonEvmTransactionFilteredForToken = keepOnlyNonEvmTransactionsForToken(
path: ui/components/app/transaction-list/transaction-list.component.js
user: login: GuillaumeRx
body: ```suggestion
  const nonEvmTransactionFilteredByToken = keepOnlyNonEvmTransactionsForToken(
```
created_at: 2025-04-04T12:46:10Z
author_association: CONTRIBUTOR
diff_hunk: @@ -230,6 +230,34 @@ const groupNonEvmTransactionsByDate = (nonEvmTransactions) =>
     nonEvmTransactions?.transactions,
     (transaction) => transaction.timestamp * 1000,
   );
+
+/**
+ * Returns a copy of the nonEvmTransactions object with only the transactions that involve the tokenAddress.
+ *
+ * @param nonEvmTransactions - The nonEvmTransactions object.
+ * @param tokenAddress - [Optional] The address of the token to filter for. Returns all transactions if not provided.
+ * @returns A copy of the nonEvmTransactions object with only the transactions
+ * that involve the tokenAddress.
+ */
+export const keepOnlyNonEvmTransactionsForToken = (
path: ui/components/app/transaction-list/transaction-list.component.js
user: login: xavier-brochard
body: `keepOnlyNonEvmTransactionsForToken` is more expressive IMO :) 
created_at: 2025-04-04T13:35:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -149,23 +151,44 @@ const AssetPage = ({
   ) as Record<Hex, Hex>;
 
   const { tokenBalances } = useTokenBalances({ chainIds: [chainId] });
+
   const selectedAccountTokenBalancesAcrossChains =
     tokenBalances[selectedAccount.address];
 
+  const multiChainAssets = useMultiChainAssets();
+  const mutichainTokenWithFiatAmount = multiChainAssets.find((item) =>
+    item.chainId === chainId && isNative
+      ? item.isNative
+      : item.address ===
+        (asset.type === AssetType.token ? asset.address : undefined),
+  );
path: ui/pages/asset/components/asset-page.tsx
user: login: GuillaumeRx
body: Can we avoid the nested ternary ?
created_at: 2025-04-07T09:13:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -224,6 +233,54 @@ export const getMultiChainAssets = createDeepEqualSelector(
   },
 );
 
+/**
+ * Gets a {@link Token} (EVM or Multichain) owned by the passed account by address and chainId.
+ *
+ * @param state - Redux state object
+ * @param tokenAddress - Token address (Hex for EVM, or CaipAssetType for non-EVM)
+ * @param chainId - Chain ID (Hex for EVM, or CaipChainId for non-EVM)
+ * @param internalAccount - The account holding the token to search for
+ * @returns Token object
+ */
+export const getTokenByAccountAndAddressAndChainId = createDeepEqualSelector(
+  (state) => state,
+  (_state, account?: InternalAccount) => account,
+  (
+    _state,
+    _account?: InternalAccount,
+    tokenAddress?: Hex | CaipAssetType | string,
+  ) => tokenAddress,
+  (
+    _state,
+    _account?: InternalAccount,
+    _tokenAddress?: Hex | CaipAssetType | string,
+    _chainId?: Hex | CaipChainId,
+  ) => _chainId,
+  (
+    state,
+    account?: InternalAccount,
+    tokenAddress?: Hex | CaipAssetType | string,
+    chainId?: Hex | CaipChainId,
+  ) => {
path: ui/selectors/assets.ts
user: login: GuillaumeRx
body: Can we ensure that the memoization here still works ? I'm worried that with the extensive operations the memoization will not work.
created_at: 2025-04-07T09:16:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -259,30 +316,53 @@ export const getMultichainAggregatedBalance = createDeepEqualSelector(
   },
 );
 
+/**
+ * Gets the CAIP asset type of the native token of the current network.
+ *
+ * @param state - Redux state object
+ * @param selectedAccount - Selected account
+ * @returns CAIP asset type of the native token, or undefined if no native token is found
+ */
+export const getMultichainNativeAssetType = createDeepEqualSelector(
+  getSelectedInternalAccount,
+  getAccountAssets,
+  getMultichainNetwork,
+  (
+    selectedAccount: ReturnType<typeof getSelectedInternalAccount>,
+    accountAssets: ReturnType<typeof getAccountAssets>,
+    currentNetwork: ReturnType<typeof getMultichainNetwork>,
+  ) => {
+    const assetTypes = accountAssets?.[selectedAccount.id] || [];
+    const nativeAssetType = assetTypes.find((assetType) => {
+      const { chainId, assetNamespace } = parseCaipAssetType(assetType);
+      return chainId === currentNetwork.chainId && assetNamespace === 'slip44';
+    });
+
+    return nativeAssetType;
+  },
+);
+
+/**
+ * Gets the balance of the native token of the current network for the selected account.
+ *
+ * @param state - Redux state object
+ * @param selectedAccount - Selected account
+ * @returns Balance of the native token, or fallbacks to { amount: 0, unit: '' } if no native token is found
+ */
 export const getMultichainNativeTokenBalance = createDeepEqualSelector(
   (_state, selectedAccount) => selectedAccount,
-  getMultichainNetwork,
   getMultichainBalances,
-  getAccountAssets,
+  getMultichainNativeAssetType,
   (
     selectedAccountAddress,
-    currentNetwork,
-    multichainBalances,
-    accountAssets,
+    multichainBalances: ReturnType<typeof getMultichainBalances>,
+    nativeAssetType: ReturnType<typeof getMultichainNativeAssetType>,
   ) => {
-    const assetIds = accountAssets?.[selectedAccountAddress.id] || [];
     const balances = multichainBalances?.[selectedAccountAddress.id];
 
-    let nativeTokenBalance = zeroBalanceAssetFallback;
-
-    assetIds.forEach((assetId: CaipAssetId) => {
-      const { chainId, assetNamespace } = parseCaipAssetType(assetId);
-      if (chainId === currentNetwork.chainId && assetNamespace === 'slip44') {
-        const balance = balances?.[assetId] || zeroBalanceAssetFallback;
-
-        nativeTokenBalance = balance;
-      }
-    });
+    const nativeTokenBalance = nativeAssetType
+      ? balances?.[nativeAssetType] || zeroBalanceAssetFallback
+      : zeroBalanceAssetFallback;
path: ui/selectors/assets.ts
user: login: GuillaumeRx
body: There seems to be a redundant `zeroBalanceAssetFallback` here
created_at: 2025-04-07T09:17:42Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-03-28T16:43:38Z
body: **CLA Signature Action:** All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.
author_association: CONTRIBUTOR
user: login: xavier-brochard
created_at: 2025-03-28T16:45:57Z
body: I have read the CLA Document and I hereby sign the CLA
author_association: CONTRIBUTOR
user: login: metamaskbot
created_at: 2025-04-02T09:56:11Z
body: <details><summary>Builds ready [f54d646]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds-test/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds-test-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14216050956/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14216050956/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14216050956/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4714433/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/04b640e3-1494-4ee8-84e8-f9745d905429/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1244 ± 60 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1244</td><td align="right">1120</td><td align="right">1406</td><td align="right">60</td><td align="right">1281</td><td align="right">1335</td></tr><tr><td>load</td><td align="right">1086</td><td align="right">978</td><td align="right">1208</td><td align="right">54</td><td align="right">1135</td><td align="right">988</td></tr><tr><td>domContentLoaded</td><td align="right">1079</td><td align="right">971</td><td align="right">1203</td><td align="right">54</td><td align="right">1139</td><td align="right">991</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">13</td><td align="right">40</td><td align="right">5</td><td align="right">17</td><td align="right">29</td></tr><tr><td>firstPaint</td><td align="right">746</td><td align="right">143</td><td align="right">1211</td><td align="right">425</td><td align="right">233</td><td align="right">293</td></tr><tr><td>backgroundConnect</td><td align="right">11</td><td align="right">7</td><td align="right">55</td><td align="right">7</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">19</td><td align="right">15</td><td align="right">35</td><td align="right">4</td><td align="right">20</td><td align="right">28</td></tr><tr><td>getState</td><td align="right">12</td><td align="right">4</td><td align="right">37</td><td align="right">8</td><td align="right">7</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">853</td><td align="right">747</td><td align="right">971</td><td align="right">54</td><td align="right">887</td><td align="right">946</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">5</td><td align="right">20</td><td align="right">2</td><td align="right">7</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2132</td><td align="right">1710</td><td align="right">2646</td><td align="right">200</td><td align="right">2220</td><td align="right">2529</td></tr><tr><td>load</td><td align="right">1644</td><td align="right">1349</td><td align="right">2052</td><td align="right">155</td><td align="right">1748</td><td align="right">1977</td></tr><tr><td>domContentLoaded</td><td align="right">1637</td><td align="right">1346</td><td align="right">2031</td><td align="right">153</td><td align="right">1741</td><td align="right">1957</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">12</td><td align="right">68</td><td align="right">12</td><td align="right">14</td><td align="right">52</td></tr><tr><td>firstPaint</td><td align="right">205</td><td align="right">66</td><td align="right">378</td><td align="right">68</td><td align="right">246</td><td align="right">378</td></tr><tr><td>backgroundConnect</td><td align="right">28</td><td align="right">11</td><td align="right">85</td><td align="right">15</td><td align="right">29</td><td align="right">68</td></tr><tr><td>firstReactRender</td><td align="right">222</td><td align="right">59</td><td align="right">355</td><td align="right">116</td><td align="right">73</td><td align="right">95</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">3</td><td align="right">25</td><td align="right">4</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">5</td><td align="right">1</td><td align="right">3</td><td align="right">4</td></tr><tr><td>loadScripts</td><td align="right">1628</td><td align="right">1343</td><td align="right">2008</td><td align="right">150</td><td align="right">1736</td><td align="right">1930</td></tr><tr><td>setupStore</td><td align="right">24</td><td align="right">6</td><td align="right">263</td><td align="right">47</td><td align="right">20</td><td align="right">9</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1378</td><td align="right">1195</td><td align="right">2088</td><td align="right">144</td><td align="right">1410</td><td align="right">1721</td></tr><tr><td>load</td><td align="right">1241</td><td align="right">1065</td><td align="right">1930</td><td align="right">139</td><td align="right">1288</td><td align="right">1563</td></tr><tr><td>domContentLoaded</td><td align="right">1240</td><td align="right">1065</td><td align="right">1930</td><td align="right">139</td><td align="right">1287</td><td align="right">1563</td></tr><tr><td>domInteractive</td><td align="right">97</td><td align="right">40</td><td align="right">205</td><td align="right">28</td><td align="right">89</td><td align="right">97</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">26</td><td align="right">16</td><td align="right">178</td><td align="right">18</td><td align="right">25</td><td align="right">44</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">19</td><td align="right">35</td><td align="right">3</td><td align="right">22</td><td align="right">27</td></tr><tr><td>getState</td><td align="right">6</td><td align="right">4</td><td align="right">13</td><td align="right">2</td><td align="right">7</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1216</td><td align="right">1046</td><td align="right">1907</td><td align="right">137</td><td align="right">1265</td><td align="right">1533</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">17</td><td align="right">2</td><td align="right">6</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1552</td><td align="right">1357</td><td align="right">2116</td><td align="right">167</td><td align="right">1622</td><td align="right">1968</td></tr><tr><td>load</td><td align="right">1343</td><td align="right">1150</td><td align="right">1882</td><td align="right">158</td><td align="right">1420</td><td align="right">1745</td></tr><tr><td>domContentLoaded</td><td align="right">1343</td><td align="right">1150</td><td align="right">1881</td><td align="right">157</td><td align="right">1420</td><td align="right">1745</td></tr><tr><td>domInteractive</td><td align="right">97</td><td align="right">37</td><td align="right">176</td><td align="right">26</td><td align="right">91</td><td align="right">98</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">24</td><td align="right">18</td><td align="right">48</td><td align="right">5</td><td align="right">25</td><td align="right">29</td></tr><tr><td>firstReactRender</td><td align="right">34</td><td align="right">29</td><td align="right">52</td><td align="right">4</td><td align="right">36</td><td align="right">45</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">28</td><td align="right">4</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">1</td><td align="right">0</td><td align="right">2</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1321</td><td align="right">1126</td><td align="right">1843</td><td align="right">156</td><td align="right">1399</td><td align="right">1721</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">5</td><td align="right">32</td><td align="right">3</td><td align="right">8</td><td align="right">9</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 1.2 KiB (0.02%)</li>
<li>common: 456 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-02T13:28:42Z
body: <!-- METAMASK-CODEOWNERS-BOT -->
✨ Files requiring CODEOWNER review ✨
---
🖥️ @MetaMask/wallet-ux
- `ui/components/multichain/account-overview/account-overview-tabs.tsx`


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-02T16:56:23Z
body: <details><summary>Builds ready [2f42868]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds-test/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds-test-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14224621172/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14224621172/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14224621172/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4716762/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/3373d332-9937-4f02-bb80-74c258fee051/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1190 ± 67 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1190</td><td align="right">1078</td><td align="right">1432</td><td align="right">67</td><td align="right">1234</td><td align="right">1303</td></tr><tr><td>load</td><td align="right">1038</td><td align="right">937</td><td align="right">1230</td><td align="right">63</td><td align="right">946</td><td align="right">986</td></tr><tr><td>domContentLoaded</td><td align="right">1032</td><td align="right">934</td><td align="right">1226</td><td align="right">63</td><td align="right">948</td><td align="right">986</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">13</td><td align="right">31</td><td align="right">4</td><td align="right">16</td><td align="right">27</td></tr><tr><td>firstPaint</td><td align="right">757</td><td align="right">72</td><td align="right">1217</td><td align="right">397</td><td align="right">274</td><td align="right">986</td></tr><tr><td>backgroundConnect</td><td align="right">10</td><td align="right">6</td><td align="right">54</td><td align="right">5</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">20</td><td align="right">14</td><td align="right">49</td><td align="right">6</td><td align="right">20</td><td align="right">37</td></tr><tr><td>getState</td><td align="right">12</td><td align="right">4</td><td align="right">37</td><td align="right">8</td><td align="right">6</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">819</td><td align="right">725</td><td align="right">1007</td><td align="right">60</td><td align="right">862</td><td align="right">920</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">17</td><td align="right">2</td><td align="right">7</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2114</td><td align="right">1679</td><td align="right">2629</td><td align="right">225</td><td align="right">2237</td><td align="right">2537</td></tr><tr><td>load</td><td align="right">1635</td><td align="right">1300</td><td align="right">2042</td><td align="right">176</td><td align="right">1750</td><td align="right">1975</td></tr><tr><td>domContentLoaded</td><td align="right">1628</td><td align="right">1296</td><td align="right">2012</td><td align="right">173</td><td align="right">1744</td><td align="right">1958</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">12</td><td align="right">62</td><td align="right">12</td><td align="right">14</td><td align="right">50</td></tr><tr><td>firstPaint</td><td align="right">194</td><td align="right">66</td><td align="right">413</td><td align="right">70</td><td align="right">263</td><td align="right">80</td></tr><tr><td>backgroundConnect</td><td align="right">28</td><td align="right">14</td><td align="right">77</td><td align="right">16</td><td align="right">28</td><td align="right">72</td></tr><tr><td>firstReactRender</td><td align="right">217</td><td align="right">55</td><td align="right">359</td><td align="right">113</td><td align="right">84</td><td align="right">97</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">4</td><td align="right">27</td><td align="right">4</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">6</td><td align="right">1</td><td align="right">3</td><td align="right">5</td></tr><tr><td>loadScripts</td><td align="right">1620</td><td align="right">1293</td><td align="right">1986</td><td align="right">170</td><td align="right">1736</td><td align="right">1928</td></tr><tr><td>setupStore</td><td align="right">30</td><td align="right">6</td><td align="right">268</td><td align="right">58</td><td align="right">20</td><td align="right">7</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1363</td><td align="right">1212</td><td align="right">1885</td><td align="right">140</td><td align="right">1384</td><td align="right">1710</td></tr><tr><td>load</td><td align="right">1225</td><td align="right">1080</td><td align="right">1731</td><td align="right">129</td><td align="right">1251</td><td align="right">1539</td></tr><tr><td>domContentLoaded</td><td align="right">1225</td><td align="right">1080</td><td align="right">1731</td><td align="right">129</td><td align="right">1251</td><td align="right">1539</td></tr><tr><td>domInteractive</td><td align="right">97</td><td align="right">37</td><td align="right">186</td><td align="right">24</td><td align="right">90</td><td align="right">97</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">25</td><td align="right">16</td><td align="right">102</td><td align="right">11</td><td align="right">25</td><td align="right">43</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">18</td><td align="right">56</td><td align="right">4</td><td align="right">22</td><td align="right">27</td></tr><tr><td>getState</td><td align="right">6</td><td align="right">3</td><td align="right">33</td><td align="right">3</td><td align="right">7</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1202</td><td align="right">1063</td><td align="right">1695</td><td align="right">127</td><td align="right">1235</td><td align="right">1513</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">18</td><td align="right">2</td><td align="right">6</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1569</td><td align="right">1348</td><td align="right">2237</td><td align="right">170</td><td align="right">1622</td><td align="right">1991</td></tr><tr><td>load</td><td align="right">1356</td><td align="right">1182</td><td align="right">1980</td><td align="right">158</td><td align="right">1408</td><td align="right">1764</td></tr><tr><td>domContentLoaded</td><td align="right">1355</td><td align="right">1181</td><td align="right">1980</td><td align="right">158</td><td align="right">1407</td><td align="right">1764</td></tr><tr><td>domInteractive</td><td align="right">105</td><td align="right">36</td><td align="right">194</td><td align="right">26</td><td align="right">89</td><td align="right">99</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">27</td><td align="right">19</td><td align="right">69</td><td align="right">8</td><td align="right">28</td><td align="right">45</td></tr><tr><td>firstReactRender</td><td align="right">34</td><td align="right">28</td><td align="right">49</td><td align="right">4</td><td align="right">37</td><td align="right">43</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">4</td><td align="right">30</td><td align="right">5</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1331</td><td align="right">1155</td><td align="right">1952</td><td align="right">157</td><td align="right">1383</td><td align="right">1740</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">28</td><td align="right">4</td><td align="right">7</td><td align="right">9</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 1.55 KiB (0.02%)</li>
<li>common: 456 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: salimtb
created_at: 2025-04-02T17:52:54Z
body: i just found 2 small bugs, hide token is not supported for SOL , so we need to hide this button:

https://github.com/user-attachments/assets/930d9e2a-8587-43f9-b4fa-a8c4657a2e99



https://github.com/user-attachments/assets/bce68274-dc0a-4209-b65d-e4b3adf795b2


author_association: CONTRIBUTOR
user: login: salimtb
created_at: 2025-04-02T17:55:01Z
body: transactions should be filtered just for Jupiter related here, we also have NaN SOL which seems to be a bug as well:

<img width="1096" alt="Screenshot 2025-04-02 at 19 54 31" src="https://github.com/user-attachments/assets/e2852570-2bfe-4f47-8448-661df172977c" />

author_association: CONTRIBUTOR
user: login: salimtb
created_at: 2025-04-02T17:56:24Z
body: the preselected asset should be Jupiter and not SOL, same for bridge and swap

https://github.com/user-attachments/assets/b9103d24-b864-4a90-80c0-a5ba64d9468b


author_association: CONTRIBUTOR
user: login: sahar-fehri
created_at: 2025-04-02T21:25:13Z
body: Thank you for taking the time to refactor some of the existing code 🙏 
Anyone else able to see this?
It seems like i can't repro consistantly for now; i suspect its coming from `app-header.js` file on this
`const { chainId, isEvm } = multichainNetwork;`

<img width="1286" alt="Screenshot 2025-04-02 at 23 20 14" src="https://github.com/user-attachments/assets/83045117-fd61-47dc-88ad-6f78d316ad8b" />

author_association: CONTRIBUTOR
user: login: metamaskbot
created_at: 2025-04-03T08:50:15Z
body: <details><summary>Builds ready [ab36a94]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds-test/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds-test-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14238180069/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14238180069/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14238180069/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4719314/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/4472abd1-4bf5-46e4-9489-5ad24023532e/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1186 ± 61 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1186</td><td align="right">1083</td><td align="right">1403</td><td align="right">61</td><td align="right">1211</td><td align="right">1302</td></tr><tr><td>load</td><td align="right">1033</td><td align="right">939</td><td align="right">1173</td><td align="right">54</td><td align="right">942</td><td align="right">994</td></tr><tr><td>domContentLoaded</td><td align="right">1028</td><td align="right">925</td><td align="right">1170</td><td align="right">54</td><td align="right">937</td><td align="right">993</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">13</td><td align="right">48</td><td align="right">5</td><td align="right">15</td><td align="right">27</td></tr><tr><td>firstPaint</td><td align="right">702</td><td align="right">76</td><td align="right">1177</td><td align="right">417</td><td align="right">221</td><td align="right">960</td></tr><tr><td>backgroundConnect</td><td align="right">10</td><td align="right">6</td><td align="right">32</td><td align="right">4</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">18</td><td align="right">15</td><td align="right">32</td><td align="right">3</td><td align="right">18</td><td align="right">21</td></tr><tr><td>getState</td><td align="right">12</td><td align="right">5</td><td align="right">30</td><td align="right">7</td><td align="right">6</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">815</td><td align="right">720</td><td align="right">954</td><td align="right">52</td><td align="right">844</td><td align="right">902</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">4</td><td align="right">20</td><td align="right">2</td><td align="right">7</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1999</td><td align="right">1608</td><td align="right">2481</td><td align="right">216</td><td align="right">2134</td><td align="right">2403</td></tr><tr><td>load</td><td align="right">1552</td><td align="right">1260</td><td align="right">1937</td><td align="right">161</td><td align="right">1646</td><td align="right">1852</td></tr><tr><td>domContentLoaded</td><td align="right">1546</td><td align="right">1256</td><td align="right">1909</td><td align="right">157</td><td align="right">1641</td><td align="right">1826</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">11</td><td align="right">57</td><td align="right">11</td><td align="right">14</td><td align="right">50</td></tr><tr><td>firstPaint</td><td align="right">183</td><td align="right">64</td><td align="right">380</td><td align="right">66</td><td align="right">231</td><td align="right">64</td></tr><tr><td>backgroundConnect</td><td align="right">26</td><td align="right">11</td><td align="right">77</td><td align="right">15</td><td align="right">27</td><td align="right">68</td></tr><tr><td>firstReactRender</td><td align="right">179</td><td align="right">51</td><td align="right">358</td><td align="right">115</td><td align="right">84</td><td align="right">96</td></tr><tr><td>getState</td><td align="right">8</td><td align="right">3</td><td align="right">22</td><td align="right">3</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">2</td><td align="right">1</td><td align="right">5</td><td align="right">1</td><td align="right">3</td><td align="right">4</td></tr><tr><td>loadScripts</td><td align="right">1538</td><td align="right">1254</td><td align="right">1883</td><td align="right">154</td><td align="right">1634</td><td align="right">1801</td></tr><tr><td>setupStore</td><td align="right">25</td><td align="right">6</td><td align="right">262</td><td align="right">53</td><td align="right">253</td><td align="right">9</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1395</td><td align="right">1211</td><td align="right">1832</td><td align="right">136</td><td align="right">1436</td><td align="right">1745</td></tr><tr><td>load</td><td align="right">1254</td><td align="right">1085</td><td align="right">1638</td><td align="right">127</td><td align="right">1305</td><td align="right">1574</td></tr><tr><td>domContentLoaded</td><td align="right">1253</td><td align="right">1085</td><td align="right">1637</td><td align="right">127</td><td align="right">1304</td><td align="right">1573</td></tr><tr><td>domInteractive</td><td align="right">101</td><td align="right">38</td><td align="right">177</td><td align="right">28</td><td align="right">87</td><td align="right">94</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">23</td><td align="right">16</td><td align="right">80</td><td align="right">7</td><td align="right">26</td><td align="right">33</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">19</td><td align="right">45</td><td align="right">4</td><td align="right">23</td><td align="right">29</td></tr><tr><td>getState</td><td align="right">8</td><td align="right">3</td><td align="right">46</td><td align="right">7</td><td align="right">7</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1232</td><td align="right">1066</td><td align="right">1617</td><td align="right">126</td><td align="right">1286</td><td align="right">1549</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">3</td><td align="right">62</td><td align="right">6</td><td align="right">6</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1550</td><td align="right">1339</td><td align="right">2166</td><td align="right">173</td><td align="right">1572</td><td align="right">2024</td></tr><tr><td>load</td><td align="right">1335</td><td align="right">1168</td><td align="right">1944</td><td align="right">165</td><td align="right">1364</td><td align="right">1802</td></tr><tr><td>domContentLoaded</td><td align="right">1335</td><td align="right">1168</td><td align="right">1944</td><td align="right">165</td><td align="right">1364</td><td align="right">1802</td></tr><tr><td>domInteractive</td><td align="right">100</td><td align="right">66</td><td align="right">190</td><td align="right">23</td><td align="right">91</td><td align="right">98</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">26</td><td align="right">17</td><td align="right">79</td><td align="right">7</td><td align="right">28</td><td align="right">41</td></tr><tr><td>firstReactRender</td><td align="right">35</td><td align="right">29</td><td align="right">55</td><td align="right">5</td><td align="right">37</td><td align="right">43</td></tr><tr><td>getState</td><td align="right">8</td><td align="right">4</td><td align="right">30</td><td align="right">6</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1312</td><td align="right">1149</td><td align="right">1926</td><td align="right">164</td><td align="right">1343</td><td align="right">1779</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">36</td><td align="right">5</td><td align="right">8</td><td align="right">9</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 2.1 KiB (0.03%)</li>
<li>common: 457 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: zone-live
created_at: 2025-04-03T08:59:02Z
body: > transactions should be filtered just for Jupiter related here, we also have NaN SOL which seems to be a bug as well:
> 
> <img alt="Screenshot 2025-04-02 at 19 54 31" width="1096" src="https://private-user-images.githubusercontent.com/26223211/429604918-e2852570-2bfe-4f47-8448-661df172977c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDM2MTcwMjEsIm5iZiI6MTc0MzYxNjcyMSwicGF0aCI6Ii8yNjIyMzIxMS80Mjk2MDQ5MTgtZTI4NTI1NzAtMmJmZS00ZjQ3LTg0NDgtNjYxZGYxNzI5NzdjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA0MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNDAyVDE3NTg0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY4MTk2ZmNiYWEyNGE5N2RmNWMzYjg3OTk5MGUzNDhkMWQ1NjJjNGUzYTM3MGIxODg1NDE1MjBmYWY4ZGRkNWQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.z6cLAm1pDv9NKgmkQS8uXqcuKGaU7KCNQG9agY0unEE">

Just for more ppl to be aware the `NaN SOL` bug has been fixed [here](https://github.com/MetaMask/metamask-extension/pull/31514). 👍🏼 
author_association: CONTRIBUTOR
user: login: aganglada
created_at: 2025-04-03T09:12:19Z
body: > transactions should be filtered just for Jupiter related here, we also have NaN SOL which seems to be a bug as well:
> 
> <img alt="Screenshot 2025-04-02 at 19 54 31" width="1096" src="https://private-user-images.githubusercontent.com/26223211/429604918-e2852570-2bfe-4f47-8448-661df172977c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDM2NzA1NTgsIm5iZiI6MTc0MzY3MDI1OCwicGF0aCI6Ii8yNjIyMzIxMS80Mjk2MDQ5MTgtZTI4NTI1NzAtMmJmZS00ZjQ3LTg0NDgtNjYxZGYxNzI5NzdjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA0MDMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNDAzVDA4NTA1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTllN2E5YzlhZWQ2YmIzZWVjOWUzY2E4OGJjN2I2MTNjNjE5MjIxNDczMDg5MzY5Nzc2YzJlY2M4YjQwOWExNDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vjVOSYZxa_Qx9d9U4S_bM9Xr-1QBg8SpW3TYZ3aj1js">

The NaN problem is unrelated
author_association: CONTRIBUTOR
user: login: xavier-brochard
created_at: 2025-04-03T10:09:06Z
body: - Pushed a fix to hide the button "Hide token" from drop down menu.
- Pushed a fix to hide the button "View in Explorer" from drop down menu. Pending an upcoming fix.
author_association: CONTRIBUTOR
user: login: metamaskbot
created_at: 2025-04-03T10:42:04Z
body: <details><summary>Builds ready [113133c]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds-test/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds-test-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14240373671/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14240373671/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14240373671/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4719873/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/17efd6e2-5c92-473e-9559-ab42dc816b0d/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1223 ± 59 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1223</td><td align="right">1106</td><td align="right">1501</td><td align="right">59</td><td align="right">1260</td><td align="right">1313</td></tr><tr><td>load</td><td align="right">1075</td><td align="right">981</td><td align="right">1271</td><td align="right">55</td><td align="right">1124</td><td align="right">983</td></tr><tr><td>domContentLoaded</td><td align="right">1070</td><td align="right">973</td><td align="right">1261</td><td align="right">54</td><td align="right">1123</td><td align="right">989</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">13</td><td align="right">29</td><td align="right">4</td><td align="right">16</td><td align="right">26</td></tr><tr><td>firstPaint</td><td align="right">686</td><td align="right">74</td><td align="right">1268</td><td align="right">443</td><td align="right">201</td><td align="right">284</td></tr><tr><td>backgroundConnect</td><td align="right">9</td><td align="right">6</td><td align="right">15</td><td align="right">2</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">19</td><td align="right">14</td><td align="right">49</td><td align="right">6</td><td align="right">19</td><td align="right">32</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">4</td><td align="right">37</td><td align="right">7</td><td align="right">6</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">820</td><td align="right">725</td><td align="right">1010</td><td align="right">53</td><td align="right">857</td><td align="right">891</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">5</td><td align="right">22</td><td align="right">2</td><td align="right">7</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2166</td><td align="right">1706</td><td align="right">2712</td><td align="right">238</td><td align="right">2285</td><td align="right">2641</td></tr><tr><td>load</td><td align="right">1677</td><td align="right">1306</td><td align="right">2132</td><td align="right">187</td><td align="right">1795</td><td align="right">2032</td></tr><tr><td>domContentLoaded</td><td align="right">1670</td><td align="right">1298</td><td align="right">2104</td><td align="right">182</td><td align="right">1789</td><td align="right">1998</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">12</td><td align="right">64</td><td align="right">11</td><td align="right">14</td><td align="right">51</td></tr><tr><td>firstPaint</td><td align="right">195</td><td align="right">69</td><td align="right">465</td><td align="right">69</td><td align="right">233</td><td align="right">69</td></tr><tr><td>backgroundConnect</td><td align="right">30</td><td align="right">15</td><td align="right">99</td><td align="right">19</td><td align="right">32</td><td align="right">85</td></tr><tr><td>firstReactRender</td><td align="right">192</td><td align="right">58</td><td align="right">365</td><td align="right">119</td><td align="right">83</td><td align="right">95</td></tr><tr><td>getState</td><td align="right">14</td><td align="right">3</td><td align="right">249</td><td align="right">29</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">7</td><td align="right">1</td><td align="right">3</td><td align="right">4</td></tr><tr><td>loadScripts</td><td align="right">1661</td><td align="right">1293</td><td align="right">2078</td><td align="right">178</td><td align="right">1786</td><td align="right">1972</td></tr><tr><td>setupStore</td><td align="right">45</td><td align="right">7</td><td align="right">304</td><td align="right">81</td><td align="right">250</td><td align="right">9</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1439</td><td align="right">1242</td><td align="right">2011</td><td align="right">160</td><td align="right">1501</td><td align="right">1842</td></tr><tr><td>load</td><td align="right">1297</td><td align="right">1114</td><td align="right">1867</td><td align="right">159</td><td align="right">1365</td><td align="right">1696</td></tr><tr><td>domContentLoaded</td><td align="right">1296</td><td align="right">1113</td><td align="right">1867</td><td align="right">159</td><td align="right">1365</td><td align="right">1695</td></tr><tr><td>domInteractive</td><td align="right">103</td><td align="right">41</td><td align="right">189</td><td align="right">30</td><td align="right">89</td><td align="right">97</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">27</td><td align="right">16</td><td align="right">176</td><td align="right">20</td><td align="right">26</td><td align="right">35</td></tr><tr><td>firstReactRender</td><td align="right">23</td><td align="right">19</td><td align="right">57</td><td align="right">5</td><td align="right">24</td><td align="right">29</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">45</td><td align="right">5</td><td align="right">7</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1270</td><td align="right">1048</td><td align="right">1846</td><td align="right">160</td><td align="right">1337</td><td align="right">1673</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">4</td><td align="right">23</td><td align="right">3</td><td align="right">6</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1480</td><td align="right">1292</td><td align="right">2136</td><td align="right">158</td><td align="right">1516</td><td align="right">1899</td></tr><tr><td>load</td><td align="right">1279</td><td align="right">1129</td><td align="right">1889</td><td align="right">144</td><td align="right">1300</td><td align="right">1672</td></tr><tr><td>domContentLoaded</td><td align="right">1278</td><td align="right">1129</td><td align="right">1889</td><td align="right">144</td><td align="right">1300</td><td align="right">1672</td></tr><tr><td>domInteractive</td><td align="right">93</td><td align="right">38</td><td align="right">172</td><td align="right">25</td><td align="right">89</td><td align="right">97</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">24</td><td align="right">17</td><td align="right">55</td><td align="right">6</td><td align="right">25</td><td align="right">41</td></tr><tr><td>firstReactRender</td><td align="right">34</td><td align="right">27</td><td align="right">49</td><td align="right">5</td><td align="right">37</td><td align="right">43</td></tr><tr><td>getState</td><td align="right">8</td><td align="right">4</td><td align="right">37</td><td align="right">6</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">2</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1257</td><td align="right">1111</td><td align="right">1868</td><td align="right">143</td><td align="right">1280</td><td align="right">1653</td></tr><tr><td>setupStore</td><td align="right">7</td><td align="right">5</td><td align="right">19</td><td align="right">2</td><td align="right">7</td><td align="right">9</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 5.4 KiB (0.08%)</li>
<li>common: 457 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: xavier-brochard
created_at: 2025-04-03T11:26:00Z
body: Pushed a fix to filter the transactions by selected token
author_association: CONTRIBUTOR
user: login: metamaskbot
created_at: 2025-04-03T11:53:49Z
body: <details><summary>Builds ready [a6e6d06]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds-test/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds-test-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14241581104/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14241581104/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14241581104/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4720271/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/464581ac-15e7-4eac-91b9-d4e5bcd05d2d/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1206 ± 51 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1206</td><td align="right">1109</td><td align="right">1326</td><td align="right">51</td><td align="right">1237</td><td align="right">1307</td></tr><tr><td>load</td><td align="right">1058</td><td align="right">921</td><td align="right">1178</td><td align="right">51</td><td align="right">1126</td><td align="right">989</td></tr><tr><td>domContentLoaded</td><td align="right">1051</td><td align="right">914</td><td align="right">1174</td><td align="right">52</td><td align="right">1133</td><td align="right">993</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">13</td><td align="right">41</td><td align="right">5</td><td align="right">15</td><td align="right">27</td></tr><tr><td>firstPaint</td><td align="right">779</td><td align="right">89</td><td align="right">1167</td><td align="right">403</td><td align="right">235</td><td align="right">981</td></tr><tr><td>backgroundConnect</td><td align="right">11</td><td align="right">6</td><td align="right">79</td><td align="right">11</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">19</td><td align="right">14</td><td align="right">52</td><td align="right">5</td><td align="right">19</td><td align="right">29</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">4</td><td align="right">30</td><td align="right">7</td><td align="right">6</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">802</td><td align="right">670</td><td align="right">922</td><td align="right">53</td><td align="right">843</td><td align="right">882</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">4</td><td align="right">24</td><td align="right">3</td><td align="right">7</td><td align="right">8</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2037</td><td align="right">1687</td><td align="right">2569</td><td align="right">231</td><td align="right">2204</td><td align="right">2366</td></tr><tr><td>load</td><td align="right">1583</td><td align="right">1307</td><td align="right">1980</td><td align="right">176</td><td align="right">1710</td><td align="right">1848</td></tr><tr><td>domContentLoaded</td><td align="right">1578</td><td align="right">1304</td><td align="right">1958</td><td align="right">174</td><td align="right">1706</td><td align="right">1843</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">12</td><td align="right">64</td><td align="right">11</td><td align="right">14</td><td align="right">52</td></tr><tr><td>firstPaint</td><td align="right">176</td><td align="right">66</td><td align="right">375</td><td align="right">60</td><td align="right">231</td><td align="right">68</td></tr><tr><td>backgroundConnect</td><td align="right">28</td><td align="right">14</td><td align="right">256</td><td align="right">27</td><td align="right">28</td><td align="right">65</td></tr><tr><td>firstReactRender</td><td align="right">157</td><td align="right">54</td><td align="right">357</td><td align="right">103</td><td align="right">89</td><td align="right">98</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">3</td><td align="right">20</td><td align="right">3</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">5</td><td align="right">1</td><td align="right">3</td><td align="right">4</td></tr><tr><td>loadScripts</td><td align="right">1570</td><td align="right">1300</td><td align="right">1932</td><td align="right">171</td><td align="right">1700</td><td align="right">1823</td></tr><tr><td>setupStore</td><td align="right">24</td><td align="right">7</td><td align="right">261</td><td align="right">47</td><td align="right">23</td><td align="right">9</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1383</td><td align="right">1208</td><td align="right">1942</td><td align="right">150</td><td align="right">1438</td><td align="right">1736</td></tr><tr><td>load</td><td align="right">1249</td><td align="right">1056</td><td align="right">1795</td><td align="right">147</td><td align="right">1294</td><td align="right">1581</td></tr><tr><td>domContentLoaded</td><td align="right">1249</td><td align="right">1056</td><td align="right">1794</td><td align="right">147</td><td align="right">1294</td><td align="right">1581</td></tr><tr><td>domInteractive</td><td align="right">109</td><td align="right">39</td><td align="right">188</td><td align="right">29</td><td align="right">44</td><td align="right">95</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">24</td><td align="right">15</td><td align="right">118</td><td align="right">12</td><td align="right">23</td><td align="right">34</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">19</td><td align="right">55</td><td align="right">5</td><td align="right">23</td><td align="right">27</td></tr><tr><td>getState</td><td align="right">6</td><td align="right">3</td><td align="right">27</td><td align="right">2</td><td align="right">7</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1226</td><td align="right">1039</td><td align="right">1771</td><td align="right">144</td><td align="right">1266</td><td align="right">1554</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">3</td><td align="right">12</td><td align="right">2</td><td align="right">6</td><td align="right">7</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1557</td><td align="right">1364</td><td align="right">2232</td><td align="right">158</td><td align="right">1605</td><td align="right">1968</td></tr><tr><td>load</td><td align="right">1346</td><td align="right">1193</td><td align="right">1981</td><td align="right">148</td><td align="right">1375</td><td align="right">1715</td></tr><tr><td>domContentLoaded</td><td align="right">1346</td><td align="right">1193</td><td align="right">1981</td><td align="right">148</td><td align="right">1374</td><td align="right">1714</td></tr><tr><td>domInteractive</td><td align="right">106</td><td align="right">41</td><td align="right">184</td><td align="right">27</td><td align="right">92</td><td align="right">98</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">25</td><td align="right">17</td><td align="right">52</td><td align="right">5</td><td align="right">27</td><td align="right">32</td></tr><tr><td>firstReactRender</td><td align="right">35</td><td align="right">29</td><td align="right">50</td><td align="right">5</td><td align="right">37</td><td align="right">48</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">4</td><td align="right">35</td><td align="right">6</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">2</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1323</td><td align="right">1173</td><td align="right">1951</td><td align="right">147</td><td align="right">1354</td><td align="right">1685</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">32</td><td align="right">5</td><td align="right">7</td><td align="right">9</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 5.4 KiB (0.08%)</li>
<li>common: 457 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: xavier-brochard
created_at: 2025-04-03T12:13:32Z
body: Pushed a commit that fixes the link on button "View asset in explorer"

![image](https://github.com/user-attachments/assets/48b0f753-4a7f-48fe-b4b5-82d1a0e7c0a1)

author_association: CONTRIBUTOR
user: login: xavier-brochard
created_at: 2025-04-03T12:14:47Z
body: >Anyone else able to see this? 

@sahar-fehri I cannot reproduce this issue 🤔 
author_association: CONTRIBUTOR
user: login: metamaskbot
created_at: 2025-04-03T13:11:45Z
body: <details><summary>Builds ready [2ca1cec]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds-test/metamask-chrome-12.15.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds-test-mv2/metamask-firefox-12.15.0.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.0-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.0-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14243099911/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14243099911/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14243099911/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4720704/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/f17a9b77-e190-4723-a0cb-7122532077d6/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1210 ± 66 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1210</td><td align="right">1108</td><td align="right">1526</td><td align="right">66</td><td align="right">1247</td><td align="right">1332</td></tr><tr><td>load</td><td align="right">1058</td><td align="right">940</td><td align="right">1391</td><td align="right">64</td><td align="right">1175</td><td align="right">993</td></tr><tr><td>domContentLoaded</td><td align="right">1051</td><td align="right">934</td><td align="right">1389</td><td align="right">66</td><td align="right">1389</td><td align="right">990</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">13</td><td align="right">37</td><td align="right">5</td><td align="right">15</td><td align="right">29</td></tr><tr><td>firstPaint</td><td align="right">816</td><td align="right">87</td><td align="right">1186</td><td align="right">386</td><td align="right">235</td><td align="right">985</td></tr><tr><td>backgroundConnect</td><td align="right">11</td><td align="right">7</td><td align="right">55</td><td align="right">9</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">19</td><td align="right">14</td><td align="right">49</td><td align="right">6</td><td align="right">19</td><td align="right">32</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">3</td><td align="right">31</td><td align="right">6</td><td align="right">6</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">802</td><td align="right">686</td><td align="right">1131</td><td align="right">66</td><td align="right">840</td><td align="right">924</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">4</td><td align="right">25</td><td align="right">3</td><td align="right">7</td><td align="right">9</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2155</td><td align="right">1726</td><td align="right">2642</td><td align="right">223</td><td align="right">2239</td><td align="right">2619</td></tr><tr><td>load</td><td align="right">1667</td><td align="right">1336</td><td align="right">2064</td><td align="right">174</td><td align="right">1756</td><td align="right">2025</td></tr><tr><td>domContentLoaded</td><td align="right">1661</td><td align="right">1333</td><td align="right">2027</td><td align="right">169</td><td align="right">1751</td><td align="right">1999</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">12</td><td align="right">63</td><td align="right">11</td><td align="right">14</td><td align="right">48</td></tr><tr><td>firstPaint</td><td align="right">196</td><td align="right">70</td><td align="right">391</td><td align="right">63</td><td align="right">254</td><td align="right">88</td></tr><tr><td>backgroundConnect</td><td align="right">31</td><td align="right">15</td><td align="right">179</td><td align="right">23</td><td align="right">30</td><td align="right">73</td></tr><tr><td>firstReactRender</td><td align="right">216</td><td align="right">54</td><td align="right">362</td><td align="right">119</td><td align="right">72</td><td align="right">96</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">4</td><td align="right">31</td><td align="right">4</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">7</td><td align="right">1</td><td align="right">3</td><td align="right">4</td></tr><tr><td>loadScripts</td><td align="right">1652</td><td align="right">1329</td><td align="right">1995</td><td align="right">164</td><td align="right">1748</td><td align="right">1970</td></tr><tr><td>setupStore</td><td align="right">32</td><td align="right">7</td><td align="right">287</td><td align="right">62</td><td align="right">238</td><td align="right">8</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1448</td><td align="right">1240</td><td align="right">1993</td><td align="right">164</td><td align="right">1488</td><td align="right">1822</td></tr><tr><td>load</td><td align="right">1300</td><td align="right">1083</td><td align="right">1824</td><td align="right">158</td><td align="right">1346</td><td align="right">1669</td></tr><tr><td>domContentLoaded</td><td align="right">1300</td><td align="right">1083</td><td align="right">1824</td><td align="right">158</td><td align="right">1346</td><td align="right">1669</td></tr><tr><td>domInteractive</td><td align="right">110</td><td align="right">40</td><td align="right">187</td><td align="right">26</td><td align="right">61</td><td align="right">99</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">26</td><td align="right">18</td><td align="right">121</td><td align="right">14</td><td align="right">26</td><td align="right">34</td></tr><tr><td>firstReactRender</td><td align="right">23</td><td align="right">20</td><td align="right">35</td><td align="right">3</td><td align="right">24</td><td align="right">28</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">15</td><td align="right">2</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1275</td><td align="right">1065</td><td align="right">1803</td><td align="right">155</td><td align="right">1326</td><td align="right">1646</td></tr><tr><td>setupStore</td><td align="right">6</td><td align="right">4</td><td align="right">12</td><td align="right">2</td><td align="right">6</td><td align="right">7</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1566</td><td align="right">1347</td><td align="right">2078</td><td align="right">160</td><td align="right">1647</td><td align="right">1961</td></tr><tr><td>load</td><td align="right">1352</td><td align="right">1177</td><td align="right">1852</td><td align="right">152</td><td align="right">1446</td><td align="right">1728</td></tr><tr><td>domContentLoaded</td><td align="right">1351</td><td align="right">1176</td><td align="right">1852</td><td align="right">152</td><td align="right">1446</td><td align="right">1727</td></tr><tr><td>domInteractive</td><td align="right">95</td><td align="right">43</td><td align="right">174</td><td align="right">20</td><td align="right">90</td><td align="right">98</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">25</td><td align="right">18</td><td align="right">86</td><td align="right">7</td><td align="right">26</td><td align="right">33</td></tr><tr><td>firstReactRender</td><td align="right">36</td><td align="right">29</td><td align="right">53</td><td align="right">5</td><td align="right">38</td><td align="right">45</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">4</td><td align="right">33</td><td align="right">6</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">1</td><td align="right">0</td><td align="right">2</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1329</td><td align="right">1153</td><td align="right">1833</td><td align="right">151</td><td align="right">1424</td><td align="right">1700</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">27</td><td align="right">3</td><td align="right">7</td><td align="right">9</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: 0 Bytes (0%)</li>
<li>ui: 2.16 KiB (0.03%)</li>
<li>common: 456 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-07T16:17:09Z
body: <details><summary>Builds ready [37292a9]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds/metamask-chrome-12.15.1.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds-mv2/metamask-firefox-12.15.1.zip">firefox</a></li>
<li>builds (flask): <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds-flask/metamask-flask-chrome-12.15.1-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds-flask-mv2/metamask-flask-firefox-12.15.1-flask.0.zip">firefox</a></li>
<li>builds (test): <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds-test/metamask-chrome-12.15.1.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds-test-mv2/metamask-firefox-12.15.1.zip">firefox</a></li>
<li>builds (test-flask): <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds-test-flask/metamask-flask-chrome-12.15.1-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/builds-test-flask-mv2/metamask-flask-firefox-12.15.1-flask.0.zip">firefox</a></li>
<li>build viz: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14313465767/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14313465767/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14313465767/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4734241/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/background-9.html">9</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/ui-13.html">13</a></li><li>content-script: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/content-script-0.html">0</a></li><li>offscreen: <a href="https://output.circle-artifacts.com/output/job/3e2feca2-a328-4b98-a125-c54a1cc4b45c/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1211 ± 59 ms)</summary><table><thead><tr><th>Platform</th><th>BuildType</th><th>Page</th><th>Metric</th><th>Mean (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Std Dev (ms)</th><th>P 75 (ms)</th><th>P 95 (ms)</th></tr></thead><tbody><tr><td rowspan="22">Chrome</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1211</td><td align="right">1098</td><td align="right">1525</td><td align="right">59</td><td align="right">1248</td><td align="right">1296</td></tr><tr><td>load</td><td align="right">1061</td><td align="right">938</td><td align="right">1245</td><td align="right">54</td><td align="right">1135</td><td align="right">989</td></tr><tr><td>domContentLoaded</td><td align="right">1054</td><td align="right">930</td><td align="right">1237</td><td align="right">54</td><td align="right">1130</td><td align="right">985</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">13</td><td align="right">38</td><td align="right">5</td><td align="right">16</td><td align="right">27</td></tr><tr><td>firstPaint</td><td align="right">726</td><td align="right">75</td><td align="right">1161</td><td align="right">427</td><td align="right">210</td><td align="right">973</td></tr><tr><td>backgroundConnect</td><td align="right">9</td><td align="right">6</td><td align="right">22</td><td align="right">3</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">21</td><td align="right">15</td><td align="right">66</td><td align="right">9</td><td align="right">20</td><td align="right">42</td></tr><tr><td>getState</td><td align="right">13</td><td align="right">5</td><td align="right">45</td><td align="right">7</td><td align="right">6</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">804</td><td align="right">677</td><td align="right">957</td><td align="right">51</td><td align="right">833</td><td align="right">882</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">4</td><td align="right">26</td><td align="right">4</td><td align="right">7</td><td align="right">9</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">2122</td><td align="right">1719</td><td align="right">2536</td><td align="right">180</td><td align="right">2260</td><td align="right">2364</td></tr><tr><td>load</td><td align="right">1655</td><td align="right">1257</td><td align="right">2033</td><td align="right">149</td><td align="right">1740</td><td align="right">1902</td></tr><tr><td>domContentLoaded</td><td align="right">1649</td><td align="right">1252</td><td align="right">2024</td><td align="right">148</td><td align="right">1736</td><td align="right">1891</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">12</td><td align="right">65</td><td align="right">12</td><td align="right">14</td><td align="right">56</td></tr><tr><td>firstPaint</td><td align="right">153</td><td align="right">65</td><td align="right">334</td><td align="right">53</td><td align="right">227</td><td align="right">85</td></tr><tr><td>backgroundConnect</td><td align="right">29</td><td align="right">11</td><td align="right">68</td><td align="right">14</td><td align="right">37</td><td align="right">64</td></tr><tr><td>firstReactRender</td><td align="right">186</td><td align="right">53</td><td align="right">385</td><td align="right">115</td><td align="right">57</td><td align="right">91</td></tr><tr><td>getState</td><td align="right">12</td><td align="right">4</td><td align="right">64</td><td align="right">10</td><td align="right">7</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">3</td><td align="right">1</td><td align="right">7</td><td align="right">1</td><td align="right">3</td><td align="right">5</td></tr><tr><td>loadScripts</td><td align="right">1641</td><td align="right">1246</td><td align="right">2001</td><td align="right">146</td><td align="right">1730</td><td align="right">1872</td></tr><tr><td>setupStore</td><td align="right">24</td><td align="right">6</td><td align="right">363</td><td align="right">46</td><td align="right">32</td><td align="right">8</td></tr><tr><td rowspan="22">Firefox</td><td rowspan="11">Browserify</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1362</td><td align="right">1199</td><td align="right">1882</td><td align="right">156</td><td align="right">1389</td><td align="right">1757</td></tr><tr><td>load</td><td align="right">1222</td><td align="right">1052</td><td align="right">1727</td><td align="right">149</td><td align="right">1257</td><td align="right">1603</td></tr><tr><td>domContentLoaded</td><td align="right">1222</td><td align="right">1051</td><td align="right">1727</td><td align="right">149</td><td align="right">1257</td><td align="right">1601</td></tr><tr><td>domInteractive</td><td align="right">102</td><td align="right">42</td><td align="right">336</td><td align="right">41</td><td align="right">90</td><td align="right">98</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">24</td><td align="right">16</td><td align="right">67</td><td align="right">8</td><td align="right">26</td><td align="right">46</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">18</td><td align="right">32</td><td align="right">3</td><td align="right">22</td><td align="right">28</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">38</td><td align="right">4</td><td align="right">7</td><td align="right">8</td></tr><tr><td>initialActions</td><td align="right">0</td><td align="right">0</td><td align="right">1</td><td align="right">0</td><td align="right">0</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1199</td><td align="right">1036</td><td align="right">1689</td><td align="right">146</td><td align="right">1230</td><td align="right">1572</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">4</td><td align="right">196</td><td align="right">19</td><td align="right">6</td><td align="right">7</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1597</td><td align="right">1337</td><td align="right">2190</td><td align="right">185</td><td align="right">1676</td><td align="right">2035</td></tr><tr><td>load</td><td align="right">1372</td><td align="right">1143</td><td align="right">1992</td><td align="right">178</td><td align="right">1433</td><td align="right">1766</td></tr><tr><td>domContentLoaded</td><td align="right">1372</td><td align="right">1143</td><td align="right">1992</td><td align="right">178</td><td align="right">1433</td><td align="right">1766</td></tr><tr><td>domInteractive</td><td align="right">101</td><td align="right">36</td><td align="right">311</td><td align="right">31</td><td align="right">91</td><td align="right">98</td></tr><tr><td>firstPaint</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td><td align="right">NaN</td></tr><tr><td>backgroundConnect</td><td align="right">27</td><td align="right">19</td><td align="right">84</td><td align="right">9</td><td align="right">28</td><td align="right">36</td></tr><tr><td>firstReactRender</td><td align="right">37</td><td align="right">28</td><td align="right">80</td><td align="right">7</td><td align="right">41</td><td align="right">49</td></tr><tr><td>getState</td><td align="right">10</td><td align="right">4</td><td align="right">33</td><td align="right">6</td><td align="right">8</td><td align="right">9</td></tr><tr><td>initialActions</td><td align="right">1</td><td align="right">0</td><td align="right">4</td><td align="right">1</td><td align="right">1</td><td align="right">1</td></tr><tr><td>loadScripts</td><td align="right">1348</td><td align="right">1125</td><td align="right">1967</td><td align="right">177</td><td align="right">1408</td><td align="right">1736</td></tr><tr><td>setupStore</td><td align="right">12</td><td align="right">5</td><td align="right">313</td><td align="right">31</td><td align="right">8</td><td align="right">9</td></tr></tbody></table></details>

<details><summary>Bundle size diffs [🚨 Warning! Bundle size has increased!]</summary><ul><li>background: -27 Bytes (0%)</li>
<li>ui: 2.26 KiB (0.03%)</li>
<li>common: 590 Bytes (0.01%)</li></ul></details>


author_association: COLLABORATOR