Skip to content

feat: assets-controllers extract and export getAssetId#9386

Open
maxime-oe wants to merge 1 commit into
mainfrom
feat/assets-controllers-extract-getassetid
Open

feat: assets-controllers extract and export getAssetId#9386
maxime-oe wants to merge 1 commit into
mainfrom
feat/assets-controllers-extract-getassetid

Conversation

@maxime-oe

@maxime-oe maxime-oe commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Explanation

Extract getAssetId from the fetchTokenPrices so it can be reused later not only for v3 Spot Prices but also V3 historical prices (example client PR soon).

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Low Risk
Mostly a refactor plus a new public export; the Rootstock native-address map removal is a small behavior tweak for how native tokens are detected by address.

Overview
Extracts CAIP-19 asset ID resolution from CodefiTokenPricesServiceV2.fetchTokenPrices into a shared getAssetId helper and re-exports it from token-prices-service and the package index, so spot and upcoming historical Price API callers can use the same logic.

getAssetId picks SPOT_PRICES_SUPPORT_INFO for native tokens when present, otherwise nativeAssetIdentifiers, and builds eip155:…/erc20:… for ERC-20s. fetchTokenPrices now calls this helper instead of inlined mapping.

Also removes Rootstock (0x1e) from chainIdToNativeTokenAddress, so Rootstock native is treated like the zero address for native-vs-ERC-20 checks (Rootstock pricing still uses the slip44 entry in SPOT_PRICES_SUPPORT_INFO).

Reviewed by Cursor Bugbot for commit 734dfcf. Bugbot is set up for automated code reviews on this repo. Configure here.

@maxime-oe maxime-oe marked this pull request as ready for review July 3, 2026 14:39
@maxime-oe maxime-oe requested a review from a team as a code owner July 3, 2026 14:39
@maxime-oe maxime-oe temporarily deployed to default-branch July 3, 2026 14:40 — with GitHub Actions Inactive
@maxime-oe

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 99313eb. Configure here.

*/
const chainIdToNativeTokenAddress: Record<Hex, Hex> = {
'0x89': '0x0000000000000000000000000000000000001010', // Polygon
'0x1e': '0x542fda317318ebf1d3deaf76e0b632741a7e677d', // Rootstock Mainnet - Native symbol: RBTC

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rootstock native address mapping removed

Medium Severity

The Rootstock (0x1e) entry was removed from chainIdToNativeTokenAddress, so getNativeTokenAddress now returns the zero address instead of RBTC’s contract address. Native detection in getAssetId and market-data keys in TokenRatesController no longer match wallets that still use the RBTC address, which can misclassify native RBTC as ERC-20 or drop prices.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 99313eb. Configure here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0x542fda317318ebf1d3deaf76e0b632741a7e677d has never been the native.

@maxime-oe maxime-oe force-pushed the feat/assets-controllers-extract-getassetid branch from 99313eb to 734dfcf Compare July 3, 2026 14:44
@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.3-preview-99313eb
@metamask-previews/accounts-controller@39.0.4-preview-99313eb
@metamask-previews/address-book-controller@7.1.2-preview-99313eb
@metamask-previews/ai-controllers@0.7.0-preview-99313eb
@metamask-previews/analytics-controller@1.2.1-preview-99313eb
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-99313eb
@metamask-previews/announcement-controller@8.1.0-preview-99313eb
@metamask-previews/app-metadata-controller@2.0.1-preview-99313eb
@metamask-previews/approval-controller@9.0.2-preview-99313eb
@metamask-previews/assets-controller@10.0.1-preview-99313eb
@metamask-previews/assets-controllers@109.3.0-preview-99313eb
@metamask-previews/authenticated-user-storage@3.0.0-preview-99313eb
@metamask-previews/base-controller@9.1.0-preview-99313eb
@metamask-previews/base-data-service@0.1.3-preview-99313eb
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-99313eb
@metamask-previews/bridge-controller@77.3.2-preview-99313eb
@metamask-previews/bridge-status-controller@74.0.2-preview-99313eb
@metamask-previews/build-utils@3.0.4-preview-99313eb
@metamask-previews/chain-agnostic-permission@1.6.2-preview-99313eb
@metamask-previews/chomp-api-service@3.1.0-preview-99313eb
@metamask-previews/claims-controller@0.5.3-preview-99313eb
@metamask-previews/client-controller@1.0.1-preview-99313eb
@metamask-previews/client-utils@0.0.0-preview-99313eb
@metamask-previews/compliance-controller@2.1.0-preview-99313eb
@metamask-previews/composable-controller@12.0.1-preview-99313eb
@metamask-previews/config-registry-controller@0.4.1-preview-99313eb
@metamask-previews/connectivity-controller@0.2.0-preview-99313eb
@metamask-previews/controller-utils@12.3.0-preview-99313eb
@metamask-previews/core-backend@6.5.0-preview-99313eb
@metamask-previews/delegation-controller@3.0.2-preview-99313eb
@metamask-previews/earn-controller@12.2.2-preview-99313eb
@metamask-previews/eip-5792-middleware@3.0.4-preview-99313eb
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-99313eb
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-99313eb
@metamask-previews/ens-controller@19.1.5-preview-99313eb
@metamask-previews/eth-block-tracker@15.0.1-preview-99313eb
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-99313eb
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-99313eb
@metamask-previews/foundryup@1.0.1-preview-99313eb
@metamask-previews/gas-fee-controller@26.2.4-preview-99313eb
@metamask-previews/gator-permissions-controller@4.2.2-preview-99313eb
@metamask-previews/geolocation-controller@0.1.3-preview-99313eb
@metamask-previews/java-tron-up@1.0.0-preview-99313eb
@metamask-previews/json-rpc-engine@10.5.0-preview-99313eb
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-99313eb
@metamask-previews/keyring-controller@27.1.0-preview-99313eb
@metamask-previews/local-node-utils@1.0.0-preview-99313eb
@metamask-previews/logging-controller@8.0.2-preview-99313eb
@metamask-previews/message-manager@14.1.2-preview-99313eb
@metamask-previews/messenger@1.2.0-preview-99313eb
@metamask-previews/messenger-cli@0.2.0-preview-99313eb
@metamask-previews/money-account-balance-service@2.1.2-preview-99313eb
@metamask-previews/money-account-controller@0.3.3-preview-99313eb
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-99313eb
@metamask-previews/multichain-account-service@11.1.0-preview-99313eb
@metamask-previews/multichain-api-middleware@4.0.0-preview-99313eb
@metamask-previews/multichain-network-controller@3.2.1-preview-99313eb
@metamask-previews/multichain-transactions-controller@7.1.1-preview-99313eb
@metamask-previews/name-controller@9.1.2-preview-99313eb
@metamask-previews/network-controller@34.0.0-preview-99313eb
@metamask-previews/network-enablement-controller@5.4.1-preview-99313eb
@metamask-previews/notification-services-controller@24.3.0-preview-99313eb
@metamask-previews/passkey-controller@2.0.1-preview-99313eb
@metamask-previews/permission-controller@13.1.1-preview-99313eb
@metamask-previews/permission-log-controller@5.1.0-preview-99313eb
@metamask-previews/perps-controller@9.2.0-preview-99313eb
@metamask-previews/phishing-controller@17.2.0-preview-99313eb
@metamask-previews/platform-api-docs@0.0.0-preview-99313eb
@metamask-previews/polling-controller@16.0.8-preview-99313eb
@metamask-previews/preferences-controller@23.1.0-preview-99313eb
@metamask-previews/profile-metrics-controller@4.0.1-preview-99313eb
@metamask-previews/profile-sync-controller@28.2.0-preview-99313eb
@metamask-previews/ramps-controller@15.0.0-preview-99313eb
@metamask-previews/rate-limit-controller@7.0.1-preview-99313eb
@metamask-previews/react-data-query@0.2.1-preview-99313eb
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-99313eb
@metamask-previews/sample-controllers@5.0.3-preview-99313eb
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-99313eb
@metamask-previews/selected-network-controller@26.1.5-preview-99313eb
@metamask-previews/shield-controller@5.1.2-preview-99313eb
@metamask-previews/signature-controller@39.2.7-preview-99313eb
@metamask-previews/smart-transactions-controller@24.2.4-preview-99313eb
@metamask-previews/snap-account-service@1.0.0-preview-99313eb
@metamask-previews/social-controllers@2.3.1-preview-99313eb
@metamask-previews/solana-test-validator-up@1.0.0-preview-99313eb
@metamask-previews/stellar-quickstart-up@0.0.0-preview-99313eb
@metamask-previews/storage-service@1.0.2-preview-99313eb
@metamask-previews/subscription-controller@6.2.0-preview-99313eb
@metamask-previews/transaction-controller@68.2.2-preview-99313eb
@metamask-previews/transaction-pay-controller@23.17.4-preview-99313eb
@metamask-previews/user-operation-controller@41.2.6-preview-99313eb
@metamask-previews/wallet@6.0.0-preview-99313eb
@metamask-previews/wallet-cli@0.0.0-preview-99313eb

@maxime-oe

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.3-preview-734dfcf
@metamask-previews/accounts-controller@39.0.4-preview-734dfcf
@metamask-previews/address-book-controller@7.1.2-preview-734dfcf
@metamask-previews/ai-controllers@0.7.0-preview-734dfcf
@metamask-previews/analytics-controller@1.2.1-preview-734dfcf
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-734dfcf
@metamask-previews/announcement-controller@8.1.0-preview-734dfcf
@metamask-previews/app-metadata-controller@2.0.1-preview-734dfcf
@metamask-previews/approval-controller@9.0.2-preview-734dfcf
@metamask-previews/assets-controller@10.0.1-preview-734dfcf
@metamask-previews/assets-controllers@109.3.0-preview-734dfcf
@metamask-previews/authenticated-user-storage@3.0.0-preview-734dfcf
@metamask-previews/base-controller@9.1.0-preview-734dfcf
@metamask-previews/base-data-service@0.1.3-preview-734dfcf
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-734dfcf
@metamask-previews/bridge-controller@77.3.2-preview-734dfcf
@metamask-previews/bridge-status-controller@74.0.2-preview-734dfcf
@metamask-previews/build-utils@3.0.4-preview-734dfcf
@metamask-previews/chain-agnostic-permission@1.6.2-preview-734dfcf
@metamask-previews/chomp-api-service@3.1.0-preview-734dfcf
@metamask-previews/claims-controller@0.5.3-preview-734dfcf
@metamask-previews/client-controller@1.0.1-preview-734dfcf
@metamask-previews/client-utils@0.0.0-preview-734dfcf
@metamask-previews/compliance-controller@2.1.0-preview-734dfcf
@metamask-previews/composable-controller@12.0.1-preview-734dfcf
@metamask-previews/config-registry-controller@0.4.1-preview-734dfcf
@metamask-previews/connectivity-controller@0.2.0-preview-734dfcf
@metamask-previews/controller-utils@12.3.0-preview-734dfcf
@metamask-previews/core-backend@6.5.0-preview-734dfcf
@metamask-previews/delegation-controller@3.0.2-preview-734dfcf
@metamask-previews/earn-controller@12.2.2-preview-734dfcf
@metamask-previews/eip-5792-middleware@3.0.4-preview-734dfcf
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-734dfcf
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-734dfcf
@metamask-previews/ens-controller@19.1.5-preview-734dfcf
@metamask-previews/eth-block-tracker@15.0.1-preview-734dfcf
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-734dfcf
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-734dfcf
@metamask-previews/foundryup@1.0.1-preview-734dfcf
@metamask-previews/gas-fee-controller@26.2.4-preview-734dfcf
@metamask-previews/gator-permissions-controller@4.2.2-preview-734dfcf
@metamask-previews/geolocation-controller@0.1.3-preview-734dfcf
@metamask-previews/java-tron-up@1.0.0-preview-734dfcf
@metamask-previews/json-rpc-engine@10.5.0-preview-734dfcf
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-734dfcf
@metamask-previews/keyring-controller@27.1.0-preview-734dfcf
@metamask-previews/local-node-utils@1.0.0-preview-734dfcf
@metamask-previews/logging-controller@8.0.2-preview-734dfcf
@metamask-previews/message-manager@14.1.2-preview-734dfcf
@metamask-previews/messenger@1.2.0-preview-734dfcf
@metamask-previews/messenger-cli@0.2.0-preview-734dfcf
@metamask-previews/money-account-balance-service@2.1.2-preview-734dfcf
@metamask-previews/money-account-controller@0.3.3-preview-734dfcf
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-734dfcf
@metamask-previews/multichain-account-service@11.1.0-preview-734dfcf
@metamask-previews/multichain-api-middleware@4.0.0-preview-734dfcf
@metamask-previews/multichain-network-controller@3.2.1-preview-734dfcf
@metamask-previews/multichain-transactions-controller@7.1.1-preview-734dfcf
@metamask-previews/name-controller@9.1.2-preview-734dfcf
@metamask-previews/network-controller@34.0.0-preview-734dfcf
@metamask-previews/network-enablement-controller@5.4.1-preview-734dfcf
@metamask-previews/notification-services-controller@24.3.0-preview-734dfcf
@metamask-previews/passkey-controller@2.0.1-preview-734dfcf
@metamask-previews/permission-controller@13.1.1-preview-734dfcf
@metamask-previews/permission-log-controller@5.1.0-preview-734dfcf
@metamask-previews/perps-controller@9.2.0-preview-734dfcf
@metamask-previews/phishing-controller@17.2.0-preview-734dfcf
@metamask-previews/platform-api-docs@0.0.0-preview-734dfcf
@metamask-previews/polling-controller@16.0.8-preview-734dfcf
@metamask-previews/preferences-controller@23.1.0-preview-734dfcf
@metamask-previews/profile-metrics-controller@4.0.1-preview-734dfcf
@metamask-previews/profile-sync-controller@28.2.0-preview-734dfcf
@metamask-previews/ramps-controller@15.0.0-preview-734dfcf
@metamask-previews/rate-limit-controller@7.0.1-preview-734dfcf
@metamask-previews/react-data-query@0.2.1-preview-734dfcf
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-734dfcf
@metamask-previews/sample-controllers@5.0.3-preview-734dfcf
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-734dfcf
@metamask-previews/selected-network-controller@26.1.5-preview-734dfcf
@metamask-previews/shield-controller@5.1.2-preview-734dfcf
@metamask-previews/signature-controller@39.2.7-preview-734dfcf
@metamask-previews/smart-transactions-controller@24.2.4-preview-734dfcf
@metamask-previews/snap-account-service@1.0.0-preview-734dfcf
@metamask-previews/social-controllers@2.3.1-preview-734dfcf
@metamask-previews/solana-test-validator-up@1.0.0-preview-734dfcf
@metamask-previews/stellar-quickstart-up@0.0.0-preview-734dfcf
@metamask-previews/storage-service@1.0.2-preview-734dfcf
@metamask-previews/subscription-controller@6.2.0-preview-734dfcf
@metamask-previews/transaction-controller@68.2.2-preview-734dfcf
@metamask-previews/transaction-pay-controller@23.17.4-preview-734dfcf
@metamask-previews/user-operation-controller@41.2.6-preview-734dfcf
@metamask-previews/wallet@6.0.0-preview-734dfcf
@metamask-previews/wallet-cli@0.0.0-preview-734dfcf

}: {
chainId: Hex;
tokenAddress: string;
nativeAssetIdentifiers: NativeAssetIdentifiersMap;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 tiny nit, I think we can make this an optional obj (so consumers don't need to pass this in.

Suggested change
nativeAssetIdentifiers: NativeAssetIdentifiersMap;
nativeAssetIdentifiers?: NativeAssetIdentifiersMap;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants