From 4e9c0098094d1cbaa3fb0d4b41b073058926d300 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 4 Feb 2020 11:41:24 +0100 Subject: [PATCH] Use stronger types for Msg --- packages/sdk/src/restclient.spec.ts | 5 ++--- packages/sdk/src/types.ts | 17 ++++++++++++++--- packages/sdk/types/types.d.ts | 14 ++++++++++++-- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/packages/sdk/src/restclient.spec.ts b/packages/sdk/src/restclient.spec.ts index 48fd024f..c8228eb4 100644 --- a/packages/sdk/src/restclient.spec.ts +++ b/packages/sdk/src/restclient.spec.ts @@ -3,13 +3,12 @@ import { ChainId, PrehashType, SignableBytes } from "@iov/bcp"; import { Secp256k1 } from "@iov/crypto"; import { Encoding } from "@iov/encoding"; import { HdPaths, Secp256k1HdWallet } from "@iov/keycontrol"; -import { types } from "src"; import { marshalTx, sortJson } from "./encoding"; import { RestClient } from "./restclient"; import contract from "./testdata/contract.json"; import data from "./testdata/cosmoshub.json"; -import { StdSignature, StdTx } from "./types"; +import { MsgStoreCodeWrapped, StdSignature, StdTx } from "./types"; const { fromBase64, toBase64, toUtf8 } = Encoding; @@ -68,7 +67,7 @@ describe("RestClient", () => { const signer = await wallet.createIdentity("abc" as ChainId, faucetPath); const memo = "My first contract on chain"; - const theMsg: types.Msg = { + const theMsg: MsgStoreCodeWrapped = { type: "wasm/store-code", value: { sender: faucetAddress, diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 06f5efad..badfd978 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -22,10 +22,9 @@ export function isAminoStdTx(txValue: unknown): txValue is StdTx { ); } -export interface Msg { +interface MsgUnknownWrapped { readonly type: string; - // TODO: make better union type - readonly value: MsgSend | MsgStoreCode | unknown; + readonly value: object; } export interface MsgSend { @@ -36,6 +35,11 @@ export interface MsgSend { readonly amount: ReadonlyArray; } +export interface MsgSendWrapped extends MsgUnknownWrapped { + readonly type: "cosmos-sdk/StdTx"; + readonly value: MsgSend; +} + export interface MsgStoreCode { /** Bech32 account address */ readonly sender: string; @@ -47,6 +51,13 @@ export interface MsgStoreCode { readonly builder?: string; } +export interface MsgStoreCodeWrapped extends MsgUnknownWrapped { + readonly type: "wasm/store-code"; + readonly value: MsgStoreCode; +} + +export type Msg = MsgSendWrapped | MsgStoreCodeWrapped | MsgUnknownWrapped; + export interface StdFee { readonly amount: ReadonlyArray; readonly gas: string; diff --git a/packages/sdk/types/types.d.ts b/packages/sdk/types/types.d.ts index a6a42cf5..7104e3a3 100644 --- a/packages/sdk/types/types.d.ts +++ b/packages/sdk/types/types.d.ts @@ -12,9 +12,9 @@ export declare type AminoTx = Tx & { readonly value: StdTx; }; export declare function isAminoStdTx(txValue: unknown): txValue is StdTx; -export interface Msg { +interface MsgUnknownWrapped { readonly type: string; - readonly value: MsgSend | MsgStoreCode | unknown; + readonly value: object; } export interface MsgSend { /** Bech32 account address */ @@ -23,6 +23,10 @@ export interface MsgSend { readonly to_address: string; readonly amount: ReadonlyArray; } +export interface MsgSendWrapped extends MsgUnknownWrapped { + readonly type: "cosmos-sdk/StdTx"; + readonly value: MsgSend; +} export interface MsgStoreCode { /** Bech32 account address */ readonly sender: string; @@ -33,6 +37,11 @@ export interface MsgStoreCode { /** A docker tag, optional */ readonly builder?: string; } +export interface MsgStoreCodeWrapped extends MsgUnknownWrapped { + readonly type: "wasm/store-code"; + readonly value: MsgStoreCode; +} +export declare type Msg = MsgSendWrapped | MsgStoreCodeWrapped | MsgUnknownWrapped; export interface StdFee { readonly amount: ReadonlyArray; readonly gas: string; @@ -58,3 +67,4 @@ export interface BaseAccount { readonly account_number: number; readonly sequence: number; } +export {};