From 7d4818618050e78b0494475cdd40e0528edcc96c Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 15 Sep 2025 17:42:42 +0200 Subject: [PATCH 1/3] fix(account-tree-controller): use getSelectedMultichainAccount --- .../src/AccountTreeController.test.ts | 42 +++++++++---------- .../src/AccountTreeController.ts | 2 +- packages/account-tree-controller/src/types.ts | 4 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/account-tree-controller/src/AccountTreeController.test.ts b/packages/account-tree-controller/src/AccountTreeController.test.ts index d1cccf431bf..a2fcfc3b609 100644 --- a/packages/account-tree-controller/src/AccountTreeController.test.ts +++ b/packages/account-tree-controller/src/AccountTreeController.test.ts @@ -229,7 +229,7 @@ function getAccountTreeControllerMessenger( allowedActions: [ 'AccountsController:listMultichainAccounts', 'AccountsController:getAccount', - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', 'AccountsController:setSelectedAccount', 'UserStorageController:getState', 'UserStorageController:performGetStorage', @@ -305,7 +305,7 @@ function setup({ AccountsController: { accounts: InternalAccount[]; listMultichainAccounts: jest.Mock; - getSelectedAccount: jest.Mock; + getSelectedMultichainAccount: jest.Mock; getAccount: jest.Mock; }; UserStorageController: { @@ -329,7 +329,7 @@ function setup({ accounts, listMultichainAccounts: jest.fn(), getAccount: jest.fn(), - getSelectedAccount: jest.fn(), + getSelectedMultichainAccount: jest.fn(), }, UserStorageController: { getState: jest.fn(), @@ -366,13 +366,13 @@ function setup({ mocks.AccountsController.getAccount, ); - // Mock AccountsController:getSelectedAccount to return the first account - mocks.AccountsController.getSelectedAccount.mockImplementation( + // Mock AccountsController:getSelectedMultichainAccount to return the first account + mocks.AccountsController.getSelectedMultichainAccount.mockImplementation( () => accounts[0] || MOCK_HD_ACCOUNT_1, ); messenger.registerActionHandler( - 'AccountsController:getSelectedAccount', - mocks.AccountsController.getSelectedAccount, + 'AccountsController:getSelectedMultichainAccount', + mocks.AccountsController.getSelectedMultichainAccount, ); // Mock AccountsController:setSelectedAccount @@ -750,7 +750,7 @@ describe('AccountTreeController', () => { keyrings: [MOCK_HD_KEYRING_1], }); - mocks.AccountsController.getSelectedAccount.mockImplementation( + mocks.AccountsController.getSelectedMultichainAccount.mockImplementation( () => MOCK_HD_ACCOUNT_1, ); @@ -767,7 +767,7 @@ describe('AccountTreeController', () => { mocks.AccountsController.accounts = [MOCK_HD_ACCOUNT_2]; mocks.KeyringController.keyrings = [MOCK_HD_KEYRING_2]; - mocks.AccountsController.getSelectedAccount.mockImplementation( + mocks.AccountsController.getSelectedMultichainAccount.mockImplementation( () => MOCK_HD_ACCOUNT_2, ); @@ -1554,10 +1554,10 @@ describe('AccountTreeController', () => { // Unregister existing handler and register new one BEFORE init messenger.unregisterActionHandler( - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', ); messenger.registerActionHandler( - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', () => EMPTY_ACCOUNT_MOCK, ); @@ -1581,17 +1581,17 @@ describe('AccountTreeController', () => { keyrings: [MOCK_HD_KEYRING_1, MOCK_HD_KEYRING_2], }); - // Mock getSelectedAccount to return an account not in the tree BEFORE init + // Mock getSelectedMultichainAccount to return an account not in the tree BEFORE init const unknownAccount: InternalAccount = { ...MOCK_HD_ACCOUNT_1, id: 'unknown-account-id', }; messenger.unregisterActionHandler( - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', ); messenger.registerActionHandler( - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', () => unknownAccount, ); @@ -1609,18 +1609,18 @@ describe('AccountTreeController', () => { expect(controller.getSelectedAccountGroup()).toBe(expectedGroupId1); }); - it('returns empty string when no wallets exist and getSelectedAccount returns EMPTY_ACCOUNT', () => { + it('returns empty string when no wallets exist and getSelectedMultichainAccount returns EMPTY_ACCOUNT', () => { const { controller, messenger } = setup({ accounts: [], keyrings: [], }); - // Mock getSelectedAccount to return EMPTY_ACCOUNT_MOCK (id is '') BEFORE init + // Mock getSelectedMultichainAccount to return EMPTY_ACCOUNT_MOCK (id is '') BEFORE init messenger.unregisterActionHandler( - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', ); messenger.registerActionHandler( - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', () => EMPTY_ACCOUNT_MOCK, ); @@ -2813,7 +2813,7 @@ describe('AccountTreeController', () => { keyrings: [MOCK_HD_KEYRING_1], }); - mocks.AccountsController.getSelectedAccount.mockImplementation( + mocks.AccountsController.getSelectedMultichainAccount.mockImplementation( () => MOCK_HD_ACCOUNT_1, ); @@ -2842,7 +2842,7 @@ describe('AccountTreeController', () => { keyrings: [MOCK_HD_KEYRING_1], }); - mocks.AccountsController.getSelectedAccount.mockImplementation( + mocks.AccountsController.getSelectedMultichainAccount.mockImplementation( () => MOCK_HD_ACCOUNT_1, ); @@ -2865,7 +2865,7 @@ describe('AccountTreeController', () => { mocks.AccountsController.accounts = [MOCK_HD_ACCOUNT_2]; mocks.KeyringController.keyrings = [MOCK_HD_KEYRING_2]; - mocks.AccountsController.getSelectedAccount.mockImplementation( + mocks.AccountsController.getSelectedMultichainAccount.mockImplementation( () => MOCK_HD_ACCOUNT_2, ); diff --git a/packages/account-tree-controller/src/AccountTreeController.ts b/packages/account-tree-controller/src/AccountTreeController.ts index 8e24b6ef1d9..1537a6bb412 100644 --- a/packages/account-tree-controller/src/AccountTreeController.ts +++ b/packages/account-tree-controller/src/AccountTreeController.ts @@ -828,7 +828,7 @@ export class AccountTreeController extends BaseController< [walletId: AccountWalletId]: AccountWalletObject; }): AccountGroupId | '' { const selectedAccount = this.messagingSystem.call( - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', ); if (selectedAccount && selectedAccount.id) { const accountMapping = this.#accountIdToContext.get(selectedAccount.id); diff --git a/packages/account-tree-controller/src/types.ts b/packages/account-tree-controller/src/types.ts index c283ac41531..231a3de226d 100644 --- a/packages/account-tree-controller/src/types.ts +++ b/packages/account-tree-controller/src/types.ts @@ -3,7 +3,7 @@ import type { AccountsControllerAccountAddedEvent, AccountsControllerAccountRemovedEvent, AccountsControllerGetAccountAction, - AccountsControllerGetSelectedAccountAction, + AccountsControllerGetSelectedMultichainAccountAction, AccountsControllerListMultichainAccountsAction, AccountsControllerSelectedAccountChangeEvent, AccountsControllerSetSelectedAccountAction, @@ -115,7 +115,7 @@ export type AccountTreeControllerSetAccountGroupPinnedAction = { export type AllowedActions = | AccountsControllerGetAccountAction - | AccountsControllerGetSelectedAccountAction + | AccountsControllerGetSelectedMultichainAccountAction | AccountsControllerListMultichainAccountsAction | AccountsControllerSetSelectedAccountAction | KeyringControllerGetStateAction From 83bbcd0be841e7180b10857cc505960e3c259a3a Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 15 Sep 2025 17:54:12 +0200 Subject: [PATCH 2/3] chore: missing fixes --- packages/account-tree-controller/src/rule.test.ts | 2 +- packages/account-tree-controller/src/rules/entropy.test.ts | 2 +- packages/account-tree-controller/src/rules/keyring.test.ts | 2 +- packages/account-tree-controller/src/rules/snap.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/account-tree-controller/src/rule.test.ts b/packages/account-tree-controller/src/rule.test.ts index 7bbadcc931e..6cba22cf562 100644 --- a/packages/account-tree-controller/src/rule.test.ts +++ b/packages/account-tree-controller/src/rule.test.ts @@ -87,7 +87,7 @@ function getAccountTreeControllerMessenger( allowedActions: [ 'AccountsController:listMultichainAccounts', 'AccountsController:getAccount', - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', 'AccountsController:setSelectedAccount', 'KeyringController:getState', 'SnapController:get', diff --git a/packages/account-tree-controller/src/rules/entropy.test.ts b/packages/account-tree-controller/src/rules/entropy.test.ts index 9ee99a0117d..be8055fddc7 100644 --- a/packages/account-tree-controller/src/rules/entropy.test.ts +++ b/packages/account-tree-controller/src/rules/entropy.test.ts @@ -94,7 +94,7 @@ function getAccountTreeControllerMessenger( allowedActions: [ 'AccountsController:listMultichainAccounts', 'AccountsController:getAccount', - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', 'AccountsController:setSelectedAccount', 'KeyringController:getState', 'SnapController:get', diff --git a/packages/account-tree-controller/src/rules/keyring.test.ts b/packages/account-tree-controller/src/rules/keyring.test.ts index 5cb43cbf746..b6b072a87d6 100644 --- a/packages/account-tree-controller/src/rules/keyring.test.ts +++ b/packages/account-tree-controller/src/rules/keyring.test.ts @@ -98,7 +98,7 @@ describe('keyring', () => { allowedActions: [ 'AccountsController:listMultichainAccounts', 'AccountsController:getAccount', - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', 'AccountsController:setSelectedAccount', 'KeyringController:getState', 'SnapController:get', diff --git a/packages/account-tree-controller/src/rules/snap.test.ts b/packages/account-tree-controller/src/rules/snap.test.ts index 5b80226b26c..e93463bb994 100644 --- a/packages/account-tree-controller/src/rules/snap.test.ts +++ b/packages/account-tree-controller/src/rules/snap.test.ts @@ -90,7 +90,7 @@ function getAccountTreeControllerMessenger( allowedActions: [ 'AccountsController:listMultichainAccounts', 'AccountsController:getAccount', - 'AccountsController:getSelectedAccount', + 'AccountsController:getSelectedMultichainAccount', 'AccountsController:setSelectedAccount', 'KeyringController:getState', 'SnapController:get', From 22e19900f44c1789a847aef1236373a6033e7c41 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 15 Sep 2025 18:05:41 +0200 Subject: [PATCH 3/3] chore: changelog --- packages/account-tree-controller/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/account-tree-controller/CHANGELOG.md b/packages/account-tree-controller/CHANGELOG.md index fcd97d6787b..2a0e901792e 100644 --- a/packages/account-tree-controller/CHANGELOG.md +++ b/packages/account-tree-controller/CHANGELOG.md @@ -9,8 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- **BREAKING:** Use `:getSelectedMultichainAccount` instead of `:getSelectedAccount` to compute currently selected account group ([#6608](https://github.com/MetaMask/core/pull/6608)) + - Coming from the old account model, a non-EVM account could have been selected and the lastly selected EVM account might not be using the same group index. - Bump `@metamask/utils` from `^11.4.2` to `^11.8.0` ([#6588](https://github.com/MetaMask/core/pull/6588)) +### Removed + +- Remove use of `:getSelectedAccount` action ([#6608](https://github.com/MetaMask/core/pull/6608)) + ## [0.15.1] ### Fixed