From cd5bc69012d8fc5cd257e5ac7769c5550108afc3 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sat, 20 Nov 2021 10:24:33 +0100 Subject: [PATCH 1/2] Fix undefined this in decodeBroadcastTxAsync --- CHANGELOG.md | 7 +++ .../src/tendermint33/adaptor/responses.ts | 8 +-- .../tendermint33/tendermint33client.spec.ts | 59 +++++++++++++----- .../src/tendermint34/adaptor/responses.ts | 2 +- .../tendermint34/tendermint34client.spec.ts | 60 ++++++++++++++----- 5 files changed, 103 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 021ae85631..97b7ebff47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,13 @@ and this project adheres to `string` as input types for the amount. This is useful if your values exceed the safe integer range. +### Fixed + +- @cosmjs/tendermint-rpc: Fix undefined `this` in `decodeBroadcastTxAsync` and + `broadcastTxAsync` ([#937]). + +[#937]: https://github.com/cosmos/cosmjs/pull/937 + ## [0.26.4] - 2021-10-28 ### Fixed diff --git a/packages/tendermint-rpc/src/tendermint33/adaptor/responses.ts b/packages/tendermint-rpc/src/tendermint33/adaptor/responses.ts index b7e78c22bf..8ed85c3353 100644 --- a/packages/tendermint-rpc/src/tendermint33/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/tendermint33/adaptor/responses.ts @@ -121,8 +121,8 @@ function decodeEvent(event: RpcEvent): responses.Event { }; } -function decodeEvents(events: readonly RpcEvent[]): readonly responses.Event[] { - return assertArray(events).map(decodeEvent); +function decodeEvents(events: readonly RpcEvent[] | undefined): readonly responses.Event[] { + return assertArray(events ?? []).map(decodeEvent); } interface RpcTxData { @@ -130,7 +130,7 @@ interface RpcTxData { readonly log?: string; /** base64 encoded */ readonly data?: string; - readonly events: readonly RpcEvent[]; + readonly events?: readonly RpcEvent[]; } function decodeTxData(data: RpcTxData): responses.TxData { @@ -787,7 +787,7 @@ export class Responses { } public static decodeBroadcastTxAsync(response: JsonRpcSuccessResponse): responses.BroadcastTxAsyncResponse { - return this.decodeBroadcastTxSync(response); + return Responses.decodeBroadcastTxSync(response); } public static decodeBroadcastTxCommit( diff --git a/packages/tendermint-rpc/src/tendermint33/tendermint33client.spec.ts b/packages/tendermint-rpc/src/tendermint33/tendermint33client.spec.ts index ffb233a938..fee2769a34 100644 --- a/packages/tendermint-rpc/src/tendermint33/tendermint33client.spec.ts +++ b/packages/tendermint-rpc/src/tendermint33/tendermint33client.spec.ts @@ -47,22 +47,53 @@ function defaultTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValues) client.disconnect(); }); - it("can broadcast a transaction", async () => { - pendingWithoutTendermint(); - const client = await Tendermint33Client.create(rpcFactory()); - const tx = buildKvTx(randomString(), randomString()); + describe("broadcastTxCommit", () => { + it("can broadcast a transaction", async () => { + pendingWithoutTendermint(); + const client = await Tendermint33Client.create(rpcFactory()); + const tx = buildKvTx(randomString(), randomString()); - const response = await client.broadcastTxCommit({ tx: tx }); - expect(response.height).toBeGreaterThan(2); - expect(response.hash).toBeTruthy(); - // verify success - expect(response.checkTx.code).toBeFalsy(); - expect(response.deliverTx).toBeTruthy(); - if (response.deliverTx) { - expect(response.deliverTx.code).toBeFalsy(); - } + const response = await client.broadcastTxCommit({ tx: tx }); + expect(response.height).toBeGreaterThan(2); + expect(response.hash).toBeTruthy(); + // verify success + expect(response.checkTx.code).toBeFalsy(); + expect(response.deliverTx).toBeTruthy(); + if (response.deliverTx) { + expect(response.deliverTx.code).toBeFalsy(); + } - client.disconnect(); + client.disconnect(); + }); + }); + + describe("broadcastTxSync", () => { + it("can broadcast a transaction", async () => { + pendingWithoutTendermint(); + const client = await Tendermint33Client.create(rpcFactory()); + const tx = buildKvTx(randomString(), randomString()); + + const response = await client.broadcastTxSync({ tx: tx }); + expect(response.hash.length).toEqual(32); + // verify success + expect(response.code).toBeFalsy(); + + client.disconnect(); + }); + }); + + describe("broadcastTxAsync", () => { + it("can broadcast a transaction", async () => { + pendingWithoutTendermint(); + const client = await Tendermint33Client.create(rpcFactory()); + const tx = buildKvTx(randomString(), randomString()); + + const response = await client.broadcastTxAsync({ tx: tx }); + // TODO: Remove any cast after https://github.com/cosmos/cosmjs/issues/938 + expect((response as any).hash.length).toEqual(32); + + client.disconnect(); + }); }); it("gets the same tx hash from backend as calculated locally", async () => { diff --git a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts index 6943e44ecf..172f42781a 100644 --- a/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts +++ b/packages/tendermint-rpc/src/tendermint34/adaptor/responses.ts @@ -829,7 +829,7 @@ export class Responses { } public static decodeBroadcastTxAsync(response: JsonRpcSuccessResponse): responses.BroadcastTxAsyncResponse { - return this.decodeBroadcastTxSync(response); + return Responses.decodeBroadcastTxSync(response); } public static decodeBroadcastTxCommit( diff --git a/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts b/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts index 38272dc26a..58a099ac6b 100644 --- a/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts +++ b/packages/tendermint-rpc/src/tendermint34/tendermint34client.spec.ts @@ -47,22 +47,54 @@ function defaultTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValues) client.disconnect(); }); - it("can broadcast a transaction", async () => { - pendingWithoutTendermint(); - const client = await Tendermint34Client.create(rpcFactory()); - const tx = buildKvTx(randomString(), randomString()); + describe("broadcastTxCommit", () => { + it("can broadcast a transaction", async () => { + pendingWithoutTendermint(); + const client = await Tendermint34Client.create(rpcFactory()); + const tx = buildKvTx(randomString(), randomString()); - const response = await client.broadcastTxCommit({ tx: tx }); - expect(response.height).toBeGreaterThan(2); - expect(response.hash).toBeTruthy(); - // verify success - expect(response.checkTx.code).toBeFalsy(); - expect(response.deliverTx).toBeTruthy(); - if (response.deliverTx) { - expect(response.deliverTx.code).toBeFalsy(); - } + const response = await client.broadcastTxCommit({ tx: tx }); + expect(response.height).toBeGreaterThan(2); + expect(response.hash).toBeTruthy(); + // verify success + expect(response.checkTx.code).toBeFalsy(); + expect(response.deliverTx).toBeTruthy(); + if (response.deliverTx) { + expect(response.deliverTx.code).toBeFalsy(); + } - client.disconnect(); + client.disconnect(); + }); + }); + + describe("broadcastTxSync", () => { + it("can broadcast a transaction", async () => { + pendingWithoutTendermint(); + const client = await Tendermint34Client.create(rpcFactory()); + const tx = buildKvTx(randomString(), randomString()); + + const response = await client.broadcastTxSync({ tx: tx }); + expect(response.hash.length).toEqual(32); + // verify success + expect(response.code).toBeFalsy(); + expect(response.codeSpace).toBeFalsy(); + + client.disconnect(); + }); + }); + + describe("broadcastTxAsync", () => { + it("can broadcast a transaction", async () => { + pendingWithoutTendermint(); + const client = await Tendermint34Client.create(rpcFactory()); + const tx = buildKvTx(randomString(), randomString()); + + const response = await client.broadcastTxAsync({ tx: tx }); + // TODO: Remove any cast after https://github.com/cosmos/cosmjs/issues/938 + expect((response as any).hash.length).toEqual(32); + + client.disconnect(); + }); }); it("gets the same tx hash from backend as calculated locally", async () => { From 895b494f95890d74e1675193802086235ff2eea2 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sat, 20 Nov 2021 13:01:17 +0100 Subject: [PATCH 2/2] Set version 0.26.5 --- CHANGELOG.md | 5 ++++- packages/amino/package.json | 2 +- packages/cli/package.json | 2 +- packages/cosmwasm-stargate/package.json | 2 +- packages/crypto/package.json | 2 +- packages/encoding/package.json | 2 +- packages/faucet-client/package.json | 2 +- packages/faucet/package.json | 2 +- packages/json-rpc/package.json | 2 +- packages/launchpad/package.json | 2 +- packages/ledger-amino/package.json | 2 +- packages/math/package.json | 2 +- packages/proto-signing/package.json | 2 +- packages/socket/package.json | 2 +- packages/stargate/package.json | 2 +- packages/stream/package.json | 2 +- packages/tendermint-rpc/package.json | 2 +- packages/utils/package.json | 2 +- 18 files changed, 21 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97b7ebff47..6016f65239 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ and this project adheres to ## [Unreleased] +## [0.26.5] - 2021-11-20 + ### Added - @cosmjs/amino: The `coin` and `coins` helpers now support both `number` and @@ -637,7 +639,8 @@ CHANGELOG entries missing. Please see [the diff][0.24.1]. `FeeTable`. @cosmjs/cosmwasm has its own `FeeTable` with those properties. - @cosmjs/sdk38: Rename package to @cosmjs/launchpad. -[unreleased]: https://github.com/cosmos/cosmjs/compare/v0.26.4...HEAD +[unreleased]: https://github.com/cosmos/cosmjs/compare/v0.26.5...HEAD +[0.26.5]: https://github.com/cosmos/cosmjs/compare/v0.26.4...v0.26.5 [0.26.4]: https://github.com/cosmos/cosmjs/compare/v0.26.3...v0.26.4 [0.26.3]: https://github.com/cosmos/cosmjs/compare/v0.26.2...v0.26.3 [0.26.2]: https://github.com/cosmos/cosmjs/compare/v0.26.1...v0.26.2 diff --git a/packages/amino/package.json b/packages/amino/package.json index 6ba6fda0a9..1388556b52 100644 --- a/packages/amino/package.json +++ b/packages/amino/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/amino", - "version": "0.26.4", + "version": "0.26.5", "description": "Helpers for Amino based signing which are shared between @cosmjs/launchpad and @cosmjs/stargate.", "contributors": [ "Simon Warta " diff --git a/packages/cli/package.json b/packages/cli/package.json index 64adff1766..9a38b63c45 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/cli", - "version": "0.26.4", + "version": "0.26.5", "description": "Command line interface", "contributors": [ "IOV SAS ", diff --git a/packages/cosmwasm-stargate/package.json b/packages/cosmwasm-stargate/package.json index e308621549..29e18be5ee 100644 --- a/packages/cosmwasm-stargate/package.json +++ b/packages/cosmwasm-stargate/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/cosmwasm-stargate", - "version": "0.26.4", + "version": "0.26.5", "description": "CosmWasm SDK", "contributors": [ "Will Clark " diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 47a113f5e8..71f6eee124 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/crypto", - "version": "0.26.4", + "version": "0.26.5", "description": "Cryptography resources for blockchain projects", "contributors": [ "IOV SAS ", diff --git a/packages/encoding/package.json b/packages/encoding/package.json index 923f52fedb..21fe0d71d9 100644 --- a/packages/encoding/package.json +++ b/packages/encoding/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/encoding", - "version": "0.26.4", + "version": "0.26.5", "description": "Encoding helpers for blockchain projects", "contributors": [ "IOV SAS " diff --git a/packages/faucet-client/package.json b/packages/faucet-client/package.json index 6bf605ec11..7735ffb19e 100644 --- a/packages/faucet-client/package.json +++ b/packages/faucet-client/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/faucet-client", - "version": "0.26.4", + "version": "0.26.5", "description": "The faucet client", "contributors": [ "Will Clark " diff --git a/packages/faucet/package.json b/packages/faucet/package.json index cd0ee04056..51c07f1f3a 100644 --- a/packages/faucet/package.json +++ b/packages/faucet/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/faucet", - "version": "0.26.4", + "version": "0.26.5", "description": "The faucet", "contributors": [ "Ethan Frey ", diff --git a/packages/json-rpc/package.json b/packages/json-rpc/package.json index 6f25051b74..e95bcd8c32 100644 --- a/packages/json-rpc/package.json +++ b/packages/json-rpc/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/json-rpc", - "version": "0.26.4", + "version": "0.26.5", "description": "Framework for implementing a JSON-RPC 2.0 API", "contributors": [ "IOV SAS ", diff --git a/packages/launchpad/package.json b/packages/launchpad/package.json index d9bcd78a9d..12a303ea28 100644 --- a/packages/launchpad/package.json +++ b/packages/launchpad/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/launchpad", - "version": "0.26.4", + "version": "0.26.5", "description": "A client library for the Cosmos SDK 0.37 (cosmoshub-3), 0.38 and 0.39 (Launchpad)", "contributors": [ "Ethan Frey ", diff --git a/packages/ledger-amino/package.json b/packages/ledger-amino/package.json index e358350590..d2d7d8ac4c 100644 --- a/packages/ledger-amino/package.json +++ b/packages/ledger-amino/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/ledger-amino", - "version": "0.26.4", + "version": "0.26.5", "description": "A library for signing Amino-encoded transactions using Ledger devices", "contributors": [ "Will Clark " diff --git a/packages/math/package.json b/packages/math/package.json index 638e8affc9..7763777560 100644 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/math", - "version": "0.26.4", + "version": "0.26.5", "description": "Math helpers for blockchain projects", "contributors": [ "IOV SAS " diff --git a/packages/proto-signing/package.json b/packages/proto-signing/package.json index d296c9e584..532613f94d 100644 --- a/packages/proto-signing/package.json +++ b/packages/proto-signing/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/proto-signing", - "version": "0.26.4", + "version": "0.26.5", "description": "Utilities for protobuf based signing (Cosmos SDK 0.40+)", "contributors": [ "Will Clark ", diff --git a/packages/socket/package.json b/packages/socket/package.json index f092d879af..bbf6db1a3d 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/socket", - "version": "0.26.4", + "version": "0.26.5", "description": "Utility functions for working with WebSockets", "contributors": [ "IOV SAS ", diff --git a/packages/stargate/package.json b/packages/stargate/package.json index 8e81f57b37..9106c23ac1 100644 --- a/packages/stargate/package.json +++ b/packages/stargate/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/stargate", - "version": "0.26.4", + "version": "0.26.5", "description": "Utilities for Cosmos SDK 0.40", "contributors": [ "Simon Warta " diff --git a/packages/stream/package.json b/packages/stream/package.json index c28f24fe8b..0ba20e352d 100644 --- a/packages/stream/package.json +++ b/packages/stream/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/stream", - "version": "0.26.4", + "version": "0.26.5", "description": "Utility functions for producing and consuming streams", "contributors": [ "IOV SAS ", diff --git a/packages/tendermint-rpc/package.json b/packages/tendermint-rpc/package.json index d9a4be581a..d1f4a88ff1 100644 --- a/packages/tendermint-rpc/package.json +++ b/packages/tendermint-rpc/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/tendermint-rpc", - "version": "0.26.4", + "version": "0.26.5", "description": "Tendermint RPC clients", "contributors": [ "IOV SAS ", diff --git a/packages/utils/package.json b/packages/utils/package.json index ddd5f9f702..f7f6a0bdbf 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@cosmjs/utils", - "version": "0.26.4", + "version": "0.26.5", "description": "Utility tools, primarily for testing code", "contributors": [ "IOV SAS "