Skip to content

feat(account-tree-controller)!: add {import,export}State actions - #9663

Draft
ccharly wants to merge 62 commits into
mainfrom
cc/feat/account-tree-export-import
Draft

feat(account-tree-controller)!: add {import,export}State actions#9663
ccharly wants to merge 62 commits into
mainfrom
cc/feat/account-tree-export-import

Conversation

@ccharly

@ccharly ccharly commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Explanation

New {export,import}State actions.

This is the implementation for this ADR:

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

@ccharly

ccharly commented Jul 27, 2026

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

@ccharly

ccharly commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

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

@ccharly

ccharly commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@ccharly ccharly changed the title feat(account-tree-controller): add {import,export}State actions feat(account-tree-controller)!: add {import,export}State actions Aug 7, 2026
@ccharly

ccharly commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@ccharly

ccharly commented Aug 10, 2026

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

pull Bot pushed a commit to dmrazzy/core that referenced this pull request Aug 10, 2026
… `ensureReady` (MetaMask#9812)

## Explanation

If we try to create a multichain account wallet during onboarding, the
post-alignment part (e.g. non-EVM account creations) is locking this
wallet's lock until onboarding is completed.

This prevents any other kind of operations on that wallet that requires
the wallet's mutex to be locked again.

This is what we do now for the QR sync wallet during onboarding, like:
- 1 - QR sync payload is received
- 2 - The primary SRP gets created (onboarding still pending)
- Post-alignment is scheduled and **LOCKS the wallet's mutex** (non-EVM
creation part, since
`waitForAllProvidersToFinishCreatingAccounts=false`)
- 3 - Password is set (onboarding still pending)
- Vault got created now, we proceed with the rest of QR sync flow
(remaining wallets + importing metadata)
- 4 - We try to import wallet's metadata for the primary wallet
- 💥 **Wallet's mutex is already LOCKED (during step 2)**, the onboarding
cannot proceed -> deadlock 💥

To prevent this from happening, we now guard every post-alignment with a
call to `ensureReady` on each providers before proceeding. This makes
sure we only schedule wallet's operation once the providers are ready to
proceed anything.

In the case of the `SnapAccountProvider`, this means they will wait for
the Snap platform to boot up before starting to lock the wallet's mutex,
solving the initial issue "naturally".

## References

- MetaMask#9663

## 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](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

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes wallet locking order during group creation—a sensitive
concurrency path—but scope is limited to deferred post-alignment and
includes tests for lock timing and partial provider failure.
> 
> **Overview**
> Fixes a **deadlock during onboarding** when non-EVM post-alignment ran
under the wallet mutex while Snap providers were still waiting for the
platform—blocking later steps such as QR sync metadata import.
> 
> **Fire-and-forget post-alignment** (when
`waitForAllProvidersToFinishCreatingAccounts` is false) now calls
**`ensureReady` on all non-EVM providers before** acquiring the
alignment lock. Only providers that become ready are aligned; failures
are logged and skipped so a later explicit alignment can recover them.
> 
> The **`ensureReady`** hook is added to the BIP-44 provider contract
(no-op on base/EVM, delegated through **`AccountProviderWrapper`**, Snap
waits via **`SnapAccountService:ensureReady`**).
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
954eab5. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updated@​metamask/​keyring-api@​24.0.0 ⏵ 24.1.0100 +110010099 +150
Added@​metamask-previews/​keyring-sdk@​3.1.0-00307a3761008696100

View full report

@ccharly

ccharly commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

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