diff --git a/packages/tendermint-rpc/src/index.ts b/packages/tendermint-rpc/src/index.ts index 1bcb3e6a..5530c322 100644 --- a/packages/tendermint-rpc/src/index.ts +++ b/packages/tendermint-rpc/src/index.ts @@ -85,6 +85,12 @@ export { toSeconds, } from "./dates"; export { HttpClient, WebsocketClient } from "./rpcclients"; // TODO: Why do we export those outside of this package? -export { BlockIdFlag, CommitSignature, ValidatorEd25519Pubkey, ValidatorPubkey } from "./types"; +export { + BlockIdFlag, + CommitSignature, + ValidatorEd25519Pubkey, + ValidatorSecp256k1Pubkey, + ValidatorPubkey, +} from "./types"; export * as tendermint34 from "./tendermint34"; export { Tendermint34Client } from "./tendermint34"; diff --git a/packages/tendermint-rpc/src/legacy/adaptors/v0-33/responses.ts b/packages/tendermint-rpc/src/legacy/adaptors/v0-33/responses.ts index 9feb8c2e..381904e4 100644 --- a/packages/tendermint-rpc/src/legacy/adaptors/v0-33/responses.ts +++ b/packages/tendermint-rpc/src/legacy/adaptors/v0-33/responses.ts @@ -150,14 +150,21 @@ interface RpcPubkey { } function decodePubkey(data: RpcPubkey): ValidatorPubkey { - if (data.type === "tendermint/PubKeyEd25519") { + switch (data.type) { // go-amino special code - return { - algorithm: "ed25519", - data: fromBase64(assertNotEmpty(data.value)), - }; + case "tendermint/PubKeyEd25519": + return { + algorithm: "ed25519", + data: fromBase64(assertNotEmpty(data.value)), + }; + case "tendermint/PubKeySecp256k1": + return { + algorithm: "secp256k1", + data: fromBase64(assertNotEmpty(data.value)), + }; + default: + throw new Error(`unknown pubkey type: ${data.type}`); } - throw new Error(`unknown pubkey type: ${data.type}`); } // for evidence, block results, etc. diff --git a/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts b/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts index 84c2ea33..5386c7e1 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts @@ -156,14 +156,21 @@ interface RpcPubkey { } function decodePubkey(data: RpcPubkey): ValidatorPubkey { - if (data.type === "tendermint/PubKeyEd25519") { + switch (data.type) { // go-amino special code - return { - algorithm: "ed25519", - data: fromBase64(assertNotEmpty(data.value)), - }; + case "tendermint/PubKeyEd25519": + return { + algorithm: "ed25519", + data: fromBase64(assertNotEmpty(data.value)), + }; + case "tendermint/PubKeySecp256k1": + return { + algorithm: "secp256k1", + data: fromBase64(assertNotEmpty(data.value)), + }; + default: + throw new Error(`unknown pubkey type: ${data.type}`); } - throw new Error(`unknown pubkey type: ${data.type}`); } // for evidence, block results, etc. diff --git a/packages/tendermint-rpc/src/types.ts b/packages/tendermint-rpc/src/types.ts index ae0c74b0..faa5dcec 100644 --- a/packages/tendermint-rpc/src/types.ts +++ b/packages/tendermint-rpc/src/types.ts @@ -8,11 +8,15 @@ export interface ValidatorEd25519Pubkey { readonly data: Uint8Array; } +export interface ValidatorSecp256k1Pubkey { + readonly algorithm: "secp256k1"; + readonly data: Uint8Array; +} + /** * Union type for different possible pubkeys. - * Currently only Ed25519 supported. */ -export type ValidatorPubkey = ValidatorEd25519Pubkey; +export type ValidatorPubkey = ValidatorEd25519Pubkey | ValidatorSecp256k1Pubkey; export enum BlockIdFlag { Unknown = 0,