Skip to content

Commit

Permalink
Merge branch 'main' into 301-yarn2
Browse files Browse the repository at this point in the history
  • Loading branch information
willclarktech committed Jun 1, 2021
2 parents 495eec8 + 0dc7416 commit c4bd925
Show file tree
Hide file tree
Showing 54 changed files with 279 additions and 58 deletions.
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,30 @@ and this project adheres to

## [Unreleased]

### Added

- @cosmjs/tendermint-rpc: `Tendermint34Client.blockSearch` and
`Tendermint34Client.blockSearchAll` were added to allow searching blocks in
Tendermint 0.34.9+ backends.

### Changes

- @cosmjs/tendermint-rpc: Make `tendermint34.Header.lastBlockId` and
`tendermint34.Block.lastCommit` optional to better handle the case of height 1
where there is no previous block.

### Fixed

- @cosmjs/socket: Upgrade dependency "ws" to version 7 to avoid potential
security problems.

## [0.25.4] - 2021-05-31

### Fixed

- @cosmjs/socket: Upgrade dependency "ws" to version 7 to avoid potential
security problems.

## [0.25.3] - 2021-05-18

### Fixed
Expand Down Expand Up @@ -474,6 +498,7 @@ CHANGELOG entries missing. Please see [the diff][0.24.1].
- @cosmjs/sdk38: Rename package to @cosmjs/launchpad.

[unreleased]: https://github.com/cosmos/cosmjs/compare/v0.25.3...HEAD
[0.25.4]: https://github.com/cosmos/cosmjs/compare/v0.25.3...v0.25.4
[0.25.3]: https://github.com/cosmos/cosmjs/compare/v0.25.2...v0.25.3
[0.25.2]: https://github.com/cosmos/cosmjs/compare/v0.25.1...v0.25.2
[0.25.1]: https://github.com/cosmos/cosmjs/compare/v0.25.0...v0.25.1
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/amino/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/amino",
"version": "0.25.3",
"version": "0.25.4",
"description": "Helpers for Amino based signing which are shared between @cosmjs/launchpad and @cosmjs/stargate.",
"contributors": [
"Simon Warta <[email protected]>"
Expand Down
Empty file added packages/cli/nonces/1622465640
Empty file.
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/cli",
"version": "0.25.3",
"version": "0.25.4",
"description": "Command line interface",
"contributors": [
"IOV SAS <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/cosmwasm-launchpad/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/cosmwasm-launchpad",
"version": "0.25.3",
"version": "0.25.4",
"description": "CosmWasm SDK for Launchpad",
"contributors": [
"Ethan Frey <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/cosmwasm-stargate/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/cosmwasm-stargate",
"version": "0.25.3",
"version": "0.25.4",
"description": "CosmWasm SDK",
"contributors": [
"Will Clark <[email protected]>"
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/cosmwasm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/cosmwasm",
"version": "0.25.3",
"version": "0.25.4",
"description": "CosmWasm SDK",
"contributors": [
"Ethan Frey <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/crypto/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/crypto",
"version": "0.25.3",
"version": "0.25.4",
"description": "Cryptography resources for blockchain projects",
"contributors": [
"IOV SAS <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/encoding/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/encoding",
"version": "0.25.3",
"version": "0.25.4",
"description": "Encoding helpers for blockchain projects",
"contributors": [
"IOV SAS <[email protected]>"
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/faucet-client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/faucet-client",
"version": "0.25.3",
"version": "0.25.4",
"description": "The faucet client",
"contributors": [
"Will Clark <[email protected]>"
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/faucet/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/faucet",
"version": "0.25.3",
"version": "0.25.4",
"description": "The faucet",
"contributors": [
"Ethan Frey <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/json-rpc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/json-rpc",
"version": "0.25.3",
"version": "0.25.4",
"description": "Framework for implementing a JSON-RPC 2.0 API",
"contributors": [
"IOV SAS <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/launchpad/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/launchpad",
"version": "0.25.3",
"version": "0.25.4",
"description": "A client library for the Cosmos SDK 0.37 (cosmoshub-3), 0.38 and 0.39 (Launchpad)",
"contributors": [
"Ethan Frey <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/ledger-amino/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/ledger-amino",
"version": "0.25.3",
"version": "0.25.4",
"description": "A library for signing Amino-encoded transactions using Ledger devices",
"contributors": [
"Will Clark <[email protected]>"
Expand Down
Empty file added packages/math/nonces/1622465640
Empty file.
2 changes: 1 addition & 1 deletion packages/math/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/math",
"version": "0.25.3",
"version": "0.25.4",
"description": "Math helpers for blockchain projects",
"contributors": [
"IOV SAS <[email protected]>"
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/proto-signing/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/proto-signing",
"version": "0.25.3",
"version": "0.25.4",
"description": "Utilities for protobuf based signing (Cosmos SDK 0.40+)",
"contributors": [
"Will Clark <[email protected]>",
Expand Down
Empty file.
4 changes: 2 additions & 2 deletions packages/socket/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/socket",
"version": "0.25.3",
"version": "0.25.4",
"description": "Utility functions for working with WebSockets",
"contributors": [
"IOV SAS <[email protected]>",
Expand Down Expand Up @@ -43,7 +43,7 @@
"dependencies": {
"@cosmjs/stream": "workspace:packages/stream",
"isomorphic-ws": "^4.0.1",
"ws": "^6.2.0",
"ws": "^7",
"xstream": "^11.14.0"
},
"devDependencies": {
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/stargate/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/stargate",
"version": "0.25.3",
"version": "0.25.4",
"description": "Utilities for Cosmos SDK 0.40",
"contributors": [
"Simon Warta <[email protected]>"
Expand Down
10 changes: 5 additions & 5 deletions packages/stargate/src/queries/queryclient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
import { iavlSpec, ics23, tendermintSpec, verifyExistence, verifyNonExistence } from "@confio/ics23";
import { toAscii, toHex } from "@cosmjs/encoding";
import { firstEvent } from "@cosmjs/stream";
import { Header, NewBlockHeaderEvent, ProofOp, Tendermint34Client } from "@cosmjs/tendermint-rpc";
import { tendermint34, Tendermint34Client } from "@cosmjs/tendermint-rpc";
import { arrayContentEquals, assert, assertDefined, isNonNullObject, sleep } from "@cosmjs/utils";
import { Stream } from "xstream";

import { ProofOps } from "../codec/tendermint/crypto/proof";

type QueryExtensionSetup<P> = (base: QueryClient) => P;

function checkAndParseOp(op: ProofOp, kind: string, key: Uint8Array): ics23.CommitmentProof {
function checkAndParseOp(op: tendermint34.ProofOp, kind: string, key: Uint8Array): ics23.CommitmentProof {
if (op.type !== kind) {
throw new Error(`Op expected to be ${kind}, got "${op.type}`);
}
Expand Down Expand Up @@ -587,15 +587,15 @@ export class QueryClient {

// this must return the header for height+1
// throws an error if height is 0 or undefined
private async getNextHeader(height?: number): Promise<Header> {
private async getNextHeader(height?: number): Promise<tendermint34.Header> {
assertDefined(height);
if (height === 0) {
throw new Error("Query returned height 0, cannot prove it");
}

const searchHeight = height + 1;
let nextHeader: Header | undefined;
let headersSubscription: Stream<NewBlockHeaderEvent> | undefined;
let nextHeader: tendermint34.Header | undefined;
let headersSubscription: Stream<tendermint34.NewBlockHeaderEvent> | undefined;
try {
headersSubscription = this.tmClient.subscribeNewBlockHeader();
} catch {
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/stream/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/stream",
"version": "0.25.3",
"version": "0.25.4",
"description": "Utility functions for producing and consuming streams",
"contributors": [
"IOV SAS <[email protected]>",
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion packages/tendermint-rpc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@cosmjs/tendermint-rpc",
"version": "0.25.3",
"version": "0.25.4",
"description": "Tendermint RPC clients",
"contributors": [
"IOV SAS <[email protected]>",
Expand Down
18 changes: 5 additions & 13 deletions packages/tendermint-rpc/src/legacy/adaptors/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,15 @@ export const adaptor33 = v0_33;
*/
export const adaptor34 = v0_33; // With this alias we can swap out the implementation without affecting caller code.

const hashes = {
v0_34: [
"ca2c9df", // v0.34.0-rc6
"182fa32", // v0.34.0
],
};

/**
* Returns an Adaptor implementation for a given tendermint version.
* Throws when version is not supported.
*
* @param version full Tendermint version string, e.g. "0.20.1"
*/
export function adaptorForVersion(version: string): Adaptor {
if (version.startsWith("0.33.") || version.startsWith("0.34.") || hashes.v0_34.includes(version)) {
return v0_33;
} else {
throw new Error(`Unsupported tendermint version: ${version}`);
}
export function adaptorForVersion(_version: string): Adaptor {
// Note: In some cases, Tendermint 0.34 returns an empty version value.
// This supports 0.33 and 0.34 now, no matter which version you provide.
// Very soon this function becomes obsolete (https://github.com/cosmos/cosmjs/issues/789).
return v0_33;
}
2 changes: 1 addition & 1 deletion packages/tendermint-rpc/src/legacy/client.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ function defaultTestSuite(rpcFactory: () => RpcClient, adaptor: Adaptor, expecte
const status = await client.status();

// node info
expect(status.nodeInfo.version).toEqual(expected.version);
expect(status.nodeInfo.version).toMatch(expected.version);
expect(status.nodeInfo.protocolVersion).toEqual({
p2p: expected.p2pVersion,
block: expected.blockVersion,
Expand Down
2 changes: 2 additions & 0 deletions packages/tendermint-rpc/src/tendermint34/adaptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export interface Params {
readonly encodeBlock: (req: requests.BlockRequest) => JsonRpcRequest;
readonly encodeBlockchain: (req: requests.BlockchainRequest) => JsonRpcRequest;
readonly encodeBlockResults: (req: requests.BlockResultsRequest) => JsonRpcRequest;
readonly encodeBlockSearch: (req: requests.BlockSearchRequest) => JsonRpcRequest;
readonly encodeBroadcastTx: (req: requests.BroadcastTxRequest) => JsonRpcRequest;
readonly encodeCommit: (req: requests.CommitRequest) => JsonRpcRequest;
readonly encodeGenesis: (req: requests.GenesisRequest) => JsonRpcRequest;
Expand All @@ -39,6 +40,7 @@ export interface Responses {
readonly decodeAbciQuery: (response: JsonRpcSuccessResponse) => responses.AbciQueryResponse;
readonly decodeBlock: (response: JsonRpcSuccessResponse) => responses.BlockResponse;
readonly decodeBlockResults: (response: JsonRpcSuccessResponse) => responses.BlockResultsResponse;
readonly decodeBlockSearch: (response: JsonRpcSuccessResponse) => responses.BlockSearchResponse;
readonly decodeBlockchain: (response: JsonRpcSuccessResponse) => responses.BlockchainResponse;
readonly decodeBroadcastTxSync: (response: JsonRpcSuccessResponse) => responses.BroadcastTxSyncResponse;
readonly decodeBroadcastTxAsync: (response: JsonRpcSuccessResponse) => responses.BroadcastTxAsyncResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,21 @@ function encodeBlockchainRequestParams(param: requests.BlockchainRequestParams):
};
}

interface RpcBlockSearchParams {
readonly query: string;
readonly page?: string;
readonly per_page?: string;
readonly order_by?: string;
}
function encodeBlockSearchParams(params: requests.BlockSearchParams): RpcBlockSearchParams {
return {
query: params.query,
page: may(Integer.encode, params.page),
per_page: may(Integer.encode, params.per_page),
order_by: params.order_by,
};
}

interface RpcAbciQueryParams {
readonly path: string;
/** hex encoded */
Expand Down Expand Up @@ -118,6 +133,10 @@ export class Params {
return createJsonRpcRequest(req.method, encodeHeightParam(req.params));
}

public static encodeBlockSearch(req: requests.BlockSearchRequest): JsonRpcRequest {
return createJsonRpcRequest(req.method, encodeBlockSearchParams(req.params));
}

public static encodeBroadcastTx(req: requests.BroadcastTxRequest): JsonRpcRequest {
return createJsonRpcRequest(req.method, encodeBroadcastTxParams(req.params));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,15 +341,17 @@ function decodeHeader(data: RpcHeader): responses.Header {
height: Integer.parse(assertNotEmpty(data.height)),
time: fromRfc3339WithNanoseconds(assertNotEmpty(data.time)),

lastBlockId: decodeBlockId(data.last_block_id),
// When there is no last block ID (i.e. this block's height is 1), we get an empty structure like this:
// { hash: '', parts: { total: 0, hash: '' } }
lastBlockId: data.last_block_id.hash ? decodeBlockId(data.last_block_id) : null,

lastCommitHash: fromHex(assertNotEmpty(data.last_commit_hash)),
lastCommitHash: fromHex(assertSet(data.last_commit_hash)),
dataHash: fromHex(assertSet(data.data_hash)),

validatorsHash: fromHex(assertNotEmpty(data.validators_hash)),
nextValidatorsHash: fromHex(assertNotEmpty(data.next_validators_hash)),
consensusHash: fromHex(assertNotEmpty(data.consensus_hash)),
appHash: fromHex(assertNotEmpty(data.app_hash)),
validatorsHash: fromHex(assertSet(data.validators_hash)),
nextValidatorsHash: fromHex(assertSet(data.next_validators_hash)),
consensusHash: fromHex(assertSet(data.consensus_hash)),
appHash: fromHex(assertSet(data.app_hash)),
lastResultsHash: fromHex(assertSet(data.last_results_hash)),

evidenceHash: fromHex(assertSet(data.evidence_hash)),
Expand Down Expand Up @@ -765,7 +767,9 @@ interface RpcBlock {
function decodeBlock(data: RpcBlock): responses.Block {
return {
header: decodeHeader(assertObject(data.header)),
lastCommit: decodeCommit(assertObject(data.last_commit)),
// For the block at height 1, last commit is not set. This is represented in an empty object like this:
// { height: '0', round: 0, block_id: { hash: '', parts: [Object] }, signatures: [] }
lastCommit: data.last_commit.block_id.hash ? decodeCommit(assertObject(data.last_commit)) : null,
txs: data.data.txs ? assertArray(data.data.txs).map(fromBase64) : [],
evidence: data.evidence && may(decodeEvidences, data.evidence.evidence),
};
Expand All @@ -783,6 +787,18 @@ function decodeBlockResponse(data: RpcBlockResponse): responses.BlockResponse {
};
}

interface RpcBlockSearchResponse {
readonly blocks: readonly RpcBlockResponse[];
readonly total_count: string;
}

function decodeBlockSearch(data: RpcBlockSearchResponse): responses.BlockSearchResponse {
return {
totalCount: Integer.parse(assertNotEmpty(data.total_count)),
blocks: assertArray(data.blocks).map(decodeBlockResponse),
};
}

export class Responses {
public static decodeAbciInfo(response: JsonRpcSuccessResponse): responses.AbciInfoResponse {
return decodeAbciInfo(assertObject((response.result as AbciInfoResult).response));
Expand All @@ -800,6 +816,10 @@ export class Responses {
return decodeBlockResults(response.result as RpcBlockResultsResponse);
}

public static decodeBlockSearch(response: JsonRpcSuccessResponse): responses.BlockSearchResponse {
return decodeBlockSearch(response.result as RpcBlockSearchResponse);
}

public static decodeBlockchain(response: JsonRpcSuccessResponse): responses.BlockchainResponse {
return decodeBlockchain(response.result as RpcBlockchainResponse);
}
Expand Down
6 changes: 6 additions & 0 deletions packages/tendermint-rpc/src/tendermint34/hasher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ function hashTree(hashes: readonly Uint8Array[]): Uint8Array {
}

export function hashBlock(header: Header): Uint8Array {
if (!header.lastBlockId) {
throw new Error(
"Hashing a block header with no last block ID (i.e. header at height 1) is not supported. If you need this, contributions are welcome. Please add documentation and test vectors for this case.",
);
}

const encodedFields: readonly Uint8Array[] = [
encodeVersion(header.version),
encodeString(header.chainId),
Expand Down
Loading

0 comments on commit c4bd925

Please sign in to comment.