diff --git a/packages/stargate/src/stargateclient.spec.ts b/packages/stargate/src/stargateclient.spec.ts index 5befdfe8..821c1fc2 100644 --- a/packages/stargate/src/stargateclient.spec.ts +++ b/packages/stargate/src/stargateclient.spec.ts @@ -1,4 +1,4 @@ -import { assert } from "@cosmjs/utils"; +import { assert, sleep } from "@cosmjs/utils"; import { PrivateStargateClient, StargateClient } from "./stargateclient"; import { nonExistentAddress, pendingWithoutSimapp, simapp, unused, validator } from "./testutils.spec"; @@ -33,6 +33,20 @@ describe("StargateClient", () => { }); }); + describe("getHeight", () => { + it("works", async () => { + pendingWithoutSimapp(); + const client = await StargateClient.connect(simapp.tendermintUrl); + + const height1 = await client.getHeight(); + expect(height1).toBeGreaterThan(0); + await sleep(simapp.blockTime * 1.4); // tolerate chain being 40% slower than expected + const height2 = await client.getHeight(); + expect(height2).toBeGreaterThanOrEqual(height1 + 1); + expect(height2).toBeLessThanOrEqual(height1 + 2); + }); + }); + describe("getAccount", () => { it("works for unused account", async () => { pendingWithoutSimapp(); diff --git a/packages/stargate/src/stargateclient.ts b/packages/stargate/src/stargateclient.ts index faae603f..433fa794 100644 --- a/packages/stargate/src/stargateclient.ts +++ b/packages/stargate/src/stargateclient.ts @@ -78,6 +78,11 @@ export class StargateClient { return this.chainId; } + public async getHeight(): Promise { + const status = await this.tmClient.status(); + return status.syncInfo.latestBlockHeight; + } + public async getAccount(searchAddress: string): Promise { const { prefix, data: binAddress } = Bech32.decode(searchAddress); // https://github.com/cosmos/cosmos-sdk/blob/8cab43c8120fec5200c3459cbf4a92017bb6f287/x/auth/types/keys.go#L29-L32 diff --git a/packages/stargate/src/testutils.spec.ts b/packages/stargate/src/testutils.spec.ts index c85aed67..fa7ef050 100644 --- a/packages/stargate/src/testutils.spec.ts +++ b/packages/stargate/src/testutils.spec.ts @@ -9,6 +9,7 @@ export const simapp = { chainId: "simd-testing", denomStaking: "ustake", denomFee: "ucosm", + blockTime: 1_000, // ms }; /** Unused account */ diff --git a/packages/stargate/types/stargateclient.d.ts b/packages/stargate/types/stargateclient.d.ts index 3f745705..a7d3781e 100644 --- a/packages/stargate/types/stargateclient.d.ts +++ b/packages/stargate/types/stargateclient.d.ts @@ -21,6 +21,7 @@ export declare class StargateClient { static connect(endpoint: string): Promise; private constructor(); getChainId(): Promise; + getHeight(): Promise; getAccount(searchAddress: string): Promise; getSequence(address: string): Promise; getBalance(address: string, searchDenom: string): Promise;