From af2bfbef1cbc37ee8a3bdc6f0e22ca962ab456bd Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 18 Feb 2020 12:08:11 +0100 Subject: [PATCH] Expose BroadcastMode in CosmWasmClient --- packages/sdk/src/cosmwasmclient.ts | 6 +++--- packages/sdk/src/index.ts | 2 +- packages/sdk/src/restclient.ts | 18 ++++++++++++++---- packages/sdk/src/signingcosmwasmclient.ts | 4 +++- packages/sdk/types/cosmwasmclient.d.ts | 4 ++-- packages/sdk/types/index.d.ts | 2 +- packages/sdk/types/restclient.d.ts | 14 +++++++++++++- packages/sdk/types/signingcosmwasmclient.d.ts | 2 ++ 8 files changed, 39 insertions(+), 13 deletions(-) diff --git a/packages/sdk/src/cosmwasmclient.ts b/packages/sdk/src/cosmwasmclient.ts index abf0ff21..3bf21e7b 100644 --- a/packages/sdk/src/cosmwasmclient.ts +++ b/packages/sdk/src/cosmwasmclient.ts @@ -2,7 +2,7 @@ import { Sha256 } from "@iov/crypto"; import { Encoding } from "@iov/encoding"; import { Log, parseLogs } from "./logs"; -import { BlockResponse, RestClient, TxsResponse } from "./restclient"; +import { BlockResponse, BroadcastMode, RestClient, TxsResponse } from "./restclient"; import { CosmosSdkAccount, CosmosSdkTx } from "./types"; export interface GetNonceResult { @@ -46,8 +46,8 @@ function isSearchBySentFromOrToQuery(query: SearchTxQuery): query is SearchBySen export class CosmWasmClient { protected readonly restClient: RestClient; - public constructor(url: string) { - this.restClient = new RestClient(url); + public constructor(url: string, broadcastMode = BroadcastMode.Block) { + this.restClient = new RestClient(url, broadcastMode); } public async chainId(): Promise { diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index 371c4cbe..2a269008 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -5,7 +5,7 @@ export { logs, types }; export { CosmosAddressBech32Prefix, encodeAddress, isValidAddress } from "./address"; export { unmarshalTx } from "./decoding"; export { makeSignBytes, marshalTx } from "./encoding"; -export { RestClient, TxsResponse } from "./restclient"; +export { BroadcastMode, RestClient, TxsResponse } from "./restclient"; export { CosmWasmClient, GetNonceResult, diff --git a/packages/sdk/src/restclient.ts b/packages/sdk/src/restclient.ts index 3abdab3b..476dc85a 100644 --- a/packages/sdk/src/restclient.ts +++ b/packages/sdk/src/restclient.ts @@ -152,7 +152,19 @@ type RestClientResponse = | WasmResponse | WasmResponse; -type BroadcastMode = "block" | "sync" | "async"; +/** + * The mode used to send transaction + * + * @see https://cosmos.network/rpc/#/Transactions/post_txs + */ +export enum BroadcastMode { + /** Return after tx commit */ + Block = "block", + /** Return afer CheckTx */ + Sync = "sync", + /** Return right away */ + Async = "async", +} function isWasmError(resp: WasmResponse): resp is WasmError { return (resp as WasmError).error !== undefined; @@ -194,11 +206,9 @@ function parseAxios500error(err: AxiosError): never { export class RestClient { private readonly client: AxiosInstance; - // From https://cosmos.network/rpc/#/ICS0/post_txs - // The supported broadcast modes include "block"(return after tx commit), "sync"(return afer CheckTx) and "async"(return right away). private readonly mode: BroadcastMode; - public constructor(url: string, mode: BroadcastMode = "block") { + public constructor(url: string, mode = BroadcastMode.Block) { const headers = { post: { "Content-Type": "application/json" }, }; diff --git a/packages/sdk/src/signingcosmwasmclient.ts b/packages/sdk/src/signingcosmwasmclient.ts index ca56e863..3e2c888a 100644 --- a/packages/sdk/src/signingcosmwasmclient.ts +++ b/packages/sdk/src/signingcosmwasmclient.ts @@ -3,6 +3,7 @@ import { Encoding } from "@iov/encoding"; import { CosmWasmClient, GetNonceResult, PostTxResult } from "./cosmwasmclient"; import { makeSignBytes, marshalTx } from "./encoding"; import { findAttribute, Log } from "./logs"; +import { BroadcastMode } from "./restclient"; import { Coin, CosmosSdkAccount, @@ -63,8 +64,9 @@ export class SigningCosmWasmClient extends CosmWasmClient { senderAddress: string, signCallback: SigningCallback, customFees?: Partial, + broadcastMode = BroadcastMode.Block, ) { - super(url); + super(url, broadcastMode); this.senderAddress = senderAddress; this.signCallback = signCallback; this.fees = { ...defaultFees, ...(customFees || {}) }; diff --git a/packages/sdk/types/cosmwasmclient.d.ts b/packages/sdk/types/cosmwasmclient.d.ts index c9f93543..b7d0f3bf 100644 --- a/packages/sdk/types/cosmwasmclient.d.ts +++ b/packages/sdk/types/cosmwasmclient.d.ts @@ -1,5 +1,5 @@ import { Log } from "./logs"; -import { BlockResponse, RestClient, TxsResponse } from "./restclient"; +import { BlockResponse, BroadcastMode, RestClient, TxsResponse } from "./restclient"; import { CosmosSdkAccount, CosmosSdkTx } from "./types"; export interface GetNonceResult { readonly accountNumber: number; @@ -23,7 +23,7 @@ export interface SearchBySentFromOrToQuery { export declare type SearchTxQuery = SearchByIdQuery | SearchByHeightQuery | SearchBySentFromOrToQuery; export declare class CosmWasmClient { protected readonly restClient: RestClient; - constructor(url: string); + constructor(url: string, broadcastMode?: BroadcastMode); chainId(): Promise; /** * Returns a 32 byte upper-case hex transaction hash (typically used as the transaction ID) diff --git a/packages/sdk/types/index.d.ts b/packages/sdk/types/index.d.ts index 4b2c4d8d..ffe33888 100644 --- a/packages/sdk/types/index.d.ts +++ b/packages/sdk/types/index.d.ts @@ -4,7 +4,7 @@ export { logs, types }; export { CosmosAddressBech32Prefix, encodeAddress, isValidAddress } from "./address"; export { unmarshalTx } from "./decoding"; export { makeSignBytes, marshalTx } from "./encoding"; -export { RestClient, TxsResponse } from "./restclient"; +export { BroadcastMode, RestClient, TxsResponse } from "./restclient"; export { CosmWasmClient, GetNonceResult, diff --git a/packages/sdk/types/restclient.d.ts b/packages/sdk/types/restclient.d.ts index b200337a..d629c7bc 100644 --- a/packages/sdk/types/restclient.d.ts +++ b/packages/sdk/types/restclient.d.ts @@ -105,7 +105,19 @@ declare type RestClientResponse = | EncodeTxResponse | WasmResponse | WasmResponse; -declare type BroadcastMode = "block" | "sync" | "async"; +/** + * The mode used to send transaction + * + * @see https://cosmos.network/rpc/#/Transactions/post_txs + */ +export declare enum BroadcastMode { + /** Return after tx commit */ + Block = "block", + /** Return afer CheckTx */ + Sync = "sync", + /** Return right away */ + Async = "async", +} export declare class RestClient { private readonly client; private readonly mode; diff --git a/packages/sdk/types/signingcosmwasmclient.d.ts b/packages/sdk/types/signingcosmwasmclient.d.ts index 0393683c..70a20ee6 100644 --- a/packages/sdk/types/signingcosmwasmclient.d.ts +++ b/packages/sdk/types/signingcosmwasmclient.d.ts @@ -1,5 +1,6 @@ import { CosmWasmClient, GetNonceResult, PostTxResult } from "./cosmwasmclient"; import { Log } from "./logs"; +import { BroadcastMode } from "./restclient"; import { Coin, CosmosSdkAccount, StdFee, StdSignature } from "./types"; export interface SigningCallback { (signBytes: Uint8Array): Promise; @@ -22,6 +23,7 @@ export declare class SigningCosmWasmClient extends CosmWasmClient { senderAddress: string, signCallback: SigningCallback, customFees?: Partial, + broadcastMode?: BroadcastMode, ); getNonce(address?: string): Promise; getAccount(address?: string): Promise;