diff --git a/CHANGELOG.md b/CHANGELOG.md index 9745c383a5..af3d667b53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to changes all 64 bit int fields from type `long` to `bigint`. As part of the upgrade, the types do not require the `long` and `protobufjs` anymore. ([#1484]) +- all: `gasWanted`/`gasUsed` fields were changed from type `number` to `bigint` + to supported cases where users put very high gas values in there ([#1465]). - Drop support for Node.js 14 and add support for Node.js 20. ([#1421]) - @cosmjs/tendermint-rpc: Remove `Adaptor` abstractions which are not needed anymore by haing a dedicated client for each backend. @@ -34,6 +36,7 @@ and this project adheres to `.getCometClient`/`.forceGetCometClient`. [#1421]: https://github.com/cosmos/cosmjs/issues/1421 +[#1465]: https://github.com/cosmos/cosmjs/issues/1465 [#1484]: https://github.com/cosmos/cosmjs/pull/1484 ### Deprecated diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts index ab80616b61..e3538003c5 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.ts @@ -78,8 +78,8 @@ export interface UploadResult { /** Transaction hash (might be used as transaction ID). Guaranteed to be non-empty upper-case hex */ readonly transactionHash: string; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } /** @@ -112,8 +112,8 @@ export interface InstantiateResult { /** Transaction hash (might be used as transaction ID). Guaranteed to be non-empty upper-case hex */ readonly transactionHash: string; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } /** @@ -126,8 +126,8 @@ export interface ChangeAdminResult { /** Transaction hash (might be used as transaction ID). Guaranteed to be non-empty upper-case hex */ readonly transactionHash: string; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } export interface MigrateResult { @@ -137,8 +137,8 @@ export interface MigrateResult { /** Transaction hash (might be used as transaction ID). Guaranteed to be non-empty upper-case hex */ readonly transactionHash: string; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } export interface ExecuteInstruction { @@ -154,8 +154,8 @@ export interface ExecuteResult { /** Transaction hash (might be used as transaction ID). Guaranteed to be non-empty upper-case hex */ readonly transactionHash: string; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } function createDeliverTxResponseErrorMessage(result: DeliverTxResponse): string { diff --git a/packages/stargate/src/signingstargateclient.spec.ts b/packages/stargate/src/signingstargateclient.spec.ts index 0699ad9198..496ce3a792 100644 --- a/packages/stargate/src/signingstargateclient.spec.ts +++ b/packages/stargate/src/signingstargateclient.spec.ts @@ -366,9 +366,9 @@ describe("SigningStargateClient", () => { const result = await client.signAndBroadcast(faucet.address0, [msgAny], fee, memo); assertIsDeliverTxSuccess(result); expect(result.code).toEqual(0); - expect(result.gasWanted).toEqual(222_000); - expect(result.gasUsed).toBeLessThanOrEqual(222_000); - expect(result.gasUsed).toBeGreaterThan(100_000); + expect(result.gasWanted).toEqual(222_000n); + expect(Number(result.gasUsed)).toBeLessThanOrEqual(222_000); + expect(Number(result.gasUsed)).toBeGreaterThan(100_000); }); it("returns DeliverTxFailure on DeliverTx failure", async () => { @@ -396,9 +396,9 @@ describe("SigningStargateClient", () => { const result = await client.signAndBroadcast(faucet.address0, [msgAny], fee); assertIsDeliverTxFailure(result); expect(result.code).toBeGreaterThan(0); - expect(result.gasWanted).toEqual(99_000); - expect(result.gasUsed).toBeLessThanOrEqual(99_000); - expect(result.gasUsed).toBeGreaterThan(40_000); + expect(result.gasWanted).toEqual(99_000n); + expect(Number(result.gasUsed)).toBeLessThanOrEqual(99_000); + expect(Number(result.gasUsed)).toBeGreaterThan(40_000); }); it("works with auto gas", async () => { diff --git a/packages/stargate/src/stargateclient.spec.ts b/packages/stargate/src/stargateclient.spec.ts index 2ae554465f..f4de57adde 100644 --- a/packages/stargate/src/stargateclient.spec.ts +++ b/packages/stargate/src/stargateclient.spec.ts @@ -46,8 +46,8 @@ const resultFailure: DeliverTxResponse = { transactionHash: "FDC4FB701AABD465935F7D04AE490D1EF5F2BD4B227601C4E98B57EB077D9B7D", events: [], msgResponses: [], - gasUsed: 54396, - gasWanted: 200000, + gasUsed: 54396n, + gasWanted: 200000n, }; const resultSuccess: DeliverTxResponse = { code: 0, @@ -58,8 +58,8 @@ const resultSuccess: DeliverTxResponse = { transactionHash: "C0B416CA868C55C2B8C1BBB8F3CFA233854F13A5CB15D3E9599F50CAF7B3D161", events: [], msgResponses: [], - gasUsed: 61556, - gasWanted: 200000, + gasUsed: 61556n, + gasWanted: 200000n, }; describe("isDeliverTxFailure", () => { diff --git a/packages/stargate/src/stargateclient.ts b/packages/stargate/src/stargateclient.ts index 2fca3bf98b..b48aaacc7b 100644 --- a/packages/stargate/src/stargateclient.ts +++ b/packages/stargate/src/stargateclient.ts @@ -91,8 +91,8 @@ export interface IndexedTx { * This field is an empty list for chains running Cosmos SDK < 0.46. */ readonly msgResponses: Array<{ readonly typeUrl: string; readonly value: Uint8Array }>; - readonly gasUsed: number; - readonly gasWanted: number; + readonly gasUsed: bigint; + readonly gasWanted: bigint; } export interface SequenceResponse { @@ -128,8 +128,8 @@ export interface DeliverTxResponse { * This field is an empty list for chains running Cosmos SDK < 0.46. */ readonly msgResponses: Array<{ readonly typeUrl: string; readonly value: Uint8Array }>; - readonly gasUsed: number; - readonly gasWanted: number; + readonly gasUsed: bigint; + readonly gasWanted: bigint; } export function isDeliverTxFailure(result: DeliverTxResponse): boolean { diff --git a/packages/tendermint-rpc/src/comet38/adaptor/responses.ts b/packages/tendermint-rpc/src/comet38/adaptor/responses.ts index 0791539f40..6bec2343b7 100644 --- a/packages/tendermint-rpc/src/comet38/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/comet38/adaptor/responses.ts @@ -159,8 +159,8 @@ function decodeTxData(data: RpcTxData): responses.TxData { log: data.log, data: may(fromBase64, data.data), events: data.events ? decodeEvents(data.events) : [], - gasWanted: apiToSmallInt(data.gas_wanted ?? "0"), - gasUsed: apiToSmallInt(data.gas_used ?? "0"), + gasWanted: apiToBigInt(data.gas_wanted ?? "0"), + gasUsed: apiToBigInt(data.gas_used ?? "0"), }; } diff --git a/packages/tendermint-rpc/src/comet38/responses.ts b/packages/tendermint-rpc/src/comet38/responses.ts index 5d7f83f1c5..3477ba6bf8 100644 --- a/packages/tendermint-rpc/src/comet38/responses.ts +++ b/packages/tendermint-rpc/src/comet38/responses.ts @@ -203,8 +203,8 @@ export interface TxData { readonly log?: string; readonly data?: Uint8Array; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } export interface TxProof { diff --git a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts index bc8d2051b3..b3546dd914 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts @@ -158,8 +158,8 @@ function decodeTxData(data: RpcTxData): responses.TxData { log: data.log, data: may(fromBase64, data.data), events: data.events ? decodeEvents(data.events) : [], - gasWanted: apiToSmallInt(data.gas_wanted ?? "0"), - gasUsed: apiToSmallInt(data.gas_used ?? "0"), + gasWanted: apiToBigInt(data.gas_wanted ?? "0"), + gasUsed: apiToBigInt(data.gas_used ?? "0"), }; } diff --git a/packages/tendermint-rpc/src/tendermint34/responses.ts b/packages/tendermint-rpc/src/tendermint34/responses.ts index 4dec9c5df1..77b3aee64f 100644 --- a/packages/tendermint-rpc/src/tendermint34/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/responses.ts @@ -196,8 +196,8 @@ export interface TxData { readonly log?: string; readonly data?: Uint8Array; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } export interface TxProof { diff --git a/packages/tendermint-rpc/src/tendermint37/adaptor/responses.ts b/packages/tendermint-rpc/src/tendermint37/adaptor/responses.ts index 8db6e3cb38..f0614ed49f 100644 --- a/packages/tendermint-rpc/src/tendermint37/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/tendermint37/adaptor/responses.ts @@ -159,8 +159,8 @@ function decodeTxData(data: RpcTxData): responses.TxData { log: data.log, data: may(fromBase64, data.data), events: data.events ? decodeEvents(data.events) : [], - gasWanted: apiToSmallInt(data.gas_wanted ?? "0"), - gasUsed: apiToSmallInt(data.gas_used ?? "0"), + gasWanted: apiToBigInt(data.gas_wanted ?? "0"), + gasUsed: apiToBigInt(data.gas_used ?? "0"), }; } diff --git a/packages/tendermint-rpc/src/tendermint37/responses.ts b/packages/tendermint-rpc/src/tendermint37/responses.ts index 0b8d547009..70081e2e31 100644 --- a/packages/tendermint-rpc/src/tendermint37/responses.ts +++ b/packages/tendermint-rpc/src/tendermint37/responses.ts @@ -201,8 +201,8 @@ export interface TxData { readonly log?: string; readonly data?: Uint8Array; readonly events: readonly Event[]; - readonly gasWanted: number; - readonly gasUsed: number; + readonly gasWanted: bigint; + readonly gasUsed: bigint; } export interface TxProof {