From b25171cfefa3554604315e7e90fe8fe79d223893 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 14 Apr 2021 12:35:49 +0200 Subject: [PATCH 1/4] tendermint-rpc: Add gas and code space to tx data --- .../src/tendermint34/adaptors/v0-34/responses.ts | 10 ++++++++-- packages/tendermint-rpc/src/tendermint34/responses.ts | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts b/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts index 8b721900..84c2ea33 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptors/v0-34/responses.ts @@ -126,19 +126,25 @@ function decodeEvents(events: readonly RpcEvent[]): readonly responses.Event[] { } interface RpcTxData { + readonly codespace?: string; readonly code?: number; readonly log?: string; /** base64 encoded */ readonly data?: string; readonly events?: readonly RpcEvent[]; + readonly gas_wanted?: string; + readonly gas_used?: string; } function decodeTxData(data: RpcTxData): responses.TxData { return { - data: may(fromBase64, data.data), - log: data.log, code: Integer.parse(assertNumber(optional(data.code, 0))), + codeSpace: data.codespace, + log: data.log, + data: may(fromBase64, data.data), events: data.events ? decodeEvents(data.events) : [], + gasWanted: Integer.parse(optional(data.gas_wanted, "0")), + gasUsed: Integer.parse(optional(data.gas_used, "0")), }; } diff --git a/packages/tendermint-rpc/src/tendermint34/responses.ts b/packages/tendermint-rpc/src/tendermint34/responses.ts index 229db65a..5e11184c 100644 --- a/packages/tendermint-rpc/src/tendermint34/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/responses.ts @@ -176,10 +176,12 @@ export interface Event { export interface TxData { readonly code: number; + readonly codeSpace?: string; readonly log?: string; readonly data?: Uint8Array; readonly events: readonly Event[]; - // readonly fees?: any; + readonly gasWanted: number; + readonly gasUsed: number; } export interface TxProof { From a98c310e8347763ec03ec372412c295fba49b659 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 14 Apr 2021 12:53:31 +0200 Subject: [PATCH 2/4] stargate: Return gas used --- packages/stargate/src/stargateclient.spec.ts | 3 ++- packages/stargate/src/stargateclient.ts | 16 ++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/stargate/src/stargateclient.spec.ts b/packages/stargate/src/stargateclient.spec.ts index 1d22ab83..9565df05 100644 --- a/packages/stargate/src/stargateclient.spec.ts +++ b/packages/stargate/src/stargateclient.spec.ts @@ -332,7 +332,8 @@ describe("StargateClient", () => { const txResult = await client.broadcastTx(txRawBytes); assertIsBroadcastTxSuccess(txResult); - const { rawLog, transactionHash } = txResult; + const { gasUsed, rawLog, transactionHash } = txResult; + expect(gasUsed).toBeGreaterThan(0); expect(rawLog).toMatch(/{"key":"amount","value":"1234567ucosm"}/); expect(transactionHash).toMatch(/^[0-9A-F]{64}$/); diff --git a/packages/stargate/src/stargateclient.ts b/packages/stargate/src/stargateclient.ts index cd9e0091..c442db3e 100644 --- a/packages/stargate/src/stargateclient.ts +++ b/packages/stargate/src/stargateclient.ts @@ -1,11 +1,7 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { toHex } from "@cosmjs/encoding"; import { Uint53 } from "@cosmjs/math"; -import { - BroadcastTxSyncResponse, - Tendermint34Client, - toRfc3339WithNanoseconds, -} from "@cosmjs/tendermint-rpc"; +import { Tendermint34Client, toRfc3339WithNanoseconds } from "@cosmjs/tendermint-rpc"; import { sleep } from "@cosmjs/utils"; import { Account, accountFromAny } from "./accounts"; @@ -63,6 +59,8 @@ export interface IndexedTx { readonly code: number; readonly rawLog: string; readonly tx: Uint8Array; + readonly gasUsed: number; + readonly gasWanted: number; } export interface SequenceResponse { @@ -83,6 +81,8 @@ export interface BroadcastTxSuccess { readonly transactionHash: string; readonly rawLog?: string; readonly data?: readonly MsgData[]; + readonly gasUsed: number; + readonly gasWanted: number; } export type BroadcastTxResponse = BroadcastTxSuccess | BroadcastTxFailure; @@ -303,6 +303,8 @@ export class StargateClient { height: result.height, rawLog: result.rawLog, transactionHash: txId, + gasUsed: result.gasUsed, + gasWanted: result.gasWanted, } : pollForTx(txId); }; @@ -310,7 +312,7 @@ export class StargateClient { return new Promise((resolve, reject) => this.forceGetTmClient() .broadcastTxSync({ tx }) - .then(({ hash }: BroadcastTxSyncResponse) => pollForTx(toHex(hash).toUpperCase())) + .then(({ hash }) => pollForTx(toHex(hash).toUpperCase())) .then(resolve, reject) .finally(() => clearTimeout(txPollTimeout)), ); @@ -325,6 +327,8 @@ export class StargateClient { code: tx.result.code, rawLog: tx.result.log || "", tx: tx.tx, + gasUsed: tx.result.gasUsed, + gasWanted: tx.result.gasWanted, }; }); } From 98ecbcbdbb9a16cdd1c0a2dfded2dc9a75b7d4c9 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 14 Apr 2021 12:59:15 +0200 Subject: [PATCH 3/4] cosmwasm-stargate: Return gas used --- packages/cosmwasm-stargate/src/cosmwasmclient.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/cosmwasm-stargate/src/cosmwasmclient.ts b/packages/cosmwasm-stargate/src/cosmwasmclient.ts index 80f33b38..3137e5c7 100644 --- a/packages/cosmwasm-stargate/src/cosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/cosmwasmclient.ts @@ -224,6 +224,8 @@ export class CosmWasmClient { height: result.height, rawLog: result.rawLog, transactionHash: txId, + gasUsed: result.gasUsed, + gasWanted: result.gasWanted, } : pollForTx(txId); }; @@ -382,6 +384,8 @@ export class CosmWasmClient { code: tx.result.code, rawLog: tx.result.log || "", tx: tx.tx, + gasUsed: tx.result.gasUsed, + gasWanted: tx.result.gasWanted, }; }); } From 672789e8d030d383825b53062c50b336e9adef92 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 14 Apr 2021 13:03:05 +0200 Subject: [PATCH 4/4] Update CHANGELOG for gasUsed etc --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de7e613a..49c08b41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,10 @@ and this project adheres to - @cosmjs/tendermint-rpc: Add `pubkeyToAddress`, `pubkeyToRawAddress`, `rawEd25519PubkeyToRawAddress`, and `rawSecp256k1PubkeyToRawAddress` helper functions. +- @cosmjs/stargate: `StargateClient.broadcastTx` and `.getTx` results now + include `gasUsed` and `gasWanted` properties. +- @cosmjs/cosmwasm-stargate: `CosmWasmClient.broadcastTx` and `.getTx` results + now include `gasUsed` and `gasWanted` properties. ### Changed @@ -119,6 +123,8 @@ and this project adheres to - @cosmjs/cosmwasm-stargate: `CosmWasmClient.broadcastTx` now uses sync mode and then polls for the transaction before resolving. The timeout and poll interval can be configured. +- @cosmjs/tendermint-rpc: Tendermint v34 `TxData` type now includes `codeSpace`, + `gasWanted`, and `gasUsed` properties. ### Deprecated