From 902f21b98aace92a1de9af95e0169d136bf91490 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 3 Mar 2022 15:24:10 +0100 Subject: [PATCH 1/8] Organize queries by module --- packages/stargate/src/index.ts | 16 +++++++------- .../auth/queries.spec.ts} | 6 +++--- .../auth.ts => modules/auth/queries.ts} | 3 +-- .../bank/queries.spec.ts} | 6 +++--- .../bank.ts => modules/bank/queries.ts} | 3 +-- .../distribution/queries.spec.ts} | 12 +++++------ .../distribution/queries.ts} | 3 +-- .../gov/queries.spec.ts} | 13 ++++++------ .../gov.ts => modules/gov/queries.ts} | 3 +-- .../ibc}/ibctestdata.spec.ts | 0 .../ibc/queries.spec.ts} | 6 +++--- .../ibc.ts => modules/ibc/queries.ts} | 3 +-- packages/stargate/src/modules/index.ts | 9 ++++++++ .../mint/queries.spec.ts} | 6 +++--- .../mint.ts => modules/mint/queries.ts} | 4 +--- .../slashing/queries.spec.ts} | 6 +++--- .../slashing/queries.ts} | 3 +-- .../staking/queries.spec.ts} | 12 +++++------ .../staking.ts => modules/staking/queries.ts} | 3 +-- .../tx.spec.ts => modules/tx/queries.spec.ts} | 11 +++++----- .../{queries/tx.ts => modules/tx/queries.ts} | 3 +-- packages/stargate/src/queries/index.ts | 21 ------------------- packages/stargate/src/queryclient/index.ts | 8 +++++++ .../queryclient.spec.ts | 0 .../{queries => queryclient}/queryclient.ts | 0 .../{queries => queryclient}/utils.spec.ts | 0 .../src/{queries => queryclient}/utils.ts | 0 packages/stargate/src/stargateclient.ts | 4 ++-- 28 files changed, 75 insertions(+), 89 deletions(-) rename packages/stargate/src/{queries/auth.spec.ts => modules/auth/queries.spec.ts} (93%) rename packages/stargate/src/{queries/auth.ts => modules/auth/queries.ts} (91%) rename packages/stargate/src/{queries/bank.spec.ts => modules/bank/queries.spec.ts} (97%) rename packages/stargate/src/{queries/bank.ts => modules/bank/queries.ts} (95%) rename packages/stargate/src/{queries/distribution.spec.ts => modules/distribution/queries.spec.ts} (95%) rename packages/stargate/src/{queries/distribution.ts => modules/distribution/queries.ts} (97%) rename packages/stargate/src/{queries/gov.spec.ts => modules/gov/queries.spec.ts} (97%) rename packages/stargate/src/{queries/gov.ts => modules/gov/queries.ts} (96%) rename packages/stargate/src/{queries => modules/ibc}/ibctestdata.spec.ts (100%) rename packages/stargate/src/{queries/ibc.spec.ts => modules/ibc/queries.spec.ts} (99%) rename packages/stargate/src/{queries/ibc.ts => modules/ibc/queries.ts} (99%) create mode 100644 packages/stargate/src/modules/index.ts rename packages/stargate/src/{queries/mint.spec.ts => modules/mint/queries.spec.ts} (91%) rename packages/stargate/src/{queries/mint.ts => modules/mint/queries.ts} (93%) rename packages/stargate/src/{queries/slashing.spec.ts => modules/slashing/queries.spec.ts} (86%) rename packages/stargate/src/{queries/slashing.ts => modules/slashing/queries.ts} (91%) rename packages/stargate/src/{queries/staking.spec.ts => modules/staking/queries.spec.ts} (96%) rename packages/stargate/src/{queries/staking.ts => modules/staking/queries.ts} (98%) rename packages/stargate/src/{queries/tx.spec.ts => modules/tx/queries.spec.ts} (92%) rename packages/stargate/src/{queries/tx.ts => modules/tx/queries.ts} (96%) delete mode 100644 packages/stargate/src/queries/index.ts create mode 100644 packages/stargate/src/queryclient/index.ts rename packages/stargate/src/{queries => queryclient}/queryclient.spec.ts (100%) rename packages/stargate/src/{queries => queryclient}/queryclient.ts (100%) rename packages/stargate/src/{queries => queryclient}/utils.spec.ts (100%) rename packages/stargate/src/{queries => queryclient}/utils.ts (100%) diff --git a/packages/stargate/src/index.ts b/packages/stargate/src/index.ts index 883f04ea..69442f56 100644 --- a/packages/stargate/src/index.ts +++ b/packages/stargate/src/index.ts @@ -56,13 +56,9 @@ export { } from "./encodeobjects"; export { calculateFee, GasPrice } from "./fee"; export * as logs from "./logs"; -export { makeMultisignedTx } from "./multisignature"; export { AuthExtension, BankExtension, - createPagination, - createProtobufRpcClient, - decodeCosmosSdkDecFromProto, DistributionExtension, GovExtension, GovParamsType, @@ -70,8 +66,6 @@ export { IbcExtension, MintExtension, MintParams, - ProtobufRpcClient, - QueryClient, setupAuthExtension, setupBankExtension, setupDistributionExtension, @@ -82,7 +76,15 @@ export { setupTxExtension, StakingExtension, TxExtension, -} from "./queries"; +} from "./modules"; +export { makeMultisignedTx } from "./multisignature"; +export { + createPagination, + createProtobufRpcClient, + decodeCosmosSdkDecFromProto, + ProtobufRpcClient, + QueryClient, +} from "./queryclient"; export { isSearchByHeightQuery, isSearchBySentFromOrToQuery, diff --git a/packages/stargate/src/queries/auth.spec.ts b/packages/stargate/src/modules/auth/queries.spec.ts similarity index 93% rename from packages/stargate/src/queries/auth.spec.ts rename to packages/stargate/src/modules/auth/queries.spec.ts index d744bb49..05e8ea44 100644 --- a/packages/stargate/src/queries/auth.spec.ts +++ b/packages/stargate/src/modules/auth/queries.spec.ts @@ -6,9 +6,9 @@ import { BaseAccount } from "cosmjs-types/cosmos/auth/v1beta1/auth"; import { Any } from "cosmjs-types/google/protobuf/any"; import Long from "long"; -import { nonExistentAddress, pendingWithoutSimapp, simapp, unused, validator } from "../testutils.spec"; -import { AuthExtension, setupAuthExtension } from "./auth"; -import { QueryClient } from "./queryclient"; +import { QueryClient } from "../../queryclient"; +import { nonExistentAddress, pendingWithoutSimapp, simapp, unused, validator } from "../../testutils.spec"; +import { AuthExtension, setupAuthExtension } from "./queries"; async function makeClientWithAuth( rpcUrl: string, diff --git a/packages/stargate/src/queries/auth.ts b/packages/stargate/src/modules/auth/queries.ts similarity index 91% rename from packages/stargate/src/queries/auth.ts rename to packages/stargate/src/modules/auth/queries.ts index 958f5a43..348f7d8f 100644 --- a/packages/stargate/src/queries/auth.ts +++ b/packages/stargate/src/modules/auth/queries.ts @@ -1,8 +1,7 @@ import { QueryClientImpl } from "cosmjs-types/cosmos/auth/v1beta1/query"; import { Any } from "cosmjs-types/google/protobuf/any"; -import { QueryClient } from "./queryclient"; -import { createProtobufRpcClient } from "./utils"; +import { createProtobufRpcClient, QueryClient } from "../../queryclient"; export interface AuthExtension { readonly auth: { diff --git a/packages/stargate/src/queries/bank.spec.ts b/packages/stargate/src/modules/bank/queries.spec.ts similarity index 97% rename from packages/stargate/src/queries/bank.spec.ts rename to packages/stargate/src/modules/bank/queries.spec.ts index 724f35d7..bfd4d1ad 100644 --- a/packages/stargate/src/queries/bank.spec.ts +++ b/packages/stargate/src/modules/bank/queries.spec.ts @@ -1,14 +1,14 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; +import { QueryClient } from "../../queryclient"; import { nonExistentAddress, nonNegativeIntegerMatcher, pendingWithoutSimapp, simapp, unused, -} from "../testutils.spec"; -import { BankExtension, setupBankExtension } from "./bank"; -import { QueryClient } from "./queryclient"; +} from "../../testutils.spec"; +import { BankExtension, setupBankExtension } from "./queries"; async function makeClientWithBank( rpcUrl: string, diff --git a/packages/stargate/src/queries/bank.ts b/packages/stargate/src/modules/bank/queries.ts similarity index 95% rename from packages/stargate/src/queries/bank.ts rename to packages/stargate/src/modules/bank/queries.ts index 399a0b4e..9c596789 100644 --- a/packages/stargate/src/queries/bank.ts +++ b/packages/stargate/src/modules/bank/queries.ts @@ -4,8 +4,7 @@ import { Metadata } from "cosmjs-types/cosmos/bank/v1beta1/bank"; import { QueryClientImpl } from "cosmjs-types/cosmos/bank/v1beta1/query"; import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin"; -import { QueryClient } from "./queryclient"; -import { createProtobufRpcClient } from "./utils"; +import { createProtobufRpcClient, QueryClient } from "../../queryclient"; export interface BankExtension { readonly bank: { diff --git a/packages/stargate/src/queries/distribution.spec.ts b/packages/stargate/src/modules/distribution/queries.spec.ts similarity index 95% rename from packages/stargate/src/queries/distribution.spec.ts rename to packages/stargate/src/modules/distribution/queries.spec.ts index bb33473e..6c732fae 100644 --- a/packages/stargate/src/queries/distribution.spec.ts +++ b/packages/stargate/src/modules/distribution/queries.spec.ts @@ -4,9 +4,10 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import { sleep } from "@cosmjs/utils"; import { MsgDelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { MsgDelegateEncodeObject } from "../encodeobjects"; -import { SigningStargateClient } from "../signingstargateclient"; -import { assertIsDeliverTxSuccess } from "../stargateclient"; +import { MsgDelegateEncodeObject } from "../../encodeobjects"; +import { QueryClient } from "../../queryclient"; +import { SigningStargateClient } from "../../signingstargateclient"; +import { assertIsDeliverTxSuccess } from "../../stargateclient"; import { defaultSigningClientOptions, faucet, @@ -14,9 +15,8 @@ import { simapp, simappEnabled, validator, -} from "../testutils.spec"; -import { DistributionExtension, setupDistributionExtension } from "./distribution"; -import { QueryClient } from "./queryclient"; +} from "../../testutils.spec"; +import { DistributionExtension, setupDistributionExtension } from "./queries"; async function makeClientWithDistribution( rpcUrl: string, diff --git a/packages/stargate/src/queries/distribution.ts b/packages/stargate/src/modules/distribution/queries.ts similarity index 97% rename from packages/stargate/src/queries/distribution.ts rename to packages/stargate/src/modules/distribution/queries.ts index ea91d4b8..d9271b5f 100644 --- a/packages/stargate/src/queries/distribution.ts +++ b/packages/stargate/src/modules/distribution/queries.ts @@ -13,8 +13,7 @@ import { } from "cosmjs-types/cosmos/distribution/v1beta1/query"; import Long from "long"; -import { QueryClient } from "./queryclient"; -import { createPagination, createProtobufRpcClient } from "./utils"; +import { createPagination, createProtobufRpcClient, QueryClient } from "../../queryclient"; export interface DistributionExtension { readonly distribution: { diff --git a/packages/stargate/src/queries/gov.spec.ts b/packages/stargate/src/modules/gov/queries.spec.ts similarity index 97% rename from packages/stargate/src/queries/gov.spec.ts rename to packages/stargate/src/modules/gov/queries.spec.ts index cae143ff..a6881d35 100644 --- a/packages/stargate/src/queries/gov.spec.ts +++ b/packages/stargate/src/modules/gov/queries.spec.ts @@ -17,9 +17,10 @@ import { MsgDelegateEncodeObject, MsgSubmitProposalEncodeObject, MsgVoteEncodeObject, -} from "../encodeobjects"; -import { SigningStargateClient } from "../signingstargateclient"; -import { assertIsDeliverTxSuccess } from "../stargateclient"; +} from "../../encodeobjects"; +import { longify, QueryClient } from "../../queryclient"; +import { SigningStargateClient } from "../../signingstargateclient"; +import { assertIsDeliverTxSuccess } from "../../stargateclient"; import { defaultSigningClientOptions, faucet, @@ -29,10 +30,8 @@ import { simapp42Enabled, simappEnabled, validator, -} from "../testutils.spec"; -import { GovExtension, setupGovExtension } from "./gov"; -import { QueryClient } from "./queryclient"; -import { longify } from "./utils"; +} from "../../testutils.spec"; +import { GovExtension, setupGovExtension } from "./queries"; async function makeClientWithGov(rpcUrl: string): Promise<[QueryClient & GovExtension, Tendermint34Client]> { const tmClient = await Tendermint34Client.connect(rpcUrl); diff --git a/packages/stargate/src/queries/gov.ts b/packages/stargate/src/modules/gov/queries.ts similarity index 96% rename from packages/stargate/src/queries/gov.ts rename to packages/stargate/src/modules/gov/queries.ts index e8c81aae..4c365066 100644 --- a/packages/stargate/src/queries/gov.ts +++ b/packages/stargate/src/modules/gov/queries.ts @@ -13,8 +13,7 @@ import { } from "cosmjs-types/cosmos/gov/v1beta1/query"; import Long from "long"; -import { QueryClient } from "./queryclient"; -import { createPagination, createProtobufRpcClient, longify } from "./utils"; +import { createPagination, createProtobufRpcClient, longify, QueryClient } from "../../queryclient"; export type GovParamsType = "deposit" | "tallying" | "voting"; diff --git a/packages/stargate/src/queries/ibctestdata.spec.ts b/packages/stargate/src/modules/ibc/ibctestdata.spec.ts similarity index 100% rename from packages/stargate/src/queries/ibctestdata.spec.ts rename to packages/stargate/src/modules/ibc/ibctestdata.spec.ts diff --git a/packages/stargate/src/queries/ibc.spec.ts b/packages/stargate/src/modules/ibc/queries.spec.ts similarity index 99% rename from packages/stargate/src/queries/ibc.spec.ts rename to packages/stargate/src/modules/ibc/queries.spec.ts index 5d425f6a..19ed3587 100644 --- a/packages/stargate/src/queries/ibc.spec.ts +++ b/packages/stargate/src/modules/ibc/queries.spec.ts @@ -1,10 +1,10 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import Long from "long"; -import { pendingWithoutSimapp42, simapp } from "../testutils.spec"; -import { IbcExtension, setupIbcExtension } from "./ibc"; +import { QueryClient } from "../../queryclient"; +import { pendingWithoutSimapp42, simapp } from "../../testutils.spec"; import * as ibcTest from "./ibctestdata.spec"; -import { QueryClient } from "./queryclient"; +import { IbcExtension, setupIbcExtension } from "./queries"; async function makeClientWithIbc(rpcUrl: string): Promise<[QueryClient & IbcExtension, Tendermint34Client]> { const tmClient = await Tendermint34Client.connect(rpcUrl); diff --git a/packages/stargate/src/queries/ibc.ts b/packages/stargate/src/modules/ibc/queries.ts similarity index 99% rename from packages/stargate/src/queries/ibc.ts rename to packages/stargate/src/modules/ibc/queries.ts index 520b4412..26b0d228 100644 --- a/packages/stargate/src/queries/ibc.ts +++ b/packages/stargate/src/modules/ibc/queries.ts @@ -50,8 +50,7 @@ import { } from "cosmjs-types/ibc/lightclients/tendermint/v1/tendermint"; import Long from "long"; -import { QueryClient } from "./queryclient"; -import { createPagination, createProtobufRpcClient } from "./utils"; +import { createPagination, createProtobufRpcClient, QueryClient } from "../../queryclient"; function decodeTendermintClientStateAny(clientState: Any | undefined): TendermintClientState { if (clientState?.typeUrl !== "/ibc.lightclients.tendermint.v1.ClientState") { diff --git a/packages/stargate/src/modules/index.ts b/packages/stargate/src/modules/index.ts new file mode 100644 index 00000000..94006c83 --- /dev/null +++ b/packages/stargate/src/modules/index.ts @@ -0,0 +1,9 @@ +export { AuthExtension, setupAuthExtension } from "./auth/queries"; +export { BankExtension, setupBankExtension } from "./bank/queries"; +export { DistributionExtension, setupDistributionExtension } from "./distribution/queries"; +export { GovExtension, GovParamsType, GovProposalId, setupGovExtension } from "./gov/queries"; +export { IbcExtension, setupIbcExtension } from "./ibc/queries"; +export { MintExtension, MintParams, setupMintExtension } from "./mint/queries"; +export { setupSlashingExtension, SlashingExtension } from "./slashing/queries"; +export { setupStakingExtension, StakingExtension } from "./staking/queries"; +export { setupTxExtension, TxExtension } from "./tx/queries"; diff --git a/packages/stargate/src/queries/mint.spec.ts b/packages/stargate/src/modules/mint/queries.spec.ts similarity index 91% rename from packages/stargate/src/queries/mint.spec.ts rename to packages/stargate/src/modules/mint/queries.spec.ts index ba9abfed..0e028876 100644 --- a/packages/stargate/src/queries/mint.spec.ts +++ b/packages/stargate/src/modules/mint/queries.spec.ts @@ -1,8 +1,8 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; -import { QueryClient } from "../"; -import { pendingWithoutSimapp, simapp } from "../testutils.spec"; -import { MintExtension, setupMintExtension } from "./mint"; +import { QueryClient } from "../../queryclient"; +import { pendingWithoutSimapp, simapp } from "../../testutils.spec"; +import { MintExtension, setupMintExtension } from "./queries"; async function makeClientWithMint( rpcUrl: string, diff --git a/packages/stargate/src/queries/mint.ts b/packages/stargate/src/modules/mint/queries.ts similarity index 93% rename from packages/stargate/src/queries/mint.ts rename to packages/stargate/src/modules/mint/queries.ts index 6928f060..8d7b28e1 100644 --- a/packages/stargate/src/queries/mint.ts +++ b/packages/stargate/src/modules/mint/queries.ts @@ -3,9 +3,7 @@ import { assert } from "@cosmjs/utils"; import { Params } from "cosmjs-types/cosmos/mint/v1beta1/mint"; import { QueryClientImpl } from "cosmjs-types/cosmos/mint/v1beta1/query"; -import { createProtobufRpcClient } from "../"; -import { QueryClient } from "./queryclient"; -import { decodeCosmosSdkDecFromProto } from "./utils"; +import { createProtobufRpcClient, decodeCosmosSdkDecFromProto, QueryClient } from "../../queryclient"; /** * Like Params from "cosmjs-types/cosmos/mint/v1beta1/mint" diff --git a/packages/stargate/src/queries/slashing.spec.ts b/packages/stargate/src/modules/slashing/queries.spec.ts similarity index 86% rename from packages/stargate/src/queries/slashing.spec.ts rename to packages/stargate/src/modules/slashing/queries.spec.ts index 7d4b5867..ab4b2ff9 100644 --- a/packages/stargate/src/queries/slashing.spec.ts +++ b/packages/stargate/src/modules/slashing/queries.spec.ts @@ -1,9 +1,9 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; -import { pendingWithoutSimapp, simapp } from "../testutils.spec"; -import { QueryClient } from "./queryclient"; -import { setupSlashingExtension, SlashingExtension } from "./slashing"; +import { QueryClient } from "../../queryclient"; +import { pendingWithoutSimapp, simapp } from "../../testutils.spec"; +import { setupSlashingExtension, SlashingExtension } from "./queries"; async function makeClientWithSlashing( rpcUrl: string, diff --git a/packages/stargate/src/queries/slashing.ts b/packages/stargate/src/modules/slashing/queries.ts similarity index 91% rename from packages/stargate/src/queries/slashing.ts rename to packages/stargate/src/modules/slashing/queries.ts index 496c20f7..c4b07616 100644 --- a/packages/stargate/src/queries/slashing.ts +++ b/packages/stargate/src/modules/slashing/queries.ts @@ -6,8 +6,7 @@ import { } from "cosmjs-types/cosmos/slashing/v1beta1/query"; import { QueryClientImpl } from "cosmjs-types/cosmos/slashing/v1beta1/query"; -import { QueryClient } from "./queryclient"; -import { createPagination, createProtobufRpcClient } from "./utils"; +import { createPagination, createProtobufRpcClient, QueryClient } from "../../queryclient"; export interface SlashingExtension { readonly slashing: { diff --git a/packages/stargate/src/queries/staking.spec.ts b/packages/stargate/src/modules/staking/queries.spec.ts similarity index 96% rename from packages/stargate/src/queries/staking.spec.ts rename to packages/stargate/src/modules/staking/queries.spec.ts index ba5ad2d8..3f68c94f 100644 --- a/packages/stargate/src/queries/staking.spec.ts +++ b/packages/stargate/src/modules/staking/queries.spec.ts @@ -4,9 +4,10 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import { sleep } from "@cosmjs/utils"; import { MsgDelegate, MsgUndelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { MsgDelegateEncodeObject, MsgUndelegateEncodeObject } from "../encodeobjects"; -import { SigningStargateClient } from "../signingstargateclient"; -import { assertIsDeliverTxSuccess } from "../stargateclient"; +import { MsgDelegateEncodeObject, MsgUndelegateEncodeObject } from "../../encodeobjects"; +import { QueryClient } from "../../queryclient"; +import { SigningStargateClient } from "../../signingstargateclient"; +import { assertIsDeliverTxSuccess } from "../../stargateclient"; import { defaultSigningClientOptions, faucet, @@ -14,9 +15,8 @@ import { simapp, simappEnabled, validator, -} from "../testutils.spec"; -import { QueryClient } from "./queryclient"; -import { setupStakingExtension, StakingExtension } from "./staking"; +} from "../../testutils.spec"; +import { setupStakingExtension, StakingExtension } from "./queries"; async function makeClientWithStaking( rpcUrl: string, diff --git a/packages/stargate/src/queries/staking.ts b/packages/stargate/src/modules/staking/queries.ts similarity index 98% rename from packages/stargate/src/queries/staking.ts rename to packages/stargate/src/modules/staking/queries.ts index 592f2b85..94484cdd 100644 --- a/packages/stargate/src/queries/staking.ts +++ b/packages/stargate/src/modules/staking/queries.ts @@ -19,8 +19,7 @@ import { import { BondStatus } from "cosmjs-types/cosmos/staking/v1beta1/staking"; import Long from "long"; -import { QueryClient } from "./queryclient"; -import { createPagination, createProtobufRpcClient } from "./utils"; +import { createPagination, createProtobufRpcClient, QueryClient } from "../../queryclient"; export type BondStatusString = Exclude; diff --git a/packages/stargate/src/queries/tx.spec.ts b/packages/stargate/src/modules/tx/queries.spec.ts similarity index 92% rename from packages/stargate/src/queries/tx.spec.ts rename to packages/stargate/src/modules/tx/queries.spec.ts index 19e09a51..ad16e077 100644 --- a/packages/stargate/src/queries/tx.spec.ts +++ b/packages/stargate/src/modules/tx/queries.spec.ts @@ -4,8 +4,9 @@ import { assertDefined, sleep } from "@cosmjs/utils"; import { MsgDelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx"; import Long from "long"; -import { defaultRegistryTypes, SigningStargateClient } from "../signingstargateclient"; -import { assertIsDeliverTxSuccess, StargateClient } from "../stargateclient"; +import { longify, QueryClient } from "../../queryclient"; +import { defaultRegistryTypes, SigningStargateClient } from "../../signingstargateclient"; +import { assertIsDeliverTxSuccess, StargateClient } from "../../stargateclient"; import { defaultSigningClientOptions, faucet, @@ -14,10 +15,8 @@ import { simapp, simappEnabled, validator, -} from "../testutils.spec"; -import { QueryClient } from "./queryclient"; -import { setupTxExtension, TxExtension } from "./tx"; -import { longify } from "./utils"; +} from "../../testutils.spec"; +import { setupTxExtension, TxExtension } from "./queries"; async function makeClientWithTx(rpcUrl: string): Promise<[QueryClient & TxExtension, Tendermint34Client]> { const tmClient = await Tendermint34Client.connect(rpcUrl); diff --git a/packages/stargate/src/queries/tx.ts b/packages/stargate/src/modules/tx/queries.ts similarity index 96% rename from packages/stargate/src/queries/tx.ts rename to packages/stargate/src/modules/tx/queries.ts index ca591d3b..4e6177a6 100644 --- a/packages/stargate/src/queries/tx.ts +++ b/packages/stargate/src/modules/tx/queries.ts @@ -12,8 +12,7 @@ import { AuthInfo, Fee, Tx, TxBody } from "cosmjs-types/cosmos/tx/v1beta1/tx"; import { Any } from "cosmjs-types/google/protobuf/any"; import Long from "long"; -import { QueryClient } from "./queryclient"; -import { createProtobufRpcClient } from "./utils"; +import { createProtobufRpcClient, QueryClient } from "../../queryclient"; export interface TxExtension { readonly tx: { diff --git a/packages/stargate/src/queries/index.ts b/packages/stargate/src/queries/index.ts deleted file mode 100644 index aec76d76..00000000 --- a/packages/stargate/src/queries/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Base symbols - -export { QueryClient } from "./queryclient"; - -// Extensions - -export { AuthExtension, setupAuthExtension } from "./auth"; -export { BankExtension, setupBankExtension } from "./bank"; -export { DistributionExtension, setupDistributionExtension } from "./distribution"; -export { GovExtension, GovParamsType, GovProposalId, setupGovExtension } from "./gov"; -export { IbcExtension, setupIbcExtension } from "./ibc"; -export { MintExtension, MintParams, setupMintExtension } from "./mint"; -export { setupSlashingExtension, SlashingExtension } from "./slashing"; -export { setupStakingExtension, StakingExtension } from "./staking"; -export { setupTxExtension, TxExtension } from "./tx"; -export { - createPagination, - createProtobufRpcClient, - decodeCosmosSdkDecFromProto, - ProtobufRpcClient, -} from "./utils"; diff --git a/packages/stargate/src/queryclient/index.ts b/packages/stargate/src/queryclient/index.ts new file mode 100644 index 00000000..64d20b59 --- /dev/null +++ b/packages/stargate/src/queryclient/index.ts @@ -0,0 +1,8 @@ +export { QueryClient } from "./queryclient"; +export { + createPagination, + createProtobufRpcClient, + decodeCosmosSdkDecFromProto, + longify, + ProtobufRpcClient, +} from "./utils"; diff --git a/packages/stargate/src/queries/queryclient.spec.ts b/packages/stargate/src/queryclient/queryclient.spec.ts similarity index 100% rename from packages/stargate/src/queries/queryclient.spec.ts rename to packages/stargate/src/queryclient/queryclient.spec.ts diff --git a/packages/stargate/src/queries/queryclient.ts b/packages/stargate/src/queryclient/queryclient.ts similarity index 100% rename from packages/stargate/src/queries/queryclient.ts rename to packages/stargate/src/queryclient/queryclient.ts diff --git a/packages/stargate/src/queries/utils.spec.ts b/packages/stargate/src/queryclient/utils.spec.ts similarity index 100% rename from packages/stargate/src/queries/utils.spec.ts rename to packages/stargate/src/queryclient/utils.spec.ts diff --git a/packages/stargate/src/queries/utils.ts b/packages/stargate/src/queryclient/utils.ts similarity index 100% rename from packages/stargate/src/queries/utils.ts rename to packages/stargate/src/queryclient/utils.ts diff --git a/packages/stargate/src/stargateclient.ts b/packages/stargate/src/stargateclient.ts index a5a77108..07c465a4 100644 --- a/packages/stargate/src/stargateclient.ts +++ b/packages/stargate/src/stargateclient.ts @@ -10,14 +10,14 @@ import { Account, accountFromAny } from "./accounts"; import { AuthExtension, BankExtension, - QueryClient, setupAuthExtension, setupBankExtension, setupStakingExtension, setupTxExtension, StakingExtension, TxExtension, -} from "./queries"; +} from "./modules"; +import { QueryClient } from "./queryclient"; import { isSearchByHeightQuery, isSearchBySentFromOrToQuery, From 937dfd9867cfa14be1b4c9d7a35e94abc104adf5 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 3 Mar 2022 15:44:07 +0100 Subject: [PATCH 2/8] Move messages to module folders --- .../stargate/src/modules/authz/messages.ts | 8 ++ .../stargate/src/modules/bank/messages.ts | 7 ++ .../src/modules/distribution/messages.ts | 14 +++ .../stargate/src/modules/feegrant/messages.ts | 7 ++ packages/stargate/src/modules/gov/messages.ts | 8 ++ packages/stargate/src/modules/ibc/messages.ts | 48 +++++++++ packages/stargate/src/modules/index.ts | 7 ++ .../stargate/src/modules/staking/messages.ts | 16 +++ .../stargate/src/signingstargateclient.ts | 97 ++++--------------- 9 files changed, 133 insertions(+), 79 deletions(-) create mode 100644 packages/stargate/src/modules/authz/messages.ts create mode 100644 packages/stargate/src/modules/bank/messages.ts create mode 100644 packages/stargate/src/modules/distribution/messages.ts create mode 100644 packages/stargate/src/modules/feegrant/messages.ts create mode 100644 packages/stargate/src/modules/gov/messages.ts create mode 100644 packages/stargate/src/modules/ibc/messages.ts create mode 100644 packages/stargate/src/modules/staking/messages.ts diff --git a/packages/stargate/src/modules/authz/messages.ts b/packages/stargate/src/modules/authz/messages.ts new file mode 100644 index 00000000..dc736914 --- /dev/null +++ b/packages/stargate/src/modules/authz/messages.ts @@ -0,0 +1,8 @@ +import { GeneratedType } from "@cosmjs/proto-signing"; +import { MsgExec, MsgGrant, MsgRevoke } from "cosmjs-types/cosmos/authz/v1beta1/tx"; + +export const authzTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/cosmos.authz.v1beta1.MsgExec", MsgExec], + ["/cosmos.authz.v1beta1.MsgGrant", MsgGrant], + ["/cosmos.authz.v1beta1.MsgRevoke", MsgRevoke], +]; diff --git a/packages/stargate/src/modules/bank/messages.ts b/packages/stargate/src/modules/bank/messages.ts new file mode 100644 index 00000000..de7e4aaa --- /dev/null +++ b/packages/stargate/src/modules/bank/messages.ts @@ -0,0 +1,7 @@ +import { GeneratedType } from "@cosmjs/proto-signing"; +import { MsgMultiSend, MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; + +export const bankTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/cosmos.bank.v1beta1.MsgMultiSend", MsgMultiSend], + ["/cosmos.bank.v1beta1.MsgSend", MsgSend], +]; diff --git a/packages/stargate/src/modules/distribution/messages.ts b/packages/stargate/src/modules/distribution/messages.ts new file mode 100644 index 00000000..46927f5f --- /dev/null +++ b/packages/stargate/src/modules/distribution/messages.ts @@ -0,0 +1,14 @@ +import { GeneratedType } from "@cosmjs/proto-signing"; +import { + MsgFundCommunityPool, + MsgSetWithdrawAddress, + MsgWithdrawDelegatorReward, + MsgWithdrawValidatorCommission, +} from "cosmjs-types/cosmos/distribution/v1beta1/tx"; + +export const distributionTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/cosmos.distribution.v1beta1.MsgFundCommunityPool", MsgFundCommunityPool], + ["/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", MsgSetWithdrawAddress], + ["/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", MsgWithdrawDelegatorReward], + ["/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission", MsgWithdrawValidatorCommission], +]; diff --git a/packages/stargate/src/modules/feegrant/messages.ts b/packages/stargate/src/modules/feegrant/messages.ts new file mode 100644 index 00000000..8821d4d9 --- /dev/null +++ b/packages/stargate/src/modules/feegrant/messages.ts @@ -0,0 +1,7 @@ +import { GeneratedType } from "@cosmjs/proto-signing"; +import { MsgGrantAllowance, MsgRevokeAllowance } from "cosmjs-types/cosmos/feegrant/v1beta1/tx"; + +export const feegrantTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/cosmos.feegrant.v1beta1.MsgGrantAllowance", MsgGrantAllowance], + ["/cosmos.feegrant.v1beta1.MsgRevokeAllowance", MsgRevokeAllowance], +]; diff --git a/packages/stargate/src/modules/gov/messages.ts b/packages/stargate/src/modules/gov/messages.ts new file mode 100644 index 00000000..9ea27f30 --- /dev/null +++ b/packages/stargate/src/modules/gov/messages.ts @@ -0,0 +1,8 @@ +import { GeneratedType } from "@cosmjs/proto-signing"; +import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx"; + +export const govTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/cosmos.gov.v1beta1.MsgDeposit", MsgDeposit], + ["/cosmos.gov.v1beta1.MsgSubmitProposal", MsgSubmitProposal], + ["/cosmos.gov.v1beta1.MsgVote", MsgVote], +]; diff --git a/packages/stargate/src/modules/ibc/messages.ts b/packages/stargate/src/modules/ibc/messages.ts new file mode 100644 index 00000000..3659f284 --- /dev/null +++ b/packages/stargate/src/modules/ibc/messages.ts @@ -0,0 +1,48 @@ +import { GeneratedType } from "@cosmjs/proto-signing"; +import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx"; +import { + MsgAcknowledgement, + MsgChannelCloseConfirm, + MsgChannelCloseInit, + MsgChannelOpenAck, + MsgChannelOpenConfirm, + MsgChannelOpenInit, + MsgChannelOpenTry, + MsgRecvPacket, + MsgTimeout, + MsgTimeoutOnClose, +} from "cosmjs-types/ibc/core/channel/v1/tx"; +import { + MsgCreateClient, + MsgSubmitMisbehaviour, + MsgUpdateClient, + MsgUpgradeClient, +} from "cosmjs-types/ibc/core/client/v1/tx"; +import { + MsgConnectionOpenAck, + MsgConnectionOpenConfirm, + MsgConnectionOpenInit, + MsgConnectionOpenTry, +} from "cosmjs-types/ibc/core/connection/v1/tx"; + +export const ibcTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/ibc.applications.transfer.v1.MsgTransfer", MsgTransfer], + ["/ibc.core.channel.v1.MsgAcknowledgement", MsgAcknowledgement], + ["/ibc.core.channel.v1.MsgChannelCloseConfirm", MsgChannelCloseConfirm], + ["/ibc.core.channel.v1.MsgChannelCloseInit", MsgChannelCloseInit], + ["/ibc.core.channel.v1.MsgChannelOpenAck", MsgChannelOpenAck], + ["/ibc.core.channel.v1.MsgChannelOpenConfirm", MsgChannelOpenConfirm], + ["/ibc.core.channel.v1.MsgChannelOpenInit", MsgChannelOpenInit], + ["/ibc.core.channel.v1.MsgChannelOpenTry", MsgChannelOpenTry], + ["/ibc.core.channel.v1.MsgRecvPacket", MsgRecvPacket], + ["/ibc.core.channel.v1.MsgTimeout", MsgTimeout], + ["/ibc.core.channel.v1.MsgTimeoutOnClose", MsgTimeoutOnClose], + ["/ibc.core.client.v1.MsgCreateClient", MsgCreateClient], + ["/ibc.core.client.v1.MsgSubmitMisbehaviour", MsgSubmitMisbehaviour], + ["/ibc.core.client.v1.MsgUpdateClient", MsgUpdateClient], + ["/ibc.core.client.v1.MsgUpgradeClient", MsgUpgradeClient], + ["/ibc.core.connection.v1.MsgConnectionOpenAck", MsgConnectionOpenAck], + ["/ibc.core.connection.v1.MsgConnectionOpenConfirm", MsgConnectionOpenConfirm], + ["/ibc.core.connection.v1.MsgConnectionOpenInit", MsgConnectionOpenInit], + ["/ibc.core.connection.v1.MsgConnectionOpenTry", MsgConnectionOpenTry], +]; diff --git a/packages/stargate/src/modules/index.ts b/packages/stargate/src/modules/index.ts index 94006c83..a1e41007 100644 --- a/packages/stargate/src/modules/index.ts +++ b/packages/stargate/src/modules/index.ts @@ -1,9 +1,16 @@ export { AuthExtension, setupAuthExtension } from "./auth/queries"; +export { authzTypes } from "./authz/messages"; +export { bankTypes } from "./bank/messages"; export { BankExtension, setupBankExtension } from "./bank/queries"; +export { distributionTypes } from "./distribution/messages"; export { DistributionExtension, setupDistributionExtension } from "./distribution/queries"; +export { feegrantTypes } from "./feegrant/messages"; +export { govTypes } from "./gov/messages"; export { GovExtension, GovParamsType, GovProposalId, setupGovExtension } from "./gov/queries"; +export { ibcTypes } from "./ibc/messages"; export { IbcExtension, setupIbcExtension } from "./ibc/queries"; export { MintExtension, MintParams, setupMintExtension } from "./mint/queries"; export { setupSlashingExtension, SlashingExtension } from "./slashing/queries"; +export { stakingTypes } from "./staking/messages"; export { setupStakingExtension, StakingExtension } from "./staking/queries"; export { setupTxExtension, TxExtension } from "./tx/queries"; diff --git a/packages/stargate/src/modules/staking/messages.ts b/packages/stargate/src/modules/staking/messages.ts new file mode 100644 index 00000000..b201a4be --- /dev/null +++ b/packages/stargate/src/modules/staking/messages.ts @@ -0,0 +1,16 @@ +import { GeneratedType } from "@cosmjs/proto-signing"; +import { + MsgBeginRedelegate, + MsgCreateValidator, + MsgDelegate, + MsgEditValidator, + MsgUndelegate, +} from "cosmjs-types/cosmos/staking/v1beta1/tx"; + +export const stakingTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/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], +]; diff --git a/packages/stargate/src/signingstargateclient.ts b/packages/stargate/src/signingstargateclient.ts index f485fc29..7e54fab4 100644 --- a/packages/stargate/src/signingstargateclient.ts +++ b/packages/stargate/src/signingstargateclient.ts @@ -14,52 +14,13 @@ import { } from "@cosmjs/proto-signing"; import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import { assert, assertDefined } from "@cosmjs/utils"; -import { MsgExec, MsgGrant, MsgRevoke } from "cosmjs-types/cosmos/authz/v1beta1/tx"; -import { MsgMultiSend, MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin"; -import { - MsgFundCommunityPool, - MsgSetWithdrawAddress, - MsgWithdrawDelegatorReward, - MsgWithdrawValidatorCommission, -} from "cosmjs-types/cosmos/distribution/v1beta1/tx"; -import { MsgGrantAllowance, MsgRevokeAllowance } from "cosmjs-types/cosmos/feegrant/v1beta1/tx"; -import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx"; -import { - MsgBeginRedelegate, - MsgCreateValidator, - MsgDelegate, - MsgEditValidator, - MsgUndelegate, -} from "cosmjs-types/cosmos/staking/v1beta1/tx"; +import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx"; +import { MsgDelegate, MsgUndelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx"; import { SignMode } from "cosmjs-types/cosmos/tx/signing/v1beta1/signing"; import { TxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx"; import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx"; -import { - MsgAcknowledgement, - MsgChannelCloseConfirm, - MsgChannelCloseInit, - MsgChannelOpenAck, - MsgChannelOpenConfirm, - MsgChannelOpenInit, - MsgChannelOpenTry, - MsgRecvPacket, - MsgTimeout, - MsgTimeoutOnClose, -} from "cosmjs-types/ibc/core/channel/v1/tx"; import { Height } from "cosmjs-types/ibc/core/client/v1/client"; -import { - MsgCreateClient, - MsgSubmitMisbehaviour, - MsgUpdateClient, - MsgUpgradeClient, -} from "cosmjs-types/ibc/core/client/v1/tx"; -import { - MsgConnectionOpenAck, - MsgConnectionOpenConfirm, - MsgConnectionOpenInit, - MsgConnectionOpenTry, -} from "cosmjs-types/ibc/core/connection/v1/tx"; import Long from "long"; import { AminoTypes } from "./aminotypes"; @@ -71,48 +32,26 @@ import { MsgWithdrawDelegatorRewardEncodeObject, } from "./encodeobjects"; import { calculateFee, GasPrice } from "./fee"; +import { + authzTypes, + bankTypes, + distributionTypes, + feegrantTypes, + govTypes, + ibcTypes, + stakingTypes, +} from "./modules"; import { DeliverTxResponse, StargateClient } from "./stargateclient"; export const defaultRegistryTypes: ReadonlyArray<[string, GeneratedType]> = [ - ["/cosmos.authz.v1beta1.MsgExec", MsgExec], - ["/cosmos.authz.v1beta1.MsgGrant", MsgGrant], - ["/cosmos.authz.v1beta1.MsgRevoke", MsgRevoke], - ["/cosmos.bank.v1beta1.MsgMultiSend", MsgMultiSend], - ["/cosmos.bank.v1beta1.MsgSend", MsgSend], ["/cosmos.base.v1beta1.Coin", Coin], - ["/cosmos.distribution.v1beta1.MsgFundCommunityPool", MsgFundCommunityPool], - ["/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", MsgSetWithdrawAddress], - ["/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", MsgWithdrawDelegatorReward], - ["/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission", MsgWithdrawValidatorCommission], - ["/cosmos.feegrant.v1beta1.MsgGrantAllowance", MsgGrantAllowance], - ["/cosmos.feegrant.v1beta1.MsgRevokeAllowance", MsgRevokeAllowance], - ["/cosmos.gov.v1beta1.MsgDeposit", MsgDeposit], - ["/cosmos.gov.v1beta1.MsgSubmitProposal", MsgSubmitProposal], - ["/cosmos.gov.v1beta1.MsgVote", MsgVote], - ["/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], - ["/ibc.applications.transfer.v1.MsgTransfer", MsgTransfer], - ["/ibc.core.channel.v1.MsgAcknowledgement", MsgAcknowledgement], - ["/ibc.core.channel.v1.MsgChannelCloseConfirm", MsgChannelCloseConfirm], - ["/ibc.core.channel.v1.MsgChannelCloseInit", MsgChannelCloseInit], - ["/ibc.core.channel.v1.MsgChannelOpenAck", MsgChannelOpenAck], - ["/ibc.core.channel.v1.MsgChannelOpenConfirm", MsgChannelOpenConfirm], - ["/ibc.core.channel.v1.MsgChannelOpenInit", MsgChannelOpenInit], - ["/ibc.core.channel.v1.MsgChannelOpenTry", MsgChannelOpenTry], - ["/ibc.core.channel.v1.MsgRecvPacket", MsgRecvPacket], - ["/ibc.core.channel.v1.MsgTimeout", MsgTimeout], - ["/ibc.core.channel.v1.MsgTimeoutOnClose", MsgTimeoutOnClose], - ["/ibc.core.client.v1.MsgCreateClient", MsgCreateClient], - ["/ibc.core.client.v1.MsgSubmitMisbehaviour", MsgSubmitMisbehaviour], - ["/ibc.core.client.v1.MsgUpdateClient", MsgUpdateClient], - ["/ibc.core.client.v1.MsgUpgradeClient", MsgUpgradeClient], - ["/ibc.core.connection.v1.MsgConnectionOpenAck", MsgConnectionOpenAck], - ["/ibc.core.connection.v1.MsgConnectionOpenConfirm", MsgConnectionOpenConfirm], - ["/ibc.core.connection.v1.MsgConnectionOpenInit", MsgConnectionOpenInit], - ["/ibc.core.connection.v1.MsgConnectionOpenTry", MsgConnectionOpenTry], + ...authzTypes, + ...bankTypes, + ...distributionTypes, + ...feegrantTypes, + ...govTypes, + ...stakingTypes, + ...ibcTypes, ]; function createDefaultRegistry(): Registry { From 35246342c9a4c9aa4373f48db1f4b998e2e13b46 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 3 Mar 2022 15:54:52 +0100 Subject: [PATCH 3/8] Move encodeobjects to modules --- packages/stargate/src/encodeobjects.ts | 93 ------------------- packages/stargate/src/index.ts | 34 ++++--- .../stargate/src/modules/bank/messages.ts | 11 ++- .../src/modules/distribution/messages.ts | 16 +++- .../src/modules/distribution/queries.spec.ts | 2 +- packages/stargate/src/modules/gov/messages.ts | 31 ++++++- .../stargate/src/modules/gov/queries.spec.ts | 6 +- packages/stargate/src/modules/ibc/messages.ts | 11 ++- packages/stargate/src/modules/index.ts | 28 +++++- .../stargate/src/modules/staking/messages.ts | 20 +++- .../src/modules/staking/queries.spec.ts | 2 +- packages/stargate/src/multisignature.spec.ts | 2 +- .../src/signingstargateclient.spec.ts | 2 +- .../stargate/src/signingstargateclient.ts | 12 +-- .../src/stargateclient.searchtx.spec.ts | 2 +- 15 files changed, 134 insertions(+), 138 deletions(-) delete mode 100644 packages/stargate/src/encodeobjects.ts diff --git a/packages/stargate/src/encodeobjects.ts b/packages/stargate/src/encodeobjects.ts deleted file mode 100644 index 8572e2a9..00000000 --- a/packages/stargate/src/encodeobjects.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { EncodeObject } from "@cosmjs/proto-signing"; -import { MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; -import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx"; -import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx"; -import { MsgDelegate, MsgUndelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx"; - -export interface MsgSendEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmos.bank.v1beta1.MsgSend"; - readonly value: Partial; -} - -export function isMsgSendEncodeObject(encodeObject: EncodeObject): encodeObject is MsgSendEncodeObject { - return (encodeObject as MsgSendEncodeObject).typeUrl === "/cosmos.bank.v1beta1.MsgSend"; -} - -export interface MsgDelegateEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmos.staking.v1beta1.MsgDelegate"; - readonly value: Partial; -} - -export function isMsgDelegateEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgDelegateEncodeObject { - return (encodeObject as MsgDelegateEncodeObject).typeUrl === "/cosmos.staking.v1beta1.MsgDelegate"; -} - -export interface MsgUndelegateEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmos.staking.v1beta1.MsgUndelegate"; - readonly value: Partial; -} - -export function isMsgUndelegateEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgUndelegateEncodeObject { - return (encodeObject as MsgUndelegateEncodeObject).typeUrl === "/cosmos.staking.v1beta1.MsgUndelegate"; -} - -export interface MsgWithdrawDelegatorRewardEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"; - readonly value: Partial; -} - -export function isMsgWithdrawDelegatorRewardEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgWithdrawDelegatorRewardEncodeObject { - return ( - (encodeObject as MsgWithdrawDelegatorRewardEncodeObject).typeUrl === - "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward" - ); -} - -export interface MsgTransferEncodeObject extends EncodeObject { - readonly typeUrl: "/ibc.applications.transfer.v1.MsgTransfer"; - readonly value: Partial; -} - -export function isMsgTransferEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgTransferEncodeObject { - return (encodeObject as MsgTransferEncodeObject).typeUrl === "/ibc.applications.transfer.v1.MsgTransfer"; -} - -export interface MsgDepositEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmos.gov.v1beta1.MsgDeposit"; - readonly value: Partial; -} - -export function isMsgDepositEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgSubmitProposalEncodeObject { - return (encodeObject as MsgDepositEncodeObject).typeUrl === "/cosmos.gov.v1beta1.MsgDeposit"; -} - -export interface MsgSubmitProposalEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmos.gov.v1beta1.MsgSubmitProposal"; - readonly value: Partial; -} - -export function isMsgSubmitProposalEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgSubmitProposalEncodeObject { - return (encodeObject as MsgSubmitProposalEncodeObject).typeUrl === "/cosmos.gov.v1beta1.MsgSubmitProposal"; -} - -export interface MsgVoteEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmos.gov.v1beta1.MsgVote"; - readonly value: Partial; -} - -export function isMsgVoteEncodeObject(encodeObject: EncodeObject): encodeObject is MsgVoteEncodeObject { - return (encodeObject as MsgVoteEncodeObject).typeUrl === "/cosmos.gov.v1beta1.MsgVote"; -} diff --git a/packages/stargate/src/index.ts b/packages/stargate/src/index.ts index 69442f56..34cb49ff 100644 --- a/packages/stargate/src/index.ts +++ b/packages/stargate/src/index.ts @@ -36,24 +36,6 @@ export { isAminoMsgWithdrawValidatorCommission, } from "./aminomsgs"; export { AminoConverter, AminoTypes, AminoTypesOptions } from "./aminotypes"; -export { - isMsgDelegateEncodeObject, - isMsgDepositEncodeObject, - isMsgSendEncodeObject, - isMsgSubmitProposalEncodeObject, - isMsgTransferEncodeObject, - isMsgUndelegateEncodeObject, - isMsgVoteEncodeObject, - isMsgWithdrawDelegatorRewardEncodeObject, - MsgDelegateEncodeObject, - MsgDepositEncodeObject, - MsgSendEncodeObject, - MsgSubmitProposalEncodeObject, - MsgTransferEncodeObject, - MsgUndelegateEncodeObject, - MsgVoteEncodeObject, - MsgWithdrawDelegatorRewardEncodeObject, -} from "./encodeobjects"; export { calculateFee, GasPrice } from "./fee"; export * as logs from "./logs"; export { @@ -64,8 +46,24 @@ export { GovParamsType, GovProposalId, IbcExtension, + isMsgDelegateEncodeObject, + isMsgDepositEncodeObject, + isMsgSendEncodeObject, + isMsgSubmitProposalEncodeObject, + isMsgTransferEncodeObject, + isMsgUndelegateEncodeObject, + isMsgVoteEncodeObject, + isMsgWithdrawDelegatorRewardEncodeObject, MintExtension, MintParams, + MsgDelegateEncodeObject, + MsgDepositEncodeObject, + MsgSendEncodeObject, + MsgSubmitProposalEncodeObject, + MsgTransferEncodeObject, + MsgUndelegateEncodeObject, + MsgVoteEncodeObject, + MsgWithdrawDelegatorRewardEncodeObject, setupAuthExtension, setupBankExtension, setupDistributionExtension, diff --git a/packages/stargate/src/modules/bank/messages.ts b/packages/stargate/src/modules/bank/messages.ts index de7e4aaa..8ec09ed3 100644 --- a/packages/stargate/src/modules/bank/messages.ts +++ b/packages/stargate/src/modules/bank/messages.ts @@ -1,7 +1,16 @@ -import { GeneratedType } from "@cosmjs/proto-signing"; +import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"; import { MsgMultiSend, MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; export const bankTypes: ReadonlyArray<[string, GeneratedType]> = [ ["/cosmos.bank.v1beta1.MsgMultiSend", MsgMultiSend], ["/cosmos.bank.v1beta1.MsgSend", MsgSend], ]; + +export interface MsgSendEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmos.bank.v1beta1.MsgSend"; + readonly value: Partial; +} + +export function isMsgSendEncodeObject(encodeObject: EncodeObject): encodeObject is MsgSendEncodeObject { + return (encodeObject as MsgSendEncodeObject).typeUrl === "/cosmos.bank.v1beta1.MsgSend"; +} diff --git a/packages/stargate/src/modules/distribution/messages.ts b/packages/stargate/src/modules/distribution/messages.ts index 46927f5f..a069ce8c 100644 --- a/packages/stargate/src/modules/distribution/messages.ts +++ b/packages/stargate/src/modules/distribution/messages.ts @@ -1,4 +1,4 @@ -import { GeneratedType } from "@cosmjs/proto-signing"; +import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"; import { MsgFundCommunityPool, MsgSetWithdrawAddress, @@ -12,3 +12,17 @@ export const distributionTypes: ReadonlyArray<[string, GeneratedType]> = [ ["/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", MsgWithdrawDelegatorReward], ["/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission", MsgWithdrawValidatorCommission], ]; + +export interface MsgWithdrawDelegatorRewardEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"; + readonly value: Partial; +} + +export function isMsgWithdrawDelegatorRewardEncodeObject( + object: EncodeObject, +): object is MsgWithdrawDelegatorRewardEncodeObject { + return ( + (object as MsgWithdrawDelegatorRewardEncodeObject).typeUrl === + "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward" + ); +} diff --git a/packages/stargate/src/modules/distribution/queries.spec.ts b/packages/stargate/src/modules/distribution/queries.spec.ts index 6c732fae..a059d07a 100644 --- a/packages/stargate/src/modules/distribution/queries.spec.ts +++ b/packages/stargate/src/modules/distribution/queries.spec.ts @@ -4,7 +4,6 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import { sleep } from "@cosmjs/utils"; import { MsgDelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { MsgDelegateEncodeObject } from "../../encodeobjects"; import { QueryClient } from "../../queryclient"; import { SigningStargateClient } from "../../signingstargateclient"; import { assertIsDeliverTxSuccess } from "../../stargateclient"; @@ -16,6 +15,7 @@ import { simappEnabled, validator, } from "../../testutils.spec"; +import { MsgDelegateEncodeObject } from "../"; import { DistributionExtension, setupDistributionExtension } from "./queries"; async function makeClientWithDistribution( diff --git a/packages/stargate/src/modules/gov/messages.ts b/packages/stargate/src/modules/gov/messages.ts index 9ea27f30..fb1905b1 100644 --- a/packages/stargate/src/modules/gov/messages.ts +++ b/packages/stargate/src/modules/gov/messages.ts @@ -1,4 +1,4 @@ -import { GeneratedType } from "@cosmjs/proto-signing"; +import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"; import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx"; export const govTypes: ReadonlyArray<[string, GeneratedType]> = [ @@ -6,3 +6,32 @@ export const govTypes: ReadonlyArray<[string, GeneratedType]> = [ ["/cosmos.gov.v1beta1.MsgSubmitProposal", MsgSubmitProposal], ["/cosmos.gov.v1beta1.MsgVote", MsgVote], ]; + +export interface MsgDepositEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmos.gov.v1beta1.MsgDeposit"; + readonly value: Partial; +} + +export function isMsgDepositEncodeObject(object: EncodeObject): object is MsgSubmitProposalEncodeObject { + return (object as MsgDepositEncodeObject).typeUrl === "/cosmos.gov.v1beta1.MsgDeposit"; +} + +export interface MsgSubmitProposalEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmos.gov.v1beta1.MsgSubmitProposal"; + readonly value: Partial; +} + +export function isMsgSubmitProposalEncodeObject( + object: EncodeObject, +): object is MsgSubmitProposalEncodeObject { + return (object as MsgSubmitProposalEncodeObject).typeUrl === "/cosmos.gov.v1beta1.MsgSubmitProposal"; +} + +export interface MsgVoteEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmos.gov.v1beta1.MsgVote"; + readonly value: Partial; +} + +export function isMsgVoteEncodeObject(object: EncodeObject): object is MsgVoteEncodeObject { + return (object as MsgVoteEncodeObject).typeUrl === "/cosmos.gov.v1beta1.MsgVote"; +} diff --git a/packages/stargate/src/modules/gov/queries.spec.ts b/packages/stargate/src/modules/gov/queries.spec.ts index a6881d35..d502a6da 100644 --- a/packages/stargate/src/modules/gov/queries.spec.ts +++ b/packages/stargate/src/modules/gov/queries.spec.ts @@ -13,11 +13,6 @@ import { import { Any } from "cosmjs-types/google/protobuf/any"; import Long from "long"; -import { - MsgDelegateEncodeObject, - MsgSubmitProposalEncodeObject, - MsgVoteEncodeObject, -} from "../../encodeobjects"; import { longify, QueryClient } from "../../queryclient"; import { SigningStargateClient } from "../../signingstargateclient"; import { assertIsDeliverTxSuccess } from "../../stargateclient"; @@ -31,6 +26,7 @@ import { simappEnabled, validator, } from "../../testutils.spec"; +import { MsgDelegateEncodeObject, MsgSubmitProposalEncodeObject, MsgVoteEncodeObject } from "../"; import { GovExtension, setupGovExtension } from "./queries"; async function makeClientWithGov(rpcUrl: string): Promise<[QueryClient & GovExtension, Tendermint34Client]> { diff --git a/packages/stargate/src/modules/ibc/messages.ts b/packages/stargate/src/modules/ibc/messages.ts index 3659f284..2eb32da8 100644 --- a/packages/stargate/src/modules/ibc/messages.ts +++ b/packages/stargate/src/modules/ibc/messages.ts @@ -1,4 +1,4 @@ -import { GeneratedType } from "@cosmjs/proto-signing"; +import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"; import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx"; import { MsgAcknowledgement, @@ -46,3 +46,12 @@ export const ibcTypes: ReadonlyArray<[string, GeneratedType]> = [ ["/ibc.core.connection.v1.MsgConnectionOpenInit", MsgConnectionOpenInit], ["/ibc.core.connection.v1.MsgConnectionOpenTry", MsgConnectionOpenTry], ]; + +export interface MsgTransferEncodeObject extends EncodeObject { + readonly typeUrl: "/ibc.applications.transfer.v1.MsgTransfer"; + readonly value: Partial; +} + +export function isMsgTransferEncodeObject(object: EncodeObject): object is MsgTransferEncodeObject { + return (object as MsgTransferEncodeObject).typeUrl === "/ibc.applications.transfer.v1.MsgTransfer"; +} diff --git a/packages/stargate/src/modules/index.ts b/packages/stargate/src/modules/index.ts index a1e41007..c828e3f9 100644 --- a/packages/stargate/src/modules/index.ts +++ b/packages/stargate/src/modules/index.ts @@ -1,16 +1,34 @@ export { AuthExtension, setupAuthExtension } from "./auth/queries"; export { authzTypes } from "./authz/messages"; -export { bankTypes } from "./bank/messages"; +export { bankTypes, isMsgSendEncodeObject, MsgSendEncodeObject } from "./bank/messages"; export { BankExtension, setupBankExtension } from "./bank/queries"; -export { distributionTypes } from "./distribution/messages"; +export { + distributionTypes, + isMsgWithdrawDelegatorRewardEncodeObject, + MsgWithdrawDelegatorRewardEncodeObject, +} from "./distribution/messages"; export { DistributionExtension, setupDistributionExtension } from "./distribution/queries"; export { feegrantTypes } from "./feegrant/messages"; -export { govTypes } from "./gov/messages"; +export { + govTypes, + isMsgDepositEncodeObject, + isMsgSubmitProposalEncodeObject, + isMsgVoteEncodeObject, + MsgDepositEncodeObject, + MsgSubmitProposalEncodeObject, + MsgVoteEncodeObject, +} from "./gov/messages"; export { GovExtension, GovParamsType, GovProposalId, setupGovExtension } from "./gov/queries"; -export { ibcTypes } from "./ibc/messages"; +export { ibcTypes, isMsgTransferEncodeObject, MsgTransferEncodeObject } from "./ibc/messages"; export { IbcExtension, setupIbcExtension } from "./ibc/queries"; export { MintExtension, MintParams, setupMintExtension } from "./mint/queries"; export { setupSlashingExtension, SlashingExtension } from "./slashing/queries"; -export { stakingTypes } from "./staking/messages"; +export { + isMsgDelegateEncodeObject, + isMsgUndelegateEncodeObject, + MsgDelegateEncodeObject, + MsgUndelegateEncodeObject, + stakingTypes, +} from "./staking/messages"; export { setupStakingExtension, StakingExtension } from "./staking/queries"; export { setupTxExtension, TxExtension } from "./tx/queries"; diff --git a/packages/stargate/src/modules/staking/messages.ts b/packages/stargate/src/modules/staking/messages.ts index b201a4be..e514f7fd 100644 --- a/packages/stargate/src/modules/staking/messages.ts +++ b/packages/stargate/src/modules/staking/messages.ts @@ -1,4 +1,4 @@ -import { GeneratedType } from "@cosmjs/proto-signing"; +import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"; import { MsgBeginRedelegate, MsgCreateValidator, @@ -14,3 +14,21 @@ export const stakingTypes: ReadonlyArray<[string, GeneratedType]> = [ ["/cosmos.staking.v1beta1.MsgEditValidator", MsgEditValidator], ["/cosmos.staking.v1beta1.MsgUndelegate", MsgUndelegate], ]; + +export interface MsgDelegateEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmos.staking.v1beta1.MsgDelegate"; + readonly value: Partial; +} + +export function isMsgDelegateEncodeObject(object: EncodeObject): object is MsgDelegateEncodeObject { + return (object as MsgDelegateEncodeObject).typeUrl === "/cosmos.staking.v1beta1.MsgDelegate"; +} + +export interface MsgUndelegateEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmos.staking.v1beta1.MsgUndelegate"; + readonly value: Partial; +} + +export function isMsgUndelegateEncodeObject(object: EncodeObject): object is MsgUndelegateEncodeObject { + return (object as MsgUndelegateEncodeObject).typeUrl === "/cosmos.staking.v1beta1.MsgUndelegate"; +} diff --git a/packages/stargate/src/modules/staking/queries.spec.ts b/packages/stargate/src/modules/staking/queries.spec.ts index 3f68c94f..3c4a6268 100644 --- a/packages/stargate/src/modules/staking/queries.spec.ts +++ b/packages/stargate/src/modules/staking/queries.spec.ts @@ -4,7 +4,6 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import { sleep } from "@cosmjs/utils"; import { MsgDelegate, MsgUndelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { MsgDelegateEncodeObject, MsgUndelegateEncodeObject } from "../../encodeobjects"; import { QueryClient } from "../../queryclient"; import { SigningStargateClient } from "../../signingstargateclient"; import { assertIsDeliverTxSuccess } from "../../stargateclient"; @@ -16,6 +15,7 @@ import { simappEnabled, validator, } from "../../testutils.spec"; +import { MsgDelegateEncodeObject, MsgUndelegateEncodeObject } from "./messages"; import { setupStakingExtension, StakingExtension } from "./queries"; async function makeClientWithStaking( diff --git a/packages/stargate/src/multisignature.spec.ts b/packages/stargate/src/multisignature.spec.ts index bf43e01b..664a6214 100644 --- a/packages/stargate/src/multisignature.spec.ts +++ b/packages/stargate/src/multisignature.spec.ts @@ -10,7 +10,7 @@ import { assert } from "@cosmjs/utils"; import { MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; import { TxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx"; -import { MsgSendEncodeObject } from "./encodeobjects"; +import { MsgSendEncodeObject } from "./modules"; import { makeCompactBitArray, makeMultisignedTx } from "./multisignature"; import { SignerData, SigningStargateClient } from "./signingstargateclient"; import { assertIsDeliverTxSuccess, StargateClient } from "./stargateclient"; diff --git a/packages/stargate/src/signingstargateclient.spec.ts b/packages/stargate/src/signingstargateclient.spec.ts index 9f415352..7a9108dc 100644 --- a/packages/stargate/src/signingstargateclient.spec.ts +++ b/packages/stargate/src/signingstargateclient.spec.ts @@ -11,7 +11,7 @@ import protobuf from "protobufjs/minimal"; import { AminoMsgDelegate } from "./aminomsgs"; import { AminoTypes } from "./aminotypes"; -import { MsgDelegateEncodeObject, MsgSendEncodeObject } from "./encodeobjects"; +import { MsgDelegateEncodeObject, MsgSendEncodeObject } from "./modules"; import { PrivateSigningStargateClient, SigningStargateClient } from "./signingstargateclient"; import { assertIsDeliverTxFailure, assertIsDeliverTxSuccess, isDeliverTxFailure } from "./stargateclient"; import { diff --git a/packages/stargate/src/signingstargateclient.ts b/packages/stargate/src/signingstargateclient.ts index 7e54fab4..d4bdb1ee 100644 --- a/packages/stargate/src/signingstargateclient.ts +++ b/packages/stargate/src/signingstargateclient.ts @@ -24,13 +24,6 @@ import { Height } from "cosmjs-types/ibc/core/client/v1/client"; import Long from "long"; import { AminoTypes } from "./aminotypes"; -import { - MsgDelegateEncodeObject, - MsgSendEncodeObject, - MsgTransferEncodeObject, - MsgUndelegateEncodeObject, - MsgWithdrawDelegatorRewardEncodeObject, -} from "./encodeobjects"; import { calculateFee, GasPrice } from "./fee"; import { authzTypes, @@ -39,6 +32,11 @@ import { feegrantTypes, govTypes, ibcTypes, + MsgDelegateEncodeObject, + MsgSendEncodeObject, + MsgTransferEncodeObject, + MsgUndelegateEncodeObject, + MsgWithdrawDelegatorRewardEncodeObject, stakingTypes, } from "./modules"; import { DeliverTxResponse, StargateClient } from "./stargateclient"; diff --git a/packages/stargate/src/stargateclient.searchtx.spec.ts b/packages/stargate/src/stargateclient.searchtx.spec.ts index a2e748ac..02f0b1b4 100644 --- a/packages/stargate/src/stargateclient.searchtx.spec.ts +++ b/packages/stargate/src/stargateclient.searchtx.spec.ts @@ -13,7 +13,7 @@ import { assert, sleep } from "@cosmjs/utils"; import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin"; import { TxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx"; -import { isMsgSendEncodeObject } from "./encodeobjects"; +import { isMsgSendEncodeObject } from "./modules"; import { DeliverTxResponse, isDeliverTxFailure, isDeliverTxSuccess, StargateClient } from "./stargateclient"; import { defaultSigningClientOptions, From fb5cc27c3b53b8b4c8e1e003bb8b01c103b47bb9 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sun, 6 Mar 2022 14:04:23 +0100 Subject: [PATCH 4/8] Move Amino message types and converters to module folders --- packages/stargate/src/aminoconverters.ts | 8 + packages/stargate/src/aminomsgs.ts | 329 +---------- packages/stargate/src/aminotypes.spec.ts | 4 +- packages/stargate/src/aminotypes.ts | 532 +----------------- packages/stargate/src/index.ts | 37 +- .../src/modules/authz/aminomessages.ts | 9 + .../src/modules/bank/aminomessages.ts | 88 +++ .../src/modules/distribution/aminomessages.ts | 139 +++++ .../src/modules/feegrant/aminomessages.ts | 8 + .../stargate/src/modules/gov/aminomessages.ts | 178 ++++++ .../stargate/src/modules/ibc/aminomessages.ts | 114 ++++ packages/stargate/src/modules/index.ts | 43 ++ .../src/modules/staking/aminomessages.ts | 317 +++++++++++ .../src/signingstargateclient.spec.ts | 3 +- 14 files changed, 947 insertions(+), 862 deletions(-) create mode 100644 packages/stargate/src/aminoconverters.ts create mode 100644 packages/stargate/src/modules/authz/aminomessages.ts create mode 100644 packages/stargate/src/modules/bank/aminomessages.ts create mode 100644 packages/stargate/src/modules/distribution/aminomessages.ts create mode 100644 packages/stargate/src/modules/feegrant/aminomessages.ts create mode 100644 packages/stargate/src/modules/gov/aminomessages.ts create mode 100644 packages/stargate/src/modules/ibc/aminomessages.ts create mode 100644 packages/stargate/src/modules/staking/aminomessages.ts diff --git a/packages/stargate/src/aminoconverters.ts b/packages/stargate/src/aminoconverters.ts new file mode 100644 index 00000000..8657992b --- /dev/null +++ b/packages/stargate/src/aminoconverters.ts @@ -0,0 +1,8 @@ +export interface AminoConverter { + readonly aminoType: string; + readonly toAmino: (value: any) => any; + readonly fromAmino: (value: any) => any; +} + +/** A map from protobuf type URL to the AminoConverter implementation if supported on chain */ +export type AminoConverters = Record; diff --git a/packages/stargate/src/aminomsgs.ts b/packages/stargate/src/aminomsgs.ts index f39c5600..05c0022c 100644 --- a/packages/stargate/src/aminomsgs.ts +++ b/packages/stargate/src/aminomsgs.ts @@ -1,50 +1,5 @@ /* eslint-disable @typescript-eslint/naming-convention */ -import { AminoMsg, Coin } from "@cosmjs/amino"; - -// auth (no messages) - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/auth/auth.proto - -// bank - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/bank/bank.proto - -/** A high level transaction of the coin module */ -export interface AminoMsgSend extends AminoMsg { - readonly type: "cosmos-sdk/MsgSend"; - readonly value: { - /** Bech32 account address */ - readonly from_address: string; - /** Bech32 account address */ - readonly to_address: string; - readonly amount: readonly Coin[]; - }; -} - -export function isAminoMsgSend(msg: AminoMsg): msg is AminoMsgSend { - return msg.type === "cosmos-sdk/MsgSend"; -} - -interface Input { - /** Bech32 account address */ - readonly address: string; - readonly coins: readonly Coin[]; -} - -interface Output { - /** Bech32 account address */ - readonly address: string; - readonly coins: readonly Coin[]; -} - -/** A high level transaction of the coin module */ -export interface AminoMsgMultiSend extends AminoMsg { - readonly type: "cosmos-sdk/MsgMultiSend"; - readonly value: { - readonly inputs: readonly Input[]; - readonly outputs: readonly Output[]; - }; -} - -export function isAminoMsgMultiSend(msg: AminoMsg): msg is AminoMsgMultiSend { - return msg.type === "cosmos-sdk/MsgMultiSend"; -} +import { AminoMsg } from "@cosmjs/amino"; // crisis - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/crisis/crisis.proto @@ -65,69 +20,6 @@ export function isAminoMsgVerifyInvariant(msg: AminoMsg): msg is AminoMsgVerifyI // distribution - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/distribution/distribution.proto -/** Changes the withdraw address for a delegator (or validator self-delegation) */ -export interface AminoMsgSetWithdrawAddress extends AminoMsg { - // NOTE: Type string and names diverge here! - readonly type: "cosmos-sdk/MsgModifyWithdrawAddress"; - readonly value: { - /** Bech32 account address */ - readonly delegator_address: string; - /** Bech32 account address */ - readonly withdraw_address: string; - }; -} - -export function isAminoMsgSetWithdrawAddress(msg: AminoMsg): msg is AminoMsgSetWithdrawAddress { - // NOTE: Type string and names diverge here! - return msg.type === "cosmos-sdk/MsgModifyWithdrawAddress"; -} - -/** Message for delegation withdraw from a single validator */ -export interface AminoMsgWithdrawDelegatorReward extends AminoMsg { - // NOTE: Type string and names diverge here! - readonly type: "cosmos-sdk/MsgWithdrawDelegationReward"; - readonly value: { - /** Bech32 account address */ - readonly delegator_address: string; - /** Bech32 account address */ - readonly validator_address: string; - }; -} - -export function isAminoMsgWithdrawDelegatorReward(msg: AminoMsg): msg is AminoMsgWithdrawDelegatorReward { - // NOTE: Type string and names diverge here! - return msg.type === "cosmos-sdk/MsgWithdrawDelegationReward"; -} - -/** Message for validator withdraw */ -export interface AminoMsgWithdrawValidatorCommission extends AminoMsg { - readonly type: "cosmos-sdk/MsgWithdrawValidatorCommission"; - readonly value: { - /** Bech32 account address */ - readonly validator_address: string; - }; -} - -export function isAminoMsgWithdrawValidatorCommission( - msg: AminoMsg, -): msg is AminoMsgWithdrawValidatorCommission { - return msg.type === "cosmos-sdk/MsgWithdrawValidatorCommission"; -} - -/** Allows an account to directly fund the community pool. */ -export interface AminoMsgFundCommunityPool extends AminoMsg { - readonly type: "cosmos-sdk/MsgFundCommunityPool"; - readonly value: { - readonly amount: readonly Coin[]; - /** Bech32 account address */ - readonly depositor: string; - }; -} - -export function isAminoMsgFundCommunityPool(msg: AminoMsg): msg is AminoMsgFundCommunityPool { - return msg.type === "cosmos-sdk/MsgFundCommunityPool"; -} - // evidence - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/evidence/evidence.proto interface Any { @@ -151,72 +43,6 @@ export function isAminoMsgSubmitEvidence(msg: AminoMsg): msg is AminoMsgSubmitEv // gov - https://github.com/cosmos/cosmos-sdk/blob/efa73c7edb31a7bd65786501da213b294f89267a/proto/cosmos/gov/gov.proto -/** Supports submitting arbitrary proposal content. */ -export interface AminoMsgSubmitProposal extends AminoMsg { - readonly type: "cosmos-sdk/MsgSubmitProposal"; - readonly value: { - /** - * A proposal structure, e.g. - * - * ``` - * { - * type: 'cosmos-sdk/TextProposal', - * value: { - * description: 'This proposal proposes to test whether this proposal passes', - * title: 'Test Proposal' - * } - * } - * ``` - */ - readonly content: { - readonly type: string; - readonly value: any; - }; - readonly initial_deposit: readonly Coin[]; - /** Bech32 account address */ - readonly proposer: string; - }; -} - -export function isAminoMsgSubmitProposal(msg: AminoMsg): msg is AminoMsgSubmitProposal { - return msg.type === "cosmos-sdk/MsgSubmitProposal"; -} - -/** Casts a vote */ -export interface AminoMsgVote extends AminoMsg { - readonly type: "cosmos-sdk/MsgVote"; - readonly value: { - readonly proposal_id: string; - /** Bech32 account address */ - readonly voter: string; - /** - * VoteOption as integer from 0 to 4 🤷‍ - * - * @see https://github.com/cosmos/cosmos-sdk/blob/v0.42.9/x/gov/types/gov.pb.go#L38-L49 - */ - readonly option: number; - }; -} - -export function isAminoMsgVote(msg: AminoMsg): msg is AminoMsgVote { - return msg.type === "cosmos-sdk/MsgVote"; -} - -/** Submits a deposit to an existing proposal */ -export interface AminoMsgDeposit extends AminoMsg { - readonly type: "cosmos-sdk/MsgDeposit"; - readonly value: { - readonly proposal_id: string; - /** Bech32 account address */ - readonly depositor: string; - readonly amount: readonly Coin[]; - }; -} - -export function isAminoMsgDeposit(msg: AminoMsg): msg is AminoMsgDeposit { - return msg.type === "cosmos-sdk/MsgDeposit"; -} - // mint (no messages) - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/mint/mint.proto // params (no messages) - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/params/params.proto @@ -235,156 +61,3 @@ export interface AminoMsgUnjail extends AminoMsg { export function isAminoMsgUnjail(msg: AminoMsg): msg is AminoMsgUnjail { return msg.type === "cosmos-sdk/MsgUnjail"; } - -// staking - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/staking/staking.proto - -/** The initial commission rates to be used for creating a validator */ -interface CommissionRates { - readonly rate: string; - readonly max_rate: string; - readonly max_change_rate: string; -} - -/** A validator description. */ -interface Description { - readonly moniker: string; - readonly identity: string; - readonly website: string; - readonly security_contact: string; - readonly details: string; -} - -/** Creates a new validator. */ -export interface AminoMsgCreateValidator extends AminoMsg { - readonly type: "cosmos-sdk/MsgCreateValidator"; - readonly value: { - readonly description: Description; - readonly commission: CommissionRates; - readonly min_self_delegation: string; - /** Bech32 encoded delegator address */ - readonly delegator_address: string; - /** Bech32 encoded validator address */ - readonly validator_address: string; - /** Bech32 encoded public key */ - readonly pubkey: string; - readonly value: Coin; - }; -} - -export function isAminoMsgCreateValidator(msg: AminoMsg): msg is AminoMsgCreateValidator { - return msg.type === "cosmos-sdk/MsgCreateValidator"; -} - -/** Edits an existing validator. */ -export interface AminoMsgEditValidator extends AminoMsg { - readonly type: "cosmos-sdk/MsgEditValidator"; - readonly value: { - readonly description: Description; - /** Bech32 encoded validator address */ - readonly validator_address: string; - readonly commission_rate: string; - readonly min_self_delegation: string; - }; -} - -export function isAminoMsgEditValidator(msg: AminoMsg): msg is AminoMsgEditValidator { - return msg.type === "cosmos-sdk/MsgEditValidator"; -} - -/** - * Performs a delegation from a delegate to a validator. - * - * @see https://docs.cosmos.network/master/modules/staking/03_messages.html#msgdelegate - */ -export interface AminoMsgDelegate extends AminoMsg { - readonly type: "cosmos-sdk/MsgDelegate"; - readonly value: { - /** Bech32 encoded delegator address */ - readonly delegator_address: string; - /** Bech32 encoded validator address */ - readonly validator_address: string; - readonly amount: Coin; - }; -} - -export function isAminoMsgDelegate(msg: AminoMsg): msg is AminoMsgDelegate { - return msg.type === "cosmos-sdk/MsgDelegate"; -} - -/** Performs a redelegation from a delegate and source validator to a destination validator */ -export interface AminoMsgBeginRedelegate extends AminoMsg { - readonly type: "cosmos-sdk/MsgBeginRedelegate"; - readonly value: { - /** Bech32 encoded delegator address */ - readonly delegator_address: string; - /** Bech32 encoded source validator address */ - readonly validator_src_address: string; - /** Bech32 encoded destination validator address */ - readonly validator_dst_address: string; - readonly amount: Coin; - }; -} - -export function isAminoMsgBeginRedelegate(msg: AminoMsg): msg is AminoMsgBeginRedelegate { - return msg.type === "cosmos-sdk/MsgBeginRedelegate"; -} - -/** Performs an undelegation from a delegate and a validator */ -export interface AminoMsgUndelegate extends AminoMsg { - readonly type: "cosmos-sdk/MsgUndelegate"; - readonly value: { - /** Bech32 encoded delegator address */ - readonly delegator_address: string; - /** Bech32 encoded validator address */ - readonly validator_address: string; - readonly amount: Coin; - }; -} - -export function isAminoMsgUndelegate(msg: AminoMsg): msg is AminoMsgUndelegate { - return msg.type === "cosmos-sdk/MsgUndelegate"; -} - -// upgrade (no messages) - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/upgrade/upgrade.proto - -// ibc - -// https://github.com/cosmos/ibc-go/blob/07b6a97b67d17fd214a83764cbdb2c2c3daef445/modules/core/02-client/types/client.pb.go#L297-L312 -interface AminoHeight { - /** 0 values must be omitted (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/core/02-client/types/client.pb.go#L252). */ - readonly revision_number?: string; - /** 0 values must be omitted (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/core/02-client/types/client.pb.go#L254). */ - readonly revision_height?: string; -} - -// https://github.com/cosmos/ibc-go/blob/07b6a97b67d17fd214a83764cbdb2c2c3daef445/modules/apps/transfer/types/tx.pb.go#L33-L53 -/** Transfers fungible tokens (i.e Coins) between ICS20 enabled chains */ -export interface AminoMsgTransfer extends AminoMsg { - readonly type: "cosmos-sdk/MsgTransfer"; - readonly value: { - readonly source_port: string; - readonly source_channel: string; - readonly token?: Coin; - /** Bech32 account address */ - readonly sender: string; - /** Bech32 account address */ - readonly receiver: string; - /** - * The timeout as a (revision_number, revision_height) pair. - * - * This fied is is non-optional (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/applications/transfer/types/tx.pb.go#L49). - * In order to not set the timeout height, set it to {}. - */ - readonly timeout_height: AminoHeight; - /** - * Timeout timestamp in nanoseconds since Unix epoch. The timeout is disabled when set to 0. - * - * 0 values must be omitted (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/applications/transfer/types/tx.pb.go#L52). - */ - readonly timeout_timestamp?: string; - }; -} - -export function isAminoMsgTransfer(msg: AminoMsg): msg is AminoMsgTransfer { - return msg.type === "cosmos-sdk/MsgTransfer"; -} diff --git a/packages/stargate/src/aminotypes.spec.ts b/packages/stargate/src/aminotypes.spec.ts index 82fa6d62..aef24686 100644 --- a/packages/stargate/src/aminotypes.spec.ts +++ b/packages/stargate/src/aminotypes.spec.ts @@ -21,6 +21,7 @@ import { import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx"; import Long from "long"; +import { AminoTypes } from "./aminotypes"; import { AminoMsgBeginRedelegate, AminoMsgCreateValidator, @@ -37,8 +38,7 @@ import { AminoMsgVote, AminoMsgWithdrawDelegatorReward, AminoMsgWithdrawValidatorCommission, -} from "./aminomsgs"; -import { AminoTypes } from "./aminotypes"; +} from "./modules"; describe("AminoTypes", () => { describe("constructor", () => { diff --git a/packages/stargate/src/aminotypes.ts b/packages/stargate/src/aminotypes.ts index ac0fafa1..236705ba 100644 --- a/packages/stargate/src/aminotypes.ts +++ b/packages/stargate/src/aminotypes.ts @@ -1,519 +1,27 @@ /* eslint-disable @typescript-eslint/naming-convention */ -import { AminoMsg, decodeBech32Pubkey, encodeBech32Pubkey } from "@cosmjs/amino"; -import { fromBase64, toBase64 } from "@cosmjs/encoding"; +import { AminoMsg } from "@cosmjs/amino"; import { EncodeObject } from "@cosmjs/proto-signing"; -import { assert, assertDefinedAndNotNull, isNonNullObject } from "@cosmjs/utils"; -import { MsgMultiSend, MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; + +import { AminoConverter, AminoConverters } from "./aminoconverters"; import { - MsgFundCommunityPool, - MsgSetWithdrawAddress, - MsgWithdrawDelegatorReward, - MsgWithdrawValidatorCommission, -} from "cosmjs-types/cosmos/distribution/v1beta1/tx"; -import { TextProposal, voteOptionFromJSON } from "cosmjs-types/cosmos/gov/v1beta1/gov"; -import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx"; -import { - MsgBeginRedelegate, - MsgCreateValidator, - MsgDelegate, - MsgEditValidator, - MsgUndelegate, -} from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { Any } from "cosmjs-types/google/protobuf/any"; -import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx"; -import Long from "long"; + createAuthzAminoConverters, + createBankAminoConverters, + createDistributionAminoConverters, + createFreegrantAminoConverters, + createGovAminoConverters, + createIbcAminoConverters, + createStakingAminoConverters, +} from "./modules"; -import { - AminoMsgBeginRedelegate, - AminoMsgCreateValidator, - AminoMsgDelegate, - AminoMsgDeposit, - AminoMsgEditValidator, - AminoMsgFundCommunityPool, - AminoMsgMultiSend, - AminoMsgSend, - AminoMsgSetWithdrawAddress, - AminoMsgSubmitProposal, - AminoMsgTransfer, - AminoMsgUndelegate, - AminoMsgVote, - AminoMsgWithdrawDelegatorReward, - AminoMsgWithdrawValidatorCommission, -} from "./aminomsgs"; - -export interface AminoConverter { - readonly aminoType: string; - readonly toAmino: (value: any) => any; - readonly fromAmino: (value: any) => any; -} - -function omitDefault(input: T): T | undefined { - if (typeof input === "string") { - return input === "" ? undefined : input; - } - - if (typeof input === "number") { - return input === 0 ? undefined : input; - } - - if (Long.isLong(input)) { - return input.isZero() ? undefined : input; - } - - throw new Error(`Got unsupported type '${typeof input}'`); -} - -function createDefaultTypes(prefix: string): Record { +function createDefaultTypes(prefix: string): AminoConverters { return { - // authz - "/cosmos.authz.v1beta1.MsgGrant": "not_supported_by_chain", - "/cosmos.authz.v1beta1.MsgExec": "not_supported_by_chain", - "/cosmos.authz.v1beta1.MsgRevoke": "not_supported_by_chain", - - // bank - "/cosmos.bank.v1beta1.MsgSend": { - aminoType: "cosmos-sdk/MsgSend", - toAmino: ({ fromAddress, toAddress, amount }: MsgSend): AminoMsgSend["value"] => ({ - from_address: fromAddress, - to_address: toAddress, - amount: [...amount], - }), - fromAmino: ({ from_address, to_address, amount }: AminoMsgSend["value"]): MsgSend => ({ - fromAddress: from_address, - toAddress: to_address, - amount: [...amount], - }), - }, - "/cosmos.bank.v1beta1.MsgMultiSend": { - aminoType: "cosmos-sdk/MsgMultiSend", - toAmino: ({ inputs, outputs }: MsgMultiSend): AminoMsgMultiSend["value"] => ({ - inputs: inputs.map((input) => ({ - address: input.address, - coins: [...input.coins], - })), - outputs: outputs.map((output) => ({ - address: output.address, - coins: [...output.coins], - })), - }), - fromAmino: ({ inputs, outputs }: AminoMsgMultiSend["value"]): MsgMultiSend => ({ - inputs: inputs.map((input) => ({ - address: input.address, - coins: [...input.coins], - })), - outputs: outputs.map((output) => ({ - address: output.address, - coins: [...output.coins], - })), - }), - }, - - // distribution - - "/cosmos.distribution.v1beta1.MsgFundCommunityPool": { - aminoType: "cosmos-sdk/MsgFundCommunityPool", - toAmino: ({ amount, depositor }: MsgFundCommunityPool): AminoMsgFundCommunityPool["value"] => ({ - amount: [...amount], - depositor: depositor, - }), - fromAmino: ({ amount, depositor }: AminoMsgFundCommunityPool["value"]): MsgFundCommunityPool => ({ - amount: [...amount], - depositor: depositor, - }), - }, - "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress": { - aminoType: "cosmos-sdk/MsgModifyWithdrawAddress", - toAmino: ({ - delegatorAddress, - withdrawAddress, - }: MsgSetWithdrawAddress): AminoMsgSetWithdrawAddress["value"] => ({ - delegator_address: delegatorAddress, - withdraw_address: withdrawAddress, - }), - fromAmino: ({ - delegator_address, - withdraw_address, - }: AminoMsgSetWithdrawAddress["value"]): MsgSetWithdrawAddress => ({ - delegatorAddress: delegator_address, - withdrawAddress: withdraw_address, - }), - }, - "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward": { - aminoType: "cosmos-sdk/MsgWithdrawDelegationReward", - toAmino: ({ - delegatorAddress, - validatorAddress, - }: MsgWithdrawDelegatorReward): AminoMsgWithdrawDelegatorReward["value"] => ({ - delegator_address: delegatorAddress, - validator_address: validatorAddress, - }), - fromAmino: ({ - delegator_address, - validator_address, - }: AminoMsgWithdrawDelegatorReward["value"]): MsgWithdrawDelegatorReward => ({ - delegatorAddress: delegator_address, - validatorAddress: validator_address, - }), - }, - "/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission": { - aminoType: "cosmos-sdk/MsgWithdrawValidatorCommission", - toAmino: ({ - validatorAddress, - }: MsgWithdrawValidatorCommission): AminoMsgWithdrawValidatorCommission["value"] => ({ - validator_address: validatorAddress, - }), - fromAmino: ({ - validator_address, - }: AminoMsgWithdrawValidatorCommission["value"]): MsgWithdrawValidatorCommission => ({ - validatorAddress: validator_address, - }), - }, - - // gov - - "/cosmos.gov.v1beta1.MsgDeposit": { - aminoType: "cosmos-sdk/MsgDeposit", - toAmino: ({ amount, depositor, proposalId }: MsgDeposit): AminoMsgDeposit["value"] => { - return { - amount, - depositor, - proposal_id: proposalId.toString(), - }; - }, - fromAmino: ({ amount, depositor, proposal_id }: AminoMsgDeposit["value"]): MsgDeposit => { - return { - amount: Array.from(amount), - depositor, - proposalId: Long.fromString(proposal_id), - }; - }, - }, - "/cosmos.gov.v1beta1.MsgVote": { - aminoType: "cosmos-sdk/MsgVote", - toAmino: ({ option, proposalId, voter }: MsgVote): AminoMsgVote["value"] => { - return { - option: option, - proposal_id: proposalId.toString(), - voter: voter, - }; - }, - fromAmino: ({ option, proposal_id, voter }: AminoMsgVote["value"]): MsgVote => { - return { - option: voteOptionFromJSON(option), - proposalId: Long.fromString(proposal_id), - voter: voter, - }; - }, - }, - "/cosmos.gov.v1beta1.MsgSubmitProposal": { - aminoType: "cosmos-sdk/MsgSubmitProposal", - toAmino: ({ - initialDeposit, - proposer, - content, - }: MsgSubmitProposal): AminoMsgSubmitProposal["value"] => { - assertDefinedAndNotNull(content); - let proposal: any; - switch (content.typeUrl) { - case "/cosmos.gov.v1beta1.TextProposal": { - const textProposal = TextProposal.decode(content.value); - proposal = { - type: "cosmos-sdk/TextProposal", - value: { - description: textProposal.description, - title: textProposal.title, - }, - }; - break; - } - default: - throw new Error(`Unsupported proposal type: '${content.typeUrl}'`); - } - return { - initial_deposit: initialDeposit, - proposer: proposer, - content: proposal, - }; - }, - fromAmino: ({ - initial_deposit, - proposer, - content, - }: AminoMsgSubmitProposal["value"]): MsgSubmitProposal => { - let any_content: Any; - switch (content.type) { - case "cosmos-sdk/TextProposal": { - const { value } = content; - assert(isNonNullObject(value)); - const { title, description } = value as any; - assert(typeof title === "string"); - assert(typeof description === "string"); - any_content = Any.fromPartial({ - typeUrl: "/cosmos.gov.v1beta1.TextProposal", - value: TextProposal.encode( - TextProposal.fromPartial({ - title: title, - description: description, - }), - ).finish(), - }); - break; - } - default: - throw new Error(`Unsupported proposal type: '${content.type}'`); - } - return { - initialDeposit: Array.from(initial_deposit), - proposer: proposer, - content: any_content, - }; - }, - }, - - // staking - - "/cosmos.staking.v1beta1.MsgBeginRedelegate": { - aminoType: "cosmos-sdk/MsgBeginRedelegate", - toAmino: ({ - delegatorAddress, - validatorSrcAddress, - validatorDstAddress, - amount, - }: MsgBeginRedelegate): AminoMsgBeginRedelegate["value"] => { - assertDefinedAndNotNull(amount, "missing amount"); - return { - delegator_address: delegatorAddress, - validator_src_address: validatorSrcAddress, - validator_dst_address: validatorDstAddress, - amount: amount, - }; - }, - fromAmino: ({ - delegator_address, - validator_src_address, - validator_dst_address, - amount, - }: AminoMsgBeginRedelegate["value"]): MsgBeginRedelegate => ({ - delegatorAddress: delegator_address, - validatorSrcAddress: validator_src_address, - validatorDstAddress: validator_dst_address, - amount: amount, - }), - }, - "/cosmos.staking.v1beta1.MsgCreateValidator": { - aminoType: "cosmos-sdk/MsgCreateValidator", - toAmino: ({ - description, - commission, - minSelfDelegation, - delegatorAddress, - validatorAddress, - pubkey, - value, - }: MsgCreateValidator): AminoMsgCreateValidator["value"] => { - assertDefinedAndNotNull(description, "missing description"); - assertDefinedAndNotNull(commission, "missing commission"); - assertDefinedAndNotNull(pubkey, "missing pubkey"); - assertDefinedAndNotNull(value, "missing value"); - return { - description: { - moniker: description.moniker, - identity: description.identity, - website: description.website, - security_contact: description.securityContact, - details: description.details, - }, - commission: { - rate: commission.rate, - max_rate: commission.maxRate, - max_change_rate: commission.maxChangeRate, - }, - min_self_delegation: minSelfDelegation, - delegator_address: delegatorAddress, - validator_address: validatorAddress, - pubkey: encodeBech32Pubkey( - { - type: "tendermint/PubKeySecp256k1", - value: toBase64(pubkey.value), - }, - prefix, - ), - value: value, - }; - }, - fromAmino: ({ - description, - commission, - min_self_delegation, - delegator_address, - validator_address, - pubkey, - value, - }: AminoMsgCreateValidator["value"]): MsgCreateValidator => { - const decodedPubkey = decodeBech32Pubkey(pubkey); - if (decodedPubkey.type !== "tendermint/PubKeySecp256k1") { - throw new Error("Only Secp256k1 public keys are supported"); - } - return { - description: { - moniker: description.moniker, - identity: description.identity, - website: description.website, - securityContact: description.security_contact, - details: description.details, - }, - commission: { - rate: commission.rate, - maxRate: commission.max_rate, - maxChangeRate: commission.max_change_rate, - }, - minSelfDelegation: min_self_delegation, - delegatorAddress: delegator_address, - validatorAddress: validator_address, - pubkey: { - typeUrl: "/cosmos.crypto.secp256k1.PubKey", - value: fromBase64(decodedPubkey.value), - }, - value: value, - }; - }, - }, - "/cosmos.staking.v1beta1.MsgDelegate": { - aminoType: "cosmos-sdk/MsgDelegate", - toAmino: ({ delegatorAddress, validatorAddress, amount }: MsgDelegate): AminoMsgDelegate["value"] => { - assertDefinedAndNotNull(amount, "missing amount"); - return { - delegator_address: delegatorAddress, - validator_address: validatorAddress, - amount: amount, - }; - }, - fromAmino: ({ - delegator_address, - validator_address, - amount, - }: AminoMsgDelegate["value"]): MsgDelegate => ({ - delegatorAddress: delegator_address, - validatorAddress: validator_address, - amount: amount, - }), - }, - "/cosmos.staking.v1beta1.MsgEditValidator": { - aminoType: "cosmos-sdk/MsgEditValidator", - toAmino: ({ - description, - commissionRate, - minSelfDelegation, - validatorAddress, - }: MsgEditValidator): AminoMsgEditValidator["value"] => { - assertDefinedAndNotNull(description, "missing description"); - return { - description: { - moniker: description.moniker, - identity: description.identity, - website: description.website, - security_contact: description.securityContact, - details: description.details, - }, - commission_rate: commissionRate, - min_self_delegation: minSelfDelegation, - validator_address: validatorAddress, - }; - }, - fromAmino: ({ - description, - commission_rate, - min_self_delegation, - validator_address, - }: AminoMsgEditValidator["value"]): MsgEditValidator => ({ - description: { - moniker: description.moniker, - identity: description.identity, - website: description.website, - securityContact: description.security_contact, - details: description.details, - }, - commissionRate: commission_rate, - minSelfDelegation: min_self_delegation, - validatorAddress: validator_address, - }), - }, - "/cosmos.staking.v1beta1.MsgUndelegate": { - aminoType: "cosmos-sdk/MsgUndelegate", - toAmino: ({ - delegatorAddress, - validatorAddress, - amount, - }: MsgUndelegate): AminoMsgUndelegate["value"] => { - assertDefinedAndNotNull(amount, "missing amount"); - return { - delegator_address: delegatorAddress, - validator_address: validatorAddress, - amount: amount, - }; - }, - fromAmino: ({ - delegator_address, - validator_address, - amount, - }: AminoMsgUndelegate["value"]): MsgUndelegate => ({ - delegatorAddress: delegator_address, - validatorAddress: validator_address, - amount: amount, - }), - }, - - // ibc - - "/ibc.applications.transfer.v1.MsgTransfer": { - aminoType: "cosmos-sdk/MsgTransfer", - toAmino: ({ - sourcePort, - sourceChannel, - token, - sender, - receiver, - timeoutHeight, - timeoutTimestamp, - }: MsgTransfer): AminoMsgTransfer["value"] => ({ - source_port: sourcePort, - source_channel: sourceChannel, - token: token, - sender: sender, - receiver: receiver, - timeout_height: timeoutHeight - ? { - revision_height: omitDefault(timeoutHeight.revisionHeight)?.toString(), - revision_number: omitDefault(timeoutHeight.revisionNumber)?.toString(), - } - : {}, - timeout_timestamp: omitDefault(timeoutTimestamp)?.toString(), - }), - fromAmino: ({ - source_port, - source_channel, - token, - sender, - receiver, - timeout_height, - timeout_timestamp, - }: AminoMsgTransfer["value"]): MsgTransfer => ({ - sourcePort: source_port, - sourceChannel: source_channel, - token: token, - sender: sender, - receiver: receiver, - timeoutHeight: timeout_height - ? { - revisionHeight: Long.fromString(timeout_height.revision_height || "0", true), - revisionNumber: Long.fromString(timeout_height.revision_number || "0", true), - } - : undefined, - timeoutTimestamp: Long.fromString(timeout_timestamp || "0", true), - }), - }, - "/cosmos.feegrant.v1beta1.MsgGrantAllowance": "not_supported_by_chain", - "/cosmos.feegrant.v1beta1.MsgRevokeAllowance": "not_supported_by_chain", + ...createAuthzAminoConverters(), + ...createBankAminoConverters(), + ...createDistributionAminoConverters(), + ...createGovAminoConverters(), + ...createStakingAminoConverters(prefix), + ...createIbcAminoConverters(), + ...createFreegrantAminoConverters(), }; } @@ -522,7 +30,7 @@ export interface AminoTypesOptions { * The Bech32 address prefix of the chain you work with (also called Bech32 human-readable part). */ readonly prefix: string; - readonly additions?: Record; + readonly additions?: AminoConverters; } function isAminoConverter( diff --git a/packages/stargate/src/index.ts b/packages/stargate/src/index.ts index 34cb49ff..32f72bf3 100644 --- a/packages/stargate/src/index.ts +++ b/packages/stargate/src/index.ts @@ -1,4 +1,16 @@ export { Account, accountFromAny } from "./accounts"; +export { AminoConverter } from "./aminoconverters"; +export { + AminoMsgSubmitEvidence, + AminoMsgUnjail, + AminoMsgVerifyInvariant, + isAminoMsgSubmitEvidence, + isAminoMsgUnjail, + isAminoMsgVerifyInvariant, +} from "./aminomsgs"; +export { AminoTypes, AminoTypesOptions } from "./aminotypes"; +export { calculateFee, GasPrice } from "./fee"; +export * as logs from "./logs"; export { AminoMsgBeginRedelegate, AminoMsgCreateValidator, @@ -9,14 +21,18 @@ export { AminoMsgMultiSend, AminoMsgSend, AminoMsgSetWithdrawAddress, - AminoMsgSubmitEvidence, AminoMsgSubmitProposal, AminoMsgUndelegate, - AminoMsgUnjail, - AminoMsgVerifyInvariant, AminoMsgVote, AminoMsgWithdrawDelegatorReward, AminoMsgWithdrawValidatorCommission, + AuthExtension, + BankExtension, + DistributionExtension, + GovExtension, + GovParamsType, + GovProposalId, + IbcExtension, isAminoMsgBeginRedelegate, isAminoMsgCreateValidator, isAminoMsgDelegate, @@ -26,26 +42,11 @@ export { isAminoMsgMultiSend, isAminoMsgSend, isAminoMsgSetWithdrawAddress, - isAminoMsgSubmitEvidence, isAminoMsgSubmitProposal, isAminoMsgUndelegate, - isAminoMsgUnjail, - isAminoMsgVerifyInvariant, isAminoMsgVote, isAminoMsgWithdrawDelegatorReward, isAminoMsgWithdrawValidatorCommission, -} from "./aminomsgs"; -export { AminoConverter, AminoTypes, AminoTypesOptions } from "./aminotypes"; -export { calculateFee, GasPrice } from "./fee"; -export * as logs from "./logs"; -export { - AuthExtension, - BankExtension, - DistributionExtension, - GovExtension, - GovParamsType, - GovProposalId, - IbcExtension, isMsgDelegateEncodeObject, isMsgDepositEncodeObject, isMsgSendEncodeObject, diff --git a/packages/stargate/src/modules/authz/aminomessages.ts b/packages/stargate/src/modules/authz/aminomessages.ts new file mode 100644 index 00000000..149fdf6d --- /dev/null +++ b/packages/stargate/src/modules/authz/aminomessages.ts @@ -0,0 +1,9 @@ +import { AminoConverters } from "../../aminoconverters"; + +export function createAuthzAminoConverters(): AminoConverters { + return { + "/cosmos.authz.v1beta1.MsgGrant": "not_supported_by_chain", + "/cosmos.authz.v1beta1.MsgExec": "not_supported_by_chain", + "/cosmos.authz.v1beta1.MsgRevoke": "not_supported_by_chain", + }; +} diff --git a/packages/stargate/src/modules/bank/aminomessages.ts b/packages/stargate/src/modules/bank/aminomessages.ts new file mode 100644 index 00000000..f74530be --- /dev/null +++ b/packages/stargate/src/modules/bank/aminomessages.ts @@ -0,0 +1,88 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg, Coin } from "@cosmjs/amino"; +import { MsgMultiSend, MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; + +// eslint-disable-next-line import/no-cycle +import { AminoConverters } from "../../aminoconverters"; + +/** A high level transaction of the coin module */ +export interface AminoMsgSend extends AminoMsg { + readonly type: "cosmos-sdk/MsgSend"; + readonly value: { + /** Bech32 account address */ + readonly from_address: string; + /** Bech32 account address */ + readonly to_address: string; + readonly amount: readonly Coin[]; + }; +} + +export function isAminoMsgSend(msg: AminoMsg): msg is AminoMsgSend { + return msg.type === "cosmos-sdk/MsgSend"; +} + +interface Input { + /** Bech32 account address */ + readonly address: string; + readonly coins: readonly Coin[]; +} + +interface Output { + /** Bech32 account address */ + readonly address: string; + readonly coins: readonly Coin[]; +} + +/** A high level transaction of the coin module */ +export interface AminoMsgMultiSend extends AminoMsg { + readonly type: "cosmos-sdk/MsgMultiSend"; + readonly value: { + readonly inputs: readonly Input[]; + readonly outputs: readonly Output[]; + }; +} + +export function isAminoMsgMultiSend(msg: AminoMsg): msg is AminoMsgMultiSend { + return msg.type === "cosmos-sdk/MsgMultiSend"; +} + +export function createBankAminoConverters(): AminoConverters { + return { + "/cosmos.bank.v1beta1.MsgSend": { + aminoType: "cosmos-sdk/MsgSend", + toAmino: ({ fromAddress, toAddress, amount }: MsgSend): AminoMsgSend["value"] => ({ + from_address: fromAddress, + to_address: toAddress, + amount: [...amount], + }), + fromAmino: ({ from_address, to_address, amount }: AminoMsgSend["value"]): MsgSend => ({ + fromAddress: from_address, + toAddress: to_address, + amount: [...amount], + }), + }, + "/cosmos.bank.v1beta1.MsgMultiSend": { + aminoType: "cosmos-sdk/MsgMultiSend", + toAmino: ({ inputs, outputs }: MsgMultiSend): AminoMsgMultiSend["value"] => ({ + inputs: inputs.map((input) => ({ + address: input.address, + coins: [...input.coins], + })), + outputs: outputs.map((output) => ({ + address: output.address, + coins: [...output.coins], + })), + }), + fromAmino: ({ inputs, outputs }: AminoMsgMultiSend["value"]): MsgMultiSend => ({ + inputs: inputs.map((input) => ({ + address: input.address, + coins: [...input.coins], + })), + outputs: outputs.map((output) => ({ + address: output.address, + coins: [...output.coins], + })), + }), + }, + }; +} diff --git a/packages/stargate/src/modules/distribution/aminomessages.ts b/packages/stargate/src/modules/distribution/aminomessages.ts new file mode 100644 index 00000000..f9844f55 --- /dev/null +++ b/packages/stargate/src/modules/distribution/aminomessages.ts @@ -0,0 +1,139 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg, Coin } from "@cosmjs/amino"; +import { + MsgFundCommunityPool, + MsgSetWithdrawAddress, + MsgWithdrawDelegatorReward, + MsgWithdrawValidatorCommission, +} from "cosmjs-types/cosmos/distribution/v1beta1/tx"; + +import { AminoConverter } from "../.."; + +/** Changes the withdraw address for a delegator (or validator self-delegation) */ +export interface AminoMsgSetWithdrawAddress extends AminoMsg { + // NOTE: Type string and names diverge here! + readonly type: "cosmos-sdk/MsgModifyWithdrawAddress"; + readonly value: { + /** Bech32 account address */ + readonly delegator_address: string; + /** Bech32 account address */ + readonly withdraw_address: string; + }; +} + +export function isAminoMsgSetWithdrawAddress(msg: AminoMsg): msg is AminoMsgSetWithdrawAddress { + // NOTE: Type string and names diverge here! + return msg.type === "cosmos-sdk/MsgModifyWithdrawAddress"; +} + +/** Message for delegation withdraw from a single validator */ +export interface AminoMsgWithdrawDelegatorReward extends AminoMsg { + // NOTE: Type string and names diverge here! + readonly type: "cosmos-sdk/MsgWithdrawDelegationReward"; + readonly value: { + /** Bech32 account address */ + readonly delegator_address: string; + /** Bech32 account address */ + readonly validator_address: string; + }; +} + +export function isAminoMsgWithdrawDelegatorReward(msg: AminoMsg): msg is AminoMsgWithdrawDelegatorReward { + // NOTE: Type string and names diverge here! + return msg.type === "cosmos-sdk/MsgWithdrawDelegationReward"; +} + +/** Message for validator withdraw */ +export interface AminoMsgWithdrawValidatorCommission extends AminoMsg { + readonly type: "cosmos-sdk/MsgWithdrawValidatorCommission"; + readonly value: { + /** Bech32 account address */ + readonly validator_address: string; + }; +} + +export function isAminoMsgWithdrawValidatorCommission( + msg: AminoMsg, +): msg is AminoMsgWithdrawValidatorCommission { + return msg.type === "cosmos-sdk/MsgWithdrawValidatorCommission"; +} + +/** Allows an account to directly fund the community pool. */ +export interface AminoMsgFundCommunityPool extends AminoMsg { + readonly type: "cosmos-sdk/MsgFundCommunityPool"; + readonly value: { + readonly amount: readonly Coin[]; + /** Bech32 account address */ + readonly depositor: string; + }; +} + +export function isAminoMsgFundCommunityPool(msg: AminoMsg): msg is AminoMsgFundCommunityPool { + return msg.type === "cosmos-sdk/MsgFundCommunityPool"; +} + +export function createDistributionAminoConverters(): Record< + string, + AminoConverter | "not_supported_by_chain" +> { + return { + "/cosmos.distribution.v1beta1.MsgFundCommunityPool": { + aminoType: "cosmos-sdk/MsgFundCommunityPool", + toAmino: ({ amount, depositor }: MsgFundCommunityPool): AminoMsgFundCommunityPool["value"] => ({ + amount: [...amount], + depositor: depositor, + }), + fromAmino: ({ amount, depositor }: AminoMsgFundCommunityPool["value"]): MsgFundCommunityPool => ({ + amount: [...amount], + depositor: depositor, + }), + }, + "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress": { + aminoType: "cosmos-sdk/MsgModifyWithdrawAddress", + toAmino: ({ + delegatorAddress, + withdrawAddress, + }: MsgSetWithdrawAddress): AminoMsgSetWithdrawAddress["value"] => ({ + delegator_address: delegatorAddress, + withdraw_address: withdrawAddress, + }), + fromAmino: ({ + delegator_address, + withdraw_address, + }: AminoMsgSetWithdrawAddress["value"]): MsgSetWithdrawAddress => ({ + delegatorAddress: delegator_address, + withdrawAddress: withdraw_address, + }), + }, + "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward": { + aminoType: "cosmos-sdk/MsgWithdrawDelegationReward", + toAmino: ({ + delegatorAddress, + validatorAddress, + }: MsgWithdrawDelegatorReward): AminoMsgWithdrawDelegatorReward["value"] => ({ + delegator_address: delegatorAddress, + validator_address: validatorAddress, + }), + fromAmino: ({ + delegator_address, + validator_address, + }: AminoMsgWithdrawDelegatorReward["value"]): MsgWithdrawDelegatorReward => ({ + delegatorAddress: delegator_address, + validatorAddress: validator_address, + }), + }, + "/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission": { + aminoType: "cosmos-sdk/MsgWithdrawValidatorCommission", + toAmino: ({ + validatorAddress, + }: MsgWithdrawValidatorCommission): AminoMsgWithdrawValidatorCommission["value"] => ({ + validator_address: validatorAddress, + }), + fromAmino: ({ + validator_address, + }: AminoMsgWithdrawValidatorCommission["value"]): MsgWithdrawValidatorCommission => ({ + validatorAddress: validator_address, + }), + }, + }; +} diff --git a/packages/stargate/src/modules/feegrant/aminomessages.ts b/packages/stargate/src/modules/feegrant/aminomessages.ts new file mode 100644 index 00000000..7f6f8db1 --- /dev/null +++ b/packages/stargate/src/modules/feegrant/aminomessages.ts @@ -0,0 +1,8 @@ +import { AminoConverters } from "../../aminoconverters"; + +export function createFreegrantAminoConverters(): AminoConverters { + return { + "/cosmos.feegrant.v1beta1.MsgGrantAllowance": "not_supported_by_chain", + "/cosmos.feegrant.v1beta1.MsgRevokeAllowance": "not_supported_by_chain", + }; +} diff --git a/packages/stargate/src/modules/gov/aminomessages.ts b/packages/stargate/src/modules/gov/aminomessages.ts new file mode 100644 index 00000000..cb48cfd0 --- /dev/null +++ b/packages/stargate/src/modules/gov/aminomessages.ts @@ -0,0 +1,178 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg, Coin } from "@cosmjs/amino"; +import { assert, assertDefinedAndNotNull, isNonNullObject } from "@cosmjs/utils"; +import { TextProposal, voteOptionFromJSON } from "cosmjs-types/cosmos/gov/v1beta1/gov"; +import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx"; +import { Any } from "cosmjs-types/google/protobuf/any"; +import Long from "long"; + +import { AminoConverters } from "../../aminoconverters"; + +/** Supports submitting arbitrary proposal content. */ +export interface AminoMsgSubmitProposal extends AminoMsg { + readonly type: "cosmos-sdk/MsgSubmitProposal"; + readonly value: { + /** + * A proposal structure, e.g. + * + * ``` + * { + * type: 'cosmos-sdk/TextProposal', + * value: { + * description: 'This proposal proposes to test whether this proposal passes', + * title: 'Test Proposal' + * } + * } + * ``` + */ + readonly content: { + readonly type: string; + readonly value: any; + }; + readonly initial_deposit: readonly Coin[]; + /** Bech32 account address */ + readonly proposer: string; + }; +} + +export function isAminoMsgSubmitProposal(msg: AminoMsg): msg is AminoMsgSubmitProposal { + return msg.type === "cosmos-sdk/MsgSubmitProposal"; +} + +/** Casts a vote */ +export interface AminoMsgVote extends AminoMsg { + readonly type: "cosmos-sdk/MsgVote"; + readonly value: { + readonly proposal_id: string; + /** Bech32 account address */ + readonly voter: string; + /** + * VoteOption as integer from 0 to 4 🤷‍ + * + * @see https://github.com/cosmos/cosmos-sdk/blob/v0.42.9/x/gov/types/gov.pb.go#L38-L49 + */ + readonly option: number; + }; +} + +export function isAminoMsgVote(msg: AminoMsg): msg is AminoMsgVote { + return msg.type === "cosmos-sdk/MsgVote"; +} + +/** Submits a deposit to an existing proposal */ +export interface AminoMsgDeposit extends AminoMsg { + readonly type: "cosmos-sdk/MsgDeposit"; + readonly value: { + readonly proposal_id: string; + /** Bech32 account address */ + readonly depositor: string; + readonly amount: readonly Coin[]; + }; +} + +export function isAminoMsgDeposit(msg: AminoMsg): msg is AminoMsgDeposit { + return msg.type === "cosmos-sdk/MsgDeposit"; +} + +export function createGovAminoConverters(): AminoConverters { + return { + "/cosmos.gov.v1beta1.MsgDeposit": { + aminoType: "cosmos-sdk/MsgDeposit", + toAmino: ({ amount, depositor, proposalId }: MsgDeposit): AminoMsgDeposit["value"] => { + return { + amount, + depositor, + proposal_id: proposalId.toString(), + }; + }, + fromAmino: ({ amount, depositor, proposal_id }: AminoMsgDeposit["value"]): MsgDeposit => { + return { + amount: Array.from(amount), + depositor, + proposalId: Long.fromString(proposal_id), + }; + }, + }, + "/cosmos.gov.v1beta1.MsgVote": { + aminoType: "cosmos-sdk/MsgVote", + toAmino: ({ option, proposalId, voter }: MsgVote): AminoMsgVote["value"] => { + return { + option: option, + proposal_id: proposalId.toString(), + voter: voter, + }; + }, + fromAmino: ({ option, proposal_id, voter }: AminoMsgVote["value"]): MsgVote => { + return { + option: voteOptionFromJSON(option), + proposalId: Long.fromString(proposal_id), + voter: voter, + }; + }, + }, + "/cosmos.gov.v1beta1.MsgSubmitProposal": { + aminoType: "cosmos-sdk/MsgSubmitProposal", + toAmino: ({ + initialDeposit, + proposer, + content, + }: MsgSubmitProposal): AminoMsgSubmitProposal["value"] => { + assertDefinedAndNotNull(content); + let proposal: any; + switch (content.typeUrl) { + case "/cosmos.gov.v1beta1.TextProposal": { + const textProposal = TextProposal.decode(content.value); + proposal = { + type: "cosmos-sdk/TextProposal", + value: { + description: textProposal.description, + title: textProposal.title, + }, + }; + break; + } + default: + throw new Error(`Unsupported proposal type: '${content.typeUrl}'`); + } + return { + initial_deposit: initialDeposit, + proposer: proposer, + content: proposal, + }; + }, + fromAmino: ({ + initial_deposit, + proposer, + content, + }: AminoMsgSubmitProposal["value"]): MsgSubmitProposal => { + let any_content: Any; + switch (content.type) { + case "cosmos-sdk/TextProposal": { + const { value } = content; + assert(isNonNullObject(value)); + const { title, description } = value as any; + assert(typeof title === "string"); + assert(typeof description === "string"); + any_content = Any.fromPartial({ + typeUrl: "/cosmos.gov.v1beta1.TextProposal", + value: TextProposal.encode( + TextProposal.fromPartial({ + title: title, + description: description, + }), + ).finish(), + }); + break; + } + default: + throw new Error(`Unsupported proposal type: '${content.type}'`); + } + return { + initialDeposit: Array.from(initial_deposit), + proposer: proposer, + content: any_content, + }; + }, + }, + }; +} diff --git a/packages/stargate/src/modules/ibc/aminomessages.ts b/packages/stargate/src/modules/ibc/aminomessages.ts new file mode 100644 index 00000000..6fdb71b9 --- /dev/null +++ b/packages/stargate/src/modules/ibc/aminomessages.ts @@ -0,0 +1,114 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg, Coin } from "@cosmjs/amino"; +import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx"; +import Long from "long"; + +import { AminoConverters } from "../../aminoconverters"; + +// https://github.com/cosmos/ibc-go/blob/07b6a97b67d17fd214a83764cbdb2c2c3daef445/modules/core/02-client/types/client.pb.go#L297-L312 +interface AminoHeight { + /** 0 values must be omitted (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/core/02-client/types/client.pb.go#L252). */ + readonly revision_number?: string; + /** 0 values must be omitted (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/core/02-client/types/client.pb.go#L254). */ + readonly revision_height?: string; +} + +// https://github.com/cosmos/ibc-go/blob/07b6a97b67d17fd214a83764cbdb2c2c3daef445/modules/apps/transfer/types/tx.pb.go#L33-L53 +/** Transfers fungible tokens (i.e Coins) between ICS20 enabled chains */ +export interface AminoMsgTransfer extends AminoMsg { + readonly type: "cosmos-sdk/MsgTransfer"; + readonly value: { + readonly source_port: string; + readonly source_channel: string; + readonly token?: Coin; + /** Bech32 account address */ + readonly sender: string; + /** Bech32 account address */ + readonly receiver: string; + /** + * The timeout as a (revision_number, revision_height) pair. + * + * This fied is is non-optional (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/applications/transfer/types/tx.pb.go#L49). + * In order to not set the timeout height, set it to {}. + */ + readonly timeout_height: AminoHeight; + /** + * Timeout timestamp in nanoseconds since Unix epoch. The timeout is disabled when set to 0. + * + * 0 values must be omitted (https://github.com/cosmos/cosmos-sdk/blob/v0.42.7/x/ibc/applications/transfer/types/tx.pb.go#L52). + */ + readonly timeout_timestamp?: string; + }; +} + +export function isAminoMsgTransfer(msg: AminoMsg): msg is AminoMsgTransfer { + return msg.type === "cosmos-sdk/MsgTransfer"; +} + +function omitDefault(input: T): T | undefined { + if (typeof input === "string") { + return input === "" ? undefined : input; + } + + if (typeof input === "number") { + return input === 0 ? undefined : input; + } + + if (Long.isLong(input)) { + return input.isZero() ? undefined : input; + } + + throw new Error(`Got unsupported type '${typeof input}'`); +} + +export function createIbcAminoConverters(): AminoConverters { + return { + "/ibc.applications.transfer.v1.MsgTransfer": { + aminoType: "cosmos-sdk/MsgTransfer", + toAmino: ({ + sourcePort, + sourceChannel, + token, + sender, + receiver, + timeoutHeight, + timeoutTimestamp, + }: MsgTransfer): AminoMsgTransfer["value"] => ({ + source_port: sourcePort, + source_channel: sourceChannel, + token: token, + sender: sender, + receiver: receiver, + timeout_height: timeoutHeight + ? { + revision_height: omitDefault(timeoutHeight.revisionHeight)?.toString(), + revision_number: omitDefault(timeoutHeight.revisionNumber)?.toString(), + } + : {}, + timeout_timestamp: omitDefault(timeoutTimestamp)?.toString(), + }), + fromAmino: ({ + source_port, + source_channel, + token, + sender, + receiver, + timeout_height, + timeout_timestamp, + }: AminoMsgTransfer["value"]): MsgTransfer => ({ + sourcePort: source_port, + sourceChannel: source_channel, + token: token, + sender: sender, + receiver: receiver, + timeoutHeight: timeout_height + ? { + revisionHeight: Long.fromString(timeout_height.revision_height || "0", true), + revisionNumber: Long.fromString(timeout_height.revision_number || "0", true), + } + : undefined, + timeoutTimestamp: Long.fromString(timeout_timestamp || "0", true), + }), + }, + }; +} diff --git a/packages/stargate/src/modules/index.ts b/packages/stargate/src/modules/index.ts index c828e3f9..6404bcd8 100644 --- a/packages/stargate/src/modules/index.ts +++ b/packages/stargate/src/modules/index.ts @@ -1,14 +1,43 @@ export { AuthExtension, setupAuthExtension } from "./auth/queries"; +export { createAuthzAminoConverters } from "./authz/aminomessages"; export { authzTypes } from "./authz/messages"; +export { + AminoMsgMultiSend, + AminoMsgSend, + createBankAminoConverters, + isAminoMsgMultiSend, + isAminoMsgSend, +} from "./bank/aminomessages"; export { bankTypes, isMsgSendEncodeObject, MsgSendEncodeObject } from "./bank/messages"; export { BankExtension, setupBankExtension } from "./bank/queries"; +export { + AminoMsgFundCommunityPool, + AminoMsgSetWithdrawAddress, + AminoMsgWithdrawDelegatorReward, + AminoMsgWithdrawValidatorCommission, + createDistributionAminoConverters, + isAminoMsgFundCommunityPool, + isAminoMsgSetWithdrawAddress, + isAminoMsgWithdrawDelegatorReward, + isAminoMsgWithdrawValidatorCommission, +} from "./distribution/aminomessages"; export { distributionTypes, isMsgWithdrawDelegatorRewardEncodeObject, MsgWithdrawDelegatorRewardEncodeObject, } from "./distribution/messages"; export { DistributionExtension, setupDistributionExtension } from "./distribution/queries"; +export { createFreegrantAminoConverters } from "./feegrant/aminomessages"; export { feegrantTypes } from "./feegrant/messages"; +export { + AminoMsgDeposit, + AminoMsgSubmitProposal, + AminoMsgVote, + createGovAminoConverters, + isAminoMsgDeposit, + isAminoMsgSubmitProposal, + isAminoMsgVote, +} from "./gov/aminomessages"; export { govTypes, isMsgDepositEncodeObject, @@ -19,10 +48,24 @@ export { MsgVoteEncodeObject, } from "./gov/messages"; export { GovExtension, GovParamsType, GovProposalId, setupGovExtension } from "./gov/queries"; +export { AminoMsgTransfer, createIbcAminoConverters, isAminoMsgTransfer } from "./ibc/aminomessages"; export { ibcTypes, isMsgTransferEncodeObject, MsgTransferEncodeObject } from "./ibc/messages"; export { IbcExtension, setupIbcExtension } from "./ibc/queries"; export { MintExtension, MintParams, setupMintExtension } from "./mint/queries"; export { setupSlashingExtension, SlashingExtension } from "./slashing/queries"; +export { + AminoMsgBeginRedelegate, + AminoMsgCreateValidator, + AminoMsgDelegate, + AminoMsgEditValidator, + AminoMsgUndelegate, + createStakingAminoConverters, + isAminoMsgBeginRedelegate, + isAminoMsgCreateValidator, + isAminoMsgDelegate, + isAminoMsgEditValidator, + isAminoMsgUndelegate, +} from "./staking/aminomessages"; export { isMsgDelegateEncodeObject, isMsgUndelegateEncodeObject, diff --git a/packages/stargate/src/modules/staking/aminomessages.ts b/packages/stargate/src/modules/staking/aminomessages.ts new file mode 100644 index 00000000..97904b02 --- /dev/null +++ b/packages/stargate/src/modules/staking/aminomessages.ts @@ -0,0 +1,317 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg, Coin, decodeBech32Pubkey, encodeBech32Pubkey } from "@cosmjs/amino"; +import { fromBase64, toBase64 } from "@cosmjs/encoding"; +import { assertDefinedAndNotNull } from "@cosmjs/utils"; +import { + MsgBeginRedelegate, + MsgCreateValidator, + MsgDelegate, + MsgEditValidator, + MsgUndelegate, +} from "cosmjs-types/cosmos/staking/v1beta1/tx"; + +import { AminoConverter } from "../.."; + +/** The initial commission rates to be used for creating a validator */ +interface CommissionRates { + readonly rate: string; + readonly max_rate: string; + readonly max_change_rate: string; +} + +/** A validator description. */ +interface Description { + readonly moniker: string; + readonly identity: string; + readonly website: string; + readonly security_contact: string; + readonly details: string; +} + +/** Creates a new validator. */ +export interface AminoMsgCreateValidator extends AminoMsg { + readonly type: "cosmos-sdk/MsgCreateValidator"; + readonly value: { + readonly description: Description; + readonly commission: CommissionRates; + readonly min_self_delegation: string; + /** Bech32 encoded delegator address */ + readonly delegator_address: string; + /** Bech32 encoded validator address */ + readonly validator_address: string; + /** Bech32 encoded public key */ + readonly pubkey: string; + readonly value: Coin; + }; +} + +export function isAminoMsgCreateValidator(msg: AminoMsg): msg is AminoMsgCreateValidator { + return msg.type === "cosmos-sdk/MsgCreateValidator"; +} + +/** Edits an existing validator. */ +export interface AminoMsgEditValidator extends AminoMsg { + readonly type: "cosmos-sdk/MsgEditValidator"; + readonly value: { + readonly description: Description; + /** Bech32 encoded validator address */ + readonly validator_address: string; + readonly commission_rate: string; + readonly min_self_delegation: string; + }; +} + +export function isAminoMsgEditValidator(msg: AminoMsg): msg is AminoMsgEditValidator { + return msg.type === "cosmos-sdk/MsgEditValidator"; +} + +/** + * Performs a delegation from a delegate to a validator. + * + * @see https://docs.cosmos.network/master/modules/staking/03_messages.html#msgdelegate + */ +export interface AminoMsgDelegate extends AminoMsg { + readonly type: "cosmos-sdk/MsgDelegate"; + readonly value: { + /** Bech32 encoded delegator address */ + readonly delegator_address: string; + /** Bech32 encoded validator address */ + readonly validator_address: string; + readonly amount: Coin; + }; +} + +export function isAminoMsgDelegate(msg: AminoMsg): msg is AminoMsgDelegate { + return msg.type === "cosmos-sdk/MsgDelegate"; +} + +/** Performs a redelegation from a delegate and source validator to a destination validator */ +export interface AminoMsgBeginRedelegate extends AminoMsg { + readonly type: "cosmos-sdk/MsgBeginRedelegate"; + readonly value: { + /** Bech32 encoded delegator address */ + readonly delegator_address: string; + /** Bech32 encoded source validator address */ + readonly validator_src_address: string; + /** Bech32 encoded destination validator address */ + readonly validator_dst_address: string; + readonly amount: Coin; + }; +} + +export function isAminoMsgBeginRedelegate(msg: AminoMsg): msg is AminoMsgBeginRedelegate { + return msg.type === "cosmos-sdk/MsgBeginRedelegate"; +} + +/** Performs an undelegation from a delegate and a validator */ +export interface AminoMsgUndelegate extends AminoMsg { + readonly type: "cosmos-sdk/MsgUndelegate"; + readonly value: { + /** Bech32 encoded delegator address */ + readonly delegator_address: string; + /** Bech32 encoded validator address */ + readonly validator_address: string; + readonly amount: Coin; + }; +} + +export function isAminoMsgUndelegate(msg: AminoMsg): msg is AminoMsgUndelegate { + return msg.type === "cosmos-sdk/MsgUndelegate"; +} + +export function createStakingAminoConverters( + prefix: string, +): Record { + return { + "/cosmos.staking.v1beta1.MsgBeginRedelegate": { + aminoType: "cosmos-sdk/MsgBeginRedelegate", + toAmino: ({ + delegatorAddress, + validatorSrcAddress, + validatorDstAddress, + amount, + }: MsgBeginRedelegate): AminoMsgBeginRedelegate["value"] => { + assertDefinedAndNotNull(amount, "missing amount"); + return { + delegator_address: delegatorAddress, + validator_src_address: validatorSrcAddress, + validator_dst_address: validatorDstAddress, + amount: amount, + }; + }, + fromAmino: ({ + delegator_address, + validator_src_address, + validator_dst_address, + amount, + }: AminoMsgBeginRedelegate["value"]): MsgBeginRedelegate => ({ + delegatorAddress: delegator_address, + validatorSrcAddress: validator_src_address, + validatorDstAddress: validator_dst_address, + amount: amount, + }), + }, + "/cosmos.staking.v1beta1.MsgCreateValidator": { + aminoType: "cosmos-sdk/MsgCreateValidator", + toAmino: ({ + description, + commission, + minSelfDelegation, + delegatorAddress, + validatorAddress, + pubkey, + value, + }: MsgCreateValidator): AminoMsgCreateValidator["value"] => { + assertDefinedAndNotNull(description, "missing description"); + assertDefinedAndNotNull(commission, "missing commission"); + assertDefinedAndNotNull(pubkey, "missing pubkey"); + assertDefinedAndNotNull(value, "missing value"); + return { + description: { + moniker: description.moniker, + identity: description.identity, + website: description.website, + security_contact: description.securityContact, + details: description.details, + }, + commission: { + rate: commission.rate, + max_rate: commission.maxRate, + max_change_rate: commission.maxChangeRate, + }, + min_self_delegation: minSelfDelegation, + delegator_address: delegatorAddress, + validator_address: validatorAddress, + pubkey: encodeBech32Pubkey( + { + type: "tendermint/PubKeySecp256k1", + value: toBase64(pubkey.value), + }, + prefix, + ), + value: value, + }; + }, + fromAmino: ({ + description, + commission, + min_self_delegation, + delegator_address, + validator_address, + pubkey, + value, + }: AminoMsgCreateValidator["value"]): MsgCreateValidator => { + const decodedPubkey = decodeBech32Pubkey(pubkey); + if (decodedPubkey.type !== "tendermint/PubKeySecp256k1") { + throw new Error("Only Secp256k1 public keys are supported"); + } + return { + description: { + moniker: description.moniker, + identity: description.identity, + website: description.website, + securityContact: description.security_contact, + details: description.details, + }, + commission: { + rate: commission.rate, + maxRate: commission.max_rate, + maxChangeRate: commission.max_change_rate, + }, + minSelfDelegation: min_self_delegation, + delegatorAddress: delegator_address, + validatorAddress: validator_address, + pubkey: { + typeUrl: "/cosmos.crypto.secp256k1.PubKey", + value: fromBase64(decodedPubkey.value), + }, + value: value, + }; + }, + }, + "/cosmos.staking.v1beta1.MsgDelegate": { + aminoType: "cosmos-sdk/MsgDelegate", + toAmino: ({ delegatorAddress, validatorAddress, amount }: MsgDelegate): AminoMsgDelegate["value"] => { + assertDefinedAndNotNull(amount, "missing amount"); + return { + delegator_address: delegatorAddress, + validator_address: validatorAddress, + amount: amount, + }; + }, + fromAmino: ({ + delegator_address, + validator_address, + amount, + }: AminoMsgDelegate["value"]): MsgDelegate => ({ + delegatorAddress: delegator_address, + validatorAddress: validator_address, + amount: amount, + }), + }, + "/cosmos.staking.v1beta1.MsgEditValidator": { + aminoType: "cosmos-sdk/MsgEditValidator", + toAmino: ({ + description, + commissionRate, + minSelfDelegation, + validatorAddress, + }: MsgEditValidator): AminoMsgEditValidator["value"] => { + assertDefinedAndNotNull(description, "missing description"); + return { + description: { + moniker: description.moniker, + identity: description.identity, + website: description.website, + security_contact: description.securityContact, + details: description.details, + }, + commission_rate: commissionRate, + min_self_delegation: minSelfDelegation, + validator_address: validatorAddress, + }; + }, + fromAmino: ({ + description, + commission_rate, + min_self_delegation, + validator_address, + }: AminoMsgEditValidator["value"]): MsgEditValidator => ({ + description: { + moniker: description.moniker, + identity: description.identity, + website: description.website, + securityContact: description.security_contact, + details: description.details, + }, + commissionRate: commission_rate, + minSelfDelegation: min_self_delegation, + validatorAddress: validator_address, + }), + }, + "/cosmos.staking.v1beta1.MsgUndelegate": { + aminoType: "cosmos-sdk/MsgUndelegate", + toAmino: ({ + delegatorAddress, + validatorAddress, + amount, + }: MsgUndelegate): AminoMsgUndelegate["value"] => { + assertDefinedAndNotNull(amount, "missing amount"); + return { + delegator_address: delegatorAddress, + validator_address: validatorAddress, + amount: amount, + }; + }, + fromAmino: ({ + delegator_address, + validator_address, + amount, + }: AminoMsgUndelegate["value"]): MsgUndelegate => ({ + delegatorAddress: delegator_address, + validatorAddress: validator_address, + amount: amount, + }), + }, + }; +} diff --git a/packages/stargate/src/signingstargateclient.spec.ts b/packages/stargate/src/signingstargateclient.spec.ts index 7a9108dc..1b600748 100644 --- a/packages/stargate/src/signingstargateclient.spec.ts +++ b/packages/stargate/src/signingstargateclient.spec.ts @@ -9,9 +9,8 @@ import { AuthInfo, TxBody, TxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx"; import Long from "long"; import protobuf from "protobufjs/minimal"; -import { AminoMsgDelegate } from "./aminomsgs"; import { AminoTypes } from "./aminotypes"; -import { MsgDelegateEncodeObject, MsgSendEncodeObject } from "./modules"; +import { AminoMsgDelegate, MsgDelegateEncodeObject, MsgSendEncodeObject } from "./modules"; import { PrivateSigningStargateClient, SigningStargateClient } from "./signingstargateclient"; import { assertIsDeliverTxFailure, assertIsDeliverTxSuccess, isDeliverTxFailure } from "./stargateclient"; import { From f98537cbc7854a71163b6dcd0a6884b27de6899b Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sun, 6 Mar 2022 14:14:55 +0100 Subject: [PATCH 5/8] Move remaining Amino messages to module folders --- packages/stargate/src/aminomsgs.ts | 63 ------------------- packages/stargate/src/index.ts | 14 ++--- .../src/modules/crisis/aminomessages.ts | 25 ++++++++ .../src/modules/evidence/aminomessages.ts | 29 +++++++++ packages/stargate/src/modules/index.ts | 11 ++++ .../src/modules/slashing/aminomessages.ts | 23 +++++++ 6 files changed, 94 insertions(+), 71 deletions(-) delete mode 100644 packages/stargate/src/aminomsgs.ts create mode 100644 packages/stargate/src/modules/crisis/aminomessages.ts create mode 100644 packages/stargate/src/modules/evidence/aminomessages.ts create mode 100644 packages/stargate/src/modules/slashing/aminomessages.ts diff --git a/packages/stargate/src/aminomsgs.ts b/packages/stargate/src/aminomsgs.ts deleted file mode 100644 index 05c0022c..00000000 --- a/packages/stargate/src/aminomsgs.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* eslint-disable @typescript-eslint/naming-convention */ -import { AminoMsg } from "@cosmjs/amino"; - -// crisis - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/crisis/crisis.proto - -/** Verifies a particular invariance */ -export interface AminoMsgVerifyInvariant extends AminoMsg { - readonly type: "cosmos-sdk/MsgVerifyInvariant"; - readonly value: { - /** Bech32 account address */ - readonly sender: string; - readonly invariant_module_name: string; - readonly invariant_route: string; - }; -} - -export function isAminoMsgVerifyInvariant(msg: AminoMsg): msg is AminoMsgVerifyInvariant { - return msg.type === "cosmos-sdk/MsgVerifyInvariant"; -} - -// distribution - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/distribution/distribution.proto - -// evidence - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/evidence/evidence.proto - -interface Any { - readonly type_url: string; - readonly value: Uint8Array; -} - -/** Supports submitting arbitrary evidence */ -export interface AminoMsgSubmitEvidence extends AminoMsg { - readonly type: "cosmos-sdk/MsgSubmitEvidence"; - readonly value: { - /** Bech32 account address */ - readonly submitter: string; - readonly evidence: Any; - }; -} - -export function isAminoMsgSubmitEvidence(msg: AminoMsg): msg is AminoMsgSubmitEvidence { - return msg.type === "cosmos-sdk/MsgSubmitEvidence"; -} - -// gov - https://github.com/cosmos/cosmos-sdk/blob/efa73c7edb31a7bd65786501da213b294f89267a/proto/cosmos/gov/gov.proto - -// mint (no messages) - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/mint/mint.proto - -// params (no messages) - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/params/params.proto - -// slashing - see https://github.com/cosmos/cosmos-sdk/blob/efa73c7/proto/cosmos/slashing/slashing.proto - -/** Unjails a jailed validator */ -export interface AminoMsgUnjail extends AminoMsg { - readonly type: "cosmos-sdk/MsgUnjail"; - readonly value: { - /** Bech32 account address */ - readonly validator_addr: string; - }; -} - -export function isAminoMsgUnjail(msg: AminoMsg): msg is AminoMsgUnjail { - return msg.type === "cosmos-sdk/MsgUnjail"; -} diff --git a/packages/stargate/src/index.ts b/packages/stargate/src/index.ts index 32f72bf3..519263b7 100644 --- a/packages/stargate/src/index.ts +++ b/packages/stargate/src/index.ts @@ -1,13 +1,5 @@ export { Account, accountFromAny } from "./accounts"; export { AminoConverter } from "./aminoconverters"; -export { - AminoMsgSubmitEvidence, - AminoMsgUnjail, - AminoMsgVerifyInvariant, - isAminoMsgSubmitEvidence, - isAminoMsgUnjail, - isAminoMsgVerifyInvariant, -} from "./aminomsgs"; export { AminoTypes, AminoTypesOptions } from "./aminotypes"; export { calculateFee, GasPrice } from "./fee"; export * as logs from "./logs"; @@ -21,8 +13,11 @@ export { AminoMsgMultiSend, AminoMsgSend, AminoMsgSetWithdrawAddress, + AminoMsgSubmitEvidence, AminoMsgSubmitProposal, AminoMsgUndelegate, + AminoMsgUnjail, + AminoMsgVerifyInvariant, AminoMsgVote, AminoMsgWithdrawDelegatorReward, AminoMsgWithdrawValidatorCommission, @@ -42,8 +37,11 @@ export { isAminoMsgMultiSend, isAminoMsgSend, isAminoMsgSetWithdrawAddress, + isAminoMsgSubmitEvidence, isAminoMsgSubmitProposal, isAminoMsgUndelegate, + isAminoMsgUnjail, + isAminoMsgVerifyInvariant, isAminoMsgVote, isAminoMsgWithdrawDelegatorReward, isAminoMsgWithdrawValidatorCommission, diff --git a/packages/stargate/src/modules/crisis/aminomessages.ts b/packages/stargate/src/modules/crisis/aminomessages.ts new file mode 100644 index 00000000..8e6a959d --- /dev/null +++ b/packages/stargate/src/modules/crisis/aminomessages.ts @@ -0,0 +1,25 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg } from "@cosmjs/amino"; + +import { AminoConverters } from "../../aminoconverters"; + +// See https://github.com/cosmos/cosmos-sdk/blob/v0.45.1/proto/cosmos/crisis/v1beta1/tx.proto + +/** Verifies a particular invariance */ +export interface AminoMsgVerifyInvariant extends AminoMsg { + readonly type: "cosmos-sdk/MsgVerifyInvariant"; + readonly value: { + /** Bech32 account address */ + readonly sender: string; + readonly invariant_module_name: string; + readonly invariant_route: string; + }; +} + +export function isAminoMsgVerifyInvariant(msg: AminoMsg): msg is AminoMsgVerifyInvariant { + return msg.type === "cosmos-sdk/MsgVerifyInvariant"; +} + +export function createCrysisAminoConverters(): AminoConverters { + throw new Error("Not implemented"); +} diff --git a/packages/stargate/src/modules/evidence/aminomessages.ts b/packages/stargate/src/modules/evidence/aminomessages.ts new file mode 100644 index 00000000..6aafcafa --- /dev/null +++ b/packages/stargate/src/modules/evidence/aminomessages.ts @@ -0,0 +1,29 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg } from "@cosmjs/amino"; + +import { AminoConverters } from "../../aminoconverters"; + +// See https://github.com/cosmos/cosmos-sdk/blob/v0.45.1/proto/cosmos/evidence/v1beta1/tx.proto + +interface Any { + readonly type_url: string; + readonly value: Uint8Array; +} + +/** Supports submitting arbitrary evidence */ +export interface AminoMsgSubmitEvidence extends AminoMsg { + readonly type: "cosmos-sdk/MsgSubmitEvidence"; + readonly value: { + /** Bech32 account address */ + readonly submitter: string; + readonly evidence: Any; + }; +} + +export function isAminoMsgSubmitEvidence(msg: AminoMsg): msg is AminoMsgSubmitEvidence { + return msg.type === "cosmos-sdk/MsgSubmitEvidence"; +} + +export function createEvidenceAminoConverters(): AminoConverters { + throw new Error("Not implemented"); +} diff --git a/packages/stargate/src/modules/index.ts b/packages/stargate/src/modules/index.ts index 6404bcd8..755fe9ef 100644 --- a/packages/stargate/src/modules/index.ts +++ b/packages/stargate/src/modules/index.ts @@ -10,6 +10,11 @@ export { } from "./bank/aminomessages"; export { bankTypes, isMsgSendEncodeObject, MsgSendEncodeObject } from "./bank/messages"; export { BankExtension, setupBankExtension } from "./bank/queries"; +export { + AminoMsgVerifyInvariant, + createCrysisAminoConverters, + isAminoMsgVerifyInvariant, +} from "./crisis/aminomessages"; export { AminoMsgFundCommunityPool, AminoMsgSetWithdrawAddress, @@ -27,6 +32,11 @@ export { MsgWithdrawDelegatorRewardEncodeObject, } from "./distribution/messages"; export { DistributionExtension, setupDistributionExtension } from "./distribution/queries"; +export { + AminoMsgSubmitEvidence, + createEvidenceAminoConverters, + isAminoMsgSubmitEvidence, +} from "./evidence/aminomessages"; export { createFreegrantAminoConverters } from "./feegrant/aminomessages"; export { feegrantTypes } from "./feegrant/messages"; export { @@ -52,6 +62,7 @@ export { AminoMsgTransfer, createIbcAminoConverters, isAminoMsgTransfer } from " export { ibcTypes, isMsgTransferEncodeObject, MsgTransferEncodeObject } from "./ibc/messages"; export { IbcExtension, setupIbcExtension } from "./ibc/queries"; export { MintExtension, MintParams, setupMintExtension } from "./mint/queries"; +export { AminoMsgUnjail, createSlashingAminoConverters, isAminoMsgUnjail } from "./slashing/aminomessages"; export { setupSlashingExtension, SlashingExtension } from "./slashing/queries"; export { AminoMsgBeginRedelegate, diff --git a/packages/stargate/src/modules/slashing/aminomessages.ts b/packages/stargate/src/modules/slashing/aminomessages.ts new file mode 100644 index 00000000..5cbe7dd9 --- /dev/null +++ b/packages/stargate/src/modules/slashing/aminomessages.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AminoMsg } from "@cosmjs/amino"; + +import { AminoConverters } from "../../aminoconverters"; + +// See https://github.com/cosmos/cosmos-sdk/blob/v0.45.1/proto/cosmos/slashing/v1beta1/tx.proto + +/** Unjails a jailed validator */ +export interface AminoMsgUnjail extends AminoMsg { + readonly type: "cosmos-sdk/MsgUnjail"; + readonly value: { + /** Bech32 account address */ + readonly validator_addr: string; + }; +} + +export function isAminoMsgUnjail(msg: AminoMsg): msg is AminoMsgUnjail { + return msg.type === "cosmos-sdk/MsgUnjail"; +} + +export function createSlashingAminoConverters(): AminoConverters { + throw new Error("Not implemented"); +} From e5d9b6397b1b9c441fc40d58215ee285223354d1 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sun, 6 Mar 2022 17:14:35 +0100 Subject: [PATCH 6/8] Move wasm queries to modules/wasm folder --- packages/cosmwasm-stargate/src/cosmwasmclient.ts | 2 +- packages/cosmwasm-stargate/src/index.ts | 2 +- .../cosmwasm-stargate/src/{queries => modules}/index.ts | 2 +- .../{queries/wasm.spec.ts => modules/wasm/queries.spec.ts} | 6 +++--- .../src/{queries/wasm.ts => modules/wasm/queries.ts} | 0 packages/cosmwasm-stargate/src/testutils.spec.ts | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) rename packages/cosmwasm-stargate/src/{queries => modules}/index.ts (80%) rename packages/cosmwasm-stargate/src/{queries/wasm.spec.ts => modules/wasm/queries.spec.ts} (99%) rename packages/cosmwasm-stargate/src/{queries/wasm.ts => modules/wasm/queries.ts} (100%) diff --git a/packages/cosmwasm-stargate/src/cosmwasmclient.ts b/packages/cosmwasm-stargate/src/cosmwasmclient.ts index 2960852d..c1a39ed2 100644 --- a/packages/cosmwasm-stargate/src/cosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/cosmwasmclient.ts @@ -28,7 +28,7 @@ import { assert, sleep } from "@cosmjs/utils"; import { CodeInfoResponse } from "cosmjs-types/cosmwasm/wasm/v1/query"; import { ContractCodeHistoryOperationType } from "cosmjs-types/cosmwasm/wasm/v1/types"; -import { JsonObject, setupWasmExtension, WasmExtension } from "./queries"; +import { JsonObject, setupWasmExtension, WasmExtension } from "./modules"; export interface Code { readonly id: number; diff --git a/packages/cosmwasm-stargate/src/index.ts b/packages/cosmwasm-stargate/src/index.ts index ec6c4d82..5f401986 100644 --- a/packages/cosmwasm-stargate/src/index.ts +++ b/packages/cosmwasm-stargate/src/index.ts @@ -15,7 +15,7 @@ export { MsgUpdateAdminEncodeObject, } from "./encodeobjects"; export { fromBinary, toBinary } from "./encoding"; -export { JsonObject, setupWasmExtension, WasmExtension } from "./queries"; +export { JsonObject, setupWasmExtension, WasmExtension } from "./modules"; export { ChangeAdminResult, ExecuteResult, diff --git a/packages/cosmwasm-stargate/src/queries/index.ts b/packages/cosmwasm-stargate/src/modules/index.ts similarity index 80% rename from packages/cosmwasm-stargate/src/queries/index.ts rename to packages/cosmwasm-stargate/src/modules/index.ts index 2d007f6d..226838dc 100644 --- a/packages/cosmwasm-stargate/src/queries/index.ts +++ b/packages/cosmwasm-stargate/src/modules/index.ts @@ -1 +1 @@ -export { JsonObject, setupWasmExtension, WasmExtension } from "./wasm"; +export { JsonObject, setupWasmExtension, WasmExtension } from "./wasm/queries"; diff --git a/packages/cosmwasm-stargate/src/queries/wasm.spec.ts b/packages/cosmwasm-stargate/src/modules/wasm/queries.spec.ts similarity index 99% rename from packages/cosmwasm-stargate/src/queries/wasm.spec.ts rename to packages/cosmwasm-stargate/src/modules/wasm/queries.spec.ts index ef7c716b..d374c951 100644 --- a/packages/cosmwasm-stargate/src/queries/wasm.spec.ts +++ b/packages/cosmwasm-stargate/src/modules/wasm/queries.spec.ts @@ -20,8 +20,8 @@ import { MsgExecuteContractEncodeObject, MsgInstantiateContractEncodeObject, MsgStoreCodeEncodeObject, -} from "../encodeobjects"; -import { SigningCosmWasmClient } from "../signingcosmwasmclient"; +} from "../../encodeobjects"; +import { SigningCosmWasmClient } from "../../signingcosmwasmclient"; import { alice, bech32AddressMatcher, @@ -33,7 +33,7 @@ import { pendingWithoutWasmd, wasmd, wasmdEnabled, -} from "../testutils.spec"; +} from "../../testutils.spec"; const registry = new Registry([ ["/cosmwasm.wasm.v1.MsgExecuteContract", MsgExecuteContract], diff --git a/packages/cosmwasm-stargate/src/queries/wasm.ts b/packages/cosmwasm-stargate/src/modules/wasm/queries.ts similarity index 100% rename from packages/cosmwasm-stargate/src/queries/wasm.ts rename to packages/cosmwasm-stargate/src/modules/wasm/queries.ts diff --git a/packages/cosmwasm-stargate/src/testutils.spec.ts b/packages/cosmwasm-stargate/src/testutils.spec.ts index 8713397e..ca5f4790 100644 --- a/packages/cosmwasm-stargate/src/testutils.spec.ts +++ b/packages/cosmwasm-stargate/src/testutils.spec.ts @@ -22,7 +22,7 @@ import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; import { SignMode } from "cosmjs-types/cosmos/tx/signing/v1beta1/signing"; import { AuthInfo, SignDoc, TxBody } from "cosmjs-types/cosmos/tx/v1beta1/tx"; -import { setupWasmExtension, WasmExtension } from "./queries"; +import { setupWasmExtension, WasmExtension } from "./modules"; import { SigningCosmWasmClientOptions } from "./signingcosmwasmclient"; import hackatom from "./testdata/contract.json"; From 248e7f3df3a05819f7c83eaba3756c6c83124649 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sun, 6 Mar 2022 17:24:14 +0100 Subject: [PATCH 7/8] Move messages to ./wasm/messages --- .../cosmwasm-stargate/src/encodeobjects.ts | 78 ------------------- packages/cosmwasm-stargate/src/index.ts | 8 +- .../cosmwasm-stargate/src/modules/index.ts | 15 ++++ .../src/modules/wasm/messages.ts | 76 ++++++++++++++++++ .../src/modules/wasm/queries.spec.ts | 17 ++-- .../src/signingcosmwasmclient.spec.ts | 2 +- .../src/signingcosmwasmclient.ts | 12 +-- 7 files changed, 107 insertions(+), 101 deletions(-) delete mode 100644 packages/cosmwasm-stargate/src/encodeobjects.ts create mode 100644 packages/cosmwasm-stargate/src/modules/wasm/messages.ts diff --git a/packages/cosmwasm-stargate/src/encodeobjects.ts b/packages/cosmwasm-stargate/src/encodeobjects.ts deleted file mode 100644 index 4f613568..00000000 --- a/packages/cosmwasm-stargate/src/encodeobjects.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { EncodeObject } from "@cosmjs/proto-signing"; -import { - MsgClearAdmin, - MsgExecuteContract, - MsgInstantiateContract, - MsgMigrateContract, - MsgStoreCode, - MsgUpdateAdmin, -} from "cosmjs-types/cosmwasm/wasm/v1/tx"; - -export interface MsgStoreCodeEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmwasm.wasm.v1.MsgStoreCode"; - readonly value: Partial; -} - -export function isMsgStoreCodeEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgStoreCodeEncodeObject { - return (encodeObject as MsgStoreCodeEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgStoreCode"; -} - -export interface MsgInstantiateContractEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract"; - readonly value: Partial; -} - -export function isMsgInstantiateContractEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgInstantiateContractEncodeObject { - return ( - (encodeObject as MsgInstantiateContractEncodeObject).typeUrl === - "/cosmwasm.wasm.v1.MsgInstantiateContract" - ); -} - -export interface MsgUpdateAdminEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmwasm.wasm.v1.MsgUpdateAdmin"; - readonly value: Partial; -} - -export function isMsgUpdateAdminEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgUpdateAdminEncodeObject { - return (encodeObject as MsgUpdateAdminEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgUpdateAdmin"; -} - -export interface MsgClearAdminEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmwasm.wasm.v1.MsgClearAdmin"; - readonly value: Partial; -} - -export function isMsgClearAdminEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgClearAdminEncodeObject { - return (encodeObject as MsgClearAdminEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgClearAdmin"; -} - -export interface MsgMigrateContractEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmwasm.wasm.v1.MsgMigrateContract"; - readonly value: Partial; -} - -export function isMsgMigrateEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgMigrateContractEncodeObject { - return (encodeObject as MsgMigrateContractEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgMigrateContract"; -} - -export interface MsgExecuteContractEncodeObject extends EncodeObject { - readonly typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract"; - readonly value: Partial; -} - -export function isMsgExecuteEncodeObject( - encodeObject: EncodeObject, -): encodeObject is MsgExecuteContractEncodeObject { - return (encodeObject as MsgExecuteContractEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgExecuteContract"; -} diff --git a/packages/cosmwasm-stargate/src/index.ts b/packages/cosmwasm-stargate/src/index.ts index 5f401986..a560f6c3 100644 --- a/packages/cosmwasm-stargate/src/index.ts +++ b/packages/cosmwasm-stargate/src/index.ts @@ -1,5 +1,6 @@ export { cosmWasmTypes } from "./aminotypes"; export { Code, CodeDetails, Contract, ContractCodeHistoryEntry, CosmWasmClient } from "./cosmwasmclient"; +export { fromBinary, toBinary } from "./encoding"; export { isMsgClearAdminEncodeObject, isMsgExecuteEncodeObject, @@ -7,15 +8,16 @@ export { isMsgMigrateEncodeObject, isMsgStoreCodeEncodeObject, isMsgUpdateAdminEncodeObject, + JsonObject, MsgClearAdminEncodeObject, MsgExecuteContractEncodeObject, MsgInstantiateContractEncodeObject, MsgMigrateContractEncodeObject, MsgStoreCodeEncodeObject, MsgUpdateAdminEncodeObject, -} from "./encodeobjects"; -export { fromBinary, toBinary } from "./encoding"; -export { JsonObject, setupWasmExtension, WasmExtension } from "./modules"; + setupWasmExtension, + WasmExtension, +} from "./modules"; export { ChangeAdminResult, ExecuteResult, diff --git a/packages/cosmwasm-stargate/src/modules/index.ts b/packages/cosmwasm-stargate/src/modules/index.ts index 226838dc..c15432af 100644 --- a/packages/cosmwasm-stargate/src/modules/index.ts +++ b/packages/cosmwasm-stargate/src/modules/index.ts @@ -1 +1,16 @@ +export { + isMsgClearAdminEncodeObject, + isMsgExecuteEncodeObject, + isMsgInstantiateContractEncodeObject, + isMsgMigrateEncodeObject, + isMsgStoreCodeEncodeObject, + isMsgUpdateAdminEncodeObject, + MsgClearAdminEncodeObject, + MsgExecuteContractEncodeObject, + MsgInstantiateContractEncodeObject, + MsgMigrateContractEncodeObject, + MsgStoreCodeEncodeObject, + MsgUpdateAdminEncodeObject, + wasmTypes, +} from "./wasm/messages"; export { JsonObject, setupWasmExtension, WasmExtension } from "./wasm/queries"; diff --git a/packages/cosmwasm-stargate/src/modules/wasm/messages.ts b/packages/cosmwasm-stargate/src/modules/wasm/messages.ts new file mode 100644 index 00000000..e9a1ea02 --- /dev/null +++ b/packages/cosmwasm-stargate/src/modules/wasm/messages.ts @@ -0,0 +1,76 @@ +import { EncodeObject, GeneratedType } from "@cosmjs/proto-signing"; +import { + MsgClearAdmin, + MsgExecuteContract, + MsgInstantiateContract, + MsgMigrateContract, + MsgStoreCode, + MsgUpdateAdmin, +} from "cosmjs-types/cosmwasm/wasm/v1/tx"; + +export const wasmTypes: ReadonlyArray<[string, GeneratedType]> = [ + ["/cosmwasm.wasm.v1.MsgClearAdmin", MsgClearAdmin], + ["/cosmwasm.wasm.v1.MsgExecuteContract", MsgExecuteContract], + ["/cosmwasm.wasm.v1.MsgMigrateContract", MsgMigrateContract], + ["/cosmwasm.wasm.v1.MsgStoreCode", MsgStoreCode], + ["/cosmwasm.wasm.v1.MsgInstantiateContract", MsgInstantiateContract], + ["/cosmwasm.wasm.v1.MsgUpdateAdmin", MsgUpdateAdmin], +]; + +export interface MsgStoreCodeEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmwasm.wasm.v1.MsgStoreCode"; + readonly value: Partial; +} + +export function isMsgStoreCodeEncodeObject(object: EncodeObject): object is MsgStoreCodeEncodeObject { + return (object as MsgStoreCodeEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgStoreCode"; +} + +export interface MsgInstantiateContractEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract"; + readonly value: Partial; +} + +export function isMsgInstantiateContractEncodeObject( + object: EncodeObject, +): object is MsgInstantiateContractEncodeObject { + return ( + (object as MsgInstantiateContractEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgInstantiateContract" + ); +} + +export interface MsgUpdateAdminEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmwasm.wasm.v1.MsgUpdateAdmin"; + readonly value: Partial; +} + +export function isMsgUpdateAdminEncodeObject(object: EncodeObject): object is MsgUpdateAdminEncodeObject { + return (object as MsgUpdateAdminEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgUpdateAdmin"; +} + +export interface MsgClearAdminEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmwasm.wasm.v1.MsgClearAdmin"; + readonly value: Partial; +} + +export function isMsgClearAdminEncodeObject(object: EncodeObject): object is MsgClearAdminEncodeObject { + return (object as MsgClearAdminEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgClearAdmin"; +} + +export interface MsgMigrateContractEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmwasm.wasm.v1.MsgMigrateContract"; + readonly value: Partial; +} + +export function isMsgMigrateEncodeObject(object: EncodeObject): object is MsgMigrateContractEncodeObject { + return (object as MsgMigrateContractEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgMigrateContract"; +} + +export interface MsgExecuteContractEncodeObject extends EncodeObject { + readonly typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract"; + readonly value: Partial; +} + +export function isMsgExecuteEncodeObject(object: EncodeObject): object is MsgExecuteContractEncodeObject { + return (object as MsgExecuteContractEncodeObject).typeUrl === "/cosmwasm.wasm.v1.MsgExecuteContract"; +} diff --git a/packages/cosmwasm-stargate/src/modules/wasm/queries.spec.ts b/packages/cosmwasm-stargate/src/modules/wasm/queries.spec.ts index d374c951..7accd995 100644 --- a/packages/cosmwasm-stargate/src/modules/wasm/queries.spec.ts +++ b/packages/cosmwasm-stargate/src/modules/wasm/queries.spec.ts @@ -16,11 +16,6 @@ import { MsgExecuteContract, MsgInstantiateContract, MsgStoreCode } from "cosmjs import { ContractCodeHistoryOperationType } from "cosmjs-types/cosmwasm/wasm/v1/types"; import Long from "long"; -import { - MsgExecuteContractEncodeObject, - MsgInstantiateContractEncodeObject, - MsgStoreCodeEncodeObject, -} from "../../encodeobjects"; import { SigningCosmWasmClient } from "../../signingcosmwasmclient"; import { alice, @@ -34,12 +29,14 @@ import { wasmd, wasmdEnabled, } from "../../testutils.spec"; +import { + MsgExecuteContractEncodeObject, + MsgInstantiateContractEncodeObject, + MsgStoreCodeEncodeObject, + wasmTypes, +} from "./messages"; -const registry = new Registry([ - ["/cosmwasm.wasm.v1.MsgExecuteContract", MsgExecuteContract], - ["/cosmwasm.wasm.v1.MsgStoreCode", MsgStoreCode], - ["/cosmwasm.wasm.v1.MsgInstantiateContract", MsgInstantiateContract], -]); +const registry = new Registry(wasmTypes); async function uploadContract( signer: OfflineDirectSigner, diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index 9d9ad47f..3b61b55a 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -22,7 +22,7 @@ import Long from "long"; import pako from "pako"; import protobuf from "protobufjs/minimal"; -import { MsgExecuteContractEncodeObject, MsgStoreCodeEncodeObject } from "./encodeobjects"; +import { MsgExecuteContractEncodeObject, MsgStoreCodeEncodeObject } from "./modules"; import { SigningCosmWasmClient } from "./signingcosmwasmclient"; import { alice, diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts index 4ea3c3f8..c43d04c7 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts @@ -55,7 +55,8 @@ import { MsgMigrateContractEncodeObject, MsgStoreCodeEncodeObject, MsgUpdateAdminEncodeObject, -} from "./encodeobjects"; + wasmTypes, +} from "./modules"; export interface UploadResult { /** Size of the original wasm code in bytes */ @@ -148,14 +149,7 @@ function createDeliverTxResponseErrorMessage(result: DeliverTxResponse): string } function createDefaultRegistry(): Registry { - const registry = new Registry(defaultStargateTypes); - registry.register("/cosmwasm.wasm.v1.MsgClearAdmin", MsgClearAdmin); - registry.register("/cosmwasm.wasm.v1.MsgExecuteContract", MsgExecuteContract); - registry.register("/cosmwasm.wasm.v1.MsgMigrateContract", MsgMigrateContract); - registry.register("/cosmwasm.wasm.v1.MsgStoreCode", MsgStoreCode); - registry.register("/cosmwasm.wasm.v1.MsgInstantiateContract", MsgInstantiateContract); - registry.register("/cosmwasm.wasm.v1.MsgUpdateAdmin", MsgUpdateAdmin); - return registry; + return new Registry([...defaultStargateTypes, ...wasmTypes]); } export interface SigningCosmWasmClientOptions { From 97b8761f712e24dbb5e806e0715e5a4471a0a87f Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sun, 6 Mar 2022 19:32:57 +0100 Subject: [PATCH 8/8] Move wasm aminotypes to modules/wasm/aminomessages --- packages/cosmwasm-stargate/src/aminotypes.ts | 232 ----------------- packages/cosmwasm-stargate/src/index.ts | 3 +- .../cosmwasm-stargate/src/modules/index.ts | 10 + .../wasm/aminomessages.spec.ts} | 62 +++-- .../src/modules/wasm/aminomessages.ts | 242 ++++++++++++++++++ .../src/signingcosmwasmclient.ts | 4 +- packages/stargate/src/index.ts | 2 +- 7 files changed, 297 insertions(+), 258 deletions(-) delete mode 100644 packages/cosmwasm-stargate/src/aminotypes.ts rename packages/cosmwasm-stargate/src/{aminotypes.spec.ts => modules/wasm/aminomessages.spec.ts} (91%) create mode 100644 packages/cosmwasm-stargate/src/modules/wasm/aminomessages.ts diff --git a/packages/cosmwasm-stargate/src/aminotypes.ts b/packages/cosmwasm-stargate/src/aminotypes.ts deleted file mode 100644 index b9aa88da..00000000 --- a/packages/cosmwasm-stargate/src/aminotypes.ts +++ /dev/null @@ -1,232 +0,0 @@ -/* eslint-disable @typescript-eslint/naming-convention */ -import { fromBase64, fromUtf8, toBase64, toUtf8 } from "@cosmjs/encoding"; -import { AminoConverter, Coin } from "@cosmjs/stargate"; -import { - MsgClearAdmin, - MsgExecuteContract, - MsgInstantiateContract, - MsgMigrateContract, - MsgStoreCode, - MsgUpdateAdmin, -} from "cosmjs-types/cosmwasm/wasm/v1/tx"; -import Long from "long"; - -// TODO: implement -/** - * @see https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/types.proto#L36-L41 - */ -type AccessConfig = never; - -/** - * The Amino JSON representation of [MsgStoreCode]. - * - * [MsgStoreCode]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L28-L39 - */ -export interface AminoMsgStoreCode { - type: "wasm/MsgStoreCode"; - value: { - /** Bech32 account address */ - readonly sender: string; - /** Base64 encoded Wasm */ - readonly wasm_byte_code: string; - readonly instantiate_permission?: AccessConfig; - }; -} - -/** - * The Amino JSON representation of [MsgExecuteContract]. - * - * [MsgExecuteContract]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L73-L86 - */ -export interface AminoMsgExecuteContract { - type: "wasm/MsgExecuteContract"; - value: { - /** Bech32 account address */ - readonly sender: string; - /** Bech32 account address */ - readonly contract: string; - /** Execute message as JavaScript object */ - readonly msg: any; - readonly funds: readonly Coin[]; - }; -} - -/** - * The Amino JSON representation of [MsgInstantiateContract]. - * - * [MsgInstantiateContract]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L46-L64 - */ -export interface AminoMsgInstantiateContract { - type: "wasm/MsgInstantiateContract"; - value: { - /** Bech32 account address */ - readonly sender: string; - /** ID of the Wasm code that was uploaded before */ - readonly code_id: string; - /** Human-readable label for this contract */ - readonly label: string; - /** Instantiate message as JavaScript object */ - readonly msg: any; - readonly funds: readonly Coin[]; - /** Bech32-encoded admin address */ - readonly admin?: string; - }; -} - -/** - * The Amino JSON representation of [MsgMigrateContract]. - * - * [MsgMigrateContract]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L94-L104 - */ -export interface AminoMsgMigrateContract { - type: "wasm/MsgMigrateContract"; - value: { - /** Bech32 account address */ - readonly sender: string; - /** Bech32 account address */ - readonly contract: string; - /** The new code */ - readonly code_id: string; - /** Migrate message as JavaScript object */ - readonly msg: any; - }; -} - -/** - * The Amino JSON representation of [MsgUpdateAdmin]. - * - * [MsgUpdateAdmin]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L113-L121 - */ -export interface AminoMsgUpdateAdmin { - type: "wasm/MsgUpdateAdmin"; - value: { - /** Bech32-encoded sender address. This must be the old admin. */ - readonly sender: string; - /** Bech32-encoded contract address to be updated */ - readonly contract: string; - /** Bech32-encoded address of the new admin */ - readonly new_admin: string; - }; -} - -/** - * The Amino JSON representation of [MsgClearAdmin]. - * - * [MsgClearAdmin]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L126-L132 - */ -export interface AminoMsgClearAdmin { - type: "wasm/MsgClearAdmin"; - value: { - /** Bech32-encoded sender address. This must be the old admin. */ - readonly sender: string; - /** Bech32-encoded contract address to be updated */ - readonly contract: string; - }; -} - -export const cosmWasmTypes: Record = { - "/cosmwasm.wasm.v1.MsgStoreCode": { - aminoType: "wasm/MsgStoreCode", - toAmino: ({ sender, wasmByteCode }: MsgStoreCode): AminoMsgStoreCode["value"] => ({ - sender: sender, - wasm_byte_code: toBase64(wasmByteCode), - }), - fromAmino: ({ sender, wasm_byte_code }: AminoMsgStoreCode["value"]): MsgStoreCode => ({ - sender: sender, - wasmByteCode: fromBase64(wasm_byte_code), - instantiatePermission: undefined, - }), - }, - "/cosmwasm.wasm.v1.MsgInstantiateContract": { - aminoType: "wasm/MsgInstantiateContract", - toAmino: ({ - sender, - codeId, - label, - msg, - funds, - admin, - }: MsgInstantiateContract): AminoMsgInstantiateContract["value"] => ({ - sender: sender, - code_id: codeId.toString(), - label: label, - msg: JSON.parse(fromUtf8(msg)), - funds: funds, - admin: admin || undefined, - }), - fromAmino: ({ - sender, - code_id, - label, - msg, - funds, - admin, - }: AminoMsgInstantiateContract["value"]): MsgInstantiateContract => ({ - sender: sender, - codeId: Long.fromString(code_id), - label: label, - msg: toUtf8(JSON.stringify(msg)), - funds: [...funds], - admin: admin ?? "", - }), - }, - "/cosmwasm.wasm.v1.MsgUpdateAdmin": { - aminoType: "wasm/MsgUpdateAdmin", - toAmino: ({ sender, newAdmin, contract }: MsgUpdateAdmin): AminoMsgUpdateAdmin["value"] => ({ - sender: sender, - new_admin: newAdmin, - contract: contract, - }), - fromAmino: ({ sender, new_admin, contract }: AminoMsgUpdateAdmin["value"]): MsgUpdateAdmin => ({ - sender: sender, - newAdmin: new_admin, - contract: contract, - }), - }, - "/cosmwasm.wasm.v1.MsgClearAdmin": { - aminoType: "wasm/MsgClearAdmin", - toAmino: ({ sender, contract }: MsgClearAdmin): AminoMsgClearAdmin["value"] => ({ - sender: sender, - contract: contract, - }), - fromAmino: ({ sender, contract }: AminoMsgClearAdmin["value"]): MsgClearAdmin => ({ - sender: sender, - contract: contract, - }), - }, - "/cosmwasm.wasm.v1.MsgExecuteContract": { - aminoType: "wasm/MsgExecuteContract", - toAmino: ({ sender, contract, msg, funds }: MsgExecuteContract): AminoMsgExecuteContract["value"] => ({ - sender: sender, - contract: contract, - msg: JSON.parse(fromUtf8(msg)), - funds: funds, - }), - fromAmino: ({ sender, contract, msg, funds }: AminoMsgExecuteContract["value"]): MsgExecuteContract => ({ - sender: sender, - contract: contract, - msg: toUtf8(JSON.stringify(msg)), - funds: [...funds], - }), - }, - "/cosmwasm.wasm.v1.MsgMigrateContract": { - aminoType: "wasm/MsgMigrateContract", - toAmino: ({ sender, contract, codeId, msg }: MsgMigrateContract): AminoMsgMigrateContract["value"] => ({ - sender: sender, - contract: contract, - code_id: codeId.toString(), - msg: JSON.parse(fromUtf8(msg)), - }), - fromAmino: ({ - sender, - contract, - code_id, - msg, - }: AminoMsgMigrateContract["value"]): MsgMigrateContract => ({ - sender: sender, - contract: contract, - codeId: Long.fromString(code_id), - msg: toUtf8(JSON.stringify(msg)), - }), - }, -}; diff --git a/packages/cosmwasm-stargate/src/index.ts b/packages/cosmwasm-stargate/src/index.ts index a560f6c3..91ab2f30 100644 --- a/packages/cosmwasm-stargate/src/index.ts +++ b/packages/cosmwasm-stargate/src/index.ts @@ -1,7 +1,8 @@ -export { cosmWasmTypes } from "./aminotypes"; export { Code, CodeDetails, Contract, ContractCodeHistoryEntry, CosmWasmClient } from "./cosmwasmclient"; export { fromBinary, toBinary } from "./encoding"; export { + cosmWasmTypes, + createWasmAminoConverters, isMsgClearAdminEncodeObject, isMsgExecuteEncodeObject, isMsgInstantiateContractEncodeObject, diff --git a/packages/cosmwasm-stargate/src/modules/index.ts b/packages/cosmwasm-stargate/src/modules/index.ts index c15432af..7ae68425 100644 --- a/packages/cosmwasm-stargate/src/modules/index.ts +++ b/packages/cosmwasm-stargate/src/modules/index.ts @@ -1,3 +1,13 @@ +export { + AminoMsgClearAdmin, + AminoMsgExecuteContract, + AminoMsgInstantiateContract, + AminoMsgMigrateContract, + AminoMsgStoreCode, + AminoMsgUpdateAdmin, + cosmWasmTypes, + createWasmAminoConverters, +} from "./wasm/aminomessages"; export { isMsgClearAdminEncodeObject, isMsgExecuteEncodeObject, diff --git a/packages/cosmwasm-stargate/src/aminotypes.spec.ts b/packages/cosmwasm-stargate/src/modules/wasm/aminomessages.spec.ts similarity index 91% rename from packages/cosmwasm-stargate/src/aminotypes.spec.ts rename to packages/cosmwasm-stargate/src/modules/wasm/aminomessages.spec.ts index 6e92eb72..476519b7 100644 --- a/packages/cosmwasm-stargate/src/aminotypes.spec.ts +++ b/packages/cosmwasm-stargate/src/modules/wasm/aminomessages.spec.ts @@ -18,8 +18,8 @@ import { AminoMsgMigrateContract, AminoMsgStoreCode, AminoMsgUpdateAdmin, - cosmWasmTypes, -} from "./aminotypes"; + createWasmAminoConverters, +} from "./aminomessages"; describe("AminoTypes", () => { describe("toAmino", () => { @@ -29,7 +29,7 @@ describe("AminoTypes", () => { wasmByteCode: fromBase64("WUVMTE9XIFNVQk1BUklORQ=="), instantiatePermission: undefined, }; - const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).toAmino({ + const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).toAmino({ typeUrl: "/cosmwasm.wasm.v1.MsgStoreCode", value: msg, }); @@ -54,10 +54,12 @@ describe("AminoTypes", () => { funds: coins(1234, "ucosm"), admin: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5", }; - const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).toAmino({ - typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract", - value: msg, - }); + const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).toAmino( + { + typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract", + value: msg, + }, + ); const expected: AminoMsgInstantiateContract = { type: "wasm/MsgInstantiateContract", value: { @@ -82,10 +84,12 @@ describe("AminoTypes", () => { funds: coins(1234, "ucosm"), admin: "", }; - const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).toAmino({ - typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract", - value: msg, - }); + const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).toAmino( + { + typeUrl: "/cosmwasm.wasm.v1.MsgInstantiateContract", + value: msg, + }, + ); const expected: AminoMsgInstantiateContract = { type: "wasm/MsgInstantiateContract", value: { @@ -107,7 +111,7 @@ describe("AminoTypes", () => { newAdmin: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5", contract: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k", }; - const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).toAmino({ + const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).toAmino({ typeUrl: "/cosmwasm.wasm.v1.MsgUpdateAdmin", value: msg, }); @@ -127,7 +131,7 @@ describe("AminoTypes", () => { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", contract: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k", }; - const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).toAmino({ + const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).toAmino({ typeUrl: "/cosmwasm.wasm.v1.MsgClearAdmin", value: msg, }); @@ -148,7 +152,7 @@ describe("AminoTypes", () => { msg: toUtf8(`{"foo":"bar"}`), funds: coins(1234, "ucosm"), }; - const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).toAmino({ + const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).toAmino({ typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract", value: msg, }); @@ -171,7 +175,7 @@ describe("AminoTypes", () => { codeId: Long.fromString("98765"), msg: toUtf8(`{"foo":"bar"}`), }; - const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).toAmino({ + const aminoMsg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).toAmino({ typeUrl: "/cosmwasm.wasm.v1.MsgMigrateContract", value: msg, }); @@ -197,7 +201,9 @@ describe("AminoTypes", () => { wasm_byte_code: "WUVMTE9XIFNVQk1BUklORQ==", }, }; - const msg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).fromAmino(aminoMsg); + const msg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).fromAmino( + aminoMsg, + ); const expectedValue: MsgStoreCode = { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", wasmByteCode: fromBase64("WUVMTE9XIFNVQk1BUklORQ=="), @@ -223,7 +229,9 @@ describe("AminoTypes", () => { admin: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5", }, }; - const msg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).fromAmino(aminoMsg); + const msg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).fromAmino( + aminoMsg, + ); const expectedValue: MsgInstantiateContract = { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", codeId: Long.fromString("12345"), @@ -250,7 +258,9 @@ describe("AminoTypes", () => { funds: coins(1234, "ucosm"), }, }; - const msg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).fromAmino(aminoMsg); + const msg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).fromAmino( + aminoMsg, + ); const expectedValue: MsgInstantiateContract = { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", codeId: Long.fromString("12345"), @@ -275,7 +285,9 @@ describe("AminoTypes", () => { contract: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k", }, }; - const msg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).fromAmino(aminoMsg); + const msg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).fromAmino( + aminoMsg, + ); const expectedValue: MsgUpdateAdmin = { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", newAdmin: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5", @@ -295,7 +307,9 @@ describe("AminoTypes", () => { contract: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k", }, }; - const msg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).fromAmino(aminoMsg); + const msg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).fromAmino( + aminoMsg, + ); const expectedValue: MsgClearAdmin = { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", contract: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k", @@ -316,7 +330,9 @@ describe("AminoTypes", () => { funds: coins(1234, "ucosm"), }, }; - const msg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).fromAmino(aminoMsg); + const msg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).fromAmino( + aminoMsg, + ); const expectedValue: MsgExecuteContract = { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", contract: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k", @@ -339,7 +355,9 @@ describe("AminoTypes", () => { msg: { foo: "bar" }, }, }; - const msg = new AminoTypes({ prefix: "cosmos", additions: cosmWasmTypes }).fromAmino(aminoMsg); + const msg = new AminoTypes({ prefix: "cosmos", additions: createWasmAminoConverters() }).fromAmino( + aminoMsg, + ); const expectedValue: MsgMigrateContract = { sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", contract: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k", diff --git a/packages/cosmwasm-stargate/src/modules/wasm/aminomessages.ts b/packages/cosmwasm-stargate/src/modules/wasm/aminomessages.ts new file mode 100644 index 00000000..5ba5cac9 --- /dev/null +++ b/packages/cosmwasm-stargate/src/modules/wasm/aminomessages.ts @@ -0,0 +1,242 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { fromBase64, fromUtf8, toBase64, toUtf8 } from "@cosmjs/encoding"; +import { AminoConverters, Coin } from "@cosmjs/stargate"; +import { + MsgClearAdmin, + MsgExecuteContract, + MsgInstantiateContract, + MsgMigrateContract, + MsgStoreCode, + MsgUpdateAdmin, +} from "cosmjs-types/cosmwasm/wasm/v1/tx"; +import Long from "long"; + +// TODO: implement +/** + * @see https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/types.proto#L36-L41 + */ +type AccessConfig = never; + +/** + * The Amino JSON representation of [MsgStoreCode]. + * + * [MsgStoreCode]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L28-L39 + */ +export interface AminoMsgStoreCode { + type: "wasm/MsgStoreCode"; + value: { + /** Bech32 account address */ + readonly sender: string; + /** Base64 encoded Wasm */ + readonly wasm_byte_code: string; + readonly instantiate_permission?: AccessConfig; + }; +} + +/** + * The Amino JSON representation of [MsgExecuteContract]. + * + * [MsgExecuteContract]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L73-L86 + */ +export interface AminoMsgExecuteContract { + type: "wasm/MsgExecuteContract"; + value: { + /** Bech32 account address */ + readonly sender: string; + /** Bech32 account address */ + readonly contract: string; + /** Execute message as JavaScript object */ + readonly msg: any; + readonly funds: readonly Coin[]; + }; +} + +/** + * The Amino JSON representation of [MsgInstantiateContract]. + * + * [MsgInstantiateContract]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L46-L64 + */ +export interface AminoMsgInstantiateContract { + type: "wasm/MsgInstantiateContract"; + value: { + /** Bech32 account address */ + readonly sender: string; + /** ID of the Wasm code that was uploaded before */ + readonly code_id: string; + /** Human-readable label for this contract */ + readonly label: string; + /** Instantiate message as JavaScript object */ + readonly msg: any; + readonly funds: readonly Coin[]; + /** Bech32-encoded admin address */ + readonly admin?: string; + }; +} + +/** + * The Amino JSON representation of [MsgMigrateContract]. + * + * [MsgMigrateContract]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L94-L104 + */ +export interface AminoMsgMigrateContract { + type: "wasm/MsgMigrateContract"; + value: { + /** Bech32 account address */ + readonly sender: string; + /** Bech32 account address */ + readonly contract: string; + /** The new code */ + readonly code_id: string; + /** Migrate message as JavaScript object */ + readonly msg: any; + }; +} + +/** + * The Amino JSON representation of [MsgUpdateAdmin]. + * + * [MsgUpdateAdmin]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L113-L121 + */ +export interface AminoMsgUpdateAdmin { + type: "wasm/MsgUpdateAdmin"; + value: { + /** Bech32-encoded sender address. This must be the old admin. */ + readonly sender: string; + /** Bech32-encoded contract address to be updated */ + readonly contract: string; + /** Bech32-encoded address of the new admin */ + readonly new_admin: string; + }; +} + +/** + * The Amino JSON representation of [MsgClearAdmin]. + * + * [MsgClearAdmin]: https://github.com/CosmWasm/wasmd/blob/v0.18.0-rc1/proto/cosmwasm/wasm/v1/tx.proto#L126-L132 + */ +export interface AminoMsgClearAdmin { + type: "wasm/MsgClearAdmin"; + value: { + /** Bech32-encoded sender address. This must be the old admin. */ + readonly sender: string; + /** Bech32-encoded contract address to be updated */ + readonly contract: string; + }; +} + +export function createWasmAminoConverters(): AminoConverters { + return { + "/cosmwasm.wasm.v1.MsgStoreCode": { + aminoType: "wasm/MsgStoreCode", + toAmino: ({ sender, wasmByteCode }: MsgStoreCode): AminoMsgStoreCode["value"] => ({ + sender: sender, + wasm_byte_code: toBase64(wasmByteCode), + }), + fromAmino: ({ sender, wasm_byte_code }: AminoMsgStoreCode["value"]): MsgStoreCode => ({ + sender: sender, + wasmByteCode: fromBase64(wasm_byte_code), + instantiatePermission: undefined, + }), + }, + "/cosmwasm.wasm.v1.MsgInstantiateContract": { + aminoType: "wasm/MsgInstantiateContract", + toAmino: ({ + sender, + codeId, + label, + msg, + funds, + admin, + }: MsgInstantiateContract): AminoMsgInstantiateContract["value"] => ({ + sender: sender, + code_id: codeId.toString(), + label: label, + msg: JSON.parse(fromUtf8(msg)), + funds: funds, + admin: admin || undefined, + }), + fromAmino: ({ + sender, + code_id, + label, + msg, + funds, + admin, + }: AminoMsgInstantiateContract["value"]): MsgInstantiateContract => ({ + sender: sender, + codeId: Long.fromString(code_id), + label: label, + msg: toUtf8(JSON.stringify(msg)), + funds: [...funds], + admin: admin ?? "", + }), + }, + "/cosmwasm.wasm.v1.MsgUpdateAdmin": { + aminoType: "wasm/MsgUpdateAdmin", + toAmino: ({ sender, newAdmin, contract }: MsgUpdateAdmin): AminoMsgUpdateAdmin["value"] => ({ + sender: sender, + new_admin: newAdmin, + contract: contract, + }), + fromAmino: ({ sender, new_admin, contract }: AminoMsgUpdateAdmin["value"]): MsgUpdateAdmin => ({ + sender: sender, + newAdmin: new_admin, + contract: contract, + }), + }, + "/cosmwasm.wasm.v1.MsgClearAdmin": { + aminoType: "wasm/MsgClearAdmin", + toAmino: ({ sender, contract }: MsgClearAdmin): AminoMsgClearAdmin["value"] => ({ + sender: sender, + contract: contract, + }), + fromAmino: ({ sender, contract }: AminoMsgClearAdmin["value"]): MsgClearAdmin => ({ + sender: sender, + contract: contract, + }), + }, + "/cosmwasm.wasm.v1.MsgExecuteContract": { + aminoType: "wasm/MsgExecuteContract", + toAmino: ({ sender, contract, msg, funds }: MsgExecuteContract): AminoMsgExecuteContract["value"] => ({ + sender: sender, + contract: contract, + msg: JSON.parse(fromUtf8(msg)), + funds: funds, + }), + fromAmino: ({ + sender, + contract, + msg, + funds, + }: AminoMsgExecuteContract["value"]): MsgExecuteContract => ({ + sender: sender, + contract: contract, + msg: toUtf8(JSON.stringify(msg)), + funds: [...funds], + }), + }, + "/cosmwasm.wasm.v1.MsgMigrateContract": { + aminoType: "wasm/MsgMigrateContract", + toAmino: ({ sender, contract, codeId, msg }: MsgMigrateContract): AminoMsgMigrateContract["value"] => ({ + sender: sender, + contract: contract, + code_id: codeId.toString(), + msg: JSON.parse(fromUtf8(msg)), + }), + fromAmino: ({ + sender, + contract, + code_id, + msg, + }: AminoMsgMigrateContract["value"]): MsgMigrateContract => ({ + sender: sender, + contract: contract, + codeId: Long.fromString(code_id), + msg: toUtf8(JSON.stringify(msg)), + }), + }, + }; +} + +/** @deprecated use `createWasmAminoConverters()` */ +export const cosmWasmTypes: AminoConverters = createWasmAminoConverters(); diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts index c43d04c7..884e9f1a 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts @@ -46,9 +46,9 @@ import { import Long from "long"; import pako from "pako"; -import { cosmWasmTypes } from "./aminotypes"; import { CosmWasmClient } from "./cosmwasmclient"; import { + createWasmAminoConverters, MsgClearAdminEncodeObject, MsgExecuteContractEncodeObject, MsgInstantiateContractEncodeObject, @@ -205,7 +205,7 @@ export class SigningCosmWasmClient extends CosmWasmClient { const prefix = options.prefix ?? "cosmos"; const { registry = createDefaultRegistry(), - aminoTypes = new AminoTypes({ prefix, additions: cosmWasmTypes }), + aminoTypes = new AminoTypes({ prefix, additions: createWasmAminoConverters() }), } = options; this.registry = registry; this.aminoTypes = aminoTypes; diff --git a/packages/stargate/src/index.ts b/packages/stargate/src/index.ts index 519263b7..5cf0c01d 100644 --- a/packages/stargate/src/index.ts +++ b/packages/stargate/src/index.ts @@ -1,5 +1,5 @@ export { Account, accountFromAny } from "./accounts"; -export { AminoConverter } from "./aminoconverters"; +export { AminoConverter, AminoConverters } from "./aminoconverters"; export { AminoTypes, AminoTypesOptions } from "./aminotypes"; export { calculateFee, GasPrice } from "./fee"; export * as logs from "./logs";