From 894084a433c0a1f3a4849ce34faf285c04c7a9a6 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 13 Aug 2020 11:51:56 +0200 Subject: [PATCH] Add totalSupply query --- packages/stargate/src/queries/bank.spec.ts | 27 +++++++++++++++++++++- packages/stargate/src/queries/bank.ts | 5 ++++ packages/stargate/src/testutils.spec.ts | 1 + packages/stargate/types/queries/bank.d.ts | 1 + 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/stargate/src/queries/bank.spec.ts b/packages/stargate/src/queries/bank.spec.ts index 323d6635..3761d892 100644 --- a/packages/stargate/src/queries/bank.spec.ts +++ b/packages/stargate/src/queries/bank.spec.ts @@ -1,7 +1,13 @@ import { Client as TendermintClient } from "@cosmjs/tendermint-rpc"; import { QueryClient } from "../queryclient"; -import { nonExistentAddress, pendingWithoutSimapp, simapp, unused } from "../testutils.spec"; +import { + nonExistentAddress, + nonNegativeIntegerMatcher, + pendingWithoutSimapp, + simapp, + unused, +} from "../testutils.spec"; import { BankExtension, setupBankExtension } from "./bank"; async function makeBankClient(rpcUrl: string): Promise { @@ -112,5 +118,24 @@ describe("BankExtension", () => { expect(balances).toEqual([]); }); }); + + describe("totalSupply", () => { + it("works", async () => { + pendingWithoutSimapp(); + const client = await makeBankClient(simapp.tendermintUrl); + + const response = await client.bank.unverified.totalSupply(); + expect(response).toEqual([ + { + amount: "18000000000", + denom: simapp.denomFee, + }, + { + amount: jasmine.stringMatching(nonNegativeIntegerMatcher), + denom: simapp.denomStaking, + }, + ]); + }); + }); }); }); diff --git a/packages/stargate/src/queries/bank.ts b/packages/stargate/src/queries/bank.ts index 3d6b1092..33824098 100644 --- a/packages/stargate/src/queries/bank.ts +++ b/packages/stargate/src/queries/bank.ts @@ -11,6 +11,7 @@ export interface BankExtension { readonly unverified: { readonly balance: (address: string, denom: string) => Promise; readonly allBalances: (address: string) => Promise; + readonly totalSupply: () => Promise; }; }; } @@ -50,6 +51,10 @@ export function setupBankExtension(base: QueryClient): BankExtension { const { balances } = await queryService.allBalances({ address: toAccAddress(address) }); return balances.map(toObject); }, + totalSupply: async () => { + const { supply } = await queryService.totalSupply({}); + return supply.map(toObject); + }, }, }, }; diff --git a/packages/stargate/src/testutils.spec.ts b/packages/stargate/src/testutils.spec.ts index 25d985b9..4bfbfafa 100644 --- a/packages/stargate/src/testutils.spec.ts +++ b/packages/stargate/src/testutils.spec.ts @@ -64,4 +64,5 @@ export const validator = { export const nonExistentAddress = "cosmos1p79apjaufyphcmsn4g07cynqf0wyjuezqu84hd"; +export const nonNegativeIntegerMatcher = /^[0-9]+$/; export const tendermintIdMatcher = /^[0-9A-F]{64}$/; diff --git a/packages/stargate/types/queries/bank.d.ts b/packages/stargate/types/queries/bank.d.ts index e9311a92..83db8a76 100644 --- a/packages/stargate/types/queries/bank.d.ts +++ b/packages/stargate/types/queries/bank.d.ts @@ -6,6 +6,7 @@ export interface BankExtension { readonly unverified: { readonly balance: (address: string, denom: string) => Promise; readonly allBalances: (address: string) => Promise; + readonly totalSupply: () => Promise; }; }; }