Repository: MetaMask/metamask-mobile
Pull request #15557: build: upgrade `@metamask/assets-controllers@63.0.0`
Author: login: Prithpal-Sooriya
Labels: name: No QA Needed
description: Apply this label when your PR does not need any QA effort.
name: team-assets
name: release-7.48.0
description: Issue or pull request that will be included in release 7.48.0
Created: 2025-05-22T17:24:10Z | Merged: 2025-05-23T11:14:31Z

## **Description**

Upgrade `@metamask/assets-controllers@63.0.0`

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MMASSETS-846

## **Manual testing steps**

N/A

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/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-mobile/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/package.json b/package.json
index f28d95361c18..de3cb3a86fd4 100644
--- a/package.json
+++ b/package.json
@@ -165,7 +165,7 @@
     "@metamask/address-book-controller": "^6.0.3",
     "@metamask/app-metadata-controller": "^1.0.0",
     "@metamask/approval-controller": "^7.1.3",
-    "@metamask/assets-controllers": "^62.0.0",
+    "@metamask/assets-controllers": "^63.0.0",
     "@metamask/base-controller": "^8.0.0",
     "@metamask/bitcoin-wallet-snap": "^0.12.1",
     "@metamask/bridge-controller": "^23.0.0",
diff --git a/patches/@metamask+assets-controllers+62.0.0.patch b/patches/@metamask+assets-controllers+63.0.0.patch
similarity index 84%
rename from patches/@metamask+assets-controllers+62.0.0.patch
rename to patches/@metamask+assets-controllers+63.0.0.patch
index 47b8a411df4c..06ddc330a48f 100644
--- a/patches/@metamask+assets-controllers+62.0.0.patch
+++ b/patches/@metamask+assets-controllers+63.0.0.patch
@@ -1,79 +1,87 @@
 diff --git a/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs b/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs
-index 53f4bef..048d49c 100644
+index 53f4bef..a721111 100644
 --- a/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs
 +++ b/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs
-@@ -136,9 +136,10 @@ class MultichainAssetsRatesController extends (0, polling_controller_1.StaticInt
+@@ -136,9 +136,12 @@ class MultichainAssetsRatesController extends (0, polling_controller_1.StaticInt
       * Fetches historical prices for the current account
       *
       * @param asset - The asset to fetch historical prices for.
++     * Remove once https://github.com/MetaMask/core/pull/5833 is released
 +     * @param account - optional account to fetch historical prices for
       * @returns The historical prices.
       */
 -    async fetchHistoricalPricesForAsset(asset) {
++    // Remove once https://github.com/MetaMask/core/pull/5833 is released
 +    async fetchHistoricalPricesForAsset(asset, account) {
          const releaseLock = await __classPrivateFieldGet(this, _MultichainAssetsRatesController_mutex, "f").acquire();
          return (async () => {
              const currentCaipCurrency = constant_1.MAP_CAIP_CURRENCIES[__classPrivateFieldGet(this, _MultichainAssetsRatesController_currentCurrency, "f")] ?? constant_1.MAP_CAIP_CURRENCIES.usd;
-@@ -150,7 +151,8 @@ class MultichainAssetsRatesController extends (0, polling_controller_1.StaticInt
+@@ -150,7 +153,9 @@ class MultichainAssetsRatesController extends (0, polling_controller_1.StaticInt
              if (historicalPriceHasExpired === false) {
                  return;
              }
 -            const selectedAccount = this.messagingSystem.call('AccountsController:getSelectedMultichainAccount');
++            // Remove once https://github.com/MetaMask/core/pull/5833 is released
 +            const selectedAccount = account ??
 +                this.messagingSystem.call('AccountsController:getSelectedMultichainAccount');
              try {
                  const historicalPricesResponse = await __classPrivateFieldGet(this, _MultichainAssetsRatesController_instances, "m", _MultichainAssetsRatesController_handleSnapRequest).call(this, {
                      snapId: selectedAccount?.metadata.snap?.id,
 diff --git a/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts b/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts
-index 4bf9a94..aab0300 100644
+index 4bf9a94..0ddf819 100644
 --- a/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts
 +++ b/node_modules/@metamask/assets-controllers/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts
-@@ -131,7 +131,7 @@ export declare class MultichainAssetsRatesController extends MultichainAssetsRat
+@@ -131,7 +131,8 @@ export declare class MultichainAssetsRatesController extends MultichainAssetsRat
       * @param asset - The asset to fetch historical prices for.
       * @returns The historical prices.
       */
 -    fetchHistoricalPricesForAsset(asset: CaipAssetType): Promise<void>;
++    // Remove once https://github.com/MetaMask/core/pull/5833 is released
 +    fetchHistoricalPricesForAsset(asset: CaipAssetType, account?: InternalAccount): Promise<void>;
  }
  export {};
  //# sourceMappingURL=MultichainAssetsRatesController.d.cts.map
 \ No newline at end of file
 diff --git a/node_modules/@metamask/assets-controllers/dist/NftController.cjs b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-index 0f15eb6..d814ed8 100644
+index 0f15eb6..322f5c5 100644
 --- a/node_modules/@metamask/assets-controllers/dist/NftController.cjs
 +++ b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
+@@ -13,7 +13,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
  var __importDefault = (this && this.__importDefault) || function (mod) {
      return (mod && mod.__esModule) ? mod : { "default": mod };
  };
 -var _NftController_instances, _NftController_mutex, _NftController_selectedAccountId, _NftController_chainId, _NftController_ipfsGateway, _NftController_openSeaEnabled, _NftController_useIpfsSubdomains, _NftController_isIpfsGatewayEnabled, _NftController_onNftAdded, _NftController_onNetworkControllerNetworkDidChange, _NftController_onPreferencesControllerStateChange, _NftController_onSelectedAccountChange, _NftController_updateNestedNftState, _NftController_getNftCollectionApi, _NftController_getNftInformationFromApi, _NftController_getNftInformationFromTokenURI, _NftController_getNftURIAndStandard, _NftController_getNftInformation, _NftController_getNftContractInformationFromContract, _NftController_getNftContractInformation, _NftController_addIndividualNft, _NftController_addNftContract, _NftController_removeAndIgnoreIndividualNft, _NftController_removeIndividualNft, _NftController_removeNftContract, _NftController_validateWatchNft, _NftController_getCorrectChainId, _NftController_getAddressOrSelectedAddress, _NftController_updateNftUpdateForAccount;
++// Remove once https://github.com/MetaMask/core/pull/4774 is released
 +var _NftController_instances, _NftController_mutex, _NftController_selectedAccountId, _NftController_chainId, _NftController_ipfsGateway, _NftController_displayNftMedia, _NftController_useIpfsSubdomains, _NftController_isIpfsGatewayEnabled, _NftController_onNftAdded, _NftController_onNetworkControllerNetworkDidChange, _NftController_onPreferencesControllerStateChange, _NftController_onSelectedAccountChange, _NftController_updateNestedNftState, _NftController_getNftCollectionApi, _NftController_getNftInformationFromApi, _NftController_getNftInformationFromTokenURI, _NftController_getNftURIAndStandard, _NftController_getNftInformation, _NftController_getNftContractInformationFromContract, _NftController_getNftContractInformation, _NftController_addIndividualNft, _NftController_addNftContract, _NftController_removeAndIgnoreIndividualNft, _NftController_removeIndividualNft, _NftController_removeNftContract, _NftController_validateWatchNft, _NftController_getCorrectChainId, _NftController_getAddressOrSelectedAddress, _NftController_updateNftUpdateForAccount;
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.NftController = exports.getDefaultNftControllerState = void 0;
  const address_1 = require("@ethersproject/address");
-@@ -54,7 +54,7 @@ class NftController extends base_controller_1.BaseController {
+@@ -54,7 +55,8 @@ class NftController extends base_controller_1.BaseController {
       * @param options - The controller options.
       * @param options.chainId - The chain ID of the current network.
       * @param options.ipfsGateway - The configured IPFS gateway.
 -     * @param options.openSeaEnabled - Controls whether the OpenSea API is used.
++     * Remove once https://github.com/MetaMask/core/pull/4774 is released
 +     * @param options.displayNftMedia - Controls whether the NFT API is used.
       * @param options.useIpfsSubdomains - Controls whether IPFS subdomains are used.
       * @param options.isIpfsGatewayEnabled - Controls whether IPFS is enabled or not.
       * @param options.onNftAdded - Callback that is called when an NFT is added. Currently used pass data
-@@ -62,7 +62,7 @@ class NftController extends base_controller_1.BaseController {
+@@ -62,7 +64,8 @@ class NftController extends base_controller_1.BaseController {
       * @param options.messenger - The messenger.
       * @param options.state - Initial state to set on this controller.
       */
 -    constructor({ chainId: initialChainId, ipfsGateway = controller_utils_1.IPFS_DEFAULT_GATEWAY_URL, openSeaEnabled = false, useIpfsSubdomains = true, isIpfsGatewayEnabled = true, onNftAdded, messenger, state = {}, }) {
++    // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +    constructor({ chainId: initialChainId, ipfsGateway = controller_utils_1.IPFS_DEFAULT_GATEWAY_URL, displayNftMedia = false, useIpfsSubdomains = true, isIpfsGatewayEnabled = true, onNftAdded, messenger, state = {}, }) {
          super({
              name: controllerName,
              metadata: nftControllerMetadata,
-@@ -77,14 +77,14 @@ class NftController extends base_controller_1.BaseController {
+@@ -77,14 +80,16 @@ class NftController extends base_controller_1.BaseController {
          _NftController_selectedAccountId.set(this, void 0);
          _NftController_chainId.set(this, void 0);
          _NftController_ipfsGateway.set(this, void 0);
 -        _NftController_openSeaEnabled.set(this, void 0);
++        // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +        _NftController_displayNftMedia.set(this, void 0);
          _NftController_useIpfsSubdomains.set(this, void 0);
          _NftController_isIpfsGatewayEnabled.set(this, void 0);
@@ -82,91 +90,105 @@ index 0f15eb6..d814ed8 100644
          __classPrivateFieldSet(this, _NftController_chainId, initialChainId, "f");
          __classPrivateFieldSet(this, _NftController_ipfsGateway, ipfsGateway, "f");
 -        __classPrivateFieldSet(this, _NftController_openSeaEnabled, openSeaEnabled, "f");
++        // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +        __classPrivateFieldSet(this, _NftController_displayNftMedia, displayNftMedia, "f");
          __classPrivateFieldSet(this, _NftController_useIpfsSubdomains, useIpfsSubdomains, "f");
          __classPrivateFieldSet(this, _NftController_isIpfsGatewayEnabled, isIpfsGatewayEnabled, "f");
          __classPrivateFieldSet(this, _NftController_onNftAdded, onNftAdded, "f");
-@@ -597,7 +597,7 @@ class NftController extends base_controller_1.BaseController {
+@@ -597,7 +602,8 @@ class NftController extends base_controller_1.BaseController {
      }
  }
  exports.NftController = NftController;
 -_NftController_mutex = new WeakMap(), _NftController_selectedAccountId = new WeakMap(), _NftController_chainId = new WeakMap(), _NftController_ipfsGateway = new WeakMap(), _NftController_openSeaEnabled = new WeakMap(), _NftController_useIpfsSubdomains = new WeakMap(), _NftController_isIpfsGatewayEnabled = new WeakMap(), _NftController_onNftAdded = new WeakMap(), _NftController_instances = new WeakSet(), _NftController_onNetworkControllerNetworkDidChange = function _NftController_onNetworkControllerNetworkDidChange({ selectedNetworkClientId, }) {
++// Remove once https://github.com/MetaMask/core/pull/4774 is released
 +_NftController_mutex = new WeakMap(), _NftController_selectedAccountId = new WeakMap(), _NftController_chainId = new WeakMap(), _NftController_ipfsGateway = new WeakMap(), _NftController_displayNftMedia = new WeakMap(), _NftController_useIpfsSubdomains = new WeakMap(), _NftController_isIpfsGatewayEnabled = new WeakMap(), _NftController_onNftAdded = new WeakMap(), _NftController_instances = new WeakSet(), _NftController_onNetworkControllerNetworkDidChange = function _NftController_onNetworkControllerNetworkDidChange({ selectedNetworkClientId, }) {
      const { configuration: { chainId }, } = this.messagingSystem.call('NetworkController:getNetworkClientById', selectedNetworkClientId);
      __classPrivateFieldSet(this, _NftController_chainId, chainId, "f");
  }, _NftController_onPreferencesControllerStateChange = 
-@@ -605,20 +605,20 @@ _NftController_mutex = new WeakMap(), _NftController_selectedAccountId = new Wea
+@@ -605,20 +611,25 @@ _NftController_mutex = new WeakMap(), _NftController_selectedAccountId = new Wea
   * Handles the state change of the preference controller.
   * @param preferencesState - The new state of the preference controller.
   * @param preferencesState.ipfsGateway - The configured IPFS gateway.
 - * @param preferencesState.openSeaEnabled - Controls whether the OpenSea API is used.
++ * Remove once https://github.com/MetaMask/core/pull/4774 is released
 + * @param preferencesState.displayNftMedia - Controls whether the NFT API is used.
   * @param preferencesState.isIpfsGatewayEnabled - Controls whether IPFS is enabled or not.
   */
 -async function _NftController_onPreferencesControllerStateChange({ ipfsGateway, openSeaEnabled, isIpfsGatewayEnabled, }) {
++// Remove once https://github.com/MetaMask/core/pull/4774 is released
 +async function _NftController_onPreferencesControllerStateChange({ ipfsGateway, displayNftMedia, isIpfsGatewayEnabled, }) {
      const selectedAccount = this.messagingSystem.call('AccountsController:getSelectedAccount');
      __classPrivateFieldSet(this, _NftController_selectedAccountId, selectedAccount.id, "f");
      // Get current state values
      if (__classPrivateFieldGet(this, _NftController_ipfsGateway, "f") !== ipfsGateway ||
 -        __classPrivateFieldGet(this, _NftController_openSeaEnabled, "f") !== openSeaEnabled ||
++        // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +        __classPrivateFieldGet(this, _NftController_displayNftMedia, "f") !== displayNftMedia ||
          __classPrivateFieldGet(this, _NftController_isIpfsGatewayEnabled, "f") !== isIpfsGatewayEnabled) {
          __classPrivateFieldSet(this, _NftController_ipfsGateway, ipfsGateway, "f");
 -        __classPrivateFieldSet(this, _NftController_openSeaEnabled, openSeaEnabled, "f");
++        // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +        __classPrivateFieldSet(this, _NftController_displayNftMedia, displayNftMedia, "f");
          __classPrivateFieldSet(this, _NftController_isIpfsGatewayEnabled, isIpfsGatewayEnabled, "f");
 -        const needsUpdateNftMetadata = (isIpfsGatewayEnabled && ipfsGateway !== '') || openSeaEnabled;
++        // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +        const needsUpdateNftMetadata = (isIpfsGatewayEnabled && ipfsGateway !== '') || displayNftMedia;
          if (needsUpdateNftMetadata && selectedAccount) {
              await __classPrivateFieldGet(this, _NftController_instances, "m", _NftController_updateNftUpdateForAccount).call(this, selectedAccount);
          }
-@@ -632,7 +632,7 @@ async function _NftController_onSelectedAccountChange(internalAccount) {
+@@ -632,7 +643,8 @@ async function _NftController_onSelectedAccountChange(internalAccount) {
      const oldSelectedAccountId = __classPrivateFieldGet(this, _NftController_selectedAccountId, "f");
      __classPrivateFieldSet(this, _NftController_selectedAccountId, internalAccount.id, "f");
      const needsUpdateNftMetadata = ((__classPrivateFieldGet(this, _NftController_isIpfsGatewayEnabled, "f") && __classPrivateFieldGet(this, _NftController_ipfsGateway, "f") !== '') ||
 -        __classPrivateFieldGet(this, _NftController_openSeaEnabled, "f")) &&
++        // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +        __classPrivateFieldGet(this, _NftController_displayNftMedia, "f")) &&
          oldSelectedAccountId !== internalAccount.id;
      if (needsUpdateNftMetadata) {
          await __classPrivateFieldGet(this, _NftController_instances, "m", _NftController_updateNftUpdateForAccount).call(this, internalAccount);
-@@ -707,6 +707,7 @@ async function _NftController_getNftInformationFromApi(contractAddress, tokenId)
+@@ -707,6 +719,8 @@ async function _NftController_getNftInformationFromApi(contractAddress, tokenId)
              description: null,
              image: null,
              standard: null,
++            // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +            error: 'Opensea import error',
          };
      }
      // if we've reached this point, we have successfully fetched some data for nftInformation
-@@ -749,9 +750,10 @@ async function _NftController_getNftInformationFromTokenURI(contractAddress, tok
+@@ -749,9 +763,12 @@ async function _NftController_getNftInformationFromTokenURI(contractAddress, tok
              standard: standard || null,
              favorite: false,
              tokenURI: tokenURI ?? null,
++            // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +            error: 'URI import error',
          };
      }
 -    const isDisplayNFTMediaToggleEnabled = __classPrivateFieldGet(this, _NftController_openSeaEnabled, "f");
++    // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +    const isDisplayNFTMediaToggleEnabled = __classPrivateFieldGet(this, _NftController_displayNftMedia, "f");
      if (!hasIpfsTokenURI && !isDisplayNFTMediaToggleEnabled) {
          return {
              image: null,
-@@ -760,6 +762,7 @@ async function _NftController_getNftInformationFromTokenURI(contractAddress, tok
+@@ -760,6 +777,8 @@ async function _NftController_getNftInformationFromTokenURI(contractAddress, tok
              standard: standard || null,
              favorite: false,
              tokenURI: tokenURI ?? null,
++            // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +            error: 'URI import error',
          };
      }
      if (hasIpfsTokenURI) {
-@@ -853,10 +856,21 @@ async function _NftController_getNftInformation(contractAddress, tokenId, networ
+@@ -853,10 +872,23 @@ async function _NftController_getNftInformation(contractAddress, tokenId, networ
      });
      const [blockchainMetadata, nftApiMetadata] = await Promise.all([
          (0, controller_utils_1.safelyExecute)(() => __classPrivateFieldGet(this, _NftController_instances, "m", _NftController_getNftInformationFromTokenURI).call(this, contractAddress, tokenId, networkClientId)),
 -        __classPrivateFieldGet(this, _NftController_openSeaEnabled, "f") && chainId === '0x1'
++        // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +        __classPrivateFieldGet(this, _NftController_displayNftMedia, "f") && chainId === '0x1'
              ? (0, controller_utils_1.safelyExecute)(() => __classPrivateFieldGet(this, _NftController_instances, "m", _NftController_getNftInformationFromApi).call(this, contractAddress, tokenId))
              : undefined,
      ]);
++    // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +    if (blockchainMetadata?.error && nftApiMetadata?.error) {
 +        return {
 +            image: null,
@@ -181,22 +203,24 @@ index 0f15eb6..d814ed8 100644
      return {
          ...nftApiMetadata,
          name: blockchainMetadata?.name ?? nftApiMetadata?.name ?? null,
-@@ -998,6 +1012,7 @@ async function _NftController_addIndividualNft(tokenAddress, tokenId, nftMetadat
+@@ -998,6 +1030,8 @@ async function _NftController_addIndividualNft(tokenAddress, tokenId, nftMetadat
                  tokenId: tokenId.toString(),
                  standard: nftMetadata.standard,
                  source,
++                // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +                tokenURI: nftMetadata.tokenURI
              });
          }
      }
 diff --git a/node_modules/@metamask/assets-controllers/dist/NftController.d.cts b/node_modules/@metamask/assets-controllers/dist/NftController.d.cts
-index 4384784..e35e71c 100644
+index 4384784..60bc29a 100644
 --- a/node_modules/@metamask/assets-controllers/dist/NftController.d.cts
 +++ b/node_modules/@metamask/assets-controllers/dist/NftController.d.cts
-@@ -108,6 +108,7 @@ export type NftMetadata = {
+@@ -108,6 +108,8 @@ export type NftMetadata = {
      creator?: string;
      transactionId?: string;
      tokenURI?: string | null;
++    // Remove once https://github.com/MetaMask/core/pull/4774 is released
 +    error?: string;
      collection?: Collection;
      address?: string;
diff --git a/yarn.lock b/yarn.lock
index d6b6b85d5116..a0efeac61ae2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4703,10 +4703,10 @@
     "@metamask/utils" "^11.1.0"
     nanoid "^3.3.8"
 
-"@metamask/assets-controllers@^62.0.0":
-  version "62.0.0"
-  resolved "https://registry.yarnpkg.com/@metamask/assets-controllers/-/assets-controllers-62.0.0.tgz#6fba18e4082f35624e0d22a2c903bc56dd5b9c77"
-  integrity sha512-yNH4ikXVBbAcaSsGNba/2tKK7bjq4IFqkVMR9oa6APCiwrQl7enulFKnyylsL89TvF1dv/kovNFG1uiieDMGtA==
+"@metamask/assets-controllers@^63.0.0":
+  version "63.0.0"
+  resolved "https://registry.yarnpkg.com/@metamask/assets-controllers/-/assets-controllers-63.0.0.tgz#087c08abd71deb45d19cb3105a3646fc3b1352cb"
+  integrity sha512-clUCh2WjGSIxPx2CjJrjjK6riRiB3HqRUnOw+rUrF7DmIY2K38Yl0zyXZRx95HtsBaHqGcum1U0ivbufOhW7Mw==
   dependencies:
     "@ethereumjs/util" "^9.1.0"
     "@ethersproject/abi" "^5.7.0"


Reviews:
user: login: gambinish
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-22T17:58:48Z
user: login: Prithpal-Sooriya
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-22T18:13:55Z
user: login: gambinish
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-05-22T23:31:42Z
user: login: sahar-fehri
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-23T06:57:33Z
user: login: sahar-fehri
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-05-23T06:57:51Z
user: login: sahar-fehri
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-23T09:49:21Z
user: login: joaoloureirop
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-23T10:52:57Z

Review comments:
diff_hunk: @@ -1,39 +1,43 @@
 diff --git a/node_modules/@metamask/assets-controllers/dist/NftController.cjs b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-index 0f15eb6..d814ed8 100644
+index 0f15eb6..322f5c5 100644
 --- a/node_modules/@metamask/assets-controllers/dist/NftController.cjs
 +++ b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
+@@ -13,7 +13,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
  var __importDefault = (this && this.__importDefault) || function (mod) {
      return (mod && mod.__esModule) ? mod : { "default": mod };
  };
 -var _NftController_instances, _NftController_mutex, _NftController_selectedAccountId, _NftController_chainId, _NftController_ipfsGateway, _NftController_openSeaEnabled, _NftController_useIpfsSubdomains, _NftController_isIpfsGatewayEnabled, _NftController_onNftAdded, _NftController_onNetworkControllerNetworkDidChange, _NftController_onPreferencesControllerStateChange, _NftController_onSelectedAccountChange, _NftController_updateNestedNftState, _NftController_getNftCollectionApi, _NftController_getNftInformationFromApi, _NftController_getNftInformationFromTokenURI, _NftController_getNftURIAndStandard, _NftController_getNftInformation, _NftController_getNftContractInformationFromContract, _NftController_getNftContractInformation, _NftController_addIndividualNft, _NftController_addNftContract, _NftController_removeAndIgnoreIndividualNft, _NftController_removeIndividualNft, _NftController_removeNftContract, _NftController_validateWatchNft, _NftController_getCorrectChainId, _NftController_getAddressOrSelectedAddress, _NftController_updateNftUpdateForAccount;
++// Remove once https://github.com/MetaMask/core/pull/4774 is merged
path: patches/@metamask+assets-controllers+63.0.0.patch
user: login: gambinish
body: I fear this will become a permanent comment
created_at: 2025-05-22T17:58:47Z
author_association: MEMBER
diff_hunk: @@ -1,39 +1,43 @@
 diff --git a/node_modules/@metamask/assets-controllers/dist/NftController.cjs b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-index 0f15eb6..d814ed8 100644
+index 0f15eb6..322f5c5 100644
 --- a/node_modules/@metamask/assets-controllers/dist/NftController.cjs
 +++ b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
+@@ -13,7 +13,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
  var __importDefault = (this && this.__importDefault) || function (mod) {
      return (mod && mod.__esModule) ? mod : { "default": mod };
  };
 -var _NftController_instances, _NftController_mutex, _NftController_selectedAccountId, _NftController_chainId, _NftController_ipfsGateway, _NftController_openSeaEnabled, _NftController_useIpfsSubdomains, _NftController_isIpfsGatewayEnabled, _NftController_onNftAdded, _NftController_onNetworkControllerNetworkDidChange, _NftController_onPreferencesControllerStateChange, _NftController_onSelectedAccountChange, _NftController_updateNestedNftState, _NftController_getNftCollectionApi, _NftController_getNftInformationFromApi, _NftController_getNftInformationFromTokenURI, _NftController_getNftURIAndStandard, _NftController_getNftInformation, _NftController_getNftContractInformationFromContract, _NftController_getNftContractInformation, _NftController_addIndividualNft, _NftController_addNftContract, _NftController_removeAndIgnoreIndividualNft, _NftController_removeIndividualNft, _NftController_removeNftContract, _NftController_validateWatchNft, _NftController_getCorrectChainId, _NftController_getAddressOrSelectedAddress, _NftController_updateNftUpdateForAccount;
++// Remove once https://github.com/MetaMask/core/pull/4774 is merged
path: patches/@metamask+assets-controllers+63.0.0.patch
user: login: Prithpal-Sooriya
body: LOL, I only added the comment since I was really confused where this patch came from, and if it still needed applying.

Hooooopefully we can merge these core changes (was there blockers for not merging?)
created_at: 2025-05-22T18:13:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,39 +1,43 @@
 diff --git a/node_modules/@metamask/assets-controllers/dist/NftController.cjs b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-index 0f15eb6..d814ed8 100644
+index 0f15eb6..322f5c5 100644
 --- a/node_modules/@metamask/assets-controllers/dist/NftController.cjs
 +++ b/node_modules/@metamask/assets-controllers/dist/NftController.cjs
-@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
+@@ -13,7 +13,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
  var __importDefault = (this && this.__importDefault) || function (mod) {
      return (mod && mod.__esModule) ? mod : { "default": mod };
  };
 -var _NftController_instances, _NftController_mutex, _NftController_selectedAccountId, _NftController_chainId, _NftController_ipfsGateway, _NftController_openSeaEnabled, _NftController_useIpfsSubdomains, _NftController_isIpfsGatewayEnabled, _NftController_onNftAdded, _NftController_onNetworkControllerNetworkDidChange, _NftController_onPreferencesControllerStateChange, _NftController_onSelectedAccountChange, _NftController_updateNestedNftState, _NftController_getNftCollectionApi, _NftController_getNftInformationFromApi, _NftController_getNftInformationFromTokenURI, _NftController_getNftURIAndStandard, _NftController_getNftInformation, _NftController_getNftContractInformationFromContract, _NftController_getNftContractInformation, _NftController_addIndividualNft, _NftController_addNftContract, _NftController_removeAndIgnoreIndividualNft, _NftController_removeIndividualNft, _NftController_removeNftContract, _NftController_validateWatchNft, _NftController_getCorrectChainId, _NftController_getAddressOrSelectedAddress, _NftController_updateNftUpdateForAccount;
++// Remove once https://github.com/MetaMask/core/pull/4774 is merged
path: patches/@metamask+assets-controllers+63.0.0.patch
user: login: sahar-fehri
body: Just lack of bandwidth to handle extension changes, thnx for adding the comment!
created_at: 2025-05-23T06:57:33Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-05-22T17:24:22Z
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: github-actions[bot]
created_at: 2025-05-22T17:25:31Z
body: ## [<img alt="https://bitrise.io/" src="https://assets-global.website-files.com/5db35de024bb983af1b4e151/5e6f9ccc3e129dfd8a205e4e_Bitrise%20Logo%20-%20Eggplant%20Bg.png" height="20">](https://app.bitrise.io/app/be69d4368ee7e86d/pipelines/a6baf1a9-69ff-4c47-a251-657df3f9ad6b) **Bitrise**

🔄🔄🔄 `pr_smoke_e2e_pipeline` started on Bitrise...🔄🔄🔄

Commit hash: b4edae67ad9aa935d3873fb508ff2dd880e1c9aa
Build link: https://app.bitrise.io/app/be69d4368ee7e86d/pipelines/a6baf1a9-69ff-4c47-a251-657df3f9ad6b

>[!NOTE]
>- This comment will auto-update when build completes
>- You can kick off another `pr_smoke_e2e_pipeline` on Bitrise by removing and re-applying the `Run Smoke E2E` label on the pull request
<!-- BITRISE_TAG -->
<!-- BITRISE_PENDING_TAG -->

<!-- b4edae67ad9aa935d3873fb508ff2dd880e1c9aa -->
author_association: CONTRIBUTOR
user: login: socket-security[bot]
created_at: 2025-05-22T17:26:21Z
body: **Review the following changes in direct dependencies.** Learn more about [Socket for GitHub](https://socket.dev?utm_medium=gh).

<table>
<thead>
<tr>
<th>Diff</th>
<th width="200px">Package</th>
<th align="left" width="100px">Supply Chain<br/>Security</th>
<th align="left" width="100px">Vulnerability</th>
<th align="left" width="100px">Quality</th>
<th align="left" width="100px">Maintenance</th>
<th align="left" width="100px">License</th>
</tr>
</thead>
<tbody>
<tr><td align="center"><a href="https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies&dependency_item_key=31139428479"><img src="https://github-app-statics.socket.dev/diff-updated.svg" title="Updated" alt="Updated" width="20" height="20"></a></td><td><a href="https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies&dependency_item_key=31139428479">npm/​@​metamask/​assets-controllers@​62.0.0 ⏵ 63.0.0</a></td><td align="left"><a href="https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies&dependency_item_key=31139428479"><img src="https://github-app-statics.socket.dev/score-91.svg" title="Supply Chain Security" width="40" height="40" alt="91"></a> <sup>+1</sup></td><td align="left"><a href="https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies&dependency_item_key=31139428479"><img src="https://github-app-statics.socket.dev/score-100.svg" title="Vulnerability" width="40" height="40" alt="100"></a></td><td align="left"><a href="https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies&dependency_item_key=31139428479"><img src="https://github-app-statics.socket.dev/score-90.svg" title="Quality" width="40" height="40" alt="90"></a></td><td align="left"><a href="https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies&dependency_item_key=31139428479"><img src="https://github-app-statics.socket.dev/score-100.svg" title="Maintenance" width="40" height="40" alt="100"></a> <sup>+1</sup></td><td align="left"><a href="https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies&dependency_item_key=31139428479"><img src="https://github-app-statics.socket.dev/score-100.svg" title="License" width="40" height="40" alt="100"></a></td></tr>
</tbody>
</table>

[View full report](https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=dependencies)

<!-- overview-comment -->
author_association: NONE
user: login: socket-security[bot]
created_at: 2025-05-22T17:26:23Z
body: **All alerts resolved.** Learn more about [Socket for GitHub](https://socket.dev?utm_medium=gh).

This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored.

**Ignoring alerts on:**

- `npm/@metamask/assets-controllers@63.0.0`

[View full report](https://socket.dev/dashboard/org/MetaMask/diff/efedaa17-412d-4b64-b6b4-a2564b3fc6d7/ca32a619-339a-44e8-b1c4-1a48a165dcc4?tab=alerts&action=error%2Cwarn)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-05-22T17:43:14Z
body: ## [<img alt="https://bitrise.io/" src="https://assets-global.website-files.com/5db35de024bb983af1b4e151/5e6f9ccc3e129dfd8a205e4e_Bitrise%20Logo%20-%20Eggplant%20Bg.png" height="20">](https://app.bitrise.io/app/be69d4368ee7e86d/pipelines/ae72d3bc-7e0d-4c7a-b4dc-e76af82fa4c9) **Bitrise**

✅✅✅ `pr_smoke_e2e_pipeline` passed on Bitrise! ✅✅✅

Commit hash: 2f71f5b887be27f6b5949a49fae207d3e662feeb
Build link: https://app.bitrise.io/app/be69d4368ee7e86d/pipelines/ae72d3bc-7e0d-4c7a-b4dc-e76af82fa4c9

>[!NOTE]
>- You can kick off another `pr_smoke_e2e_pipeline` on Bitrise by removing and re-applying the `Run Smoke E2E` label on the pull request

<!-- BITRISE_TAG -->
<!-- BITRISE_SUCCESS_TAG -->

<!-- 2f71f5b887be27f6b5949a49fae207d3e662feeb -->
author_association: CONTRIBUTOR
user: login: Prithpal-Sooriya
created_at: 2025-05-22T18:15:23Z
body: @SocketSecurity ignore npm/@metamask/assets-controllers@63.0.0
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-23T08:58:46Z
body: ## [<img alt="https://bitrise.io/" src="https://assets-global.website-files.com/5db35de024bb983af1b4e151/5e6f9ccc3e129dfd8a205e4e_Bitrise%20Logo%20-%20Eggplant%20Bg.png" height="20">](https://app.bitrise.io/app/be69d4368ee7e86d/pipelines/269a03b9-1480-48cb-a02d-4ca4b8efeb84) **Bitrise**

✅✅✅ `pr_smoke_e2e_pipeline` passed on Bitrise! ✅✅✅

Commit hash: 44f3891a69088a18a3943c5b2ec123db2d16222f
Build link: https://app.bitrise.io/app/be69d4368ee7e86d/pipelines/269a03b9-1480-48cb-a02d-4ca4b8efeb84

>[!NOTE]
>- You can kick off another `pr_smoke_e2e_pipeline` on Bitrise by removing and re-applying the `Run Smoke E2E` label on the pull request

<!-- BITRISE_TAG -->
<!-- BITRISE_SUCCESS_TAG -->

<!-- 44f3891a69088a18a3943c5b2ec123db2d16222f -->
author_association: CONTRIBUTOR
user: login: sonarqubecloud[bot]
created_at: 2025-05-23T09:13:27Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=metamask-mobile&pullRequest=15557) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=metamask-mobile&pullRequest=15557&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=metamask-mobile&pullRequest=15557&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=metamask-mobile&pullRequest=15557&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=metamask-mobile&pullRequest=15557&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=metamask-mobile&pullRequest=15557&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=metamask-mobile&pullRequest=15557)


author_association: NONE