diff --git a/packages/multichain-account-service/CHANGELOG.md b/packages/multichain-account-service/CHANGELOG.md index 428e0be92f7..22262b7ae4b 100644 --- a/packages/multichain-account-service/CHANGELOG.md +++ b/packages/multichain-account-service/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Accept P2TR (taproot) accounts as compatible Bitcoin accounts in `BtcAccountProvider` +- Add testnet4 (`BtcScope.Testnet4`) to Bitcoin provider capabilities and account discovery + ### Changed - Bump `@metamask/accounts-controller` from `^37.1.1` to `^37.2.0` ([#8363](https://github.com/MetaMask/core/pull/8363)) diff --git a/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts b/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts index 98dc3a8dd7b..f2a2a89fc72 100644 --- a/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts +++ b/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts @@ -295,6 +295,14 @@ describe('BtcAccountProvider', () => { expect(provider.isAccountCompatible(account)).toBe(true); }); + it('returns true if a P2TR account is compatible', () => { + const account = MOCK_BTC_P2TR_ACCOUNT_1; + const { provider } = setup({ + accounts: [account], + }); + expect(provider.isAccountCompatible(account)).toBe(true); + }); + it('returns false if an account is not compatible', () => { const account = MOCK_HD_ACCOUNT_1; const { provider } = setup({ diff --git a/packages/multichain-account-service/src/providers/BtcAccountProvider.ts b/packages/multichain-account-service/src/providers/BtcAccountProvider.ts index 5661dbaa30d..8aa6c5619ff 100644 --- a/packages/multichain-account-service/src/providers/BtcAccountProvider.ts +++ b/packages/multichain-account-service/src/providers/BtcAccountProvider.ts @@ -47,7 +47,7 @@ export class BtcAccountProvider extends SnapAccountProvider { static BTC_SNAP_ID = 'npm:@metamask/bitcoin-wallet-snap' as SnapId; readonly capabilities: KeyringCapabilities = { - scopes: [BtcScope.Mainnet, BtcScope.Testnet], + scopes: [BtcScope.Mainnet, BtcScope.Testnet, BtcScope.Testnet4], bip44: { deriveIndex: true, deriveIndexRange: true, @@ -68,7 +68,8 @@ export class BtcAccountProvider extends SnapAccountProvider { isAccountCompatible(account: Bip44Account): boolean { return ( - account.type === BtcAccountType.P2wpkh && + (account.type === BtcAccountType.P2wpkh || + account.type === BtcAccountType.P2tr) && Object.values(BtcAccountType).includes(account.type) ); } @@ -113,7 +114,7 @@ export class BtcAccountProvider extends SnapAccountProvider { withTimeout( () => client.discoverAccounts( - [BtcScope.Mainnet], + [BtcScope.Mainnet, BtcScope.Testnet4], entropySource, groupIndex, ),