From 4fbc3d9070caf124842440141154f0cf9781c986 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Tue, 12 Jan 2021 17:18:45 +0000 Subject: [PATCH] stargate: Update SigningStargateClient for Amino signing --- .../stargate/src/signingstargateclient.ts | 36 +++++++++++++------ .../stargate/types/signingstargateclient.d.ts | 2 ++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/packages/stargate/src/signingstargateclient.ts b/packages/stargate/src/signingstargateclient.ts index 2cff750e..263446f8 100644 --- a/packages/stargate/src/signingstargateclient.ts +++ b/packages/stargate/src/signingstargateclient.ts @@ -27,6 +27,14 @@ import { AminoTypes } from "./aminotypes"; import { cosmos } from "./codec"; import { BroadcastTxResponse, StargateClient } from "./stargateclient"; +const { MsgMultiSend } = cosmos.bank.v1beta1; +const { + MsgBeginRedelegate, + MsgCreateValidator, + MsgDelegate, + MsgEditValidator, + MsgUndelegate, +} = cosmos.staking.v1beta1; const { TxRaw } = cosmos.tx.v1beta1; const defaultGasPrice = GasPrice.fromString("0.025ucosm"); @@ -40,6 +48,7 @@ export interface PrivateSigningStargateClient { export interface SigningStargateClientOptions { readonly registry?: Registry; + readonly aminoTypes?: AminoTypes; readonly gasPrice?: GasPrice; readonly gasLimits?: GasLimits; } @@ -48,7 +57,7 @@ export class SigningStargateClient extends StargateClient { private readonly fees: CosmosFeeTable; private readonly registry: Registry; private readonly signer: OfflineSigner; - private readonly aminoTypes = new AminoTypes(); + private readonly aminoTypes; public static async connectWithSigner( endpoint: string, @@ -65,9 +74,22 @@ export class SigningStargateClient extends StargateClient { options: SigningStargateClientOptions, ) { super(tmClient); - const { registry = new Registry(), gasPrice = defaultGasPrice, gasLimits = defaultGasLimits } = options; + const { + registry = new Registry([ + ["/cosmos.bank.v1beta1.MsgMultiSend", MsgMultiSend], + ["/cosmos.staking.v1beta1.MsgBeginRedelegate", MsgBeginRedelegate], + ["/cosmos.staking.v1beta1.MsgCreateValidator", MsgCreateValidator], + ["/cosmos.staking.v1beta1.MsgDelegate", MsgDelegate], + ["/cosmos.staking.v1beta1.MsgEditValidator", MsgEditValidator], + ["/cosmos.staking.v1beta1.MsgUndelegate", MsgUndelegate], + ]), + aminoTypes = new AminoTypes(), + gasPrice = defaultGasPrice, + gasLimits = defaultGasLimits, + } = options; this.fees = buildFeeTable(gasPrice, defaultGasLimits, gasLimits); this.registry = registry; + this.aminoTypes = aminoTypes; this.signer = signer; } @@ -136,17 +158,11 @@ export class SigningStargateClient extends StargateClient { // Amino signer const signMode = cosmos.tx.signing.v1beta1.SignMode.SIGN_MODE_LEGACY_AMINO_JSON; - const msgs = messages.map((msg) => ({ - type: this.aminoTypes.toAmino(msg.typeUrl), - value: msg.value, - })); + const msgs = messages.map((msg) => this.aminoTypes.toAmino(msg)); const signDoc = makeSignDocAmino(msgs, fee, chainId, memo, accountNumber, sequence); const { signature, signed } = await this.signer.signAmino(address, signDoc); const signedTxBody = { - messages: signed.msgs.map((msg) => ({ - typeUrl: this.aminoTypes.fromAmino(msg.type), - value: msg.value, - })), + messages: signed.msgs.map((msg) => this.aminoTypes.fromAmino(msg)), memo: signed.memo, }; const signedTxBodyBytes = this.registry.encode({ diff --git a/packages/stargate/types/signingstargateclient.d.ts b/packages/stargate/types/signingstargateclient.d.ts index b217d13d..ea901c42 100644 --- a/packages/stargate/types/signingstargateclient.d.ts +++ b/packages/stargate/types/signingstargateclient.d.ts @@ -1,5 +1,6 @@ import { Coin, CosmosFeeTable, GasLimits, GasPrice, StdFee } from "@cosmjs/launchpad"; import { EncodeObject, OfflineSigner, Registry } from "@cosmjs/proto-signing"; +import { AminoTypes } from "./aminotypes"; import { BroadcastTxResponse, StargateClient } from "./stargateclient"; /** Use for testing only */ export interface PrivateSigningStargateClient { @@ -8,6 +9,7 @@ export interface PrivateSigningStargateClient { } export interface SigningStargateClientOptions { readonly registry?: Registry; + readonly aminoTypes?: AminoTypes; readonly gasPrice?: GasPrice; readonly gasLimits?: GasLimits; }