Skip to content

feat(wallet): initialize AssetsController by default and start it from the client - #10885

Open
dawnseeker8 wants to merge 45 commits into
mainfrom
feat/assets-3641-wallet-assets-controller
Open

dawnseeker8 wants to merge 45 commits into
mainfrom
feat/assets-3641-wallet-assets-controller

Conversation

@dawnseeker8

@dawnseeker8 dawnseeker8 commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Explanation

ASSETS-3641 asks @metamask/wallet to construct @metamask/assets-controller as part of its shared initialization flow. This PR adds AssetsController to the Wallet's default initialization configurations and changes how the controller starts, so that construction no longer depends on controller order.

The problem

AssetsController and its data sources read other controllers when they are constructed. NetworkController, NetworkEnablementController and RemoteFeatureFlagController are Wallet defaults. SnapController, PermissionController and AccountTreeController are not: the clients register them after the Wallet is built.

Doing that work in init() does not fix it either. Both clients call wallet.init() right after new Wallet(), before their own controllers are registered (extension app/scripts/wallet-init/initialization.ts, mobile app/core/Engine/wallet-init/initialization.ts). For example, snap discovery would run before SnapController exists, and Solana, Bitcoin and Tron balances would stay empty.

The approach: construct minimally, then start()

  • Constructor: no messenger actions, no data sources, no subscriptions to external events. It sets up state, stores the options and registers action handlers. A test asserts that construction makes no messenger.call.

  • start(): a new public method, also exposed as the AssetsController:start messenger action. The client calls it once its own controllers are registered. It:

    1. reads enabled networks;
    2. creates the data sources;
    3. subscribes to external events and to subscribeToBasicFunctionalityChange;
    4. runs the unlock cleanups if the keyring is already unlocked;
    5. starts tracking when the UI is open, the keyring is unlocked and the account tree is initialized.

    Repeated calls share one promise. Calls after destroy() do nothing.

data-sources/ is unchanged from main. Each data source still reads other controllers in its constructor, as before; the only difference is that start() constructs them later. This replaces the earlier per-data-source init() / refreshActiveChains...() methods and the fallbacks for unregistered controllers. Those are removed: the isUnregisteredActionError checks, the AccountsController:selectedAccountChange fallback, and treating a missing AccountTreeController as initialized.

Inside the controller, the data-source fields become private getters over a single #sources object, so existing call sites are unchanged. Entry points that can run before start() are guarded:

  • getAssets({ forceUpdate: true }) returns what is in state without fetching. The @trackAssetsLoading decorator moved to a private #getAssetsTracked, so this call does not settle assetsLoadingStatus to loaded early.
  • handleAssetsUpdate, syncAssetsPrices, subscribeAssetsPrice and handleBasicFunctionalityChange do nothing.
  • setSelectedCurrency updates state without refreshing prices.

Wallet

  • AssetsController is in the default configurations and requires instanceOptions.assetsController.queryApiClient.
  • Wallet.init() does not start it. AssetsController has no init(), so wallet.init() returns the same number of results as before.
  • The child messenger delegates the actions and events AssetsControllerMessenger declares, including those of AccountTreeController and SnapController, which the client registers.

Client follow-up

Clients must call AssetsController:start after registering and initializing their controllers. Hosts that already construct AssetsController themselves must remove that, or messenger registration will collide. The extension draft is MetaMask/metamask-extension#47585. It currently calls AssetsController.init() a second time, and that call will be replaced with start() once a preview build of this PR is available.

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

🤖 Generated with Claude Code


Note

Medium Risk
Breaking controller lifecycle and default Wallet registration change asset-tracking timing and can cause messenger collisions; clients must call start() at the right point in initialization.

Overview
Breaking: AssetsController no longer creates data sources, calls other controllers, or subscribes in the constructor. Clients must call start() (or AssetsController:start) after dependent controllers (e.g. AccountTreeController, SnapController) exist. Until then, forced fetches read persisted state, pushed updates are ignored, and price/sync paths are no-ops. start() is idempotent, waits for Accounts API supported networks, runs unlock cleanups if already unlocked, then begins tracking when UI is open, keyring unlocked, and the account tree is ready.

@metamask/wallet now constructs AssetsController by default (required instanceOptions.assetsController.queryApiClient), delegates its external messenger actions/events, and does not invoke start() during Wallet.init(). Hosts that already register AssetsController must remove duplicate registration before upgrading.

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

dawnseeker8 and others added 3 commits October 19, 2026 22:04
Export an AssetsController initialization config so clients can register it
after NetworkEnablementController, which the wallet does not initialize yet.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@dawnseeker8

Copy link
Copy Markdown
Contributor 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@11.1.0-preview-d687d3ab2
@metamask-previews/accounts-controller@40.1.0-preview-d687d3ab2
@metamask-previews/address-book-controller@8.0.0-preview-d687d3ab2
@metamask-previews/advanced-chart-core@1.0.0-preview-d687d3ab2
@metamask-previews/ai-controllers@2.0.0-preview-d687d3ab2
@metamask-previews/analytics-controller@4.0.0-preview-d687d3ab2
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-d687d3ab2
@metamask-previews/announcement-controller@9.0.0-preview-d687d3ab2
@metamask-previews/app-metadata-controller@3.0.0-preview-d687d3ab2
@metamask-previews/approval-controller@10.0.0-preview-d687d3ab2
@metamask-previews/assets-controller@19.1.0-preview-d687d3ab2
@metamask-previews/assets-controllers@112.1.2-preview-d687d3ab2
@metamask-previews/authenticated-user-storage@4.1.0-preview-d687d3ab2
@metamask-previews/base-controller@10.1.0-preview-d687d3ab2
@metamask-previews/base-data-service@2.1.0-preview-d687d3ab2
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-d687d3ab2
@metamask-previews/bridge-controller@82.0.3-preview-d687d3ab2
@metamask-previews/bridge-status-controller@76.4.0-preview-d687d3ab2
@metamask-previews/build-utils@4.0.0-preview-d687d3ab2
@metamask-previews/chain-agnostic-permission@2.0.0-preview-d687d3ab2
@metamask-previews/chomp-api-service@6.0.1-preview-d687d3ab2
@metamask-previews/claims-controller@1.0.3-preview-d687d3ab2
@metamask-previews/client-controller@2.0.0-preview-d687d3ab2
@metamask-previews/client-utils@3.0.4-preview-d687d3ab2
@metamask-previews/compliance-controller@3.0.0-preview-d687d3ab2
@metamask-previews/composable-controller@13.0.0-preview-d687d3ab2
@metamask-previews/config-registry-controller@5.0.0-preview-d687d3ab2
@metamask-previews/connectivity-controller@1.0.0-preview-d687d3ab2
@metamask-previews/controller-utils@13.0.0-preview-d687d3ab2
@metamask-previews/core-backend@12.3.0-preview-d687d3ab2
@metamask-previews/cryptography@1.1.2-preview-d687d3ab2
@metamask-previews/delegation-controller@4.0.0-preview-d687d3ab2
@metamask-previews/earn-controller@13.0.2-preview-d687d3ab2
@metamask-previews/eip-5792-middleware@4.0.1-preview-d687d3ab2
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-d687d3ab2
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-d687d3ab2
@metamask-previews/eth-block-tracker@16.0.0-preview-d687d3ab2
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-d687d3ab2
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-d687d3ab2
@metamask-previews/foundryup@2.0.0-preview-d687d3ab2
@metamask-previews/gas-fee-controller@27.0.0-preview-d687d3ab2
@metamask-previews/gator-permissions-controller@6.0.1-preview-d687d3ab2
@metamask-previews/geolocation-controller@2.0.0-preview-d687d3ab2
@metamask-previews/java-tron-up@2.0.0-preview-d687d3ab2
@metamask-previews/json-rpc-engine@11.0.0-preview-d687d3ab2
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-d687d3ab2
@metamask-previews/keyring-controller@28.2.0-preview-d687d3ab2
@metamask-previews/kyc-controller@0.10.0-preview-d687d3ab2
@metamask-previews/local-node-utils@2.0.0-preview-d687d3ab2
@metamask-previews/logging-controller@10.0.0-preview-d687d3ab2
@metamask-previews/marketing-consent-controller@1.0.0-preview-d687d3ab2
@metamask-previews/message-manager@15.0.0-preview-d687d3ab2
@metamask-previews/messenger@3.0.0-preview-d687d3ab2
@metamask-previews/messenger-cli@1.0.0-preview-d687d3ab2
@metamask-previews/mfa-recovery-controller@0.0.0-preview-d687d3ab2
@metamask-previews/money-account-api-data-service@2.2.0-preview-d687d3ab2
@metamask-previews/money-account-balance-service@3.1.2-preview-d687d3ab2
@metamask-previews/money-account-controller@2.0.0-preview-d687d3ab2
@metamask-previews/money-account-mfa-whitelist@0.1.0-preview-d687d3ab2
@metamask-previews/money-account-upgrade-controller@5.1.0-preview-d687d3ab2
@metamask-previews/money-account-utils@2.1.0-preview-d687d3ab2
@metamask-previews/multichain-account-service@14.1.0-preview-d687d3ab2
@metamask-previews/multichain-api-middleware@5.0.0-preview-d687d3ab2
@metamask-previews/multichain-network-controller@4.0.0-preview-d687d3ab2
@metamask-previews/multichain-transactions-controller@8.0.0-preview-d687d3ab2
@metamask-previews/name-controller@10.0.0-preview-d687d3ab2
@metamask-previews/network-connection-banner-controller@1.0.0-preview-d687d3ab2
@metamask-previews/network-controller@37.1.0-preview-d687d3ab2
@metamask-previews/network-enablement-controller@7.0.2-preview-d687d3ab2
@metamask-previews/notification-services-controller@30.0.0-preview-d687d3ab2
@metamask-previews/passkey-controller@4.1.0-preview-d687d3ab2
@metamask-previews/permission-controller@14.0.0-preview-d687d3ab2
@metamask-previews/permission-log-controller@6.0.0-preview-d687d3ab2
@metamask-previews/perps-controller@20.1.0-preview-d687d3ab2
@metamask-previews/phishing-controller@18.2.1-preview-d687d3ab2
@metamask-previews/platform-api-docs@0.2.1-preview-d687d3ab2
@metamask-previews/polling-controller@17.0.0-preview-d687d3ab2
@metamask-previews/preferences-controller@24.0.0-preview-d687d3ab2
@metamask-previews/profile-controller@1.1.0-preview-d687d3ab2
@metamask-previews/profile-metrics-controller@5.1.3-preview-d687d3ab2
@metamask-previews/profile-sync-controller@34.0.3-preview-d687d3ab2
@metamask-previews/ramps-controller@27.0.1-preview-d687d3ab2
@metamask-previews/rate-limit-controller@8.0.0-preview-d687d3ab2
@metamask-previews/react-data-query@2.0.0-preview-d687d3ab2
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-d687d3ab2
@metamask-previews/sample-controllers@6.0.0-preview-d687d3ab2
@metamask-previews/seedless-onboarding-controller@12.0.0-preview-d687d3ab2
@metamask-previews/selected-network-controller@27.0.0-preview-d687d3ab2
@metamask-previews/sentinel-api-service@2.1.0-preview-d687d3ab2
@metamask-previews/shield-controller@7.0.4-preview-d687d3ab2
@metamask-previews/signature-controller@40.0.0-preview-d687d3ab2
@metamask-previews/smart-transactions-controller@27.1.0-preview-d687d3ab2
@metamask-previews/snap-account-service@4.0.0-preview-d687d3ab2
@metamask-previews/social-controllers@3.8.0-preview-d687d3ab2
@metamask-previews/solana-test-validator-up@2.0.0-preview-d687d3ab2
@metamask-previews/stellar-quickstart-up@0.0.0-preview-d687d3ab2
@metamask-previews/storage-service@2.0.0-preview-d687d3ab2
@metamask-previews/subscription-controller@14.0.0-preview-d687d3ab2
@metamask-previews/transaction-controller@72.2.1-preview-d687d3ab2
@metamask-previews/transaction-pay-controller@30.1.0-preview-d687d3ab2
@metamask-previews/transaction-pay-middleware@0.0.0-preview-d687d3ab2
@metamask-previews/user-operation-controller@42.0.1-preview-d687d3ab2
@metamask-previews/utils@12.0.0-preview-d687d3ab2
@metamask-previews/wallet@18.0.0-preview-d687d3ab2
@metamask-previews/wallet-cli@0.0.0-preview-d687d3ab2

dawnseeker8 and others added 2 commits October 22, 2026 15:28
…et-assets-controller

Co-authored-by: Cursor <cursoragent@cursor.com>
…ontroller' into feat/assets-3641-wallet-assets-controller
@dawnseeker8

Copy link
Copy Markdown
Contributor 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@11.1.1-preview-55fcf3ef7
@metamask-previews/accounts-controller@40.1.0-preview-55fcf3ef7
@metamask-previews/address-book-controller@8.0.0-preview-55fcf3ef7
@metamask-previews/advanced-chart-core@1.0.0-preview-55fcf3ef7
@metamask-previews/ai-controllers@2.0.0-preview-55fcf3ef7
@metamask-previews/analytics-controller@4.0.0-preview-55fcf3ef7
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-55fcf3ef7
@metamask-previews/announcement-controller@9.0.0-preview-55fcf3ef7
@metamask-previews/app-metadata-controller@3.0.0-preview-55fcf3ef7
@metamask-previews/approval-controller@10.0.0-preview-55fcf3ef7
@metamask-previews/assets-controller@19.1.0-preview-55fcf3ef7
@metamask-previews/assets-controllers@112.1.3-preview-55fcf3ef7
@metamask-previews/authenticated-user-storage@4.1.0-preview-55fcf3ef7
@metamask-previews/base-controller@10.1.0-preview-55fcf3ef7
@metamask-previews/base-data-service@2.1.0-preview-55fcf3ef7
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-55fcf3ef7
@metamask-previews/bridge-controller@83.0.0-preview-55fcf3ef7
@metamask-previews/bridge-status-controller@77.0.0-preview-55fcf3ef7
@metamask-previews/build-utils@4.0.0-preview-55fcf3ef7
@metamask-previews/chain-agnostic-permission@2.1.0-preview-55fcf3ef7
@metamask-previews/chomp-api-service@6.0.1-preview-55fcf3ef7
@metamask-previews/claims-controller@1.0.4-preview-55fcf3ef7
@metamask-previews/client-controller@2.0.0-preview-55fcf3ef7
@metamask-previews/client-utils@3.0.4-preview-55fcf3ef7
@metamask-previews/compliance-controller@3.0.0-preview-55fcf3ef7
@metamask-previews/composable-controller@13.0.0-preview-55fcf3ef7
@metamask-previews/config-registry-controller@5.0.0-preview-55fcf3ef7
@metamask-previews/connectivity-controller@1.0.0-preview-55fcf3ef7
@metamask-previews/controller-utils@13.0.0-preview-55fcf3ef7
@metamask-previews/core-backend@12.3.0-preview-55fcf3ef7
@metamask-previews/cryptography@1.1.2-preview-55fcf3ef7
@metamask-previews/delegation-controller@4.0.0-preview-55fcf3ef7
@metamask-previews/earn-controller@13.0.2-preview-55fcf3ef7
@metamask-previews/eip-5792-middleware@4.0.1-preview-55fcf3ef7
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-55fcf3ef7
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-55fcf3ef7
@metamask-previews/error-utils@0.0.0-preview-55fcf3ef7
@metamask-previews/eth-block-tracker@16.0.0-preview-55fcf3ef7
@metamask-previews/eth-json-rpc-middleware@26.0.0-preview-55fcf3ef7
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-55fcf3ef7
@metamask-previews/foundryup@2.0.0-preview-55fcf3ef7
@metamask-previews/gas-fee-controller@27.0.0-preview-55fcf3ef7
@metamask-previews/gator-permissions-controller@6.0.1-preview-55fcf3ef7
@metamask-previews/geolocation-controller@2.0.0-preview-55fcf3ef7
@metamask-previews/java-tron-up@2.0.0-preview-55fcf3ef7
@metamask-previews/json-rpc-engine@11.0.0-preview-55fcf3ef7
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-55fcf3ef7
@metamask-previews/keyring-controller@28.2.0-preview-55fcf3ef7
@metamask-previews/kyc-controller@0.11.0-preview-55fcf3ef7
@metamask-previews/local-node-utils@2.0.0-preview-55fcf3ef7
@metamask-previews/logging-controller@10.0.0-preview-55fcf3ef7
@metamask-previews/marketing-consent-controller@1.0.2-preview-55fcf3ef7
@metamask-previews/message-manager@15.0.0-preview-55fcf3ef7
@metamask-previews/messenger@3.0.0-preview-55fcf3ef7
@metamask-previews/messenger-cli@1.0.0-preview-55fcf3ef7
@metamask-previews/mfa-recovery-controller@0.0.0-preview-55fcf3ef7
@metamask-previews/money-account-api-data-service@2.2.0-preview-55fcf3ef7
@metamask-previews/money-account-balance-service@3.1.2-preview-55fcf3ef7
@metamask-previews/money-account-controller@2.0.0-preview-55fcf3ef7
@metamask-previews/money-account-mfa-whitelist@0.1.0-preview-55fcf3ef7
@metamask-previews/money-account-upgrade-controller@5.1.0-preview-55fcf3ef7
@metamask-previews/money-account-utils@2.1.0-preview-55fcf3ef7
@metamask-previews/multichain-account-service@14.1.0-preview-55fcf3ef7
@metamask-previews/multichain-api-middleware@5.0.0-preview-55fcf3ef7
@metamask-previews/multichain-network-controller@4.0.0-preview-55fcf3ef7
@metamask-previews/multichain-transactions-controller@8.0.0-preview-55fcf3ef7
@metamask-previews/name-controller@10.0.0-preview-55fcf3ef7
@metamask-previews/network-connection-banner-controller@1.0.0-preview-55fcf3ef7
@metamask-previews/network-controller@37.1.1-preview-55fcf3ef7
@metamask-previews/network-enablement-controller@7.0.2-preview-55fcf3ef7
@metamask-previews/node-utils@0.0.0-preview-55fcf3ef7
@metamask-previews/notification-services-controller@30.0.1-preview-55fcf3ef7
@metamask-previews/passkey-controller@4.1.0-preview-55fcf3ef7
@metamask-previews/permission-controller@14.0.0-preview-55fcf3ef7
@metamask-previews/permission-log-controller@6.0.0-preview-55fcf3ef7
@metamask-previews/perps-controller@21.0.0-preview-55fcf3ef7
@metamask-previews/phishing-controller@18.2.1-preview-55fcf3ef7
@metamask-previews/platform-api-docs@0.2.1-preview-55fcf3ef7
@metamask-previews/polling-controller@17.0.0-preview-55fcf3ef7
@metamask-previews/preferences-controller@24.0.0-preview-55fcf3ef7
@metamask-previews/profile-controller@1.1.1-preview-55fcf3ef7
@metamask-previews/profile-metrics-controller@5.1.4-preview-55fcf3ef7
@metamask-previews/profile-sync-controller@35.0.0-preview-55fcf3ef7
@metamask-previews/ramps-controller@27.1.0-preview-55fcf3ef7
@metamask-previews/rate-limit-controller@8.0.0-preview-55fcf3ef7
@metamask-previews/react-data-query@2.0.0-preview-55fcf3ef7
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-55fcf3ef7
@metamask-previews/sample-controllers@6.0.0-preview-55fcf3ef7
@metamask-previews/seedless-onboarding-controller@12.0.0-preview-55fcf3ef7
@metamask-previews/selected-network-controller@27.0.0-preview-55fcf3ef7
@metamask-previews/sentinel-api-service@2.1.0-preview-55fcf3ef7
@metamask-previews/shield-controller@7.0.5-preview-55fcf3ef7
@metamask-previews/signature-controller@40.0.0-preview-55fcf3ef7
@metamask-previews/smart-transactions-controller@27.1.1-preview-55fcf3ef7
@metamask-previews/snap-account-service@4.0.0-preview-55fcf3ef7
@metamask-previews/social-controllers@3.10.0-preview-55fcf3ef7
@metamask-previews/solana-test-validator-up@2.0.0-preview-55fcf3ef7
@metamask-previews/stellar-quickstart-up@0.0.0-preview-55fcf3ef7
@metamask-previews/storage-service@2.0.0-preview-55fcf3ef7
@metamask-previews/subscription-controller@14.0.2-preview-55fcf3ef7
@metamask-previews/transaction-controller@72.2.1-preview-55fcf3ef7
@metamask-previews/transaction-pay-controller@30.2.0-preview-55fcf3ef7
@metamask-previews/transaction-pay-middleware@1.0.0-preview-55fcf3ef7
@metamask-previews/type-utils@0.0.0-preview-55fcf3ef7
@metamask-previews/user-operation-controller@42.0.1-preview-55fcf3ef7
@metamask-previews/utils@12.0.0-preview-55fcf3ef7
@metamask-previews/wallet@18.0.1-preview-55fcf3ef7
@metamask-previews/wallet-cli@0.0.0-preview-55fcf3ef7
@metamask-previews/watch-only-account-service@0.0.0-preview-55fcf3ef7

gaohan1994 pushed a commit to gaohan1994/core that referenced this pull request Oct 28, 2026
…Mask#10997)

## Explanation

`@metamask/wallet` now constructs `NetworkEnablementController` during
default initialization. The constructor only needs a messenger and
optional persisted state, so there is no new `instanceOptions` field.

### Breaking change

`Wallet.init()` calls `NetworkEnablementController.init()`. That method
reads `MultichainNetworkController:getState`. The wallet does not
construct `MultichainNetworkController`, so each client must register
that action on the wallet messenger before `wallet.init()`.

`NetworkEnablementController` is a default initialization configuration
and is not exported. Construction order for `AssetsController` is
handled in MetaMask#10885 by moving the `NetworkEnablementController:getState`
read into `AssetsController.init()`.

### What this pull request changes

- Add `NetworkEnablementController` to the default initialization
configurations.
- Delegate `NetworkController:getState`,
`MultichainNetworkController:getState`, and
`ConfigRegistryController:getState`, plus the network and transaction
events the controller subscribes to.
- Import `@metamask/slip44` with a JSON import attribute so Node.js 22
and 24 do not throw `ERR_IMPORT_ATTRIBUTE_MISSING` when loading
`NetworkEnablementController`.
- Generate the CODEOWNERS entry from `codeowners.ts`.

`@metamask/wallet-cli` was removed on `main` (MetaMask#11001), so this pull
request no longer changes that package. `AssetsController`
initialization stays in MetaMask#10885 and will be updated after this merges.

## References

*
[ASSETS-4169](https://consensyssoftware.atlassian.net/browse/ASSETS-4169)
* Follow-up: MetaMask#10885

## Checklist

- [x] I've updated the test suite for new or updated code as appropriate
- [x] I've updated documentation (JSDoc, Markdown, etc.) for new or
updated code as appropriate
- [x] I've communicated my changes to consumers by [updating changelogs
for packages I've
changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md)
- [ ] I've introduced [breaking
changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md)
in this PR and have prepared draft pull requests for clients and
consumer packages to resolve them

[ASSETS-4169]:
https://consensyssoftware.atlassian.net/browse/ASSETS-4169?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Breaking wallet init contract: clients must pre-register
`MultichainNetworkController:getState` or initialization fails;
otherwise changes are localized wiring and a Node ESM import fix.
> 
> **Overview**
> **`@metamask/wallet` now wires `NetworkEnablementController` into
default initialization**, so `Wallet.init()` constructs it alongside the
other default controllers. The new `networkEnablementController`
configuration delegates messenger actions
(`ConfigRegistryController:getState`, `NetworkController:getState`,
**`MultichainNetworkController:getState`**) and network/transaction
events the controller listens to. **Breaking:** the wallet does not
create `MultichainNetworkController`, so hosts must register
`MultichainNetworkController:getState` on the wallet root messenger
before `wallet.init()`.
> 
> The package adds `@metamask/network-enablement-controller` (^7.0.2),
exports the init config from the instances barrel, and updates
CODEOWNERS/`codeowners.ts` for the new initialization path.
> 
> **`@metamask/network-enablement-controller`** fixes Node 22/24 ESM
loading by importing `@metamask/slip44` with `with { type: 'json' }` in
`Slip44Service`, avoiding `ERR_IMPORT_ATTRIBUTE_MISSING` when the wallet
daemon loads the controller.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
41650ee. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>
@dawnseeker8
dawnseeker8 marked this pull request as ready for review October 28, 2026 06:26
@dawnseeker8
dawnseeker8 requested a review from a team as a code owner October 28, 2026 06:27
dawnseeker8 and others added 2 commits October 28, 2026 14:36
…et-assets-controller

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	packages/wallet/CHANGELOG.md
AssetsController can be constructed before NetworkEnablementController exists. init() and the stateChange subscription apply enabled chains once that state is available.

Co-authored-by: Cursor <cursoragent@cursor.com>
@dawnseeker8
dawnseeker8 requested a review from a team as a code owner October 28, 2026 09:27
dawnseeker8 and others added 3 commits October 28, 2026 17:38
The new test used a widened CAIP-19 id and an extra publish argument, which lint:tsc:check treats as unsuppressed errors.

Co-authored-by: Cursor <cursoragent@cursor.com>
The new assertions used a short cast parameter and nullish fallbacks, which oxlint reports as unsuppressed violations.

Co-authored-by: Cursor <cursoragent@cursor.com>
@dawnseeker8

Copy link
Copy Markdown
Contributor 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@11.2.0-preview-5669a8ae0
@metamask-previews/accounts-controller@40.1.0-preview-5669a8ae0
@metamask-previews/address-book-controller@8.0.0-preview-5669a8ae0
@metamask-previews/advanced-chart-core@1.0.0-preview-5669a8ae0
@metamask-previews/ai-controllers@2.0.0-preview-5669a8ae0
@metamask-previews/analytics-controller@4.1.0-preview-5669a8ae0
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-5669a8ae0
@metamask-previews/announcement-controller@9.0.0-preview-5669a8ae0
@metamask-previews/app-metadata-controller@3.0.0-preview-5669a8ae0
@metamask-previews/approval-controller@10.0.0-preview-5669a8ae0
@metamask-previews/assets-controller@20.0.0-preview-5669a8ae0
@metamask-previews/assets-controllers@112.2.0-preview-5669a8ae0
@metamask-previews/authenticated-user-storage@4.1.0-preview-5669a8ae0
@metamask-previews/base-controller@10.1.0-preview-5669a8ae0
@metamask-previews/base-data-service@2.1.0-preview-5669a8ae0
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-5669a8ae0
@metamask-previews/bridge-controller@83.1.1-preview-5669a8ae0
@metamask-previews/bridge-status-controller@78.0.0-preview-5669a8ae0
@metamask-previews/build-utils@4.0.0-preview-5669a8ae0
@metamask-previews/byte-utils@0.1.0-preview-5669a8ae0
@metamask-previews/chain-agnostic-permission@2.1.0-preview-5669a8ae0
@metamask-previews/chomp-api-service@7.0.0-preview-5669a8ae0
@metamask-previews/claims-controller@1.1.0-preview-5669a8ae0
@metamask-previews/client-controller@2.0.0-preview-5669a8ae0
@metamask-previews/client-utils@3.0.4-preview-5669a8ae0
@metamask-previews/compliance-controller@3.0.0-preview-5669a8ae0
@metamask-previews/composable-controller@13.0.0-preview-5669a8ae0
@metamask-previews/config-registry-controller@5.0.0-preview-5669a8ae0
@metamask-previews/connectivity-controller@1.0.0-preview-5669a8ae0
@metamask-previews/controller-utils@13.0.0-preview-5669a8ae0
@metamask-previews/core-backend@12.3.0-preview-5669a8ae0
@metamask-previews/cryptography@1.1.2-preview-5669a8ae0
@metamask-previews/delegation-controller@4.0.0-preview-5669a8ae0
@metamask-previews/earn-controller@13.0.2-preview-5669a8ae0
@metamask-previews/eip-5792-middleware@4.0.1-preview-5669a8ae0
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-5669a8ae0
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-5669a8ae0
@metamask-previews/error-utils@0.1.0-preview-5669a8ae0
@metamask-previews/eth-block-tracker@16.0.0-preview-5669a8ae0
@metamask-previews/eth-json-rpc-middleware@26.0.0-preview-5669a8ae0
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-5669a8ae0
@metamask-previews/foundryup@2.0.0-preview-5669a8ae0
@metamask-previews/gas-fee-controller@27.0.0-preview-5669a8ae0
@metamask-previews/gator-permissions-controller@6.0.1-preview-5669a8ae0
@metamask-previews/geolocation-controller@2.0.0-preview-5669a8ae0
@metamask-previews/java-tron-up@2.0.0-preview-5669a8ae0
@metamask-previews/json-rpc-engine@11.0.0-preview-5669a8ae0
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-5669a8ae0
@metamask-previews/keyring-controller@28.2.0-preview-5669a8ae0
@metamask-previews/kyc-controller@0.13.0-preview-5669a8ae0
@metamask-previews/local-node-utils@2.0.0-preview-5669a8ae0
@metamask-previews/logging-controller@10.0.0-preview-5669a8ae0
@metamask-previews/marketing-consent-controller@1.1.0-preview-5669a8ae0
@metamask-previews/message-manager@15.0.0-preview-5669a8ae0
@metamask-previews/messenger@3.0.0-preview-5669a8ae0
@metamask-previews/messenger-cli@1.0.0-preview-5669a8ae0
@metamask-previews/mfa-recovery-controller@0.0.0-preview-5669a8ae0
@metamask-previews/money-account-api-data-service@2.3.1-preview-5669a8ae0
@metamask-previews/money-account-balance-service@3.1.2-preview-5669a8ae0
@metamask-previews/money-account-controller@3.0.0-preview-5669a8ae0
@metamask-previews/money-account-mfa-whitelist@0.1.0-preview-5669a8ae0
@metamask-previews/money-account-upgrade-controller@6.0.0-preview-5669a8ae0
@metamask-previews/money-account-utils@2.1.0-preview-5669a8ae0
@metamask-previews/multichain-account-service@14.1.0-preview-5669a8ae0
@metamask-previews/multichain-api-middleware@5.0.0-preview-5669a8ae0
@metamask-previews/multichain-network-controller@4.0.0-preview-5669a8ae0
@metamask-previews/multichain-transactions-controller@8.0.0-preview-5669a8ae0
@metamask-previews/name-controller@10.0.0-preview-5669a8ae0
@metamask-previews/network-connection-banner-controller@1.0.0-preview-5669a8ae0
@metamask-previews/network-controller@37.1.1-preview-5669a8ae0
@metamask-previews/network-enablement-controller@7.0.2-preview-5669a8ae0
@metamask-previews/node-utils@0.1.0-preview-5669a8ae0
@metamask-previews/notification-services-controller@30.1.0-preview-5669a8ae0
@metamask-previews/passkey-controller@4.1.0-preview-5669a8ae0
@metamask-previews/permission-controller@14.0.0-preview-5669a8ae0
@metamask-previews/permission-log-controller@6.0.0-preview-5669a8ae0
@metamask-previews/perps-controller@22.0.0-preview-5669a8ae0
@metamask-previews/phishing-controller@18.2.1-preview-5669a8ae0
@metamask-previews/platform-api-docs@0.2.1-preview-5669a8ae0
@metamask-previews/polling-controller@17.0.0-preview-5669a8ae0
@metamask-previews/preferences-controller@24.0.0-preview-5669a8ae0
@metamask-previews/profile-controller@1.2.0-preview-5669a8ae0
@metamask-previews/profile-metrics-controller@5.2.0-preview-5669a8ae0
@metamask-previews/profile-sync-controller@36.0.0-preview-5669a8ae0
@metamask-previews/ramps-controller@28.0.0-preview-5669a8ae0
@metamask-previews/rate-limit-controller@8.0.0-preview-5669a8ae0
@metamask-previews/react-data-query@2.0.0-preview-5669a8ae0
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-5669a8ae0
@metamask-previews/sample-controllers@6.0.0-preview-5669a8ae0
@metamask-previews/seedless-onboarding-controller@12.0.0-preview-5669a8ae0
@metamask-previews/selected-network-controller@27.0.0-preview-5669a8ae0
@metamask-previews/sentinel-api-service@2.1.0-preview-5669a8ae0
@metamask-previews/shield-controller@7.1.0-preview-5669a8ae0
@metamask-previews/signature-controller@40.0.0-preview-5669a8ae0
@metamask-previews/smart-transactions-controller@27.2.0-preview-5669a8ae0
@metamask-previews/snap-account-service@4.0.0-preview-5669a8ae0
@metamask-previews/social-controllers@3.12.1-preview-5669a8ae0
@metamask-previews/solana-test-validator-up@2.0.0-preview-5669a8ae0
@metamask-previews/stellar-quickstart-up@0.0.0-preview-5669a8ae0
@metamask-previews/storage-service@2.0.0-preview-5669a8ae0
@metamask-previews/subscription-controller@15.1.1-preview-5669a8ae0
@metamask-previews/transaction-controller@72.2.1-preview-5669a8ae0
@metamask-previews/transaction-pay-controller@30.3.1-preview-5669a8ae0
@metamask-previews/transaction-pay-middleware@2.0.0-preview-5669a8ae0
@metamask-previews/type-utils@0.1.0-preview-5669a8ae0
@metamask-previews/user-operation-controller@42.0.1-preview-5669a8ae0
@metamask-previews/utils@12.0.1-preview-5669a8ae0
@metamask-previews/wallet@20.0.0-preview-5669a8ae0
@metamask-previews/watch-only-account-service@0.1.0-preview-5669a8ae0

dawnseeker8 and others added 2 commits October 28, 2026 18:19
Changelog checks only accept the open pull request under Unreleased, and oxfmt needs the enabled-chain assertion wrapped.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@dawnseeker8

Copy link
Copy Markdown
Contributor 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@11.2.0-preview-bbbbbb9f2
@metamask-previews/accounts-controller@40.1.0-preview-bbbbbb9f2
@metamask-previews/address-book-controller@8.0.0-preview-bbbbbb9f2
@metamask-previews/advanced-chart-core@1.0.0-preview-bbbbbb9f2
@metamask-previews/ai-controllers@2.0.0-preview-bbbbbb9f2
@metamask-previews/analytics-controller@4.1.0-preview-bbbbbb9f2
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-bbbbbb9f2
@metamask-previews/announcement-controller@9.0.0-preview-bbbbbb9f2
@metamask-previews/app-metadata-controller@3.0.0-preview-bbbbbb9f2
@metamask-previews/approval-controller@10.0.0-preview-bbbbbb9f2
@metamask-previews/assets-controller@20.0.0-preview-bbbbbb9f2
@metamask-previews/assets-controllers@112.2.0-preview-bbbbbb9f2
@metamask-previews/authenticated-user-storage@4.1.0-preview-bbbbbb9f2
@metamask-previews/base-controller@10.1.0-preview-bbbbbb9f2
@metamask-previews/base-data-service@2.1.0-preview-bbbbbb9f2
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-bbbbbb9f2
@metamask-previews/bridge-controller@83.1.1-preview-bbbbbb9f2
@metamask-previews/bridge-status-controller@78.0.0-preview-bbbbbb9f2
@metamask-previews/build-utils@4.0.0-preview-bbbbbb9f2
@metamask-previews/byte-utils@0.1.0-preview-bbbbbb9f2
@metamask-previews/chain-agnostic-permission@2.1.0-preview-bbbbbb9f2
@metamask-previews/chomp-api-service@7.0.0-preview-bbbbbb9f2
@metamask-previews/claims-controller@1.1.0-preview-bbbbbb9f2
@metamask-previews/client-controller@2.0.0-preview-bbbbbb9f2
@metamask-previews/client-utils@3.0.4-preview-bbbbbb9f2
@metamask-previews/compliance-controller@3.0.0-preview-bbbbbb9f2
@metamask-previews/composable-controller@13.0.0-preview-bbbbbb9f2
@metamask-previews/config-registry-controller@5.0.0-preview-bbbbbb9f2
@metamask-previews/connectivity-controller@1.0.0-preview-bbbbbb9f2
@metamask-previews/controller-utils@13.0.0-preview-bbbbbb9f2
@metamask-previews/core-backend@12.3.0-preview-bbbbbb9f2
@metamask-previews/cryptography@1.1.2-preview-bbbbbb9f2
@metamask-previews/delegation-controller@4.0.0-preview-bbbbbb9f2
@metamask-previews/earn-controller@13.0.2-preview-bbbbbb9f2
@metamask-previews/eip-5792-middleware@4.0.1-preview-bbbbbb9f2
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-bbbbbb9f2
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-bbbbbb9f2
@metamask-previews/error-utils@0.1.0-preview-bbbbbb9f2
@metamask-previews/eth-block-tracker@16.0.0-preview-bbbbbb9f2
@metamask-previews/eth-json-rpc-middleware@26.0.0-preview-bbbbbb9f2
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-bbbbbb9f2
@metamask-previews/foundryup@2.0.0-preview-bbbbbb9f2
@metamask-previews/gas-fee-controller@27.0.0-preview-bbbbbb9f2
@metamask-previews/gator-permissions-controller@6.0.1-preview-bbbbbb9f2
@metamask-previews/geolocation-controller@2.0.0-preview-bbbbbb9f2
@metamask-previews/java-tron-up@2.0.0-preview-bbbbbb9f2
@metamask-previews/json-rpc-engine@11.0.0-preview-bbbbbb9f2
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-bbbbbb9f2
@metamask-previews/keyring-controller@28.2.0-preview-bbbbbb9f2
@metamask-previews/kyc-controller@0.13.0-preview-bbbbbb9f2
@metamask-previews/local-node-utils@2.0.0-preview-bbbbbb9f2
@metamask-previews/logging-controller@10.0.0-preview-bbbbbb9f2
@metamask-previews/marketing-consent-controller@1.1.0-preview-bbbbbb9f2
@metamask-previews/message-manager@15.0.0-preview-bbbbbb9f2
@metamask-previews/messenger@3.0.0-preview-bbbbbb9f2
@metamask-previews/messenger-cli@1.0.0-preview-bbbbbb9f2
@metamask-previews/mfa-recovery-controller@0.0.0-preview-bbbbbb9f2
@metamask-previews/money-account-api-data-service@2.3.1-preview-bbbbbb9f2
@metamask-previews/money-account-balance-service@3.1.2-preview-bbbbbb9f2
@metamask-previews/money-account-controller@3.0.0-preview-bbbbbb9f2
@metamask-previews/money-account-mfa-whitelist@0.1.0-preview-bbbbbb9f2
@metamask-previews/money-account-upgrade-controller@6.0.0-preview-bbbbbb9f2
@metamask-previews/money-account-utils@2.1.0-preview-bbbbbb9f2
@metamask-previews/multichain-account-service@14.1.0-preview-bbbbbb9f2
@metamask-previews/multichain-api-middleware@5.0.0-preview-bbbbbb9f2
@metamask-previews/multichain-network-controller@4.0.0-preview-bbbbbb9f2
@metamask-previews/multichain-transactions-controller@8.0.0-preview-bbbbbb9f2
@metamask-previews/name-controller@10.0.0-preview-bbbbbb9f2
@metamask-previews/network-connection-banner-controller@1.0.0-preview-bbbbbb9f2
@metamask-previews/network-controller@37.1.1-preview-bbbbbb9f2
@metamask-previews/network-enablement-controller@7.0.2-preview-bbbbbb9f2
@metamask-previews/node-utils@0.1.0-preview-bbbbbb9f2
@metamask-previews/notification-services-controller@30.1.0-preview-bbbbbb9f2
@metamask-previews/passkey-controller@4.1.0-preview-bbbbbb9f2
@metamask-previews/permission-controller@14.0.0-preview-bbbbbb9f2
@metamask-previews/permission-log-controller@6.0.0-preview-bbbbbb9f2
@metamask-previews/perps-controller@22.0.0-preview-bbbbbb9f2
@metamask-previews/phishing-controller@18.2.1-preview-bbbbbb9f2
@metamask-previews/platform-api-docs@0.2.1-preview-bbbbbb9f2
@metamask-previews/polling-controller@17.0.0-preview-bbbbbb9f2
@metamask-previews/preferences-controller@24.0.0-preview-bbbbbb9f2
@metamask-previews/profile-controller@1.2.0-preview-bbbbbb9f2
@metamask-previews/profile-metrics-controller@5.2.0-preview-bbbbbb9f2
@metamask-previews/profile-sync-controller@36.0.0-preview-bbbbbb9f2
@metamask-previews/ramps-controller@28.0.0-preview-bbbbbb9f2
@metamask-previews/rate-limit-controller@8.0.0-preview-bbbbbb9f2
@metamask-previews/react-data-query@2.0.0-preview-bbbbbb9f2
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-bbbbbb9f2
@metamask-previews/sample-controllers@6.0.0-preview-bbbbbb9f2
@metamask-previews/seedless-onboarding-controller@12.0.0-preview-bbbbbb9f2
@metamask-previews/selected-network-controller@27.0.0-preview-bbbbbb9f2
@metamask-previews/sentinel-api-service@2.1.0-preview-bbbbbb9f2
@metamask-previews/shield-controller@7.1.0-preview-bbbbbb9f2
@metamask-previews/signature-controller@40.0.0-preview-bbbbbb9f2
@metamask-previews/smart-transactions-controller@27.2.0-preview-bbbbbb9f2
@metamask-previews/snap-account-service@4.0.0-preview-bbbbbb9f2
@metamask-previews/social-controllers@3.13.0-preview-bbbbbb9f2
@metamask-previews/solana-test-validator-up@2.0.0-preview-bbbbbb9f2
@metamask-previews/stellar-quickstart-up@0.0.0-preview-bbbbbb9f2
@metamask-previews/storage-service@2.0.0-preview-bbbbbb9f2
@metamask-previews/subscription-controller@15.1.1-preview-bbbbbb9f2
@metamask-previews/transaction-controller@72.3.0-preview-bbbbbb9f2
@metamask-previews/transaction-pay-controller@30.3.1-preview-bbbbbb9f2
@metamask-previews/transaction-pay-middleware@2.0.0-preview-bbbbbb9f2
@metamask-previews/type-utils@0.1.0-preview-bbbbbb9f2
@metamask-previews/user-operation-controller@42.0.1-preview-bbbbbb9f2
@metamask-previews/utils@12.0.1-preview-bbbbbb9f2
@metamask-previews/wallet@20.0.0-preview-bbbbbb9f2
@metamask-previews/watch-only-account-service@0.1.0-preview-bbbbbb9f2

dawnseeker8 and others added 2 commits October 29, 2026 11:16
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@dawnseeker8

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

dawnseeker8 and others added 2 commits November 3, 2026 18:34
…rce.ts

Co-authored-by: Christian Tran <christian.trn@gmail.com>
Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>
@dawnseeker8
dawnseeker8 requested a review from Kriys94 November 3, 2026 10:36
dawnseeker8 and others added 2 commits November 3, 2026 18:38
…et-assets-controller

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	packages/assets-controller/CHANGELOG.md
Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>

@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.

Stale Bugbot comment from a previous run.

cursoragent and others added 2 commits November 3, 2026 10:44
…ontroller' into feat/assets-3641-wallet-assets-controller

Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
AssetsControllerInstanceOptions already requires queryApiClient, and WalletOptions requires instanceOptions.assetsController, so omitting the client is a type error. Remove the runtime throw and the test that asserted it.

Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>
@dawnseeker8

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Nov 3, 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@11.2.0-preview-fbb37663c
@metamask-previews/accounts-controller@40.1.0-preview-fbb37663c
@metamask-previews/address-book-controller@8.0.0-preview-fbb37663c
@metamask-previews/advanced-chart-core@1.0.0-preview-fbb37663c
@metamask-previews/ai-controllers@2.0.0-preview-fbb37663c
@metamask-previews/analytics-controller@4.1.0-preview-fbb37663c
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-fbb37663c
@metamask-previews/announcement-controller@9.0.0-preview-fbb37663c
@metamask-previews/app-metadata-controller@3.0.0-preview-fbb37663c
@metamask-previews/approval-controller@10.0.0-preview-fbb37663c
@metamask-previews/assets-controller@20.2.0-preview-fbb37663c
@metamask-previews/assets-controllers@113.1.0-preview-fbb37663c
@metamask-previews/authenticated-user-storage@4.1.0-preview-fbb37663c
@metamask-previews/base-controller@10.1.0-preview-fbb37663c
@metamask-previews/base-data-service@2.1.0-preview-fbb37663c
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-fbb37663c
@metamask-previews/bridge-controller@83.1.3-preview-fbb37663c
@metamask-previews/bridge-status-controller@78.0.1-preview-fbb37663c
@metamask-previews/build-utils@4.0.0-preview-fbb37663c
@metamask-previews/byte-utils@0.1.0-preview-fbb37663c
@metamask-previews/chain-agnostic-permission@2.1.0-preview-fbb37663c
@metamask-previews/chomp-api-service@7.0.0-preview-fbb37663c
@metamask-previews/claims-controller@1.1.0-preview-fbb37663c
@metamask-previews/client-controller@2.0.0-preview-fbb37663c
@metamask-previews/client-utils@3.1.0-preview-fbb37663c
@metamask-previews/compliance-controller@3.0.0-preview-fbb37663c
@metamask-previews/composable-controller@13.0.0-preview-fbb37663c
@metamask-previews/config-registry-controller@5.0.0-preview-fbb37663c
@metamask-previews/connectivity-controller@1.0.0-preview-fbb37663c
@metamask-previews/controller-utils@13.0.0-preview-fbb37663c
@metamask-previews/core-backend@13.0.0-preview-fbb37663c
@metamask-previews/cryptography@1.1.2-preview-fbb37663c
@metamask-previews/delegation-controller@4.0.0-preview-fbb37663c
@metamask-previews/earn-controller@13.0.2-preview-fbb37663c
@metamask-previews/eip-5792-middleware@4.1.0-preview-fbb37663c
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-fbb37663c
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-fbb37663c
@metamask-previews/error-utils@0.1.0-preview-fbb37663c
@metamask-previews/eth-block-tracker@16.0.0-preview-fbb37663c
@metamask-previews/eth-json-rpc-middleware@26.0.0-preview-fbb37663c
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-fbb37663c
@metamask-previews/foundryup@2.0.0-preview-fbb37663c
@metamask-previews/gas-fee-controller@27.0.0-preview-fbb37663c
@metamask-previews/gator-permissions-controller@6.1.0-preview-fbb37663c
@metamask-previews/geolocation-controller@2.0.0-preview-fbb37663c
@metamask-previews/java-tron-up@2.0.0-preview-fbb37663c
@metamask-previews/json-rpc-engine@11.0.0-preview-fbb37663c
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-fbb37663c
@metamask-previews/keyring-controller@28.2.0-preview-fbb37663c
@metamask-previews/kyc-controller@0.14.0-preview-fbb37663c
@metamask-previews/local-node-utils@2.0.0-preview-fbb37663c
@metamask-previews/logging-controller@10.0.0-preview-fbb37663c
@metamask-previews/marketing-consent-controller@1.1.0-preview-fbb37663c
@metamask-previews/message-manager@15.0.0-preview-fbb37663c
@metamask-previews/messenger@3.0.0-preview-fbb37663c
@metamask-previews/messenger-cli@1.0.0-preview-fbb37663c
@metamask-previews/mfa-recovery-controller@0.0.0-preview-fbb37663c
@metamask-previews/money-account-api-data-service@2.3.1-preview-fbb37663c
@metamask-previews/money-account-balance-service@3.1.2-preview-fbb37663c
@metamask-previews/money-account-controller@3.0.0-preview-fbb37663c
@metamask-previews/money-account-lifecycle-controller@0.0.0-preview-fbb37663c
@metamask-previews/money-account-mfa-whitelist@0.1.0-preview-fbb37663c
@metamask-previews/money-account-upgrade-controller@6.0.0-preview-fbb37663c
@metamask-previews/money-account-utils@2.2.0-preview-fbb37663c
@metamask-previews/multichain-account-service@14.1.0-preview-fbb37663c
@metamask-previews/multichain-api-middleware@5.0.0-preview-fbb37663c
@metamask-previews/multichain-network-controller@4.0.0-preview-fbb37663c
@metamask-previews/multichain-transactions-controller@8.0.0-preview-fbb37663c
@metamask-previews/name-controller@10.0.0-preview-fbb37663c
@metamask-previews/network-connection-banner-controller@1.0.0-preview-fbb37663c
@metamask-previews/network-controller@37.1.1-preview-fbb37663c
@metamask-previews/network-enablement-controller@7.1.0-preview-fbb37663c
@metamask-previews/node-utils@0.1.0-preview-fbb37663c
@metamask-previews/notification-services-controller@30.1.0-preview-fbb37663c
@metamask-previews/passkey-controller@4.1.0-preview-fbb37663c
@metamask-previews/permission-controller@14.1.0-preview-fbb37663c
@metamask-previews/permission-log-controller@6.0.0-preview-fbb37663c
@metamask-previews/perps-controller@22.1.0-preview-fbb37663c
@metamask-previews/phishing-controller@18.3.0-preview-fbb37663c
@metamask-previews/platform-api-docs@0.2.1-preview-fbb37663c
@metamask-previews/polling-controller@17.0.0-preview-fbb37663c
@metamask-previews/preferences-controller@24.0.0-preview-fbb37663c
@metamask-previews/profile-controller@1.2.1-preview-fbb37663c
@metamask-previews/profile-metrics-controller@5.2.1-preview-fbb37663c
@metamask-previews/profile-sync-controller@36.0.0-preview-fbb37663c
@metamask-previews/ramps-controller@29.0.0-preview-fbb37663c
@metamask-previews/rate-limit-controller@8.0.0-preview-fbb37663c
@metamask-previews/react-data-query@2.0.0-preview-fbb37663c
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-fbb37663c
@metamask-previews/sample-controllers@6.0.0-preview-fbb37663c
@metamask-previews/seedless-onboarding-controller@12.0.0-preview-fbb37663c
@metamask-previews/selected-network-controller@27.0.0-preview-fbb37663c
@metamask-previews/sentinel-api-service@2.1.0-preview-fbb37663c
@metamask-previews/shield-controller@7.1.1-preview-fbb37663c
@metamask-previews/signature-controller@40.0.0-preview-fbb37663c
@metamask-previews/smart-transactions-controller@27.2.1-preview-fbb37663c
@metamask-previews/snap-account-service@4.0.0-preview-fbb37663c
@metamask-previews/social-controllers@3.15.0-preview-fbb37663c
@metamask-previews/solana-test-validator-up@2.0.0-preview-fbb37663c
@metamask-previews/stellar-quickstart-up@0.0.0-preview-fbb37663c
@metamask-previews/storage-service@2.0.0-preview-fbb37663c
@metamask-previews/subscription-controller@15.1.2-preview-fbb37663c
@metamask-previews/transaction-controller@73.0.0-preview-fbb37663c
@metamask-previews/transaction-pay-controller@30.3.3-preview-fbb37663c
@metamask-previews/transaction-pay-middleware@2.0.1-preview-fbb37663c
@metamask-previews/type-utils@0.1.0-preview-fbb37663c
@metamask-previews/user-operation-controller@42.1.0-preview-fbb37663c
@metamask-previews/utils@12.0.1-preview-fbb37663c
@metamask-previews/wallet@21.0.0-preview-fbb37663c
@metamask-previews/watch-only-account-service@0.1.0-preview-fbb37663c

…et-assets-controller

Keep both Unreleased assets-controller changelog entries. Call AssetsController.init() in the launchpad filtering integration test so supported-network discovery still runs after messenger reads moved out of the constructor.

Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>

@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.

Stale Bugbot comment from a previous run.

…f the constructor

The constructor no longer calls messenger actions, creates data sources or
subscribes to external events, so construction does not depend on the order
in which the Wallet constructs controllers.

A new public `start()` method (also the `AssetsController:start` messenger
action) reads enabled networks, creates the data sources, subscribes to
external events and basic-functionality changes, runs the unlock cleanups
when the keyring is already unlocked, and starts asset tracking. Clients
call it once their own controllers (AccountTreeController, SnapController,
...) are registered, since `wallet.init()` runs before those exist.

Data sources are unchanged from main: their constructors still read other
controllers, only later. This replaces the per-data-source `init()` methods
and the "controller not registered" fallbacks, which are removed. Entry
points that can run before `start()` are guarded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dawnseeker8 dawnseeker8 changed the title feat(wallet): initialize AssetsController by default and defer messenger reads to init feat(wallet): initialize AssetsController by default and start it from the client Nov 4, 2026

@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.

Stale Bugbot comment from a previous run.

cursoragent and others added 2 commits November 4, 2026 08:35
… fetch

start() created AccountsApiDataSource and force-fetched before its
supported-networks request settled, so the first fetch ran with an empty
activeChains list and skipped the Accounts API.

Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>
…he first fetch"

This reverts commit 8093c7c.

Co-authored-by: Xiaoming Wang <dawnseeker8@users.noreply.github.com>

@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 using default effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

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 8093c7c. Configure here.

… fetch

`start()` created `AccountsApiDataSource` and could begin tracking before the
source's async supported-networks fetch resolved. The first forced fetch then
saw no Accounts API chains and routed every chain to the Snap/RPC lane.

`start()` now awaits `AccountsApiDataSource.refreshActiveChains()` (which
shares the in-flight `fetchQuery` request) alongside the unlock cleanups, and
ignores data source chain updates until it has finished, so an early update
cannot subscribe ahead of the startup refresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dawnseeker8

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Nov 4, 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@11.2.0-preview-713f7d759
@metamask-previews/accounts-controller@40.1.0-preview-713f7d759
@metamask-previews/address-book-controller@8.0.0-preview-713f7d759
@metamask-previews/advanced-chart-core@1.0.0-preview-713f7d759
@metamask-previews/ai-controllers@2.0.0-preview-713f7d759
@metamask-previews/analytics-controller@4.1.0-preview-713f7d759
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-713f7d759
@metamask-previews/announcement-controller@9.0.0-preview-713f7d759
@metamask-previews/app-metadata-controller@3.0.0-preview-713f7d759
@metamask-previews/approval-controller@10.0.0-preview-713f7d759
@metamask-previews/assets-controller@20.2.0-preview-713f7d759
@metamask-previews/assets-controllers@113.1.0-preview-713f7d759
@metamask-previews/authenticated-user-storage@4.1.0-preview-713f7d759
@metamask-previews/base-controller@10.1.0-preview-713f7d759
@metamask-previews/base-data-service@2.1.0-preview-713f7d759
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-713f7d759
@metamask-previews/bridge-controller@83.1.3-preview-713f7d759
@metamask-previews/bridge-status-controller@78.0.1-preview-713f7d759
@metamask-previews/build-utils@4.0.0-preview-713f7d759
@metamask-previews/byte-utils@0.1.0-preview-713f7d759
@metamask-previews/chain-agnostic-permission@2.1.0-preview-713f7d759
@metamask-previews/chomp-api-service@7.0.0-preview-713f7d759
@metamask-previews/claims-controller@1.1.0-preview-713f7d759
@metamask-previews/client-controller@2.0.0-preview-713f7d759
@metamask-previews/client-utils@3.1.0-preview-713f7d759
@metamask-previews/compliance-controller@3.0.0-preview-713f7d759
@metamask-previews/composable-controller@13.0.0-preview-713f7d759
@metamask-previews/config-registry-controller@5.0.0-preview-713f7d759
@metamask-previews/connectivity-controller@1.0.0-preview-713f7d759
@metamask-previews/controller-utils@13.0.0-preview-713f7d759
@metamask-previews/core-backend@13.0.0-preview-713f7d759
@metamask-previews/cryptography@1.1.2-preview-713f7d759
@metamask-previews/delegation-controller@4.0.0-preview-713f7d759
@metamask-previews/earn-controller@13.0.2-preview-713f7d759
@metamask-previews/eip-5792-middleware@4.1.0-preview-713f7d759
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-713f7d759
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-713f7d759
@metamask-previews/error-utils@0.1.0-preview-713f7d759
@metamask-previews/eth-block-tracker@16.0.0-preview-713f7d759
@metamask-previews/eth-json-rpc-middleware@26.0.0-preview-713f7d759
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-713f7d759
@metamask-previews/foundryup@2.0.0-preview-713f7d759
@metamask-previews/gas-fee-controller@27.0.0-preview-713f7d759
@metamask-previews/gator-permissions-controller@6.1.0-preview-713f7d759
@metamask-previews/geolocation-controller@2.0.0-preview-713f7d759
@metamask-previews/java-tron-up@2.0.0-preview-713f7d759
@metamask-previews/json-rpc-engine@11.0.0-preview-713f7d759
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-713f7d759
@metamask-previews/keyring-controller@28.2.0-preview-713f7d759
@metamask-previews/kyc-controller@0.15.0-preview-713f7d759
@metamask-previews/local-node-utils@2.0.0-preview-713f7d759
@metamask-previews/logging-controller@10.0.0-preview-713f7d759
@metamask-previews/marketing-consent-controller@1.1.0-preview-713f7d759
@metamask-previews/message-manager@15.0.0-preview-713f7d759
@metamask-previews/messenger@3.0.0-preview-713f7d759
@metamask-previews/messenger-cli@1.0.0-preview-713f7d759
@metamask-previews/mfa-recovery-controller@0.0.0-preview-713f7d759
@metamask-previews/money-account-api-data-service@2.3.1-preview-713f7d759
@metamask-previews/money-account-balance-service@3.1.2-preview-713f7d759
@metamask-previews/money-account-controller@3.0.0-preview-713f7d759
@metamask-previews/money-account-lifecycle-controller@0.0.0-preview-713f7d759
@metamask-previews/money-account-mfa-whitelist@0.2.0-preview-713f7d759
@metamask-previews/money-account-upgrade-controller@6.0.0-preview-713f7d759
@metamask-previews/money-account-utils@2.2.0-preview-713f7d759
@metamask-previews/multichain-account-service@14.1.0-preview-713f7d759
@metamask-previews/multichain-api-middleware@5.0.0-preview-713f7d759
@metamask-previews/multichain-network-controller@4.0.0-preview-713f7d759
@metamask-previews/multichain-transactions-controller@8.0.0-preview-713f7d759
@metamask-previews/name-controller@10.0.0-preview-713f7d759
@metamask-previews/network-connection-banner-controller@1.0.0-preview-713f7d759
@metamask-previews/network-controller@37.1.1-preview-713f7d759
@metamask-previews/network-enablement-controller@7.1.0-preview-713f7d759
@metamask-previews/node-utils@0.1.0-preview-713f7d759
@metamask-previews/notification-services-controller@30.1.0-preview-713f7d759
@metamask-previews/passkey-controller@4.1.0-preview-713f7d759
@metamask-previews/permission-controller@14.1.0-preview-713f7d759
@metamask-previews/permission-log-controller@6.0.0-preview-713f7d759
@metamask-previews/perps-controller@22.1.1-preview-713f7d759
@metamask-previews/phishing-controller@18.3.0-preview-713f7d759
@metamask-previews/platform-api-docs@0.2.1-preview-713f7d759
@metamask-previews/polling-controller@17.0.0-preview-713f7d759
@metamask-previews/preferences-controller@24.0.0-preview-713f7d759
@metamask-previews/profile-controller@1.2.1-preview-713f7d759
@metamask-previews/profile-metrics-controller@5.2.1-preview-713f7d759
@metamask-previews/profile-sync-controller@36.0.0-preview-713f7d759
@metamask-previews/ramps-controller@29.0.0-preview-713f7d759
@metamask-previews/rate-limit-controller@8.0.0-preview-713f7d759
@metamask-previews/react-data-query@2.0.0-preview-713f7d759
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-713f7d759
@metamask-previews/sample-controllers@6.0.0-preview-713f7d759
@metamask-previews/seedless-onboarding-controller@12.0.0-preview-713f7d759
@metamask-previews/selected-network-controller@27.0.0-preview-713f7d759
@metamask-previews/sentinel-api-service@2.1.0-preview-713f7d759
@metamask-previews/shield-controller@7.1.1-preview-713f7d759
@metamask-previews/signature-controller@40.0.0-preview-713f7d759
@metamask-previews/smart-transactions-controller@27.2.1-preview-713f7d759
@metamask-previews/snap-account-service@4.0.0-preview-713f7d759
@metamask-previews/social-controllers@3.15.0-preview-713f7d759
@metamask-previews/solana-test-validator-up@2.0.0-preview-713f7d759
@metamask-previews/stellar-quickstart-up@0.0.0-preview-713f7d759
@metamask-previews/storage-service@2.0.0-preview-713f7d759
@metamask-previews/subscription-controller@15.1.2-preview-713f7d759
@metamask-previews/transaction-controller@73.0.0-preview-713f7d759
@metamask-previews/transaction-pay-controller@30.4.0-preview-713f7d759
@metamask-previews/transaction-pay-middleware@2.0.1-preview-713f7d759
@metamask-previews/type-utils@0.1.0-preview-713f7d759
@metamask-previews/user-operation-controller@42.1.0-preview-713f7d759
@metamask-previews/utils@12.0.1-preview-713f7d759
@metamask-previews/wallet@21.0.0-preview-713f7d759
@metamask-previews/watch-only-account-service@0.1.0-preview-713f7d759

This branch was previously deployed

1 inactive (outdated) deployment
default-branch — 55fcf3ef Deployed Oct 28, 2026 by dawnseeker8 via Determine whether this PR is a release PR #6164
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.

6 participants