From 90e2a965f0e5d9da2bdb3f7db27ad374ab256b50 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 5 May 2026 18:24:51 +0200 Subject: [PATCH 1/6] feat(accounts-controller): use KeyringV1Adapter for SnapKeyringV2 accounts --- packages/accounts-controller/package.json | 3 +- .../src/AccountsController.test.ts | 29 ++++++++++++++--- .../src/AccountsController.ts | 21 +++++++++---- packages/keyring-controller/package.json | 2 +- .../money-account-controller/package.json | 2 +- .../multichain-account-service/package.json | 2 +- yarn.lock | 31 ++++++++++--------- 7 files changed, 60 insertions(+), 30 deletions(-) diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index 5628e7eed2..e08cb73a18 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -59,7 +59,8 @@ "@metamask/keyring-api": "^23.1.0", "@metamask/keyring-controller": "^25.4.0", "@metamask/keyring-internal-api": "^11.0.1", - "@metamask/keyring-utils": "^3.1.0", + "@metamask/keyring-sdk": "^2.1.0", + "@metamask/keyring-utils": "^3.2.0", "@metamask/messenger": "^1.2.0", "@metamask/network-controller": "^30.1.0", "@metamask/superstruct": "^3.1.0", diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index ff8ff99cbc..939c27df91 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -23,6 +23,7 @@ import { KeyringTypes, } from '@metamask/keyring-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; +import { KeyringV1Adapter } from '@metamask/keyring-sdk/v2'; import { MOCK_ANY_NAMESPACE, Messenger } from '@metamask/messenger'; import type { MessengerActions, @@ -263,7 +264,6 @@ function buildMockSnapKeyringV2( snapId: string, overrides: Partial = {}, ): SnapKeyringV2 { - // We need to use the same prototype as we use some `instanceof` checks. const instance = Object.create(SnapKeyringV2.prototype) as SnapKeyringV2; // The `snapId` is usually injected via `deserialize`, but here we just mock the getter directly. @@ -275,6 +275,19 @@ function buildMockSnapKeyringV2( return Object.assign(instance, overrides); } +/** + * Wraps a mock SnapKeyringV2 in a KeyringV1Adapter so it passes the + * `instanceof KeyringV1Adapter` check in AccountsController. + * + * @param inner - The mock SnapKeyringV2 instance to wrap. + * @returns A KeyringV1Adapter wrapping the mock instance. + */ +function buildMockKeyringV1Adapter( + inner: SnapKeyringV2, +): KeyringV1Adapter { + return new KeyringV1Adapter(inner); +} + /** * Builds a new instance of the root messenger. * @@ -882,7 +895,9 @@ describe('AccountsController', () => { const messenger = buildMessenger(); messenger.registerActionHandler( 'KeyringController:getKeyringsByType', - mockGetKeyringByType.mockReturnValue([mockSnapKeyringV2Instance]), + mockGetKeyringByType.mockReturnValue([ + buildMockKeyringV1Adapter(mockSnapKeyringV2Instance), + ]), ); const mockNewKeyringState = { @@ -945,7 +960,9 @@ describe('AccountsController', () => { const messenger = buildMessenger(); messenger.registerActionHandler( 'KeyringController:getKeyringsByType', - mockGetKeyringByType.mockReturnValue([mockSnapKeyringV2Instance]), + mockGetKeyringByType.mockReturnValue([ + buildMockKeyringV1Adapter(mockSnapKeyringV2Instance), + ]), ); const mockNewKeyringState = { @@ -989,7 +1006,7 @@ describe('AccountsController', () => { messenger.registerActionHandler( 'KeyringController:getKeyringsByType', mockGetKeyringByType.mockReturnValue([ - // Plain object — does NOT pass instanceof SnapKeyringV2 + // Plain object — does NOT pass instanceof KeyringV1Adapter { lookupByAddress: jest.fn() }, ]), ); @@ -3294,7 +3311,9 @@ describe('AccountsController', () => { ); messenger.registerActionHandler( 'KeyringController:getKeyringsByType', - mockGetKeyringByType.mockReturnValue([mockSnapKeyringV2Instance]), + mockGetKeyringByType.mockReturnValue([ + buildMockKeyringV1Adapter(mockSnapKeyringV2Instance), + ]), ); const { accountsController } = setupAccountsController({ diff --git a/packages/accounts-controller/src/AccountsController.ts b/packages/accounts-controller/src/AccountsController.ts index f4befa2b70..89f5d1c26b 100644 --- a/packages/accounts-controller/src/AccountsController.ts +++ b/packages/accounts-controller/src/AccountsController.ts @@ -4,12 +4,13 @@ import type { ControllerStateChangeEvent, } from '@metamask/base-controller'; import { SnapKeyring } from '@metamask/eth-snap-keyring'; +import { SnapKeyring as SnapKeyringV2 } from '@metamask/eth-snap-keyring/v2'; import type { SnapKeyringAccountAssetListUpdatedEvent, SnapKeyringAccountBalancesUpdatedEvent, SnapKeyringAccountTransactionsUpdatedEvent, } from '@metamask/eth-snap-keyring'; -import { SnapKeyring as SnapKeyringV2 } from '@metamask/eth-snap-keyring/v2'; +import { KeyringV1Adapter } from '@metamask/keyring-sdk/v2'; import type { KeyringAccountEntropyOptions } from '@metamask/keyring-api'; import { EthAccountType, @@ -27,7 +28,7 @@ import type { KeyringObject, } from '@metamask/keyring-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; -import { isScopeEqualToAny } from '@metamask/keyring-utils'; +import { isScopeEqualToAny, Keyring } from '@metamask/keyring-utils'; import type { Messenger, ExtractEventPayload } from '@metamask/messenger'; import type { NetworkClientId } from '@metamask/network-controller'; import { isCaipChainId } from '@metamask/utils'; @@ -875,12 +876,20 @@ export class AccountsController extends BaseController< KeyringType.Snap, ); - // Snap keyring v2 are "per-Snaps", so we need to iterate over all of them to find the account. + // Snap keyring v2 are "per-Snaps" (and can be accessed using their v1 adapter), so we need to + // iterate over all of them to find the account. + // NOTE: `:getKeyringsByType` will only return v1 instances, that's why we need to use their v1 + // adapter + `unwrap` method to get the reference to their v2 instance. for (const keyring of keyrings) { - if (keyring instanceof SnapKeyringV2) { + if (keyring instanceof KeyringV1Adapter) { + // NOTE: We already filtering by `KeyringType.Snap`, so we are sure that those adapters + // are wrapping a Snap keyring v2. + const adapter = keyring as KeyringV1Adapter; + const keyringV2 = adapter.unwrap(); + // We use the synchronous method here since this method is used during `:stateChange` that are // use synchronous handlers. - const account = keyring.lookupByAddress(address); + const account = keyringV2.lookupByAddress(address); if (account) { return { ...account, @@ -893,7 +902,7 @@ export class AccountsController extends BaseController< type: KeyringType.Snap, }, snap: { - id: keyring.snapId, + id: keyringV2.snapId, }, }, }; diff --git a/packages/keyring-controller/package.json b/packages/keyring-controller/package.json index 3960a9d5f9..84aba7d31e 100644 --- a/packages/keyring-controller/package.json +++ b/packages/keyring-controller/package.json @@ -75,7 +75,7 @@ "@lavamoat/allow-scripts": "^3.0.4", "@lavamoat/preinstall-always-fail": "^2.1.0", "@metamask/auto-changelog": "^6.1.0", - "@metamask/keyring-utils": "^3.1.0", + "@metamask/keyring-utils": "^3.2.0", "@metamask/scure-bip39": "^2.1.1", "@ts-bridge/cli": "^0.6.4", "@types/jest": "^29.5.14", diff --git a/packages/money-account-controller/package.json b/packages/money-account-controller/package.json index 44550df4de..f88e233182 100644 --- a/packages/money-account-controller/package.json +++ b/packages/money-account-controller/package.json @@ -63,7 +63,7 @@ }, "devDependencies": { "@metamask/auto-changelog": "^6.1.0", - "@metamask/keyring-utils": "^3.1.0", + "@metamask/keyring-utils": "^3.2.0", "@metamask/utils": "^11.9.0", "@ts-bridge/cli": "^0.6.4", "@types/jest": "^29.5.14", diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json index 2634c512c3..b74f685a68 100644 --- a/packages/multichain-account-service/package.json +++ b/packages/multichain-account-service/package.json @@ -62,7 +62,7 @@ "@metamask/keyring-controller": "^25.4.0", "@metamask/keyring-internal-api": "^11.0.1", "@metamask/keyring-snap-client": "^9.0.2", - "@metamask/keyring-utils": "^3.1.0", + "@metamask/keyring-utils": "^3.2.0", "@metamask/messenger": "^1.2.0", "@metamask/snaps-controllers": "^19.0.0", "@metamask/snaps-sdk": "^11.0.0", diff --git a/yarn.lock b/yarn.lock index 7b32457d85..9e09b89b8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2579,7 +2579,8 @@ __metadata: "@metamask/keyring-api": "npm:^23.1.0" "@metamask/keyring-controller": "npm:^25.4.0" "@metamask/keyring-internal-api": "npm:^11.0.1" - "@metamask/keyring-utils": "npm:^3.1.0" + "@metamask/keyring-sdk": "npm:^2.1.0" + "@metamask/keyring-utils": "npm:^3.2.0" "@metamask/messenger": "npm:^1.2.0" "@metamask/network-controller": "npm:^30.1.0" "@metamask/providers": "npm:^22.1.0" @@ -4240,7 +4241,7 @@ __metadata: "@metamask/eth-simple-keyring": "npm:^12.0.2" "@metamask/keyring-api": "npm:^23.1.0" "@metamask/keyring-internal-api": "npm:^11.0.1" - "@metamask/keyring-utils": "npm:^3.1.0" + "@metamask/keyring-utils": "npm:^3.2.0" "@metamask/messenger": "npm:^1.2.0" "@metamask/scure-bip39": "npm:^2.1.1" "@metamask/utils": "npm:^11.9.0" @@ -4287,21 +4288,21 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-sdk@npm:^2.0.2": - version: 2.0.2 - resolution: "@metamask/keyring-sdk@npm:2.0.2" +"@metamask/keyring-sdk@npm:^2.0.2, @metamask/keyring-sdk@npm:^2.1.0": + version: 2.1.0 + resolution: "@metamask/keyring-sdk@npm:2.1.0" dependencies: "@ethereumjs/tx": "npm:^5.4.0" "@metamask/eth-sig-util": "npm:^8.2.0" "@metamask/keyring-api": "npm:^23.1.0" - "@metamask/keyring-utils": "npm:^3.2.0" + "@metamask/keyring-utils": "npm:^3.3.0" "@metamask/scure-bip39": "npm:^2.1.1" "@metamask/superstruct": "npm:^3.1.0" "@metamask/utils": "npm:^11.11.0" async-mutex: "npm:^0.5.0" ethereum-cryptography: "npm:^2.2.1" uuid: "npm:^9.0.1" - checksum: 10/2f456613df81580b032215ddf1c90fa9440442d631945329094a488743a71fdbbfe787c2c0809a315a1368ddbf9d3755faa936c54094cb32958fe8222f7e7a86 + checksum: 10/17384972f02f31472b7fc2b850ab6e988ff5eda59d3c92d62d39feaa59cf9e280ee97643b560e72ee75f95f5cf2d218fa0a3e2dd3308814f938935985457c530 languageName: node linkType: hard @@ -4337,15 +4338,15 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-utils@npm:^3.1.0, @metamask/keyring-utils@npm:^3.2.0": - version: 3.2.0 - resolution: "@metamask/keyring-utils@npm:3.2.0" +"@metamask/keyring-utils@npm:^3.2.0, @metamask/keyring-utils@npm:^3.3.0": + version: 3.3.0 + resolution: "@metamask/keyring-utils@npm:3.3.0" dependencies: "@ethereumjs/tx": "npm:^5.4.0" "@metamask/superstruct": "npm:^3.1.0" - "@metamask/utils": "npm:^11.1.0" + "@metamask/utils": "npm:^11.11.0" bitcoin-address-validation: "npm:^2.2.3" - checksum: 10/e71aa1b9ec9a24c72ea6d4864a10f11e68e5b77789728067230ec40cee2e85ad69073404d2fa62c760f014fd910fb68b3305a08f906f2534b9119e2a26d06a2b + checksum: 10/a91d150f3e9e65ade619f3cc02959f8eb478330cb3f793f228f9a3ef2d75ee68f518167740c779719fead0b23b80536d1299c2196e07742c1b4340b988bb0801 languageName: node linkType: hard @@ -4496,7 +4497,7 @@ __metadata: "@metamask/eth-money-keyring": "npm:^2.0.4" "@metamask/keyring-api": "npm:^23.1.0" "@metamask/keyring-controller": "npm:^25.4.0" - "@metamask/keyring-utils": "npm:^3.1.0" + "@metamask/keyring-utils": "npm:^3.2.0" "@metamask/messenger": "npm:^1.2.0" "@metamask/utils": "npm:^11.9.0" "@ts-bridge/cli": "npm:^0.6.4" @@ -4552,7 +4553,7 @@ __metadata: "@metamask/keyring-controller": "npm:^25.4.0" "@metamask/keyring-internal-api": "npm:^11.0.1" "@metamask/keyring-snap-client": "npm:^9.0.2" - "@metamask/keyring-utils": "npm:^3.1.0" + "@metamask/keyring-utils": "npm:^3.2.0" "@metamask/messenger": "npm:^1.2.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^19.0.0" @@ -5797,7 +5798,7 @@ __metadata: languageName: unknown linkType: soft -"@metamask/utils@npm:^11.0.1, @metamask/utils@npm:^11.1.0, @metamask/utils@npm:^11.10.0, @metamask/utils@npm:^11.11.0, @metamask/utils@npm:^11.4.0, @metamask/utils@npm:^11.4.2, @metamask/utils@npm:^11.8.1, @metamask/utils@npm:^11.9.0": +"@metamask/utils@npm:^11.0.1, @metamask/utils@npm:^11.10.0, @metamask/utils@npm:^11.11.0, @metamask/utils@npm:^11.4.0, @metamask/utils@npm:^11.4.2, @metamask/utils@npm:^11.8.1, @metamask/utils@npm:^11.9.0": version: 11.11.0 resolution: "@metamask/utils@npm:11.11.0" dependencies: From b576600079fb26d8468c4b06cf10189d08216794 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 5 May 2026 22:24:11 +0200 Subject: [PATCH 2/6] chore: bumps --- packages/accounts-controller/package.json | 4 +-- packages/keyring-controller/package.json | 2 +- .../money-account-controller/package.json | 2 +- .../multichain-account-service/package.json | 2 +- yarn.lock | 28 +++++++++---------- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index e08cb73a18..cc36c7296c 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -59,8 +59,8 @@ "@metamask/keyring-api": "^23.1.0", "@metamask/keyring-controller": "^25.4.0", "@metamask/keyring-internal-api": "^11.0.1", - "@metamask/keyring-sdk": "^2.1.0", - "@metamask/keyring-utils": "^3.2.0", + "@metamask/keyring-sdk": "^2.1.1", + "@metamask/keyring-utils": "^3.2.1", "@metamask/messenger": "^1.2.0", "@metamask/network-controller": "^30.1.0", "@metamask/superstruct": "^3.1.0", diff --git a/packages/keyring-controller/package.json b/packages/keyring-controller/package.json index 84aba7d31e..c1adac3182 100644 --- a/packages/keyring-controller/package.json +++ b/packages/keyring-controller/package.json @@ -75,7 +75,7 @@ "@lavamoat/allow-scripts": "^3.0.4", "@lavamoat/preinstall-always-fail": "^2.1.0", "@metamask/auto-changelog": "^6.1.0", - "@metamask/keyring-utils": "^3.2.0", + "@metamask/keyring-utils": "^3.2.1", "@metamask/scure-bip39": "^2.1.1", "@ts-bridge/cli": "^0.6.4", "@types/jest": "^29.5.14", diff --git a/packages/money-account-controller/package.json b/packages/money-account-controller/package.json index f88e233182..ea70780691 100644 --- a/packages/money-account-controller/package.json +++ b/packages/money-account-controller/package.json @@ -63,7 +63,7 @@ }, "devDependencies": { "@metamask/auto-changelog": "^6.1.0", - "@metamask/keyring-utils": "^3.2.0", + "@metamask/keyring-utils": "^3.2.1", "@metamask/utils": "^11.9.0", "@ts-bridge/cli": "^0.6.4", "@types/jest": "^29.5.14", diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json index b74f685a68..fa0fe3c78b 100644 --- a/packages/multichain-account-service/package.json +++ b/packages/multichain-account-service/package.json @@ -62,7 +62,7 @@ "@metamask/keyring-controller": "^25.4.0", "@metamask/keyring-internal-api": "^11.0.1", "@metamask/keyring-snap-client": "^9.0.2", - "@metamask/keyring-utils": "^3.2.0", + "@metamask/keyring-utils": "^3.2.1", "@metamask/messenger": "^1.2.0", "@metamask/snaps-controllers": "^19.0.0", "@metamask/snaps-sdk": "^11.0.0", diff --git a/yarn.lock b/yarn.lock index 9e09b89b8a..30281a80a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2579,8 +2579,8 @@ __metadata: "@metamask/keyring-api": "npm:^23.1.0" "@metamask/keyring-controller": "npm:^25.4.0" "@metamask/keyring-internal-api": "npm:^11.0.1" - "@metamask/keyring-sdk": "npm:^2.1.0" - "@metamask/keyring-utils": "npm:^3.2.0" + "@metamask/keyring-sdk": "npm:^2.1.1" + "@metamask/keyring-utils": "npm:^3.2.1" "@metamask/messenger": "npm:^1.2.0" "@metamask/network-controller": "npm:^30.1.0" "@metamask/providers": "npm:^22.1.0" @@ -4241,7 +4241,7 @@ __metadata: "@metamask/eth-simple-keyring": "npm:^12.0.2" "@metamask/keyring-api": "npm:^23.1.0" "@metamask/keyring-internal-api": "npm:^11.0.1" - "@metamask/keyring-utils": "npm:^3.2.0" + "@metamask/keyring-utils": "npm:^3.2.1" "@metamask/messenger": "npm:^1.2.0" "@metamask/scure-bip39": "npm:^2.1.1" "@metamask/utils": "npm:^11.9.0" @@ -4288,21 +4288,21 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-sdk@npm:^2.0.2, @metamask/keyring-sdk@npm:^2.1.0": - version: 2.1.0 - resolution: "@metamask/keyring-sdk@npm:2.1.0" +"@metamask/keyring-sdk@npm:^2.0.2, @metamask/keyring-sdk@npm:^2.1.1": + version: 2.1.1 + resolution: "@metamask/keyring-sdk@npm:2.1.1" dependencies: "@ethereumjs/tx": "npm:^5.4.0" "@metamask/eth-sig-util": "npm:^8.2.0" "@metamask/keyring-api": "npm:^23.1.0" - "@metamask/keyring-utils": "npm:^3.3.0" + "@metamask/keyring-utils": "npm:^3.3.1" "@metamask/scure-bip39": "npm:^2.1.1" "@metamask/superstruct": "npm:^3.1.0" "@metamask/utils": "npm:^11.11.0" async-mutex: "npm:^0.5.0" ethereum-cryptography: "npm:^2.2.1" uuid: "npm:^9.0.1" - checksum: 10/17384972f02f31472b7fc2b850ab6e988ff5eda59d3c92d62d39feaa59cf9e280ee97643b560e72ee75f95f5cf2d218fa0a3e2dd3308814f938935985457c530 + checksum: 10/bd10f41e124a61dd53c3914ab8f53e3519bc90905668f83e386bd0c7053754e446396a39b88f88228b2a001ee02762b287495e284ff3052ff5b7636803ac437b languageName: node linkType: hard @@ -4338,15 +4338,15 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-utils@npm:^3.2.0, @metamask/keyring-utils@npm:^3.3.0": - version: 3.3.0 - resolution: "@metamask/keyring-utils@npm:3.3.0" +"@metamask/keyring-utils@npm:^3.2.0, @metamask/keyring-utils@npm:^3.2.1, @metamask/keyring-utils@npm:^3.3.1": + version: 3.3.1 + resolution: "@metamask/keyring-utils@npm:3.3.1" dependencies: "@ethereumjs/tx": "npm:^5.4.0" "@metamask/superstruct": "npm:^3.1.0" "@metamask/utils": "npm:^11.11.0" bitcoin-address-validation: "npm:^2.2.3" - checksum: 10/a91d150f3e9e65ade619f3cc02959f8eb478330cb3f793f228f9a3ef2d75ee68f518167740c779719fead0b23b80536d1299c2196e07742c1b4340b988bb0801 + checksum: 10/d0917b2f634d9eb2f563827739fca00c1675ee90674ec49b2b68afcb604aee843d6c5be5d79e9780fa22d29f71fc876f40b2d3d0ed4cab7f5948937ddd276691 languageName: node linkType: hard @@ -4497,7 +4497,7 @@ __metadata: "@metamask/eth-money-keyring": "npm:^2.0.4" "@metamask/keyring-api": "npm:^23.1.0" "@metamask/keyring-controller": "npm:^25.4.0" - "@metamask/keyring-utils": "npm:^3.2.0" + "@metamask/keyring-utils": "npm:^3.2.1" "@metamask/messenger": "npm:^1.2.0" "@metamask/utils": "npm:^11.9.0" "@ts-bridge/cli": "npm:^0.6.4" @@ -4553,7 +4553,7 @@ __metadata: "@metamask/keyring-controller": "npm:^25.4.0" "@metamask/keyring-internal-api": "npm:^11.0.1" "@metamask/keyring-snap-client": "npm:^9.0.2" - "@metamask/keyring-utils": "npm:^3.2.0" + "@metamask/keyring-utils": "npm:^3.2.1" "@metamask/messenger": "npm:^1.2.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^19.0.0" From 06ec42d0cbf89965ac3065efd9601c61c6152c84 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 5 May 2026 22:30:40 +0200 Subject: [PATCH 3/6] chore: lint --- packages/accounts-controller/src/AccountsController.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/accounts-controller/src/AccountsController.ts b/packages/accounts-controller/src/AccountsController.ts index 89f5d1c26b..e5216b49b1 100644 --- a/packages/accounts-controller/src/AccountsController.ts +++ b/packages/accounts-controller/src/AccountsController.ts @@ -4,13 +4,12 @@ import type { ControllerStateChangeEvent, } from '@metamask/base-controller'; import { SnapKeyring } from '@metamask/eth-snap-keyring'; -import { SnapKeyring as SnapKeyringV2 } from '@metamask/eth-snap-keyring/v2'; import type { SnapKeyringAccountAssetListUpdatedEvent, SnapKeyringAccountBalancesUpdatedEvent, SnapKeyringAccountTransactionsUpdatedEvent, } from '@metamask/eth-snap-keyring'; -import { KeyringV1Adapter } from '@metamask/keyring-sdk/v2'; +import { SnapKeyring as SnapKeyringV2 } from '@metamask/eth-snap-keyring/v2'; import type { KeyringAccountEntropyOptions } from '@metamask/keyring-api'; import { EthAccountType, @@ -28,7 +27,8 @@ import type { KeyringObject, } from '@metamask/keyring-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; -import { isScopeEqualToAny, Keyring } from '@metamask/keyring-utils'; +import { KeyringV1Adapter } from '@metamask/keyring-sdk/v2'; +import { isScopeEqualToAny } from '@metamask/keyring-utils'; import type { Messenger, ExtractEventPayload } from '@metamask/messenger'; import type { NetworkClientId } from '@metamask/network-controller'; import { isCaipChainId } from '@metamask/utils'; From c80a068744318b8753b6356adfc2fccd2be7b7a9 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 5 May 2026 22:31:18 +0200 Subject: [PATCH 4/6] chore: changelog --- packages/accounts-controller/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-controller/CHANGELOG.md b/packages/accounts-controller/CHANGELOG.md index c796a25d26..9935a4bef6 100644 --- a/packages/accounts-controller/CHANGELOG.md +++ b/packages/accounts-controller/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Add support for `SnapKeyring` v2 accounts ([#8513](https://github.com/MetaMask/core/pull/8513)) +- Add support for `SnapKeyring` v2 accounts ([#8513](https://github.com/MetaMask/core/pull/8513)), ([#8703](https://github.com/MetaMask/core/pull/8703)) ### Changed From f6e49a65811cf106879ec7fa7c14da5e27c77a01 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 5 May 2026 22:36:03 +0200 Subject: [PATCH 5/6] chore: changelog --- packages/multichain-account-service/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/multichain-account-service/CHANGELOG.md b/packages/multichain-account-service/CHANGELOG.md index 88e7f0a38a..dc91e5c830 100644 --- a/packages/multichain-account-service/CHANGELOG.md +++ b/packages/multichain-account-service/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Bump `@metamask/keyring-api` from `^21.6.0` to `^23.1.0` ([#8464](https://github.com/MetaMask/core/pull/8464), [#8647](https://github.com/MetaMask/core/pull/8647)) - Bump `@metamask/keyring-internal-api` from `^10.0.0` to `^11.0.1` ([#8464](https://github.com/MetaMask/core/pull/8464), [#8584](https://github.com/MetaMask/core/pull/8584), [#8647](https://github.com/MetaMask/core/pull/8647)) - Bump `@metamask/keyring-snap-client` from `^8.2.0` to `^9.0.2` ([#8464](https://github.com/MetaMask/core/pull/8464), [#8647](https://github.com/MetaMask/core/pull/8647)) +- Bump `@metamask/keyring-utils` from `^3.1.0` to `^3.2.1` ([#8703](https://github.com/MetaMask/core/pull/8703)) ## [8.0.1] From f2ae2113d0700900c6de8c2b464a97a7cf142945 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 5 May 2026 22:39:10 +0200 Subject: [PATCH 6/6] chore: changelog --- packages/accounts-controller/CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/accounts-controller/CHANGELOG.md b/packages/accounts-controller/CHANGELOG.md index 9935a4bef6..c99e6f0c5c 100644 --- a/packages/accounts-controller/CHANGELOG.md +++ b/packages/accounts-controller/CHANGELOG.md @@ -7,11 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Use `KeyringV1Adapter` for `SnapKeyring` v2 accounts ([#8703](https://github.com/MetaMask/core/pull/8703)) + - `SnapKeyring` v2 instances will be adapted/wrapped by a v1 keyring adapter, making it compatible with the current `KeyringController` keyrings management. +- Bump `@metamask/keyring-utils` from `^3.1.0` to `^3.2.1` ([#8703](https://github.com/MetaMask/core/pull/8703)) + ## [38.0.0] ### Added -- Add support for `SnapKeyring` v2 accounts ([#8513](https://github.com/MetaMask/core/pull/8513)), ([#8703](https://github.com/MetaMask/core/pull/8703)) +- Add support for `SnapKeyring` v2 accounts ([#8513](https://github.com/MetaMask/core/pull/8513)) ### Changed