Add TendermintClient

This commit is contained in:
Simon Warta 2023-03-02 14:22:35 +01:00
parent 3daa7b6c4a
commit a808a8218c
8 changed files with 67 additions and 40 deletions

View File

@ -35,7 +35,10 @@ and this project adheres to
- @cosmjs/stargate: Add `granteeGrants` and `granterGrants` queries to
`AuthzExtension` ([#1308]).
- @cosmjs/tendermint-rpc: Add new `Tendermint37Client` and remove unused
`Tendermint35Client` ([#1376]).
`Tendermint35Client`; Add `TendermintClient` as a union type for
`Tendermint34Client` or `Tendermint37Client` and
`isTendermint34Client`/`isTendermint37Client` to get the specific type
([#1376]).
[#1308]: https://github.com/cosmos/cosmjs/pull/1308
[#1376]: https://github.com/cosmos/cosmjs/pull/1376

View File

@ -25,7 +25,12 @@ import {
TimeoutError,
TxExtension,
} from "@cosmjs/stargate";
import { HttpEndpoint, Tendermint34Client, toRfc3339WithNanoseconds } from "@cosmjs/tendermint-rpc";
import {
HttpEndpoint,
Tendermint34Client,
TendermintClient,
toRfc3339WithNanoseconds,
} from "@cosmjs/tendermint-rpc";
import { assert, sleep } from "@cosmjs/utils";
import {
CodeInfoResponse,
@ -77,14 +82,14 @@ export interface ContractCodeHistoryEntry {
/** Use for testing only */
export interface PrivateCosmWasmClient {
readonly tmClient: Tendermint34Client | undefined;
readonly tmClient: TendermintClient | undefined;
readonly queryClient:
| (QueryClient & AuthExtension & BankExtension & TxExtension & WasmExtension)
| undefined;
}
export class CosmWasmClient {
private readonly tmClient: Tendermint34Client | undefined;
private readonly tmClient: TendermintClient | undefined;
private readonly queryClient:
| (QueryClient & AuthExtension & BankExtension & TxExtension & WasmExtension)
| undefined;
@ -96,7 +101,7 @@ export class CosmWasmClient {
return new CosmWasmClient(tmClient);
}
protected constructor(tmClient: Tendermint34Client | undefined) {
protected constructor(tmClient: TendermintClient | undefined) {
if (tmClient) {
this.tmClient = tmClient;
this.queryClient = QueryClient.withExtensions(
@ -109,11 +114,11 @@ export class CosmWasmClient {
}
}
protected getTmClient(): Tendermint34Client | undefined {
protected getTmClient(): TendermintClient | undefined {
return this.tmClient;
}
protected forceGetTmClient(): Tendermint34Client {
protected forceGetTmClient(): TendermintClient {
if (!this.tmClient) {
throw new Error(
"Tendermint client not available. You cannot use online functionality in offline mode.",

View File

@ -31,7 +31,7 @@ import {
SignerData,
StdFee,
} from "@cosmjs/stargate";
import { HttpEndpoint, Tendermint34Client } from "@cosmjs/tendermint-rpc";
import { HttpEndpoint, Tendermint34Client, TendermintClient } from "@cosmjs/tendermint-rpc";
import { assert, assertDefined } from "@cosmjs/utils";
import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx";
import { MsgDelegate, MsgUndelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx";
@ -209,7 +209,7 @@ export class SigningCosmWasmClient extends CosmWasmClient {
}
protected constructor(
tmClient: Tendermint34Client | undefined,
tmClient: TendermintClient | undefined,
signer: OfflineSigner,
options: SigningCosmWasmClientOptions,
) {

View File

@ -2,7 +2,7 @@
import { iavlSpec, ics23, tendermintSpec, verifyExistence, verifyNonExistence } from "@confio/ics23";
import { toAscii, toHex } from "@cosmjs/encoding";
import { firstEvent } from "@cosmjs/stream";
import { tendermint34, Tendermint34Client } from "@cosmjs/tendermint-rpc";
import { tendermint34, TendermintClient } from "@cosmjs/tendermint-rpc";
import { arrayContentEquals, assert, assertDefined, isNonNullObject, sleep } from "@cosmjs/utils";
import { ProofOps } from "cosmjs-types/tendermint/crypto/proof";
import { Stream } from "xstream";
@ -45,24 +45,24 @@ export interface QueryAbciResponse {
export class QueryClient {
/** Constructs a QueryClient with 0 extensions */
public static withExtensions(tmClient: Tendermint34Client): QueryClient;
public static withExtensions(tmClient: TendermintClient): QueryClient;
/** Constructs a QueryClient with 1 extension */
public static withExtensions<A extends object>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
): QueryClient & A;
/** Constructs a QueryClient with 2 extensions */
public static withExtensions<A extends object, B extends object>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
): QueryClient & A & B;
/** Constructs a QueryClient with 3 extensions */
public static withExtensions<A extends object, B extends object, C extends object>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -70,7 +70,7 @@ export class QueryClient {
/** Constructs a QueryClient with 4 extensions */
public static withExtensions<A extends object, B extends object, C extends object, D extends object>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -85,7 +85,7 @@ export class QueryClient {
D extends object,
E extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -102,7 +102,7 @@ export class QueryClient {
E extends object,
F extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -121,7 +121,7 @@ export class QueryClient {
F extends object,
G extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -142,7 +142,7 @@ export class QueryClient {
G extends object,
H extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -165,7 +165,7 @@ export class QueryClient {
H extends object,
I extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -190,7 +190,7 @@ export class QueryClient {
I extends object,
J extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -217,7 +217,7 @@ export class QueryClient {
J extends object,
K extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -246,7 +246,7 @@ export class QueryClient {
K extends object,
L extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -277,7 +277,7 @@ export class QueryClient {
L extends object,
M extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -310,7 +310,7 @@ export class QueryClient {
M extends object,
N extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -345,7 +345,7 @@ export class QueryClient {
N extends object,
O extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -382,7 +382,7 @@ export class QueryClient {
O extends object,
P extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -421,7 +421,7 @@ export class QueryClient {
P extends object,
Q extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -462,7 +462,7 @@ export class QueryClient {
Q extends object,
R extends object,
>(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
setupExtensionA: QueryExtensionSetup<A>,
setupExtensionB: QueryExtensionSetup<B>,
setupExtensionC: QueryExtensionSetup<C>,
@ -484,7 +484,7 @@ export class QueryClient {
): QueryClient & A & B & C & D & E & F & G & H & I & J & K & L & M & N & O & P & Q & R;
public static withExtensions(
tmClient: Tendermint34Client,
tmClient: TendermintClient,
...extensionSetups: Array<QueryExtensionSetup<object>>
): any {
const client = new QueryClient(tmClient);
@ -506,9 +506,9 @@ export class QueryClient {
return client;
}
private readonly tmClient: Tendermint34Client;
private readonly tmClient: TendermintClient;
public constructor(tmClient: Tendermint34Client) {
public constructor(tmClient: TendermintClient) {
this.tmClient = tmClient;
}

View File

@ -12,7 +12,7 @@ import {
Registry,
TxBodyEncodeObject,
} from "@cosmjs/proto-signing";
import { HttpEndpoint, Tendermint34Client } from "@cosmjs/tendermint-rpc";
import { HttpEndpoint, Tendermint34Client, TendermintClient } from "@cosmjs/tendermint-rpc";
import { assert, assertDefined } from "@cosmjs/utils";
import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin";
import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx";
@ -140,7 +140,7 @@ export class SigningStargateClient extends StargateClient {
}
protected constructor(
tmClient: Tendermint34Client | undefined,
tmClient: TendermintClient | undefined,
signer: OfflineSigner,
options: SigningStargateClientOptions,
) {

View File

@ -2,7 +2,12 @@
import { addCoins } from "@cosmjs/amino";
import { toHex } from "@cosmjs/encoding";
import { Uint53 } from "@cosmjs/math";
import { HttpEndpoint, Tendermint34Client, toRfc3339WithNanoseconds } from "@cosmjs/tendermint-rpc";
import {
HttpEndpoint,
Tendermint34Client,
TendermintClient,
toRfc3339WithNanoseconds,
} from "@cosmjs/tendermint-rpc";
import { assert, sleep } from "@cosmjs/utils";
import { MsgData } from "cosmjs-types/cosmos/base/abci/v1beta1/abci";
import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin";
@ -171,7 +176,7 @@ export class BroadcastTxError extends Error {
/** Use for testing only */
export interface PrivateStargateClient {
readonly tmClient: Tendermint34Client | undefined;
readonly tmClient: TendermintClient | undefined;
}
export interface StargateClientOptions {
@ -179,7 +184,7 @@ export interface StargateClientOptions {
}
export class StargateClient {
private readonly tmClient: Tendermint34Client | undefined;
private readonly tmClient: TendermintClient | undefined;
private readonly queryClient:
| (QueryClient & AuthExtension & BankExtension & StakingExtension & TxExtension)
| undefined;
@ -194,7 +199,7 @@ export class StargateClient {
return new StargateClient(tmClient, options);
}
protected constructor(tmClient: Tendermint34Client | undefined, options: StargateClientOptions) {
protected constructor(tmClient: TendermintClient | undefined, options: StargateClientOptions) {
if (tmClient) {
this.tmClient = tmClient;
this.queryClient = QueryClient.withExtensions(
@ -209,11 +214,11 @@ export class StargateClient {
this.accountParser = accountParser;
}
protected getTmClient(): Tendermint34Client | undefined {
protected getTmClient(): TendermintClient | undefined {
return this.tmClient;
}
protected forceGetTmClient(): Tendermint34Client {
protected forceGetTmClient(): TendermintClient {
if (!this.tmClient) {
throw new Error(
"Tendermint client not available. You cannot use online functionality in offline mode.",

View File

@ -97,6 +97,7 @@ export * as tendermint34 from "./tendermint34";
export { Tendermint34Client } from "./tendermint34";
export * as tendermint37 from "./tendermint37";
export { Tendermint37Client } from "./tendermint37";
export { isTendermint34Client, isTendermint37Client, TendermintClient } from "./tendermintclient";
export {
BlockIdFlag,
CommitSignature,

View File

@ -0,0 +1,13 @@
import { Tendermint34Client } from "./tendermint34";
import { Tendermint37Client } from "./tendermint37";
/** A TendermintClient is either a Tendermint34Client or a Tendermint37Client */
export type TendermintClient = Tendermint34Client | Tendermint37Client;
export function isTendermint34Client(client: TendermintClient): client is Tendermint34Client {
return client instanceof Tendermint34Client;
}
export function isTendermint37Client(client: TendermintClient): client is Tendermint37Client {
return client instanceof Tendermint37Client;
}