From e7f60e9abdc7ac1bd9eca542152b74b5e13ca43d Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sat, 7 Mar 2020 17:30:43 +0100 Subject: [PATCH] Add CosmWasmClient.getHeight() --- packages/bcp/src/cosmwasmconnection.ts | 3 +-- packages/sdk/src/cosmwasmclient.spec.ts | 14 +++++++++++++- packages/sdk/src/cosmwasmclient.ts | 7 +++++++ packages/sdk/types/cosmwasmclient.d.ts | 1 + 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/bcp/src/cosmwasmconnection.ts b/packages/bcp/src/cosmwasmconnection.ts index 275bd81b..e872c9dc 100644 --- a/packages/bcp/src/cosmwasmconnection.ts +++ b/packages/bcp/src/cosmwasmconnection.ts @@ -138,8 +138,7 @@ export class CosmWasmConnection implements BlockchainConnection { } public async height(): Promise { - const { header } = await this.cosmWasmClient.getBlock(); - return header.height; + return this.cosmWasmClient.getHeight(); } public async getToken(searchTicker: TokenTicker): Promise { diff --git a/packages/sdk/src/cosmwasmclient.spec.ts b/packages/sdk/src/cosmwasmclient.spec.ts index 660c9e23..563c2221 100644 --- a/packages/sdk/src/cosmwasmclient.spec.ts +++ b/packages/sdk/src/cosmwasmclient.spec.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/camelcase */ import { Sha256 } from "@iov/crypto"; import { Bech32, Encoding } from "@iov/encoding"; -import { assert } from "@iov/utils"; +import { assert, sleep } from "@iov/utils"; import { ReadonlyDate } from "readonly-date"; import { Code, CosmWasmClient } from "./cosmwasmclient"; @@ -56,6 +56,18 @@ describe("CosmWasmClient", () => { }); }); + describe("getHeight", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = new CosmWasmClient(wasmdEndpoint); + const height1 = await client.getHeight(); + expect(height1).toBeGreaterThan(0); + await sleep(1_000); + const height2 = await client.getHeight(); + expect(height2).toEqual(height1 + 1); + }); + }); + describe("getNonce", () => { it("works", async () => { pendingWithoutWasmd(); diff --git a/packages/sdk/src/cosmwasmclient.ts b/packages/sdk/src/cosmwasmclient.ts index 9c62f69d..43c5f580 100644 --- a/packages/sdk/src/cosmwasmclient.ts +++ b/packages/sdk/src/cosmwasmclient.ts @@ -149,6 +149,13 @@ export class CosmWasmClient { return response.node_info.network; } + public async getHeight(): Promise { + // Note: this gets inefficient when blocks contain a lot of transactions since it + // requires downloading and deserializing all transactions in the block. + const latest = await this.restClient.blocksLatest(); + return parseInt(latest.block.header.height, 10); + } + /** * Returns a 32 byte upper-case hex transaction hash (typically used as the transaction ID) */ diff --git a/packages/sdk/types/cosmwasmclient.d.ts b/packages/sdk/types/cosmwasmclient.d.ts index 83afe61f..c9a2f600 100644 --- a/packages/sdk/types/cosmwasmclient.d.ts +++ b/packages/sdk/types/cosmwasmclient.d.ts @@ -107,6 +107,7 @@ export declare class CosmWasmClient { protected readonly restClient: RestClient; constructor(url: string, broadcastMode?: BroadcastMode); chainId(): Promise; + getHeight(): Promise; /** * Returns a 32 byte upper-case hex transaction hash (typically used as the transaction ID) */