Use autogenerated typed queries
This commit is contained in:
parent
d7efe229e5
commit
5620bb3d80
@ -6,11 +6,24 @@ import { QueryClient } from "../queryclient";
|
||||
export interface BankExtension {
|
||||
readonly bank: {
|
||||
readonly balance: (address: string, denom: string) => Promise<cosmos.ICoin>;
|
||||
readonly balances: (address: string) => Promise<cosmos.ICoin[]>;
|
||||
readonly unverified: {
|
||||
readonly balances: (address: string) => Promise<cosmos.ICoin[]>;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
export function setupBankExtension(base: QueryClient): BankExtension {
|
||||
// Use this service to get easy typed access to query methods
|
||||
// This cannot be used to for proof verification
|
||||
const queryService = cosmos.bank.Query.create((method: any, requestData, callback) => {
|
||||
// Parts of the path are unavailable, so we hardcode them here. See https://github.com/protobufjs/protobuf.js/issues/1229
|
||||
const path = `/cosmos.bank.Query/${method.name}`;
|
||||
base
|
||||
.queryUnverified(path, requestData)
|
||||
.then((response) => callback(null, response))
|
||||
.catch((error) => callback(error));
|
||||
});
|
||||
|
||||
return {
|
||||
bank: {
|
||||
balance: async (address: string, denom: string) => {
|
||||
@ -25,14 +38,11 @@ export function setupBankExtension(base: QueryClient): BankExtension {
|
||||
const responseData = await base.queryVerified("bank", bankKey);
|
||||
return cosmos.Coin.decode(responseData);
|
||||
},
|
||||
balances: async (address: string) => {
|
||||
const path = "/cosmos.bank.Query/AllBalances";
|
||||
const request = cosmos.bank.QueryAllBalancesRequest.encode({
|
||||
address: Bech32.decode(address).data,
|
||||
}).finish();
|
||||
const responseData = await base.queryUnverified(path, request);
|
||||
const response = cosmos.bank.QueryAllBalancesResponse.decode(responseData);
|
||||
return response.balances;
|
||||
unverified: {
|
||||
balances: async (address: string) => {
|
||||
const response = await queryService.allBalances({ address: Bech32.decode(address).data });
|
||||
return response.balances;
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@ -194,7 +194,7 @@ export class StargateClient {
|
||||
|
||||
public async getBalance(address: string, searchDenom: string): Promise<Coin | null> {
|
||||
const balance = await this.queryClient.bank.balance(address, searchDenom);
|
||||
if (!balance.denom) {
|
||||
if (!balance?.denom) {
|
||||
return null;
|
||||
} else {
|
||||
return coinFromProto(balance);
|
||||
@ -208,7 +208,7 @@ export class StargateClient {
|
||||
* proofs from such a method.
|
||||
*/
|
||||
public async getAllBalancesUnverified(address: string): Promise<readonly Coin[]> {
|
||||
const balances = await this.queryClient.bank.balances(address);
|
||||
const balances = await this.queryClient.bank.unverified.balances(address);
|
||||
return balances.map(coinFromProto);
|
||||
}
|
||||
|
||||
|
||||
4
packages/stargate/types/queries/bank.d.ts
vendored
4
packages/stargate/types/queries/bank.d.ts
vendored
@ -3,7 +3,9 @@ import { QueryClient } from "../queryclient";
|
||||
export interface BankExtension {
|
||||
readonly bank: {
|
||||
readonly balance: (address: string, denom: string) => Promise<cosmos.ICoin>;
|
||||
readonly balances: (address: string) => Promise<cosmos.ICoin[]>;
|
||||
readonly unverified: {
|
||||
readonly balances: (address: string) => Promise<cosmos.ICoin[]>;
|
||||
};
|
||||
};
|
||||
}
|
||||
export declare function setupBankExtension(base: QueryClient): BankExtension;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user