Skip to content

Commit ee0414c

Browse files
authored
Merge pull request #1679 from cosmos/run-Comet38Client-against-cometbft1
Test Comet38Client against 0.38 and 1.x backends
2 parents 5e8585c + 3c0f091 commit ee0414c

File tree

8 files changed

+80
-6
lines changed

8 files changed

+80
-6
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ and this project adheres to
66

77
## [Unreleased]
88

9+
### Added
10+
11+
- @cosmjs/tendermint-rpc: `Comet38Client` is now used to connect to CometBFT
12+
0.38 and 1.x backends ([#1679])
13+
14+
[#1679]: https://github.com/cosmos/cosmjs/pull/1679
15+
916
### Changed
1017

1118
- Replaxe axios with cross-fetch ([#1645])

HACKING.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,11 @@ order to avoid conflicts. Here is an overview of the ports used:
114114
| 4445 | socketserver slow | @cosmjs/sockets tests |
115115
| 5555 | httpserver | @cosmjs/tendermint-rpc tests |
116116
| 9090 | simapp gRPC | Manual Stargate debugging |
117+
| 11101 | Standalone CometBFT 1.x RPC | @cosmjs/tendermint-rpc tests |
117118
| 11134 | Standalone Tendermint 0.34 RPC | @cosmjs/tendermint-rpc tests |
118119
| 11135 | Standalone Tendermint 0.35 RPC | @cosmjs/tendermint-rpc tests |
119120
| 11137 | Standalone Tendermint 0.37 RPC | @cosmjs/tendermint-rpc tests |
121+
| 11138 | Standalone CometBFT 0.38 RPC | @cosmjs/tendermint-rpc tests |
120122
| 26658 | simapp Tendermint RPC | Stargate client tests |
121123
| 26659 | wasmd Tendermint RPC | @cosmjs/cosmwasm-stargate tests |
122124
| 26660 | simapp slow Tendermint RPC | Stargate client tests |

packages/tendermint-rpc/src/comet38/comet38client.spec.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ function defaultTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValues)
493493
const client = await Comet38Client.create(rpcFactory());
494494

495495
const result = await client.txSearch({ query: `tx.hash='${toHex(broadcast1.hash)}'` });
496-
expect(result.totalCount).toEqual(1);
496+
expect(result.txs.length).toEqual(1);
497497
expect(result.txs[0]).toEqual({
498498
hash: broadcast1.hash,
499499
height: broadcast1.height,
@@ -502,6 +502,10 @@ function defaultTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValues)
502502
result: broadcast1.deliverTx!,
503503
proof: undefined,
504504
});
505+
if (!expected.bug5219) {
506+
// This is broken in CometBFT 1.x (see https://github.com/cometbft/cometbft/issues/5219)
507+
expect(result.totalCount).toEqual(1);
508+
}
505509

506510
client.disconnect();
507511
});
@@ -878,7 +882,7 @@ function websocketTestSuite(rpcFactory: () => RpcClient, expected: ExpectedValue
878882
});
879883
}
880884

881-
describe("Comet38Client", () => {
885+
describe("Comet38Client with CometBFT 0.38 backend", () => {
882886
const { url, expected } = tendermintInstances[38];
883887

884888
it("can connect to a given url", async () => {
@@ -913,3 +917,39 @@ describe("Comet38Client", () => {
913917
websocketTestSuite(factory, expected);
914918
});
915919
});
920+
921+
describe("Comet38Client with CometBFT 1 backend", () => {
922+
const { url, expected } = tendermintInstances[1];
923+
924+
it("can connect to a given url", async () => {
925+
pendingWithoutTendermint();
926+
927+
// http connection
928+
{
929+
const client = await Comet38Client.connect("http://" + url);
930+
const info = await client.abciInfo();
931+
expect(info).toBeTruthy();
932+
client.disconnect();
933+
}
934+
935+
// ws connection
936+
{
937+
const client = await Comet38Client.connect("ws://" + url);
938+
const info = await client.abciInfo();
939+
expect(info).toBeTruthy();
940+
client.disconnect();
941+
}
942+
});
943+
944+
describe("With HttpClient", () => {
945+
defaultTestSuite(() => new HttpClient("http://" + url), expected);
946+
});
947+
948+
describe("With WebsocketClient", () => {
949+
// don't print out WebSocket errors if marked pending
950+
const onError = process.env.TENDERMINT_ENABLED ? console.error : () => 0;
951+
const factory = (): WebsocketClient => new WebsocketClient("ws://" + url, onError);
952+
defaultTestSuite(factory, expected);
953+
websocketTestSuite(factory, expected);
954+
});
955+
});

packages/tendermint-rpc/src/comet38/comet38client.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ type Encoder<T extends requests.Request> = (req: T) => JsonRpcRequest;
2020
// Decoder is a generic that matches all methods of Responses
2121
type Decoder<T extends responses.Response> = (res: JsonRpcSuccessResponse) => T;
2222

23+
/**
24+
* A client for the CometBFT 0.38 and 1.x RPC API
25+
*/
2326
export class Comet38Client {
2427
/**
2528
* Creates a new Tendermint client for the given endpoint.

packages/tendermint-rpc/src/tendermintclient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export async function connectComet(endpoint: string | HttpEndpoint): Promise<Com
3636
const version = (await tm37Client.status()).nodeInfo.version;
3737
if (version.startsWith("0.37.")) {
3838
out = tm37Client;
39-
} else if (version.startsWith("0.38.")) {
39+
} else if (version.startsWith("0.38.") || version.startsWith("1.0.")) {
4040
tm37Client.disconnect();
4141
out = await Comet38Client.connect(endpoint);
4242
} else {

packages/tendermint-rpc/src/testutil.spec.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ export interface ExpectedValues {
1212
readonly p2pVersion: number;
1313
readonly blockVersion: number;
1414
readonly appVersion: number;
15+
/** Affected by https://github.com/cometbft/cometbft/issues/5219 */
16+
readonly bug5219: boolean;
1517
}
1618

1719
export interface TendermintInstance {
@@ -36,7 +38,7 @@ export interface TendermintInstance {
3638
* docker container ls | grep tendermint/tendermint
3739
* docker container kill <container id from 1st column>
3840
*/
39-
export const tendermintInstances = {
41+
export const tendermintInstances: Record<number, TendermintInstance> = {
4042
34: {
4143
url: "localhost:11134",
4244
version: "0.34.x",
@@ -48,6 +50,7 @@ export const tendermintInstances = {
4850
p2pVersion: 8,
4951
blockVersion: 11,
5052
appVersion: 1,
53+
bug5219: false,
5154
},
5255
},
5356
37: {
@@ -61,6 +64,7 @@ export const tendermintInstances = {
6164
p2pVersion: 8,
6265
blockVersion: 11,
6366
appVersion: 1,
67+
bug5219: false,
6468
},
6569
},
6670
38: {
@@ -74,6 +78,21 @@ export const tendermintInstances = {
7478
p2pVersion: 8,
7579
blockVersion: 11,
7680
appVersion: 1,
81+
bug5219: false,
82+
},
83+
},
84+
1: {
85+
url: "localhost:11101",
86+
version: "1.x.y",
87+
blockTime: 500,
88+
expected: {
89+
chainId: /^dockerchain$/,
90+
version: /^1\.\d+\.\d+$/,
91+
appCreator: "Cosmoshi Netowoko",
92+
p2pVersion: 9,
93+
blockVersion: 11,
94+
appVersion: 1,
95+
bug5219: true,
7796
},
7897
},
7998
};

scripts/tendermint/all_start.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,21 @@ declare -a TM_IMAGES
99
TM_IMAGES[34]="tendermint/tendermint:v0.34.19"
1010
TM_IMAGES[37]="cometbft/cometbft:v0.37.0-rc3"
1111
TM_IMAGES[38]="cometbft/cometbft:v0.38.0"
12+
TM_IMAGES[1]="cometbft/cometbft:v1.x"
1213

1314
declare -a TM_ROOTS
1415
TM_ROOTS[34]="/tendermint"
1516
TM_ROOTS[37]="/cometbft"
1617
TM_ROOTS[38]="/cometbft"
18+
TM_ROOTS[1]="/cometbft"
1719

1820
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
1921

2022
for KEY in "${!TM_IMAGES[@]}"; do
23+
PORT=$(printf "111%02g" "$KEY") # e.g. 11101 or 11138
2124
export TENDERMINT_IMAGE="${TM_IMAGES[$KEY]}"
2225
export TENDERMINT_ROOT="${TM_ROOTS[$KEY]}"
23-
export TENDERMINT_PORT="111$KEY"
26+
export TENDERMINT_PORT="$PORT"
2427
export TENDERMINT_NAME="tendermint-$KEY"
2528

2629
echo "Starting $TENDERMINT_NAME ($TENDERMINT_IMAGE) on port $TENDERMINT_PORT ..."

scripts/tendermint/all_stop.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ command -v shellcheck >/dev/null && shellcheck "$0"
44

55
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
66

7-
for KEY in 34 37 38; do
7+
for KEY in 34 37 38 1; do
88
export TENDERMINT_NAME="tendermint-$KEY"
99

1010
echo "Stopping $TENDERMINT_NAME ..."

0 commit comments

Comments
 (0)