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 <ryan.rossiter@btcx.com>
Co-authored-by: Simon Warta <2603011+webmaster128@users.noreply.github.com>
This commit is contained in:
blorgon1 2022-05-21 03:52:40 -04:00 committed by GitHub
parent a7a266ad73
commit b63075aca1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 62 additions and 0 deletions

View File

@ -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

View File

@ -58,6 +58,8 @@ export {
NewBlockEvent,
NewBlockHeaderEvent,
NodeInfo,
NumUnconfirmedTxsRequest,
NumUnconfirmedTxsResponse,
ProofOp,
QueryProof,
QueryTag,

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;

View File

@ -16,6 +16,7 @@ export {
GenesisRequest,
HealthRequest,
Method,
NumUnconfirmedTxsRequest,
QueryTag,
Request,
StatusRequest,
@ -57,6 +58,7 @@ export {
NewBlockEvent,
NewBlockHeaderEvent,
NodeInfo,
NumUnconfirmedTxsResponse,
ProofOp,
QueryProof,
Response,

View File

@ -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;
}

View File

@ -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;

View File

@ -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();

View File

@ -213,6 +213,11 @@ export class Tendermint34Client {
return this.doCall(query, this.p.encodeHealth, this.r.decodeHealth);
}
public async numUnconfirmedTxs(): Promise<responses.NumUnconfirmedTxsResponse> {
const query: requests.NumUnconfirmedTxsRequest = { method: requests.Method.NumUnconfirmedTxs };
return this.doCall(query, this.p.encodeNumUnconfirmedTxs, this.r.decodeNumUnconfirmedTxs);
}
public async status(): Promise<responses.StatusResponse> {
const query: requests.StatusRequest = { method: requests.Method.Status };
return this.doCall(query, this.p.encodeStatus, this.r.decodeStatus);