From b63075aca18538a0c9f312dfaf43be271f5d39aa Mon Sep 17 00:00:00 2001 From: blorgon1 <102304575+blorgon1@users.noreply.github.com> Date: Sat, 21 May 2022 03:52:40 -0400 Subject: [PATCH] feat: add num_unconfirmed_txs endpoint (#1150) * feat: add num_unconfirmed_txs endpoint * fix: typos * fix: lint * fix: lint * chore: update changelog * Update CHANGELOG.md Co-authored-by: Ryan Rossiter Co-authored-by: Simon Warta <2603011+webmaster128@users.noreply.github.com> --- CHANGELOG.md | 3 +++ packages/tendermint-rpc/src/index.ts | 2 ++ .../src/tendermint34/adaptor/requests.ts | 4 ++++ .../src/tendermint34/adaptor/responses.ts | 18 ++++++++++++++++++ .../src/tendermint34/adaptor/types.ts | 2 ++ .../tendermint-rpc/src/tendermint34/index.ts | 2 ++ .../src/tendermint34/requests.ts | 6 ++++++ .../src/tendermint34/responses.ts | 6 ++++++ .../tendermint34/tendermint34client.spec.ts | 14 ++++++++++++++ .../src/tendermint34/tendermint34client.ts | 5 +++++ 10 files changed, 62 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33078bbb..f3ad03bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ and this project adheres to ### Added - @cosmjs/math: Add `Decimal.floor` and `Decimal.ceil`. +- @cosmjs/tendermint-rpc: Add `num_unconfirmed_txs` endpoint. ([#1150]) + +[#1150]: https://github.com/cosmos/cosmjs/pull/1150 ### Changed diff --git a/packages/tendermint-rpc/src/index.ts b/packages/tendermint-rpc/src/index.ts index 98515b4d..e3103a0f 100644 --- a/packages/tendermint-rpc/src/index.ts +++ b/packages/tendermint-rpc/src/index.ts @@ -58,6 +58,8 @@ export { NewBlockEvent, NewBlockHeaderEvent, NodeInfo, + NumUnconfirmedTxsRequest, + NumUnconfirmedTxsResponse, ProofOp, QueryProof, QueryTag, diff --git a/packages/tendermint-rpc/src/tendermint34/adaptor/requests.ts b/packages/tendermint-rpc/src/tendermint34/adaptor/requests.ts index 89a15fce..1dc95947 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptor/requests.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptor/requests.ts @@ -155,6 +155,10 @@ export class Params { return createJsonRpcRequest(req.method); } + public static encodeNumUnconfirmedTxs(req: requests.NumUnconfirmedTxsRequest): JsonRpcRequest { + return createJsonRpcRequest(req.method); + } + public static encodeStatus(req: requests.StatusRequest): JsonRpcRequest { return createJsonRpcRequest(req.method); } diff --git a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts index b2255d99..62ab4e09 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts @@ -785,6 +785,18 @@ function decodeBlockSearch(data: RpcBlockSearchResponse): responses.BlockSearchR }; } +interface RpcNumUnconfirmedTxsResponse { + readonly total: string; + readonly total_bytes: string; +} + +function decodeNumUnconfirmedTxs(data: RpcNumUnconfirmedTxsResponse): responses.NumUnconfirmedTxsResponse { + return { + total: Integer.parse(assertNotEmpty(data.total)), + totalBytes: Integer.parse(assertNotEmpty(data.total_bytes)), + }; +} + export class Responses { public static decodeAbciInfo(response: JsonRpcSuccessResponse): responses.AbciInfoResponse { return decodeAbciInfo(assertObject((response.result as AbciInfoResult).response)); @@ -836,6 +848,12 @@ export class Responses { return null; } + public static decodeNumUnconfirmedTxs( + response: JsonRpcSuccessResponse, + ): responses.NumUnconfirmedTxsResponse { + return decodeNumUnconfirmedTxs(response.result as RpcNumUnconfirmedTxsResponse); + } + public static decodeStatus(response: JsonRpcSuccessResponse): responses.StatusResponse { return decodeStatus(response.result as RpcStatusResponse); } diff --git a/packages/tendermint-rpc/src/tendermint34/adaptor/types.ts b/packages/tendermint-rpc/src/tendermint34/adaptor/types.ts index a57ec8d3..1558df6d 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptor/types.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptor/types.ts @@ -28,6 +28,7 @@ export interface Params { readonly encodeCommit: (req: requests.CommitRequest) => JsonRpcRequest; readonly encodeGenesis: (req: requests.GenesisRequest) => JsonRpcRequest; readonly encodeHealth: (req: requests.HealthRequest) => JsonRpcRequest; + readonly encodeNumUnconfirmedTxs: (req: requests.NumUnconfirmedTxsRequest) => JsonRpcRequest; readonly encodeStatus: (req: requests.StatusRequest) => JsonRpcRequest; readonly encodeSubscribe: (req: requests.SubscribeRequest) => JsonRpcRequest; readonly encodeTx: (req: requests.TxRequest) => JsonRpcRequest; @@ -48,6 +49,7 @@ export interface Responses { readonly decodeCommit: (response: JsonRpcSuccessResponse) => responses.CommitResponse; readonly decodeGenesis: (response: JsonRpcSuccessResponse) => responses.GenesisResponse; readonly decodeHealth: (response: JsonRpcSuccessResponse) => responses.HealthResponse; + readonly decodeNumUnconfirmedTxs: (response: JsonRpcSuccessResponse) => responses.NumUnconfirmedTxsResponse; readonly decodeStatus: (response: JsonRpcSuccessResponse) => responses.StatusResponse; readonly decodeTx: (response: JsonRpcSuccessResponse) => responses.TxResponse; readonly decodeTxSearch: (response: JsonRpcSuccessResponse) => responses.TxSearchResponse; diff --git a/packages/tendermint-rpc/src/tendermint34/index.ts b/packages/tendermint-rpc/src/tendermint34/index.ts index 3e500ff1..cb8a305d 100644 --- a/packages/tendermint-rpc/src/tendermint34/index.ts +++ b/packages/tendermint-rpc/src/tendermint34/index.ts @@ -16,6 +16,7 @@ export { GenesisRequest, HealthRequest, Method, + NumUnconfirmedTxsRequest, QueryTag, Request, StatusRequest, @@ -57,6 +58,7 @@ export { NewBlockEvent, NewBlockHeaderEvent, NodeInfo, + NumUnconfirmedTxsResponse, ProofOp, QueryProof, Response, diff --git a/packages/tendermint-rpc/src/tendermint34/requests.ts b/packages/tendermint-rpc/src/tendermint34/requests.ts index bc1e1146..e4f131c5 100644 --- a/packages/tendermint-rpc/src/tendermint34/requests.ts +++ b/packages/tendermint-rpc/src/tendermint34/requests.ts @@ -19,6 +19,7 @@ export enum Method { Commit = "commit", Genesis = "genesis", Health = "health", + NumUnconfirmedTxs = "num_unconfirmed_txs", Status = "status", Subscribe = "subscribe", Tx = "tx", @@ -38,6 +39,7 @@ export type Request = | CommitRequest | GenesisRequest | HealthRequest + | NumUnconfirmedTxsRequest | StatusRequest | TxRequest | TxSearchRequest @@ -136,6 +138,10 @@ export interface HealthRequest { readonly method: Method.Health; } +export interface NumUnconfirmedTxsRequest { + readonly method: Method.NumUnconfirmedTxs; +} + export interface StatusRequest { readonly method: Method.Status; } diff --git a/packages/tendermint-rpc/src/tendermint34/responses.ts b/packages/tendermint-rpc/src/tendermint34/responses.ts index fbbb058d..e683fe45 100644 --- a/packages/tendermint-rpc/src/tendermint34/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/responses.ts @@ -16,6 +16,7 @@ export type Response = | CommitResponse | GenesisResponse | HealthResponse + | NumUnconfirmedTxsResponse | StatusResponse | TxResponse | TxSearchResponse @@ -124,6 +125,11 @@ export interface GenesisResponse { export type HealthResponse = null; +export interface NumUnconfirmedTxsResponse { + readonly total: number; + readonly totalBytes: number; +} + export interface StatusResponse { readonly nodeInfo: NodeInfo; readonly syncInfo: SyncInfo; diff --git a/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts b/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts index ed1a3638..d9e280b6 100644 --- a/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts +++ b/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts @@ -219,6 +219,20 @@ function defaultTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValues) }); }); + describe("numUnconfirmedTxs", () => { + it("works", async () => { + pendingWithoutTendermint(); + const client = await Tendermint34Client.create(rpcFactory()); + + const response = await client.numUnconfirmedTxs(); + + expect(response.total).toBeGreaterThanOrEqual(0); + expect(response.totalBytes).toBeGreaterThanOrEqual(0); + + client.disconnect(); + }); + }); + describe("blockResults", () => { it("works", async () => { pendingWithoutTendermint(); diff --git a/packages/tendermint-rpc/src/tendermint34/tendermint34client.ts b/packages/tendermint-rpc/src/tendermint34/tendermint34client.ts index a0220eb4..282e07c8 100644 --- a/packages/tendermint-rpc/src/tendermint34/tendermint34client.ts +++ b/packages/tendermint-rpc/src/tendermint34/tendermint34client.ts @@ -213,6 +213,11 @@ export class Tendermint34Client { return this.doCall(query, this.p.encodeHealth, this.r.decodeHealth); } + public async numUnconfirmedTxs(): Promise { + const query: requests.NumUnconfirmedTxsRequest = { method: requests.Method.NumUnconfirmedTxs }; + return this.doCall(query, this.p.encodeNumUnconfirmedTxs, this.r.decodeNumUnconfirmedTxs); + } + public async status(): Promise { const query: requests.StatusRequest = { method: requests.Method.Status }; return this.doCall(query, this.p.encodeStatus, this.r.decodeStatus);