Skip to content

Conversation

@salimtb
Copy link
Contributor

@salimtb salimtb commented Jan 15, 2026

Explanation

The selectAssetsBySelectedAccountGroup selector was returning undefined for the fiat field on native tokens for certain chains (like Ink chain 0xdef1) even though the currency conversion rate was available.

Problem:
The getFiatBalanceForEvmToken function requires marketData[chainId][tokenAddress] to exist in order to calculate fiat values. For native tokens, this market data entry should contain price: 1 (since 1 ETH = 1 ETH). However, some chains don't have this native token entry in marketData, causing the function to return undefined even when currencyRates has the conversion rate for the native currency symbol (e.g., ETH).

Solution:
Added a fallback mechanism specifically for native tokens: when marketData doesn't have an entry for the native token but currencyRates has the conversion rate for the native currency symbol, the function now uses price = 1 and multiplies directly by the currency rate. This ensures native token fiat values are calculated correctly for chains like Ink (0xdef1) that use ETH as their native currency but don't have explicit market data entries.

UI extension: MetaMask/metamask-extension#39269

References

  • Fixes native token fiat calculation for Ink chain and similar L2s that share the same native currency as mainnet but lack market data entries

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

Ensures native token fiat is calculated even when market data is absent by leveraging the native currency conversion rate.

  • Update getFiatBalanceForEvmToken to accept nativeCurrencySymbol and, when no market data exists for a native token, compute fiat using currencyRates (price=1 in native units); return undefined if rate also missing
  • Pass native currency from selectAssetsBySelectedAccountGroup into getFiatBalanceForEvmToken
  • Add unit tests covering fallback calculation and missing-rate behavior
  • Update CHANGELOG.md under Unreleased -> Fixed

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

@salimtb salimtb changed the title fix: use currency rate fallback for native token fiat when market dat… fix: use currency rate fallback for native token fiat when market data missing Jan 15, 2026
@salimtb
Copy link
Contributor Author

salimtb commented Jan 15, 2026

@metamaskbot publish-preview

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

@salimtb salimtb added this pull request to the merge queue Jan 15, 2026
Merged via the queue into main with commit fc6641a Jan 15, 2026
290 checks passed
@salimtb salimtb deleted the fix/native-token-fiat-fallback branch January 15, 2026 10:33
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