core icon indicating copy to clipboard operation
core copied to clipboard

feat(account-tree-controller): use `multichain-account-service` to build multichain account wallet/group nodes

Open ccharly opened this issue 5 months ago • 10 comments

Explanation

The multichain-account-service is responsible of holding/grouping all BIP-44 accounts together (in wallets and groups).

The account-tree-controller was re-using a similar matching logic to build it's tree and match those wallets and groups. But... In reality, this is the responsibility of the service and thus, the controller should "consume" the wallets/groups from the service directly.

Architecture wise, this is more correct, and other kind of wallets could follow the same pattern (having 1 wallet for each keyring types and 1 wallet for each other kind of account management Snaps).

References

N/A

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, highlighting breaking changes as necessary
  • [ ] I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

[!NOTE] Switches multichain (BIP-44) wallet/group construction to MultichainAccountService, listening to its events and skipping BIP-44 in AccountsController event handling.

  • Controller (core):
    • Use MultichainAccountService:getMultichainAccountWallets to build AccountWalletType.Entropy wallets and MultichainAccount groups; remove entropy matching from controller.
    • Listen to MultichainAccountService:{multichainAccountGroupCreated,multichainAccountGroupUpdated,walletStatusChange} to insert/update groups and wallet status post-init.
    • Skip BIP-44 accounts on AccountsController:account{Added,Removed}; only process non-BIP-44 (Snap/Keyring) accounts.
    • Refactor naming: introduce getEntropyDefaultAccountWalletName and getEntropyDefaultAccountGroupPrefix; keep computed group names with EVM priority and conflict resolution.
    • Maintain reverse mappings, pruning, ordering, and selected-group sync; add sorting helper for group accounts.
  • Rules (entropy):
    • Replace EntropyRule class with pure helpers: getEntropyDefaultAccountWalletName, getEntropyComputedAccountGroupName, getEntropyDefaultAccountGroupPrefix.
  • Types/Messaging:
    • Extend messenger actions/events to include MultichainAccountService wallets and group events.
  • Tests:
    • Update/expand tests to validate service-driven wallet/group creation, event handling, ordering, selection sync, and non-BIP-44 add/remove paths.
  • Changelog:
    • Mark BREAKING: multichain (BIP-44) nodes now sourced from MultichainAccountService.

Written by Cursor Bugbot for commit 88cb1ba9b59ccba0cee60a8226429e50aa314614. This will update automatically on new commits. Configure here.

ccharly avatar Sep 17 '25 20:09 ccharly

@metamaskbot publish-preview

ccharly avatar Sep 17 '25 21:09 ccharly

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "0.15.1-preview-4390b9dd",
  "@metamask-previews/accounts-controller": "33.1.0-preview-4390b9dd",
  "@metamask-previews/address-book-controller": "6.1.1-preview-4390b9dd",
  "@metamask-previews/announcement-controller": "7.0.3-preview-4390b9dd",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-4390b9dd",
  "@metamask-previews/approval-controller": "7.1.3-preview-4390b9dd",
  "@metamask-previews/assets-controllers": "75.2.0-preview-4390b9dd",
  "@metamask-previews/base-controller": "8.4.0-preview-4390b9dd",
  "@metamask-previews/bridge-controller": "43.0.0-preview-4390b9dd",
  "@metamask-previews/bridge-status-controller": "43.0.0-preview-4390b9dd",
  "@metamask-previews/build-utils": "3.0.3-preview-4390b9dd",
  "@metamask-previews/chain-agnostic-permission": "1.1.1-preview-4390b9dd",
  "@metamask-previews/composable-controller": "11.0.0-preview-4390b9dd",
  "@metamask-previews/controller-utils": "11.14.0-preview-4390b9dd",
  "@metamask-previews/delegation-controller": "0.7.0-preview-4390b9dd",
  "@metamask-previews/earn-controller": "7.0.0-preview-4390b9dd",
  "@metamask-previews/eip-5792-middleware": "1.1.0-preview-4390b9dd",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-4390b9dd",
  "@metamask-previews/ens-controller": "17.0.1-preview-4390b9dd",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-4390b9dd",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-4390b9dd",
  "@metamask-previews/foundryup": "1.0.1-preview-4390b9dd",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-4390b9dd",
  "@metamask-previews/gator-permissions-controller": "0.1.0-preview-4390b9dd",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-4390b9dd",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-4390b9dd",
  "@metamask-previews/keyring-controller": "23.1.0-preview-4390b9dd",
  "@metamask-previews/logging-controller": "6.0.4-preview-4390b9dd",
  "@metamask-previews/message-manager": "12.0.2-preview-4390b9dd",
  "@metamask-previews/messenger": "0.3.0-preview-4390b9dd",
  "@metamask-previews/multichain-account-service": "0.8.0-preview-4390b9dd",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-4390b9dd",
  "@metamask-previews/multichain-network-controller": "0.12.0-preview-4390b9dd",
  "@metamask-previews/multichain-transactions-controller": "5.0.0-preview-4390b9dd",
  "@metamask-previews/name-controller": "8.0.3-preview-4390b9dd",
  "@metamask-previews/network-controller": "24.1.0-preview-4390b9dd",
  "@metamask-previews/network-enablement-controller": "1.1.0-preview-4390b9dd",
  "@metamask-previews/notification-services-controller": "18.1.0-preview-4390b9dd",
  "@metamask-previews/permission-controller": "11.0.6-preview-4390b9dd",
  "@metamask-previews/permission-log-controller": "4.0.0-preview-4390b9dd",
  "@metamask-previews/phishing-controller": "13.1.0-preview-4390b9dd",
  "@metamask-previews/polling-controller": "14.0.0-preview-4390b9dd",
  "@metamask-previews/preferences-controller": "19.0.0-preview-4390b9dd",
  "@metamask-previews/profile-sync-controller": "25.0.0-preview-4390b9dd",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-4390b9dd",
  "@metamask-previews/remote-feature-flag-controller": "1.7.0-preview-4390b9dd",
  "@metamask-previews/sample-controllers": "1.0.0-preview-4390b9dd",
  "@metamask-previews/seedless-onboarding-controller": "4.0.0-preview-4390b9dd",
  "@metamask-previews/selected-network-controller": "24.0.0-preview-4390b9dd",
  "@metamask-previews/shield-controller": "0.1.2-preview-4390b9dd",
  "@metamask-previews/signature-controller": "33.0.0-preview-4390b9dd",
  "@metamask-previews/subscription-controller": "0.1.0-preview-4390b9dd",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-4390b9dd",
  "@metamask-previews/transaction-controller": "60.3.0-preview-4390b9dd",
  "@metamask-previews/user-operation-controller": "39.0.0-preview-4390b9dd"
}

github-actions[bot] avatar Sep 17 '25 21:09 github-actions[bot]

@metamaskbot publish-preview

ccharly avatar Sep 17 '25 21:09 ccharly

@metamaskbot publish-preview

ccharly avatar Sep 18 '25 07:09 ccharly

@metamaskbot publish-preview

ccharly avatar Sep 18 '25 08:09 ccharly

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "0.16.1-preview-591781b",
  "@metamask-previews/accounts-controller": "33.1.0-preview-591781b",
  "@metamask-previews/address-book-controller": "6.1.1-preview-591781b",
  "@metamask-previews/announcement-controller": "7.0.3-preview-591781b",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-591781b",
  "@metamask-previews/approval-controller": "7.1.3-preview-591781b",
  "@metamask-previews/assets-controllers": "75.2.0-preview-591781b",
  "@metamask-previews/base-controller": "8.4.0-preview-591781b",
  "@metamask-previews/bridge-controller": "43.1.0-preview-591781b",
  "@metamask-previews/bridge-status-controller": "43.1.0-preview-591781b",
  "@metamask-previews/build-utils": "3.0.3-preview-591781b",
  "@metamask-previews/chain-agnostic-permission": "1.1.1-preview-591781b",
  "@metamask-previews/composable-controller": "11.0.0-preview-591781b",
  "@metamask-previews/controller-utils": "11.14.0-preview-591781b",
  "@metamask-previews/delegation-controller": "0.7.0-preview-591781b",
  "@metamask-previews/earn-controller": "7.0.0-preview-591781b",
  "@metamask-previews/eip-5792-middleware": "1.1.0-preview-591781b",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-591781b",
  "@metamask-previews/ens-controller": "17.0.1-preview-591781b",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-591781b",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-591781b",
  "@metamask-previews/foundryup": "1.0.1-preview-591781b",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-591781b",
  "@metamask-previews/gator-permissions-controller": "0.1.0-preview-591781b",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-591781b",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-591781b",
  "@metamask-previews/keyring-controller": "23.1.0-preview-591781b",
  "@metamask-previews/logging-controller": "6.0.4-preview-591781b",
  "@metamask-previews/message-manager": "12.0.2-preview-591781b",
  "@metamask-previews/messenger": "0.3.0-preview-591781b",
  "@metamask-previews/multichain-account-service": "0.9.0-preview-591781b",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-591781b",
  "@metamask-previews/multichain-network-controller": "0.12.0-preview-591781b",
  "@metamask-previews/multichain-transactions-controller": "5.0.0-preview-591781b",
  "@metamask-previews/name-controller": "8.0.3-preview-591781b",
  "@metamask-previews/network-controller": "24.1.0-preview-591781b",
  "@metamask-previews/network-enablement-controller": "1.1.0-preview-591781b",
  "@metamask-previews/notification-services-controller": "18.1.0-preview-591781b",
  "@metamask-previews/permission-controller": "11.0.6-preview-591781b",
  "@metamask-previews/permission-log-controller": "4.0.0-preview-591781b",
  "@metamask-previews/phishing-controller": "13.1.0-preview-591781b",
  "@metamask-previews/polling-controller": "14.0.0-preview-591781b",
  "@metamask-previews/preferences-controller": "19.0.0-preview-591781b",
  "@metamask-previews/profile-sync-controller": "25.0.0-preview-591781b",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-591781b",
  "@metamask-previews/remote-feature-flag-controller": "1.7.0-preview-591781b",
  "@metamask-previews/sample-controllers": "1.0.0-preview-591781b",
  "@metamask-previews/seedless-onboarding-controller": "4.0.0-preview-591781b",
  "@metamask-previews/selected-network-controller": "24.0.0-preview-591781b",
  "@metamask-previews/shield-controller": "0.1.2-preview-591781b",
  "@metamask-previews/signature-controller": "33.0.0-preview-591781b",
  "@metamask-previews/subscription-controller": "0.1.0-preview-591781b",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-591781b",
  "@metamask-previews/transaction-controller": "60.4.0-preview-591781b",
  "@metamask-previews/user-operation-controller": "39.0.0-preview-591781b"
}

github-actions[bot] avatar Sep 18 '25 08:09 github-actions[bot]

@metamaskbot publish-preview

ccharly avatar Oct 22 '25 12:10 ccharly

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "1.5.0-preview-53e28985",
  "@metamask-previews/accounts-controller": "33.1.1-preview-53e28985",
  "@metamask-previews/address-book-controller": "6.2.0-preview-53e28985",
  "@metamask-previews/announcement-controller": "7.1.0-preview-53e28985",
  "@metamask-previews/app-metadata-controller": "1.1.0-preview-53e28985",
  "@metamask-previews/approval-controller": "7.2.0-preview-53e28985",
  "@metamask-previews/assets-controllers": "82.0.0-preview-53e28985",
  "@metamask-previews/base-controller": "8.4.2-preview-53e28985",
  "@metamask-previews/bridge-controller": "54.0.0-preview-53e28985",
  "@metamask-previews/bridge-status-controller": "54.0.0-preview-53e28985",
  "@metamask-previews/build-utils": "3.0.4-preview-53e28985",
  "@metamask-previews/chain-agnostic-permission": "1.2.0-preview-53e28985",
  "@metamask-previews/composable-controller": "11.1.0-preview-53e28985",
  "@metamask-previews/controller-utils": "11.14.1-preview-53e28985",
  "@metamask-previews/core-backend": "2.1.0-preview-53e28985",
  "@metamask-previews/delegation-controller": "0.8.0-preview-53e28985",
  "@metamask-previews/earn-controller": "8.0.1-preview-53e28985",
  "@metamask-previews/eip-5792-middleware": "1.2.3-preview-53e28985",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-53e28985",
  "@metamask-previews/eip1193-permission-middleware": "1.0.1-preview-53e28985",
  "@metamask-previews/ens-controller": "17.1.0-preview-53e28985",
  "@metamask-previews/error-reporting-service": "2.2.1-preview-53e28985",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-53e28985",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-53e28985",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-53e28985",
  "@metamask-previews/foundryup": "1.0.1-preview-53e28985",
  "@metamask-previews/gas-fee-controller": "24.1.0-preview-53e28985",
  "@metamask-previews/gator-permissions-controller": "0.2.1-preview-53e28985",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-53e28985",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-53e28985",
  "@metamask-previews/keyring-controller": "23.1.1-preview-53e28985",
  "@metamask-previews/logging-controller": "6.1.0-preview-53e28985",
  "@metamask-previews/message-manager": "13.0.1-preview-53e28985",
  "@metamask-previews/messenger": "0.3.0-preview-53e28985",
  "@metamask-previews/multichain-account-service": "1.6.1-preview-53e28985",
  "@metamask-previews/multichain-api-middleware": "1.2.1-preview-53e28985",
  "@metamask-previews/multichain-network-controller": "1.0.1-preview-53e28985",
  "@metamask-previews/multichain-transactions-controller": "5.1.0-preview-53e28985",
  "@metamask-previews/name-controller": "8.1.0-preview-53e28985",
  "@metamask-previews/network-controller": "24.3.0-preview-53e28985",
  "@metamask-previews/network-enablement-controller": "2.1.1-preview-53e28985",
  "@metamask-previews/notification-services-controller": "18.3.0-preview-53e28985",
  "@metamask-previews/permission-controller": "11.1.0-preview-53e28985",
  "@metamask-previews/permission-log-controller": "4.1.0-preview-53e28985",
  "@metamask-previews/phishing-controller": "14.1.2-preview-53e28985",
  "@metamask-previews/polling-controller": "14.0.1-preview-53e28985",
  "@metamask-previews/preferences-controller": "20.1.0-preview-53e28985",
  "@metamask-previews/profile-sync-controller": "25.1.1-preview-53e28985",
  "@metamask-previews/rate-limit-controller": "6.1.0-preview-53e28985",
  "@metamask-previews/remote-feature-flag-controller": "1.9.0-preview-53e28985",
  "@metamask-previews/sample-controllers": "2.0.1-preview-53e28985",
  "@metamask-previews/seedless-onboarding-controller": "4.1.0-preview-53e28985",
  "@metamask-previews/selected-network-controller": "24.0.1-preview-53e28985",
  "@metamask-previews/shield-controller": "0.3.2-preview-53e28985",
  "@metamask-previews/signature-controller": "34.0.1-preview-53e28985",
  "@metamask-previews/subscription-controller": "2.0.0-preview-53e28985",
  "@metamask-previews/token-search-discovery-controller": "3.5.0-preview-53e28985",
  "@metamask-previews/transaction-controller": "60.9.0-preview-53e28985",
  "@metamask-previews/user-operation-controller": "39.2.0-preview-53e28985"
}

github-actions[bot] avatar Oct 22 '25 13:10 github-actions[bot]

@metamaskbot publish-previews

ccharly avatar Oct 29 '25 14:10 ccharly

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "2.0.0-preview-3d9bbf60",
  "@metamask-previews/accounts-controller": "34.0.0-preview-3d9bbf60",
  "@metamask-previews/address-book-controller": "7.0.0-preview-3d9bbf60",
  "@metamask-previews/announcement-controller": "8.0.0-preview-3d9bbf60",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-3d9bbf60",
  "@metamask-previews/approval-controller": "8.0.0-preview-3d9bbf60",
  "@metamask-previews/assets-controllers": "84.0.0-preview-3d9bbf60",
  "@metamask-previews/base-controller": "9.0.0-preview-3d9bbf60",
  "@metamask-previews/bridge-controller": "56.0.0-preview-3d9bbf60",
  "@metamask-previews/bridge-status-controller": "56.0.0-preview-3d9bbf60",
  "@metamask-previews/build-utils": "3.0.4-preview-3d9bbf60",
  "@metamask-previews/chain-agnostic-permission": "1.2.1-preview-3d9bbf60",
  "@metamask-previews/composable-controller": "12.0.0-preview-3d9bbf60",
  "@metamask-previews/controller-utils": "11.14.1-preview-3d9bbf60",
  "@metamask-previews/core-backend": "4.0.0-preview-3d9bbf60",
  "@metamask-previews/delegation-controller": "1.0.0-preview-3d9bbf60",
  "@metamask-previews/earn-controller": "9.0.0-preview-3d9bbf60",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-3d9bbf60",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-3d9bbf60",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-3d9bbf60",
  "@metamask-previews/ens-controller": "18.0.0-preview-3d9bbf60",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-3d9bbf60",
  "@metamask-previews/eth-block-tracker": "14.0.0-preview-3d9bbf60",
  "@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-3d9bbf60",
  "@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-3d9bbf60",
  "@metamask-previews/foundryup": "1.0.1-preview-3d9bbf60",
  "@metamask-previews/gas-fee-controller": "25.0.0-preview-3d9bbf60",
  "@metamask-previews/gator-permissions-controller": "0.3.0-preview-3d9bbf60",
  "@metamask-previews/json-rpc-engine": "10.1.1-preview-3d9bbf60",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-3d9bbf60",
  "@metamask-previews/keyring-controller": "24.0.0-preview-3d9bbf60",
  "@metamask-previews/logging-controller": "7.0.0-preview-3d9bbf60",
  "@metamask-previews/message-manager": "14.0.0-preview-3d9bbf60",
  "@metamask-previews/messenger": "0.3.0-preview-3d9bbf60",
  "@metamask-previews/multichain-account-service": "2.0.0-preview-3d9bbf60",
  "@metamask-previews/multichain-api-middleware": "1.2.2-preview-3d9bbf60",
  "@metamask-previews/multichain-network-controller": "2.0.0-preview-3d9bbf60",
  "@metamask-previews/multichain-transactions-controller": "6.0.0-preview-3d9bbf60",
  "@metamask-previews/name-controller": "9.0.0-preview-3d9bbf60",
  "@metamask-previews/network-controller": "25.0.0-preview-3d9bbf60",
  "@metamask-previews/network-enablement-controller": "3.0.0-preview-3d9bbf60",
  "@metamask-previews/notification-services-controller": "19.0.0-preview-3d9bbf60",
  "@metamask-previews/permission-controller": "12.0.0-preview-3d9bbf60",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-3d9bbf60",
  "@metamask-previews/phishing-controller": "15.0.0-preview-3d9bbf60",
  "@metamask-previews/polling-controller": "15.0.0-preview-3d9bbf60",
  "@metamask-previews/preferences-controller": "21.0.0-preview-3d9bbf60",
  "@metamask-previews/profile-sync-controller": "26.0.0-preview-3d9bbf60",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-3d9bbf60",
  "@metamask-previews/remote-feature-flag-controller": "2.0.0-preview-3d9bbf60",
  "@metamask-previews/sample-controllers": "3.0.0-preview-3d9bbf60",
  "@metamask-previews/seedless-onboarding-controller": "5.0.0-preview-3d9bbf60",
  "@metamask-previews/selected-network-controller": "25.0.0-preview-3d9bbf60",
  "@metamask-previews/shield-controller": "1.0.0-preview-3d9bbf60",
  "@metamask-previews/signature-controller": "35.0.0-preview-3d9bbf60",
  "@metamask-previews/subscription-controller": "3.0.0-preview-3d9bbf60",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-3d9bbf60",
  "@metamask-previews/transaction-controller": "61.0.0-preview-3d9bbf60",
  "@metamask-previews/user-operation-controller": "40.0.0-preview-3d9bbf60"
}

github-actions[bot] avatar Oct 29 '25 14:10 github-actions[bot]