From ab85575b5822e5a925c90a060f897dce260557b0 Mon Sep 17 00:00:00 2001 From: juanmigdr Date: Wed, 11 Mar 2026 15:20:07 +0100 Subject: [PATCH 1/3] chore: remove hardcoded NFT chain allowlist from NftDetectionController --- .../src/NftDetectionController.ts | 43 ++++++++----------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/packages/assets-controllers/src/NftDetectionController.ts b/packages/assets-controllers/src/NftDetectionController.ts index 24a4ae70b44..528d2f35546 100644 --- a/packages/assets-controllers/src/NftDetectionController.ts +++ b/packages/assets-controllers/src/NftDetectionController.ts @@ -63,20 +63,6 @@ export type NftDetectionControllerMessenger = Messenger< AllowedEvents >; -/** - * Set of supported networks for NFT detection. - */ -const supportedNftDetectionNetworks: Set = new Set([ - '0x1', // Mainnet - '0x38', // BSC - '0x89', // Polygon - '0xa86a', // Avalanche - '0xe708', // Linea Mainnet - '0x2105', // Base - '0x531', // Sei - '0x8f', // Monad -]); - /** * @type ApiNft * @@ -188,7 +174,7 @@ export type ApiNftCreator = { export type ReservoirResponse = { tokens: TokensResponse[]; - continuation?: string; + continuation?: string | null; }; export type TokensResponse = { @@ -540,8 +526,21 @@ export class NftDetectionController extends BaseController< const convertedChainIds = chainIds.map((chainId) => convertHexToDecimal(chainId).toString(), ); + + const filteredChainIds = convertedChainIds.filter( + (chainId) => chainId !== '0', + ); + + // Avoid making the API call for non-EVM chains + if (filteredChainIds.length === 0) { + return { + tokens: [], + continuation: null, + }; + } + const url = this.#getOwnerNftApi({ - chainIds: convertedChainIds, + chainIds: filteredChainIds, address, next: cursor, }); @@ -575,12 +574,8 @@ export class NftDetectionController extends BaseController< options?.userAddress ?? this.messenger.call('AccountsController:getSelectedAccount').address; - // filter out unsupported chainIds - const supportedChainIds = chainIds.filter((chainId) => - supportedNftDetectionNetworks.has(chainId), - ); /* istanbul ignore if */ - if (supportedChainIds.length === 0 || this.#disabled) { + if (chainIds.length === 0 || this.#disabled) { return; } /* istanbul ignore else */ @@ -611,11 +606,7 @@ export class NftDetectionController extends BaseController< let resultNftApi: ReservoirResponse; try { do { - resultNftApi = await this.#getOwnerNfts( - userAddress, - supportedChainIds, - next, - ); + resultNftApi = await this.#getOwnerNfts(userAddress, chainIds, next); apiNfts = resultNftApi.tokens.filter( (elm) => elm.token.isSpam === false && From 6123bcf67e48d5cdfc34d52491880ad1d5bc47d7 Mon Sep 17 00:00:00 2001 From: juanmigdr Date: Wed, 11 Mar 2026 15:25:00 +0100 Subject: [PATCH 2/3] chore: updated changelog --- packages/assets-controllers/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/assets-controllers/CHANGELOG.md b/packages/assets-controllers/CHANGELOG.md index b6f95e270ad..91b328ee0cb 100644 --- a/packages/assets-controllers/CHANGELOG.md +++ b/packages/assets-controllers/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Remove hardcoded `supportedNftDetectionNetworks` chain allowlist from `NftDetectionController`; the NFT API now returns an empty array for unsupported chains instead of an error, so chain gating is no longer needed in the client ([#8176](https://github.com/MetaMask/core/pull/8176)) +- `NftDetectionController` now skips the NFT API call entirely when all provided chain IDs are non-EVM (decimal `0`), returning an empty result immediately ([#8176](https://github.com/MetaMask/core/pull/8176)) +- Update `ReservoirResponse.continuation` type from `string` to `string | null` to match the NFT API response shape ([#8176](https://github.com/MetaMask/core/pull/8176)) + ## [100.2.1] ### Changed From 1be56af359a1e86b396f92779620ef6cab91d481 Mon Sep 17 00:00:00 2001 From: juanmigdr Date: Wed, 11 Mar 2026 15:28:50 +0100 Subject: [PATCH 3/3] chore: minor --- packages/assets-controllers/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/assets-controllers/CHANGELOG.md b/packages/assets-controllers/CHANGELOG.md index 56724e23de6..a8bb65ef754 100644 --- a/packages/assets-controllers/CHANGELOG.md +++ b/packages/assets-controllers/CHANGELOG.md @@ -46,7 +46,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Add missing Tron staking lifecycle asset symbols to `TRON_RESOURCE` filter ([#8174](https://github.com/MetaMask/core/pull/8174)) - > > > > > > > main ## [100.2.1]