Skip to content

fix(AssetsController): remove ws metadata population - #9790

Open
Prithpal-Sooriya wants to merge 9 commits into
mainfrom
fix/remove-ws-metadata-population
Open

fix(AssetsController): remove ws metadata population#9790
Prithpal-Sooriya wants to merge 9 commits into
mainfrom
fix/remove-ws-metadata-population

Conversation

@Prithpal-Sooriya

@Prithpal-Sooriya Prithpal-Sooriya commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Explanation

WS updates contain metadata. The intention was we can use this metadata to save on API calls.
However this metadata population is poisoning our system:

  • metadata does not match the TokenAPI source of truth - so names and symbols of tokens change as you swap them
  • WS metadata populated does not contain occurrences or security information (or filtering). So this ends up skipping our detection heuristics (we assume this metadata is good).

This PR removes metadata addition from WS, so all added tokens will go through our TokenAPI as source of truth and detection heuristics.

References

Mobile Integration: MetaMask/metamask-mobile#34366
Ticket: https://consensyssoftware.atlassian.net/browse/ASSETS-3844

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

Medium Risk
Touches real-time balance ingestion and how metadata reaches state; behavior change is intentional for security but may briefly delay metadata until Token API enrichment runs.

Overview
Account activity websocket updates now emit balances onlyAccountActivityDataSource no longer merges assetsInfo from the WS payload or calls an injected getAssetType from AssetsController.

That closes a metadata poisoning path: the payload’s unit (on-chain symbol/name) could mark scam airdrops as “known” in state.assetsInfo and skip TokenDataSource occurrence/spam checks. Decimals from the WS payload are still used only to convert raw amounts to human-readable balances.

Token names, symbols, and detection metadata are left for TokenDataSource / Token API in the same pipeline pass. Tests were updated accordingly (including asserting assetsInfo stays undefined when the payload carries attacker-controlled unit values).

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

this population is poisoning (invalid metadata) and skips our detection pathways
@Prithpal-Sooriya

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

…ng `assetsInfo` publication during balance updates; metadata is now sourced from the Token API. Bump dependencies for `transaction-controller`, `core-backend`, and `config-registry-controller`.
@Prithpal-Sooriya
Prithpal-Sooriya force-pushed the fix/remove-ws-metadata-population branch from 1e3d521 to fa03cc8 Compare August 5, 2026 09:33
@github-actions

github-actions Bot commented Aug 5, 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.6.0-preview-1e3d5211d
@metamask-previews/accounts-controller@39.0.6-preview-1e3d5211d
@metamask-previews/address-book-controller@7.1.2-preview-1e3d5211d
@metamask-previews/ai-controllers@0.8.0-preview-1e3d5211d
@metamask-previews/analytics-controller@2.0.0-preview-1e3d5211d
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-1e3d5211d
@metamask-previews/announcement-controller@8.1.0-preview-1e3d5211d
@metamask-previews/app-metadata-controller@2.0.1-preview-1e3d5211d
@metamask-previews/approval-controller@9.0.2-preview-1e3d5211d
@metamask-previews/assets-controller@13.1.0-preview-1e3d5211d
@metamask-previews/assets-controllers@110.1.1-preview-1e3d5211d
@metamask-previews/authenticated-user-storage@3.0.1-preview-1e3d5211d
@metamask-previews/base-controller@9.1.0-preview-1e3d5211d
@metamask-previews/base-data-service@0.1.3-preview-1e3d5211d
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-1e3d5211d
@metamask-previews/bridge-controller@79.0.0-preview-1e3d5211d
@metamask-previews/bridge-status-controller@75.0.0-preview-1e3d5211d
@metamask-previews/build-utils@3.0.4-preview-1e3d5211d
@metamask-previews/chain-agnostic-permission@1.7.0-preview-1e3d5211d
@metamask-previews/chomp-api-service@4.0.0-preview-1e3d5211d
@metamask-previews/claims-controller@0.5.4-preview-1e3d5211d
@metamask-previews/client-controller@1.0.1-preview-1e3d5211d
@metamask-previews/client-utils@2.0.0-preview-1e3d5211d
@metamask-previews/compliance-controller@2.1.0-preview-1e3d5211d
@metamask-previews/composable-controller@12.0.1-preview-1e3d5211d
@metamask-previews/config-registry-controller@2.0.1-preview-1e3d5211d
@metamask-previews/connectivity-controller@0.3.0-preview-1e3d5211d
@metamask-previews/controller-utils@12.3.0-preview-1e3d5211d
@metamask-previews/core-backend@8.1.1-preview-1e3d5211d
@metamask-previews/delegation-controller@3.0.2-preview-1e3d5211d
@metamask-previews/earn-controller@12.2.3-preview-1e3d5211d
@metamask-previews/eip-5792-middleware@3.0.5-preview-1e3d5211d
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-1e3d5211d
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-1e3d5211d
@metamask-previews/ens-controller@19.1.6-preview-1e3d5211d
@metamask-previews/eth-block-tracker@15.0.1-preview-1e3d5211d
@metamask-previews/eth-json-rpc-middleware@24.0.0-preview-1e3d5211d
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-1e3d5211d
@metamask-previews/foundryup@1.0.1-preview-1e3d5211d
@metamask-previews/gas-fee-controller@26.3.1-preview-1e3d5211d
@metamask-previews/gator-permissions-controller@5.0.1-preview-1e3d5211d
@metamask-previews/geolocation-controller@1.0.0-preview-1e3d5211d
@metamask-previews/java-tron-up@1.0.0-preview-1e3d5211d
@metamask-previews/json-rpc-engine@10.5.0-preview-1e3d5211d
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-1e3d5211d
@metamask-previews/keyring-controller@27.1.0-preview-1e3d5211d
@metamask-previews/local-node-utils@1.0.0-preview-1e3d5211d
@metamask-previews/logging-controller@8.0.2-preview-1e3d5211d
@metamask-previews/message-manager@14.1.2-preview-1e3d5211d
@metamask-previews/messenger@2.0.0-preview-1e3d5211d
@metamask-previews/messenger-cli@0.2.0-preview-1e3d5211d
@metamask-previews/money-account-api-data-service@0.4.0-preview-1e3d5211d
@metamask-previews/money-account-balance-service@2.4.1-preview-1e3d5211d
@metamask-previews/money-account-controller@0.3.3-preview-1e3d5211d
@metamask-previews/money-account-upgrade-controller@3.0.1-preview-1e3d5211d
@metamask-previews/money-account-utils@1.1.0-preview-1e3d5211d
@metamask-previews/multichain-account-service@13.0.0-preview-1e3d5211d
@metamask-previews/multichain-api-middleware@4.0.2-preview-1e3d5211d
@metamask-previews/multichain-network-controller@3.2.2-preview-1e3d5211d
@metamask-previews/multichain-transactions-controller@7.1.1-preview-1e3d5211d
@metamask-previews/name-controller@9.1.2-preview-1e3d5211d
@metamask-previews/network-connection-banner-controller@0.1.2-preview-1e3d5211d
@metamask-previews/network-controller@35.0.1-preview-1e3d5211d
@metamask-previews/network-enablement-controller@6.0.2-preview-1e3d5211d
@metamask-previews/notification-services-controller@26.0.1-preview-1e3d5211d
@metamask-previews/passkey-controller@3.0.0-preview-1e3d5211d
@metamask-previews/permission-controller@13.1.1-preview-1e3d5211d
@metamask-previews/permission-log-controller@5.1.0-preview-1e3d5211d
@metamask-previews/perps-controller@10.0.0-preview-1e3d5211d
@metamask-previews/phishing-controller@17.3.1-preview-1e3d5211d
@metamask-previews/platform-api-docs@0.0.0-preview-1e3d5211d
@metamask-previews/polling-controller@16.0.9-preview-1e3d5211d
@metamask-previews/preferences-controller@23.1.0-preview-1e3d5211d
@metamask-previews/profile-metrics-controller@4.0.3-preview-1e3d5211d
@metamask-previews/profile-sync-controller@29.0.0-preview-1e3d5211d
@metamask-previews/ramps-controller@20.0.0-preview-1e3d5211d
@metamask-previews/rate-limit-controller@7.0.1-preview-1e3d5211d
@metamask-previews/react-data-query@0.2.2-preview-1e3d5211d
@metamask-previews/remote-feature-flag-controller@5.0.0-preview-1e3d5211d
@metamask-previews/sample-controllers@5.0.4-preview-1e3d5211d
@metamask-previews/seedless-onboarding-controller@10.1.1-preview-1e3d5211d
@metamask-previews/selected-network-controller@26.1.6-preview-1e3d5211d
@metamask-previews/sentinel-api-service@1.0.0-preview-1e3d5211d
@metamask-previews/shield-controller@5.1.3-preview-1e3d5211d
@metamask-previews/signature-controller@39.2.9-preview-1e3d5211d
@metamask-previews/smart-transactions-controller@25.1.0-preview-1e3d5211d
@metamask-previews/snap-account-service@2.1.1-preview-1e3d5211d
@metamask-previews/social-controllers@2.7.1-preview-1e3d5211d
@metamask-previews/solana-test-validator-up@1.0.0-preview-1e3d5211d
@metamask-previews/stellar-quickstart-up@0.0.0-preview-1e3d5211d
@metamask-previews/storage-service@1.0.2-preview-1e3d5211d
@metamask-previews/subscription-controller@6.2.2-preview-1e3d5211d
@metamask-previews/transaction-controller@69.5.0-preview-1e3d5211d
@metamask-previews/transaction-pay-controller@26.2.2-preview-1e3d5211d
@metamask-previews/user-operation-controller@41.2.8-preview-1e3d5211d
@metamask-previews/wallet@9.0.0-preview-1e3d5211d
@metamask-previews/wallet-cli@0.0.0-preview-1e3d5211d

…ng by stopping `assetsInfo` publication during balance updates. Metadata is now sourced from the Token API to enhance token detection and prevent spam filtering. Bump dependencies for `@metamask/keyring-controller` and `@metamask/network-enablement-controller`.
…sk/core into fix/remove-ws-metadata-population
@Prithpal-Sooriya

Copy link
Copy Markdown
Contributor Author

@cursor /babysit

@cursor

cursor Bot commented Aug 7, 2026

Copy link
Copy Markdown

Babysit complete — CI is green again.

What failed

The Validate changelog job failed because packages/assets-controller/CHANGELOG.md had two ### Fixed sections under [Unreleased] (one from a main merge, one from this PR). @metamask/auto-changelog expects a single section per category.

The All jobs pass job failed as a downstream effect of that changelog failure.

What I fixed

Merged both entries into one ### Fixed section:

### Fixed

- Preserve pooled-staking balances across Accounts API chain-slice updates ...
- Stop publishing `assetsInfo` from websocket balance updates ...

Verification

  • yarn workspace @metamask/assets-controller run changelog:validate — passes locally
  • yarn workspace @metamask/assets-controller run test — passes locally
  • CI run 31200965672all jobs pass, including Validate changelog (24.x, @metamask/assets-controller) and All jobs pass

Pushed commit: f931f96a03fix(assets-controller): merge duplicate Fixed sections in changelog

PR #9790 is mergeable with no open review comments. Preview builds were already published for @metamask-previews/assets-controller@13.1.0-preview-1e3d5211d.

Open in Web Open in Cursor 

Co-authored-by: Prithpal Sooriya <prithpal.sooriya@gmail.com>
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