Skip to content

feat: improve rpc data source#8385

Merged
salimtb merged 10 commits intomainfrom
feat/improve-rpc-data-source
Apr 7, 2026
Merged

feat: improve rpc data source#8385
salimtb merged 10 commits intomainfrom
feat/improve-rpc-data-source

Conversation

@salimtb
Copy link
Copy Markdown
Contributor

@salimtb salimtb commented Apr 7, 2026

Explanation

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

Medium Risk
Changes token detection and RPC metadata behavior by replacing TokenListController:getState with live Tokens API fetches (with caching/fallback), which can affect detected tokens and metadata availability when the API is slow or unavailable.

Overview
Token detection now pulls its token list from the Tokens API instead of TokenListController. TokenDetector takes a new TokensApiClient, fetches /v3/chains/{chain}/assets, caches results per chain, and falls back to stale cache on API errors (logging failures).

RpcDataSource and AssetsController drop TokenListController:getState from allowed actions and remove token-list-based ERC-20 metadata fallbacks; unknown ERC-20s are omitted from assetsInfo until downstream enrichment. Tests/fixtures are updated accordingly, and a new TokensApiClient (plus unit tests) is added and exported.

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

@salimtb salimtb changed the base branch from main to feat/assets-controller-pipeline-batching-optimization April 7, 2026 07:43
@salimtb salimtb changed the title Feat/improve rpc data source feat: improve rpc data source Apr 7, 2026
@salimtb salimtb force-pushed the feat/improve-rpc-data-source branch from 209e095 to c5f25f9 Compare April 7, 2026 07:45
@salimtb
Copy link
Copy Markdown
Contributor Author

salimtb commented Apr 7, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 7, 2026

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.0.0-preview-c5f25f9
@metamask-previews/accounts-controller@37.2.0-preview-c5f25f9
@metamask-previews/address-book-controller@7.1.1-preview-c5f25f9
@metamask-previews/ai-controllers@0.6.3-preview-c5f25f9
@metamask-previews/analytics-controller@1.0.1-preview-c5f25f9
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-c5f25f9
@metamask-previews/announcement-controller@8.1.0-preview-c5f25f9
@metamask-previews/app-metadata-controller@2.0.1-preview-c5f25f9
@metamask-previews/approval-controller@9.0.1-preview-c5f25f9
@metamask-previews/assets-controller@4.0.0-preview-c5f25f9
@metamask-previews/assets-controllers@103.1.1-preview-c5f25f9
@metamask-previews/base-controller@9.0.1-preview-c5f25f9
@metamask-previews/base-data-service@0.1.1-preview-c5f25f9
@metamask-previews/bridge-controller@70.0.1-preview-c5f25f9
@metamask-previews/bridge-status-controller@70.0.5-preview-c5f25f9
@metamask-previews/build-utils@3.0.4-preview-c5f25f9
@metamask-previews/chain-agnostic-permission@1.5.0-preview-c5f25f9
@metamask-previews/claims-controller@0.5.0-preview-c5f25f9
@metamask-previews/client-controller@1.0.1-preview-c5f25f9
@metamask-previews/compliance-controller@2.0.0-preview-c5f25f9
@metamask-previews/composable-controller@12.0.1-preview-c5f25f9
@metamask-previews/config-registry-controller@0.2.0-preview-c5f25f9
@metamask-previews/connectivity-controller@0.2.0-preview-c5f25f9
@metamask-previews/controller-utils@11.20.0-preview-c5f25f9
@metamask-previews/core-backend@6.2.1-preview-c5f25f9
@metamask-previews/delegation-controller@2.1.0-preview-c5f25f9
@metamask-previews/earn-controller@11.2.1-preview-c5f25f9
@metamask-previews/eip-5792-middleware@3.0.3-preview-c5f25f9
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-c5f25f9
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-c5f25f9
@metamask-previews/ens-controller@19.1.1-preview-c5f25f9
@metamask-previews/eth-block-tracker@15.0.1-preview-c5f25f9
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-c5f25f9
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-c5f25f9
@metamask-previews/foundryup@1.0.1-preview-c5f25f9
@metamask-previews/gas-fee-controller@26.1.1-preview-c5f25f9
@metamask-previews/gator-permissions-controller@3.0.1-preview-c5f25f9
@metamask-previews/geolocation-controller@0.1.2-preview-c5f25f9
@metamask-previews/json-rpc-engine@10.2.4-preview-c5f25f9
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-c5f25f9
@metamask-previews/keyring-controller@25.2.0-preview-c5f25f9
@metamask-previews/logging-controller@8.0.1-preview-c5f25f9
@metamask-previews/message-manager@14.1.1-preview-c5f25f9
@metamask-previews/messenger@1.1.1-preview-c5f25f9
@metamask-previews/messenger-cli@0.1.0-preview-c5f25f9
@metamask-previews/money-account-controller@0.1.0-preview-c5f25f9
@metamask-previews/multichain-account-service@8.0.1-preview-c5f25f9
@metamask-previews/multichain-api-middleware@2.0.0-preview-c5f25f9
@metamask-previews/multichain-network-controller@3.0.6-preview-c5f25f9
@metamask-previews/multichain-transactions-controller@7.0.4-preview-c5f25f9
@metamask-previews/name-controller@9.1.1-preview-c5f25f9
@metamask-previews/network-controller@30.0.1-preview-c5f25f9
@metamask-previews/network-enablement-controller@5.0.2-preview-c5f25f9
@metamask-previews/notification-services-controller@23.0.1-preview-c5f25f9
@metamask-previews/permission-controller@12.3.0-preview-c5f25f9
@metamask-previews/permission-log-controller@5.1.0-preview-c5f25f9
@metamask-previews/perps-controller@2.0.0-preview-c5f25f9
@metamask-previews/phishing-controller@17.1.1-preview-c5f25f9
@metamask-previews/polling-controller@16.0.4-preview-c5f25f9
@metamask-previews/preferences-controller@23.1.0-preview-c5f25f9
@metamask-previews/profile-metrics-controller@3.1.3-preview-c5f25f9
@metamask-previews/profile-sync-controller@28.0.2-preview-c5f25f9
@metamask-previews/ramps-controller@13.0.0-preview-c5f25f9
@metamask-previews/rate-limit-controller@7.0.1-preview-c5f25f9
@metamask-previews/react-data-query@0.2.0-preview-c5f25f9
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-c5f25f9
@metamask-previews/sample-controllers@4.0.4-preview-c5f25f9
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-c5f25f9
@metamask-previews/selected-network-controller@26.1.0-preview-c5f25f9
@metamask-previews/shield-controller@5.1.1-preview-c5f25f9
@metamask-previews/signature-controller@39.1.2-preview-c5f25f9
@metamask-previews/social-controllers@0.1.0-preview-c5f25f9
@metamask-previews/storage-service@1.0.1-preview-c5f25f9
@metamask-previews/subscription-controller@6.1.2-preview-c5f25f9
@metamask-previews/transaction-controller@64.0.0-preview-c5f25f9
@metamask-previews/transaction-pay-controller@19.0.3-preview-c5f25f9
@metamask-previews/user-operation-controller@41.2.0-preview-c5f25f9

@salimtb salimtb force-pushed the feat/improve-rpc-data-source branch from e3cddf0 to 212d43f Compare April 7, 2026 08:14
@salimtb
Copy link
Copy Markdown
Contributor Author

salimtb commented Apr 7, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 7, 2026

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.0.0-preview-212d43f
@metamask-previews/accounts-controller@37.2.0-preview-212d43f
@metamask-previews/address-book-controller@7.1.1-preview-212d43f
@metamask-previews/ai-controllers@0.6.3-preview-212d43f
@metamask-previews/analytics-controller@1.0.1-preview-212d43f
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-212d43f
@metamask-previews/announcement-controller@8.1.0-preview-212d43f
@metamask-previews/app-metadata-controller@2.0.1-preview-212d43f
@metamask-previews/approval-controller@9.0.1-preview-212d43f
@metamask-previews/assets-controller@4.0.0-preview-212d43f
@metamask-previews/assets-controllers@103.1.1-preview-212d43f
@metamask-previews/base-controller@9.0.1-preview-212d43f
@metamask-previews/base-data-service@0.1.1-preview-212d43f
@metamask-previews/bridge-controller@70.0.1-preview-212d43f
@metamask-previews/bridge-status-controller@70.0.5-preview-212d43f
@metamask-previews/build-utils@3.0.4-preview-212d43f
@metamask-previews/chain-agnostic-permission@1.5.0-preview-212d43f
@metamask-previews/claims-controller@0.5.0-preview-212d43f
@metamask-previews/client-controller@1.0.1-preview-212d43f
@metamask-previews/compliance-controller@2.0.0-preview-212d43f
@metamask-previews/composable-controller@12.0.1-preview-212d43f
@metamask-previews/config-registry-controller@0.2.0-preview-212d43f
@metamask-previews/connectivity-controller@0.2.0-preview-212d43f
@metamask-previews/controller-utils@11.20.0-preview-212d43f
@metamask-previews/core-backend@6.2.1-preview-212d43f
@metamask-previews/delegation-controller@2.1.0-preview-212d43f
@metamask-previews/earn-controller@11.2.1-preview-212d43f
@metamask-previews/eip-5792-middleware@3.0.3-preview-212d43f
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-212d43f
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-212d43f
@metamask-previews/ens-controller@19.1.1-preview-212d43f
@metamask-previews/eth-block-tracker@15.0.1-preview-212d43f
@metamask-previews/eth-json-rpc-middleware@23.1.1-preview-212d43f
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-212d43f
@metamask-previews/foundryup@1.0.1-preview-212d43f
@metamask-previews/gas-fee-controller@26.1.1-preview-212d43f
@metamask-previews/gator-permissions-controller@3.0.1-preview-212d43f
@metamask-previews/geolocation-controller@0.1.2-preview-212d43f
@metamask-previews/json-rpc-engine@10.2.4-preview-212d43f
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-212d43f
@metamask-previews/keyring-controller@25.2.0-preview-212d43f
@metamask-previews/logging-controller@8.0.1-preview-212d43f
@metamask-previews/message-manager@14.1.1-preview-212d43f
@metamask-previews/messenger@1.1.1-preview-212d43f
@metamask-previews/messenger-cli@0.1.0-preview-212d43f
@metamask-previews/money-account-controller@0.1.0-preview-212d43f
@metamask-previews/multichain-account-service@8.0.1-preview-212d43f
@metamask-previews/multichain-api-middleware@2.0.0-preview-212d43f
@metamask-previews/multichain-network-controller@3.0.6-preview-212d43f
@metamask-previews/multichain-transactions-controller@7.0.4-preview-212d43f
@metamask-previews/name-controller@9.1.1-preview-212d43f
@metamask-previews/network-controller@30.0.1-preview-212d43f
@metamask-previews/network-enablement-controller@5.0.2-preview-212d43f
@metamask-previews/notification-services-controller@23.0.1-preview-212d43f
@metamask-previews/permission-controller@12.3.0-preview-212d43f
@metamask-previews/permission-log-controller@5.1.0-preview-212d43f
@metamask-previews/perps-controller@2.0.0-preview-212d43f
@metamask-previews/phishing-controller@17.1.1-preview-212d43f
@metamask-previews/polling-controller@16.0.4-preview-212d43f
@metamask-previews/preferences-controller@23.1.0-preview-212d43f
@metamask-previews/profile-metrics-controller@3.1.3-preview-212d43f
@metamask-previews/profile-sync-controller@28.0.2-preview-212d43f
@metamask-previews/ramps-controller@13.0.0-preview-212d43f
@metamask-previews/rate-limit-controller@7.0.1-preview-212d43f
@metamask-previews/react-data-query@0.2.0-preview-212d43f
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-212d43f
@metamask-previews/sample-controllers@4.0.4-preview-212d43f
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-212d43f
@metamask-previews/selected-network-controller@26.1.0-preview-212d43f
@metamask-previews/shield-controller@5.1.1-preview-212d43f
@metamask-previews/signature-controller@39.1.2-preview-212d43f
@metamask-previews/social-controllers@0.1.0-preview-212d43f
@metamask-previews/storage-service@1.0.1-preview-212d43f
@metamask-previews/subscription-controller@6.1.2-preview-212d43f
@metamask-previews/transaction-controller@64.0.0-preview-212d43f
@metamask-previews/transaction-pay-controller@19.0.3-preview-212d43f
@metamask-previews/user-operation-controller@41.2.0-preview-212d43f

Base automatically changed from feat/assets-controller-pipeline-batching-optimization to main April 7, 2026 10:27
salimtb added 4 commits April 7, 2026 13:10
…ient for token detection

- TokenDetector now fetches token lists directly from the Tokens API
  (/v3/chains/{chain}/assets) via TokensApiClient instead of reading
  from TokenListController:getState
- Remove TokenDetectorMessenger type; constructor now takes TokensApiClient
  as second argument
- RpcDataSource creates a TokensApiClient instance and passes it to
  TokenDetector; removes the tokenDetectorMessenger adapter
- Remove #getTokenMetadataFromTokenList from RpcDataSource — unknown
  ERC-20 metadata is omitted until TokenDataSource enriches it downstream
- Remove GetTokenListState from RpcDataSourceAllowedActions and
  AssetsControllerAllowedActions; TokenListController:getState is no
  longer called anywhere in RpcDataSource
- Update all tests to mock TokensApiClient instead of messenger state
@salimtb salimtb force-pushed the feat/improve-rpc-data-source branch from 212d43f to 2de4fb1 Compare April 7, 2026 11:11
@salimtb salimtb marked this pull request as ready for review April 7, 2026 11:50
@salimtb salimtb requested review from a team as code owners April 7, 2026 11:50
@salimtb salimtb requested a review from a team as a code owner April 7, 2026 12:45
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 06272c1. Configure here.

const TOKENS_API_BASE_URL = 'https://tokens.api.cx.metamask.io/v3/chains';

/** How many tokens to request from the API per chain. */
const TOKENS_API_FIRST = 25;
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

we now auto-detect only the top 25 assets when using the RPC fetcher, which significantly reduces latency in the RPC token detection process.

TokenDetectionOptions,
TokenDetectionResult,
TokenListEntry,
TokenListState,
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

TokenList has been replaced by 1 single time fecth to token api top assets

@salimtb salimtb removed the request for review from a team April 7, 2026 13:38
@salimtb salimtb added this pull request to the merge queue Apr 7, 2026
Merged via the queue into main with commit 0d05589 Apr 7, 2026
341 checks passed
@salimtb salimtb deleted the feat/improve-rpc-data-source branch April 7, 2026 14: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