# CHANGELOG ## v0.39.1 *August 9th, 2024* This is a bugfix release which addresses a couple issues found in the v0.39.0 release. Users of v0.39.0 are strongly encouraged to upgrade to v0.39.1. ### BUG FIXES - Fix newly introduced `std` and `json-schema` features, and ensure all feature flag can be used independently and in isolation. ([\#1454](https://github.com/informalsystems/tendermint-rs/issues/1454)) - Remove dependency on `prost-types` as it is not needed anymore now that [#1452](https://github.com/informalsystems/tendermint-rs/pull/1452) has landed ([\#1457](https://github.com/informalsystems/tendermint-rs/pull/1457)) ## v0.39.0 *August 6th, 2024* This release bundles the `google.protobuf.Any` Protobuf type in `tendermint-proto` and brings improvements to `google.protobuf.Duration` and `google.protobuf.Timestamp`. ### FEATURES - `[tendermint-proto]` Add `Any` type under `tendermint_proto::google::protobuf::Any` ([#1445](https://github.com/informalsystems/tendermint-rs/issues/1445)) ### IMPROVEMENTS - `[tendermint-proto]` Implement `prost::Name` for `tendermint_proto::google::protobuf::{Duration, Timestamp}` ([#1452](https://github.com/informalsystems/tendermint-rs/pull/1452/)) - `[tendermint-proto]` Improve ProtoJSON serialization of `tendermint_proto::google::protobuf::{Duration, Timestamp}` ([#1452](https://github.com/informalsystems/tendermint-rs/pull/1452/)) ## v0.38.1 *July 23rd, 2024* This release enhances decoding of the `AppHash` type by trying to decode it as base64 if it fails to decode as hex. This release also updates `prost` and `prost-types` to their latest version in the `tendermint` crate, something that was missed in the v0.38.0 release. ### BREAKING CHANGES - `[tendermint]` Bump `prost` and `prost-types` to their latest versions in the `tendermint` crate. This was missed in [#1444](https://github.com/informalsystems/tendermint-rs/pull/1444), which only updated the two dependencies in `tendermint-rpc`, leading to duplicate versions of both crates to be present in the dependency graph. ([#1446](https://github.com/informalsystems/tendermint-rs/pull/1446)) ### IMPROVEMENTS - `[tendermint-rpc]` If `AppHash` fails to decode as hex, try to decode it as base64. ([\#1449](https://github.com/informalsystems/tendermint-rs/issues/1449)) ## v0.38.0 *July 15th, 2024* This release enhances `/block_results` response handling, relaxes `Block` validation, and adds support for the `/genesis_chunked` RPC endpoint. ### BREAKING CHANGES - tendermint: relax validation rules on `Block` ([\#1435](https://github.com/informalsystems/tendermint-rs/issues/1435)) - `[tendermint-proto]`: Update `prost` to v0.13 and `tonic` to v0.12 ([\#1444](https://github.com/informalsystems/tendermint-rs/pull/1444)) ### BUG - `[tendermint-rpc]` Deserialize an empty JSON object as `None` for the `consensus_param_updates` field in the `/block_results` response. Deserialize version in consensus params as `None` if it is an empty object, null or not found. ([\#1440](https://github.com/informalsystems/tendermint-rs/issues/1440)) ### FEATURES - `[tendermint-rpc]` Add support for the `/genesis_chunked` RPC endpoint ([\#1438](https://github.com/informalsystems/tendermint-rs/issues/1438)) ## v0.37.0 *May 30th, 2024* This release restores the commit verification interfaces of `PredicateVerifier` from tendermint-rs `0.35.0` and lower, but retains the performance improvements made in version `0.36.0`. This version also brings a few new features to the HTTP RPC client, notably a way to specify the User-Agent to send along HTTP requests, as well as a way to override the underlying `reqwest` client. Additionally, this release fixes a couple of issues with the `serde`-based deserialization of the `FinalizeBlock` and `Event` types. ### BREAKING CHANGES - `[tendermint-proto]` Upgrade `tonic` to v0.11 ([\#1422](https://github.com/informalsystems/tendermint-rs/pull/1422)) - `[tendermint-light-client-verifier]` Restores the commit verification interfaces of `PredicateVerifier<P, C, V>` from `<= 0.35.0` ([\#1423](https://github.com/informalsystems/tendermint-rs/pull/1423)) * `verify_commit(&self. untrusted: &UntrustedBlockState<'_>)` is restored, as in <= 0.35.0. * `verify_commit(&self, untrusted: &UntrustedBlockState<'_>, trusted: &TrustedBlockState<'_>,)` introduced in 0.36.0 is renamed to `verify_commit_against_trusted`. The performance improvements made in the `0.36.0` release are still intact. ### FEATURES * `[tendermint-rpc]` Add a way to specify custom User-Agent for `HttpClient` ([#1425](https://github.com/informalsystems/tendermint-rs/issues/1425)) - `[tendermint-rpc]` Add a `client()` method on `transport::http::Builder` to override the underlying `reqwest` client ([\#1421](https://github.com/informalsystems/tendermint-rs/pull/1421)) - `[tendermint-rpc]` Add a `from_raw_parts()` method on `transport::http::HttpClient` to allow supplying the underlying `reqwest` client ([\#1421](https://github.com/informalsystems/tendermint-rs/pull/1421)) ### BUG FIXES - `[tendermint]` Fix `FinalizeBlock::validator_updates` deserialization as `nullable` ([\#1428](https://github.com/informalsystems/tendermint-rs/pull/1428)) - `[tendermint-abci]` Add serde `default` annotation for `Event::type` to match `omitempty` in the Go implementation ([\#1416](https://github.com/informalsystems/tendermint-rs/pull/1416)) ## v0.36.0 *April 25th, 2024* This release brings substantial performance improvements to the voting power computation within the light client, improves the handling of misformed blocks (eg. with empty `last_commit` on non-first block) when decoding them from Protobuf or RPC responses, and adds missing `serde` derives on some Protobuf definitions. This release also technically contains a breaking change in `tendermint-proto`, but this should not impact normal use of the library, as the `ToPrimitive` impl that was removed on `BlockIdFlag` trait did not provide any additional functionality. ### BREAKING CHANGES - `[tendermint-proto]` Remove redundant impl of `num_traits::ToPrimitive` for `BlockIDFlag` ([\#1389](https://github.com/informalsystems/tendermint-rs/pull/1389)) - `[tendermint]` Change `EventAttribute`'s `key` and `value` fields from `String` to `Vec<u8>` for Tendermint v0.34, as enforced by the Protobuf schema for Tendermint v0.34. `tendermint::abci::EventAttribute` is now an enum, to account for version 0.34 and 0.37+, therefore the `key`, `value` and `index` fields now have to be retrieved through the `key_str()`/`key_bytes`, `value_str()`/`value_bytes()` and `index()` methods. ([\#1400](https://github.com/informalsystems/tendermint-rs/issues/1400)). - `[light-client-verifier]` Rework VerificationPredicates and VotingPowerCalculator by introducing methods which check validators and signers overlap at once. The motivation of this is to avoid checking the same signature multiple times. Consider a validator is in old and new set. Previously their signature would be verified twice. Once by call to `has_sufficient_validators_overlap` method and second time by call to `has_sufficient_signers_overlap` method. With the new interface, `has_sufficient_validators_and_signers_overlap` is called and it can be implemented to remember which signatures have been verified. As a side effect of those changes, signatures are now verified in the order of validator’s power which may further reduce number of signatures which need to be verified. ([\#1410](https://github.com/informalsystems/tendermint-rs/pull/1410)) ### FEATURES - `[tendermint-proto]` Add missing `serde` derives on Protobuf definitions ([\#1389](https://github.com/informalsystems/tendermint-rs/pull/1389)) - `[tendermint]` Add the following impls for `ed25519-consensus`: * `From<ed25519_consensus::SigningKey` for `tendermint::PrivateKey` * `From<ed25519_consensus::SigningKey>` for `tendermint::SigningKey` * `From<ed25519_consensus::VerificationKey>` for `tendermint::PublicKey` * `From<ed25519_consensus::VerificationKey>` for `tendermint::VerificationKey` ([\#1401](https://github.com/informalsystems/tendermint-rs/pull/1401)) ### IMPROVEMENTS - `[tendermint]` Allow misformed blocks (eg. with empty `last_commit` on non-first block) when decoding them from Protobuf or RPC responses ([\#1403](https://github.com/informalsystems/tendermint-rs/issues/1403)) - `[tendermint]` Check `index ≤ i32::MAX` invariant when converting `usize` into `ValidatorIndex`. ([\#1411](https://github.com/informalsystems/tendermint-rs/issues/1411)) - `[light-client-verifier]` Optimise validators lookup in `ProvidedVotingPowerCalculator::voting_power_in` method. ([\#1407](https://github.com/informalsystems/tendermint-rs/pull/1407)) - `[tendermint-light-client-verifier]` Reuse buffer used to store sign_bytes to reduce number of allocations and deallocations. ([\#1413](https://github.com/informalsystems/tendermint-rs/pull/1413)) ## v0.35.0 This release brings breaking changes related to `flex-error`, `EventAttribute` fields and `/tx_broadcast` `Response` struct, as well as a critical bug fix for `tendermint-p2p`, multiple improvements to `tendermint-rpc` and a performance optimization for `tendermint-light-client-verifier`. ### BREAKING CHANGES - Don’t enable `flex-error/eyre_tracer` feature in crates which don’t use eyre directly. If you’re using eyre, and no other crate enables it, you may need to enable that explicitly. ([\#1371](https://github.com/informalsystems/tendermint-rs/pull/1371)) - `[tendermint]` Allow null values in `key` and `value` fields of `EventAttribute` when deserializing. The serialization schema for the fields is changed to `Option<String>` ([\#1375](https://github.com/informalsystems/tendermint-rs/issues/1375)). - `[tendermint-rpc]` Add the `codespace` field to the Tx sync and async broadcast `Response` ([\#1382](https://github.com/informalsystems/tendermint-rs/issues/1382)) ### BUG FIXES - `[tendermint-p2p]` Fix data corruption on sending long messages via `SecretConnection` ([\#1393](https://github.com/informalsystems/tendermint-rs/pull/1393)) - `[tendermint-rpc]` Fix deserialization of `/block_results` response when some tx results are non-ok ([\#1391](https://github.com/informalsystems/tendermint-rs/pull/1391)) ### IMPROVEMENTS - `[tendermint-rpc]` Export the `http`, `websocket` modules under `client`, each with the public `Builder` type ([\#1378](https://github.com/informalsystems/tendermint-rs/pull/1378)). - `[tendermint-rpc]` Allow specifying a request timeout for the RPC `HttpClient`. `http::Builder` now provides a `.timeout(Duration)` method to specify the request timeout. If not specified, the default value is 30 seconds. ([\#1379](https://github.com/informalsystems/tendermint-rs/issues/1379)) - `[tendermint-rpc]` Add `FromStr`, `Serialize` and `Deserialize` instances to `CompatMode` ([\#1374](https://github.com/informalsystems/tendermint-rs/issues/1374)) - `[tendermint-light-client-verifier]` Optimizing voting power calculation by breaking the loop when we have enough voting power ([#1378](https://github.com/informalsystems/tendermint-rs/pull/1395)). ## v0.34.0 This release brings breaking changes, updating the `ExtendVote` request data structure to the changes in the CometBFT 0.38.0 release. The gRPC stack has been updated to prost 0.12 and tonic 0.10. The RPC client for HTTP has been reimplemented using `reqwest`. Support for Secp256k1 consensus keys has been added as an optional feature. ### BREAKING CHANGES - `[tendermint-proto]` Update dependencies to prost 0.12 and tonic 0.10 ([\#1349](https://github.com/informalsystems/tendermint-rs/pull/1349)) - `[tendermint-rpc]` Changed `ErrorDetail` variants ([\#1362](https://github.com/informalsystems/tendermint-rs/pull/1362)): * Removed the `Hyper` and `InvalidUri` variants. * The `Http` variant now has `Error` from `reqwest` as the source. * Added the `InvalidProxy` variant. * The `tungstenite` dependency exposed through its `Error` type in WebSocket-related variants has been updated to version 0.20.x. - `[tendermint-rpc]` Removed a `TryFrom<HttpClientUrl>` conversion for `hyper::Uri` as hyper is no longer a direct dependency ([\#1362](https://github.com/informalsystems/tendermint-rs/pull/1362)). - `[tendermint-proto]` Update `v0_38` bindings to CometFBT release 0.38.0 ([\#1365](https://github.com/informalsystems/tendermint-rs/pull/1365)). - `[tendermint]` Add fields to `abci::request::ExtendVote` to represent the fields added to the `abci.RequestExtendVote` protobuf message since the 0.38.0-rc3 release ([\#1365](https://github.com/informalsystems/tendermint-rs/pull/1365)). ### FEATURES - `[tendermint]` Add support for secp256k1 consensus keys ([\#1364](https://github.com/informalsystems/tendermint-rs/issues/1364)) ### IMPROVEMENTS - `[tendermint-rpc]` Turn non-200 HTTP response into an error instead of trying to parse the body as a JSON-RPC response ([\#1359](https://github.com/informalsystems/tendermint-rs/issues/1359)) - `[tendermint-rpc]` Make `rpc::Client` and `SubscriptionClient` traits `?Send` under `wasm32` target. ([\#1385](https://github.com/informalsystems/tendermint-rs/issues/1385)) ### SECURITY - `[tendermint-rpc]` Address the RUSTSEC-2023-0052 vulnerability by dropping dependency on `hyper-proxy` and changing the HTTP client to use `reqwest` ([\#1342](https://github.com/informalsystems/tendermint-rs/issues/1342)). ## v0.33.2 *September 18th, 2023* This release includes bug fixes and performance improvements to how CometBFT data types are serialized and deserialized. ### BREAKING CHANGES - Changed the serde schema produced by `serialize` functions in these helper modules ([\#1351](https://github.com/informalsystems/tendermint- rs/pull/1351)): * In `tendermint-proto`: - `serializers::nullable` - `serializers::optional` * In `tendermint`: - `serializers::apphash` - `serializers::hash` - `serializers::option_hash` If `serde_json` is used for serialization, the output schema does not change. But since serde is a generic framework, the changes may be breaking for other users. Overall, these changes should make the serialized data acceptable by the corresponding deserializer agnostically of the format. ### BUG FIXES - `[tendermint]` Integer overflows are prevented when calculating the total voting power value in `validator::Set` ([\#1348](https://github.com/informalsystems/tendermint-rs/issues/1348)). - `[tendermint-proto]` `Serialize` and `Deserialize` impls for `v*::crypto::PublicKey` are corrected to match the JSON schema used by other implementations ([\#1350](https://github.com/informalsystems/tendermint-rs/pull/1350)). - [`tendermint`] Fix JSON serialization of timestamp field for `CommitSig::BlockIdFlagAbsent` to match what is expected by CometBFT ([\#1352](https://github.com/informalsystems/tendermint-rs/issues/1352)) ### IMPROVEMENTS - `[tendermint-testgen]` Add `app_hash` field to testgen `Header` and implement convenient method for default `LightBlock` construction from `Header` ([\#1343](https://github.com/informalsystems/tendermint-rs/issues/1343)) - `[tendermint]` Improve and validate deserialization of `validator::Set` ([\#1348](https://github.com/informalsystems/tendermint-rs/issues/1348)). The `total_voting_power` field no longer has to be present in the format processed by `Deserialize`. If it is present, it is validated against the sum of the `voting_power` values of the listed validators. The sum value is also checked against the protocol-defined maximum. - `[tendermint-proto]` In the `Deserialize` impls derived for `v*::types::ValidatorSet`, the `total_voting_power` field value is retrieved when present. - `[tendermint-proto]` Add serialziation helper module `serializers::from_str_allow_null`. Use it to allow the `proposed_priority` field value of null in the deserialization of `v*::types::Validator`. - Corrected custom serializer helpers to consistently produce the format accepted by the deserializer. Improved performance of deserializers. ([\#1351](https://github.com/informalsystems/tendermint-rs/pull/1351)) ## v0.33.1 *Aug 29th, 2023* `tendermint-proto`: This release adds an optional `grpc-server` feature to the proto crate. When enabled the feature will include gRPC service definitions for the RPC and ABCI servers. ### FEATURES - `[tendermint-proto]` add `grpc`/`grpc-server` features to include gRPC server definitions for the RPC/ABCI services. ([#1338](https://github.com/informalsystems/tendermint-rs/issues/1338)) ## v0.33.0 This release adds support for CometBFT 0.38 protocols. In the response to the `sync_info` RPC endpoint, the data of the earliest block are exposed to the client. ### BREAKING CHANGES - `[tendermint]` Adaptations for CometFBT 0.38 ([\#1312](https://github.com/informalsystems/tendermint-rs/pull/1312)): * Define `consensus::params::AbciParams` struct, add the `abci` field of this type to `consensus::Params` to represent the protobuf additions. * Change the `abci::Request` and `abci::Response` reexports to use the enums defined in `v0_38`. - `[tendermint]` Define version-specific categorized request/response enums: `ConsensusRequest`, `MempoolRequest`, `InfoRequest`, `ShapshotRequest`, `ConsensusResponse`, `MempoolResponse`, `InfoResponse`, `ShapshotResponse`, in each of the `v0_*::abci` modules, so that the variants are trimmed to the requests/responses used by the respective protocol version. Reexport the types from `v0_38::abci` as aliases for these names in the `abci` module, continuing the naming as used in older API. ([\#1312](https://github.com/informalsystems/tendermint-rs/pull/1312)). - `[tendermint]` Rename `Signature::to_bytes` to `Signature::into_bytes` ([\#1312](https://github.com/informalsystems/tendermint-rs/pull/1312)). - `[tendermint-abci]` Update the `Application` interface to CometBFT 0.38 ([\#1312](https://github.com/informalsystems/tendermint-rs/pull/1312)) - `[tendermint-rpc]` Changes to support the RPC protocol in CometBFT 0.38 ([\#1317](https://github.com/informalsystems/tendermint-rs/pull/1317)): * Add `finalize_block_results` and `app_hash` fields to `endpoint::block_results::Response`. * The `deliver_tx` field is renamed to `tx_result` in `endpoint::broadcast::tx_commit::Response`. * The `tx_result` field type changed to `ExecTxResult` in `endpoint::tx::Response`. * The `event::EventData::NewBlock` variant is renamed to `LegacyNewBlock`. The new `NewBlock` variant only carries fields relevant since CometBFT 0.38. * Removed `event::DialectEvent`, replaced with non-generic serialization helpers in `event::{v0_34, v0_37, v0_38}`. The `Deserialize` helpers in the latter two modules are aliased from common types that can support both fields added in CometBFT 0.38, `block_id` and `result_finalize_block`, as well as the fields present 0.37. Likewise for `DialectEventData` and other event data structure types. * Changed some of the serialization dialect helpers to only be used by the 0.34 dialect and remove generics. The current dialect's seralization is switched to the serde impls on the domain types in `tendermint`. - `[tendermint]` Changes to support the RPC protocol in CometBFT 0.38 ([\#1317](https://github.com/informalsystems/tendermint-rs/pull/1317)): * Due to some attribute changes, the format emitted by `Serialize` is changed for `abci::response` types `CheckTx` and `FinalizeBlock`. - [`tendermint-rpc`] Decode the earliest block data fields of the `sync_info` object in `/status` response and expose them in the `SyncInfo` struct: `earliest_block_hash`, `earliest_app_hash`, `earliest_block_height`, `earliest_block_time` ([\#1321](https://github.com/informalsystems/tendermint-rs/pull/1321)). - `[tendermint-proto]` Align the return signature of the `encode_vec` and `encode_length_delimited_vec` methods in the `Protobuf` trait with `prost::Message` by directly returning `Vec<u8>`. ([\#1323](https://github.com/informalsystems/tendermint-rs/issues/1323)) * Remove mandatory cloning in `Protobuf` methods and let callers decide on clone beforehand for original value access ### IMPROVEMENTS - `[tendermint-proto]` Generate prost bindings for CometBFT 0.38 under the `tendermint::v0_38` module ([\#1312](https://github.com/informalsystems/tendermint-rs/pull/1312)) - `[tendermint]` Support for CometBFT 0.38: ([\#1312](https://github.com/informalsystems/tendermint-rs/pull/1312)): * Add conversions to and from `tendermint::v0_38` protobuf types generated in [`tendermint-proto`]. * Add request and response enums under `v0_38::abci` to enumerate all requests and responses appropriate for CometBFT version 0.38. * Add request and response types under `abci` to represent the requests and responses new to ABCI++ 2.0 in CometBFT version 0.38. The names are `ExtendVote`, `FinalizeBlock`, `VerifyVoteExtension`. - `[tendermint-rpc]` Support for CometBFT 0.38 ([\#1317](https://github.com/informalsystems/tendermint-rs/pull/1317)): * `Deserialize` implementations on `abci::Event`, `abci::EventAttribute` that correspond to the current RPC serialization. * Domain types under `abci::response` also get `Deserialize` implementations corresponding to the current RPC serialization. * `Serialize`, `Deserialize` implementations on `abci::types::ExecTxResult` corresponding to the current RPC serialization. * Added the `apphash_base64` serializer module. ## v0.32.2 Fixed a minor cargo metadata problem that gummed up the 0.32.1 release. ## v0.32.1 Fixed a bug with processing the `latest_block_result` endpoint result in the RPC client set to the 0.34 compatibility mode. ### BUG FIXES - `[tendermint-rpc]` Use compatibility mode in implementations of the `Client::latest_block_results` method ([\#1326](https://github.com/informalsystems/tendermint-rs/pull/1326)) ## v0.32.0 *May 3rd, 2023* This release notably comes with a fully featured [light client attack detector][attack-detector], and introduces a [CLI for the light client][light-client-cli] for verifying headers, detecting attacks against the light client, and reporting the evidence to primary and witness nodes. It also adds a [`Verifier::verify_misbehaviour_header`][verifier-method] method for verifying headers coming from a misbehaviour evidence. Moreover, the [`Client`][client-trait] trait is now exposed by the `tendermint-rpc` without requiring the `http-client` or the `websocket-client` feature flags to be enabled. [light-client-cli]: https://github.com/informalsystems/tendermint-rs/tree/main/light-client-cli [attack-detector]: https://github.com/informalsystems/tendermint-rs/tree/main/light-client-detector [verifier-method]: https://github.com/informalsystems/tendermint-rs/blob/6a4cd245b6f362832b974104b40be973dd0ef108/light-client-verifier/src/verifier.rs#L67 [client-trait]: https://github.com/informalsystems/tendermint-rs/blob/6a4cd245b6f362832b974104b40be973dd0ef108/rpc/src/client.rs#L49 ### BREAKING CHANGES - [`tendermint-light-client-verifier`] Rename `Verifier::verify` to `Verifier::verify_update_header` to better describe its purpose versus `Verifier::verify_misbehaviour_header` ([\#1294](https://github.com/informalsystems/tendermint-rs/issues/1294)) ### FEATURES - [`tendermint-light-client-detector`] Implement a light client attack detector, based on its Go version found in Comet ([\#1291](https://github.com/informalsystems/tendermint-rs/issues/1291)) - [`tendermint-light-client-verifier`] Add `Verifier::verify_misbehaviour_header` for verifying headers coming from a misbehaviour evidence. The verification for these headers is a bit more relaxed in order to catch FLA attacks. In particular the "header in the future" check for the header should be skipped. ([\#1294](https://github.com/informalsystems/tendermint-rs/issues/1294)) ### IMPROVEMENTS - [`tendermint-rpc`]: Export `Client` trait unconditionally, without having to specify either the `http-client` or `websocket-client` ([\#1235](https://github.com/informalsystems/tendermint-rs/issues/1235)) - [`tendermint`]: Loosen bounds of merkle hashing functions to accept borrowed data. ([\#1310](https://github.com/informalsystems/tendermint-rs/issues/1310)) ## v0.31.1 *April 17th, 2023* Expose the `TypedEvent` marker trait. ### FEATURES - Expose the `tendermint::abci::event::TypedEvent ([\#1288](https://github.com/informalsystems/tendermint-rs/pull/1288)) ## v0.31.0 *April 16th, 2023* Upgrade signature crate versions and add a `TypedEvent` trait for ABCI events. ### BREAKING CHANGES * `[tendermint, tendermint-p2p]` Bump `ed25519` to v2, `k256` to v0.13, and `signature` to v2 ### IMPROVEMENTS - [`tendermint`] Adds a new `TypedEvent` for encoding structured data in ABCI events ([\#1288](https://github.com/informalsystems/tendermint-rs/pull/1288)). - [`tools/proto-compiler`] Parse and fetch proto dependencies as listed in the `buf.lock` file ([\#1293](https://github.com/informalsystems/tendermint-rs/pull/1293)). ## v0.30.0 *March 7th, 2023* This release introduces support for multiple versions of CometBFT protocols. Consumers of tendermint-rs crates, with the exception of `tendermint-abci`, should be able to interoperate with CometBFT nodes based on 0.34.x and 0.37.x releases, or a combination of these. ### BREAKING CHANGES - [`tendermint`] Version-specific definitions for ABCI `Request` and `Response` enums under `v0_34::abci` and `v0_37::abci`, containing only the method variants present in each of the respective protocol versions. `Request` and `Response` defined under `v0_37` are re-exported under the non-versioned `abci` module name, but the `SetOption` variant is not present in these latest versions of the enums. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)) - [`tendermint-abci`] Change the frame length encoding in the ABCI wire protocol to unsigned varint, to correspond to the changes in Tendermint Core 0.37. No compatibility with 0.34 is provided at the moment. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)) - [`tendermint-rpc`] Changed the signature of `WebSocketClient::new_with_config` to accept a `WebSocketConfig` struct value rather than an `Option`. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)) - [`tendermint-proto`] The `serializers::evidence` module has been made private. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)) - [`tendermint-rpc`] Bump `async-tungstenite` dependency version to 0.20, re-exporting `WebSocketConfig` from `tungstenite` 0.18 ([\#1276](https://github.com/informalsystems/tendermint-rs/pull/1276)). ### IMPROVEMENTS - [`tendermint-proto`] Generate prost bindings for Tendermint 0.34 and 0.37 side by side. The version-specific structs are placed under the `tendermint::v0_34` and `tendermint::v0_37` module namespaces, respectively. The names under `tendermint::v0_37` are also re-exported under `tendermint`. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)) - [`tendermint`] New and updated ABCI domain types for Tendermint Core v0.37 ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)). - [`tendermint`] Protobuf conversions provided for both `v0_34` and `v0_37` versions of the generated [`tendermint-proto`] structs, where applicable. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)). - [`tendermint-rpc`] Introduce `client::CompatMode`, enumerating protocol compatibility modes specifying the RPC data encoding used by the client. An `HttpClient` can be created with a selected mode specified in the new `builder` API, or have the mode changed afterwards (usually after version discovery) by the added `set_compat_mode` method. For `WebSocketClient`, the mode can only be specified at creation via the new `builder` API. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)) - [`tendermint-abci`] Port ABCI application support to 0.37 Tendermint Core API. No legacy support for 0.34 is provided at the moment. ([#1193](https://github.com/informalsystems/tendermint-rs/pull/1193)). - Derive `Hash` on `tendermint::Time` ([#1278](https://github.com/informalsystems/tendermint-rs/issues/1278)) - [`tendermint-light-client`] Show `max_clock_drift` in error raised when header is from the future ([\#1280](https://github.com/informalsystems/tendermint-rs/issues/1280)) ## v0.29.1 *February 27th, 2023* Improve debug output for Ed25519 keys. ### BUG FIXES - `[tendermint]` Restore hex-formatting in debug output of Ed25519 keys. ([#1272](https://github.com/informalsystems/tendermint-rs/pull/1272)) ## v0.29.0 *Feb 17th, 2023* This release features modularity improvements for the cryptographic routines, as well as fixes related to block verification and the use of a consensus-friendly ed25519 crate. ### BREAKING CHANGES - `[tendermint]` Make implementations of cryptographic primitives replaceable ([#1238](https://github.com/informalsystems/tendermint-rs/pull/1238)). * Provide a `Sha256` trait in module `crypto` and make digest hashing implementations available through it. * Provide a `Verifier` trait in module `crypto::signature` to enable alternative implementations of signature verification available through it. An `Error` enum is defined in the same module, representing the error cases that can arise in the implementation in a deliberately opaque way. * The module `crypto::default` provides pure Rust implementations of the cryptographic traits. The module is made available by a new `rust-crypto` feature, enabled by default. * `merkle::simple_hash_from_byte_vectors` is made generic over an implementation of the new `MerkleHash` trait. Implementations for Rust-Crypto conformant digest objects and the non-incremental `crypto::Sha256` API are provided in the crate. * The `Header::hash` and `ValidatorSet::hash` methods are gated by the `rust-crypto` feature. Generic hashing methods not dependent on the default crypto implementations are added for both types, named `hash_with`. * Conversions to `account::Id` and `node::Id` from `PublicKey` and curve-specific key types are gated by the `rust-crypto` feature. * The `validator::Info::new` method is gated by the `rust-crypto` feature. * Remove a deprecated constant `signature::ED25519_SIGNATURE_SIZE`. - `[tendermint-light-client-verifier]` Changes for the new Tendermint crypto API ([#1238](https://github.com/informalsystems/tendermint-rs/pull/1238)). * The `rust-crypto` feature, enabled by default, guards the batteries-included implementation types: `ProdVerifier`, `ProdPredicates`, `ProdVotingPowerCalculator`. * Remove the `operations::hasher` API (`Hasher` and `ProdHasher`), made unnecessary by the new crypto abstractions in the `tendermint` crate. * The `VerificationPredicates` trait features a `Sha256` associated type to represent the hasher implementation, replacing the `&dyn Hasher` parameter passed to methods. * Change the type of the `VerificationErrorDetail::FaultySigner` field `validator_set` to `ValidatorSet`. This removes a hasher dependency from `CommitValidator`, and `ProdCommitValidator` is now an empty dummy type. - `[tendermint-light-client]` Changes for the new Tendermint crypto API ([#1238](https://github.com/informalsystems/tendermint-rs/pull/1238)). * The `rust-crypto` feature enables the default crypto implementations, and is required by the `rpc-client` and `unstable` features. `ProdForkDetector` is guarded by this feature, and is made a specific type alias to the hasher-generic `ProvidedForkDetector` type. * `LightClientBuilder` gets another type parameter for the Merkle hasher. Its generic constructors lose the `Hasher` parameter. ### BUG FIXES - `[tendermint-light-client]` Fix verification of blocks between two trusted heights ([#1246](https://github.com/informalsystems/tendermint-rs/issues/1246)) ### DEPENDENCIES - `[tendermint, tendermint-p2p]` Replaced the `ed25519-dalek` dependency with `ed25519-consensus` ([#1046](https://github.com/informalsystems/tendermint-rs/pull/1046)) ### IMPROVEMENTS - Update all crates to the [2021 edition](https://doc.rust- lang.org/edition-guide/rust-2021/index.html) of the Rust language ([#1262](https://github.com/informalsystems/tendermint-rs/issues/1262)) ## v0.28.0 *Dec 13, 2022* This is primarily a security-related release, and although it's a breaking release, the breaking changes are relatively minor. It is highly recommended that all tendermint-rs light client users upgrade to this version immediately. ### BREAKING - `[tendermint-light-client-verifier]` Add `is_matching_chain_id` method to the `VerificationPredicates` trait - `[tendermint-light-client-verifier]` Add a `chain_id` field to the `TrustedBlockState` struct ### IMPROVEMENTS - `[tendermint-light-client-js]` Switch to serde-wasm-bindgen for marshalling JS values ([#1242](https://github.com/informalsystems/tendermint-rs/pull/1242)) ### SECURITY - `[tendermint-light-client]` Fix an issue where the light client was not checking that the chain ID of the trusted and untrusted headers match ## v0.27.0 *Nov 28, 2022* Following on from the ABCI domain type-related work in v0.26.0, this release deduplicates types across the `tendermint` and `tendermint-rpc` crates, and makes better use of our domain types across the crates (a big thanks to @mzabaluev here!). @romac helped make the RPC query interface more ergonomic, and @hu55a1n1 implemented Rust equivalents for Tendermint Go's [VerifyCommitLight](https://github.com/tendermint/tendermint/blob/a6dd0d270abc3c01f223eedee44d8b285ae273f6/types/validator_set.go#L722) and [VerifyCommitLightTrusting](https://github.com/tendermint/tendermint/blob/a6dd0d270abc3c01f223eedee44d8b285ae273f6/types/validator_set.go#L775) methods for the light client. Some additional convenience methods for the `Time` type were provided by @scalalang2. ### BREAKING CHANGES - `[tendermint]` Change hash fields' type from `Bytes` ([#1095](https://github.com/informalsystems/tendermint-rs/issues/1095)): | Struct | Field | Type | | ------------------------------ | --------------------- | --------- | | `abci::request::OfferSnapshot` | `app_hash` | `AppHash` | | `abci::response::Info` | `last_block_app_hash` | `AppHash` | | `abci::response::InitChain` | `app_hash` | `AppHash` | | `Genesis` | `app_hash` | `AppHash` | - `[tendermint]` Remove method `AppHash::value`, replaced with non-allocating `AppHash::as_bytes` [#1232](https://github.com/informalsystems/tendermint-rs/pull/1232). - `[tendermint-rpc]` Remove ABCI-related types, change the affected field types to standard Rust types or ABCI domain types in `[tendermint]`. ([#1090](https://github.com/informalsystems/tendermint-rs/issues/1090)) - `[tendermint-rpc]` Extract the `key` field from `query::Condition` and structure a `query::Condition` to have `key` and `operation` fields, since the `key` field is common to all conditions ([#1230](https://github.com/informalsystems/tendermint-rs/issues/1230)) - `[tendermint]` Rename `merkle::proof::Proof` to `ProofOps` ([#1234](https://github.com/informalsystems/tendermint-rs/pull/1234)) - `[tendermint-rpc]` Change the type of `/tx` response field `proof` to `tendermint::tx::Proof` ([#1233](https://github.com/informalsystems/tendermint-rs/issues/1233)) ### IMPROVEMENTS - `[tendermint]` Added `Time` methods `unix_timestamp` and `unix_timestamp_nanos`. ([#1175](https://github.com/informalsystems/tendermint-rs/issues/1175)) - `[light-client]` Added `validate`, `validate_against_trusted`, `verify_commit` and `verify_commit_against_trusted` methods to `PredicateVerifier`. ([#1222](https://github.com/informalsystems/tendermint-rs/issues/1222)) - `[tendermint-rpc]` Make `tendermint_rpc::Query`'s fields public and add a `Condition::key(&self) -> &str` method ([#1230](https://github.com/informalsystems/tendermint-rs/issues/1230)) - `[tendermint]` Add domain types `merkle::Proof` and `tx::Proof`, to represent protobuf messages `crypto.Proof` and `types.TxProof` respectively ([#1234](https://github.com/informalsystems/tendermint-rs/pull/1234)) ## v0.26.0 *Oct 31, 2022* The highlight of this release is the addition of domain types specifically for ABCI. Previously, Rust-based Tendermint application developers would have had to exclusively rely on the generated Protobuf types. Many thanks to @hdevalence for the heavy lifting on this, and to @mzabaluev for the porting work after the Tendermint v0.35 retraction! While we will endeavour to keep this API as stable as possible, we know that we will have to evolve it over the coming months to reduce duplication of functionality and types across the ABCI module and RPC crate, so please expect further breaking changes in subsequent breaking releases. ### BREAKING CHANGES - `[tendermint]` Added domain types for ABCI ([#862](https://github.com/informalsystems/tendermint-rs/issues/862)) - `[tendermint-proto]` Use `Bytes` for byte array fields of ABCI protobuf types. ([#1203](https://github.com/informalsystems/tendermint-rs/pull/1203)) ### BUG FIXES - `[tendermint-rpc]` The encoding of the `hash` field for requests to the `/block_by_hash` endpoint has been changed to base64 (from hex) to accommodate discrepancies in how the Tendermint RPC encodes this field for different RPC interfaces ([#942](https://github.com/informalsystems/tendermint-rs/issues/942)) - Allow a `TrustThresholdFraction` of 1 ([#1208](https://github.com/informalsystems/tendermint-rs/issues/1208)) ### ENHANCEMENTS - `[tendermint-abci]` Deprecate `Client::set_option`. ([#1203](https://github.com/informalsystems/tendermint-rs/pull/1203)) ### FEATURES - `[tendermint-rpc]` Add support for the `/block_by_hash` RPC endpoint. See <https://docs.tendermint.com/master/rpc/#/Info/block_by_hash> for details ([#832](https://github.com/informalsystems/tendermint-rs/issues/832)). ## v0.25.0 *Sep 23, 2022* This release follows from v0.23.9, with the v0.24 series skipped due to Tendermint Core [abandoning the v0.35 and v0.36 releases](https://github.com/informalsystems/tendermint-rs/discussions/1179). As such, it is a non-breaking change, and removes the need to pin one's tendermint-rs dependencies to a specific version (as was the case for the v0.23 series). This release still targets compatibility with Tendermint Core v0.34, and specifically provides compatibility with v0.34.21. ### BUG FIXES - `[tendermint-rpc]` Fix deserialization of `/block_results` response when it contains evidence for a duplicate vote ([#1194](https://github.com/informalsystems/tendermint-rs/issues/1194)) ### DEPENDENCIES - Unpin `time` dependency ([#1199](https://github.com/informalsystems/tendermint-rs/pull/1199)) ### ENHANCEMENTS - `[proto]` Do not generate types in `google::protobuf` ([#1188](https://github.com/informalsystems/tendermint-rs/issues/1188)). - Add support for [Tendermint Core v0.34.21](https://github.com/tendermint/tendermint/blob/v0.34.21/CHANGELOG.md#v03421), which primarily involves a small addition to the configuration file ([#1198](https://github.com/informalsystems/tendermint-rs/pull/1198)) ## v0.23.9 *Aug 5, 2022* This minor release adds Basic authentication support for HTTP and WebSocket RPC clients, in addition to some dependency updates. We had to restrict our `time` dependency for some crates to a version range of `>=0.3, <0.3.12` due to what seems to be a recent issue in `js-sys` causing our no\_std support to break. We will undo this restriction as soon as the issue is resolved. ### DEPENDENCIES - `[rpc]` Update async-tungstenite dependency to 0.17 ([#1165](https://github.com/informalsystems/tendermint-rs/issues/1165)). - Update Prost to v0.11 ([#1171](https://github.com/informalsystems/tendermint-rs/pull/1171)) ### FEATURES - `[tendermint-rpc]` Add support for HTTP Basic authentication to HTTP and WebSocket RPC clients ([#1169](https://github.com/informalsystems/tendermint-rs/issues/1169)) ## v0.23.8 *Jul 22, 2022* This release focuses on ensuring compatibility with Tendermint v0.34.20, which introduces a [prioritized mempool](https://github.com/tendermint/tendermint/blob/main/docs/architecture/adr-067-mempool-refactor.md). As per the release notes for `v0.23.8-pre.1`, this has a minor additive impact on the ABCI and RPC interfaces in the fields that the `CheckTx` response contains. This release also contains some important dependency updates and minor bug fixes. ### BUG FIXES - `[tools/proto-compiler]` Annotate serde to fall back to `Default` for the omitted fields when deserializing `tendermint_proto::abci::ResponseInfo` struct, also providing deserialization for the response at the `/abci_info` RPC endpoint. ([#1132](https://github.com/informalsystems/tendermint-rs/issues/1132)) ### DEPENDENCIES - Update `k256` to v0.11 ([#1153](https://github.com/informalsystems/tendermint-rs/issues/1153)) ### ENHANCEMENTS - `[tendermint-proto,tendermint-rpc,tools]` Update to ensure compatibility with Tendermint v0.34.20 ([#1159](https://github.com/informalsystems/tendermint-rs/issues/1159)) ## v0.23.8-pre.1 *Jun 29, 2022* This pre-release targets Tendermint v0.34.20-rc0, which introduces a prioritized mempool. This has a minor additive impact on the ABCI and RPC interfaces in the fields that the `CheckTx` response contains. Pre-releases will continue along this line until v0.34.20 is released. ### FEATURES - `[tendermint-proto]` Regenerate protos from Tendermint v0.34.20-rc0, including prioritized mempool fields in `ResponseCheckTx` ([#1148](https://github.com/informalsystems/tendermint-rs/issues/1148)) - `[tendermint-rpc]` Update `broadcast_tx_*` result to include prioritized new mempool fields available from v0.34.20-rc0 ([#1148](https://github.com/informalsystems/tendermint-rs/issues/1148)) ## v0.23.7 *Apr 25, 2022* A minor update to use the latest version of `prost`. ### DEPENDENCIES - Update `prost` to v0.10 ([#1113](https://github.com/informalsystems/tendermint- rs/issues/1113)) ## v0.23.6 *Mar 29, 2022* A minor release that allows for a small UX improvement in the usage of the `Client::genesis()` call in `tendermint-rpc`. ### DEPENDENCIES - `[tendermint-light-client]` Upgrade [`contracts`](https://crates.io/crates/contracts) dependency to v0.6.2 ([#1097](https://github.com/informalsystems/tendermint-rs/pull/1097)) ### IMPROVEMENTS - `[tendermint-rpc]` Allow users to specify the `AppState` type in the `Client::genesis()` function. ([#1106](https://github.com/informalsystems/tendermint-rs/issues/1106)) ## v0.23.5 *Jan 13, 2022* A single breaking change is provided by this release in order to move us closer toward `no_std` support in both tendermint-rs and ibc-rs. ### BREAKING CHANGES - `[tendermint-light-client]` Split out the verification functionality from the `tendermint-light-client` crate into its own `no_std`-compatible crate: `tendermint-light-client-verifier`. This helps move us closer to `no_std` compliance in both tendermint-rs and ibc-rs ([#1027](https://github.com/informalsystems/tendermint-rs/issues/1027)) ## v0.23.4 *Jan 11, 2022* This release exclusively focuses on removing `native-tls`/`openssl` from the dependency tree and replacing it with `rustls`. This was previously incorrectly configured in our `hyper-proxy` dependency. ### DEPENDENCIES - `[tendermint-rpc]`: Switch `hyper-proxy` to use `rustls`, eliminating the only use of `native-tls` in tendermint-rs dependencies ([#1068](https://github.com/informalsystems/tendermint-rs/pull/1068)) ## v0.23.3 *Dec 20, 2021* Here we mainly attempt to provide a short-term workaround for [\#1021](https://github.com/informalsystems/tendermint-rs/issues/1021) by catering for both possible forms of JSON serialization for public keys. ### IMPROVEMENTS - `[tendermint]` `Hash` is implemented for `tendermint::Time` ([#1054](https://github.com/informalsystems/tendermint-rs/pull/1054)) ### WORKAROUNDS - `[tendermint-rpc]` Allow deserialization of public keys from validator updates from `block_results` endpoint in multiple JSON formats until this is fixed in Tendermint ([#1021](https://github.com/informalsystems/tendermint-rs/issues/1021)) ## v0.23.2 *Dec 7, 2021* This release focuses on the removal of [`chrono`](https://crates.io/crates/chrono) as our primary dependency for dealing with time, and replaces it with the [`time`](https://crates.io/crates/time) crate. This is necessarily a breaking change, but is released as v0.23.2 as per our current [versioning scheme](https://github.com/informalsystems/tendermint-rs#versioning). ### BREAKING CHANGES - `[tendermint]` Reform `tendermint::Time` ([#1030](https://github.com/informalsystems/tendermint-rs/issues/1030)): * The struct content is made private. * The range of acceptable values is restricted to years 1-9999 (as reckoned in UTC). * Removed conversions from/to `chrono::DateTime<chrono::Utc>`. * Changes in error variants: removed `TimestampOverflow`, replaced with `TimestampNanosOutOfRange`; removed `ChronoParse`, replaced with `TimeParse`. - `[tendermint-rpc]` Use `OffsetDateTime` and `Date` types provided by the `time` crate in query operands instead of their `chrono` counterparts. ([#1030](https://github.com/informalsystems/tendermint-rs/issues/1030)) ### IMPROVEMENTS - `[tendermint]` Deprecated `signature::ED25519_SIGNATURE_SIZE` in favor of `Ed25519Signature::BYTE_SIZE` ([#1023](https://github.com/informalsystems/tendermint-rs/issues/1023)) - Remove dependencies on the `chrono` crate. ([#1030](https://github.com/informalsystems/tendermint-rs/issues/1030)) - `[tendermint]` Improve `tendermint::Time` ([#1036](https://github.com/informalsystems/tendermint-rs/issues/1036), revised by [#1048](https://github.com/informalsystems/tendermint-rs/pull/1048)): * Restrict the validity range of `Time` to dates with years in the range 1-9999, to match the specification of protobuf message `Timestamp`. Add an `ErrorDetail` variant `DateOutOfRange` to report when this restriction is not met. * Added a conversion to, and a fallible conversion from, `OffsetDateTime` of the `time` crate. ## v0.23.1 *Nov 15, 2021* Minor bug fixes. ### BUG FIXES - `[tools/proto-compiler]` Fixed our proto-compiler, which was producing protos that did not compile due to an incorrect Prost field annotation ([#1014](https://github.com/informalsystems/tendermint-rs/issues/1014)) - `[tendermint]` The `tendermint::node::Id` `Display` implementation now prints the hexadecimal string in lowercase ([#971](https://github.com/informalsystems/tendermint-rs/issues/971)) ## v0.23.0 *Oct 27, 2021* The main changes in this release involve upgrading to [Prost v0.9](https://github.com/tokio-rs/prost/releases/tag/v0.9.0) and some foundational changes to prepare for `no_std` support for some of our crates. One of the main `no_std`-related changes in this release was to break out configuration-related data structures from the `tendermint` crate into their own crate (`tendermint-config`) as these structures depend on other crates which do not yet support `no_std`. ### BREAKING CHANGES - Upgraded Prost to the official v0.9 release to finally resolve the security issue introduced by v0.7 ([#925](https://github.com/informalsystems/tendermint-rs/issues/925)) - `[tendermint, tendermint-config]` The `tendermint::config` module has now been broken out into its own crate (`tendermint- config`) to help towards facilitating `no_std` compatibility ([#983](https://github.com/informalsystems/tendermint-rs/issues/983)) - `[tendermint]` The `tendermint::node::info::OtherInfo::rpc_address` field type has been changed from `tendermint::net::Address` to `String` toward facilitating `no_std` compatibility ([#983](https://github.com/informalsystems/tendermint-rs/issues/983)) - `[tendermint]` The `tendermint::node::info::ListenAddress::to_net_address` method was replaced with a simple `as_str` method toward facilitating `no_std` compatibility ([#983](https://github.com/informalsystems/tendermint- rs/issues/983)) ### FEATURES - `[tendermint-rpc]` Add support for the `/block_search` RPC endpoint. See <https://docs.tendermint.com/v0.34.x/rpc/\#/Info/block_search> for details ([#832](https://github.com/informalsystems/tendermint-rs/issues/832)) ## v0.22.0 *Sep 23, 2021* This release targets numerous issues largely in support of [ibc-rs](https://github.com/informalsystems/ibc-rs). The major breaking change in this regard is in the [API](https://github.com/informalsystems/tendermint-rs/blob/dd371372da58921efe1b48a4dd24a2597225df11/light-client/src/components/verifier.rs#L143) we use to perform verification in the `tendermint-light-client` crate. Toward `no_std` compatibility and flexibility in the way we handle error tracing and reporting, we have also refactored the entire error handling system in `tendermint-rs` to make use of [flex-error](https://github.com/informalsystems/flex-error). Finally, we are also (painfully) aware of the fact that our documentation does not build for this release and apologize for this. We currently still depend on Prost v0.7.0 and are awaiting a new release of Prost after v0.8.0 that does not break our builds. We have [\#978](https://github.com/informalsystems/tendermint-rs/pull/978) open in preparation for this upgrade and will release a new version of `tendermint-rs` as soon as a new Prost release is available. See below for more specific detail as to what has changed in this release. ### BREAKING CHANGES - All crates' error handling has been refactored to make use of [`flex-error`](https://github.com/informalsystems/flex-error/). This gives users greater flexibility in terms of the error handling/reporting systems they want to use and is a critical step towards `no_std` support. ([#923](https://github.com/informalsystems/tendermint-rs/pull/923)) - `[tendermint-rpc]` The `/tx` endpoint's `Request::hash` field has been changed from `String` to `tendermint::abci::transaction::Hash` ([#942](https://github.com/informalsystems/tendermint-rs/issues/942)) - `[tendermint-light-client]` The light client verification functionality has been refactored (including breaking changes to the API) such that it can be more easily used from both `tendermint_light_client` and `ibc-rs` ([#956](https://github.com/informalsystems/tendermint-rs/issues/956)) - `[tendermint-light-client]` Disable the `lightstore-sled` feature by default ([#976](https://github.com/informalsystems/tendermint-rs/issues/976)) ### BUG FIXES - `[tendermint-rpc]` The encoding of the `hash` field for requests to the `/tx` endpoint has been changed to base64 (from hex) to accommodate discrepancies in how the Tendermint RPC encodes this field for different RPC interfaces ([#942](https://github.com/informalsystems/tendermint-rs/issues/942)) ### FEATURES - `[tendermint-rpc]` Add support for the `/consensus_params` RPC endpoint. See <https://docs.tendermint.com/v0.34.x/rpc/\#/Info/consensus_params> for details ([#832](https://github.com/informalsystems/tendermint-rs/issues/832)) - `[tendermint-rpc]` Runtime query parsing (relevant to the `/subscribe` and `/tx_search` endpoints) has been reintroduced. This allows for client-side validation of queries prior to submitting them to a remote Tendermint node. An example of how to use this is available in the `tendermint-rpc` CLI (see [the README](https://github.com/informalsystems/tendermint-rs/tree/main/rpc#cli) for details). ([#859](https://github.com/informalsystems/tendermint-rs/issues/859)) - `[tendermint, tendermint-light-client]` Add support for Secp256k1 signatures ([#939](https://github.com/informalsystems/tendermint-rs/issues/939)) ### IMPROVEMENTS - `[tendermint-p2p]` The `SecretConnection` can now be split into two halves to facilitate full-duplex communication (must be facilitated by using each half in a separate thread). ([#938](https://github.com/informalsystems/tendermint-rs/pull/938)) - `[tendermint-light-client]` Model-based tests are now disabled by default and can be enabled through the `mbt` feature ([#968](https://github.com/informalsystems/tendermint-rs/issues/968)) - `[tendermint, tendermint-rpc]` Derive `Eq` on `SignedHeader` and `Commit` ([#969](https://github.com/informalsystems/tendermint-rs/issues/969)) - `[tendermint-light-client]` Add `WebSocketClient::new_with_config` to specify the WebSocket connection settings ([#974](https://github.com/informalsystems/tendermint-rs/issues/974)) - `[tendermint-p2p]` Amino support is now implemented using the upstream `prost` crate, eliminating a dependency on `prost-amino` ([#979](https://github.com/informalsystems/tendermint-rs/pull/979)) ## v0.21.0 *Jul 20, 2021* This release introduces several minor breaking changes (see below), among other improvements, that clean up a few RPC-related data structures and ensure better correctness of the `TrustThresholdFraction` data structure when constructing and deserializing it. A [security issue](https://github.com/informalsystems/tendermint-rs/issues/925) was reported in `prost` v0.7, and we attempted to upgrade to v0.8, but we are still awaiting one [bug fix](https://github.com/tokio-rs/prost/issues/502) in v0.8 before we can upgrade. The moment that is fixed in `prost`, we will upgrade to v0.8 and provide another `tendermint-rs` release. ### BREAKING CHANGES - `[tendermint-rpc]` Remove the `TmEvent` and `Attribute` structs and replace them with their equivalent domain types from the `tendermint` crate ([#918](https://github.com/informalsystems/tendermint-rs/issues/918)) - `[tendermint]` The `TrustThresholdFraction` struct can now only be constructed by way of its `new` constructor. Deserialization also now makes use of this constructor, facilitating better validation. The `numerator` and `denominator` fields can be accessed (read-only) via their respective methods, since the fields are now private. ([#924](https://github.com/informalsystems/tendermint-rs/issues/924)) ### BUG FIXES - `[tendermint]` Update Genesis for Tendermint v.0.34.x ([#917](https://github.com/informalsystems/tendermint-rs/pull/917)) - `[tendermint-rpc]` Fix bug where `NewBlock` events emitted by Tendermint could not be parsed because of a missing field ([#930](https://github.com/informalsystems/tendermint-rs/issues/930)) ### IMPROVEMENTS - `[tendermint-proto]` Regenerate the Rust equivalents of the Tendermint Protobuf structures for Tendermint v0.34.9 ([#871](https://github.com/informalsystems/tendermint-rs/issues/871)) - `[tendermint-rpc]` Add `PartialEq`, `Eq`, `PartialOrd`, `Ord` and `Hash` trait bounds to the RPC URL types ([#919](https://github.com/informalsystems/tendermint-rs/issues/919)) - `[tendermint-rpc]` Propagate JSON-RPC errors through the Rust subscription ([#932](https://github.com/informalsystems/tendermint-rs/issues/932)) ## v0.20.0 *Jun 22, 2021* This release's number is bumped up to v0.20.0 due to two minor breaking changes in our public APIs (see the breaking changes section below for details). Also, since nobody was really making use of the Light Node, we decided to remove its crate from the repo for now. If anyone needs it back, please contact us and we'll restore it (although, we are considering migrating any and all binaries to their own repositories in the future to separate library-level concerns from operational ones). The `tendermint-p2p` crate is still undergoing significant expansion (thanks to @xla and @melekes). A lot's been done and we're in the process of finalizing this new architecture, which will form the basis for future work towards building more Tendermint nodes in Rust. More on this in future releases. Other than that, this release mainly contains various small bug fixes, improvements and dependency updates. ### BREAKING CHANGES * `[tendermint-p2p]` Remove superfluous module name suffixes in `p2p::error` ([#898](https://github.com/informalsystems/tendermint-rs/pull/898)) * `[tendermint]` Rename `time::Time::to_rfc3339` to `as_rfc3339` to be consistent with Rust's [self reference conventions](https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention) ([#910](https://github.com/informalsystems/tendermint-rs/pull/910)) ### BUG FIXES * `[tendermint-abci,tendermint-rpc]` Fix DeliverTx response deserialization issues with `gas_wanted` and `gas_used` fields ([#876](https://github.com/informalsystems/tendermint-rs/issues/876)) * `[tendermint]` Update TendermintConfig for Tendermint v.0.34.x ([#897](https://github.com/informalsystems/tendermint-rs/issues/897)) * `[tendermint]` Better handling of optional values in TendermintConfig ([#908](https://github.com/informalsystems/tendermint-rs/issues/908)) ### IMPROVEMENTS * `[tendermint-light-client]` Replaced `tempdir` dev dependency (deprecated) with `tempfile` ([#851](https://github.com/informalsystems/tendermint-rs/issues/851)) * Updated the changelog process to use [unclog](https://github.com/informalsystems/unclog) format and unblock the PR merge process ([#891](https://github.com/informalsystems/tendermint-rs/pull/891)). * `[tendermint]` Changed `tendermint::public_key::Secp256k1` to be an alias of `k256::ecdsa::VerifyingKey` ([#900](https://github.com/informalsystems/tendermint-rs/pull/900)) ### REMOVED * `[tendermint-light-node]` We removed the `light-node` crate from the repo since nobody's currently really using it. If anyone needs please log an issue and we'll restore it. It will, of course, remain accessible in the [repo history](https://github.com/informalsystems/tendermint-rs/tree/f207ecc0a7c071a54d63f159794b16a216741b38) for now. ([#879](https://github.com/informalsystems/tendermint-rs/issues/879)) ## v0.19.0 *Apr 7, 2021* This release primarily aims to enhance RPC and Light Client functionality, thereby improving [`ibc-rs`] and fixing an important bug affecting the Light Client ([#831]). The RPC now supports TLS 1.2+ connections (through the use of [`rustls`]), allowing for secure HTTP and WebSocket connections, as well as HTTP/HTTPS proxies. This implies that the Light Client now also supports these types of connections. We additionally introduce two new crates: * `tendermint-abci` - A lightweight, minimal framework for building Tendermint [ABCI] applications in Rust. * `tendermint-light-client-js` - Exposes the Light Client's `verify` method to JavaScript/WASM. This implies that, for now, you need to bring your own networking functionality to practically make use of the Light Client's verification mechanisms. Various relatively minor breaking API changes were introduced, and are listed below. ### BREAKING CHANGES * `[tendermint]` The `tendermint::block::CommitSig` enum's members have been renamed to be consistent with Rust's naming conventions. For example, `BlockIDFlagAbsent` is now renamed to `BlockIdFlagAbsent` ([#839]) * `[tendermint-light-client]` The Light Client no longer uses `tendermint::net::Address` to refer to peers, and instead uses the `tendermint_rpc::Url` type ([#835]) * `[tendermint-rpc]` The `Client::validators` method now requires a `Paging` parameter. Previously, this wasn't possible and, if the network had more than 30 validators (the default for the RPC endpoint), it only returned a subset of the validators ([#831]) * `[tendermint-rpc]` The `Client::validators` method now requires a `Paging` parameter. Previously, this wasn't possible and, if the network had more than 30 validators (the default for the RPC endpoint), it only returned a subset of the validators ([#831]) * `[tendermint-rpc]` The `SubscriptionClient` trait now requires a `close` method, since it assumes that subscription clients will, in general, use long-running connections. This should not, however, break any downstream usage of the clients ([#820]) * `[tendermint-rpc]` The `HttpClient` and `WebSocketClient` constructors now take any input that can be converted to a `tendermint_rpc::Url`. This should hopefully have minimal impact on projects using the code, but it might require some minor code changes in some cases - see the crate docs for more details ([#820]) * `[tendermint-rpc]` The `event::EventData::GenericJSONEvent` member has been renamed to `event::EventData::GenericJsonEvent` ([#839]) * `[tendermint-testgen]` The `TMLightBlock` data structure has been renamed to `TmLightBlock` to be consistent with Rust's naming conventions ([#839]) ### FEATURES * `[tendermint-abci]` Release minimal framework for building ABCI applications in Rust ([#794]) * `[tendermint-light-client]` The Light Client now provides support for secure (HTTPS) connections to nodes ([#835]) * `[tendermint-light-client-js]` First release of the `tendermint-light-client-js` crate to provide access to Tendermint Light Client functionality from WASM. This only provides access to the `verify` method at present, exclusively provides access to block verification. This does not include network access or the Light Client's bisection algorithm ([#812]) * `[tendermint-rpc]` Support for secure connections (`https://` and `wss://`) has been added to the Tendermint RPC clients, as well as support for HTTP proxies for HTTP clients ([#820]) * `[tendermint-rpc]` A `tendermint-rpc` CLI has been added to simplify interaction with RPC endpoints from the command line ([#820]) ### IMPROVEMENTS * `[tendermint]` IPv6 support has been added for `net::Address` ([#5]) * `[tendermint-rpc]` Add `wait_until_healthy` utility method for RPC clients to poll the `/health` endpoint of a node until it either returns successfully or times out ([#855]) ### BUG FIXES * `[tendermint-light-client]` Due to the RPC client's `validators` method sometimes only returning a subset of validators (for networks larger than 30 validators), validator set hash calculations were failing. Now we are at least obtaining a full validator set ([#831]) * `[tendermint-rpc]` Fix intermittent deserialization failures of the consensus state response ([#836]) [#5]: https://github.com/informalsystems/tendermint-rs/issues/5 [#794]: https://github.com/informalsystems/tendermint-rs/pull/794 [#812]: https://github.com/informalsystems/tendermint-rs/pull/812 [#820]: https://github.com/informalsystems/tendermint-rs/pull/820 [#831]: https://github.com/informalsystems/tendermint-rs/issues/831 [#835]: https://github.com/informalsystems/tendermint-rs/issues/835 [#836]: https://github.com/informalsystems/tendermint-rs/issues/836 [#839]: https://github.com/informalsystems/tendermint-rs/pull/839 [#855]: https://github.com/informalsystems/tendermint-rs/pull/855 [ABCI]: https://github.com/tendermint/tendermint/tree/main/spec/abci/ [`ibc-rs`]: https://github.com/informalsystems/ibc-rs [`rustls`]: https://github.com/ctz/rustls ## v0.18.1 *Feb 10, 2021* The main focus for this minor release is fixing the rendering of our [`tendermint-light-client` crate documentation][light-client-docs]. ### BUG FIXES * `[tendermint-proto]` Fix panic in evidence serialization in the case where we receive an empty evidence Protobuf structure ([#782]) * `[tendermint-light-node]` Upgrade `jsonrpc` dependency to v17.0 to fix security vulnerability in `hyper` v0.12.35 ([#803]) * `[tendermint-light-client]` Fix rendering of documentation on docs.rs ([#806]) [#782]: https://github.com/informalsystems/tendermint-rs/issues/782 [#803]: https://github.com/informalsystems/tendermint-rs/issues/803 [#806]: https://github.com/informalsystems/tendermint-rs/issues/806 [light-client-docs]: https://docs.rs/crate/tendermint-light-client/ ## v0.18.0 *Jan 29, 2021* This release is breaking due to significant dependency updates (see below). It also introduces experimental support for [backward verification][lc-backward-verif] for the Light Client, feature-guarded behind the `unstable` feature. The Light Client's storage system and its API were also improved. ### BREAKING CHANGES: * `[all]` Update all crates to use the latest version of the following dependencies: ([#764]) - `tokio` (`1.0`) - `hyper` (`0.14`) - `prost` (`0.7`) - `bytes` (`1.0`) - `async-tungstenite` (`0.12`) ### FEATURES * `[light-client]` Add basic support for backward verification, behind a `unstable` feature flag. ([#361]) Note: This feature is currently unstable and should not be relied on by downstream dependencies. ### BUG FIXES * `[light-client]` Fix potential block ordering problem with sled-based lightstore ([#769]) * `[light-client]` Improve the API of the light store. ([#428]) * `[light-client]` The `sled`-backed lightstore is now feature-guarded under the `lightstore-sled` feature, which is enabled by default for now. ([#428]) [lc-backward-verif]: https://github.com/tendermint/spec/blob/master/rust-spec/lightclient/verification/verification_002_draft.md#part-v---supporting-the-ibc-relayer [#361]: https://github.com/informalsystems/tendermint-rs/issues/361 [#428]: https://github.com/informalsystems/tendermint-rs/issues/428 [#764]: https://github.com/informalsystems/tendermint-rs/issues/764 [#769]: https://github.com/informalsystems/tendermint-rs/issues/769 ## v0.17.1 *Jan 11, 2021* This release primarily focuses on fixing [#774], which is critical to the Light Client's correct and reliable operation. ### IMPROVEMENTS: * `[rpc, tools]` The RPC probe has been moved into the `tools` folder and can now be easily executed against a Tendermint node running the kvstore app by way of [cargo make]. `tendermint-rpc` test coverage has been expanded here too. ([#758]) [#758]: https://github.com/informalsystems/tendermint-rs/pull/758 [cargo make]: https://github.com/sagiegurari/cargo-make ### BUG FIXES: * `[tendermint]` `Time` values were not always formatted properly, causing the light client to sometimes return malformed light blocks ([#774]) [#774]: https://github.com/informalsystems/tendermint-rs/issues/774 ## v0.17.0 *Dec 17, 2020* This release is a significant breaking upgrade from v0.16.0 that primarily targets compatibility with [Tendermint v0.34](https://github.com/tendermint/tendermint/blob/main/UPGRADING.md#v0340) and the [Cosmos Stargate release](https://stargate.cosmos.network/). To highlight some of the major changes over the course of 3 release candidates and this release, we have: * Provided Tendermint v0.34.0 compatibility. * Supported the development of [ibc-rs](https://github.com/informalsystems/ibc-rs/). * Improved our model-based testing to provide complex test cases for the [Light Client](https://github.com/informalsystems/tendermint-rs/tree/main/light-client#testing). * Refactored our serialization infrastructure to remove all Amino types and ensure Protobuf compatibility (see the [proto crate](./proto)). This includes a lot of work towards clearly separating our domain types from their serialization types. * Started work on our [P2P layer] towards the eventual goal of implementing a Tendermint full node. * Started work towards offering a WASM-based Tendermint Light Client. * Introduced a WebSocket-based RPC client for interacting with the [Tendermint RPC](https://docs.tendermint.com/v0.34.x/rpc/), including event subscription. Please see the following detailed release notes, as well as the crate documentation, for further details. ### BREAKING CHANGES: - `[rpc]` The RPC client interface has been refactored. The `Client` struct is now `HttpClient` and is enabled with the `http-client` feature. It provides all RPC endpoints except the subscription related ones. - `[rpc]` The EventListener was replaced with a new and improved WebSocketClient for more robust event subscriptions. It can be enabled with the `websocket-client` feature. Subscriptions are exposed using unbounded channels. ([#516]) - `[tendermint]` Removed all traces of Amino, including `amino_types` modules. All types are now "domain types" implementing the `Protobuf` trait for Protobuf-encoding using Prost. ([#504], [#535], [#536], [#585]) - `[tendermint]` Protocol breaking changes for compatibility with Tendermint Core v0.34 (and the Cosmos Stargate release) ([#305]): - Validators are now sorted by voting power (descending) and address (ascending). ([#506]) - Remove PubKey field from DuplicateVoteEvidence ([#502]) - Fix hash of empty Merkle tree to comply with RFC6962 ([#498]) - All binary encoding is done via protobuf3 instead of amino ([#504], [#535], [#536], [#585]) - Various updates to JSON encoding ([#505]) - `[tendermint]` Direct serialization capabilities have been removed from the domain types. ([#639]) - `[tendermint]` Work has started on making it compulsory to construct domain types by way of their constructors to ensure validity. ([#639]) ### FEATURES: - `[light-client]` Introduce builder API for light client initialization ([#583]) - `[rpc]` The subscription client interface provides a structured `Query` mechanism to help ensure compile-time validity of subscription queries. ([#584]) - `[rpc]` Support unsubscribing from events ([#516]) - `[spec]` TLA+ for the Tendermint consensus algorithm including proof forks can only be caused by +1/3 Byzantine validators committing equivocation or amnesia attacks. ([#496]) - `[spec]` English spec of light client attacks and evidence required to correctly handle them ([#526]) - `[tendermint]` Implement `fmt::UpperHex` for `Transaction` ([#613]) - `[tendermint/proto-compiler]` Protobuf structs generator now also accepts commit IDs from the Tendermint Go repository ([#660]) - `[testgen]` Various features and improvements to support model-based testing with the [Apalache model checker] ([#414]) ### IMPROVEMENTS: - [`light-client]` Start using model-based testing to test Light Client executions against traces emitted from the TLA+ model ([#414]) - `[light-client]` Only require Tokio when `rpc-client` feature is enabled ([#425]) - `[rpc]` A `WebSocketClient` is now provided to facilitate event subscription for a limited range of RPC events over a WebSocket connection. See the [Tendermint `/subscribe` endpoint's](https://docs.tendermint.com/v0.34.x/rpc/#/Websocket/subscribe) and the `tendermint-rpc` crate's docs for more details ([#516]) - `[rpc]` The subscription client interface provides a structured `Query` mechanism to help ensure compile-time validity of subscription queries. See the crate docs and [#584] for details. - `[rpc]` The RPC request and response types' fields are now all publicly accessible ([#636]). - `[rpc]` A new RPC probe (in the `rpc-probe` directory) has been added to facilitate quick, pre-scripted interactions with a Tendermint node (via its WebSocket endpoint). This aims to help improve testing and compatibility between Tendermint in Go and Rust. ([#653]) - `[rpc]` The `WebSocketClient` now adds support for all remaining RPC requests by way of implementing the `Client` trait ([#646]) - `[rpc]` Support for the `tx_search` RPC endpoint has been added ([#701]) - `[rpc]` Responses that include events now automatically have their tag key/value pairs decoded from base64, where previously tag key/value pairs were Base64-encoded ([#717]) - `[rpc]` Support for the `consensus_state` RPC endpoint has been added ([#719]) - `[tendermint]` Remove `total_voting_power` parameter from `validator::Set::new` ([#739]) - `[tendermint, rpc, light-client]` Crates now compile to WASM on the `wasm32-unknown-unknown` and `wasm32-wasi` targets ([#463]) - `[tendermint, light-client]` Specify the proposer in the validator set of fetched light blocks ([#705]) - `[tendermint-proto]` Upgrade protobuf definitions to Tendermint Go v0.34.0 ([#737]) - `[testgen]` Compute `last_block_id` hash when generating a `LightChain` ([#745]) - Dependency updates: - Update sled to 0.34 ([#490]) - Update k256 to v0.7 ([#752]) - Remove tai64 crate ([#603]) ### BUG FIXES: - `[light-client]` Fix bug where a commit with only absent signatures would be deemed valid instead of invalid ([#650]) - `[light-client]` Revert a change introduced in [#652] that would enable DoS attacks, where full nodes could spam the light client with massive commits (eg. 10k validators). - `[rpc]` Correctly handles control and keep-alive messages ([#516], [#590]) - `[rpc]` More robust handling of concurrency issues ([#311], [#313]) [ibc-rs]: https://github.com/informalsystems/ibc-rs/ [#305]: https://github.com/informalsystems/tendermint-rs/issues/305 [#311]: https://github.com/informalsystems/tendermint-rs/issues/311 [#313]: https://github.com/informalsystems/tendermint-rs/issues/313 [#414]: https://github.com/informalsystems/tendermint-rs/issues/414 [#498]: https://github.com/informalsystems/tendermint-rs/issues/498 [#463]: https://github.com/informalsystems/tendermint-rs/issues/463 [#490]: https://github.com/informalsystems/tendermint-rs/issues/490 [#496]: https://github.com/informalsystems/tendermint-rs/issues/496 [#502]: https://github.com/informalsystems/tendermint-rs/issues/502 [#504]: https://github.com/informalsystems/tendermint-rs/issues/504 [#505]: https://github.com/informalsystems/tendermint-rs/issues/505 [#506]: https://github.com/informalsystems/tendermint-rs/issues/506 [#516]: https://github.com/informalsystems/tendermint-rs/pull/516 [#524]: https://github.com/informalsystems/tendermint-rs/issues/524 [#526]: https://github.com/informalsystems/tendermint-rs/issues/526 [#535]: https://github.com/informalsystems/tendermint-rs/issues/535 [#536]: https://github.com/informalsystems/tendermint-rs/issues/536 [#547]: https://github.com/informalsystems/tendermint-rs/issues/547 [#578]: https://github.com/informalsystems/tendermint-rs/pull/578 [#583]: https://github.com/informalsystems/tendermint-rs/pull/583 [#584]: https://github.com/informalsystems/tendermint-rs/pull/584 [#585]: https://github.com/informalsystems/tendermint-rs/issues/585 [#590]: https://github.com/informalsystems/tendermint-rs/issues/590 [#603]: https://github.com/informalsystems/tendermint-rs/pull/603 [#613]: https://github.com/informalsystems/tendermint-rs/pull/613 [#636]: https://github.com/informalsystems/tendermint-rs/pull/636 [#639]: https://github.com/informalsystems/tendermint-rs/pull/639 [#650]: https://github.com/informalsystems/tendermint-rs/issues/650 [#652]: https://github.com/informalsystems/tendermint-rs/pulls/652 [#654]: https://github.com/informalsystems/tendermint-rs/issues/654 [#660]: https://github.com/informalsystems/tendermint-rs/issues/660 [#663]: https://github.com/informalsystems/tendermint-rs/issues/663 [#665]: https://github.com/informalsystems/tendermint-rs/issues/665 [#653]: https://github.com/informalsystems/tendermint-rs/pull/653 [#667]: https://github.com/informalsystems/tendermint-rs/issues/667 [#672]: https://github.com/informalsystems/tendermint-rs/pull/672 [#679]: https://github.com/informalsystems/tendermint-rs/issues/679 [#425]: https://github.com/informalsystems/tendermint-rs/issues/425 [#646]: https://github.com/informalsystems/tendermint-rs/pull/646 [#690]: https://github.com/informalsystems/tendermint-rs/issues/690 [#701]: https://github.com/informalsystems/tendermint-rs/pull/701 [#705]: https://github.com/informalsystems/tendermint-rs/issues/705 [#717]: https://github.com/informalsystems/tendermint-rs/issues/717 [#719]: https://github.com/informalsystems/tendermint-rs/pull/719 [#737]: https://github.com/informalsystems/tendermint-rs/pull/737 [#739]: https://github.com/informalsystems/tendermint-rs/issues/739 [#745]: https://github.com/informalsystems/tendermint-rs/issues/745 [#752]: https://github.com/informalsystems/tendermint-rs/pull/752 [P2P layer]: https://github.com/informalsystems/tendermint-rs/tree/main/p2p ## v0.16.0 *Aug 31, 2020* This release is the first release of the [testgen][testgen-dir] utility, a generator for Tendermint types for unit and integration tests and for model-based testing. It is a utility for producing tendermint datastructures from minimal input, targeted for testing. The release also contains various Rust API-breaking changes. It remains compatible with v0.33 of Tendermint Core. ⚠️ ️Deprecation warning ⚠️ : The `lite` module was removed. Please take a look at the [light-client][light-client-dir] crate. ### BREAKING CHANGES: - [repo] CHANGES.md renamed to CHANGELOG.md - [tendermint] Eliminate use of `signatory` wrapper crate in favour of underlying `ed25519-dalek` and `k256` crates. `ed25519-dalek` is now v1.0 and `k256` provides a pure Rust implementation of secp256k1 rather than wrapping the C library ([#522]) - [tendermint] Remove `lite` and `lite_impl` modules. See the new `light-client` crate ([#500]) ### FEATURES: - [tendermint/proto] A tendermint-proto crate was created that contains the Rust structs for protobuf, preparing for compatibility with Tendermint Core v0.34 ([#508]) - [tendermint/proto-compiler] A tendermint-proto-compiler crate was created that generates the tendermint-proto structs from the Tendermint Core Protobuf definitions. - [testgen] Introduce the `testgen` crate for generating Tendermint types from minimal input ([#468]) ### IMPROVEMENTS: - [light-client] Use the `testgen` for generating tests - [light-client] Use primary error as context of `NoWitnessLeft` error ([#477]) - [repo] Various improvements to documentation and crate structure - [repo] Add CONTRIBUTING.md document ([#470]) - [specs] Updates to fork detection English spec for evidence handling in Tendermint and IBC ([#479]) - [specs] Model checking results and updates for the fast sync TLA+ spec ([#466]) ### BUG FIXES: - [light-client] Fix to reject headers from the future ([#474]) [light-client-dir]: https://github.com/informalsystems/tendermint-rs/tree/main/light-client [testgen-dir]: https://github.com/informalsystems/tendermint-rs/tree/main/testgen [#466]: https://github.com/informalsystems/tendermint-rs/pull/466 [#468]: https://github.com/informalsystems/tendermint-rs/pull/468 [#470]: https://github.com/informalsystems/tendermint-rs/pull/470 [#474]: https://github.com/informalsystems/tendermint-rs/pull/474 [#477]: https://github.com/informalsystems/tendermint-rs/pull/477 [#479]: https://github.com/informalsystems/tendermint-rs/pull/479 [#500]: https://github.com/informalsystems/tendermint-rs/pull/500 [#508]: https://github.com/informalsystems/tendermint-rs/pull/508 [#522]: https://github.com/informalsystems/tendermint-rs/pull/522 ## v0.15.0 *July 17, 2020* This release is the first official release of the revamped [light-client][light-client-dir] library and the [light-node][light-node-dir] command-line interface. Together they provide a complete Tendermint light client implementation that performs squential and skipping verification and attempts to detect forks across its peers. Complete TLA+ specifications for light client verification are included, along with work-in-progress specs for fork detection. The implementation is compatible with v0.33 of Tendermint Core. Note that both the [light-client][light-client-dir] and [light-node][light-node-dir] crates are to be considered experimental software that will still undergo a lot of improvements and iterations. The goal of releasing an early version of our Light Client is to make it accessible, to get people use it, and to receive feedback. An overview of the current design of the light client is provided in [ADR-006] and [ADR-007]. ⚠️ ️Deprecation warning ⚠️ : This might be the last release containing the [lite][lite-dir] module. Please take a look at the [light-client][light-client-dir] crate. ### BREAKING CHANGES: - [repo] make secp256k1 dependency optional ([#441]) ### FEATURES: - [light-client] Rewrite and expansion of `lite`, the prior light client verification module, into a new fully-featured `light-client` crate. The crate provides a db, functions for complete light client verification, peer management, fork detection, and evidence reporting, along with extensive testing. Components are composed via a `Supervisor`, which is run in its own thread, and exposes a Handle trait to broker access to underlying state and functionality. See the [light-client][light-client-dir] crate for details. - [light-node] New binary crate with CLI for running the light client as a daemon, complete with an rpc server for querying the latest state of the light node while it syncs with the blockchain. See the [light-node][light-node-dir] crate for details. ### BUG FIXES: - [tendermint/validator] Sort validators by address on deserialization ([#410]) - [tendermint/validator] Fix deserializing Update struct when power field is 0 ([#451]) - [tendermint/abci] Fix DeliverTx response deserialization issues with gasWanted, gasUsed, and data fields ([#432]) - [tendermint/lite_impl] Fix header.hash for height 1 ([#438]) [#410]: https://github.com/informalsystems/tendermint-rs/pull/410 [#432]: https://github.com/informalsystems/tendermint-rs/pull/432 [#438]: https://github.com/informalsystems/tendermint-rs/pull/438 [#441]: https://github.com/informalsystems/tendermint-rs/pull/441 [#451]: https://github.com/informalsystems/tendermint-rs/pull/451 [ADR-006]: https://github.com/informalsystems/tendermint-rs/blob/main/docs/architecture/adr-006-light-client-refactor.md [ADR-007]: https://github.com/informalsystems/tendermint-rs/blob/main/docs/architecture/adr-007-light-client-supervisor-ergonomics.md [lite-dir]: ./tendermint/src/lite [light-client-dir]: ./light-client [light-node-dir]: ./light-node/ ## [0.14.1] (2020-06-23) - Update `prost-amino`/`prost-amino-derive` to v0.6 ([#367]) [#367]: https://github.com/informalsystems/tendermint-rs/issues/367 [0.14.1]: https://github.com/informalsystems/tendermint-rs/pull/368 ## [0.14.0] (2020-06-19) This release mainly targets compatibility with Tendermint [v0.33.x] but contains a lot of smaller improvements regarding testing and (de)serialization. Also noteworthy is that the rpc module was broken out into a separate crate ([tendermint-rpc]). ⚠️ ️Deprecation warning ⚠️ : This might be that last release containing the [lite] module. It will be replaced with the [light-client][light-client-dir] crate (soon). CommitSig: - Refactored CommitSig into a more Rust-friendly enum. ([#247]) - Added CommitSig compatibility code to Absent vote ([#260]) - Added CommitSig timestamp zero-check compatibility code ([#259]) Testing: - Configure integration test against latest tendermint-go to continue on error ([#304]) - Add integration test to track tendermint-go v0.33.5 ([#304]) - Remove test for hard-coded version in `abci_info` ([#304]) Serialization: - Refactor serializers library to use modules, give a nicer annotation to structs and separated into its own folder. ([#247]) - Added nullable Vec<u8> serialization ([#247]) - Moved/created tests for serialization in the same library and locked library to local crate ([#263]) - Made serialization tests symmetric ([#261]) RPC: - Tendermint-Go v0.33 compatibility ([#184]) - `abci_info`, `abci_query`, `block_results`, `genesis` structs - serialization/deserialization fixes - Updated/fixed integration tests - Move into its own crate ([#338]) - Feature guard `rpc::client` (makes networking an optional dependency) ([#343]) CI: - Moved to GitHub Actions ([#120]) - Updated crates.io badges ([#120]) - Enabled integration tests in CI with Tendermint-Go node service ([#120]) - Exclude changes in docs folder to trigger CI execution ([#309]) [#120]: https://github.com/informalsystems/tendermint-rs/issues/120 [#184]: https://github.com/informalsystems/tendermint-rs/issues/184 [#247]: https://github.com/informalsystems/tendermint-rs/issues/247 [#259]: https://github.com/informalsystems/tendermint-rs/issues/259 [#260]: https://github.com/informalsystems/tendermint-rs/issues/260 [#261]: https://github.com/informalsystems/tendermint-rs/issues/261 [#263]: https://github.com/informalsystems/tendermint-rs/issues/263 [#304]: https://github.com/informalsystems/tendermint-rs/issues/304 [#309]: https://github.com/informalsystems/tendermint-rs/issues/309 [#338]: https://github.com/informalsystems/tendermint-rs/pull/338 [#343]: https://github.com/informalsystems/tendermint-rs/pull/343 [0.14.0]: https://github.com/informalsystems/tendermint-rs/pull/347 [v0.33.x]: https://github.com/tendermint/tendermint/blob/v0.33.5/CHANGELOG.md#v0335 [tendermint-rpc]: https://github.com/informalsystems/tendermint-rs/tree/main/rpc#tendermint-rpc [lite]: https://github.com/informalsystems/tendermint-rs/tree/main/tendermint/src/lite [light-client-dir]: https://github.com/informalsystems/tendermint-rs/tree/main/light-client ## [0.13.0] (2020-04-20) Dependencies: - Update `signatory` requirement to v0.19 ([#227]) [0.13.0]: https://github.com/informalsystems/tendermint-rs/pull/228 [#227]: https://github.com/informalsystems/tendermint-rs/pull/227 ## [0.12.0] (2020-04-17) Dependencies - Update to bytes `0.5` and amino_rs `0.5`. - Tokens for amino_rs are now fully non-conflicting with prost. Allowing both to be used together - Made RPC type values optional for full compatibility with tendermint-go@v0.32: `abci_info`, `abci_query` [#120] - JSON ID is JSON specification compatible and accepts int, string or null - [#88] ## [0.11.0] (2019-12-11) This is the first release since this repository was split off from the [KMS](https://github.com/tendermint/kms) repo a few months ago and contains more than the usual number of changes. As the new repository matures we will be working towards a more robust release cycle. This release also contains a first draft of the Tendermint Light Client :). The changes are organized in sections for better readability. Organizational Changes: - Reorganized the crate into a workspace with a `tendermint` crate ([#30]) - Remove all optional compilation ([#16]) - Started using CircleCI for continuous integration ([#15]) - Fix clippy lints ([#40], [#55]) RPC Changes: - Fix `/commit` endpoint to actually include the commit data ([#42]) - Use async/await for the rpc client ([#85]) Type Changes: - Add `Default` trait impls and some other utilities to data types ([#64]) - Fix transaction hash length to be 32-bytes ([#14]) - Rename `LastCommit` to `Commit` ([#42]) - Fix genesis file to include `validators` field ([#65]) - Change `max_gas` from `u64` to `i64` ([#61]) - Allow `Height` to be `0` ([#77]) ABCI Changes: - Include `AbciQuery` in the `Method` enum ([#AbciQueryMethodEnum]) - Fix deserializing ABCI Code field ([#13]) - Fix ABCI data field to allow lower case hex encodings ([#17]) - Fix `/abci_query` endpoint to take input `data` as hex and return `key` and `value` in the response as base64 ([#77]) Light Client: - Introduce validator `Set` type and compute Merkle root ([#6]) - First draft implementation of logic for the light client ([#31, #36]) - Dependency Changes: - Remove `secret_connection` and `ring` as dependencies (moved to KMS repo) ([#60]) - `tai64` from `2` to `3` ([#22]) - `zeroize` from `0.9` to `1.1` ([#74, #89]) - `hyper` from `0.10` to `0.13` ([#85]) - `signatory` from `0.12` to `0.17` ([#89]) - `subtle-encoding` from `0.3` to `0.5` ([#47]) - `uuid` from `0.7` to `0.8` ([#91]) - replace `rand_os` with `getrandom` ([#90]) ## [0.10.0] (2019-07-30) This release is tested against [tendermint v0.31] and known to be compatible with [tendermint v0.32] aside from one known issue impacting RPC ([#286]). - Fix inclusive range incompatibility affecting Rust nightly ([#326]) - Derive Eq/Ord for (transitive) status types ([#324]) - Add `TendermintConfig::load_node_key` ([#315]) - Add `TendermintConfig::load_genesis_file` ([#312]) - Add `TendermintConfig` and `Error(Kind)` types ([#298]) - Support `/abci_query` RPC endpoint ([#296]) - Implement the Tendermint (RFC6962) Merkle tree ([#292]) - Support `account::Id` generation from ed25519 pubkeys ([#291]) ## [0.9.0] (2019-06-24) This release is compatible with [tendermint v0.31] - Reject low order points in Secret Connection handshake ([#279]) - Add `RemoteErrorCode` enum ([#272]) - Add `msg_type()` accessor for signature types ([#271]) ## [0.8.0] (2019-06-20) This release is compatible with [tendermint v0.31] - `/block_results` RPC endpoint and related types ([#267], [#268]) - Upgrade to Signatory v0.12 ([#259]) ## [0.7.0] (2019-04-24) This release is compatible with [tendermint v0.31] - Initial JSONRPC over HTTP client + `/broadcast_tx_*` endpoints ([#243]) - Initial RPC support ([#235]) - Disallow a block height of 0 ([#234]) ## [0.6.0] (2019-04-16) This release is compatible with [tendermint v0.31] - Add `tendermint::Address`, `tendermint::account::Id`, `tendermint::Moniker`, and improve `serde` serializer support ([#228]). ## [0.5.0] (2019-03-13) This release is compatible with [tendermint v0.30] - Rename `SecretConnectionKey` to `secret_connection::PublicKey`, add `secret_connection::PeerId` ([#219]) - Move `ConsensusState` under `chain::state` ([#205]) ## 0.4.0 (N/A) - Skipped to synchronize versions with `tmkms` ## 0.3.0 (2019-03-05) - Support for secp256k1 keys ([#181]) ## 0.2.0 (2019-01-23) This release is compatible with [tendermint v0.29] - Update to x25519-dalek v0.4.4 (#158) - Consistent ordering of `BlockID` and `Timestamps` in vote and proposal messages (#159) - Remove `PoisonPillMsg` previously used to shut-down the kms (#162) ## 0.1.5 (2019-01-18) This release is compatible with [tendermint v0.28] - Split `PubKeyMsg` into `PubKeyRequest` and `PubKeyResponse` (#141) - Migrate to Rust 2018 edition (#138) ## 0.1.4 (2018-12-02) - Allow empty BlockIds in validation method (#131) ## 0.1.3 (2018-12-01) - Prefix bech32 encoding of consensus keys with amino prefix (#128) ## 0.1.2 (2018-11-27) - Update to subtle-encoding v0.3 (#124) - Introduce same validation logic as Tendermint (#110) - Remove heartbeat (#105) ## 0.1.1 (2018-11-20) - Minor clarifications/fixes (#103) ## 0.1.0 (2018-11-13) - Initial release [0.10.0]: https://github.com/tendermint/kms/pull/328 [tendermint v0.32]: https://github.com/tendermint/tendermint/blob/main/CHANGELOG.md#v0320 [#326]: https://github.com/tendermint/kms/pull/326 [#324]: https://github.com/tendermint/kms/pull/324 [#315]: https://github.com/tendermint/kms/pull/315 [#312]: https://github.com/tendermint/kms/pull/312 [#298]: https://github.com/tendermint/kms/pull/298 [#296]: https://github.com/tendermint/kms/pull/296 [#292]: https://github.com/tendermint/kms/pull/292 [#291]: https://github.com/tendermint/kms/pull/291 [#286]: https://github.com/tendermint/kms/pull/286 [0.9.0]: https://github.com/tendermint/kms/pull/280 [#279]: https://github.com/tendermint/kms/pull/279 [#272]: https://github.com/tendermint/kms/pull/272 [#271]: https://github.com/tendermint/kms/pull/271 [0.8.0]: https://github.com/tendermint/kms/pull/269 [#268]: https://github.com/tendermint/kms/pull/268 [#267]: https://github.com/tendermint/kms/pull/267 [#259]: https://github.com/tendermint/kms/pull/259 [0.7.0]: https://github.com/tendermint/kms/pull/247 [#243]: https://github.com/tendermint/kms/pull/243 [#235]: https://github.com/tendermint/kms/pull/235 [#234]: https://github.com/tendermint/kms/pull/234 [0.6.0]: https://github.com/tendermint/kms/pull/229 [tendermint v0.31]: https://github.com/tendermint/tendermint/blob/main/CHANGELOG.md#v0310 [#228]: https://github.com/tendermint/kms/pull/228 [0.5.0]: https://github.com/tendermint/kms/pull/220 [tendermint v0.30]: https://github.com/tendermint/tendermint/blob/main/CHANGELOG.md#v0300 [#219]: https://github.com/tendermint/kms/pull/219 [#205]: https://github.com/tendermint/kms/pull/219 [#181]: https://github.com/tendermint/kms/pull/181 [tendermint v0.29]: https://github.com/tendermint/tendermint/blob/main/CHANGELOG.md#v0290 [tendermint v0.28]: https://github.com/tendermint/tendermint/blob/main/CHANGELOG.md#v0280 [#30]: https://github.com/interchainio/tendermint-rs/pull/30 [#16]: https://github.com/interchainio/tendermint-rs/pull/16 [#15]: https://github.com/interchainio/tendermint-rs/pull/15 [#40]: https://github.com/interchainio/tendermint-rs/pull/40 [#55]: https://github.com/interchainio/tendermint-rs/pull/55 [#85]: https://github.com/interchainio/tendermint-rs/pull/85 [#64]: https://github.com/interchainio/tendermint-rs/pull/64 [#14]: https://github.com/interchainio/tendermint-rs/pull/14 [#42]: https://github.com/interchainio/tendermint-rs/pull/42 [#65]: https://github.com/interchainio/tendermint-rs/pull/65 [#61]: https://github.com/interchainio/tendermint-rs/pull/61 [#AbciQueryMethodEnum]: https://github.com/interchainio/tendermint-rs/commit/566dfb6a9ef9659a504b43fb8ccb5c5e7969e3a0 [#13]: https://github.com/interchainio/tendermint-rs/pull/13 [#17]: https://github.com/interchainio/tendermint-rs/pull/17 [#77]: https://github.com/interchainio/tendermint-rs/pull/77 [#6]: https://github.com/interchainio/tendermint-rs/pull/6 [#31]: https://github.com/interchainio/tendermint-rs/pull/31 [#36]: https://github.com/interchainio/tendermint-rs/pull/36 [#60]: https://github.com/interchainio/tendermint-rs/pull/60 [#22]: https://github.com/interchainio/tendermint-rs/pull/22 [#74]: https://github.com/interchainio/tendermint-rs/pull/74 [#89]: https://github.com/interchainio/tendermint-rs/pull/89 [#47]: https://github.com/interchainio/tendermint-rs/pull/47 [#90]: https://github.com/interchainio/tendermint-rs/pull/90 [#83]: https://github.com/interchainio/tendermint-rs/pull/83 [#91]: https://github.com/interchainio/tendermint-rs/pull/91