From 0e1caf96e7c59b61bd92b7cdea64fd50247517b6 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Fri, 6 Mar 2020 19:17:08 +0100 Subject: [PATCH] Support any prefix in decodeBech32Pubkey/encodeBech32Pubkey --- packages/sdk/src/index.ts | 7 +------ packages/sdk/src/pubkey.spec.ts | 9 +++++++++ packages/sdk/src/pubkey.ts | 14 ++------------ packages/sdk/types/index.d.ts | 7 +------ packages/sdk/types/pubkey.d.ts | 3 +-- 5 files changed, 14 insertions(+), 26 deletions(-) diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index 56214227..d9a0844e 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -25,12 +25,7 @@ export { SearchTxFilter, } from "./cosmwasmclient"; export { makeCosmoshubPath, Pen, PrehashType, Secp256k1Pen } from "./pen"; -export { - CosmosPubkeyBech32Prefix, - decodeBech32Pubkey, - encodeBech32Pubkey, - encodeSecp256k1Pubkey, -} from "./pubkey"; +export { decodeBech32Pubkey, encodeBech32Pubkey, encodeSecp256k1Pubkey } from "./pubkey"; export { findSequenceForSignedTx } from "./sequence"; export { encodeSecp256k1Signature, decodeSignature } from "./signature"; export { diff --git a/packages/sdk/src/pubkey.spec.ts b/packages/sdk/src/pubkey.spec.ts index 51427488..cb344f7b 100644 --- a/packages/sdk/src/pubkey.spec.ts +++ b/packages/sdk/src/pubkey.spec.ts @@ -32,6 +32,15 @@ describe("pubkey", () => { value: "A08EGB7ro1ORuFhjOnZcSgwYlpe0DSFjVNUIkNNQxwKQ", }); }); + + it("works for enigma pubkey", () => { + expect( + decodeBech32Pubkey("enigmapub1addwnpepqw5k9p439nw0zpg2aundx4umwx4nw233z5prpjqjv5anl5grmnchzp2xwvv"), + ).toEqual({ + type: "tendermint/PubKeySecp256k1", + value: "A6lihrEs3PEFCu8m01ebcas3KjEVAjDIEmU7P9ED3PFx", + }); + }); }); describe("encodeBech32Pubkey", () => { diff --git a/packages/sdk/src/pubkey.ts b/packages/sdk/src/pubkey.ts index b9c8b1ba..8835b97a 100644 --- a/packages/sdk/src/pubkey.ts +++ b/packages/sdk/src/pubkey.ts @@ -13,13 +13,6 @@ export function encodeSecp256k1Pubkey(pubkey: Uint8Array): PubKey { }; } -export type CosmosPubkeyBech32Prefix = "cosmospub" | "cosmosvalconspub" | "cosmosvaloperpub"; -const validPubkeyPrefixes = ["cosmospub", "cosmosvalconspub", "cosmosvaloperpub"]; - -function isCosmosPubkeyBech32Prefix(prefix: string): prefix is CosmosPubkeyBech32Prefix { - return validPubkeyPrefixes.includes(prefix); -} - // As discussed in https://github.com/binance-chain/javascript-sdk/issues/163 // Prefixes listed here: https://github.com/tendermint/tendermint/blob/d419fffe18531317c28c29a292ad7d253f6cafdf/docs/spec/blockchain/encoding.md#public-key-cryptography // Last bytes is varint-encoded length prefix @@ -29,10 +22,7 @@ const pubkeyAminoPrefixSr25519 = Encoding.fromHex("0dfb1005"); const pubkeyAminoPrefixLength = pubkeyAminoPrefixSecp256k1.length; export function decodeBech32Pubkey(bechEncoded: string): PubKey { - const { prefix, data } = Bech32.decode(bechEncoded); - if (!isCosmosPubkeyBech32Prefix(prefix)) { - throw new Error(`Invalid bech32 prefix. Must be one of ${validPubkeyPrefixes.join(", ")}.`); - } + const { data } = Bech32.decode(bechEncoded); const aminoPrefix = data.slice(0, pubkeyAminoPrefixLength); const rest = data.slice(pubkeyAminoPrefixLength); @@ -65,7 +55,7 @@ export function decodeBech32Pubkey(bechEncoded: string): PubKey { } } -export function encodeBech32Pubkey(pubkey: PubKey, prefix: CosmosPubkeyBech32Prefix): string { +export function encodeBech32Pubkey(pubkey: PubKey, prefix: string): string { let aminoPrefix: Uint8Array; switch (pubkey.type) { // Note: please don't add cases here without writing additional unit tests diff --git a/packages/sdk/types/index.d.ts b/packages/sdk/types/index.d.ts index ddb6b5f1..c22bf51f 100644 --- a/packages/sdk/types/index.d.ts +++ b/packages/sdk/types/index.d.ts @@ -24,12 +24,7 @@ export { SearchTxFilter, } from "./cosmwasmclient"; export { makeCosmoshubPath, Pen, PrehashType, Secp256k1Pen } from "./pen"; -export { - CosmosPubkeyBech32Prefix, - decodeBech32Pubkey, - encodeBech32Pubkey, - encodeSecp256k1Pubkey, -} from "./pubkey"; +export { decodeBech32Pubkey, encodeBech32Pubkey, encodeSecp256k1Pubkey } from "./pubkey"; export { findSequenceForSignedTx } from "./sequence"; export { encodeSecp256k1Signature, decodeSignature } from "./signature"; export { diff --git a/packages/sdk/types/pubkey.d.ts b/packages/sdk/types/pubkey.d.ts index 8715588b..b6ebdebc 100644 --- a/packages/sdk/types/pubkey.d.ts +++ b/packages/sdk/types/pubkey.d.ts @@ -1,5 +1,4 @@ import { PubKey } from "./types"; export declare function encodeSecp256k1Pubkey(pubkey: Uint8Array): PubKey; -export declare type CosmosPubkeyBech32Prefix = "cosmospub" | "cosmosvalconspub" | "cosmosvaloperpub"; export declare function decodeBech32Pubkey(bechEncoded: string): PubKey; -export declare function encodeBech32Pubkey(pubkey: PubKey, prefix: CosmosPubkeyBech32Prefix): string; +export declare function encodeBech32Pubkey(pubkey: PubKey, prefix: string): string;