From cd31414e963b4dab271d8ed77c6a547867632497 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 23 Jun 2022 15:06:41 +0200 Subject: [PATCH] Add AbciQueryResponse fields --- CHANGELOG.md | 2 + .../src/tendermint34/adaptor/responses.ts | 9 ++++- .../src/tendermint34/responses.ts | 2 + .../tendermint34/tendermint34client.spec.ts | 37 ++++++++++++------- .../src/tendermint35/adaptor/responses.ts | 6 ++- .../src/tendermint35/responses.ts | 2 + .../tendermint35/tendermint35client.spec.ts | 37 ++++++++++++------- packages/tendermint-rpc/src/testutil.spec.ts | 1 + 8 files changed, 65 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f404e6c..26adc443 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ and this project adheres to - @cosmjs/stargate: Add `makeMultisignedTxBytes` which is like `makeMultisignedTx` but returns bytes ready to broadcast ([#1176]). +- @cosmjs/tendermint-rpc: Add fields `codespace` and `info` to + `AbciQueryResponse`. [#1176]: https://github.com/cosmos/cosmjs/pull/1176 diff --git a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts index f4ac865f..e292e802 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts @@ -72,11 +72,14 @@ interface RpcAbciQueryResponse { readonly key: string; /** base64 encoded */ readonly value?: string; - readonly proofOps?: RpcQueryProof; + readonly proofOps?: RpcQueryProof | null; readonly height?: string; + /** An integer; can be negative */ readonly index?: string; - readonly code?: string; // only for errors + readonly code?: number; // only for errors + readonly codespace?: string; readonly log?: string; + readonly info?: string; } function decodeAbciQuery(data: RpcAbciQueryResponse): responses.AbciQueryResponse { @@ -86,8 +89,10 @@ function decodeAbciQuery(data: RpcAbciQueryResponse): responses.AbciQueryRespons proof: may(decodeQueryProof, data.proofOps), height: may(Integer.parse, data.height), code: may(Integer.parse, data.code), + codespace: assertString(data.codespace ?? ""), index: may(Integer.parse, data.index), log: data.log, + info: assertString(data.info ?? ""), }; } diff --git a/packages/tendermint-rpc/src/tendermint34/responses.ts b/packages/tendermint-rpc/src/tendermint34/responses.ts index c9d1ec41..0e82dcb3 100644 --- a/packages/tendermint-rpc/src/tendermint34/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/responses.ts @@ -45,7 +45,9 @@ export interface AbciQueryResponse { readonly height?: number; readonly index?: number; readonly code?: number; // non-falsy for errors + readonly codespace: string; readonly log?: string; + readonly info: string; } export interface BlockResponse { diff --git a/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts b/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts index 90796cfc..679af228 100644 --- a/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts +++ b/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts @@ -9,6 +9,7 @@ import { HttpClient, RpcClient, WebsocketClient } from "../rpcclients"; import { buildKvTx, ExpectedValues, + nonNegativeIntegerMatcher, pendingWithoutTendermint, randomString, tendermintEnabled, @@ -107,23 +108,31 @@ function defaultTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValues) client.disconnect(); }); - it("can query the state", async () => { - pendingWithoutTendermint(); - const client = await Tendermint34Client.create(rpcFactory()); + describe("abciQuery", () => { + it("can query the state", async () => { + pendingWithoutTendermint(); + const client = await Tendermint34Client.create(rpcFactory()); - const key = randomString(); - const value = randomString(); - await client.broadcastTxCommit({ tx: buildKvTx(key, value) }); + const key = randomString(); + const value = randomString(); + await client.broadcastTxCommit({ tx: buildKvTx(key, value) }); - const binKey = toAscii(key); - const binValue = toAscii(value); - const queryParams = { path: "/key", data: binKey, prove: true }; - const response = await client.abciQuery(queryParams); - expect(response.key).toEqual(binKey); - expect(response.value).toEqual(binValue); - expect(response.code).toBeFalsy(); + const binKey = toAscii(key); + const binValue = toAscii(value); + const queryParams = { path: "/key", data: binKey, prove: true }; + const response = await client.abciQuery(queryParams); + expect(response.key).toEqual(binKey); + expect(response.value).toEqual(binValue); + expect(response.code).toEqual(0); + expect(response.codespace).toEqual(""); + expect(response.index).toEqual(-1); + expect(response.proof).toBeUndefined(); + expect(response.log).toEqual("exists"); + expect(response.info).toEqual(""); + expect(response.height).toMatch(nonNegativeIntegerMatcher); - client.disconnect(); + client.disconnect(); + }); }); it("can get a commit", async () => { diff --git a/packages/tendermint-rpc/src/tendermint35/adaptor/responses.ts b/packages/tendermint-rpc/src/tendermint35/adaptor/responses.ts index 3fd99ce3..d0da2ce5 100644 --- a/packages/tendermint-rpc/src/tendermint35/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/tendermint35/adaptor/responses.ts @@ -72,11 +72,13 @@ interface RpcAbciQueryResponse { readonly key: string; /** base64 encoded */ readonly value?: string; - readonly proofOps?: RpcQueryProof; + readonly proofOps?: RpcQueryProof | null; readonly height?: string; readonly index?: string; readonly code?: string; // only for errors + readonly codespace?: string; readonly log?: string; + readonly info?: string; } function decodeAbciQuery(data: RpcAbciQueryResponse): responses.AbciQueryResponse { @@ -86,8 +88,10 @@ function decodeAbciQuery(data: RpcAbciQueryResponse): responses.AbciQueryRespons proof: may(decodeQueryProof, data.proofOps), height: may(Integer.parse, data.height), code: may(Integer.parse, data.code), + codespace: assertString(data.codespace ?? ""), index: may(Integer.parse, data.index), log: data.log, + info: assertString(data.info ?? ""), }; } diff --git a/packages/tendermint-rpc/src/tendermint35/responses.ts b/packages/tendermint-rpc/src/tendermint35/responses.ts index d1e9f5a8..f03cabca 100644 --- a/packages/tendermint-rpc/src/tendermint35/responses.ts +++ b/packages/tendermint-rpc/src/tendermint35/responses.ts @@ -45,7 +45,9 @@ export interface AbciQueryResponse { readonly height?: number; readonly index?: number; readonly code?: number; // non-falsy for errors + readonly codespace: string; readonly log?: string; + readonly info: string; } export interface BlockResponse { diff --git a/packages/tendermint-rpc/src/tendermint35/tendermint35client.spec.ts b/packages/tendermint-rpc/src/tendermint35/tendermint35client.spec.ts index 833ec0c3..8a63d3c7 100644 --- a/packages/tendermint-rpc/src/tendermint35/tendermint35client.spec.ts +++ b/packages/tendermint-rpc/src/tendermint35/tendermint35client.spec.ts @@ -9,6 +9,7 @@ import { HttpClient, RpcClient, WebsocketClient } from "../rpcclients"; import { buildKvTx, ExpectedValues, + nonNegativeIntegerMatcher, pendingWithoutTendermint, randomString, tendermintEnabled, @@ -107,23 +108,31 @@ function defaultTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValues) client.disconnect(); }); - it("can query the state", async () => { - pendingWithoutTendermint(); - const client = await Tendermint35Client.create(rpcFactory()); + describe("abciQuery", () => { + it("can query the state", async () => { + pendingWithoutTendermint(); + const client = await Tendermint35Client.create(rpcFactory()); - const key = randomString(); - const value = randomString(); - await client.broadcastTxCommit({ tx: buildKvTx(key, value) }); + const key = randomString(); + const value = randomString(); + await client.broadcastTxCommit({ tx: buildKvTx(key, value) }); - const binKey = toAscii(key); - const binValue = toAscii(value); - const queryParams = { path: "/key", data: binKey, prove: true }; - const response = await client.abciQuery(queryParams); - expect(response.key).toEqual(binKey); - expect(response.value).toEqual(binValue); - expect(response.code).toBeFalsy(); + const binKey = toAscii(key); + const binValue = toAscii(value); + const queryParams = { path: "/key", data: binKey, prove: true }; + const response = await client.abciQuery(queryParams); + expect(response.key).toEqual(binKey); + expect(response.value).toEqual(binValue); + expect(response.code).toEqual(0); + expect(response.codespace).toEqual(""); + expect(response.index).toEqual(-1); + expect(response.proof).toBeUndefined(); + expect(response.log).toEqual("exists"); + expect(response.info).toEqual(""); + expect(response.height).toMatch(nonNegativeIntegerMatcher); - client.disconnect(); + client.disconnect(); + }); }); it("can get a commit", async () => { diff --git a/packages/tendermint-rpc/src/testutil.spec.ts b/packages/tendermint-rpc/src/testutil.spec.ts index 6ecdec88..c724a631 100644 --- a/packages/tendermint-rpc/src/testutil.spec.ts +++ b/packages/tendermint-rpc/src/testutil.spec.ts @@ -1,6 +1,7 @@ import { toAscii } from "@cosmjs/encoding"; import { sleep } from "@cosmjs/utils"; +export const nonNegativeIntegerMatcher = /^[0-9]+$/; export const anyMatcher = /^.*$/; // Any string, including empty. Does not do more than a type check. export interface ExpectedValues {