Add denomMetadata/denomsMetadata queries to BankExtension

This commit is contained in:
Simon Warta 2021-11-23 14:35:23 +01:00
parent 66fa0d65c6
commit 3b559d22d1
3 changed files with 87 additions and 0 deletions

View File

@ -10,8 +10,11 @@ and this project adheres to
- @cosmjs/tendermint-rpc: Add `hash` field to `BroadcastTxAsyncResponse` - @cosmjs/tendermint-rpc: Add `hash` field to `BroadcastTxAsyncResponse`
([#938]). ([#938]).
- @cosmjs/stargate: Add `denomMetadata` and `denomsMetadata` to `BankExtension`
([#932]).
[#938]: https://github.com/cosmos/cosmjs/issues/938 [#938]: https://github.com/cosmos/cosmjs/issues/938
[#932]: https://github.com/cosmos/cosmjs/issues/932
### Fixed ### Fixed

View File

@ -143,4 +143,74 @@ describe("BankExtension", () => {
tmClient.disconnect(); tmClient.disconnect();
}); });
}); });
describe("denomMetadata", () => {
it("works for existent denom", async () => {
pendingWithoutSimapp();
const [client, tmClient] = await makeClientWithBank(simapp.tendermintUrl);
const metadata = await client.bank.denomMetadata("ucosm");
expect(metadata).toEqual({
description: "The fee token of this test chain",
denomUnits: [
{
denom: "ucosm",
exponent: 0,
aliases: [],
},
{
denom: "COSM",
exponent: 6,
aliases: [],
},
],
base: "ucosm",
display: "COSM",
name: "",
symbol: "",
});
tmClient.disconnect();
});
it("works for non-existent denom", async () => {
pendingWithoutSimapp();
const [client, tmClient] = await makeClientWithBank(simapp.tendermintUrl);
await expectAsync(client.bank.denomMetadata("nothere")).toBeRejectedWithError(/code = NotFound/i);
tmClient.disconnect();
});
});
describe("denomsMetadata", () => {
it("works", async () => {
pendingWithoutSimapp();
const [client, tmClient] = await makeClientWithBank(simapp.tendermintUrl);
const metadatas = await client.bank.denomsMetadata();
expect(metadatas.length).toEqual(1);
expect(metadatas[0]).toEqual({
description: "The fee token of this test chain",
denomUnits: [
{
denom: "ucosm",
exponent: 0,
aliases: [],
},
{
denom: "COSM",
exponent: 6,
aliases: [],
},
],
base: "ucosm",
display: "COSM",
name: "",
symbol: "",
});
tmClient.disconnect();
});
});
}); });

View File

@ -1,5 +1,6 @@
/* eslint-disable @typescript-eslint/naming-convention */ /* eslint-disable @typescript-eslint/naming-convention */
import { assert } from "@cosmjs/utils"; import { assert } from "@cosmjs/utils";
import { Metadata } from "cosmjs-types/cosmos/bank/v1beta1/bank";
import { QueryClientImpl } from "cosmjs-types/cosmos/bank/v1beta1/query"; import { QueryClientImpl } from "cosmjs-types/cosmos/bank/v1beta1/query";
import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin"; import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin";
@ -12,6 +13,8 @@ export interface BankExtension {
readonly allBalances: (address: string) => Promise<Coin[]>; readonly allBalances: (address: string) => Promise<Coin[]>;
readonly totalSupply: () => Promise<Coin[]>; readonly totalSupply: () => Promise<Coin[]>;
readonly supplyOf: (denom: string) => Promise<Coin>; readonly supplyOf: (denom: string) => Promise<Coin>;
readonly denomMetadata: (denom: string) => Promise<Metadata>;
readonly denomsMetadata: () => Promise<Metadata[]>;
}; };
} }
@ -41,6 +44,17 @@ export function setupBankExtension(base: QueryClient): BankExtension {
assert(amount); assert(amount);
return amount; return amount;
}, },
denomMetadata: async (denom: string) => {
const { metadata } = await queryService.DenomMetadata({ denom });
assert(metadata);
return metadata;
},
denomsMetadata: async () => {
const { metadatas } = await queryService.DenomsMetadata({
pagination: undefined, // Not implemented
});
return metadatas;
},
}, },
}; };
} }