core icon indicating copy to clipboard operation
core copied to clipboard

fix: fix account state

Open sahar-fehri opened this issue 3 months ago • 2 comments

Explanation

On mobile and extension, when AccountAPI is enabled, the token balances state ended up storing native+stake in a different area from erc-20.

Example:

{
  "tokenBalances": {
    // lowercase address contains ERC-20 token balances
    "0xd5018bd3d94e23e71a2575206a1176d5c8637bec": {
      "0x1": {
        "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": "0x5337e0",
        "0xacA92E438df0B2401fF60dA7E4337B687a2435DA": "0x286e37",
        // ...
      },
    },
    // CheckSum address contains Native + Staked balances 💀
    "0xd5018bD3d94e23e71A2575206a1176D5c8637BeC": {
      "0x1": {
        "0x0000000000000000000000000000000000000000": "0x445931076e034",
        "0x4FEF9D741011476750A243aC70b9789a63dd47Df": "0x0"
      },
    }
}

Our aggregated balance calculations rely on the lowercase addresses for the token values, so this was why native and staked balances were missing.

The fix normalises the state data so that we merge both fields into the lowercase addresses.

  • Since this is done inside the controller no state migrations are needed 🤞

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, highlighting breaking changes as necessary
  • [ ] I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

sahar-fehri avatar Nov 20 '25 18:11 sahar-fehri

@metamaskbot publish-preview

salimtb avatar Nov 21 '25 14:11 salimtb

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": "3.0.0-preview-fa19a4d3",
  "@metamask-previews/accounts-controller": "34.0.0-preview-fa19a4d3",
  "@metamask-previews/address-book-controller": "7.0.0-preview-fa19a4d3",
  "@metamask-previews/analytics-controller": "0.0.0-preview-fa19a4d3",
  "@metamask-previews/announcement-controller": "8.0.0-preview-fa19a4d3",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-fa19a4d3",
  "@metamask-previews/approval-controller": "8.0.0-preview-fa19a4d3",
  "@metamask-previews/assets-controllers": "89.0.1-preview-fa19a4d3",
  "@metamask-previews/base-controller": "9.0.0-preview-fa19a4d3",
  "@metamask-previews/bridge-controller": "61.0.0-preview-fa19a4d3",
  "@metamask-previews/bridge-status-controller": "61.0.0-preview-fa19a4d3",
  "@metamask-previews/build-utils": "3.0.4-preview-fa19a4d3",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-fa19a4d3",
  "@metamask-previews/claims-controller": "0.2.0-preview-fa19a4d3",
  "@metamask-previews/composable-controller": "12.0.0-preview-fa19a4d3",
  "@metamask-previews/controller-utils": "11.15.0-preview-fa19a4d3",
  "@metamask-previews/core-backend": "4.1.0-preview-fa19a4d3",
  "@metamask-previews/delegation-controller": "1.0.0-preview-fa19a4d3",
  "@metamask-previews/earn-controller": "10.0.0-preview-fa19a4d3",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-fa19a4d3",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-fa19a4d3",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-fa19a4d3",
  "@metamask-previews/ens-controller": "18.0.0-preview-fa19a4d3",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-fa19a4d3",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-fa19a4d3",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-fa19a4d3",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-fa19a4d3",
  "@metamask-previews/foundryup": "1.0.1-preview-fa19a4d3",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-fa19a4d3",
  "@metamask-previews/gator-permissions-controller": "0.5.0-preview-fa19a4d3",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-fa19a4d3",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-fa19a4d3",
  "@metamask-previews/keyring-controller": "24.0.0-preview-fa19a4d3",
  "@metamask-previews/logging-controller": "7.0.0-preview-fa19a4d3",
  "@metamask-previews/message-manager": "14.0.0-preview-fa19a4d3",
  "@metamask-previews/messenger": "0.3.0-preview-fa19a4d3",
  "@metamask-previews/multichain-account-service": "3.0.0-preview-fa19a4d3",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-fa19a4d3",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-fa19a4d3",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-fa19a4d3",
  "@metamask-previews/name-controller": "9.0.0-preview-fa19a4d3",
  "@metamask-previews/network-controller": "25.0.0-preview-fa19a4d3",
  "@metamask-previews/network-enablement-controller": "3.1.0-preview-fa19a4d3",
  "@metamask-previews/notification-services-controller": "20.0.0-preview-fa19a4d3",
  "@metamask-previews/permission-controller": "12.1.0-preview-fa19a4d3",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-fa19a4d3",
  "@metamask-previews/phishing-controller": "15.0.1-preview-fa19a4d3",
  "@metamask-previews/polling-controller": "15.0.0-preview-fa19a4d3",
  "@metamask-previews/preferences-controller": "21.0.0-preview-fa19a4d3",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-fa19a4d3",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-fa19a4d3",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-fa19a4d3",
  "@metamask-previews/sample-controllers": "3.0.0-preview-fa19a4d3",
  "@metamask-previews/seedless-onboarding-controller": "6.1.0-preview-fa19a4d3",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-fa19a4d3",
  "@metamask-previews/shield-controller": "2.1.1-preview-fa19a4d3",
  "@metamask-previews/signature-controller": "36.0.0-preview-fa19a4d3",
  "@metamask-previews/subscription-controller": "4.2.2-preview-fa19a4d3",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-fa19a4d3",
  "@metamask-previews/transaction-controller": "61.3.0-preview-fa19a4d3",
  "@metamask-previews/transaction-pay-controller": "8.0.0-preview-fa19a4d3",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-fa19a4d3"
}

github-actions[bot] avatar Nov 21 '25 14:11 github-actions[bot]