From 3ef9922a997e22aafa15e2f6a4af8bb9906c5363 Mon Sep 17 00:00:00 2001 From: Daniel Rocha <68558152+danroc@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:03:09 +0200 Subject: [PATCH 1/2] feat!: make `getAccount()` synchronous --- .../keyring-eth-hd/src/hd-keyring.test.ts | 45 +++++++++---------- packages/keyring-eth-hd/src/hd-keyring.ts | 2 +- .../src/ledger-keyring.test.ts | 10 ++--- .../src/ledger-keyring.ts | 4 +- .../keyring-eth-qr/src/qr-keyring.test.ts | 24 +++++----- packages/keyring-eth-qr/src/qr-keyring.ts | 2 +- .../src/simple-keyring.test.ts | 14 +++--- .../keyring-eth-simple/src/simple-keyring.ts | 2 +- .../src/trezor-keyring.test.ts | 14 +++--- .../keyring-eth-trezor/src/trezor-keyring.ts | 4 +- .../src/SnapKeyring.test.ts | 16 +++---- .../keyring-snap-bridge/src/SnapKeyring.ts | 2 +- packages/keyring-utils/src/keyring.ts | 2 +- 13 files changed, 69 insertions(+), 72 deletions(-) diff --git a/packages/keyring-eth-hd/src/hd-keyring.test.ts b/packages/keyring-eth-hd/src/hd-keyring.test.ts index 6d410fa09..587a3960e 100644 --- a/packages/keyring-eth-hd/src/hd-keyring.test.ts +++ b/packages/keyring-eth-hd/src/hd-keyring.test.ts @@ -45,11 +45,8 @@ const sampleMnemonicSeed = mnemonicToSeedSync(sampleMnemonic); const notKeyringAddress = '0xbD20F6F5F1616947a39E11926E78ec94817B3931'; -const getAddressAtIndex = async ( - keyring: HdKeyring, - index: number, -): Promise => { - const accounts = await keyring.getAccounts(); +const getAddressAtIndex = (keyring: HdKeyring, index: number): Hex => { + const accounts = keyring.getAccounts(); assert(accounts[index], `Account not found at index ${index}`); return accounts[index]; }; @@ -78,7 +75,7 @@ describe('hd-keyring', () => { mnemonic, numberOfAccounts: 3, }); - const newAccounts = await newHDKeyring.getAccounts(); + const newAccounts = newHDKeyring.getAccounts(); const oldAccounts = await oldHDKeyring.getAccounts(); expect(newAccounts[0]).toStrictEqual(oldAccounts[0]); @@ -181,7 +178,7 @@ describe('hd-keyring', () => { numberOfAccounts: 2, }); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(accounts[0]).toStrictEqual(firstAcct); expect(accounts[1]).toStrictEqual(secondAcct); expect(keyring.mnemonic).toStrictEqual(sampleMnemonicBytes); @@ -196,7 +193,7 @@ describe('hd-keyring', () => { numberOfAccounts: 2, }); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(accounts[0]).toStrictEqual(firstAcct); expect(accounts[1]).toStrictEqual(secondAcct); expect(keyring.mnemonic).toStrictEqual(sampleMnemonicBytes); @@ -242,7 +239,7 @@ describe('hd-keyring', () => { numberOfAccounts: 2, }); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(accounts[0]).toStrictEqual(firstAcct); expect(accounts[1]).toStrictEqual(secondAcct); expect(keyring.mnemonic).toStrictEqual(sampleMnemonicBytes); @@ -281,11 +278,11 @@ describe('hd-keyring', () => { mnemonic: sampleMnemonic, numberOfAccounts: 1, }); - const accountsFirstCheck = await keyring.getAccounts(); + const accountsFirstCheck = keyring.getAccounts(); expect(accountsFirstCheck).toHaveLength(1); await keyring.addAccounts(1); - const accountsSecondCheck = await keyring.getAccounts(); + const accountsSecondCheck = keyring.getAccounts(); expect(accountsSecondCheck[0]).toStrictEqual(firstAcct); expect(accountsSecondCheck[1]).toStrictEqual(secondAcct); expect(accountsSecondCheck).toHaveLength(2); @@ -303,7 +300,7 @@ describe('hd-keyring', () => { await keyring.deserialize({}); await keyring.generateRandomMnemonic(); await keyring.addAccounts(); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(accounts).toHaveLength(1); }); @@ -321,7 +318,7 @@ describe('hd-keyring', () => { await keyring.deserialize({}); await keyring.generateRandomMnemonic(); await keyring.addAccounts(3); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(accounts).toHaveLength(3); }); }); @@ -364,7 +361,7 @@ describe('hd-keyring', () => { await keyring.deserialize({}); await keyring.generateRandomMnemonic(); await keyring.addAccounts(1); - const address = await getAddressAtIndex(keyring, 0); + const address = getAddressAtIndex(keyring, 0); const signature = await keyring.signTypedData(address, typedData); const restored = recoverTypedSignature({ data: typedData, @@ -389,7 +386,7 @@ describe('hd-keyring', () => { await keyring.deserialize({}); await keyring.generateRandomMnemonic(); await keyring.addAccounts(1); - const address = await getAddressAtIndex(keyring, 0); + const address = getAddressAtIndex(keyring, 0); const signature = await keyring.signTypedData(address, typedData, { version: SignTypedDataVersion.V1, }); @@ -418,7 +415,7 @@ describe('hd-keyring', () => { mnemonic: sampleMnemonic, numberOfAccounts: 1, }); - const address = await getAddressAtIndex(keyring, 0); + const address = getAddressAtIndex(keyring, 0); const signature = await keyring.signTypedData(address, typedData, { version: SignTypedDataVersion.V3, }); @@ -475,7 +472,7 @@ describe('hd-keyring', () => { await keyring.deserialize({}); await keyring.generateRandomMnemonic(); await keyring.addAccounts(1); - const address = await getAddressAtIndex(keyring, 0); + const address = getAddressAtIndex(keyring, 0); const signature = await keyring.signTypedData(address, typedData, { version: SignTypedDataVersion.V3, }); @@ -497,7 +494,7 @@ describe('hd-keyring', () => { numberOfAccounts: 1, hdPath: hdPathString, }); - const addresses = await keyring.getAccounts(); + const addresses = keyring.getAccounts(); expect(addresses[0]).toStrictEqual(firstAcct); const serialized = await keyring.serialize(); expect(serialized.hdPath).toStrictEqual(hdPathString); @@ -511,7 +508,7 @@ describe('hd-keyring', () => { numberOfAccounts: 1, hdPath: hdPathString, }); - const addresses = await keyring.getAccounts(); + const addresses = keyring.getAccounts(); expect(addresses[0]).not.toBe(firstAcct); const serialized = await keyring.serialize(); expect(serialized.hdPath).toStrictEqual(hdPathString); @@ -640,7 +637,7 @@ describe('hd-keyring', () => { Buffer.from(keccak256(Buffer.from(localMessage))), ); await keyring.addAccounts(9); - const addresses = await keyring.getAccounts(); + const addresses = keyring.getAccounts(); const signatures = await Promise.all( addresses.map(async (accountAddress) => { return await keyring.signMessage(accountAddress, msgHashHex); @@ -767,10 +764,10 @@ describe('hd-keyring', () => { describe('if the account exists', function () { it('should remove that account', async function () { - const addresses = await keyring.getAccounts(); + const addresses = keyring.getAccounts(); expect(addresses).toHaveLength(1); - keyring.removeAccount(await getAddressAtIndex(keyring, 0)); - const addressesAfterRemoval = await keyring.getAccounts(); + keyring.removeAccount(getAddressAtIndex(keyring, 0)); + const addressesAfterRemoval = keyring.getAccounts(); expect(addressesAfterRemoval).toHaveLength(0); }); }); @@ -979,7 +976,7 @@ describe('hd-keyring', () => { }, }; - const address = await getAddressAtIndex(keyring, 0); + const address = getAddressAtIndex(keyring, 0); const signature = await keyring.signTypedData(address, typedData, { version: SignTypedDataVersion.V4, diff --git a/packages/keyring-eth-hd/src/hd-keyring.ts b/packages/keyring-eth-hd/src/hd-keyring.ts index a4b09b827..afd081678 100644 --- a/packages/keyring-eth-hd/src/hd-keyring.ts +++ b/packages/keyring-eth-hd/src/hd-keyring.ts @@ -232,7 +232,7 @@ export class HdKeyring implements Keyring { * * @returns The addresses of all accounts in the keyring. */ - async getAccounts(): Promise { + getAccounts(): Hex[] { return Array.from(this.#walletMap.keys()); } diff --git a/packages/keyring-eth-ledger-bridge/src/ledger-keyring.test.ts b/packages/keyring-eth-ledger-bridge/src/ledger-keyring.test.ts index 9df2a05ea..9ed17989b 100644 --- a/packages/keyring-eth-ledger-bridge/src/ledger-keyring.test.ts +++ b/packages/keyring-eth-ledger-bridge/src/ledger-keyring.test.ts @@ -134,7 +134,7 @@ describe('LedgerKeyring', function () { }); expect(typeof ledgerKeyring).toBe('object'); - const accounts = await ledgerKeyring.getAccounts(); + const accounts = ledgerKeyring.getAccounts(); expect(Array.isArray(accounts)).toBe(true); }); @@ -441,7 +441,7 @@ describe('LedgerKeyring', function () { keyring.setAccountToUnlock(1); const secondBatch = await keyring.addAccounts(1); - expect(await keyring.getAccounts()).toHaveLength(2); + expect(keyring.getAccounts()).toHaveLength(2); expect(firstBatch).toStrictEqual([fakeAccounts[0]]); expect(secondBatch).toStrictEqual([fakeAccounts[1]]); }); @@ -455,7 +455,7 @@ describe('LedgerKeyring', function () { const accounts = await keyring.addAccounts(1); expect(accounts).toHaveLength(1); keyring.removeAccount(fakeAccounts[0]); - const accountsAfterRemoval = await keyring.getAccounts(); + const accountsAfterRemoval = keyring.getAccounts(); expect(accountsAfterRemoval).toHaveLength(0); }); }); @@ -546,7 +546,7 @@ describe('LedgerKeyring', function () { beforeEach(async function () { keyring.setAccountToUnlock(accountIndex); await keyring.addAccounts(1); - accounts = await keyring.getAccounts(); + accounts = keyring.getAccounts(); }); it('returns an array of accounts', function () { @@ -569,7 +569,7 @@ describe('LedgerKeyring', function () { // Wipe the keyring keyring.forgetDevice(); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(keyring.isUnlocked()).toBe(false); expect(accounts).toHaveLength(0); diff --git a/packages/keyring-eth-ledger-bridge/src/ledger-keyring.ts b/packages/keyring-eth-ledger-bridge/src/ledger-keyring.ts index 62295534d..a1cacc8a9 100644 --- a/packages/keyring-eth-ledger-bridge/src/ledger-keyring.ts +++ b/packages/keyring-eth-ledger-bridge/src/ledger-keyring.ts @@ -304,8 +304,8 @@ export class LedgerKeyring implements Keyring { return this.#getPage(-1); } - async getAccounts(): Promise { - return Promise.resolve(this.accounts.slice()); + getAccounts(): Hex[] { + return this.accounts.slice(); } removeAccount(address: string): void { diff --git a/packages/keyring-eth-qr/src/qr-keyring.test.ts b/packages/keyring-eth-qr/src/qr-keyring.test.ts index ed8ad011c..91e927cf7 100644 --- a/packages/keyring-eth-qr/src/qr-keyring.test.ts +++ b/packages/keyring-eth-qr/src/qr-keyring.test.ts @@ -195,7 +195,7 @@ describe('QrKeyring', () => { await keyring.deserialize({}); - expect(await keyring.getAccounts()).toStrictEqual([]); + expect(keyring.getAccounts()).toStrictEqual([]); expect(await getXPUBFromKeyring(keyring)).toBeUndefined(); }); }); @@ -208,7 +208,7 @@ describe('QrKeyring', () => { await keyring.deserialize(HDKEY_SERIALIZED_KEYRING_WITH_NO_ACCOUNTS); - expect(await keyring.getAccounts()).toStrictEqual([]); + expect(keyring.getAccounts()).toStrictEqual([]); expect(await getXPUBFromKeyring(keyring)).toStrictEqual( HDKEY_SERIALIZED_KEYRING_WITH_NO_ACCOUNTS.xpub, ); @@ -225,8 +225,8 @@ describe('QrKeyring', () => { // @ts-expect-error QrKeyring types are stricter than Keystone ones await keyring.deserialize(await keystoneKeyring.serialize()); - expect(await keystoneKeyring.getAccounts()).toStrictEqual( - await keystoneKeyring.getAccounts(), + expect(keystoneKeyring.getAccounts()).toStrictEqual( + keystoneKeyring.getAccounts(), ); expect(await getXPUBFromKeyring(keyring)).toStrictEqual( await getXPUBFromKeyring(keystoneKeyring), @@ -270,7 +270,7 @@ describe('QrKeyring', () => { expect(firstAddition).toStrictEqual(expectedAccounts.slice(0, 1)); expect(secondAddition).toStrictEqual([]); - expect(await keyring.getAccounts()).toStrictEqual( + expect(keyring.getAccounts()).toStrictEqual( expectedAccounts.slice(0, 1), ); }); @@ -328,7 +328,7 @@ describe('QrKeyring', () => { bridge: getMockBridge(), ur: KNOWN_HDKEY_UR, }); - expect(await keyring.getAccounts()).toStrictEqual([]); + expect(keyring.getAccounts()).toStrictEqual([]); }); }); @@ -342,7 +342,7 @@ describe('QrKeyring', () => { const accounts = await keyring.addAccounts(numberOfAccountsToAdd); - expect(await keyring.getAccounts()).toStrictEqual( + expect(keyring.getAccounts()).toStrictEqual( EXPECTED_ACCOUNTS.slice(0, numberOfAccountsToAdd), ); expect(accounts).toStrictEqual( @@ -362,7 +362,7 @@ describe('QrKeyring', () => { keyring.removeAccount(EXPECTED_ACCOUNTS[1]); - expect(await keyring.getAccounts()).toStrictEqual([ + expect(keyring.getAccounts()).toStrictEqual([ EXPECTED_ACCOUNTS[0], EXPECTED_ACCOUNTS[2], ]); @@ -374,12 +374,12 @@ describe('QrKeyring', () => { ur: KNOWN_HDKEY_UR, }); await keyring.addAccounts(1); - const initialAccounts = await keyring.getAccounts(); + const initialAccounts = keyring.getAccounts(); expect(() => keyring.removeAccount('0x0000000000000000000000000000000000000000'), ).not.toThrow(); - expect(await keyring.getAccounts()).toStrictEqual(initialAccounts); + expect(keyring.getAccounts()).toStrictEqual(initialAccounts); }); }); @@ -617,7 +617,7 @@ describe('QrKeyring', () => { }); await keyring.deserialize(HDKEY_SERIALIZED_KEYRING_WITH_ACCOUNTS); // let's make sure we have an xpub set - expect(await keyring.getAccounts()).toStrictEqual( + expect(keyring.getAccounts()).toStrictEqual( HDKEY_SERIALIZED_KEYRING_WITH_ACCOUNTS.accounts, ); expect(await getXPUBFromKeyring(keyring)).toStrictEqual( @@ -626,7 +626,7 @@ describe('QrKeyring', () => { await keyring.forgetDevice(); - expect(await keyring.getAccounts()).toStrictEqual([]); + expect(keyring.getAccounts()).toStrictEqual([]); expect(await getXPUBFromKeyring(keyring)).toBeUndefined(); }); }); diff --git a/packages/keyring-eth-qr/src/qr-keyring.ts b/packages/keyring-eth-qr/src/qr-keyring.ts index f821ba975..51a2373ce 100644 --- a/packages/keyring-eth-qr/src/qr-keyring.ts +++ b/packages/keyring-eth-qr/src/qr-keyring.ts @@ -191,7 +191,7 @@ export class QrKeyring implements Keyring { * * @returns The accounts in the QrKeyring */ - async getAccounts(): Promise { + getAccounts(): Hex[] { return this.#accounts.slice(); } diff --git a/packages/keyring-eth-simple/src/simple-keyring.test.ts b/packages/keyring-eth-simple/src/simple-keyring.test.ts index dc0219640..0e9874bd5 100644 --- a/packages/keyring-eth-simple/src/simple-keyring.test.ts +++ b/packages/keyring-eth-simple/src/simple-keyring.test.ts @@ -94,7 +94,7 @@ describe('simple-keyring', function () { describe('#constructor with a private key', function () { it('has the correct addresses', async function () { const newKeyring = new SimpleKeyring([testAccount.key]); - const accounts = await newKeyring.getAccounts(); + const accounts = newKeyring.getAccounts(); expect(accounts).toStrictEqual([testAccount.address]); }); }); @@ -181,7 +181,7 @@ describe('simple-keyring', function () { const msgHashHex = bytesToHex(keccak256(Buffer.from(localMessage))); await keyring.addAccounts(9); - const addresses = await keyring.getAccounts(); + const addresses = keyring.getAccounts(); const signatures = await Promise.all( addresses.map(async (accountAddress: Hex) => { return await keyring.signMessage(accountAddress, msgHashHex); @@ -261,7 +261,7 @@ describe('simple-keyring', function () { // Push a mock wallet await keyring.deserialize([testAccount.key]); - const output = await keyring.getAccounts(); + const output = keyring.getAccounts(); expect(output).toHaveLength(1); expect(output[0]).toBe(testAccount.address); }); @@ -271,10 +271,10 @@ describe('simple-keyring', function () { describe('if the account exists', function () { it('should remove that account', async function () { await keyring.addAccounts(); - const address = (await keyring.getAccounts())[0]; + const address = keyring.getAccounts()[0]; assert(address, 'address is undefined'); keyring.removeAccount(address); - const addressesAfterRemoval = await keyring.getAccounts(); + const addressesAfterRemoval = keyring.getAccounts(); expect(addressesAfterRemoval).toHaveLength(0); }); }); @@ -503,7 +503,7 @@ describe('simple-keyring', function () { }; await keyring.deserialize([privKeyHex]); - const address = (await keyring.getAccounts())[0]; + const address = keyring.getAccounts()[0]; assert(address, 'address is undefined'); const signature = await keyring.signTypedData(address, typedData, { version: SignTypedDataVersion.V3, @@ -723,7 +723,7 @@ describe('simple-keyring', function () { await keyring.deserialize([privKeyHex]); - const address = (await keyring.getAccounts())[0]; + const address = keyring.getAccounts()[0]; assert(address, 'address is undefined'); const signature = await keyring.signTypedData(address, typedData, { version: SignTypedDataVersion.V4, diff --git a/packages/keyring-eth-simple/src/simple-keyring.ts b/packages/keyring-eth-simple/src/simple-keyring.ts index 85ba37e82..32ed24fa8 100644 --- a/packages/keyring-eth-simple/src/simple-keyring.ts +++ b/packages/keyring-eth-simple/src/simple-keyring.ts @@ -88,7 +88,7 @@ export default class SimpleKeyring implements Keyring { return hexWallets; } - async getAccounts(): Promise { + getAccounts(): Hex[] { return this.#wallets.map(({ publicKey }) => add0x(bytesToHex(publicToAddress(publicKey))), ); diff --git a/packages/keyring-eth-trezor/src/trezor-keyring.test.ts b/packages/keyring-eth-trezor/src/trezor-keyring.test.ts index 2747b5079..fd573c4b5 100644 --- a/packages/keyring-eth-trezor/src/trezor-keyring.test.ts +++ b/packages/keyring-eth-trezor/src/trezor-keyring.test.ts @@ -119,7 +119,7 @@ describe('TrezorKeyring', function () { it('constructs', async function () { const keyringInstance = new TrezorKeyring({ bridge }); expect(typeof keyringInstance).toBe('object'); - const accounts = await keyringInstance.getAccounts(); + const accounts = keyringInstance.getAccounts(); expect(Array.isArray(accounts)).toBe(true); }); @@ -239,7 +239,7 @@ describe('TrezorKeyring', function () { keyring.setAccountToUnlock(2); await keyring.addAccounts(1); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(accounts[0]).toBe(fakeAccounts[0]); expect(accounts[1]).toBe(fakeAccounts[2]); }); @@ -279,7 +279,7 @@ describe('TrezorKeyring', function () { const accounts = await keyring.addAccounts(1); expect(accounts).toHaveLength(1); keyring.removeAccount(fakeAccounts[0]); - const accountsAfterRemoval = await keyring.getAccounts(); + const accountsAfterRemoval = keyring.getAccounts(); expect(accountsAfterRemoval).toHaveLength(0); }); @@ -289,11 +289,11 @@ describe('TrezorKeyring', function () { keyring.setAccountToUnlock(1); await keyring.addAccounts(1); - let accounts = await keyring.getAccounts(); + let accounts = keyring.getAccounts(); expect(accounts).toHaveLength(2); keyring.removeAccount(fakeAccounts[0]); - accounts = await keyring.getAccounts(); + accounts = keyring.getAccounts(); expect(accounts).toHaveLength(1); expect(accounts[0]).toBe(fakeAccounts[1]); @@ -387,7 +387,7 @@ describe('TrezorKeyring', function () { beforeEach(async function () { keyring.setAccountToUnlock(accountIndex); await keyring.addAccounts(1); - accounts = await keyring.getAccounts(); + accounts = keyring.getAccounts(); }); it('returns an array of accounts', function () { @@ -670,7 +670,7 @@ describe('TrezorKeyring', function () { // Wipe the keyring keyring.forgetDevice(); - const accounts = await keyring.getAccounts(); + const accounts = keyring.getAccounts(); expect(keyring.isUnlocked()).toBe(false); expect(accounts).toHaveLength(0); diff --git a/packages/keyring-eth-trezor/src/trezor-keyring.ts b/packages/keyring-eth-trezor/src/trezor-keyring.ts index 52345e27c..a719746ee 100644 --- a/packages/keyring-eth-trezor/src/trezor-keyring.ts +++ b/packages/keyring-eth-trezor/src/trezor-keyring.ts @@ -263,8 +263,8 @@ export class TrezorKeyring implements Keyring { }); } - async getAccounts(): Promise { - return Promise.resolve(this.accounts.slice()); + getAccounts(): Hex[] { + return this.accounts.slice(); } removeAccount(address: string): void { diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.test.ts b/packages/keyring-snap-bridge/src/SnapKeyring.test.ts index 43e8af7c6..2507566ca 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.test.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.test.ts @@ -1171,7 +1171,7 @@ describe('SnapKeyring', () => { method: KeyringEvent.AccountDeleted, params: { id: ethEoaAccount1.id }, }); - expect(await keyring.getAccounts()).toStrictEqual([ + expect(keyring.getAccounts()).toStrictEqual([ ethEoaAccount2.address.toLowerCase(), ethEoaAccount3.address.toLowerCase(), ethErc4337Account.address.toLowerCase(), @@ -1190,7 +1190,7 @@ describe('SnapKeyring', () => { method: KeyringEvent.AccountDeleted, params: { id: ethEoaAccount1.id }, }); - expect(await keyring.getAccounts()).toStrictEqual([ + expect(keyring.getAccounts()).toStrictEqual([ ethEoaAccount1.address.toLowerCase(), ethEoaAccount2.address.toLowerCase(), ethEoaAccount3.address.toLowerCase(), @@ -1370,7 +1370,7 @@ describe('SnapKeyring', () => { describe('getAccounts', () => { it('returns all account addresses', async () => { - const addresses = await keyring.getAccounts(); + const addresses = keyring.getAccounts(); expect(addresses).toStrictEqual([ ethEoaAccount1.address.toLowerCase(), ethEoaAccount2.address.toLowerCase(), @@ -1419,7 +1419,7 @@ describe('SnapKeyring', () => { }; const expectedAddresses = [ethEoaAccount1.address]; await keyring.deserialize(state as unknown as KeyringState); - const addresses = await keyring.getAccounts(); + const addresses = keyring.getAccounts(); expect(addresses).toStrictEqual(expectedAddresses); }); @@ -1430,7 +1430,7 @@ describe('SnapKeyring', () => { callbacks: mockCallbacks, }); await keyring.deserialize(undefined as unknown as KeyringState); - expect(await keyring.getAccounts()).toStrictEqual([]); + expect(keyring.getAccounts()).toStrictEqual([]); }); it('fails to restore an empty state', async () => { @@ -1442,7 +1442,7 @@ describe('SnapKeyring', () => { await expect( keyring.deserialize({} as unknown as KeyringState), ).rejects.toThrow('Cannot convert undefined or null to object'); - expect(await keyring.getAccounts()).toStrictEqual([]); + expect(keyring.getAccounts()).toStrictEqual([]); }); it.each([ @@ -2127,7 +2127,7 @@ describe('SnapKeyring', () => { it('removes an account', async () => { mockMessenger.handleRequest.mockResolvedValue(null); await keyring.removeAccount(ethEoaAccount1.address); - expect(await keyring.getAccounts()).toStrictEqual([ + expect(keyring.getAccounts()).toStrictEqual([ accounts[1].address, accounts[2].address, accounts[3].address, @@ -2145,7 +2145,7 @@ describe('SnapKeyring', () => { const spy = jest.spyOn(console, 'error').mockImplementation(); mockMessenger.handleRequest.mockRejectedValue('some error'); await keyring.removeAccount(ethEoaAccount1.address); - expect(await keyring.getAccounts()).toStrictEqual([ + expect(keyring.getAccounts()).toStrictEqual([ accounts[1].address, accounts[2].address, accounts[3].address, diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index 1956e7c06..d9ab5a994 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -772,7 +772,7 @@ export class SnapKeyring extends EventEmitter { * * @returns The addresses of the accounts in this keyring. */ - async getAccounts(): Promise { + getAccounts(): string[] { return unique( [...this.#accounts.values()].map(({ account }) => normalizeAccountAddress(account), diff --git a/packages/keyring-utils/src/keyring.ts b/packages/keyring-utils/src/keyring.ts index da482b71f..3fff6a600 100644 --- a/packages/keyring-utils/src/keyring.ts +++ b/packages/keyring-utils/src/keyring.ts @@ -53,7 +53,7 @@ export type Keyring = { * * @returns A list of the account addresses for this keyring */ - getAccounts(): Promise; + getAccounts(): Hex[]; /** * Add an account to the keyring. From 338e23ba711849ee42be1eddb737cf0bb484c741 Mon Sep 17 00:00:00 2001 From: Daniel Rocha <68558152+danroc@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:29:48 +0200 Subject: [PATCH 2/2] chore: fix Cursor's comment --- packages/keyring-eth-qr/src/qr-keyring.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/keyring-eth-qr/src/qr-keyring.test.ts b/packages/keyring-eth-qr/src/qr-keyring.test.ts index 91e927cf7..76a2f34a4 100644 --- a/packages/keyring-eth-qr/src/qr-keyring.test.ts +++ b/packages/keyring-eth-qr/src/qr-keyring.test.ts @@ -225,8 +225,8 @@ describe('QrKeyring', () => { // @ts-expect-error QrKeyring types are stricter than Keystone ones await keyring.deserialize(await keystoneKeyring.serialize()); - expect(keystoneKeyring.getAccounts()).toStrictEqual( - keystoneKeyring.getAccounts(), + expect(await keystoneKeyring.getAccounts()).toStrictEqual( + keyring.getAccounts(), ); expect(await getXPUBFromKeyring(keyring)).toStrictEqual( await getXPUBFromKeyring(keystoneKeyring),