diff --git a/packages/stargate/src/queries/bank.spec.ts b/packages/stargate/src/queries/bank.spec.ts index 3761d892..89831469 100644 --- a/packages/stargate/src/queries/bank.spec.ts +++ b/packages/stargate/src/queries/bank.spec.ts @@ -137,5 +137,29 @@ describe("BankExtension", () => { ]); }); }); + + describe("supplyOf", () => { + it("works for existing denom", async () => { + pendingWithoutSimapp(); + const client = await makeBankClient(simapp.tendermintUrl); + + const response = await client.bank.unverified.supplyOf(simapp.denomFee); + expect(response).toEqual({ + amount: "18000000000", + denom: simapp.denomFee, + }); + }); + + it("returns zero for non-existent denom", async () => { + pendingWithoutSimapp(); + const client = await makeBankClient(simapp.tendermintUrl); + + const response = await client.bank.unverified.supplyOf("gintonic"); + expect(response).toEqual({ + amount: "0", + denom: "gintonic", + }); + }); + }); }); }); diff --git a/packages/stargate/src/queries/bank.ts b/packages/stargate/src/queries/bank.ts index 33824098..a4b66ba6 100644 --- a/packages/stargate/src/queries/bank.ts +++ b/packages/stargate/src/queries/bank.ts @@ -12,6 +12,7 @@ export interface BankExtension { readonly balance: (address: string, denom: string) => Promise; readonly allBalances: (address: string) => Promise; readonly totalSupply: () => Promise; + readonly supplyOf: (denom: string) => Promise; }; }; } @@ -55,6 +56,11 @@ export function setupBankExtension(base: QueryClient): BankExtension { const { supply } = await queryService.totalSupply({}); return supply.map(toObject); }, + supplyOf: async (denom: string) => { + const { amount } = await queryService.supplyOf({ denom: denom }); + assert(amount); + return toObject(amount); + }, }, }, }; diff --git a/packages/stargate/types/queries/bank.d.ts b/packages/stargate/types/queries/bank.d.ts index 83db8a76..4cb53485 100644 --- a/packages/stargate/types/queries/bank.d.ts +++ b/packages/stargate/types/queries/bank.d.ts @@ -7,6 +7,7 @@ export interface BankExtension { readonly balance: (address: string, denom: string) => Promise; readonly allBalances: (address: string) => Promise; readonly totalSupply: () => Promise; + readonly supplyOf: (denom: string) => Promise; }; }; }