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.
[tendermint-proto]AddAnytype undertendermint_proto::google::protobuf::Any(#1445)
[tendermint-proto]Implementprost::Namefortendermint_proto::google::protobuf::{Duration, Timestamp}(#1452)[tendermint-proto]Improve ProtoJSON serialization oftendermint_proto::google::protobuf::{Duration, Timestamp}(#1452)
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.
[tendermint]Bumpprostandprost-typesto their latest versions in thetendermintcrate. This was missed in #1444, which only updated the two dependencies intendermint-rpc, leading to duplicate versions of both crates to be present in the dependency graph. (#1446)
[tendermint-rpc]IfAppHashfails to decode as hex, try to decode it as base64. (#1449)
July 15th, 2024
This release enhances /block_results response handling, relaxes Block validation, and adds support for the /genesis_chunked RPC endpoint.
- tendermint: relax validation rules on
Block(#1435) [tendermint-proto]: Updateprostto v0.13 andtonicto v0.12 (#1444)
[tendermint-rpc]Deserialize an empty JSON object asNonefor theconsensus_param_updatesfield in the/block_resultsresponse. Deserialize version in consensus params asNoneif it is an empty object, null or not found. (#1440)
[tendermint-rpc]Add support for the/genesis_chunkedRPC endpoint (#1438)
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.
[tendermint-proto]Upgradetonicto v0.11 (#1422)[tendermint-light-client-verifier]Restores the commit verification interfaces ofPredicateVerifier<P, C, V>from<= 0.35.0(#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 toverify_commit_against_trusted. The performance improvements made in the0.36.0release are still intact.
[tendermint-rpc]Add a way to specify custom User-Agent forHttpClient(#1425)
[tendermint-rpc]Add aclient()method ontransport::http::Builderto override the underlyingreqwestclient (#1421)[tendermint-rpc]Add afrom_raw_parts()method ontransport::http::HttpClientto allow supplying the underlyingreqwestclient (#1421)
[tendermint]FixFinalizeBlock::validator_updatesdeserialization asnullable(#1428)[tendermint-abci]Add serdedefaultannotation forEvent::typeto matchomitemptyin the Go implementation (#1416)
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.
-
[tendermint-proto]Remove redundant impl ofnum_traits::ToPrimitiveforBlockIDFlag(#1389) -
[tendermint]ChangeEventAttribute'skeyandvaluefields fromStringtoVec<u8>for Tendermint v0.34, as enforced by the Protobuf schema for Tendermint v0.34.tendermint::abci::EventAttributeis now an enum, to account for version 0.34 and 0.37+, therefore thekey,valueandindexfields now have to be retrieved through thekey_str()/key_bytes,value_str()/value_bytes()andindex()methods. (#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_overlapmethod and second time by call tohas_sufficient_signers_overlapmethod.With the new interface,
has_sufficient_validators_and_signers_overlapis 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)
[tendermint-proto]Add missingserdederives on Protobuf definitions (#1389)[tendermint]Add the following impls fored25519-consensus:From<ed25519_consensus::SigningKeyfortendermint::PrivateKeyFrom<ed25519_consensus::SigningKey>fortendermint::SigningKeyFrom<ed25519_consensus::VerificationKey>fortendermint::PublicKeyFrom<ed25519_consensus::VerificationKey>fortendermint::VerificationKey(#1401)
[tendermint]Allow misformed blocks (eg. with emptylast_commiton non-first block) when decoding them from Protobuf or RPC responses (#1403)[tendermint]Checkindex ≤ i32::MAXinvariant when convertingusizeintoValidatorIndex. (#1411)[light-client-verifier]Optimise validators lookup inProvidedVotingPowerCalculator::voting_power_inmethod. (#1407)[tendermint-light-client-verifier]Reuse buffer used to store sign_bytes to reduce number of allocations and deallocations. (#1413)
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.
- Don’t enable
flex-error/eyre_tracerfeature 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) [tendermint]Allow null values inkeyandvaluefields ofEventAttributewhen deserializing. The serialization schema for the fields is changed toOption<String>(#1375).[tendermint-rpc]Add thecodespacefield to the Tx sync and async broadcastResponse(#1382)
[tendermint-p2p]Fix data corruption on sending long messages viaSecretConnection(#1393)[tendermint-rpc]Fix deserialization of/block_resultsresponse when some tx results are non-ok (#1391)
[tendermint-rpc]Export thehttp,websocketmodules underclient, each with the publicBuildertype (#1378).[tendermint-rpc]Allow specifying a request timeout for the RPCHttpClient.http::Buildernow provides a.timeout(Duration)method to specify the request timeout. If not specified, the default value is 30 seconds. (#1379)[tendermint-rpc]AddFromStr,SerializeandDeserializeinstances toCompatMode(#1374)[tendermint-light-client-verifier]Optimizing voting power calculation by breaking the loop when we have enough voting power (#1378).
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.
[tendermint-proto]Update dependencies to prost 0.12 and tonic 0.10 (#1349)[tendermint-rpc]ChangedErrorDetailvariants (#1362):- Removed the
HyperandInvalidUrivariants. - The
Httpvariant now hasErrorfromreqwestas the source. - Added the
InvalidProxyvariant. - The
tungstenitedependency exposed through itsErrortype in WebSocket-related variants has been updated to version 0.20.x.
- Removed the
[tendermint-rpc]Removed aTryFrom<HttpClientUrl>conversion forhyper::Urias hyper is no longer a direct dependency (#1362).[tendermint-proto]Updatev0_38bindings to CometFBT release 0.38.0 (#1365).[tendermint]Add fields toabci::request::ExtendVoteto represent the fields added to theabci.RequestExtendVoteprotobuf message since the 0.38.0-rc3 release (#1365).
[tendermint]Add support for secp256k1 consensus keys (#1364)
[tendermint-rpc]Turn non-200 HTTP response into an error instead of trying to parse the body as a JSON-RPC response (#1359)[tendermint-rpc]Makerpc::ClientandSubscriptionClienttraits?Sendunderwasm32target. (#1385)
[tendermint-rpc]Address the RUSTSEC-2023-0052 vulnerability by dropping dependency onhyper-proxyand changing the HTTP client to usereqwest(#1342).
September 18th, 2023
This release includes bug fixes and performance improvements to how CometBFT data types are serialized and deserialized.
-
Changed the serde schema produced by
serializefunctions in these helper modules ([#1351](https://github.com/informalsystems/tendermint- rs/pull/1351)):- In
tendermint-proto:serializers::nullableserializers::optional
- In
tendermint:serializers::apphashserializers::hashserializers::option_hash
If
serde_jsonis 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. - In
[tendermint]Integer overflows are prevented when calculating the total voting power value invalidator::Set(#1348).[tendermint-proto]SerializeandDeserializeimpls forv*::crypto::PublicKeyare corrected to match the JSON schema used by other implementations (#1350).- [
tendermint] Fix JSON serialization of timestamp field forCommitSig::BlockIdFlagAbsentto match what is expected by CometBFT (#1352)
[tendermint-testgen]Addapp_hashfield to testgenHeaderand implement convenient method for defaultLightBlockconstruction fromHeader(#1343)[tendermint]Improve and validate deserialization ofvalidator::Set(#1348). Thetotal_voting_powerfield no longer has to be present in the format processed byDeserialize. If it is present, it is validated against the sum of thevoting_powervalues of the listed validators. The sum value is also checked against the protocol-defined maximum.[tendermint-proto]In theDeserializeimpls derived forv*::types::ValidatorSet, thetotal_voting_powerfield value is retrieved when present.[tendermint-proto]Add serialziation helper moduleserializers::from_str_allow_null. Use it to allow theproposed_priorityfield value of null in the deserialization ofv*::types::Validator.- Corrected custom serializer helpers to consistently produce the format accepted by the deserializer. Improved performance of deserializers. (#1351)
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.
[tendermint-proto]addgrpc/grpc-serverfeatures to include gRPC server definitions for the RPC/ABCI services. (#1338)
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.
[tendermint]Adaptations for CometFBT 0.38 (#1312):- Define
consensus::params::AbciParamsstruct, add theabcifield of this type toconsensus::Paramsto represent the protobuf additions. - Change the
abci::Requestandabci::Responsereexports to use the enums defined inv0_38.
- Define
[tendermint]Define version-specific categorized request/response enums:ConsensusRequest,MempoolRequest,InfoRequest,ShapshotRequest,ConsensusResponse,MempoolResponse,InfoResponse,ShapshotResponse, in each of thev0_*::abcimodules, so that the variants are trimmed to the requests/responses used by the respective protocol version. Reexport the types fromv0_38::abcias aliases for these names in theabcimodule, continuing the naming as used in older API. (#1312).[tendermint]RenameSignature::to_bytestoSignature::into_bytes(#1312).[tendermint-abci]Update theApplicationinterface to CometBFT 0.38 (#1312)[tendermint-rpc]Changes to support the RPC protocol in CometBFT 0.38 (#1317):- Add
finalize_block_resultsandapp_hashfields toendpoint::block_results::Response. - The
deliver_txfield is renamed totx_resultinendpoint::broadcast::tx_commit::Response. - The
tx_resultfield type changed toExecTxResultinendpoint::tx::Response. - The
event::EventData::NewBlockvariant is renamed toLegacyNewBlock. The newNewBlockvariant only carries fields relevant since CometBFT 0.38. - Removed
event::DialectEvent, replaced with non-generic serialization helpers inevent::{v0_34, v0_37, v0_38}. TheDeserializehelpers in the latter two modules are aliased from common types that can support both fields added in CometBFT 0.38,block_idandresult_finalize_block, as well as the fields present 0.37. Likewise forDialectEventDataand 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.
- Add
[tendermint]Changes to support the RPC protocol in CometBFT 0.38 (#1317):- Due to some attribute changes, the format emitted by
Serializeis changed forabci::responsetypesCheckTxandFinalizeBlock.
- Due to some attribute changes, the format emitted by
- [
tendermint-rpc] Decode the earliest block data fields of thesync_infoobject in/statusresponse and expose them in theSyncInfostruct:earliest_block_hash,earliest_app_hash,earliest_block_height,earliest_block_time(#1321). [tendermint-proto]Align the return signature of theencode_vecandencode_length_delimited_vecmethods in theProtobuftrait withprost::Messageby directly returningVec<u8>. (#1323)- Remove mandatory cloning in
Protobufmethods and let callers decide on clone beforehand for original value access
- Remove mandatory cloning in
[tendermint-proto]Generate prost bindings for CometBFT 0.38 under thetendermint::v0_38module (#1312)[tendermint]Support for CometBFT 0.38: (#1312):- Add conversions to and from
tendermint::v0_38protobuf types generated in [tendermint-proto]. - Add request and response enums under
v0_38::abcito enumerate all requests and responses appropriate for CometBFT version 0.38. - Add request and response types under
abcito represent the requests and responses new to ABCI++ 2.0 in CometBFT version 0.38. The names areExtendVote,FinalizeBlock,VerifyVoteExtension.
- Add conversions to and from
[tendermint-rpc]Support for CometBFT 0.38 (#1317):Deserializeimplementations onabci::Event,abci::EventAttributethat correspond to the current RPC serialization.- Domain types under
abci::responsealso getDeserializeimplementations corresponding to the current RPC serialization. Serialize,Deserializeimplementations onabci::types::ExecTxResultcorresponding to the current RPC serialization.- Added the
apphash_base64serializer module.
Fixed a minor cargo metadata problem that gummed up the 0.32.1 release.
Fixed a bug with processing the latest_block_result endpoint result
in the RPC client set to the 0.34 compatibility mode.
[tendermint-rpc]Use compatibility mode in implementations of theClient::latest_block_resultsmethod (#1326)
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::verifytoVerifier::verify_update_headerto 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_headerfor 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]: ExportClienttrait unconditionally, without having to specify either thehttp-clientorwebsocket-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]Bumped25519to v2,k256to v0.13, andsignatureto v2
- [
tendermint] Adds a newTypedEventfor encoding structured data in ABCI events (#1288). - [
tools/proto-compiler] Parse and fetch proto dependencies as listed in thebuf.lockfile (#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 ABCIRequestandResponseenums underv0_34::abciandv0_37::abci, containing only the method variants present in each of the respective protocol versions.RequestandResponsedefined underv0_37are re-exported under the non-versionedabcimodule name, but theSetOptionvariant 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_configto accept aWebSocketConfigstruct value rather than anOption. (#1193) - [
tendermint-proto] Theserializers::evidencemodule has been made private. (#1193) - [
tendermint-rpc] Bumpasync-tungstenitedependency version to 0.20, re-exportingWebSocketConfigfromtungstenite0.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_34andtendermint::v0_37module namespaces, respectively. The names undertendermint::v0_37are also re-exported undertendermint. (#1193) - [
tendermint] New and updated ABCI domain types for Tendermint Core v0.37 (#1193). - [
tendermint] Protobuf conversions provided for bothv0_34andv0_37versions 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. AnHttpClientcan be created with a selected mode specified in the newbuilderAPI, or have the mode changed afterwards (usually after version discovery) by the addedset_compat_modemethod. ForWebSocketClient, the mode can only be specified at creation via the newbuilderAPI. (#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
Hashontendermint::Time(#1278) - [
tendermint-light-client] Showmax_clock_driftin 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
Sha256trait in modulecryptoand make digest hashing implementations available through it. - Provide a
Verifiertrait in modulecrypto::signatureto enable alternative implementations of signature verification available through it. AnErrorenum is defined in the same module, representing the error cases that can arise in the implementation in a deliberately opaque way. - The module
crypto::defaultprovides pure Rust implementations of the cryptographic traits. The module is made available by a newrust-cryptofeature, enabled by default. merkle::simple_hash_from_byte_vectorsis made generic over an implementation of the newMerkleHashtrait. Implementations for Rust-Crypto conformant digest objects and the non-incrementalcrypto::Sha256API are provided in the crate.- The
Header::hashandValidatorSet::hashmethods are gated by therust-cryptofeature. Generic hashing methods not dependent on the default crypto implementations are added for both types, namedhash_with. - Conversions to
account::Idandnode::IdfromPublicKeyand curve-specific key types are gated by therust-cryptofeature. - The
validator::Info::newmethod is gated by therust-cryptofeature. - Remove a deprecated constant
signature::ED25519_SIGNATURE_SIZE.
- Provide a
-
[tendermint-light-client-verifier]Changes for the new Tendermint crypto API (#1238).- The
rust-cryptofeature, enabled by default, guards the batteries-included implementation types:ProdVerifier,ProdPredicates,ProdVotingPowerCalculator. - Remove the
operations::hasherAPI (HasherandProdHasher), made unnecessary by the new crypto abstractions in thetendermintcrate. - The
VerificationPredicatestrait features aSha256associated type to represent the hasher implementation, replacing the&dyn Hasherparameter passed to methods. - Change the type of the
VerificationErrorDetail::FaultySignerfieldvalidator_settoValidatorSet. This removes a hasher dependency fromCommitValidator, andProdCommitValidatoris now an empty dummy type.
- The
-
[tendermint-light-client]Changes for the new Tendermint crypto API (#1238).- The
rust-cryptofeature enables the default crypto implementations, and is required by therpc-clientandunstablefeatures.ProdForkDetectoris guarded by this feature, and is made a specific type alias to the hasher-genericProvidedForkDetectortype. LightClientBuildergets another type parameter for the Merkle hasher. Its generic constructors lose theHasherparameter.
- The
[tendermint-light-client]Fix verification of blocks between two trusted heights (#1246)
[tendermint, tendermint-p2p]Replaced theed25519-dalekdependency 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_idmethod to theVerificationPredicatestrait[tendermint-light-client-verifier]Add achain_idfield to theTrustedBlockStatestruct
[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::OfferSnapshotapp_hashAppHashabci::response::Infolast_block_app_hashAppHashabci::response::InitChainapp_hashAppHashGenesisapp_hashAppHash -
[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 thekeyfield fromquery::Conditionand structure aquery::Conditionto havekeyandoperationfields, since thekeyfield is common to all conditions (#1230) -
[tendermint]Renamemerkle::proof::ProoftoProofOps(#1234) -
[tendermint-rpc]Change the type of/txresponse fieldprooftotendermint::tx::Proof(#1233)
[tendermint]AddedTimemethodsunix_timestampandunix_timestamp_nanos. (#1175)[light-client]Addedvalidate,validate_against_trusted,verify_commitandverify_commit_against_trustedmethods toPredicateVerifier. (#1222)[tendermint-rpc]Maketendermint_rpc::Query's fields public and add aCondition::key(&self) -> &strmethod (#1230)[tendermint]Add domain typesmerkle::Proofandtx::Proof, to represent protobuf messagescrypto.Proofandtypes.TxProofrespectively (#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]UseBytesfor byte array fields of ABCI protobuf types. (#1203)
[tendermint-rpc]The encoding of thehashfield for requests to the/block_by_hashendpoint 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
TrustThresholdFractionof 1
(#1208)
[tendermint-abci]DeprecateClient::set_option. (#1203)
[tendermint-rpc]Add support for the/block_by_hashRPC 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_resultsresponse when it contains evidence for a duplicate vote (#1194)
- Unpin
timedependency (#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 toDefaultfor the omitted fields when deserializingtendermint_proto::abci::ResponseInfostruct, also providing deserialization for the response at the/abci_infoRPC endpoint. (#1132)
- Update
k256to 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
prostto 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 theAppStatetype 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-clientcrate into its ownno_std-compatible crate:tendermint-light-client-verifier. This helps move us closer tono_stdcompliance 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-proxyto userustls, eliminating the only use ofnative-tlsin 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]Hashis implemented fortendermint::Time(#1054)
[tendermint-rpc]Allow deserialization of public keys from validator updates fromblock_resultsendpoint 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]UseOffsetDateTimeandDatetypes provided by thetimecrate in query operands instead of theirchronocounterparts. (#1030)
[tendermint]Deprecatedsignature::ED25519_SIGNATURE_SIZEin favor ofEd25519Signature::BYTE_SIZE(#1023)- Remove dependencies on the
chronocrate. (#1030) [tendermint]Improvetendermint::Time(#1036, revised by #1048):- Restrict the validity range of
Timeto dates with years in the range 1-9999, to match the specification of protobuf messageTimestamp. Add anErrorDetailvariantDateOutOfRangeto report when this restriction is not met. - Added a conversion to, and a fallible conversion from,
OffsetDateTimeof thetimecrate.
- 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::IdDisplayimplementation 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, tendermint-config]Thetendermint::configmodule has now been broken out into its own crate (tendermint- config) to help towards facilitatingno_stdcompatibility (#983)[tendermint]Thetendermint::node::info::OtherInfo::rpc_addressfield type has been changed fromtendermint::net::AddresstoStringtoward facilitatingno_stdcompatibility (#983)[tendermint]Thetendermint::node::info::ListenAddress::to_net_addressmethod was replaced with a simpleas_strmethod toward facilitatingno_stdcompatibility ([#983](https://github.com/informalsystems/tendermint- rs/issues/983))
[tendermint-rpc]Add support for the/block_searchRPC 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_stdsupport. (#923) [tendermint-rpc]The/txendpoint'sRequest::hashfield has been changed fromStringtotendermint::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_clientandibc-rs(#956)[tendermint-light-client]Disable thelightstore-sledfeature by default (#976)
[tendermint-rpc]The encoding of thehashfield for requests to the/txendpoint 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_paramsRPC endpoint. See https://docs.tendermint.com/v0.34.x/rpc/\#/Info/consensus_params for details (#832)[tendermint-rpc]Runtime query parsing (relevant to the/subscribeand/tx_searchendpoints) 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-rpcCLI (see the README for details). (#859)[tendermint, tendermint-light-client]Add support for Secp256k1 signatures (#939)
[tendermint-p2p]TheSecretConnectioncan 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 thembtfeature (#968)[tendermint, tendermint-rpc]DeriveEqonSignedHeaderandCommit(#969)[tendermint-light-client]AddWebSocketClient::new_with_configto specify the WebSocket connection settings (#974)[tendermint-p2p]Amino support is now implemented using the upstreamprostcrate, 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 theTmEventandAttributestructs and replace them with their equivalent domain types from thetendermintcrate (#918)[tendermint]TheTrustThresholdFractionstruct can now only be constructed by way of itsnewconstructor. Deserialization also now makes use of this constructor, facilitating better validation. Thenumeratoranddenominatorfields 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 whereNewBlockevents 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,OrdandHashtrait 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_rfc3339toas_rfc3339to be consistent with Rust's self reference conventions (#910)
[tendermint-abci,tendermint-rpc]Fix DeliverTx response deserialization issues withgas_wantedandgas_usedfields (#876)[tendermint]Update TendermintConfig for Tendermint v.0.34.x (#897)[tendermint]Better handling of optional values in TendermintConfig (#908)
[tendermint-light-client]Replacedtempdirdev dependency (deprecated) withtempfile(#851)- Updated the changelog process to use unclog format and unblock the PR merge process (#891).
[tendermint]Changedtendermint::public_key::Secp256k1to be an alias ofk256::ecdsa::VerifyingKey(#900)
[tendermint-light-node]We removed thelight-nodecrate 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'sverifymethod 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::CommitSigenum's members have been renamed to be consistent with Rust's naming conventions. For example,BlockIDFlagAbsentis now renamed toBlockIdFlagAbsent(#839)[tendermint-light-client]The Light Client no longer usestendermint::net::Addressto refer to peers, and instead uses thetendermint_rpc::Urltype (#835)[tendermint-rpc]TheClient::validatorsmethod now requires aPagingparameter. 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::validatorsmethod now requires aPagingparameter. 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]TheSubscriptionClienttrait now requires aclosemethod, 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]TheHttpClientandWebSocketClientconstructors 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::GenericJSONEventmember has been renamed toevent::EventData::GenericJsonEvent(#839)[tendermint-testgen]TheTMLightBlockdata structure has been renamed toTmLightBlockto 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-jscrate to provide access to Tendermint Light Client functionality from WASM. This only provides access to theverifymethod 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-rpcCLI 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_healthyutility method for RPC clients to poll the/healthendpoint of a node until it either returns successfully or times out (#855)
[tendermint-light-client]Due to the RPC client'svalidatorsmethod 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]Upgradejsonrpcdependency to v17.0 to fix security vulnerability inhyperv0.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 aunstablefeature 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-sledfeature, 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 thetoolsfolder and can now be easily executed against a Tendermint node running the kvstore app by way of cargo make.tendermint-rpctest coverage has been expanded here too. (#758)
[tendermint]Timevalues 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. TheClientstruct is nowHttpClientand is enabled with thehttp-clientfeature. 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-clientfeature. Subscriptions are exposed using unbounded channels. (#516)[tendermint]Removed all traces of Amino, includingamino_typesmodules. All types are now "domain types" implementing theProtobuftrait 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 structuredQuerymechanism 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::UpperHexforTransaction(#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-clientfeature is enabled (#425)[rpc]AWebSocketClientis now provided to facilitate event subscription for a limited range of RPC events over a WebSocket connection. See the Tendermint/subscribeendpoint's and thetendermint-rpccrate's docs for more details (#516)[rpc]The subscription client interface provides a structuredQuerymechanism 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-probedirectory) 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]TheWebSocketClientnow adds support for all remaining RPC requests by way of implementing theClienttrait (#646)[rpc]Support for thetx_searchRPC 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_stateRPC endpoint has been added (#719)[tendermint]Removetotal_voting_powerparameter fromvalidator::Set::new(#739)[tendermint, rpc, light-client]Crates now compile to WASM on thewasm32-unknown-unknownandwasm32-wasitargets (#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_idhash 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
signatorywrapper crate in favour of underlyinged25519-dalekandk256crates.ed25519-dalekis now v1.0 andk256provides a pure Rust implementation of secp256k1 rather than wrapping the C library (#522) - [tendermint] Remove
liteandlite_implmodules. See the newlight-clientcrate (#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
testgencrate for generating Tendermint types from minimal input (#468)
- [light-client] Use the
testgenfor generating tests - [light-client] Use primary error as context of
NoWitnessLefterror (#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-clientcrate. 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-deriveto 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,genesisstructs- 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
signatoryrequirement to v0.19 (#227)
Dependencies
- Update to bytes
0.5and 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 tendermint-go@v0.32:
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
tendermintcrate (#30) - Remove all optional compilation (#16)
- Started using CircleCI for continuous integration (#15)
- Fix clippy lints (#40, #55)
RPC Changes:
- Fix
/commitendpoint to actually include the commit data (#42) - Use async/await for the rpc client (#85)
Type Changes:
- Add
Defaulttrait impls and some other utilities to data types (#64) - Fix transaction hash length to be 32-bytes (#14)
- Rename
LastCommittoCommit(#42) - Fix genesis file to include
validatorsfield (#65) - Change
max_gasfromu64toi64(#61) - Allow
Heightto be0(#77)
ABCI Changes:
- Include
AbciQueryin theMethodenum (#AbciQueryMethodEnum) - Fix deserializing ABCI Code field (#13)
- Fix ABCI data field to allow lower case hex encodings (#17)
- Fix
/abci_queryendpoint to take inputdataas hex and returnkeyandvaluein the response as base64 (#77)
Light Client:
-
Introduce validator
Settype and compute Merkle root (#6) -
First draft implementation of logic for the light client ([#31, #36])
-
Dependency Changes:
-
Remove
secret_connectionandringas dependencies (moved to KMS repo) (#60) -
tai64from2to3(#22) -
zeroizefrom0.9to1.1([#74, #89]) -
hyperfrom0.10to0.13(#85) -
signatoryfrom0.12to0.17(#89) -
subtle-encodingfrom0.3to0.5(#47) -
uuidfrom0.7to0.8(#91) -
replace
rand_oswithgetrandom(#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
TendermintConfigandError(Kind)types (#298) - Support
/abci_queryRPC endpoint (#296) - Implement the Tendermint (RFC6962) Merkle tree (#292)
- Support
account::Idgeneration 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
RemoteErrorCodeenum (#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 improveserdeserializer support (#228).
0.5.0 (2019-03-13)
This release is compatible with tendermint v0.30
- Rename
SecretConnectionKeytosecret_connection::PublicKey, addsecret_connection::PeerId(#219) - Move
ConsensusStateunderchain::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
BlockIDandTimestampsin vote and proposal messages (#159) - Remove
PoisonPillMsgpreviously used to shut-down the kms (#162)
This release is compatible with tendermint v0.28
- Split
PubKeyMsgintoPubKeyRequestandPubKeyResponse(#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