Skip to content

feat(assets-controller)!: fetch multicall address from config registry - #9717

Open
mikesposito wants to merge 2 commits into
mainfrom
me/assets-controller-drv2
Open

feat(assets-controller)!: fetch multicall address from config registry#9717
mikesposito wants to merge 2 commits into
mainfrom
me/assets-controller-drv2

Conversation

@mikesposito

@mikesposito mikesposito commented Jul 30, 2026

Copy link
Copy Markdown
Member

Explanation

MulticallClient from assets-controller is being wired to config-registry-controller via messenger call. The registry is used as primary source for multicall3 addresses, and the existing bundle constant is used only as fallback.

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
Breaking messenger and export changes affect all AssetsController consumers; wrong multicall addresses could break EVM token balance RPC batching, though hardcoded fallbacks limit blast radius on known chains.

Overview
EVM balance batching now resolves Multicall3 contract addresses from the config registry first, with existing per-chain constants as fallback.

RpcDataSource constructs MulticallClient with a getMulticall3AddressForChain callback that calls ConfigRegistryController:getNetworkConfigByCaip2ChainId (CAIP-2 eip155:{chainId}) and reads contracts.multicall3. AssetsControllerMessenger must delegate that action—a breaking change for hosts wiring the controller.

On the registry side, network configs gain an optional contracts object (validated API schema; multicall3 as strict hex). ConfigRegistryControllerMethodActions is removed from exports in favor of the specific action types (also breaking for type consumers).

MulticallClient’s constructor now takes a single options object (getProvider, getMulticall3AddressForChain, optional batch config); tests and mocks were updated accordingly, and @metamask/config-registry-controller is added as a dependency of @metamask/assets-controller.

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

@mikesposito
mikesposito marked this pull request as ready for review July 30, 2026 17:18
@mikesposito
mikesposito requested review from a team as code owners July 30, 2026 17:18

@cursor cursor Bot left a comment

Copy link
Copy Markdown

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 1 potential issue.

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 790f363. Configure here.

Comment thread packages/assets-controller/src/data-sources/RpcDataSource.test.ts Outdated
rpcProviders: RpcProvidersSchema,
blockExplorerUrls: BlockExplorerUrlsSchema,
config: ChainConfigSchema,
contracts: optional(NetworkContractsSchema),

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@mikesposito
mikesposito force-pushed the me/assets-controller-drv2 branch from 0c4fe55 to 1de5137 Compare July 30, 2026 17:55
@mikesposito
mikesposito force-pushed the me/assets-controller-drv2 branch from 1de5137 to 2b93102 Compare July 30, 2026 17:58
@mikesposito

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

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.5.5-preview-2b93102
@metamask-previews/accounts-controller@39.0.5-preview-2b93102
@metamask-previews/address-book-controller@7.1.2-preview-2b93102
@metamask-previews/ai-controllers@0.8.0-preview-2b93102
@metamask-previews/analytics-controller@1.2.1-preview-2b93102
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-2b93102
@metamask-previews/announcement-controller@8.1.0-preview-2b93102
@metamask-previews/app-metadata-controller@2.0.1-preview-2b93102
@metamask-previews/approval-controller@9.0.2-preview-2b93102
@metamask-previews/assets-controller@11.3.1-preview-2b93102
@metamask-previews/assets-controllers@110.0.2-preview-2b93102
@metamask-previews/authenticated-user-storage@3.0.1-preview-2b93102
@metamask-previews/base-controller@9.1.0-preview-2b93102
@metamask-previews/base-data-service@0.1.3-preview-2b93102
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-2b93102
@metamask-previews/bridge-controller@78.0.1-preview-2b93102
@metamask-previews/bridge-status-controller@74.6.0-preview-2b93102
@metamask-previews/build-utils@3.0.4-preview-2b93102
@metamask-previews/chain-agnostic-permission@1.7.0-preview-2b93102
@metamask-previews/chomp-api-service@4.0.0-preview-2b93102
@metamask-previews/claims-controller@0.5.3-preview-2b93102
@metamask-previews/client-controller@1.0.1-preview-2b93102
@metamask-previews/client-utils@1.5.0-preview-2b93102
@metamask-previews/compliance-controller@2.1.0-preview-2b93102
@metamask-previews/composable-controller@12.0.1-preview-2b93102
@metamask-previews/config-registry-controller@1.0.0-preview-2b93102
@metamask-previews/connectivity-controller@0.3.0-preview-2b93102
@metamask-previews/controller-utils@12.3.0-preview-2b93102
@metamask-previews/core-backend@8.0.0-preview-2b93102
@metamask-previews/delegation-controller@3.0.2-preview-2b93102
@metamask-previews/earn-controller@12.2.2-preview-2b93102
@metamask-previews/eip-5792-middleware@3.0.5-preview-2b93102
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-2b93102
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-2b93102
@metamask-previews/ens-controller@19.1.5-preview-2b93102
@metamask-previews/eth-block-tracker@15.0.1-preview-2b93102
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-2b93102
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-2b93102
@metamask-previews/foundryup@1.0.1-preview-2b93102
@metamask-previews/gas-fee-controller@26.3.0-preview-2b93102
@metamask-previews/gator-permissions-controller@4.2.3-preview-2b93102
@metamask-previews/geolocation-controller@0.1.3-preview-2b93102
@metamask-previews/java-tron-up@1.0.0-preview-2b93102
@metamask-previews/json-rpc-engine@10.5.0-preview-2b93102
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-2b93102
@metamask-previews/keyring-controller@27.1.0-preview-2b93102
@metamask-previews/local-node-utils@1.0.0-preview-2b93102
@metamask-previews/logging-controller@8.0.2-preview-2b93102
@metamask-previews/message-manager@14.1.2-preview-2b93102
@metamask-previews/messenger@2.0.0-preview-2b93102
@metamask-previews/messenger-cli@0.2.0-preview-2b93102
@metamask-previews/money-account-api-data-service@0.4.0-preview-2b93102
@metamask-previews/money-account-balance-service@2.3.0-preview-2b93102
@metamask-previews/money-account-controller@0.3.3-preview-2b93102
@metamask-previews/money-account-upgrade-controller@3.0.0-preview-2b93102
@metamask-previews/money-account-utils@1.0.0-preview-2b93102
@metamask-previews/multichain-account-service@13.0.0-preview-2b93102
@metamask-previews/multichain-api-middleware@4.0.1-preview-2b93102
@metamask-previews/multichain-network-controller@3.2.1-preview-2b93102
@metamask-previews/multichain-transactions-controller@7.1.1-preview-2b93102
@metamask-previews/name-controller@9.1.2-preview-2b93102
@metamask-previews/network-connection-banner-controller@0.1.1-preview-2b93102
@metamask-previews/network-controller@34.0.0-preview-2b93102
@metamask-previews/network-enablement-controller@6.0.0-preview-2b93102
@metamask-previews/notification-services-controller@26.0.0-preview-2b93102
@metamask-previews/passkey-controller@3.0.0-preview-2b93102
@metamask-previews/permission-controller@13.1.1-preview-2b93102
@metamask-previews/permission-log-controller@5.1.0-preview-2b93102
@metamask-previews/perps-controller@10.0.0-preview-2b93102
@metamask-previews/phishing-controller@17.3.0-preview-2b93102
@metamask-previews/platform-api-docs@0.0.0-preview-2b93102
@metamask-previews/polling-controller@16.0.8-preview-2b93102
@metamask-previews/preferences-controller@23.1.0-preview-2b93102
@metamask-previews/profile-metrics-controller@4.0.2-preview-2b93102
@metamask-previews/profile-sync-controller@28.3.0-preview-2b93102
@metamask-previews/ramps-controller@18.0.0-preview-2b93102
@metamask-previews/rate-limit-controller@7.0.1-preview-2b93102
@metamask-previews/react-data-query@0.2.2-preview-2b93102
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-2b93102
@metamask-previews/sample-controllers@5.0.3-preview-2b93102
@metamask-previews/seedless-onboarding-controller@10.1.0-preview-2b93102
@metamask-previews/selected-network-controller@26.1.5-preview-2b93102
@metamask-previews/sentinel-api-service@1.0.0-preview-2b93102
@metamask-previews/shield-controller@5.1.3-preview-2b93102
@metamask-previews/signature-controller@39.2.7-preview-2b93102
@metamask-previews/smart-transactions-controller@25.0.1-preview-2b93102
@metamask-previews/snap-account-service@2.1.0-preview-2b93102
@metamask-previews/social-controllers@2.7.0-preview-2b93102
@metamask-previews/solana-test-validator-up@1.0.0-preview-2b93102
@metamask-previews/stellar-quickstart-up@0.0.0-preview-2b93102
@metamask-previews/storage-service@1.0.2-preview-2b93102
@metamask-previews/subscription-controller@6.2.1-preview-2b93102
@metamask-previews/transaction-controller@69.3.0-preview-2b93102
@metamask-previews/transaction-pay-controller@26.0.1-preview-2b93102
@metamask-previews/user-operation-controller@41.2.7-preview-2b93102
@metamask-previews/wallet@8.1.0-preview-2b93102
@metamask-previews/wallet-cli@0.0.0-preview-2b93102

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.

1 participant