From 8cc1ac2ba22d5fba86e80ce4448b85f5d8c5bd5a Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 31 Mar 2021 16:44:01 +0200 Subject: [PATCH 1/7] stargate: Add sendIbcTokens method to SigningStargateClient --- .../stargate/src/signingstargateclient.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/stargate/src/signingstargateclient.ts b/packages/stargate/src/signingstargateclient.ts index 43f6beb7..16a6d9e5 100644 --- a/packages/stargate/src/signingstargateclient.ts +++ b/packages/stargate/src/signingstargateclient.ts @@ -13,6 +13,7 @@ import { } from "@cosmjs/proto-signing"; import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import { assert } from "@cosmjs/utils"; +import Long from "long"; import { AminoTypes } from "./aminotypes"; import { MsgMultiSend } from "./codec/cosmos/bank/v1beta1/tx"; @@ -45,6 +46,7 @@ import { MsgTimeout, MsgTimeoutOnClose, } from "./codec/ibc/core/channel/v1/tx"; +import { Height } from "./codec/ibc/core/client/v1/client"; import { MsgCreateClient, MsgSubmitMisbehaviour, @@ -76,6 +78,7 @@ export const defaultGasPrice = GasPrice.fromString("0.025ucosm"); export const defaultGasLimits: GasLimits = { send: 80_000, delegate: 160_000, + transfer: 160_000, undelegate: 160_000, withdraw: 160_000, }; @@ -246,6 +249,35 @@ export class SigningStargateClient extends StargateClient { return this.signAndBroadcast(delegatorAddress, [withdrawMsg], this.fees.withdraw, memo); } + public async sendIbcTokens( + senderAddress: string, + recipientAddress: string, + transferAmount: Coin, + sourcePort: string, + sourceChannel: string, + timeoutHeight: Height | undefined, + /** timeout in seconds */ + timeoutTimestamp: number | undefined, + memo = "", + ): Promise { + const timeoutTimestampNanoseconds = timeoutTimestamp + ? Long.fromNumber(timeoutTimestamp).multiply(1_000_000_000) + : undefined; + const transferMsg = { + typeUrl: "/ibc.applications.transfer.v1.MsgTransfer", + value: MsgTransfer.fromPartial({ + sourcePort: sourcePort, + sourceChannel: sourceChannel, + sender: senderAddress, + receiver: recipientAddress, + token: transferAmount, + timeoutHeight: timeoutHeight, + timeoutTimestamp: timeoutTimestampNanoseconds, + }), + }; + return this.signAndBroadcast(senderAddress, [transferMsg], this.fees.transfer, memo); + } + public async signAndBroadcast( signerAddress: string, messages: readonly EncodeObject[], From 33687ba3696aa256e0aef37806efbfbff37ca3ed Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 31 Mar 2021 16:47:27 +0200 Subject: [PATCH 2/7] stargate: Standardise style in signingstargateclient.ts --- .../stargate/src/signingstargateclient.ts | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/stargate/src/signingstargateclient.ts b/packages/stargate/src/signingstargateclient.ts index 16a6d9e5..c2a9d357 100644 --- a/packages/stargate/src/signingstargateclient.ts +++ b/packages/stargate/src/signingstargateclient.ts @@ -219,7 +219,11 @@ export class SigningStargateClient extends StargateClient { ): Promise { const delegateMsg = { typeUrl: "/cosmos.staking.v1beta1.MsgDelegate", - value: MsgDelegate.fromPartial({ delegatorAddress: delegatorAddress, validatorAddress, amount }), + value: MsgDelegate.fromPartial({ + delegatorAddress: delegatorAddress, + validatorAddress: validatorAddress, + amount: amount, + }), }; return this.signAndBroadcast(delegatorAddress, [delegateMsg], this.fees.delegate, memo); } @@ -232,7 +236,11 @@ export class SigningStargateClient extends StargateClient { ): Promise { const undelegateMsg = { typeUrl: "/cosmos.staking.v1beta1.MsgUndelegate", - value: MsgUndelegate.fromPartial({ delegatorAddress: delegatorAddress, validatorAddress, amount }), + value: MsgUndelegate.fromPartial({ + delegatorAddress: delegatorAddress, + validatorAddress: validatorAddress, + amount: amount, + }), }; return this.signAndBroadcast(delegatorAddress, [undelegateMsg], this.fees.undelegate, memo); } @@ -244,7 +252,10 @@ export class SigningStargateClient extends StargateClient { ): Promise { const withdrawMsg = { typeUrl: "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", - value: MsgWithdrawDelegatorReward.fromPartial({ delegatorAddress: delegatorAddress, validatorAddress }), + value: MsgWithdrawDelegatorReward.fromPartial({ + delegatorAddress: delegatorAddress, + validatorAddress: validatorAddress, + }), }; return this.signAndBroadcast(delegatorAddress, [withdrawMsg], this.fees.withdraw, memo); } @@ -312,7 +323,11 @@ export class SigningStargateClient extends StargateClient { } else { const { accountNumber, sequence } = await this.getSequence(signerAddress); const chainId = await this.getChainId(); - signerData = { accountNumber, sequence, chainId }; + signerData = { + accountNumber: accountNumber, + sequence: sequence, + chainId: chainId, + }; } return isOfflineDirectSigner(this.signer) From db81c1692a69c8fb05a4bba147846886ff80c647 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Thu, 1 Apr 2021 14:00:32 +0200 Subject: [PATCH 3/7] stargate: Remove unnecessary assertions in SigningStargateClient tests --- packages/stargate/src/signingstargateclient.spec.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/stargate/src/signingstargateclient.spec.ts b/packages/stargate/src/signingstargateclient.spec.ts index 4d79a1b6..ff3a32c7 100644 --- a/packages/stargate/src/signingstargateclient.spec.ts +++ b/packages/stargate/src/signingstargateclient.spec.ts @@ -253,7 +253,6 @@ describe("SigningStargateClient", () => { // got tokens const after = await client.getBalance(beneficiaryAddress, "ucosm"); - assert(after); expect(after).toEqual(transferAmount[0]); }); @@ -280,7 +279,6 @@ describe("SigningStargateClient", () => { // got tokens const after = await client.getBalance(beneficiaryAddress, "ucosm"); - assert(after); expect(after).toEqual(transferAmount[0]); }); }); @@ -465,8 +463,6 @@ describe("SigningStargateClient", () => { assert(customDelegatorAddress, "missing customDelegatorAddress"); assert(customValidatorAddress, "missing validatorAddress"); assert(customAmount, "missing amount"); - assert(customAmount.amount, "missing amount.amount"); - assert(customAmount.denom, "missing amount.denom"); return { delegator_address: customDelegatorAddress, validator_address: customValidatorAddress, @@ -733,8 +729,6 @@ describe("SigningStargateClient", () => { assert(customDelegatorAddress, "missing customDelegatorAddress"); assert(customValidatorAddress, "missing validatorAddress"); assert(customAmount, "missing amount"); - assert(customAmount.amount, "missing amount.amount"); - assert(customAmount.denom, "missing amount.denom"); return { delegator_address: customDelegatorAddress, validator_address: customValidatorAddress, From 93abdcfa46c4f2eeadebb4dc1b94adfb2ab2012f Mon Sep 17 00:00:00 2001 From: willclarktech Date: Thu, 1 Apr 2021 14:42:01 +0200 Subject: [PATCH 4/7] stargate: Update tests --- .../src/signingstargateclient.spec.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/packages/stargate/src/signingstargateclient.spec.ts b/packages/stargate/src/signingstargateclient.spec.ts index ff3a32c7..45f42772 100644 --- a/packages/stargate/src/signingstargateclient.spec.ts +++ b/packages/stargate/src/signingstargateclient.spec.ts @@ -49,6 +49,15 @@ describe("SigningStargateClient", () => { ], gas: "160000", }, + transfer: { + amount: [ + { + amount: "4000", + denom: "ucosm", + }, + ], + gas: "160000", + }, undelegate: { amount: [ { @@ -107,6 +116,15 @@ describe("SigningStargateClient", () => { ], gas: "160000", }, + transfer: { + amount: [ + { + amount: "502400", + denom: "utest", + }, + ], + gas: "160000", + }, undelegate: { amount: [ { @@ -157,6 +175,15 @@ describe("SigningStargateClient", () => { ], gas: "120000", }, + transfer: { + amount: [ + { + amount: "4000", + denom: "ucosm", + }, + ], + gas: "160000", + }, undelegate: { amount: [ { @@ -207,6 +234,15 @@ describe("SigningStargateClient", () => { ], gas: "160000", }, + transfer: { + amount: [ + { + amount: "502400", + denom: "utest", + }, + ], + gas: "160000", + }, undelegate: { amount: [ { From 5e8f9dc0edc202bf479fa9fc558532e78f620c46 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Thu, 1 Apr 2021 14:52:25 +0200 Subject: [PATCH 5/7] cosmwasm-stargate: Update tests --- .../src/signingcosmwasmclient.spec.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index 79d2844c..422b8645 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -95,6 +95,10 @@ describe("SigningCosmWasmClient", () => { amount: coins(502400, "utest"), gas: "160000", }, + transfer: { + amount: coins(502400, "utest"), + gas: "160000", + }, undelegate: { amount: coins(502400, "utest"), gas: "160000", @@ -146,6 +150,10 @@ describe("SigningCosmWasmClient", () => { amount: coins(4000, "ucosm"), gas: "160000", }, + transfer: { + amount: coins(4000, "ucosm"), + gas: "160000", + }, undelegate: { amount: coins(4000, "ucosm"), gas: "160000", @@ -198,6 +206,10 @@ describe("SigningCosmWasmClient", () => { amount: coins(502400, "utest"), gas: "160000", }, + transfer: { + amount: coins(502400, "utest"), + gas: "160000", + }, undelegate: { amount: coins(502400, "utest"), gas: "160000", From 3f3a4ef2fbde699041c4effa92bfcf6f4f7f00f4 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Thu, 1 Apr 2021 14:55:07 +0200 Subject: [PATCH 6/7] Update CHANGELOG for SigningStargateClient.sendIbcTokens --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7345a7e5..98d101cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,7 @@ and this project adheres to `protected`. - @cosmjs/cosmwasm-stargate: Add `SigningCosmWasmClient.offline` static method for constructing offline clients without a Tendermint client. +- @cosmjs/stargate: Add `SigningStargateClient.sendIbcTokens` method. ### Changed From f19fd3cc8fb1b6b9dae1008109f391da901dafad Mon Sep 17 00:00:00 2001 From: willclarktech Date: Thu, 1 Apr 2021 14:57:41 +0200 Subject: [PATCH 7/7] stargate: Add transfer to CosmosFeeTable --- packages/stargate/src/signingstargateclient.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stargate/src/signingstargateclient.ts b/packages/stargate/src/signingstargateclient.ts index c2a9d357..c1215de6 100644 --- a/packages/stargate/src/signingstargateclient.ts +++ b/packages/stargate/src/signingstargateclient.ts @@ -70,6 +70,7 @@ import { BroadcastTxResponse, StargateClient } from "./stargateclient"; export interface CosmosFeeTable extends FeeTable { readonly send: StdFee; readonly delegate: StdFee; + readonly transfer: StdFee; readonly undelegate: StdFee; readonly withdraw: StdFee; }