[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)
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