import { Rpc } from "../../../../helpers"; import { BinaryReader } from "../../../../binary"; import { QueryClient, createProtobufRpcClient } from "@cosmjs/stargate"; import { QueryClientStateRequest, QueryClientStateResponse, QueryClientStatesRequest, QueryClientStatesResponse, QueryConsensusStateRequest, QueryConsensusStateResponse, QueryConsensusStatesRequest, QueryConsensusStatesResponse, QueryClientStatusRequest, QueryClientStatusResponse, QueryClientParamsRequest, QueryClientParamsResponse, QueryUpgradedClientStateRequest, QueryUpgradedClientStateResponse, QueryUpgradedConsensusStateRequest, QueryUpgradedConsensusStateResponse } from "./query"; /** Query provides defines the gRPC querier service */ export interface Query { /** ClientState queries an IBC light client. */ clientState(request: QueryClientStateRequest): Promise; /** ClientStates queries all the IBC light clients of a chain. */ clientStates(request?: QueryClientStatesRequest): Promise; /** * ConsensusState queries a consensus state associated with a client state at * a given height. */ consensusState(request: QueryConsensusStateRequest): Promise; /** * ConsensusStates queries all the consensus state associated with a given * client. */ consensusStates(request: QueryConsensusStatesRequest): Promise; /** Status queries the status of an IBC client. */ clientStatus(request: QueryClientStatusRequest): Promise; /** ClientParams queries all parameters of the ibc client. */ clientParams(request?: QueryClientParamsRequest): Promise; /** UpgradedClientState queries an Upgraded IBC light client. */ upgradedClientState(request?: QueryUpgradedClientStateRequest): Promise; /** UpgradedConsensusState queries an Upgraded IBC consensus state. */ upgradedConsensusState(request?: QueryUpgradedConsensusStateRequest): Promise; } export class QueryClientImpl implements Query { private readonly rpc: Rpc; constructor(rpc: Rpc) { this.rpc = rpc; this.clientState = this.clientState.bind(this); this.clientStates = this.clientStates.bind(this); this.consensusState = this.consensusState.bind(this); this.consensusStates = this.consensusStates.bind(this); this.clientStatus = this.clientStatus.bind(this); this.clientParams = this.clientParams.bind(this); this.upgradedClientState = this.upgradedClientState.bind(this); this.upgradedConsensusState = this.upgradedConsensusState.bind(this); } clientState(request: QueryClientStateRequest): Promise { const data = QueryClientStateRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "ClientState", data); return promise.then(data => QueryClientStateResponse.decode(new BinaryReader(data))); } clientStates(request: QueryClientStatesRequest = { pagination: undefined }): Promise { const data = QueryClientStatesRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "ClientStates", data); return promise.then(data => QueryClientStatesResponse.decode(new BinaryReader(data))); } consensusState(request: QueryConsensusStateRequest): Promise { const data = QueryConsensusStateRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "ConsensusState", data); return promise.then(data => QueryConsensusStateResponse.decode(new BinaryReader(data))); } consensusStates(request: QueryConsensusStatesRequest): Promise { const data = QueryConsensusStatesRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "ConsensusStates", data); return promise.then(data => QueryConsensusStatesResponse.decode(new BinaryReader(data))); } clientStatus(request: QueryClientStatusRequest): Promise { const data = QueryClientStatusRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "ClientStatus", data); return promise.then(data => QueryClientStatusResponse.decode(new BinaryReader(data))); } clientParams(request: QueryClientParamsRequest = {}): Promise { const data = QueryClientParamsRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "ClientParams", data); return promise.then(data => QueryClientParamsResponse.decode(new BinaryReader(data))); } upgradedClientState(request: QueryUpgradedClientStateRequest = {}): Promise { const data = QueryUpgradedClientStateRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "UpgradedClientState", data); return promise.then(data => QueryUpgradedClientStateResponse.decode(new BinaryReader(data))); } upgradedConsensusState(request: QueryUpgradedConsensusStateRequest = {}): Promise { const data = QueryUpgradedConsensusStateRequest.encode(request).finish(); const promise = this.rpc.request("ibc.core.client.v1.Query", "UpgradedConsensusState", data); return promise.then(data => QueryUpgradedConsensusStateResponse.decode(new BinaryReader(data))); } } export const createRpcQueryExtension = (base: QueryClient) => { const rpc = createProtobufRpcClient(base); const queryService = new QueryClientImpl(rpc); return { clientState(request: QueryClientStateRequest): Promise { return queryService.clientState(request); }, clientStates(request?: QueryClientStatesRequest): Promise { return queryService.clientStates(request); }, consensusState(request: QueryConsensusStateRequest): Promise { return queryService.consensusState(request); }, consensusStates(request: QueryConsensusStatesRequest): Promise { return queryService.consensusStates(request); }, clientStatus(request: QueryClientStatusRequest): Promise { return queryService.clientStatus(request); }, clientParams(request?: QueryClientParamsRequest): Promise { return queryService.clientParams(request); }, upgradedClientState(request?: QueryUpgradedClientStateRequest): Promise { return queryService.upgradedClientState(request); }, upgradedConsensusState(request?: QueryUpgradedConsensusStateRequest): Promise { return queryService.upgradedConsensusState(request); } }; };