From 7f8934cbe50ac90a06101289d08911de403b40d8 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 2 Mar 2023 17:29:51 +0100 Subject: [PATCH] Allow creating higher level clients with a given Tendermint client --- CHANGELOG.md | 6 ++++++ .../cosmwasm-stargate/src/cosmwasmclient.ts | 14 ++++++++++++++ .../src/signingcosmwasmclient.ts | 18 ++++++++++++++++++ packages/stargate/src/signingstargateclient.ts | 18 ++++++++++++++++++ packages/stargate/src/stargateclient.ts | 17 +++++++++++++++++ 5 files changed, 73 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b76adeb..752ffcfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,12 @@ and this project adheres to `Tendermint34Client` or `Tendermint37Client` and `isTendermint34Client`/`isTendermint37Client` to get the specific type ([#1376]). +- @cosmjs/stargate: Add constructors `StargateClient.create` and + `SigningStargateClient.createWithSigner` to construct with a given Tendermint + client ([#1376]). +- @cosmjs/cosmwasm-stargate: Add constructors `CosmWasmClient.create` and + `SigningCosmWasmClient.createWithSigner` to construct with a given Tendermint + client ([#1376]). [#1308]: https://github.com/cosmos/cosmjs/pull/1308 [#1376]: https://github.com/cosmos/cosmjs/pull/1376 diff --git a/packages/cosmwasm-stargate/src/cosmwasmclient.ts b/packages/cosmwasm-stargate/src/cosmwasmclient.ts index 866daf4f..97c36200 100644 --- a/packages/cosmwasm-stargate/src/cosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/cosmwasmclient.ts @@ -96,8 +96,22 @@ export class CosmWasmClient { private readonly codesCache = new Map(); private chainId: string | undefined; + /** + * Creates an instance by connecting to the given Tendermint RPC endpoint. + * + * For now this uses the Tendermint 0.34 client. If you need Tendermint 0.37 + * support, see `create`. + */ public static async connect(endpoint: string | HttpEndpoint): Promise { const tmClient = await Tendermint34Client.connect(endpoint); + return CosmWasmClient.create(tmClient); + } + + /** + * Creates an instance from a manually created Tendermint client. + * Use this to use `Tendermint37Client` instead of `Tendermint34Client`. + */ + public static async create(tmClient: TendermintClient): Promise { return new CosmWasmClient(tmClient); } diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts index e3843404..6cdad852 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts @@ -183,12 +183,30 @@ export class SigningCosmWasmClient extends CosmWasmClient { private readonly aminoTypes: AminoTypes; private readonly gasPrice: GasPrice | undefined; + /** + * Creates an instance by connecting to the given Tendermint RPC endpoint. + * + * For now this uses the Tendermint 0.34 client. If you need Tendermint 0.37 + * support, see `createWithSigner`. + */ public static async connectWithSigner( endpoint: string | HttpEndpoint, signer: OfflineSigner, options: SigningCosmWasmClientOptions = {}, ): Promise { const tmClient = await Tendermint34Client.connect(endpoint); + return SigningCosmWasmClient.createWithSigner(tmClient, signer, options); + } + + /** + * Creates an instance from a manually created Tendermint client. + * Use this to use `Tendermint37Client` instead of `Tendermint34Client`. + */ + public static async createWithSigner( + tmClient: TendermintClient, + signer: OfflineSigner, + options: SigningCosmWasmClientOptions = {}, + ): Promise { return new SigningCosmWasmClient(tmClient, signer, options); } diff --git a/packages/stargate/src/signingstargateclient.ts b/packages/stargate/src/signingstargateclient.ts index 73fa8143..a1efb39b 100644 --- a/packages/stargate/src/signingstargateclient.ts +++ b/packages/stargate/src/signingstargateclient.ts @@ -114,12 +114,30 @@ export class SigningStargateClient extends StargateClient { private readonly aminoTypes: AminoTypes; private readonly gasPrice: GasPrice | undefined; + /** + * Creates an instance by connecting to the given Tendermint RPC endpoint. + * + * For now this uses the Tendermint 0.34 client. If you need Tendermint 0.37 + * support, see `createWithSigner`. + */ public static async connectWithSigner( endpoint: string | HttpEndpoint, signer: OfflineSigner, options: SigningStargateClientOptions = {}, ): Promise { const tmClient = await Tendermint34Client.connect(endpoint); + return SigningStargateClient.createWithSigner(tmClient, signer, options); + } + + /** + * Creates an instance from a manually created Tendermint client. + * Use this to use `Tendermint37Client` instead of `Tendermint34Client`. + */ + public static async createWithSigner( + tmClient: TendermintClient, + signer: OfflineSigner, + options: SigningStargateClientOptions = {}, + ): Promise { return new SigningStargateClient(tmClient, signer, options); } diff --git a/packages/stargate/src/stargateclient.ts b/packages/stargate/src/stargateclient.ts index ddcf763a..c81ca8e2 100644 --- a/packages/stargate/src/stargateclient.ts +++ b/packages/stargate/src/stargateclient.ts @@ -191,11 +191,28 @@ export class StargateClient { private chainId: string | undefined; private readonly accountParser: AccountParser; + /** + * Creates an instance by connecting to the given Tendermint RPC endpoint. + * + * For now this uses the Tendermint 0.34 client. If you need Tendermint 0.37 + * support, see `create`. + */ public static async connect( endpoint: string | HttpEndpoint, options: StargateClientOptions = {}, ): Promise { const tmClient = await Tendermint34Client.connect(endpoint); + return StargateClient.create(tmClient, options); + } + + /** + * Creates an instance from a manually created Tendermint client. + * Use this to use `Tendermint37Client` instead of `Tendermint34Client`. + */ + public static async create( + tmClient: TendermintClient, + options: StargateClientOptions = {}, + ): Promise { return new StargateClient(tmClient, options); }