Skip to content

Conversation

@salimtb
Copy link
Contributor

@salimtb salimtb commented Jan 13, 2026

Explanation

Current State

The NetworkEnablementController tracks which networks are enabled/disabled but lacks information about the native asset identifier for each chain. This information is needed to properly identify native assets across different blockchain networks using a standardized format.

Extension UI PR: MetaMask/metamask-extension#39234

Solution

This PR adds a new state property nativeAssetIdentifiers to the NetworkEnablementController that maps CAIP-2 chain IDs to CAIP-19-like native asset identifiers.

For example:

  • eip155:1eip155:1/slip44:60 (Ethereum uses ETH, SLIP-44 coin type 60)
  • eip155:56eip155:56/slip44:714 (BSC uses BNB, SLIP-44 coin type 714)
  • solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpsolana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501

Implementation Details

  1. New Slip44Service: A service that wraps the @metamask/slip44 package to look up SLIP-44 coin types by symbol (e.g., ETH60, BTC0).

  2. State Updates: The nativeAssetIdentifiers state is automatically updated when:

    • A network is added (NetworkController:networkAdded)
    • A network is removed (NetworkController:networkRemoved)
    • A network's native currency symbol is changed (NetworkController:stateChange)
  3. Default State: Popular networks are pre-populated with their correct native asset identifiers based on their native currency symbols.

  4. Graceful Handling: If a symbol has no SLIP-44 mapping, the entry is removed from the state rather than storing an invalid identifier.

Dependency Addition

Added @metamask/slip44 package to dynamically look up SLIP-44 coin types instead of hardcoding them, ensuring accuracy and maintainability.

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

Introduces standardized native asset IDs and automated maintenance in NetworkEnablementController.

  • Adds nativeAssetIdentifiers state mapping CAIP-2 chain IDs to CAIP-19-like identifiers (e.g., eip155:1/slip44:60) and includes it in metadata (persist/debug/ui)
  • New Slip44Service (using @metamask/slip44) to resolve SLIP-44 coin types by symbol; exported via package index
  • Controller changes: subscribe to NetworkController:stateChange to update identifiers when nativeCurrency changes; update on networkAdded/networkRemoved; remove mapping when symbol is unknown
  • Adds initNativeAssetIdentifiers(networks) helper and populates identifiers during init() for EVM configs
  • Updates tests to cover add/remove, state changes, initialization, and service behavior; adds @metamask/slip44 dependency and CHANGELOG entry

Written by Cursor Bugbot for commit 057a1a5. This will update automatically on new commits. Configure here.

@salimtb salimtb changed the title Feat/add slip44 identfiers for added chains feat: add slip44 identfiers for added chains Jan 13, 2026
@salimtb
Copy link
Contributor Author

salimtb commented Jan 13, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.0.0-preview-e6f8648b",
  "@metamask-previews/accounts-controller": "35.0.0-preview-e6f8648b",
  "@metamask-previews/address-book-controller": "7.0.1-preview-e6f8648b",
  "@metamask-previews/analytics-controller": "1.0.0-preview-e6f8648b",
  "@metamask-previews/announcement-controller": "8.0.0-preview-e6f8648b",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-e6f8648b",
  "@metamask-previews/approval-controller": "8.0.0-preview-e6f8648b",
  "@metamask-previews/assets-controller": "0.0.0-preview-e6f8648b",
  "@metamask-previews/assets-controllers": "95.1.0-preview-e6f8648b",
  "@metamask-previews/base-controller": "9.0.0-preview-e6f8648b",
  "@metamask-previews/bridge-controller": "64.4.0-preview-e6f8648b",
  "@metamask-previews/bridge-status-controller": "64.4.1-preview-e6f8648b",
  "@metamask-previews/build-utils": "3.0.4-preview-e6f8648b",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-e6f8648b",
  "@metamask-previews/claims-controller": "0.4.1-preview-e6f8648b",
  "@metamask-previews/composable-controller": "12.0.0-preview-e6f8648b",
  "@metamask-previews/controller-utils": "11.18.0-preview-e6f8648b",
  "@metamask-previews/core-backend": "5.0.0-preview-e6f8648b",
  "@metamask-previews/delegation-controller": "2.0.0-preview-e6f8648b",
  "@metamask-previews/earn-controller": "11.0.0-preview-e6f8648b",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-e6f8648b",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-e6f8648b",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-e6f8648b",
  "@metamask-previews/ens-controller": "19.0.0-preview-e6f8648b",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-e6f8648b",
  "@metamask-previews/eth-block-tracker": "15.0.0-preview-e6f8648b",
  "@metamask-previews/eth-json-rpc-middleware": "22.0.1-preview-e6f8648b",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-e6f8648b",
  "@metamask-previews/foundryup": "1.0.1-preview-e6f8648b",
  "@metamask-previews/gas-fee-controller": "26.0.0-preview-e6f8648b",
  "@metamask-previews/gator-permissions-controller": "0.8.0-preview-e6f8648b",
  "@metamask-previews/json-rpc-engine": "10.2.0-preview-e6f8648b",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-e6f8648b",
  "@metamask-previews/keyring-controller": "25.0.0-preview-e6f8648b",
  "@metamask-previews/logging-controller": "7.0.1-preview-e6f8648b",
  "@metamask-previews/message-manager": "14.1.0-preview-e6f8648b",
  "@metamask-previews/messenger": "0.3.0-preview-e6f8648b",
  "@metamask-previews/multichain-account-service": "5.0.0-preview-e6f8648b",
  "@metamask-previews/multichain-api-middleware": "1.2.5-preview-e6f8648b",
  "@metamask-previews/multichain-network-controller": "3.0.0-preview-e6f8648b",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-e6f8648b",
  "@metamask-previews/name-controller": "9.0.0-preview-e6f8648b",
  "@metamask-previews/network-controller": "27.2.0-preview-e6f8648b",
  "@metamask-previews/network-enablement-controller": "4.0.0-preview-e6f8648b",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-e6f8648b",
  "@metamask-previews/permission-controller": "12.2.0-preview-e6f8648b",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-e6f8648b",
  "@metamask-previews/phishing-controller": "16.1.0-preview-e6f8648b",
  "@metamask-previews/polling-controller": "16.0.0-preview-e6f8648b",
  "@metamask-previews/preferences-controller": "22.0.0-preview-e6f8648b",
  "@metamask-previews/profile-metrics-controller": "2.0.0-preview-e6f8648b",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-e6f8648b",
  "@metamask-previews/ramps-controller": "2.1.0-preview-e6f8648b",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-e6f8648b",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-e6f8648b",
  "@metamask-previews/sample-controllers": "4.0.0-preview-e6f8648b",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-e6f8648b",
  "@metamask-previews/selected-network-controller": "26.0.0-preview-e6f8648b",
  "@metamask-previews/shield-controller": "4.1.0-preview-e6f8648b",
  "@metamask-previews/signature-controller": "38.0.0-preview-e6f8648b",
  "@metamask-previews/storage-service": "0.0.1-preview-e6f8648b",
  "@metamask-previews/subscription-controller": "5.4.0-preview-e6f8648b",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-e6f8648b",
  "@metamask-previews/transaction-controller": "62.9.0-preview-e6f8648b",
  "@metamask-previews/transaction-pay-controller": "11.0.0-preview-e6f8648b",
  "@metamask-previews/user-operation-controller": "41.0.0-preview-e6f8648b"
}

@salimtb
Copy link
Contributor Author

salimtb commented Jan 13, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.0.0-preview-22f11ed5",
  "@metamask-previews/accounts-controller": "35.0.0-preview-22f11ed5",
  "@metamask-previews/address-book-controller": "7.0.1-preview-22f11ed5",
  "@metamask-previews/analytics-controller": "1.0.0-preview-22f11ed5",
  "@metamask-previews/announcement-controller": "8.0.0-preview-22f11ed5",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-22f11ed5",
  "@metamask-previews/approval-controller": "8.0.0-preview-22f11ed5",
  "@metamask-previews/assets-controller": "0.0.0-preview-22f11ed5",
  "@metamask-previews/assets-controllers": "95.1.0-preview-22f11ed5",
  "@metamask-previews/base-controller": "9.0.0-preview-22f11ed5",
  "@metamask-previews/bridge-controller": "64.4.0-preview-22f11ed5",
  "@metamask-previews/bridge-status-controller": "64.4.1-preview-22f11ed5",
  "@metamask-previews/build-utils": "3.0.4-preview-22f11ed5",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-22f11ed5",
  "@metamask-previews/claims-controller": "0.4.1-preview-22f11ed5",
  "@metamask-previews/composable-controller": "12.0.0-preview-22f11ed5",
  "@metamask-previews/controller-utils": "11.18.0-preview-22f11ed5",
  "@metamask-previews/core-backend": "5.0.0-preview-22f11ed5",
  "@metamask-previews/delegation-controller": "2.0.0-preview-22f11ed5",
  "@metamask-previews/earn-controller": "11.0.0-preview-22f11ed5",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-22f11ed5",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-22f11ed5",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-22f11ed5",
  "@metamask-previews/ens-controller": "19.0.0-preview-22f11ed5",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-22f11ed5",
  "@metamask-previews/eth-block-tracker": "15.0.0-preview-22f11ed5",
  "@metamask-previews/eth-json-rpc-middleware": "22.0.1-preview-22f11ed5",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-22f11ed5",
  "@metamask-previews/foundryup": "1.0.1-preview-22f11ed5",
  "@metamask-previews/gas-fee-controller": "26.0.0-preview-22f11ed5",
  "@metamask-previews/gator-permissions-controller": "0.8.0-preview-22f11ed5",
  "@metamask-previews/json-rpc-engine": "10.2.0-preview-22f11ed5",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-22f11ed5",
  "@metamask-previews/keyring-controller": "25.0.0-preview-22f11ed5",
  "@metamask-previews/logging-controller": "7.0.1-preview-22f11ed5",
  "@metamask-previews/message-manager": "14.1.0-preview-22f11ed5",
  "@metamask-previews/messenger": "0.3.0-preview-22f11ed5",
  "@metamask-previews/multichain-account-service": "5.0.0-preview-22f11ed5",
  "@metamask-previews/multichain-api-middleware": "1.2.5-preview-22f11ed5",
  "@metamask-previews/multichain-network-controller": "3.0.0-preview-22f11ed5",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-22f11ed5",
  "@metamask-previews/name-controller": "9.0.0-preview-22f11ed5",
  "@metamask-previews/network-controller": "27.2.0-preview-22f11ed5",
  "@metamask-previews/network-enablement-controller": "4.0.0-preview-22f11ed5",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-22f11ed5",
  "@metamask-previews/permission-controller": "12.2.0-preview-22f11ed5",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-22f11ed5",
  "@metamask-previews/phishing-controller": "16.1.0-preview-22f11ed5",
  "@metamask-previews/polling-controller": "16.0.0-preview-22f11ed5",
  "@metamask-previews/preferences-controller": "22.0.0-preview-22f11ed5",
  "@metamask-previews/profile-metrics-controller": "2.0.0-preview-22f11ed5",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-22f11ed5",
  "@metamask-previews/ramps-controller": "2.1.0-preview-22f11ed5",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-22f11ed5",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-22f11ed5",
  "@metamask-previews/sample-controllers": "4.0.0-preview-22f11ed5",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-22f11ed5",
  "@metamask-previews/selected-network-controller": "26.0.0-preview-22f11ed5",
  "@metamask-previews/shield-controller": "4.1.0-preview-22f11ed5",
  "@metamask-previews/signature-controller": "38.0.0-preview-22f11ed5",
  "@metamask-previews/storage-service": "0.0.1-preview-22f11ed5",
  "@metamask-previews/subscription-controller": "5.4.0-preview-22f11ed5",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-22f11ed5",
  "@metamask-previews/transaction-controller": "62.9.0-preview-22f11ed5",
  "@metamask-previews/transaction-pay-controller": "11.0.0-preview-22f11ed5",
  "@metamask-previews/user-operation-controller": "41.0.0-preview-22f11ed5"
}

@salimtb salimtb force-pushed the feat/add-slip44-identfiers-for-added-chains branch from 589e726 to f075c1f Compare January 13, 2026 22:26
@salimtb
Copy link
Contributor Author

salimtb commented Jan 13, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.0.0-preview-f075c1f",
  "@metamask-previews/accounts-controller": "35.0.1-preview-f075c1f",
  "@metamask-previews/address-book-controller": "7.0.1-preview-f075c1f",
  "@metamask-previews/analytics-controller": "1.0.0-preview-f075c1f",
  "@metamask-previews/announcement-controller": "8.0.0-preview-f075c1f",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-f075c1f",
  "@metamask-previews/approval-controller": "8.0.0-preview-f075c1f",
  "@metamask-previews/assets-controller": "0.0.0-preview-f075c1f",
  "@metamask-previews/assets-controllers": "95.1.0-preview-f075c1f",
  "@metamask-previews/base-controller": "9.0.0-preview-f075c1f",
  "@metamask-previews/bridge-controller": "64.4.1-preview-f075c1f",
  "@metamask-previews/bridge-status-controller": "64.4.2-preview-f075c1f",
  "@metamask-previews/build-utils": "3.0.4-preview-f075c1f",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-f075c1f",
  "@metamask-previews/claims-controller": "0.4.1-preview-f075c1f",
  "@metamask-previews/composable-controller": "12.0.0-preview-f075c1f",
  "@metamask-previews/controller-utils": "11.18.0-preview-f075c1f",
  "@metamask-previews/core-backend": "5.0.0-preview-f075c1f",
  "@metamask-previews/delegation-controller": "2.0.0-preview-f075c1f",
  "@metamask-previews/earn-controller": "11.0.0-preview-f075c1f",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-f075c1f",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-f075c1f",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-f075c1f",
  "@metamask-previews/ens-controller": "19.0.1-preview-f075c1f",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-f075c1f",
  "@metamask-previews/eth-block-tracker": "15.0.0-preview-f075c1f",
  "@metamask-previews/eth-json-rpc-middleware": "22.0.1-preview-f075c1f",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-f075c1f",
  "@metamask-previews/foundryup": "1.0.1-preview-f075c1f",
  "@metamask-previews/gas-fee-controller": "26.0.1-preview-f075c1f",
  "@metamask-previews/gator-permissions-controller": "0.8.0-preview-f075c1f",
  "@metamask-previews/json-rpc-engine": "10.2.0-preview-f075c1f",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-f075c1f",
  "@metamask-previews/keyring-controller": "25.0.0-preview-f075c1f",
  "@metamask-previews/logging-controller": "7.0.1-preview-f075c1f",
  "@metamask-previews/message-manager": "14.1.0-preview-f075c1f",
  "@metamask-previews/messenger": "0.3.0-preview-f075c1f",
  "@metamask-previews/multichain-account-service": "5.0.0-preview-f075c1f",
  "@metamask-previews/multichain-api-middleware": "1.2.5-preview-f075c1f",
  "@metamask-previews/multichain-network-controller": "3.0.1-preview-f075c1f",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-f075c1f",
  "@metamask-previews/name-controller": "9.0.0-preview-f075c1f",
  "@metamask-previews/network-controller": "28.0.0-preview-f075c1f",
  "@metamask-previews/network-enablement-controller": "4.0.0-preview-f075c1f",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-f075c1f",
  "@metamask-previews/permission-controller": "12.2.0-preview-f075c1f",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-f075c1f",
  "@metamask-previews/phishing-controller": "16.1.0-preview-f075c1f",
  "@metamask-previews/polling-controller": "16.0.1-preview-f075c1f",
  "@metamask-previews/preferences-controller": "22.0.0-preview-f075c1f",
  "@metamask-previews/profile-metrics-controller": "2.0.0-preview-f075c1f",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-f075c1f",
  "@metamask-previews/ramps-controller": "3.0.0-preview-f075c1f",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-f075c1f",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-f075c1f",
  "@metamask-previews/sample-controllers": "4.0.1-preview-f075c1f",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-f075c1f",
  "@metamask-previews/selected-network-controller": "26.0.1-preview-f075c1f",
  "@metamask-previews/shield-controller": "4.1.0-preview-f075c1f",
  "@metamask-previews/signature-controller": "38.0.1-preview-f075c1f",
  "@metamask-previews/storage-service": "0.0.1-preview-f075c1f",
  "@metamask-previews/subscription-controller": "5.4.0-preview-f075c1f",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-f075c1f",
  "@metamask-previews/transaction-controller": "62.9.1-preview-f075c1f",
  "@metamask-previews/transaction-pay-controller": "11.0.1-preview-f075c1f",
  "@metamask-previews/user-operation-controller": "41.0.1-preview-f075c1f"
}

@salimtb salimtb marked this pull request as ready for review January 13, 2026 22:44
@salimtb salimtb requested review from a team as code owners January 13, 2026 22:44
@salimtb salimtb enabled auto-merge January 13, 2026 23:04
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