Skip to content

Conversation

@salimtb
Copy link
Contributor

@salimtb salimtb commented Jan 14, 2026

Explanation

The Slip44Service was introduced in #7609 to look up SLIP-44 coin types for building native asset identifiers (CAIP-19). However, the initial API had some complexity that wasn't necessary:

  1. The getSlip44ByChainId method had an optional symbol parameter for fallback, but this fallback logic was confusing since EVM networks should use chain ID lookup and non-EVM networks should use symbol lookup - mixing them in one method added unnecessary complexity.

  2. The method could return undefined for unknown EVM chains, but since EVM networks are all Ethereum-compatible, defaulting to 60 (Ethereum's SLIP-44 coin type) is a reasonable and safe default.

  3. The getSlip44Entry method and Slip44Entry type export weren't being used anywhere.

This PR cleans up the service by:

  • Renaming getSlip44ByChainIdgetEvmSlip44 to make it explicit that it's for EVM networks only
  • Removing the optional symbol fallback parameter (use getSlip44BySymbol directly for non-EVM networks)
  • Always returning 60 (Ethereum) as the default for unknown EVM chain IDs instead of undefined
  • Removing the unused getSlip44Entry method and Slip44Entry type export
  • Updating the NetworkEnablementController to no longer pass the native currency symbol to the lookup function

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

Streamlines SLIP-44 resolution and aligns controller usage.

  • Rename getSlip44ByChainIdgetEvmSlip44 (EVM-only) and always default to coin type 60 when unmapped
  • Remove symbol fallback from EVM lookup; use getSlip44BySymbol only for non-EVM networks
  • Delete unused getSlip44Entry and its type/export; update services/index.ts and package index.ts exports
  • Update NetworkEnablementController to call Slip44Service.getEvmSlip44, stop passing native currency to add-network handler, and parse references correctly
  • Adjust tests to mock/use getEvmSlip44, update expectations (e.g., eip155:2slip44:60), and remove unused entry tests
  • Add changelog entry under "Fixed" for Slip44Service cleanup

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

@salimtb salimtb force-pushed the fix/clean-up-slip-44-logic branch from d039284 to e368883 Compare January 14, 2026 14:37
@salimtb salimtb changed the title Fix/clean up slip 44 logic fix: clean up slip 44 service logic Jan 14, 2026

return undefined;
// Default to 60 (Ethereum) for EVM networks without specific mapping
return 60;
Copy link
Contributor

Choose a reason for hiding this comment

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

💀

Is undefined not better here? If not, at least the behaviour is very clear here.

Copy link
Contributor

Choose a reason for hiding this comment

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

Forget what I said, I see now that it defaulted to 60 anyway in the consumer.

Copy link
Contributor Author

@salimtb salimtb Jan 14, 2026

Choose a reason for hiding this comment

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

I don’t think undefined is better here, because it pushes the ambiguity to runtime.

Defaulting to slip44:60 makes the behavior explicit and deterministic for EVM chains, which matches how wallets already derive and sign accounts. An undefined value would still require downstream logic to infer or guess the coin type, and that inference would almost certainly end up being 60 anyway.

@salimtb
Copy link
Contributor Author

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

@salimtb salimtb marked this pull request as ready for review January 14, 2026 15:07
@salimtb salimtb requested review from a team as code owners January 14, 2026 15:07
@salimtb salimtb added this pull request to the merge queue Jan 14, 2026
Merged via the queue into main with commit 5014a1b Jan 14, 2026
290 checks passed
@salimtb salimtb deleted the fix/clean-up-slip-44-logic branch January 14, 2026 15:10
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.

3 participants