From 4b992fc81a29b407d8f6e77b3058f911111e21d6 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 3 Feb 2021 14:57:06 +0000 Subject: [PATCH] stargate: Update queries to use generic RPC --- packages/stargate/build/index.d.ts | 1 + packages/stargate/build/queries/index.d.ts | 1 + packages/stargate/build/queries/utils.d.ts | 6 +++++ packages/stargate/src/index.ts | 1 + packages/stargate/src/queries/auth.ts | 13 +++------- packages/stargate/src/queries/bank.ts | 13 +++------- packages/stargate/src/queries/distribution.ts | 14 ++++------- packages/stargate/src/queries/ibc.ts | 25 +++++-------------- packages/stargate/src/queries/index.ts | 1 + packages/stargate/src/queries/staking.ts | 13 +++------- packages/stargate/src/queries/utils.ts | 15 +++++++++++ 11 files changed, 48 insertions(+), 55 deletions(-) diff --git a/packages/stargate/build/index.d.ts b/packages/stargate/build/index.d.ts index 240d94dd..a8584558 100644 --- a/packages/stargate/build/index.d.ts +++ b/packages/stargate/build/index.d.ts @@ -3,6 +3,7 @@ export { parseRawLog } from "./logs"; export { AuthExtension, BankExtension, + createRpc, DistributionExtension, IbcExtension, QueryClient, diff --git a/packages/stargate/build/queries/index.d.ts b/packages/stargate/build/queries/index.d.ts index 1958b382..fde8dd68 100644 --- a/packages/stargate/build/queries/index.d.ts +++ b/packages/stargate/build/queries/index.d.ts @@ -4,3 +4,4 @@ export { BankExtension, setupBankExtension } from "./bank"; export { DistributionExtension, setupDistributionExtension } from "./distribution"; export { IbcExtension, setupIbcExtension } from "./ibc"; export { setupStakingExtension, StakingExtension } from "./staking"; +export { createRpc } from "./utils"; diff --git a/packages/stargate/build/queries/utils.d.ts b/packages/stargate/build/queries/utils.d.ts index 03fad06f..d5763391 100644 --- a/packages/stargate/build/queries/utils.d.ts +++ b/packages/stargate/build/queries/utils.d.ts @@ -1,4 +1,5 @@ import Long from "long"; +import { QueryClient } from "./queryclient"; /** * Takes a bech32 encoded address and returns the data part. The prefix is ignored and discarded. * This is called AccAddress in Cosmos SDK, which is basically an alias for raw binary data. @@ -18,3 +19,8 @@ export declare function createPagination( readonly limit: Long; readonly countTotal: boolean; }; +interface Rpc { + request(service: string, method: string, data: Uint8Array): Promise; +} +export declare function createRpc(base: QueryClient): Rpc; +export {}; diff --git a/packages/stargate/src/index.ts b/packages/stargate/src/index.ts index 240d94dd..a8584558 100644 --- a/packages/stargate/src/index.ts +++ b/packages/stargate/src/index.ts @@ -3,6 +3,7 @@ export { parseRawLog } from "./logs"; export { AuthExtension, BankExtension, + createRpc, DistributionExtension, IbcExtension, QueryClient, diff --git a/packages/stargate/src/queries/auth.ts b/packages/stargate/src/queries/auth.ts index b7be82eb..c2459213 100644 --- a/packages/stargate/src/queries/auth.ts +++ b/packages/stargate/src/queries/auth.ts @@ -5,7 +5,7 @@ import { BaseAccount } from "../codec/cosmos/auth/v1beta1/auth"; import { QueryClientImpl } from "../codec/cosmos/auth/v1beta1/query"; import { Any } from "../codec/google/protobuf/any"; import { QueryClient } from "./queryclient"; -import { toAccAddress, toObject } from "./utils"; +import { createRpc, toAccAddress, toObject } from "./utils"; export interface AuthExtension { readonly auth: { @@ -17,15 +17,10 @@ export interface AuthExtension { } export function setupAuthExtension(base: QueryClient): AuthExtension { + const rpc = createRpc(base); // Use this service to get easy typed access to query methods - // This cannot be used to for proof verification - const queryService = new QueryClientImpl({ - request: (service: string, method: string, data: Uint8Array): Promise => { - // Parts of the path are unavailable, so we hardcode them here. See https://github.com/protobufjs/protobuf.js/issues/1229 - const path = `/cosmos.auth.v1beta1.Query/${method}`; - return base.queryUnverified(path, data); - }, - }); + // This cannot be used for proof verification + const queryService = new QueryClientImpl(rpc); return { auth: { diff --git a/packages/stargate/src/queries/bank.ts b/packages/stargate/src/queries/bank.ts index cce25b48..599b7b63 100644 --- a/packages/stargate/src/queries/bank.ts +++ b/packages/stargate/src/queries/bank.ts @@ -5,7 +5,7 @@ import { assert } from "@cosmjs/utils"; import { QueryClientImpl } from "../codec/cosmos/bank/v1beta1/query"; import { Coin } from "../codec/cosmos/base/v1beta1/coin"; import { QueryClient } from "./queryclient"; -import { toAccAddress, toObject } from "./utils"; +import { createRpc, toAccAddress, toObject } from "./utils"; export interface BankExtension { readonly bank: { @@ -20,15 +20,10 @@ export interface BankExtension { } export function setupBankExtension(base: QueryClient): BankExtension { + const rpc = createRpc(base); // Use this service to get easy typed access to query methods - // This cannot be used to for proof verification - const queryService = new QueryClientImpl({ - request: (service: string, method: string, data: Uint8Array): Promise => { - // Parts of the path are unavailable, so we hardcode them here. See https://github.com/protobufjs/protobuf.js/issues/1229 - const path = `/cosmos.bank.v1beta1.Query/${method}`; - return base.queryUnverified(path, data); - }, - }); + // This cannot be used for proof verification + const queryService = new QueryClientImpl(rpc); return { bank: { diff --git a/packages/stargate/src/queries/distribution.ts b/packages/stargate/src/queries/distribution.ts index e23354a4..a803c612 100644 --- a/packages/stargate/src/queries/distribution.ts +++ b/packages/stargate/src/queries/distribution.ts @@ -14,7 +14,7 @@ import { QueryValidatorSlashesResponse, } from "../codec/cosmos/distribution/v1beta1/query"; import { QueryClient } from "./queryclient"; -import { createPagination, toObject } from "./utils"; +import { createPagination, createRpc, toObject } from "./utils"; export interface DistributionExtension { readonly distribution: { @@ -43,15 +43,11 @@ export interface DistributionExtension { } export function setupDistributionExtension(base: QueryClient): DistributionExtension { + const rpc = createRpc(base); // Use this service to get easy typed access to query methods - // This cannot be used to for proof verification - const queryService = new QueryClientImpl({ - request: (service: string, method: string, data: Uint8Array): Promise => { - // Parts of the path are unavailable, so we hardcode them here. See https://github.com/protobufjs/protobuf.js/issues/1229 - const path = `/cosmos.distribution.v1beta1.Query/${method}`; - return base.queryUnverified(path, data); - }, - }); + // This cannot be used for proof verification + const queryService = new QueryClientImpl(rpc); + return { distribution: { unverified: { diff --git a/packages/stargate/src/queries/ibc.ts b/packages/stargate/src/queries/ibc.ts index 8800e3e2..32a53579 100644 --- a/packages/stargate/src/queries/ibc.ts +++ b/packages/stargate/src/queries/ibc.ts @@ -24,7 +24,7 @@ import { QueryConnectionsResponse, } from "../codec/ibc/core/connection/v1/query"; import { QueryClient } from "./queryclient"; -import { createPagination, toObject } from "./utils"; +import { createPagination, createRpc, toObject } from "./utils"; export interface IbcExtension { readonly ibc: { @@ -89,24 +89,11 @@ export interface IbcExtension { } export function setupIbcExtension(base: QueryClient): IbcExtension { - // Use this service to get easy typed access to query methods - // This cannot be used to for proof verification - - const channelQueryService = new ChannelQuery({ - request: (service: string, method: string, data: Uint8Array): Promise => { - // Parts of the path are unavailable, so we hardcode them here. See https://github.com/protobufjs/protobuf.js/issues/1229 - const path = `/ibc.core.channel.v1.Query/${method}`; - return base.queryUnverified(path, data); - }, - }); - - const connectionQueryService = new ConnectionQuery({ - request: (service: string, method: string, data: Uint8Array): Promise => { - // Parts of the path are unavailable, so we hardcode them here. See https://github.com/protobufjs/protobuf.js/issues/1229 - const path = `/ibc.core.connection.v1.Query/${method}`; - return base.queryUnverified(path, data); - }, - }); + const rpc = createRpc(base); + // Use these services to get easy typed access to query methods + // These cannot be used for proof verification + const channelQueryService = new ChannelQuery(rpc); + const connectionQueryService = new ConnectionQuery(rpc); return { ibc: { diff --git a/packages/stargate/src/queries/index.ts b/packages/stargate/src/queries/index.ts index 5161cd5c..edac9fd3 100644 --- a/packages/stargate/src/queries/index.ts +++ b/packages/stargate/src/queries/index.ts @@ -9,3 +9,4 @@ export { BankExtension, setupBankExtension } from "./bank"; export { DistributionExtension, setupDistributionExtension } from "./distribution"; export { IbcExtension, setupIbcExtension } from "./ibc"; export { setupStakingExtension, StakingExtension } from "./staking"; +export { createRpc } from "./utils"; diff --git a/packages/stargate/src/queries/staking.ts b/packages/stargate/src/queries/staking.ts index d434e052..a054a0d2 100644 --- a/packages/stargate/src/queries/staking.ts +++ b/packages/stargate/src/queries/staking.ts @@ -20,7 +20,7 @@ import { } from "../codec/cosmos/staking/v1beta1/query"; import { BondStatus } from "../codec/cosmos/staking/v1beta1/staking"; import { QueryClient } from "./queryclient"; -import { createPagination, toObject } from "./utils"; +import { createPagination, createRpc, toObject } from "./utils"; export type BondStatusString = Exclude; @@ -73,14 +73,9 @@ export interface StakingExtension { export function setupStakingExtension(base: QueryClient): StakingExtension { // Use this service to get easy typed access to query methods - // This cannot be used to for proof verification - const queryService = new QueryClientImpl({ - request: (service: "string", method: string, data: Uint8Array): Promise => { - // Parts of the path are unavailable, so we hardcode them here. See https://github.com/protobufjs/protobuf.js/issues/1229 - const path = `/cosmos.staking.v1beta1.Query/${method}`; - return base.queryUnverified(path, data); - }, - }); + // This cannot be used for proof verification + const rpc = createRpc(base); + const queryService = new QueryClientImpl(rpc); return { staking: { diff --git a/packages/stargate/src/queries/utils.ts b/packages/stargate/src/queries/utils.ts index c7ffb923..3a06c089 100644 --- a/packages/stargate/src/queries/utils.ts +++ b/packages/stargate/src/queries/utils.ts @@ -1,6 +1,8 @@ import { Bech32 } from "@cosmjs/encoding"; import Long from "long"; +import { QueryClient } from "./queryclient"; + /** * Takes a bech32 encoded address and returns the data part. The prefix is ignored and discarded. * This is called AccAddress in Cosmos SDK, which is basically an alias for raw binary data. @@ -34,3 +36,16 @@ export function createPagination( countTotal: false, }; } + +interface Rpc { + request(service: string, method: string, data: Uint8Array): Promise; +} + +export function createRpc(base: QueryClient): Rpc { + return { + request: (service: string, method: string, data: Uint8Array): Promise => { + const path = `/${service}/${method}`; + return base.queryUnverified(path, data); + }, + }; +}