Repository: MetaMask/metamask-extension
Pull request #31679: fix: cp-12.16.0 HW wallet confirmation warning for bridge
Author: login: micaelae
Labels: name: team-swaps-and-bridge
description: Swaps and Bridge team
name: release-12.17.0
description: Issue or pull request that will be included in release 12.17.0
Created: 2025-04-07T20:34:56Z | Merged: 2025-04-08T18:35:07Z

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once.
-->

## **Description**
Changes
- shows a warning when the src account is a HW wallet, to inform the user that they need to unlock prior to submitting the tx
- fixes an issue in which some tx details are not visible if the chain has been removed from the wallet

<!--
Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/31679?quickstart=1)

## **Related issues**

Fixes: https://github.com/MetaMask/metamask-extension/issues/31210

## **Manual testing steps**

1. Go to this page...
2.
3.

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

![Screenshot 2025-04-07 at 12 56 27 PM](https://github.com/user-attachments/assets/222bffa6-7024-499c-86e6-b23411ebc69a)


## **Pre-merge author checklist**

- [ ] 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).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable
- [ ] 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/app/_locales/en/messages.json b/app/_locales/en/messages.json
index a345ef19be6c..9a702fddfd08 100644
--- a/app/_locales/en/messages.json
+++ b/app/_locales/en/messages.json
@@ -2274,6 +2274,15 @@
     "message": "(legacy)",
     "description": "Text representing the MEW path"
   },
+  "hardwareWalletSubmissionWarningStep1": {
+    "message": "Be sure your $1 is plugged in and to select the Ethereum app."
+  },
+  "hardwareWalletSubmissionWarningStep2": {
+    "message": "Enable \"smart contract data\" or \"blind signing\" on your $1 device."
+  },
+  "hardwareWalletSubmissionWarningTitle": {
+    "message": "Prior to clicking Submit:"
+  },
   "hardwareWalletSupportLinkConversion": {
     "message": "click here"
   },
diff --git a/app/_locales/en_GB/messages.json b/app/_locales/en_GB/messages.json
index 3d6813b26c76..3e30cfd24c21 100644
--- a/app/_locales/en_GB/messages.json
+++ b/app/_locales/en_GB/messages.json
@@ -2274,6 +2274,15 @@
     "message": "(legacy)",
     "description": "Text representing the MEW path"
   },
+  "hardwareWalletSubmissionWarningStep1": {
+    "message": "Be sure your $1 is plugged in and to select the Ethereum app."
+  },
+  "hardwareWalletSubmissionWarningStep2": {
+    "message": "Enable \"smart contract data\" or \"blind signing\" on your $1 device."
+  },
+  "hardwareWalletSubmissionWarningTitle": {
+    "message": "Prior to clicking Submit:"
+  },
   "hardwareWalletSupportLinkConversion": {
     "message": "click here"
   },
diff --git a/ui/ducks/bridge/selectors.ts b/ui/ducks/bridge/selectors.ts
index 63982b6d3daf..056a86f1411f 100644
--- a/ui/ducks/bridge/selectors.ts
+++ b/ui/ducks/bridge/selectors.ts
@@ -36,6 +36,7 @@ import {
   ///: END:ONLY_INCLUDE_IF
 } from '../../../shared/constants/multichain/networks';
 import {
+  getHardwareWalletType,
   getIsBridgeEnabled,
   getMarketData,
   getUSDConversionRate,
@@ -67,6 +68,10 @@ import {
   getImageForChainId,
 } from '../../selectors/multichain';
 import { getAssetsRates } from '../../selectors/assets';
+import {
+  HardwareKeyringNames,
+  HardwareKeyringType,
+} from '../../../shared/constants/hardware-wallets';
 import {
   exchangeRateFromMarketData,
   exchangeRatesFromNativeAndCurrencyRates,
@@ -740,3 +745,19 @@ export const getIsToOrFromSolana = createSelector(
     return toChainIsSolana !== fromChainIsSolana;
   },
 );
+
+export const getHardwareWalletName = (state: BridgeAppState) => {
+  const type = getHardwareWalletType(state);
+  switch (type) {
+    case HardwareKeyringType.ledger:
+      return HardwareKeyringNames.ledger;
+    case HardwareKeyringType.trezor:
+      return HardwareKeyringNames.trezor;
+    case HardwareKeyringType.lattice:
+      return HardwareKeyringNames.lattice;
+    case HardwareKeyringType.oneKey:
+      return HardwareKeyringNames.oneKey;
+    default:
+      return undefined;
+  }
+};
diff --git a/ui/hooks/bridge/useBridgeChainInfo.ts b/ui/hooks/bridge/useBridgeChainInfo.ts
index 13b90497493a..3d2036002101 100644
--- a/ui/hooks/bridge/useBridgeChainInfo.ts
+++ b/ui/hooks/bridge/useBridgeChainInfo.ts
@@ -1,4 +1,3 @@
-import { useSelector } from 'react-redux';
 import {
   type TransactionMeta,
   TransactionType,
@@ -6,15 +5,12 @@ import {
 import {
   formatChainIdToCaip,
   formatChainIdToHex,
+  getNativeAssetForChainId,
   isSolanaChainId,
 } from '@metamask/bridge-controller';
 import type { BridgeHistoryItem } from '../../../shared/types/bridge-status';
-import {
-  CHAIN_ID_TO_CURRENCY_SYMBOL_MAP,
-  NETWORK_TO_NAME_MAP,
-} from '../../../shared/constants/network';
 import { CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP } from '../../../shared/constants/common';
-import { getMultichainNetworkConfigurationsByChainId } from '../../selectors';
+import { NETWORK_TO_SHORT_NETWORK_NAME_MAP } from '../../../shared/constants/bridge';
 
 const getSourceAndDestChainIds = ({
   bridgeHistoryItem,
@@ -38,9 +34,6 @@ export default function useBridgeChainInfo({
   bridgeHistoryItem,
   srcTxMeta,
 }: UseBridgeChainInfoProps) {
-  const [networkConfigurationsByChainId] =
-    useSelector(getMultichainNetworkConfigurationsByChainId) ?? [];
-
   if (srcTxMeta?.type !== TransactionType.bridge) {
     return {
       srcNetwork: undefined,
@@ -61,52 +54,70 @@ export default function useBridgeChainInfo({
 
   // Source chain info
   const srcChainIdInCaip = formatChainIdToCaip(srcChainId);
-  const srcNetwork = networkConfigurationsByChainId[srcChainIdInCaip];
   const normalizedSrcChainId = isSolanaChainId(srcChainId)
     ? srcChainIdInCaip
     : formatChainIdToHex(srcChainId);
-  const fallbackSrcNetwork = {
-    chainId: normalizedSrcChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedSrcChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedSrcChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+
+  const commonSrcNetworkFields = {
+    chainId: srcChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedSrcChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const srcNetwork = {
+    ...commonSrcNetworkFields,
+    ...(isSolanaChainId(srcChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+          ],
+          defaultRpcEndpointIndex: 0,
+          rpcEndpoints: [],
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.symbol,
+          isEvm: true as const,
+        }),
   };
 
   // Dest chain info
   const destChainIdInCaip = formatChainIdToCaip(destChainId);
-  const destNetwork = networkConfigurationsByChainId[destChainIdInCaip];
   const normalizedDestChainId = isSolanaChainId(destChainId)
     ? destChainIdInCaip
     : formatChainIdToHex(destChainId);
-  const fallbackDestNetwork = {
-    chainId: normalizedDestChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedDestChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedDestChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedDestChainId],
+
+  const commonDestNetworkFields = {
+    chainId: destChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedDestChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const destNetwork = {
+    ...commonDestNetworkFields,
+    ...(isSolanaChainId(destChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(destChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedDestChainId],
+          ],
+          defaultRpcEndpointIndex: 0,
+          rpcEndpoints: [],
+          nativeCurrency: getNativeAssetForChainId(destChainId)?.symbol,
+          isEvm: true as const,
+        }),
   };
 
   return {
-    srcNetwork: srcNetwork || fallbackSrcNetwork,
-    destNetwork: destNetwork || fallbackDestNetwork,
+    srcNetwork,
+    destNetwork,
   };
 }
diff --git a/ui/pages/bridge/prepare/prepare-bridge-page.tsx b/ui/pages/bridge/prepare/prepare-bridge-page.tsx
index d40946f6b934..fbd773c4e5a1 100644
--- a/ui/pages/bridge/prepare/prepare-bridge-page.tsx
+++ b/ui/pages/bridge/prepare/prepare-bridge-page.tsx
@@ -48,6 +48,7 @@ import {
   isBridgeSolanaEnabled,
   getIsToOrFromSolana,
   getQuoteRefreshRate,
+  getHardwareWalletName,
 } from '../../../ducks/bridge/selectors';
 import {
   AvatarFavicon,
@@ -122,6 +123,7 @@ import { useDestinationAccount } from '../hooks/useDestinationAccount';
 import { Toast, ToastContainer } from '../../../components/multichain';
 import { MultichainNetworks } from '../../../../shared/constants/multichain/networks';
 import { isSwapsDefaultTokenAddress } from '../../../../shared/modules/swaps.utils';
+import { useIsTxSubmittable } from '../../../hooks/bridge/useIsTxSubmittable';
 import { BridgeInputGroup } from './bridge-input-group';
 import { BridgeCTAButton } from './bridge-cta-button';
 import { DestinationAccountPicker } from './components/destination-account-picker';
@@ -187,6 +189,8 @@ const PrepareBridgePage = () => {
   const keyring = useSelector(getCurrentKeyring);
   // @ts-expect-error keyring type is wrong maybe?
   const isUsingHardwareWallet = isHardwareKeyring(keyring.type);
+  const hardwareWalletName = useSelector(getHardwareWalletName);
+  const isTxSubmittable = useIsTxSubmittable();
   const locale = useSelector(getIntlLocale);
 
   const ticker = useSelector(getNativeCurrency);
@@ -805,6 +809,34 @@ const PrepareBridgePage = () => {
               </Footer>
             </Column>
           </Row>
+          {isUsingHardwareWallet &&
+            isTxSubmittable &&
+            hardwareWalletName &&
+            activeQuote && (
+              <BannerAlert
+                marginInline={4}
+                marginBottom={3}
+                title={t('hardwareWalletSubmissionWarningTitle')}
+                textAlign={TextAlign.Left}
+              >
+                <ul style={{ listStyle: 'disc' }}>
+                  <li>
+                    <Text variant={TextVariant.bodyMd}>
+                      {t('hardwareWalletSubmissionWarningStep1', [
+                        hardwareWalletName,
+                      ])}
+                    </Text>
+                  </li>
+                  <li>
+                    <Text variant={TextVariant.bodyMd}>
+                      {t('hardwareWalletSubmissionWarningStep2', [
+                        hardwareWalletName,
+                      ])}
+                    </Text>
+                  </li>
+                </ul>
+              </BannerAlert>
+            )}
           {isNoQuotesAvailable && !isQuoteExpired && (
             <BannerAlert
               marginInline={4}
@@ -829,7 +861,7 @@ const PrepareBridgePage = () => {
                 onClose={() => setIsCannotVerifyTokenBannerOpen(false)}
               />
             )}
-          {isEstimatedReturnLow && isLowReturnBannerOpen && (
+          {isEstimatedReturnLow && isLowReturnBannerOpen && activeQuote && (
             <BannerAlert
               ref={insufficientBalanceBannerRef}
               marginInline={4}
diff --git a/ui/pages/bridge/transaction-details/bridge-explorer-links.tsx b/ui/pages/bridge/transaction-details/bridge-explorer-links.tsx
index 6c7c06338567..3182b52a24ed 100644
--- a/ui/pages/bridge/transaction-details/bridge-explorer-links.tsx
+++ b/ui/pages/bridge/transaction-details/bridge-explorer-links.tsx
@@ -1,6 +1,6 @@
 import { NetworkConfiguration } from '@metamask/network-controller';
 import React, { useContext } from 'react';
-import { Hex } from '@metamask/utils';
+import type { Hex } from '@metamask/utils';
 import {
   Box,
   IconName,
diff --git a/ui/pages/bridge/transaction-details/transaction-details.tsx b/ui/pages/bridge/transaction-details/transaction-details.tsx
index a04897339a2f..0fee0865c9fb 100644
--- a/ui/pages/bridge/transaction-details/transaction-details.tsx
+++ b/ui/pages/bridge/transaction-details/transaction-details.tsx
@@ -4,7 +4,7 @@ import { useHistory, useParams, useLocation } from 'react-router-dom';
 import { TransactionMeta } from '@metamask/transaction-controller';
 import { BigNumber } from 'bignumber.js';
 import type { EvmNetworkConfiguration } from '@metamask/multichain-network-controller';
-import { isStrictHexString } from '@metamask/utils';
+import { formatChainIdToHex } from '@metamask/bridge-controller';
 import {
   AvatarNetwork,
   AvatarNetworkSize,
@@ -48,7 +48,7 @@ import {
 import { formatDate } from '../../../helpers/utils/util';
 import { ConfirmInfoRowDivider as Divider } from '../../../components/app/confirm/info/row';
 import { useI18nContext } from '../../../hooks/useI18nContext';
-import { selectedAddressTxListSelector } from '../../../selectors';
+import { selectedAddressTxListSelectorAllChain } from '../../../selectors';
 import {
   MetaMetricsContextProp,
   MetaMetricsEventCategory,
@@ -171,7 +171,7 @@ const CrossChainSwapTxDetails = () => {
   const { srcTxMetaId } = useParams<{ srcTxMetaId: string }>();
   const bridgeHistory = useSelector(selectBridgeHistoryForAccount);
   const selectedAddressTxList = useSelector(
-    selectedAddressTxListSelector,
+    selectedAddressTxListSelectorAllChain,
   ) as TransactionMeta[];
 
   const networkConfigurationsByChainId = useSelector(
@@ -196,27 +196,33 @@ const CrossChainSwapTxDetails = () => {
   });
 
   const srcTxHash = srcChainTxMeta?.hash;
-  const srcBlockExplorerUrl = getBlockExplorerUrl(
-    srcNetwork as EvmNetworkConfiguration,
-    srcTxHash,
-  );
+  const srcBlockExplorerUrl = srcNetwork?.isEvm
+    ? getBlockExplorerUrl(srcNetwork, srcTxHash)
+    : undefined;
 
   const destTxHash = bridgeHistoryItem?.status.destChain?.txHash;
-  const destBlockExplorerUrl = getBlockExplorerUrl(
-    destNetwork as EvmNetworkConfiguration,
-    destTxHash,
-  );
+  const destBlockExplorerUrl = destNetwork?.isEvm
+    ? getBlockExplorerUrl(destNetwork, destTxHash)
+    : undefined;
 
   const status = bridgeHistoryItem
     ? bridgeHistoryItem?.status.status
     : StatusTypes.PENDING;
 
   const srcChainIconUrl = srcNetwork
-    ? getImageForChainId(srcNetwork.chainId)
+    ? getImageForChainId(
+        srcNetwork.isEvm
+          ? formatChainIdToHex(srcNetwork.chainId)
+          : srcNetwork.chainId,
+      )
     : undefined;
 
   const destChainIconUrl = destNetwork
-    ? getImageForChainId(destNetwork.chainId)
+    ? getImageForChainId(
+        destNetwork.isEvm
+          ? formatChainIdToHex(destNetwork.chainId)
+          : destNetwork.chainId,
+      )
     : undefined;
 
   const srcNetworkName =
@@ -341,13 +347,13 @@ const CrossChainSwapTxDetails = () => {
           {/* Links to block explorers */}
           <BridgeExplorerLinks
             srcChainId={
-              isStrictHexString(srcNetwork?.chainId)
-                ? srcNetwork?.chainId
+              srcNetwork?.isEvm
+                ? formatChainIdToHex(srcNetwork?.chainId)
                 : undefined
             }
             destChainId={
-              isStrictHexString(destNetwork?.chainId)
-                ? destNetwork?.chainId
+              destNetwork?.isEvm
+                ? formatChainIdToHex(destNetwork?.chainId)
                 : undefined
             }
             srcBlockExplorerUrl={srcBlockExplorerUrl}


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 5 out of 7 changed files in this pull request and generated 1 comment.

<details>
<summary>Files not reviewed (2)</summary>

* **app/_locales/en/messages.json**: Language not supported
* **app/_locales/en_GB/messages.json**: Language not supported
</details>



state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T21:56:18Z
user: login: ghgoodreau
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T22:57:58Z
user: login: micaelae
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T23:00:26Z
user: login: ghgoodreau
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T16:21:49Z
user: login: GustavoRSSilva
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T17:27:57Z

Review comments:
diff_hunk: @@ -61,52 +54,70 @@ export default function useBridgeChainInfo({
 
   // Source chain info
   const srcChainIdInCaip = formatChainIdToCaip(srcChainId);
-  const srcNetwork = networkConfigurationsByChainId[srcChainIdInCaip];
   const normalizedSrcChainId = isSolanaChainId(srcChainId)
     ? srcChainIdInCaip
     : formatChainIdToHex(srcChainId);
-  const fallbackSrcNetwork = {
-    chainId: normalizedSrcChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedSrcChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedSrcChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+
+  const commonSrcNetworkFields = {
+    chainId: srcChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedSrcChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const srcNetwork = {
+    ...commonSrcNetworkFields,
+    ...(isSolanaChainId(srcChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+          ],
+          defaultRpcEndpointIndex: 0,
+          rpcEndpoints: [],
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.symbol,
+          isEvm: true as const,
+        }),
   };
 
   // Dest chain info
   const destChainIdInCaip = formatChainIdToCaip(destChainId);
-  const destNetwork = networkConfigurationsByChainId[destChainIdInCaip];
   const normalizedDestChainId = isSolanaChainId(destChainId)
     ? destChainIdInCaip
     : formatChainIdToHex(destChainId);
-  const fallbackDestNetwork = {
-    chainId: normalizedDestChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedDestChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedDestChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedDestChainId],
+
+  const commonDestNetworkFields = {
+    chainId: destChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedDestChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const destNetwork = {
+    ...commonDestNetworkFields,
+    ...(isSolanaChainId(destChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(destChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
path: ui/hooks/bridge/useBridgeChainInfo.ts
user: login: Copilot
body: In the destination network configuration, the block explorer URL is derived using 'normalizedSrcChainId' instead of 'normalizedDestChainId', which may result in an incorrect URL. Please update this to use 'normalizedDestChainId'.
```suggestion
            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedDestChainId],
```
created_at: 2025-04-07T21:56:17Z
author_association: CONTRIBUTOR
diff_hunk: @@ -61,52 +54,70 @@ export default function useBridgeChainInfo({
 
   // Source chain info
   const srcChainIdInCaip = formatChainIdToCaip(srcChainId);
-  const srcNetwork = networkConfigurationsByChainId[srcChainIdInCaip];
   const normalizedSrcChainId = isSolanaChainId(srcChainId)
     ? srcChainIdInCaip
     : formatChainIdToHex(srcChainId);
-  const fallbackSrcNetwork = {
-    chainId: normalizedSrcChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedSrcChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedSrcChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+
+  const commonSrcNetworkFields = {
+    chainId: srcChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedSrcChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const srcNetwork = {
+    ...commonSrcNetworkFields,
+    ...(isSolanaChainId(srcChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+          ],
+          defaultRpcEndpointIndex: 0,
+          rpcEndpoints: [],
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.symbol,
+          isEvm: true as const,
+        }),
   };
 
   // Dest chain info
   const destChainIdInCaip = formatChainIdToCaip(destChainId);
-  const destNetwork = networkConfigurationsByChainId[destChainIdInCaip];
   const normalizedDestChainId = isSolanaChainId(destChainId)
     ? destChainIdInCaip
     : formatChainIdToHex(destChainId);
-  const fallbackDestNetwork = {
-    chainId: normalizedDestChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedDestChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedDestChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedDestChainId],
+
+  const commonDestNetworkFields = {
+    chainId: destChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedDestChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const destNetwork = {
+    ...commonDestNetworkFields,
+    ...(isSolanaChainId(destChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(destChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
path: ui/hooks/bridge/useBridgeChainInfo.ts
user: login: ghgoodreau
body: @micaelae is this intended?
created_at: 2025-04-07T22:46:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -61,52 +54,70 @@ export default function useBridgeChainInfo({
 
   // Source chain info
   const srcChainIdInCaip = formatChainIdToCaip(srcChainId);
-  const srcNetwork = networkConfigurationsByChainId[srcChainIdInCaip];
   const normalizedSrcChainId = isSolanaChainId(srcChainId)
     ? srcChainIdInCaip
     : formatChainIdToHex(srcChainId);
-  const fallbackSrcNetwork = {
-    chainId: normalizedSrcChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedSrcChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedSrcChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+
+  const commonSrcNetworkFields = {
+    chainId: srcChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedSrcChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const srcNetwork = {
+    ...commonSrcNetworkFields,
+    ...(isSolanaChainId(srcChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
+          ],
+          defaultRpcEndpointIndex: 0,
+          rpcEndpoints: [],
+          nativeCurrency: getNativeAssetForChainId(srcChainId)?.symbol,
+          isEvm: true as const,
+        }),
   };
 
   // Dest chain info
   const destChainIdInCaip = formatChainIdToCaip(destChainId);
-  const destNetwork = networkConfigurationsByChainId[destChainIdInCaip];
   const normalizedDestChainId = isSolanaChainId(destChainId)
     ? destChainIdInCaip
     : formatChainIdToHex(destChainId);
-  const fallbackDestNetwork = {
-    chainId: normalizedDestChainId,
-    name: NETWORK_TO_NAME_MAP[
-      normalizedDestChainId as keyof typeof NETWORK_TO_NAME_MAP
-    ],
-    nativeCurrency:
-      CHAIN_ID_TO_CURRENCY_SYMBOL_MAP[
-        normalizedDestChainId as keyof typeof CHAIN_ID_TO_CURRENCY_SYMBOL_MAP
-      ],
-    defaultBlockExplorerUrlIndex: 0,
-    blockExplorerUrls: [
-      CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedDestChainId],
+
+  const commonDestNetworkFields = {
+    chainId: destChainIdInCaip,
+    name: NETWORK_TO_SHORT_NETWORK_NAME_MAP[
+      normalizedDestChainId as keyof typeof NETWORK_TO_SHORT_NETWORK_NAME_MAP
     ],
-    defaultRpcEndpointIndex: 0,
-    rpcEndpoints: [],
+  };
+
+  const destNetwork = {
+    ...commonDestNetworkFields,
+    ...(isSolanaChainId(destChainIdInCaip)
+      ? ({
+          isEvm: false,
+          nativeCurrency: getNativeAssetForChainId(destChainId)?.assetId,
+        } as const)
+      : {
+          defaultBlockExplorerUrlIndex: 0,
+          blockExplorerUrls: [
+            CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[normalizedSrcChainId],
path: ui/hooks/bridge/useBridgeChainInfo.ts
user: login: micaelae
body: No, I missed this. Just updated the PR
created_at: 2025-04-07T23:00:25Z
author_association: MEMBER

PR comments:
user: login: metamaskbot
created_at: 2025-04-07T20:36:44Z
body: <!-- METAMASK-CODEOWNERS-BOT -->
✨ Files requiring CODEOWNER review ✨
---
🔄 @MetaMask/swaps-engineers
- `ui/ducks/bridge/selectors.ts`
- `ui/hooks/bridge/useBridgeChainInfo.ts`
- `ui/pages/bridge/prepare/prepare-bridge-page.tsx`
- `ui/pages/bridge/transaction-details/bridge-explorer-links.tsx`
- `ui/pages/bridge/transaction-details/transaction-details.tsx`


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-07T21:38:26Z
body: <details><summary>Builds ready [780443f]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/builds/metamask-chrome-12.15.1.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/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/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/builds-flask/metamask-flask-chrome-12.15.1-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/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/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/builds-test/metamask-chrome-12.15.1.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/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/d6559d02-2b79-4487-8abd-8151ec880b21/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/d6559d02-2b79-4487-8abd-8151ec880b21/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/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14319388279/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14319388279/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14319388279/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4736615/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/background-10.html">10</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/d6559d02-2b79-4487-8abd-8151ec880b21/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/d6559d02-2b79-4487-8abd-8151ec880b21/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/d6559d02-2b79-4487-8abd-8151ec880b21/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1232 ± 53 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">1232</td><td align="right">1125</td><td align="right">1367</td><td align="right">53</td><td align="right">1262</td><td align="right">1324</td></tr><tr><td>load</td><td align="right">1079</td><td align="right">985</td><td align="right">1208</td><td align="right">49</td><td align="right">1120</td><td align="right">987</td></tr><tr><td>domContentLoaded</td><td align="right">1073</td><td align="right">979</td><td align="right">1187</td><td align="right">49</td><td align="right">1117</td><td align="right">985</td></tr><tr><td>domInteractive</td><td align="right">18</td><td align="right">13</td><td align="right">62</td><td align="right">8</td><td align="right">16</td><td align="right">30</td></tr><tr><td>firstPaint</td><td align="right">790</td><td align="right">77</td><td align="right">1203</td><td align="right">413</td><td align="right">224</td><td align="right">283</td></tr><tr><td>backgroundConnect</td><td align="right">10</td><td align="right">6</td><td align="right">49</td><td align="right">6</td><td align="right">9</td><td align="right">10</td></tr><tr><td>firstReactRender</td><td align="right">20</td><td align="right">13</td><td align="right">39</td><td align="right">5</td><td align="right">20</td><td align="right">34</td></tr><tr><td>getState</td><td align="right">15</td><td align="right">5</td><td align="right">94</td><td align="right">11</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">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">721</td><td align="right">918</td><td align="right">49</td><td align="right">851</td><td align="right">904</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">2151</td><td align="right">1715</td><td align="right">2772</td><td align="right">189</td><td align="right">2274</td><td align="right">2395</td></tr><tr><td>load</td><td align="right">1683</td><td align="right">1253</td><td align="right">2030</td><td align="right">157</td><td align="right">1752</td><td align="right">1972</td></tr><tr><td>domContentLoaded</td><td align="right">1677</td><td align="right">1248</td><td align="right">1997</td><td align="right">156</td><td align="right">1748</td><td align="right">1957</td></tr><tr><td>domInteractive</td><td align="right">16</td><td align="right">12</td><td align="right">61</td><td align="right">9</td><td align="right">14</td><td align="right">44</td></tr><tr><td>firstPaint</td><td align="right">157</td><td align="right">65</td><td align="right">385</td><td align="right">66</td><td align="right">298</td><td align="right">84</td></tr><tr><td>backgroundConnect</td><td align="right">29</td><td align="right">12</td><td align="right">101</td><td align="right">14</td><td align="right">35</td><td align="right">57</td></tr><tr><td>firstReactRender</td><td align="right">195</td><td align="right">54</td><td align="right">464</td><td align="right">117</td><td align="right">60</td><td align="right">95</td></tr><tr><td>getState</td><td align="right">11</td><td align="right">4</td><td align="right">31</td><td align="right">6</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">1668</td><td align="right">1240</td><td align="right">1972</td><td align="right">152</td><td align="right">1740</td><td align="right">1935</td></tr><tr><td>setupStore</td><td align="right">23</td><td align="right">6</td><td align="right">304</td><td align="right">39</td><td align="right">31</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">1357</td><td align="right">1181</td><td align="right">1953</td><td align="right">140</td><td align="right">1400</td><td align="right">1661</td></tr><tr><td>load</td><td align="right">1216</td><td align="right">1050</td><td align="right">1801</td><td align="right">135</td><td align="right">1251</td><td align="right">1513</td></tr><tr><td>domContentLoaded</td><td align="right">1215</td><td align="right">1050</td><td align="right">1801</td><td align="right">135</td><td align="right">1251</td><td align="right">1513</td></tr><tr><td>domInteractive</td><td align="right">94</td><td align="right">40</td><td align="right">184</td><td align="right">27</td><td align="right">85</td><td align="right">96</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">15</td><td align="right">60</td><td align="right">7</td><td align="right">25</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">6</td><td align="right">24</td><td align="right">31</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">26</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">1194</td><td align="right">1030</td><td align="right">1779</td><td align="right">133</td><td align="right">1224</td><td align="right">1490</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">7</td></tr><tr><td rowspan="11">Webpack</td><td rowspan="11">Home</td><td>uiStartup</td><td align="right">1545</td><td align="right">1330</td><td align="right">2070</td><td align="right">157</td><td align="right">1608</td><td align="right">1912</td></tr><tr><td>load</td><td align="right">1337</td><td align="right">1147</td><td align="right">1874</td><td align="right">155</td><td align="right">1410</td><td align="right">1695</td></tr><tr><td>domContentLoaded</td><td align="right">1337</td><td align="right">1146</td><td align="right">1874</td><td align="right">155</td><td align="right">1409</td><td align="right">1695</td></tr><tr><td>domInteractive</td><td align="right">101</td><td align="right">59</td><td align="right">374</td><td align="right">36</td><td align="right">88</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">17</td><td align="right">56</td><td align="right">6</td><td align="right">28</td><td align="right">36</td></tr><tr><td>firstReactRender</td><td align="right">35</td><td align="right">28</td><td align="right">54</td><td align="right">6</td><td align="right">38</td><td align="right">48</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">4</td><td align="right">66</td><td align="right">7</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">1314</td><td align="right">1119</td><td align="right">1819</td><td align="right">154</td><td align="right">1391</td><td align="right">1670</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">5</td><td align="right">30</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.52 KiB (0.02%)</li>
<li>common: 302 Bytes (0%)</li></ul></details>


author_association: COLLABORATOR
user: login: metamaskbot
created_at: 2025-04-08T16:45:06Z
body: <details><summary>Builds ready [2a38f80]</summary><ul><li>builds: <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/builds/metamask-chrome-12.15.1.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/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/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/builds-flask/metamask-flask-chrome-12.15.1-flask.0.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/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/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/builds-test/metamask-chrome-12.15.1.zip">chrome</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/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/ee32277e-f074-4562-b7d6-07a6e0b51a29/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/ee32277e-f074-4562-b7d6-07a6e0b51a29/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/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/build-viz/index.html">Build System</a></li>
<li>bundle size: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14338330176/bundle-size/bundle_size.json">Bundle Size Stats</a></li>
<li>user-actions-benchmark: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14338330176/benchmarks/benchmark-chrome-browserify-userActions.json">User Actions Stats</a></li>
<li>storybook: <a href="https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/14338330176/storybook-build/index.html">Storybook</a></li>
<li>typescript migration: <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/ts-migration-dashboard/index.html">Dashboard</a></li>
<li><a href="https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/jobs/4742217/artifacts/">all CircleCI artifacts</a></li>
<li><details>
       <summary>bundle viz:</summary>
       <ul><li>background: <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/background-10.html">10</a></li><li>common: <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-13.html">13</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/common-14.html">14</a></li><li>ui: <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-0.html">0</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-1.html">1</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-2.html">2</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-3.html">3</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-4.html">4</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-5.html">5</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-6.html">6</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-7.html">7</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-8.html">8</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-9.html">9</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-10.html">10</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-11.html">11</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/ui-12.html">12</a>, <a href="https://output.circle-artifacts.com/output/job/ee32277e-f074-4562-b7d6-07a6e0b51a29/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/ee32277e-f074-4562-b7d6-07a6e0b51a29/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/ee32277e-f074-4562-b7d6-07a6e0b51a29/artifacts/0/build-artifacts/source-map-explorer/offscreen-0.html">0</a></li></ul>
     </details></li></ul></details>

<details><summary>UI Startup Metrics (1233 ± 62 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">1233</td><td align="right">1117</td><td align="right">1510</td><td align="right">62</td><td align="right">1272</td><td align="right">1339</td></tr><tr><td>load</td><td align="right">1080</td><td align="right">928</td><td align="right">1371</td><td align="right">64</td><td align="right">1144</td><td align="right">993</td></tr><tr><td>domContentLoaded</td><td align="right">1073</td><td align="right">920</td><td align="right">1363</td><td align="right">64</td><td align="right">1141</td><td align="right">991</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">13</td><td align="right">64</td><td align="right">8</td><td align="right">16</td><td align="right">30</td></tr><tr><td>firstPaint</td><td align="right">792</td><td align="right">76</td><td align="right">1204</td><td align="right">412</td><td align="right">244</td><td align="right">981</td></tr><tr><td>backgroundConnect</td><td align="right">11</td><td align="right">6</td><td align="right">34</td><td align="right">4</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">46</td><td align="right">6</td><td align="right">21</td><td align="right">38</td></tr><tr><td>getState</td><td align="right">13</td><td align="right">5</td><td align="right">33</td><td align="right">7</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">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">822</td><td align="right">674</td><td align="right">1105</td><td align="right">62</td><td align="right">853</td><td align="right">918</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">4</td><td align="right">34</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">2191</td><td align="right">1716</td><td align="right">2597</td><td align="right">175</td><td align="right">2313</td><td align="right">2412</td></tr><tr><td>load</td><td align="right">1711</td><td align="right">1344</td><td align="right">2034</td><td align="right">136</td><td align="right">1797</td><td align="right">1901</td></tr><tr><td>domContentLoaded</td><td align="right">1705</td><td align="right">1341</td><td align="right">2025</td><td align="right">135</td><td align="right">1793</td><td align="right">1897</td></tr><tr><td>domInteractive</td><td align="right">17</td><td align="right">13</td><td align="right">64</td><td align="right">11</td><td align="right">15</td><td align="right">52</td></tr><tr><td>firstPaint</td><td align="right">164</td><td align="right">66</td><td align="right">560</td><td align="right">74</td><td align="right">232</td><td align="right">92</td></tr><tr><td>backgroundConnect</td><td align="right">40</td><td align="right">11</td><td align="right">261</td><td align="right">44</td><td align="right">42</td><td align="right">61</td></tr><tr><td>firstReactRender</td><td align="right">188</td><td align="right">53</td><td align="right">378</td><td align="right">112</td><td align="right">55</td><td align="right">89</td></tr><tr><td>getState</td><td align="right">16</td><td align="right">4</td><td align="right">288</td><td align="right">29</td><td align="right">6</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">4</td><td align="right">5</td></tr><tr><td>loadScripts</td><td align="right">1696</td><td align="right">1338</td><td align="right">2002</td><td align="right">134</td><td align="right">1779</td><td align="right">1887</td></tr><tr><td>setupStore</td><td align="right">21</td><td align="right">6</td><td align="right">310</td><td align="right">30</td><td align="right">37</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">1339</td><td align="right">1165</td><td align="right">1956</td><td align="right">141</td><td align="right">1404</td><td align="right">1694</td></tr><tr><td>load</td><td align="right">1196</td><td align="right">1039</td><td align="right">1784</td><td align="right">137</td><td align="right">1254</td><td align="right">1564</td></tr><tr><td>domContentLoaded</td><td align="right">1196</td><td align="right">1039</td><td align="right">1784</td><td align="right">137</td><td align="right">1254</td><td align="right">1564</td></tr><tr><td>domInteractive</td><td align="right">96</td><td align="right">39</td><td align="right">177</td><td align="right">20</td><td align="right">88</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">58</td><td align="right">8</td><td align="right">27</td><td align="right">41</td></tr><tr><td>firstReactRender</td><td align="right">22</td><td align="right">19</td><td align="right">55</td><td align="right">6</td><td align="right">22</td><td align="right">31</td></tr><tr><td>getState</td><td align="right">7</td><td align="right">4</td><td align="right">21</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">1174</td><td align="right">1021</td><td align="right">1766</td><td align="right">136</td><td align="right">1231</td><td align="right">1511</td></tr><tr><td>setupStore</td><td align="right">8</td><td align="right">4</td><td align="right">190</td><td align="right">19</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">1539</td><td align="right">1339</td><td align="right">1989</td><td align="right">134</td><td align="right">1621</td><td align="right">1800</td></tr><tr><td>load</td><td align="right">1324</td><td align="right">1164</td><td align="right">1724</td><td align="right">125</td><td align="right">1409</td><td align="right">1579</td></tr><tr><td>domContentLoaded</td><td align="right">1324</td><td align="right">1164</td><td align="right">1723</td><td align="right">125</td><td align="right">1409</td><td align="right">1579</td></tr><tr><td>domInteractive</td><td align="right">97</td><td align="right">39</td><td align="right">340</td><td align="right">32</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">25</td><td align="right">18</td><td align="right">46</td><td align="right">5</td><td align="right">27</td><td align="right">36</td></tr><tr><td>firstReactRender</td><td align="right">36</td><td align="right">28</td><td align="right">55</td><td align="right">6</td><td align="right">40</td><td align="right">49</td></tr><tr><td>getState</td><td align="right">9</td><td align="right">4</td><td align="right">41</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">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">1300</td><td align="right">1142</td><td align="right">1704</td><td align="right">124</td><td align="right">1383</td><td align="right">1542</td></tr><tr><td>setupStore</td><td align="right">9</td><td align="right">5</td><td align="right">66</td><td align="right">9</td><td align="right">8</td><td align="right">9</td></tr></tbody></table></details>


author_association: COLLABORATOR