From 43c2b9f7251c0d04aa245840388b1f1fc6714852 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 7 Jul 2026 17:03:38 +0200 Subject: [PATCH 1/2] feat(keyring-api): add base32 private key type --- .../src/v2/api/create-account/index.test.ts | 13 ++++++++++ .../keyring-api/src/v2/api/keyring.test-d.ts | 26 +++++++++++++++++++ .../keyring-api/src/v2/api/private-key.ts | 6 +++++ 3 files changed, 45 insertions(+) diff --git a/packages/keyring-api/src/v2/api/create-account/index.test.ts b/packages/keyring-api/src/v2/api/create-account/index.test.ts index 015649dbd..3bfe7a32b 100644 --- a/packages/keyring-api/src/v2/api/create-account/index.test.ts +++ b/packages/keyring-api/src/v2/api/create-account/index.test.ts @@ -63,6 +63,19 @@ describe('CreateAccountOptionsStruct', () => { assert(validPrivateKey, CreateAccountOptionsStruct), ).not.toThrow(); }); + + it('validates PrivateKeyImport type with base32 encoding correctly', () => { + const validPrivateKey = { + type: AccountCreationType.PrivateKeyImport, + privateKey: 'JBSWY3DPEHPK3PXP', + encoding: 'base32', + }; + + expect(is(validPrivateKey, CreateAccountOptionsStruct)).toBe(true); + expect(() => + assert(validPrivateKey, CreateAccountOptionsStruct), + ).not.toThrow(); + }); }); describe('invalid account creation types', () => { diff --git a/packages/keyring-api/src/v2/api/keyring.test-d.ts b/packages/keyring-api/src/v2/api/keyring.test-d.ts index 3a02f89f6..c18c4d21d 100644 --- a/packages/keyring-api/src/v2/api/keyring.test-d.ts +++ b/packages/keyring-api/src/v2/api/keyring.test-d.ts @@ -50,6 +50,15 @@ expectAssignable({ type: 'eip155:eoa', }); +expectAssignable({ + encoding: 'base32', +}); + +expectAssignable({ + encoding: 'base32', + type: 'eip155:eoa', +}); + expectNotAssignable({ encoding: 'invalid', }); @@ -133,6 +142,12 @@ expectAssignable({ accountType: 'bip122:p2wpkh', }); +expectAssignable({ + type: AccountCreationType.PrivateKeyImport, + privateKey: 'JBSWY3DPEHPK3PXP', + encoding: 'base32', +}); + // Test CreateAccountCustomOptions expectAssignable({ type: AccountCreationType.Custom, @@ -172,6 +187,11 @@ expectAssignable({ encoding: 'base58', }); +expectAssignable({ + type: AccountExportType.PrivateKey, + encoding: 'base32', +}); + // Test PrivateKeyExportedAccount expectAssignable({ type: AccountExportType.PrivateKey, @@ -186,6 +206,12 @@ expectAssignable({ encoding: 'base58', }); +expectAssignable({ + type: AccountExportType.PrivateKey, + privateKey: 'JBSWY3DPEHPK3PXP', + encoding: 'base32', +}); + // Test Keyring interface expectAssignable(KeyringType.Hd); expectAssignable({ diff --git a/packages/keyring-api/src/v2/api/private-key.ts b/packages/keyring-api/src/v2/api/private-key.ts index 97b657058..12176c9c6 100644 --- a/packages/keyring-api/src/v2/api/private-key.ts +++ b/packages/keyring-api/src/v2/api/private-key.ts @@ -16,6 +16,11 @@ export enum PrivateKeyEncoding { * Base58 encoding format. */ Base58 = 'base58', + + /** + * Base32 encoding format. + */ + Base32 = 'base32', } /** @@ -24,6 +29,7 @@ export enum PrivateKeyEncoding { export const PrivateKeyEncodingStruct = enums([ `${PrivateKeyEncoding.Hexadecimal}`, `${PrivateKeyEncoding.Base58}`, + `${PrivateKeyEncoding.Base32}`, ]); /** From c41a37f0f1270f4912f3ecfd7bfc68330b84032c Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 8 Jul 2026 11:33:53 +0200 Subject: [PATCH 2/2] chore: changelog --- packages/keyring-api/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/keyring-api/CHANGELOG.md b/packages/keyring-api/CHANGELOG.md index 3799f6e3b..fd7ed981e 100644 --- a/packages/keyring-api/CHANGELOG.md +++ b/packages/keyring-api/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add support for `base32` private key encoding in `exportAccount` ([#589](https://github.com/MetaMask/accounts/pull/589)) + ## [23.5.0] ### Added