Jan 11th, 2024
This is the first release of the Celestia-tendermint-rs fork. From now on, the changelog will be recorded on per-crate basis. Currently only the Celestia-tendermint and Celestia-tendermint-proto crates will be maintained.
May 3rd, 2023
This release notably comes with a fully featured light client attack detector, and introduces a CLI for the light client 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
method for verifying
headers coming from a misbehaviour evidence.
Moreover, the Client
trait is now exposed by the tendermint-rpc
without requiring
the http-client
or the websocket-client
feature flags to be enabled.
- [
tendermint-light-client-verifier
] RenameVerifier::verify
toVerifier::verify_update_header
to better describe its purpose versusVerifier::verify_misbehaviour_header
(#1294)
- [
tendermint-light-client-detector
] Implement a light client attack detector, based on its Go version found in Comet (#1291) - [
tendermint-light-client-verifier
] AddVerifier::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)
- [
tendermint-rpc
]: ExportClient
trait unconditionally, without having to specify either thehttp-client
orwebsocket-client
(#1235) - [
tendermint
]: Loosen bounds of merkle hashing functions to accept borrowed data. (#1310)
April 17th, 2023
Expose the TypedEvent
marker trait.
- Expose the `tendermint::abci::event::TypedEvent (#1288)
April 16th, 2023
Upgrade signature crate versions and add a TypedEvent
trait for ABCI events.
[tendermint, tendermint-p2p]
Bumped25519
to v2,k256
to v0.13, andsignature
to v2
- [
tendermint
] Adds a newTypedEvent
for encoding structured data in ABCI events (#1288). - [
tools/proto-compiler
] Parse and fetch proto dependencies as listed in thebuf.lock
file (#1293).
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.
- [
tendermint
] Version-specific definitions for ABCIRequest
andResponse
enums underv0_34::abci
andv0_37::abci
, containing only the method variants present in each of the respective protocol versions.Request
andResponse
defined underv0_37
are re-exported under the non-versionedabci
module name, but theSetOption
variant is not present in these latest versions of the enums. (#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) - [
tendermint-rpc
] Changed the signature ofWebSocketClient::new_with_config
to accept aWebSocketConfig
struct value rather than anOption
. (#1193) - [
tendermint-proto
] Theserializers::evidence
module has been made private. (#1193) - [
tendermint-rpc
] Bumpasync-tungstenite
dependency version to 0.20, re-exportingWebSocketConfig
fromtungstenite
0.18 (#1276).
- [
tendermint-proto
] Generate prost bindings for Tendermint 0.34 and 0.37 side by side. The version-specific structs are placed under thetendermint::v0_34
andtendermint::v0_37
module namespaces, respectively. The names undertendermint::v0_37
are also re-exported undertendermint
. (#1193) - [
tendermint
] New and updated ABCI domain types for Tendermint Core v0.37 (#1193). - [
tendermint
] Protobuf conversions provided for bothv0_34
andv0_37
versions of the generated [tendermint-proto
] structs, where applicable. (#1193). - [
tendermint-rpc
] Introduceclient::CompatMode
, enumerating protocol compatibility modes specifying the RPC data encoding used by the client. AnHttpClient
can be created with a selected mode specified in the newbuilder
API, or have the mode changed afterwards (usually after version discovery) by the addedset_compat_mode
method. ForWebSocketClient
, the mode can only be specified at creation via the newbuilder
API. (#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). - Derive
Hash
ontendermint::Time
(#1278) - [
tendermint-light-client
] Showmax_clock_drift
in error raised when header is from the future (#1280)
February 27th, 2023
Improve debug output for Ed25519 keys.
[tendermint]
Restore hex-formatting in debug output of Ed25519 keys. (#1272)
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.
-
[tendermint]
Make implementations of cryptographic primitives replaceable (#1238).- Provide a
Sha256
trait in modulecrypto
and make digest hashing implementations available through it. - Provide a
Verifier
trait in modulecrypto::signature
to enable alternative implementations of signature verification available through it. AnError
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 newrust-crypto
feature, enabled by default. merkle::simple_hash_from_byte_vectors
is made generic over an implementation of the newMerkleHash
trait. Implementations for Rust-Crypto conformant digest objects and the non-incrementalcrypto::Sha256
API are provided in the crate.- The
Header::hash
andValidatorSet::hash
methods are gated by therust-crypto
feature. Generic hashing methods not dependent on the default crypto implementations are added for both types, namedhash_with
. - Conversions to
account::Id
andnode::Id
fromPublicKey
and curve-specific key types are gated by therust-crypto
feature. - The
validator::Info::new
method is gated by therust-crypto
feature. - Remove a deprecated constant
signature::ED25519_SIGNATURE_SIZE
.
- Provide a
-
[tendermint-light-client-verifier]
Changes for the new Tendermint crypto API (#1238).- The
rust-crypto
feature, enabled by default, guards the batteries-included implementation types:ProdVerifier
,ProdPredicates
,ProdVotingPowerCalculator
. - Remove the
operations::hasher
API (Hasher
andProdHasher
), made unnecessary by the new crypto abstractions in thetendermint
crate. - The
VerificationPredicates
trait features aSha256
associated type to represent the hasher implementation, replacing the&dyn Hasher
parameter passed to methods. - Change the type of the
VerificationErrorDetail::FaultySigner
fieldvalidator_set
toValidatorSet
. This removes a hasher dependency fromCommitValidator
, andProdCommitValidator
is now an empty dummy type.
- The
-
[tendermint-light-client]
Changes for the new Tendermint crypto API (#1238).- The
rust-crypto
feature enables the default crypto implementations, and is required by therpc-client
andunstable
features.ProdForkDetector
is guarded by this feature, and is made a specific type alias to the hasher-genericProvidedForkDetector
type. LightClientBuilder
gets another type parameter for the Merkle hasher. Its generic constructors lose theHasher
parameter.
- The
[tendermint-light-client]
Fix verification of blocks between two trusted heights (#1246)
[tendermint, tendermint-p2p]
Replaced theed25519-dalek
dependency withed25519-consensus
(#1046)
- Update all crates to the [2021 edition](https://doc.rust- lang.org/edition-guide/rust-2021/index.html) of the Rust language (#1262)
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.
[tendermint-light-client-verifier]
Addis_matching_chain_id
method to theVerificationPredicates
trait[tendermint-light-client-verifier]
Add achain_id
field to theTrustedBlockState
struct
[tendermint-light-client-js]
Switch to serde-wasm-bindgen for marshalling JS values (#1242)
[tendermint-light-client]
Fix an issue where the light client was not checking that the chain ID of the trusted and untrusted headers match
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 and VerifyCommitLightTrusting methods for the light client.
Some additional convenience methods for the Time
type were provided by
@scalalang2.
-
[tendermint]
Change hash fields' type fromBytes
(#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 methodAppHash::value
, replaced with non-allocatingAppHash::as_bytes
#1232. -
[tendermint-rpc]
Remove ABCI-related types, change the affected field types to standard Rust types or ABCI domain types in[tendermint]
. (#1090) -
[tendermint-rpc]
Extract thekey
field fromquery::Condition
and structure aquery::Condition
to havekey
andoperation
fields, since thekey
field is common to all conditions (#1230) -
[tendermint]
Renamemerkle::proof::Proof
toProofOps
(#1234) -
[tendermint-rpc]
Change the type of/tx
response fieldproof
totendermint::tx::Proof
(#1233)
[tendermint]
AddedTime
methodsunix_timestamp
andunix_timestamp_nanos
. (#1175)[light-client]
Addedvalidate
,validate_against_trusted
,verify_commit
andverify_commit_against_trusted
methods toPredicateVerifier
. (#1222)[tendermint-rpc]
Maketendermint_rpc::Query
's fields public and add aCondition::key(&self) -> &str
method (#1230)[tendermint]
Add domain typesmerkle::Proof
andtx::Proof
, to represent protobuf messagescrypto.Proof
andtypes.TxProof
respectively (#1234)
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.
[tendermint]
Added domain types for ABCI (#862)[tendermint-proto]
UseBytes
for byte array fields of ABCI protobuf types. (#1203)
[tendermint-rpc]
The encoding of thehash
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)- Allow a
TrustThresholdFraction
of 1
(#1208)
[tendermint-abci]
DeprecateClient::set_option
. (#1203)
[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).
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. 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.
[tendermint-rpc]
Fix deserialization of/block_results
response when it contains evidence for a duplicate vote (#1194)
- Unpin
time
dependency (#1199)
[proto]
Do not generate types ingoogle::protobuf
(#1188).- Add support for Tendermint Core v0.34.21, which primarily involves a small addition to the configuration file (#1198)
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.
[tendermint-rpc]
Add support for HTTP Basic authentication to HTTP and WebSocket RPC clients (#1169)
Jul 22, 2022
This release focuses on ensuring compatibility with Tendermint v0.34.20, which
introduces a prioritized
mempool.
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.
[tools/proto-compiler]
Annotate serde to fall back toDefault
for the omitted fields when deserializingtendermint_proto::abci::ResponseInfo
struct, also providing deserialization for the response at the/abci_info
RPC endpoint. (#1132)
- Update
k256
to v0.11 (#1153)
[tendermint-proto,tendermint-rpc,tools]
Update to ensure compatibility with Tendermint v0.34.20 (#1159)
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.
[tendermint-proto]
Regenerate protos from Tendermint v0.34.20-rc0, including prioritized mempool fields inResponseCheckTx
(#1148)[tendermint-rpc]
Updatebroadcast_tx_*
result to include prioritized new mempool fields available from v0.34.20-rc0 (#1148)
Apr 25, 2022
A minor update to use the latest version of prost
.
- Update
prost
to v0.10 ([#1113](https://github.com/informalsystems/tendermint- rs/issues/1113))
Mar 29, 2022
A minor release that allows for a small UX improvement in the usage of the
Client::genesis()
call in tendermint-rpc
.
[tendermint-rpc]
Allow users to specify theAppState
type in theClient::genesis()
function. (#1106)
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.
[tendermint-light-client]
Split out the verification functionality from thetendermint-light-client
crate into its ownno_std
-compatible crate:tendermint-light-client-verifier
. This helps move us closer tono_std
compliance in both tendermint-rs and ibc-rs (#1027)
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.
[tendermint-rpc]
: Switchhyper-proxy
to userustls
, eliminating the only use ofnative-tls
in tendermint-rs dependencies (#1068)
Dec 20, 2021
Here we mainly attempt to provide a short-term workaround for #1021 by catering for both possible forms of JSON serialization for public keys.
[tendermint]
Hash
is implemented fortendermint::Time
(#1054)
[tendermint-rpc]
Allow deserialization of public keys from validator updates fromblock_results
endpoint in multiple JSON formats until this is fixed in Tendermint (#1021)
Dec 7, 2021
This release focuses on the removal of
chrono
as our primary dependency for
dealing with time, and replaces it with the
time
crate.
This is necessarily a breaking change, but is released as v0.23.2 as per our current versioning scheme.
[tendermint]
Reformtendermint::Time
(#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 withTimestampNanosOutOfRange
; removedChronoParse
, replaced withTimeParse
.
[tendermint-rpc]
UseOffsetDateTime
andDate
types provided by thetime
crate in query operands instead of theirchrono
counterparts. (#1030)
[tendermint]
Deprecatedsignature::ED25519_SIGNATURE_SIZE
in favor ofEd25519Signature::BYTE_SIZE
(#1023)- Remove dependencies on the
chrono
crate. (#1030) [tendermint]
Improvetendermint::Time
(#1036, revised by #1048):- Restrict the validity range of
Time
to dates with years in the range 1-9999, to match the specification of protobuf messageTimestamp
. Add anErrorDetail
variantDateOutOfRange
to report when this restriction is not met. - Added a conversion to, and a fallible conversion from,
OffsetDateTime
of thetime
crate.
- Restrict the validity range of
Nov 15, 2021
Minor 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)[tendermint]
Thetendermint::node::Id
Display
implementation now prints the hexadecimal string in lowercase (#971)
Oct 27, 2021
The main changes in this release involve upgrading to Prost
v0.9 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
.
- Upgraded Prost to the official v0.9 release to finally resolve the security issue introduced by v0.7 (#925)
[tendermint]
Thetendermint::node::info::ListenAddress::to_net_address
method was replaced with a simpleas_str
method toward facilitatingno_std
compatibility ([#983](https://github.com/informalsystems/tendermint- rs/issues/983))[tendermint]
Thetendermint::node::info::OtherInfo::rpc_address
field type has been changed fromtendermint::net::Address
toString
toward facilitatingno_std
compatibility (#983)[tendermint, tendermint-config]
Thetendermint::config
module has now been broken out into its own crate (tendermint- config
) to help towards facilitatingno_std
compatibility (#983)
[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)
Sep 23, 2021
This release targets numerous issues largely in support of
ibc-rs. The major breaking change
in this regard is in the
API
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.
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 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.
- All crates' error handling has been refactored to make use of
flex-error
. This gives users greater flexibility in terms of the error handling/reporting systems they want to use and is a critical step towardsno_std
support. (#923) [tendermint-rpc]
The/tx
endpoint'sRequest::hash
field has been changed fromString
totendermint::abci::transaction::Hash
(#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 bothtendermint_light_client
andibc-rs
(#956)[tendermint-light-client]
Disable thelightstore-sled
feature by default (#976)
[tendermint-rpc]
The encoding of thehash
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)
[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)[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 thetendermint-rpc
CLI (see the README for details). (#859)[tendermint, tendermint-light-client]
Add support for Secp256k1 signatures (#939)
[tendermint-p2p]
TheSecretConnection
can now be split into two halves to facilitate full-duplex communication (must be facilitated by using each half in a separate thread). (#938)[tendermint-light-client]
Model-based tests are now disabled by default and can be enabled through thembt
feature (#968)[tendermint, tendermint-rpc]
DeriveEq
onSignedHeader
andCommit
(#969)[tendermint-light-client]
AddWebSocketClient::new_with_config
to specify the WebSocket connection settings (#974)[tendermint-p2p]
Amino support is now implemented using the upstreamprost
crate, eliminating a dependency onprost-amino
(#979)
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
was reported in prost
v0.7, and we attempted to upgrade to v0.8, but we are
still awaiting one bug fix 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.
[tendermint-rpc]
Remove theTmEvent
andAttribute
structs and replace them with their equivalent domain types from thetendermint
crate (#918)[tendermint]
TheTrustThresholdFraction
struct can now only be constructed by way of itsnew
constructor. Deserialization also now makes use of this constructor, facilitating better validation. Thenumerator
anddenominator
fields can be accessed (read-only) via their respective methods, since the fields are now private. (#924)
[tendermint]
Update Genesis for Tendermint v.0.34.x (#917)[tendermint-rpc]
Fix bug whereNewBlock
events emitted by Tendermint could not be parsed because of a missing field (#930)
[tendermint-proto]
Regenerate the Rust equivalents of the Tendermint Protobuf structures for Tendermint v0.34.9 (#871)[tendermint-rpc]
AddPartialEq
,Eq
,PartialOrd
,Ord
andHash
trait bounds to the RPC URL types (#919)[tendermint-rpc]
Propagate JSON-RPC errors through the Rust subscription (#932)
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.
[tendermint-p2p]
Remove superfluous module name suffixes inp2p::error
(#898)[tendermint]
Renametime::Time::to_rfc3339
toas_rfc3339
to be consistent with Rust's self reference conventions (#910)
[tendermint-abci,tendermint-rpc]
Fix DeliverTx response deserialization issues withgas_wanted
andgas_used
fields (#876)[tendermint]
Update TendermintConfig for Tendermint v.0.34.x (#897)[tendermint]
Better handling of optional values in TendermintConfig (#908)
[tendermint-light-client]
Replacedtempdir
dev dependency (deprecated) withtempfile
(#851)- Updated the changelog process to use unclog format and unblock the PR merge process (#891).
[tendermint]
Changedtendermint::public_key::Secp256k1
to be an alias ofk256::ecdsa::VerifyingKey
(#900)
[tendermint-light-node]
We removed thelight-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 for now. (#879)
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'sverify
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.
[tendermint]
Thetendermint::block::CommitSig
enum's members have been renamed to be consistent with Rust's naming conventions. For example,BlockIDFlagAbsent
is now renamed toBlockIdFlagAbsent
(#839)[tendermint-light-client]
The Light Client no longer usestendermint::net::Address
to refer to peers, and instead uses thetendermint_rpc::Url
type (#835)[tendermint-rpc]
TheClient::validators
method now requires aPaging
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]
TheClient::validators
method now requires aPaging
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]
TheSubscriptionClient
trait now requires aclose
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]
TheHttpClient
andWebSocketClient
constructors now take any input that can be converted to atendermint_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]
Theevent::EventData::GenericJSONEvent
member has been renamed toevent::EventData::GenericJsonEvent
(#839)[tendermint-testgen]
TheTMLightBlock
data structure has been renamed toTmLightBlock
to be consistent with Rust's naming conventions (#839)
[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 thetendermint-light-client-js
crate to provide access to Tendermint Light Client functionality from WASM. This only provides access to theverify
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://
andwss://
) has been added to the Tendermint RPC clients, as well as support for HTTP proxies for HTTP clients (#820)[tendermint-rpc]
Atendermint-rpc
CLI has been added to simplify interaction with RPC endpoints from the command line (#820)
[tendermint]
IPv6 support has been added fornet::Address
(#5)[tendermint-rpc]
Addwait_until_healthy
utility method for RPC clients to poll the/health
endpoint of a node until it either returns successfully or times out (#855)
[tendermint-light-client]
Due to the RPC client'svalidators
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)
Feb 10, 2021
The main focus for this minor release is fixing the rendering of our
tendermint-light-client
crate documentation.
[tendermint-proto]
Fix panic in evidence serialization in the case where we receive an empty evidence Protobuf structure (#782)[tendermint-light-node]
Upgradejsonrpc
dependency to v17.0 to fix security vulnerability inhyper
v0.12.35 (#803)[tendermint-light-client]
Fix rendering of documentation on docs.rs (#806)
Jan 29, 2021
This release is breaking due to significant dependency updates (see below).
It also introduces experimental support for
backward verification for the Light Client,
feature-guarded behind the unstable
feature.
The Light Client's storage system and its API were also improved.
[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
)
[light-client]
Add basic support for backward verification, behind aunstable
feature flag. (#361) Note: This feature is currently unstable and should not be relied on by downstream dependencies.
[light-client]
Fix potential block ordering problem with sled-based lightstore (#769)[light-client]
Improve the API of the light store. (#428)[light-client]
Thesled
-backed lightstore is now feature-guarded under thelightstore-sled
feature, which is enabled by default for now. (#428)
Jan 11, 2021
This release primarily focuses on fixing #774, which is critical to the Light Client's correct and reliable operation.
[rpc, tools]
The RPC probe has been moved into thetools
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)
[tendermint]
Time
values were not always formatted properly, causing the light client to sometimes return malformed light blocks (#774)
Dec 17, 2020
This release is a significant breaking upgrade from v0.16.0 that primarily targets compatibility with Tendermint v0.34 and the Cosmos Stargate release.
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.
- Improved our model-based testing to provide complex test cases for the Light Client.
- Refactored our serialization infrastructure to remove all Amino types and ensure Protobuf compatibility (see the proto crate). 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, including event subscription.
Please see the following detailed release notes, as well as the crate documentation, for further details.
[rpc]
The RPC client interface has been refactored. TheClient
struct is nowHttpClient
and is enabled with thehttp-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 thewebsocket-client
feature. Subscriptions are exposed using unbounded channels. (#516)[tendermint]
Removed all traces of Amino, includingamino_types
modules. All types are now "domain types" implementing theProtobuf
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)
[light-client]
Introduce builder API for light client initialization (#583)[rpc]
The subscription client interface provides a structuredQuery
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]
Implementfmt::UpperHex
forTransaction
(#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)
- [
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 whenrpc-client
feature is enabled (#425)[rpc]
AWebSocketClient
is now provided to facilitate event subscription for a limited range of RPC events over a WebSocket connection. See the Tendermint/subscribe
endpoint's and thetendermint-rpc
crate's docs for more details (#516)[rpc]
The subscription client interface provides a structuredQuery
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 therpc-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]
TheWebSocketClient
now adds support for all remaining RPC requests by way of implementing theClient
trait (#646)[rpc]
Support for thetx_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 theconsensus_state
RPC endpoint has been added (#719)[tendermint]
Removetotal_voting_power
parameter fromvalidator::Set::new
(#739)[tendermint, rpc, light-client]
Crates now compile to WASM on thewasm32-unknown-unknown
andwasm32-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]
Computelast_block_id
hash when generating aLightChain
(#745)- Dependency updates:
[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)
Aug 31, 2020
This release is the first release of the testgen 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.
lite
module was removed. Please take a look at the light-client crate.
- [repo] CHANGES.md renamed to CHANGELOG.md
- [tendermint] Eliminate use of
signatory
wrapper crate in favour of underlyinged25519-dalek
andk256
crates.ed25519-dalek
is now v1.0 andk256
provides a pure Rust implementation of secp256k1 rather than wrapping the C library (#522) - [tendermint] Remove
lite
andlite_impl
modules. See the newlight-client
crate (#500)
- [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)
- [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)
- [light-client] Fix to reject headers from the future (#474)
July 17, 2020
This release is the first official release of the revamped light-client library and the light-node 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 and light-node 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.
- [repo] make secp256k1 dependency optional (#441)
- [light-client] Rewrite and expansion of
lite
, the prior light client verification module, into a new fully-featuredlight-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 aSupervisor
, which is run in its own thread, and exposes a Handle trait to broker access to underlying state and functionality. See the light-client 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 crate for details.
- [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)
0.14.1 (2020-06-23)
- Update
prost-amino
/prost-amino-derive
to v0.6 (#367)
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).
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 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)
- Feature guard
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)
0.13.0 (2020-04-20)
Dependencies:
- Update
signatory
requirement to v0.19 (#227)
Dependencies
- Update to bytes
0.5
and amino_rs0.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 [email protected]:
abci_info
,abci_query
#120 - JSON ID is JSON specification compatible and accepts int, string or null - [#88]
This is the first release since this repository was split off from the 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
toCommit
(#42) - Fix genesis file to include
validators
field (#65) - Change
max_gas
fromu64
toi64
(#61) - Allow
Height
to be0
(#77)
ABCI Changes:
- Include
AbciQuery
in theMethod
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 inputdata
as hex and returnkey
andvalue
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
andring
as dependencies (moved to KMS repo) (#60) -
tai64
from2
to3
(#22) -
zeroize
from0.9
to1.1
([#74, #89]) -
hyper
from0.10
to0.13
(#85) -
signatory
from0.12
to0.17
(#89) -
subtle-encoding
from0.3
to0.5
(#47) -
uuid
from0.7
to0.8
(#91) -
replace
rand_os
withgetrandom
(#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
andError(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
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 improveserde
serializer support (#228).
0.5.0 (2019-03-13)
This release is compatible with tendermint v0.30
- Rename
SecretConnectionKey
tosecret_connection::PublicKey
, addsecret_connection::PeerId
(#219) - Move
ConsensusState
underchain::state
(#205)
- Skipped to synchronize versions with
tmkms
- Support for secp256k1 keys (#181)
This release is compatible with tendermint v0.29
- Update to x25519-dalek v0.4.4 (#158)
- Consistent ordering of
BlockID
andTimestamps
in vote and proposal messages (#159) - Remove
PoisonPillMsg
previously used to shut-down the kms (#162)
This release is compatible with tendermint v0.28
- Split
PubKeyMsg
intoPubKeyRequest
andPubKeyResponse
(#141) - Migrate to Rust 2018 edition (#138)
- Allow empty BlockIds in validation method (#131)
- Prefix bech32 encoding of consensus keys with amino prefix (#128)
- Update to subtle-encoding v0.3 (#124)
- Introduce same validation logic as Tendermint (#110)
- Remove heartbeat (#105)
- Minor clarifications/fixes (#103)
- Initial release