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]
AddAny
type undertendermint_proto::google::protobuf::Any
(#1445)
[tendermint-proto]
Implementprost::Name
fortendermint_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]
Bumpprost
andprost-types
to their latest versions in thetendermint
crate. 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]
IfAppHash
fails 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]
: Updateprost
to v0.13 andtonic
to v0.12 (#1444)
[tendermint-rpc]
Deserialize an empty JSON object asNone
for theconsensus_param_updates
field in the/block_results
response. Deserialize version in consensus params asNone
if it is an empty object, null or not found. (#1440)
[tendermint-rpc]
Add support for the/genesis_chunked
RPC 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]
Upgradetonic
to 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.0
release are still intact.
[tendermint-rpc]
Add a way to specify custom User-Agent forHttpClient
(#1425)
[tendermint-rpc]
Add aclient()
method ontransport::http::Builder
to override the underlyingreqwest
client (#1421)[tendermint-rpc]
Add afrom_raw_parts()
method ontransport::http::HttpClient
to allow supplying the underlyingreqwest
client (#1421)
[tendermint]
FixFinalizeBlock::validator_updates
deserialization asnullable
(#1428)[tendermint-abci]
Add serdedefault
annotation forEvent::type
to matchomitempty
in 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::ToPrimitive
forBlockIDFlag
(#1389) -
[tendermint]
ChangeEventAttribute
'skey
andvalue
fields fromString
toVec<u8>
for Tendermint v0.34, as enforced by the Protobuf schema for Tendermint v0.34.tendermint::abci::EventAttribute
is now an enum, to account for version 0.34 and 0.37+, therefore thekey
,value
andindex
fields 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_overlap
method and second time by call tohas_sufficient_signers_overlap
method.With the new interface,
has_sufficient_validators_and_signers_overlap
is called and it can be implemented to remember which signatures have been verified.As a side effect of those changes, signatures are now verified in the order of validator’s power which may further reduce number of signatures which need to be verified.
(#1410)
[tendermint-proto]
Add missingserde
derives on Protobuf definitions (#1389)[tendermint]
Add the following impls fored25519-consensus
:From<ed25519_consensus::SigningKey
fortendermint::PrivateKey
From<ed25519_consensus::SigningKey>
fortendermint::SigningKey
From<ed25519_consensus::VerificationKey>
fortendermint::PublicKey
From<ed25519_consensus::VerificationKey>
fortendermint::VerificationKey
(#1401)
[tendermint]
Allow misformed blocks (eg. with emptylast_commit
on non-first block) when decoding them from Protobuf or RPC responses (#1403)[tendermint]
Checkindex ≤ i32::MAX
invariant when convertingusize
intoValidatorIndex
. (#1411)[light-client-verifier]
Optimise validators lookup inProvidedVotingPowerCalculator::voting_power_in
method. (#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_tracer
feature in crates which don’t use eyre directly. If you’re using eyre, and no other crate enables it, you may need to enable that explicitly. (#1371) [tendermint]
Allow null values inkey
andvalue
fields ofEventAttribute
when deserializing. The serialization schema for the fields is changed toOption<String>
(#1375).[tendermint-rpc]
Add thecodespace
field 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_results
response when some tx results are non-ok (#1391)
[tendermint-rpc]
Export thehttp
,websocket
modules underclient
, each with the publicBuilder
type (#1378).[tendermint-rpc]
Allow specifying a request timeout for the RPCHttpClient
.http::Builder
now provides a.timeout(Duration)
method to specify the request timeout. If not specified, the default value is 30 seconds. (#1379)[tendermint-rpc]
AddFromStr
,Serialize
andDeserialize
instances 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]
ChangedErrorDetail
variants (#1362):- Removed the
Hyper
andInvalidUri
variants. - The
Http
variant now hasError
fromreqwest
as the source. - Added the
InvalidProxy
variant. - The
tungstenite
dependency exposed through itsError
type in WebSocket-related variants has been updated to version 0.20.x.
- Removed the
[tendermint-rpc]
Removed aTryFrom<HttpClientUrl>
conversion forhyper::Uri
as hyper is no longer a direct dependency (#1362).[tendermint-proto]
Updatev0_38
bindings to CometFBT release 0.38.0 (#1365).[tendermint]
Add fields toabci::request::ExtendVote
to represent the fields added to theabci.RequestExtendVote
protobuf 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::Client
andSubscriptionClient
traits?Send
underwasm32
target. (#1385)
[tendermint-rpc]
Address the RUSTSEC-2023-0052 vulnerability by dropping dependency onhyper-proxy
and 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
serialize
functions in these helper modules ([#1351](https://github.com/informalsystems/tendermint- rs/pull/1351)):- In
tendermint-proto
:serializers::nullable
serializers::optional
- In
tendermint
:serializers::apphash
serializers::hash
serializers::option_hash
If
serde_json
is used for serialization, the output schema does not change. But since serde is a generic framework, the changes may be breaking for other users. Overall, these changes should make the serialized data acceptable by the corresponding deserializer agnostically of the format. - In
[tendermint]
Integer overflows are prevented when calculating the total voting power value invalidator::Set
(#1348).[tendermint-proto]
Serialize
andDeserialize
impls forv*::crypto::PublicKey
are corrected to match the JSON schema used by other implementations (#1350).- [
tendermint
] Fix JSON serialization of timestamp field forCommitSig::BlockIdFlagAbsent
to match what is expected by CometBFT (#1352)
[tendermint-testgen]
Addapp_hash
field to testgenHeader
and implement convenient method for defaultLightBlock
construction fromHeader
(#1343)[tendermint]
Improve and validate deserialization ofvalidator::Set
(#1348). Thetotal_voting_power
field no longer has to be present in the format processed byDeserialize
. If it is present, it is validated against the sum of thevoting_power
values of the listed validators. The sum value is also checked against the protocol-defined maximum.[tendermint-proto]
In theDeserialize
impls derived forv*::types::ValidatorSet
, thetotal_voting_power
field value is retrieved when present.[tendermint-proto]
Add serialziation helper moduleserializers::from_str_allow_null
. Use it to allow theproposed_priority
field 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-server
features 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::AbciParams
struct, add theabci
field of this type toconsensus::Params
to represent the protobuf additions. - Change the
abci::Request
andabci::Response
reexports 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_*::abci
modules, so that the variants are trimmed to the requests/responses used by the respective protocol version. Reexport the types fromv0_38::abci
as aliases for these names in theabci
module, continuing the naming as used in older API. (#1312).[tendermint]
RenameSignature::to_bytes
toSignature::into_bytes
(#1312).[tendermint-abci]
Update theApplication
interface to CometBFT 0.38 (#1312)[tendermint-rpc]
Changes to support the RPC protocol in CometBFT 0.38 (#1317):- Add
finalize_block_results
andapp_hash
fields toendpoint::block_results::Response
. - The
deliver_tx
field is renamed totx_result
inendpoint::broadcast::tx_commit::Response
. - The
tx_result
field type changed toExecTxResult
inendpoint::tx::Response
. - The
event::EventData::NewBlock
variant is renamed toLegacyNewBlock
. The newNewBlock
variant only carries fields relevant since CometBFT 0.38. - Removed
event::DialectEvent
, replaced with non-generic serialization helpers inevent::{v0_34, v0_37, v0_38}
. TheDeserialize
helpers in the latter two modules are aliased from common types that can support both fields added in CometBFT 0.38,block_id
andresult_finalize_block
, as well as the fields present 0.37. Likewise forDialectEventData
and other event data structure types. - Changed some of the serialization dialect helpers to only be
used by the 0.34 dialect and remove generics. The current dialect's
seralization is switched to the serde impls on the domain types in
tendermint
.
- Add
[tendermint]
Changes to support the RPC protocol in CometBFT 0.38 (#1317):- Due to some attribute changes, the format emitted by
Serialize
is changed forabci::response
typesCheckTx
andFinalizeBlock
.
- Due to some attribute changes, the format emitted by
- [
tendermint-rpc
] Decode the earliest block data fields of thesync_info
object in/status
response and expose them in theSyncInfo
struct:earliest_block_hash
,earliest_app_hash
,earliest_block_height
,earliest_block_time
(#1321). [tendermint-proto]
Align the return signature of theencode_vec
andencode_length_delimited_vec
methods in theProtobuf
trait withprost::Message
by directly returningVec<u8>
. (#1323)- Remove mandatory cloning in
Protobuf
methods 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_38
module (#1312)[tendermint]
Support for CometBFT 0.38: (#1312):- Add conversions to and from
tendermint::v0_38
protobuf types generated in [tendermint-proto
]. - Add request and response enums under
v0_38::abci
to enumerate all requests and responses appropriate for CometBFT version 0.38. - Add request and response types under
abci
to represent the requests and responses new to ABCI++ 2.0 in CometBFT version 0.38. The names areExtendVote
,FinalizeBlock
,VerifyVoteExtension
.
- Add conversions to and from
[tendermint-rpc]
Support for CometBFT 0.38 (#1317):Deserialize
implementations onabci::Event
,abci::EventAttribute
that correspond to the current RPC serialization.- Domain types under
abci::response
also getDeserialize
implementations corresponding to the current RPC serialization. Serialize
,Deserialize
implementations onabci::types::ExecTxResult
corresponding to the current RPC serialization.- Added the
apphash_base64
serializer 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_results
method (#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::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, tendermint-config]
Thetendermint::config
module has now been broken out into its own crate (tendermint- config
) to help towards facilitatingno_std
compatibility (#983)[tendermint]
Thetendermint::node::info::OtherInfo::rpc_address
field type has been changed fromtendermint::net::Address
toString
toward facilitatingno_std
compatibility (#983)[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-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