diff --git a/packages/stargate/src/queries/bank.spec.ts b/packages/stargate/src/queries/bank.spec.ts index bb50bcd3..14a0f6c5 100644 --- a/packages/stargate/src/queries/bank.spec.ts +++ b/packages/stargate/src/queries/bank.spec.ts @@ -44,4 +44,31 @@ describe("BankExtension", () => { expect(response).toBeNull(); }); }); + + describe("allBalances", () => { + it("returns all balances for unused account", async () => { + pendingWithoutSimapp(); + const client = await makeBankClient(simapp.tendermintUrl); + + const balances = await client.bank.unverified.allBalances(unused.address); + expect(balances).toEqual([ + { + amount: unused.balanceFee, + denom: simapp.denomFee, + }, + { + amount: unused.balanceStaking, + denom: simapp.denomStaking, + }, + ]); + }); + + it("returns an empty list for non-existent account", async () => { + pendingWithoutSimapp(); + const client = await makeBankClient(simapp.tendermintUrl); + + const balances = await client.bank.unverified.allBalances(nonExistentAddress); + expect(balances).toEqual([]); + }); + }); }); diff --git a/packages/stargate/src/queries/bank.ts b/packages/stargate/src/queries/bank.ts index b6a93a0d..2207f8e6 100644 --- a/packages/stargate/src/queries/bank.ts +++ b/packages/stargate/src/queries/bank.ts @@ -7,7 +7,8 @@ import { QueryClient } from "../queryclient"; * Use this to convert a protobuf.js class to the interface (e.g. Coin to ICoin) * in a ways that makes Jasmine's toEqual happy. */ -function toObject(thing: I): O { +// eslint-disable-next-line @typescript-eslint/ban-types +function toObject(thing: I): Omit { return { ...thing }; } @@ -15,7 +16,7 @@ export interface BankExtension { readonly bank: { readonly balance: (address: string, denom: string) => Promise; readonly unverified: { - readonly balances: (address: string) => Promise; + readonly allBalances: (address: string) => Promise; }; }; } @@ -47,9 +48,9 @@ export function setupBankExtension(base: QueryClient): BankExtension { return responseData.length ? toObject(cosmos.Coin.decode(responseData)) : null; }, unverified: { - balances: async (address: string) => { - const response = await queryService.allBalances({ address: Bech32.decode(address).data }); - return response.balances; + allBalances: async (address: string) => { + const { balances } = await queryService.allBalances({ address: Bech32.decode(address).data }); + return balances.map(toObject); }, }, }, diff --git a/packages/stargate/src/stargateclient.ts b/packages/stargate/src/stargateclient.ts index 9cf168f6..64e34451 100644 --- a/packages/stargate/src/stargateclient.ts +++ b/packages/stargate/src/stargateclient.ts @@ -204,7 +204,7 @@ export class StargateClient { * proofs from such a method. */ public async getAllBalancesUnverified(address: string): Promise { - const balances = await this.queryClient.bank.unverified.balances(address); + const balances = await this.queryClient.bank.unverified.allBalances(address); return balances.map(coinFromProto); } diff --git a/packages/stargate/types/queries/bank.d.ts b/packages/stargate/types/queries/bank.d.ts index 48cabf7d..6b62b2c4 100644 --- a/packages/stargate/types/queries/bank.d.ts +++ b/packages/stargate/types/queries/bank.d.ts @@ -4,7 +4,7 @@ export interface BankExtension { readonly bank: { readonly balance: (address: string, denom: string) => Promise; readonly unverified: { - readonly balances: (address: string) => Promise; + readonly allBalances: (address: string) => Promise; }; }; }