@metamask-previews/assets-controller 16.1.2-preview-03a246be1 → 16.1.2-preview-ff2ab0583
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/AssetsController.d.ts.map +1 -1
- package/dist/AssetsController.js +5 -1
- package/dist/AssetsController.js.map +1 -1
- package/dist/data-sources/PriceDataSource.d.ts.map +1 -1
- package/dist/data-sources/PriceDataSource.js.map +1 -1
- package/dist/data-sources/RpcDataSource.d.ts.map +1 -1
- package/dist/data-sources/RpcDataSource.js +2 -2
- package/dist/data-sources/RpcDataSource.js.map +1 -1
- package/dist/data-sources/SnapDataSource.d.ts.map +1 -1
- package/dist/data-sources/SnapDataSource.js +2 -1
- package/dist/data-sources/SnapDataSource.js.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.js.map +1 -1
- package/dist/defaults.js.map +1 -1
- package/dist/middlewares/DetectionMiddleware.d.ts.map +1 -1
- package/dist/middlewares/DetectionMiddleware.js.map +1 -1
- package/dist/migrations/healAssetsInfoMetadata.js +1 -1
- package/dist/migrations/healAssetsInfoMetadata.js.map +1 -1
- package/dist/pipeline/executeAssetsPipeline.js +2 -2
- package/dist/pipeline/executeAssetsPipeline.js.map +1 -1
- package/dist/selectors/balance.d.ts.map +1 -1
- package/dist/selectors/balance.js +2 -2
- package/dist/selectors/balance.js.map +1 -1
- package/dist/utils/native-assets.js.map +1 -1
- package/dist/utils/normalizeAssetId.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-assets.js","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"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","sourcesContent":["import { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId, FungibleAssetBalance } from '../types.js';\nimport { normalizeAssetId } from './normalizeAssetId.js';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Seed native CAIP-19 asset IDs, keyed by CAIP-2 chain ID.\n *\n * Covers Price API v3/spot-prices EVM natives plus the Bitcoin, Solana,\n * Stellar and Tron natives this controller ingests. chainid.network only\n * fills extra `eip155` gaps, so without the non-EVM rows an account holding\n * nothing on those networks gets an empty list instead of BTC/SOL/XLM/TRX\n * at 0.\n *\n * Price API v3/spot-prices chains only for EVM — verify support before adding:\n * https://github.com/consensys-vertical-apps/va-mmcx-price-api/blob/main/src/constants/slip44.ts\n * Include chain name + native symbol. Keep sorted by chain ID.\n */\nexport const NATIVE_ASSETS: Readonly<Record<ChainId, Caip19AssetId>> = {\n 'eip155:1': 'eip155:1/slip44:60', // Ethereum Mainnet - Native symbol: ETH\n 'eip155:10': 'eip155:10/slip44:60', // OP Mainnet - Native symbol: ETH\n 'eip155:25': 'eip155:25/slip44:394', // Cronos Mainnet - Native symbol: CRO\n 'eip155:30': 'eip155:30/slip44:137', // Rootstock Mainnet - Native symbol: RBTC\n 'eip155:42': 'eip155:42/erc20:0x0000000000000000000000000000000000000000', // Lukso - native symbol: LYX\n 'eip155:50': 'eip155:50/erc20:0x0000000000000000000000000000000000000000', // xdc-network - native symbol: XDC\n 'eip155:56': 'eip155:56/slip44:714', // BNB Smart Chain Mainnet - Native symbol: BNB\n 'eip155:57': 'eip155:57/slip44:57', // Syscoin Mainnet - Native symbol: SYS\n 'eip155:82': 'eip155:82/slip44:18000', // Meter Mainnet - Native symbol: MTR\n 'eip155:88': 'eip155:88/slip44:889', // TomoChain - Native symbol: TOMO\n 'eip155:100': 'eip155:100/erc20:0x0000000000000000000000000000000000000000', // Gnosis (formerly xDAI Chain) - Native symbol: xDAI\n 'eip155:106': 'eip155:106/slip44:5655640', // Velas EVM Mainnet - Native symbol: VLX\n 'eip155:122': 'eip155:122/erc20:0x0000000000000000000000000000000000000000', // Fuse Mainnet - Native symbol: FUSE\n 'eip155:128': 'eip155:128/slip44:1010', // Huobi ECO Chain Mainnet - Native symbol: HT\n 'eip155:137': 'eip155:137/slip44:966', // Polygon Mainnet - Native symbol: POL\n 'eip155:143': 'eip155:143/slip44:268435779', // Monad Mainnet - Native symbol: MON\n 'eip155:146': 'eip155:146/slip44:10007', // Sonic Mainnet - Native symbol: S\n 'eip155:196': 'eip155:196/erc20:0x0000000000000000000000000000000000000000', // X Layer Mainnet - Native symbol: OKB\n 'eip155:232': 'eip155:232/erc20:0x0000000000000000000000000000000000000000', // Lens Mainnet - Native symbol: GHO\n 'eip155:250': 'eip155:250/slip44:1007', // Fantom Opera - Native symbol: FTM\n 'eip155:252': 'eip155:252/erc20:0x0000000000000000000000000000000000000000', // Fraxtal - native symbol: FRAX\n 'eip155:288': 'eip155:288/slip44:60', // Boba Network (Ethereum L2) - Native symbol: ETH\n 'eip155:321': 'eip155:321/slip44:641', // KCC Mainnet - Native symbol: KCS\n 'eip155:324': 'eip155:324/slip44:60', // zkSync Era Mainnet (Ethereum L2) - Native symbol: ETH\n 'eip155:336': 'eip155:336/slip44:809', // Shiden - Native symbol: SDN\n 'eip155:361': 'eip155:361/slip44:589', // Theta Mainnet - Native symbol: TFUEL\n 'eip155:747': 'eip155:747/slip44:539', // Flow evm - Native symbol: Flow\n 'eip155:988': 'eip155:988/erc20:0x0000000000000000000000000000000000000000', // Stable - Native symbol: USDT0\n 'eip155:999': 'eip155:999/slip44:2457', // HyperEVM - Native symbol: HYPE\n 'eip155:1088': 'eip155:1088/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Metis Andromeda Mainnet (Ethereum L2) - Native symbol: METIS\n 'eip155:1101': 'eip155:1101/slip44:60', // Polygon zkEVM mainnet - Native symbol: ETH\n 'eip155:1284': 'eip155:1284/slip44:1284', // Moonbeam - Native symbol: GLMR\n 'eip155:1285': 'eip155:1285/slip44:1285', // Moonriver - Native symbol: MOVR\n 'eip155:1329': 'eip155:1329/slip44:19000118', // Sei Mainnet - Native symbol: SEI\n 'eip155:1776': 'eip155:1776/slip44:22000119', // Injective Mainnet - Native symbol: INJ\n 'eip155:1868': 'eip155:1868/erc20:0x0000000000000000000000000000000000000000', // Soneium - Native symbol: ETH\n 'eip155:2525': 'eip155:2525/erc20:0x0000000000000000000000000000000000000000', // inEVM Mainnet - Native symbol: INV\n 'eip155:2741': 'eip155:2741/erc20:0x0000000000000000000000000000000000000000', // Abstract - Native symbol: ETH\n 'eip155:4217': 'eip155:4217/slip44:60', // Tempo Mainnet - No native asset\n 'eip155:4326': 'eip155:4326/erc20:0x0000000000000000000000000000000000000000', // MegaETH Mainnet - Native symbol: ETH\n 'eip155:5000': 'eip155:5000/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Mantle - Native symbol: MNT\n 'eip155:5031': 'eip155:5031/slip44:5031', // Somnia Mainnet - Native symbol: SOMI\n 'eip155:5042': 'eip155:5042/slip44:5042', // Arc - Native symbol: USDC\n 'eip155:7000': 'eip155:7000/slip44:7000', // ZetaChain - Native symbol: ZETA\n 'eip155:8453': 'eip155:8453/slip44:60', // Base - Native symbol: ETH\n 'eip155:4663': 'eip155:4663/slip44:60', // Robinhood Chain - Native symbol: ETH\n 'eip155:9745': 'eip155:9745/erc20:0x0000000000000000000000000000000000000000', // Plasma mainnet - native symbol: XPL\n 'eip155:10000': 'eip155:10000/slip44:145', // Smart Bitcoin Cash - Native symbol: BCH\n 'eip155:33139':\n 'eip155:33139/erc20:0x0000000000000000000000000000000000000000', // Apechain Mainnet - Native symbol: APE\n 'eip155:41923':\n 'eip155:41923/erc20:0x0000000000000000000000000000000000000000', // EDU Chain - Native symbol: EDU\n 'eip155:42161': 'eip155:42161/slip44:60', // Arbitrum One - Native symbol: ETH\n 'eip155:42220': 'eip155:42220/slip44:52752', // Celo Mainnet - Native symbol: CELO\n 'eip155:42262': 'eip155:42262/slip44:474', // Oasis Emerald - Native symbol: ROSE\n 'eip155:42431': 'eip155:42431/slip44:60', // Tempo Testnet Moderato - No native asset\n 'eip155:42793':\n 'eip155:42793/erc20:0x0000000000000000000000000000000000000000', // Etherlink - Native symbol: XTZ (Tezos L2)\n 'eip155:43111':\n 'eip155:43111/erc20:0x0000000000000000000000000000000000000000', // Hemi - Native symbol: ETH\n 'eip155:43114': 'eip155:43114/slip44:9005', // Avalanche C-Chain - Native symbol: AVAX\n 'eip155:57073': 'eip155:57073/slip44:60', // Ink Mainnet - Native symbol: ETH\n 'eip155:59144': 'eip155:59144/slip44:60', // Linea Mainnet - Native symbol: ETH\n 'eip155:60808':\n 'eip155:60808/erc20:0x0000000000000000000000000000000000000000', // BOB - Native symbol: ETH\n 'eip155:68414':\n 'eip155:68414/erc20:0x0000000000000000000000000000000000000000', // MapleStory Universe - no slip44\n 'eip155:73115':\n 'eip155:73115/erc20:0x0000000000000000000000000000000000000000', // ICB Network - Native symbol: ICBX\n 'eip155:80094':\n 'eip155:80094/erc20:0x0000000000000000000000000000000000000000', // Berachain - Native symbol: Bera\n 'eip155:81457': 'eip155:81457/slip44:60', // Blast Mainnet - Native symbol: ETH\n 'eip155:88888':\n 'eip155:88888/erc20:0x0000000000000000000000000000000000000000', // Chiliz Chain - Native symbol: CHZ\n 'eip155:97741':\n 'eip155:97741/erc20:0x0000000000000000000000000000000000000000', // Pepe Unchained Mainnet - Native symbol: PEPU\n 'eip155:98866':\n 'eip155:98866/erc20:0x0000000000000000000000000000000000000000', // Plume Mainnet - Native symbol: Plume\n 'eip155:167000': 'eip155:167000/slip44:60', // Taiko Mainnet - Native symbol: ETH\n 'eip155:333999': 'eip155:333999/slip44:1997', // Polis Mainnet - Native symbol: POLIS\n 'eip155:534352': 'eip155:534352/slip44:60', // Scroll Mainnet - Native symbol: ETH\n 'eip155:747474':\n 'eip155:747474/erc20:0x0000000000000000000000000000000000000000', // katana - Native symbol: ETH\n 'eip155:984122':\n 'eip155:984122/erc20:0x0000000000000000000000000000000000000000', // Forma - Native symbol: TIA (Celestia)\n 'eip155:1440000':\n 'eip155:1440000/erc20:0x0000000000000000000000000000000000000000', // xrpl-evm - native symbol: XRP\n 'eip155:1313161554': 'eip155:1313161554/slip44:60', // Aurora Mainnet (Ethereum L2 on NEAR) - Native symbol: ETH\n 'eip155:1666600000': 'eip155:1666600000/slip44:1023', // Harmony Mainnet Shard 0 - Native symbol: ONE\n 'eip155:16661': 'eip155:16661/slip44:1111116661', // 0G Chain - Native symbol: 0G\n 'bip122:000000000019d6689c085ae165831e93':\n 'bip122:000000000019d6689c085ae165831e93/slip44:0', // Bitcoin Mainnet - Native symbol: BTC\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp':\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501', // Solana Mainnet - Native symbol: SOL\n 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z':\n 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z/slip44:501', // Solana Testnet - Native symbol: SOL\n 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1':\n 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/slip44:501', // Solana Devnet - Native symbol: SOL\n 'stellar:pubnet': 'stellar:pubnet/slip44:148', // Stellar Pubnet - Native symbol: XLM\n 'stellar:testnet': 'stellar:testnet/slip44:148', // Stellar Testnet - Native symbol: XLM\n 'tron:728126428': 'tron:728126428/slip44:195', // Tron Mainnet - Native symbol: TRX\n 'tron:3448148188': 'tron:3448148188/slip44:195', // Tron Nile - Native symbol: TRX\n 'tron:2494104990': 'tron:2494104990/slip44:195', // Tron Shasta - Native symbol: TRX\n};\n\n/**\n * Balance-row metadata the Accounts API attaches to Stellar native XLM.\n * Seeded at zero so an unfunded account still has a well-formed native row\n * instead of a bare `{ amount: '0' }`.\n */\nexport const STELLAR_NATIVE_ZERO_BALANCE_METADATA = {\n minimumReserveBalance: '0',\n spendableBalance: '0',\n} as const;\n\nconst ZERO_NATIVE_BALANCE: FungibleAssetBalance = { amount: '0' };\n\n/**\n * Default native balance to insert when a data source (typically Accounts API)\n * returns no row for the chain's native asset.\n *\n * Stellar natives include `spendableBalance` / `minimumReserveBalance` at 0 so\n * consumers that read those fields on XLM do not have to special-case a missing\n * metadata object. Other natives are a plain zero amount.\n *\n * @param nativeAssetId - The CAIP-19 native asset ID being seeded.\n * @returns A zero-balance entry for that native.\n */\nexport function getDefaultNativeAssetBalance(\n nativeAssetId: Caip19AssetId,\n): FungibleAssetBalance {\n try {\n const { chain } = parseCaipAssetType(nativeAssetId);\n if (chain.namespace === 'stellar') {\n return {\n amount: '0',\n metadata: { ...STELLAR_NATIVE_ZERO_BALANCE_METADATA },\n };\n }\n } catch {\n // Malformed IDs fall through to a plain zero amount.\n }\n\n return { ...ZERO_NATIVE_BALANCE };\n}\n\n/**\n * Builds a native asset map from {@link NATIVE_ASSETS}, normalizing each\n * CAIP-19 ID (ERC-20 addresses become EIP-55 checksummed).\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const [chainId, nativeAssetId] of Object.entries(NATIVE_ASSETS)) {\n nativeAssetsMap[chainId as ChainId] = normalizeAssetId(nativeAssetId);\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}` as Caip19AssetId;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"native-assets.js","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"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","sourcesContent":["import { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId, FungibleAssetBalance } from '../types.js';\nimport { normalizeAssetId } from './normalizeAssetId.js';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Seed native CAIP-19 asset IDs, keyed by CAIP-2 chain ID.\n *\n * Covers Price API v3/spot-prices EVM natives plus the Bitcoin, Solana,\n * Stellar and Tron natives this controller ingests. chainid.network only\n * fills extra `eip155` gaps, so without the non-EVM rows an account holding\n * nothing on those networks gets an empty list instead of BTC/SOL/XLM/TRX\n * at 0.\n *\n * Price API v3/spot-prices chains only for EVM — verify support before adding:\n * https://github.com/consensys-vertical-apps/va-mmcx-price-api/blob/main/src/constants/slip44.ts\n * Include chain name + native symbol. Keep sorted by chain ID.\n */\nexport const NATIVE_ASSETS: Readonly<Record<ChainId, Caip19AssetId>> = {\n 'eip155:1': 'eip155:1/slip44:60', // Ethereum Mainnet - Native symbol: ETH\n 'eip155:10': 'eip155:10/slip44:60', // OP Mainnet - Native symbol: ETH\n 'eip155:25': 'eip155:25/slip44:394', // Cronos Mainnet - Native symbol: CRO\n 'eip155:30': 'eip155:30/slip44:137', // Rootstock Mainnet - Native symbol: RBTC\n 'eip155:42': 'eip155:42/erc20:0x0000000000000000000000000000000000000000', // Lukso - native symbol: LYX\n 'eip155:50': 'eip155:50/erc20:0x0000000000000000000000000000000000000000', // xdc-network - native symbol: XDC\n 'eip155:56': 'eip155:56/slip44:714', // BNB Smart Chain Mainnet - Native symbol: BNB\n 'eip155:57': 'eip155:57/slip44:57', // Syscoin Mainnet - Native symbol: SYS\n 'eip155:82': 'eip155:82/slip44:18000', // Meter Mainnet - Native symbol: MTR\n 'eip155:88': 'eip155:88/slip44:889', // TomoChain - Native symbol: TOMO\n 'eip155:100': 'eip155:100/erc20:0x0000000000000000000000000000000000000000', // Gnosis (formerly xDAI Chain) - Native symbol: xDAI\n 'eip155:106': 'eip155:106/slip44:5655640', // Velas EVM Mainnet - Native symbol: VLX\n 'eip155:122': 'eip155:122/erc20:0x0000000000000000000000000000000000000000', // Fuse Mainnet - Native symbol: FUSE\n 'eip155:128': 'eip155:128/slip44:1010', // Huobi ECO Chain Mainnet - Native symbol: HT\n 'eip155:137': 'eip155:137/slip44:966', // Polygon Mainnet - Native symbol: POL\n 'eip155:143': 'eip155:143/slip44:268435779', // Monad Mainnet - Native symbol: MON\n 'eip155:146': 'eip155:146/slip44:10007', // Sonic Mainnet - Native symbol: S\n 'eip155:196': 'eip155:196/erc20:0x0000000000000000000000000000000000000000', // X Layer Mainnet - Native symbol: OKB\n 'eip155:232': 'eip155:232/erc20:0x0000000000000000000000000000000000000000', // Lens Mainnet - Native symbol: GHO\n 'eip155:250': 'eip155:250/slip44:1007', // Fantom Opera - Native symbol: FTM\n 'eip155:252': 'eip155:252/erc20:0x0000000000000000000000000000000000000000', // Fraxtal - native symbol: FRAX\n 'eip155:288': 'eip155:288/slip44:60', // Boba Network (Ethereum L2) - Native symbol: ETH\n 'eip155:321': 'eip155:321/slip44:641', // KCC Mainnet - Native symbol: KCS\n 'eip155:324': 'eip155:324/slip44:60', // zkSync Era Mainnet (Ethereum L2) - Native symbol: ETH\n 'eip155:336': 'eip155:336/slip44:809', // Shiden - Native symbol: SDN\n 'eip155:361': 'eip155:361/slip44:589', // Theta Mainnet - Native symbol: TFUEL\n 'eip155:747': 'eip155:747/slip44:539', // Flow evm - Native symbol: Flow\n 'eip155:988': 'eip155:988/erc20:0x0000000000000000000000000000000000000000', // Stable - Native symbol: USDT0\n 'eip155:999': 'eip155:999/slip44:2457', // HyperEVM - Native symbol: HYPE\n 'eip155:1088': 'eip155:1088/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Metis Andromeda Mainnet (Ethereum L2) - Native symbol: METIS\n 'eip155:1101': 'eip155:1101/slip44:60', // Polygon zkEVM mainnet - Native symbol: ETH\n 'eip155:1284': 'eip155:1284/slip44:1284', // Moonbeam - Native symbol: GLMR\n 'eip155:1285': 'eip155:1285/slip44:1285', // Moonriver - Native symbol: MOVR\n 'eip155:1329': 'eip155:1329/slip44:19000118', // Sei Mainnet - Native symbol: SEI\n 'eip155:1776': 'eip155:1776/slip44:22000119', // Injective Mainnet - Native symbol: INJ\n 'eip155:1868': 'eip155:1868/erc20:0x0000000000000000000000000000000000000000', // Soneium - Native symbol: ETH\n 'eip155:2525': 'eip155:2525/erc20:0x0000000000000000000000000000000000000000', // inEVM Mainnet - Native symbol: INV\n 'eip155:2741': 'eip155:2741/erc20:0x0000000000000000000000000000000000000000', // Abstract - Native symbol: ETH\n 'eip155:4217': 'eip155:4217/slip44:60', // Tempo Mainnet - No native asset\n 'eip155:4326': 'eip155:4326/erc20:0x0000000000000000000000000000000000000000', // MegaETH Mainnet - Native symbol: ETH\n 'eip155:5000': 'eip155:5000/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // Mantle - Native symbol: MNT\n 'eip155:5031': 'eip155:5031/slip44:5031', // Somnia Mainnet - Native symbol: SOMI\n 'eip155:5042': 'eip155:5042/slip44:5042', // Arc - Native symbol: USDC\n 'eip155:7000': 'eip155:7000/slip44:7000', // ZetaChain - Native symbol: ZETA\n 'eip155:8453': 'eip155:8453/slip44:60', // Base - Native symbol: ETH\n 'eip155:4663': 'eip155:4663/slip44:60', // Robinhood Chain - Native symbol: ETH\n 'eip155:9745': 'eip155:9745/erc20:0x0000000000000000000000000000000000000000', // Plasma mainnet - native symbol: XPL\n 'eip155:10000': 'eip155:10000/slip44:145', // Smart Bitcoin Cash - Native symbol: BCH\n 'eip155:33139':\n 'eip155:33139/erc20:0x0000000000000000000000000000000000000000', // Apechain Mainnet - Native symbol: APE\n 'eip155:41923':\n 'eip155:41923/erc20:0x0000000000000000000000000000000000000000', // EDU Chain - Native symbol: EDU\n 'eip155:42161': 'eip155:42161/slip44:60', // Arbitrum One - Native symbol: ETH\n 'eip155:42220': 'eip155:42220/slip44:52752', // Celo Mainnet - Native symbol: CELO\n 'eip155:42262': 'eip155:42262/slip44:474', // Oasis Emerald - Native symbol: ROSE\n 'eip155:42431': 'eip155:42431/slip44:60', // Tempo Testnet Moderato - No native asset\n 'eip155:42793':\n 'eip155:42793/erc20:0x0000000000000000000000000000000000000000', // Etherlink - Native symbol: XTZ (Tezos L2)\n 'eip155:43111':\n 'eip155:43111/erc20:0x0000000000000000000000000000000000000000', // Hemi - Native symbol: ETH\n 'eip155:43114': 'eip155:43114/slip44:9005', // Avalanche C-Chain - Native symbol: AVAX\n 'eip155:57073': 'eip155:57073/slip44:60', // Ink Mainnet - Native symbol: ETH\n 'eip155:59144': 'eip155:59144/slip44:60', // Linea Mainnet - Native symbol: ETH\n 'eip155:60808':\n 'eip155:60808/erc20:0x0000000000000000000000000000000000000000', // BOB - Native symbol: ETH\n 'eip155:68414':\n 'eip155:68414/erc20:0x0000000000000000000000000000000000000000', // MapleStory Universe - no slip44\n 'eip155:73115':\n 'eip155:73115/erc20:0x0000000000000000000000000000000000000000', // ICB Network - Native symbol: ICBX\n 'eip155:80094':\n 'eip155:80094/erc20:0x0000000000000000000000000000000000000000', // Berachain - Native symbol: Bera\n 'eip155:81457': 'eip155:81457/slip44:60', // Blast Mainnet - Native symbol: ETH\n 'eip155:88888':\n 'eip155:88888/erc20:0x0000000000000000000000000000000000000000', // Chiliz Chain - Native symbol: CHZ\n 'eip155:97741':\n 'eip155:97741/erc20:0x0000000000000000000000000000000000000000', // Pepe Unchained Mainnet - Native symbol: PEPU\n 'eip155:98866':\n 'eip155:98866/erc20:0x0000000000000000000000000000000000000000', // Plume Mainnet - Native symbol: Plume\n 'eip155:167000': 'eip155:167000/slip44:60', // Taiko Mainnet - Native symbol: ETH\n 'eip155:333999': 'eip155:333999/slip44:1997', // Polis Mainnet - Native symbol: POLIS\n 'eip155:534352': 'eip155:534352/slip44:60', // Scroll Mainnet - Native symbol: ETH\n 'eip155:747474':\n 'eip155:747474/erc20:0x0000000000000000000000000000000000000000', // katana - Native symbol: ETH\n 'eip155:984122':\n 'eip155:984122/erc20:0x0000000000000000000000000000000000000000', // Forma - Native symbol: TIA (Celestia)\n 'eip155:1440000':\n 'eip155:1440000/erc20:0x0000000000000000000000000000000000000000', // xrpl-evm - native symbol: XRP\n 'eip155:1313161554': 'eip155:1313161554/slip44:60', // Aurora Mainnet (Ethereum L2 on NEAR) - Native symbol: ETH\n 'eip155:1666600000': 'eip155:1666600000/slip44:1023', // Harmony Mainnet Shard 0 - Native symbol: ONE\n 'eip155:16661': 'eip155:16661/slip44:1111116661', // 0G Chain - Native symbol: 0G\n 'bip122:000000000019d6689c085ae165831e93':\n 'bip122:000000000019d6689c085ae165831e93/slip44:0', // Bitcoin Mainnet - Native symbol: BTC\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp':\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501', // Solana Mainnet - Native symbol: SOL\n 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z':\n 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z/slip44:501', // Solana Testnet - Native symbol: SOL\n 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1':\n 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/slip44:501', // Solana Devnet - Native symbol: SOL\n 'stellar:pubnet': 'stellar:pubnet/slip44:148', // Stellar Pubnet - Native symbol: XLM\n 'stellar:testnet': 'stellar:testnet/slip44:148', // Stellar Testnet - Native symbol: XLM\n 'tron:728126428': 'tron:728126428/slip44:195', // Tron Mainnet - Native symbol: TRX\n 'tron:3448148188': 'tron:3448148188/slip44:195', // Tron Nile - Native symbol: TRX\n 'tron:2494104990': 'tron:2494104990/slip44:195', // Tron Shasta - Native symbol: TRX\n};\n\n/**\n * Balance-row metadata the Accounts API attaches to Stellar native XLM.\n * Seeded at zero so an unfunded account still has a well-formed native row\n * instead of a bare `{ amount: '0' }`.\n */\nexport const STELLAR_NATIVE_ZERO_BALANCE_METADATA = {\n minimumReserveBalance: '0',\n spendableBalance: '0',\n} as const;\n\nconst ZERO_NATIVE_BALANCE: FungibleAssetBalance = { amount: '0' };\n\n/**\n * Default native balance to insert when a data source (typically Accounts API)\n * returns no row for the chain's native asset.\n *\n * Stellar natives include `spendableBalance` / `minimumReserveBalance` at 0 so\n * consumers that read those fields on XLM do not have to special-case a missing\n * metadata object. Other natives are a plain zero amount.\n *\n * @param nativeAssetId - The CAIP-19 native asset ID being seeded.\n * @returns A zero-balance entry for that native.\n */\nexport function getDefaultNativeAssetBalance(\n nativeAssetId: Caip19AssetId,\n): FungibleAssetBalance {\n try {\n const { chain } = parseCaipAssetType(nativeAssetId);\n if (chain.namespace === 'stellar') {\n return {\n amount: '0',\n metadata: { ...STELLAR_NATIVE_ZERO_BALANCE_METADATA },\n };\n }\n } catch {\n // Malformed IDs fall through to a plain zero amount.\n }\n\n return { ...ZERO_NATIVE_BALANCE };\n}\n\n/**\n * Builds a native asset map from {@link NATIVE_ASSETS}, normalizing each\n * CAIP-19 ID (ERC-20 addresses become EIP-55 checksummed).\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const [chainId, nativeAssetId] of Object.entries(NATIVE_ASSETS)) {\n nativeAssetsMap[chainId as ChainId] = normalizeAssetId(nativeAssetId);\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}`;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeAssetId.js","sourceRoot":"","sources":["../../src/utils/normalizeAssetId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,gBAAgB,GACR,OAAO,CAAC,CAAC,OAAsB,EAAiB,EAAE;IACrE,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,
|
|
1
|
+
{"version":3,"file":"normalizeAssetId.js","sourceRoot":"","sources":["../../src/utils/normalizeAssetId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,gBAAgB,GACR,OAAO,CAAC,CAAC,OAAsB,EAAiB,EAAE;IACrE,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAE,CAAC;IAC5E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsB;IACzD,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oCAAoC;IAClD,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AACnC,CAAC","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\nimport { memoize } from 'lodash-es';\n\nimport type { Caip19AssetId } from '../types.js';\n\n// Not exported by `lodash-es`.\ntype MemoizedFunction = Omit<ReturnType<typeof memoize>, never>;\n\n/**\n * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.\n * This ensures consistent asset IDs regardless of the data source format.\n *\n * For EVM ERC20 tokens (e.g., \"eip155:1/erc20:0x...\"), the address is checksummed.\n * All other asset types are returned unchanged.\n *\n * Results are memoized with lodash: repeated calls with the same ID (common after\n * the first pipeline pass, when IDs are already checksummed) skip re-parsing and\n * keccak256 checksum work.\n *\n * @param assetId - The CAIP-19 asset ID to normalize\n * @returns The normalized asset ID with checksummed address (for EVM tokens)\n */\nexport const normalizeAssetId: ((assetId: Caip19AssetId) => Caip19AssetId) &\n MemoizedFunction = memoize((assetId: Caip19AssetId): Caip19AssetId => {\n const parsed = parseCaipAssetType(assetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n // Only checksum EVM ERC20 addresses\n if (\n chainIdParsed.namespace === 'eip155' &&\n parsed.assetNamespace === 'erc20'\n ) {\n const checksummedAddress = toChecksumAddress(parsed.assetReference);\n return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}`;\n }\n\n return assetId;\n});\n\n/**\n * Normalize a CAIP-19 asset ID, returning the original on failure. Some\n * malformed IDs (e.g. an asset reference that fails address checksumming)\n * make {@link normalizeAssetId} throw; callers processing untrusted input\n * use this so one bad ID cannot abort a whole batch.\n *\n * @param assetId - The CAIP-19 asset ID to normalize.\n * @returns The normalized ID, or the original on failure.\n */\nexport function safeNormalizeAssetId(assetId: Caip19AssetId): Caip19AssetId {\n try {\n return normalizeAssetId(assetId);\n } catch {\n return assetId;\n }\n}\n\n/**\n * Clears the {@link normalizeAssetId} memoize cache. Exported for unit tests.\n */\nexport function clearNormalizeAssetIdCacheForTesting(): void {\n normalizeAssetId.cache.clear?.();\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/assets-controller",
|
|
3
|
-
"version": "16.1.2-preview-
|
|
3
|
+
"version": "16.1.2-preview-ff2ab0583",
|
|
4
4
|
"description": "Tracks assets balances/prices and handles token detection across all digital assets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"@metamask/remote-feature-flag-controller": "^7.0.0",
|
|
76
76
|
"@metamask/snaps-controllers": "^19.0.0",
|
|
77
77
|
"@metamask/snaps-utils": "^12.1.2",
|
|
78
|
-
"@metamask/transaction-controller": "^72.0.
|
|
78
|
+
"@metamask/transaction-controller": "^72.0.1",
|
|
79
79
|
"@metamask/utils": "^12.0.0",
|
|
80
80
|
"async-mutex": "^0.5.0",
|
|
81
81
|
"bignumber.js": "^9.1.2",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"@types/jest": "^30.0.0",
|
|
88
88
|
"@types/lodash-es": "^4.17.12",
|
|
89
89
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
90
|
-
"deepmerge": "^4.
|
|
90
|
+
"deepmerge": "^4.3.1",
|
|
91
91
|
"jest": "^30.4.2",
|
|
92
92
|
"nock": "^13.5.6",
|
|
93
93
|
"rimraf": "^6.1.3",
|