January 24, 2024
This release introduces several noteworthy libraries. A standout addition is the implementation of the ICS-721 NFT transfer application, enabling the transfer of NFT packets across chains that support this capability.
In addition, It incorporates the ICS-08 Wasm light client data structure and
types. This empowers light client developers to create CosmWasm contracts for
deployment on Cosmos chains compatible with the version of ibc-go
supporting
ICS-08 Wasm client.
Furthermore, this release addresses the issue with the macro derivation of the
ClientState
when contexts include generic types, exposes additional convenient
types and serializers through ibc-primitives
and includes a more flexible
constructor for MockContext
types within the ibc-testkit
crate, allowing to
write tests with diverse parameter combinations.
There are no consensus-breaking changes.
- [ibc] Bump
ibc-proto-rs
to v0.41.0 (#1036).
- [ibc-derive] Refactor
ClientState
macro derivation to handle contexts with generic types. (#910) - [ibc-derive] Adapt macro derivations to integrate with projects dependent on
ibc-core
(#999).
- [ibc-app-nft-transfer] Implement ICS-721 NFT transfer application (#346)
- [ibc-client-wasm-types] Implement ICS-08 Wasm light client domain types (#1030).
- [ibc-data-types] Re-export clients' domain type from
ibc-data-types
(#1041). - [ibc-testkit] Deprecate
MockContext::new*
in favor ofMockContextConfig
. (#1042) - [ibc-testkit] Remove field access of
MockContext
. (#1043) - [ibc-testkit] Deprecate
MockContext::with_client*
in favor ofMockContext::with_client_config
. (#1049) - [ibc-primitives] Re-export additional google proto types, like
Timestamp
andDuration
for added convenience when developing IBC light clients or applications. (#1054) - [ibc-primitives] Relocate
serializers.rs
module to reside within theibc-primitives
crate extending its utility for a broader range of IBC applications. (#1055)
January 3, 2024
This release continues the trend of further decoupling dependencies between the different ibc-rs sub-crates and modules.
In particular, the prost
dependency is now only imported in the
ibc-primitives
crate; note that error variants originating from prost
have
largely been removed, which is a breaking change. The bytes
dependency was
also removed. Additionally, CommitmentProofBytes
can now be accessed without
explicit ownership of the object for which the proof is being queried for.
Some other improvements of note include making the CosmWasm check more rigorous,
streamlining the Msg
trait and renaming it to ToProto
, as well as
implementing custom JSON and Borsh ChainId
deserialization.
There are no consensus-breaking changes.
[ibc-app-transfer]
Refactorsend-coins-*()
methods by breaking them down into distinct escrow and unescrow methods, enhancing both clarity and specificity in functionality. (#837)[ibc-app-transfer]
Addmemo
field toescrow-coins-*()
andburn-coins-*()
methods, allowing implementors to pass in arbitrary data necessary for their use case. (#839)[ibc-core-host-type]
OptimizeIdentifierError
variants and make them mutually exclusive. (#978)[ibc-data-types]
Bump ibc-proto-rs dependency to v0.39.1. (#993)[ibc]
Minimizeprost
dependency by introducingToVec
trait- Now
prost
is only imported inibc-primitives
crate - Remove error variants originating from
prost
(Breaking change) - Eliminate the need for the
bytes
dependency (#997)
- Now
[ibc-core-host-types]
IntroduceClientType::build_client_id
which avoids unnecessary validation. (#1014)[ibc-core-host-types]
OptimiseClientId::new
to avoid unnecessary validation and temporary string allocation. (#1014)
[ibc-core-commitment-types]
implementAsRef<Vec<u8>>
andAsRef<[u8]>
forCommitmentProofBytes
so it’s possible to gain access to the proof byte slice without having to own the object. (#1008)
[cw-check]
More rigorous CosmWasm check by upgrading dependencies and includingstd
andschema
features foribc-core
. (#992)[ibc-primitives]
streamlineMsg
trait and rename toToProto
(#993)[ibc-core-host-types]
Implement custom JSON and Borsh deserialization forChainId
(#996)[ibc-core-client-types]
Add a convenientStatus::verify_is_active
method. (#1005)[ibc-primitives]
DeriveHash
onTimestamp
instead of explicit implementation (#1011)[ibc-derive]
Use global paths in generated code by macros to prevent namespace conflicts with local modules (#1017)
December 22, 2023
This patch release resolves two issues. It corrects the packet sequence number
encoding within Timeout message handlers to align with the big-endian format and
addresses a recursive call error during the conversion from connection State
to i32
.
There are no consensus-breaking changes.
[ibc-core-host-types]
Encode packet sequence into a big endian bytes. (#1004)[ibc-core-connection-types]
Fix recursive call in connectionState
conversion toi32
(#1010)
November 27, 2023
This patch release eliminates the dep:
syntax from the serde
feature,
addressing potential dependency resolution issue stemming from Rust v1.70.
There are no consensus-breaking changes.
- Fix Cargo test failure with
--no-default-features
flag. (#770) - Fix dependency resolution by removing the
dep:
syntax inserde
feature ofibc-app-transfer
crate. (#987)
November 22, 2023
In this release, we've undertaken a comprehensive overhaul of the ibc-rs
repository, resulting in a strategic reorganization of the codebase. This
restructuring dissects the implementation of each IBC specification,
categorizing and situating them within relevant libraries. The primary objective
is to elevate ibc-rs
practicality and enhance user flexibility by providing a
more modular and composable experience.
Users now have the flexibility to choose from a spectrum of dependencies. They
can opt to utilize the entire suite of meta-crates, such as ibc
, ibc-core
,
ibc-clients
, or ibc-apps
. Alternatively, they can exercise fine-grained
control by selectively importing specific crates. This can involve bringing in
an entire implemented IBC sub-module, like the ibc-core-client
crate, or
importing only the associated data structures of a module, such as the
ibc-core-client-types
crate.
Furthermore, this release introduces optimizations centered around construction and validation of ICS-24 host identifiers, aiming to curtail some heap allocations, beneficial for resource-constrained hosts.
There are no consensus-breaking changes.
- Move ICS-20 and ICS-27 implementations to the respective part of
ibc-apps
andibc-clients
crates, as part of theibc
crate restructuring effort. (#716) - Bump
ibc-proto-rs
to v0.38.0 (#949) - Bump minimum supported Rust version to 1.64 (#956)
- Restructure
ibc-rs
codebase by organizing it into smaller self-contained, modular libraries, enabling the selective import of specific domain types or module implementations, either individually or in combination, providing enhanced flexibility and ease of use. (#965)
- Restructure the mock module implementation and separate its codebase into a
new crate named
ibc-testkit
(#954) - Provide
Into<String>
for all identifiers types. (#974)
- Re-export essential proto types from the underlying
ibc-*-*-types
crates, removing the necessity for a direct dependency onibc-proto
in projects integratingibc-rs
(#697) - Rename
{submodule}.rs
with corresponding{submodule}
directory to{submodule}/mod.rs
(#771) - Add From implementation for ICS26 enum types to make it simpler to construct the types. (#938)
- Reduce vector allocations in Commitment computation. (#939)
- Support chain identifiers without the
{chain_name}-{revision_number}
pattern of Tendermint chains. (#940). - Remove redundant
String
creation invalidate_prefix_length
(#943). - Remove redundant
#[test_log::test]
attributes in test modules (#948) - Remove the default value and implementation for
PortId
(#951) - Expose domain message types under the
ics04_channel
as public (#952) - Enhance dependency management with workspace inheritance (#955)
- Simplify and refactor ICS-24 identifier validation logic. (#961)
- Reduce heap allocation by using
str
instead ofString
places we convert domain event attributes to the ABCI event attributes (#970) - Expose various fields, types and functions in
ibc-rs
as public including:validate
andexecute
handler functions for all the IBC message types.TYPE_URL
constants.- Any private fields within the domain message types.
- Any private fields within the Tendermint
ClientState
andConsensusState
(#976)
October 19, 2023
This release adds necessary APIs for featuring consensus state pruning and
implements pertaining logic for Tendermint light clients. This prevents
unlimited store growth. Additionally, we've enhanced ibc-rs compatibility with
no-float environments making Wasm compilation smoother and updated main
dependencies including prost
to v0.12, ibc-proto-rs
to v0.37, and
tendermint-rs
to v0.34, ensuring the latest advancements.
There are no consensus-breaking changes.
- Implement consensus state pruning for Tendermint light clients. (#600)
-
Add test for expired client status. (#538)
-
Fix compilation issue with Wasm envs because of floats. (#850)
- Use
serde-json-wasm
dependency instead ofserde-json
for no-floats support - Add CI test to include CosmWasm compilation check
- Use
-
Change
mocks
feature to implystd
since it requires Timestamp::now to work. (#926) -
Return PacketStates instead of paths from packet_commitments and packet_acknowledgements. (#927)
-
Remove
AnySchema
asJsonSchema
derive onAny
now accessible throughibc-proto-rs
. (#929)
October 12, 2023
This release introduces vital bug fixes, including removal of an incorrect validation during a Tendermint client update and the addition of a missing state update during a successful client upgrade ensuring the inclusion of the host's height and timestamp in the store.
Additionally, it eliminates the safe-regex
dependency, and restructures IBC
query implementations under the previous grpc
feature flag and moves it to a
separate crate called as ibc-query
.
There are consensus-breaking changes.
- Relocate
*_update_time
and*_update_height
to the client contexts' traits for improved access by light clients (#914)
- Remove an incorrect validation during tendermint client update (#911)
- Add missing update in the state, which should include the host's height and timestamp when a successful client upgrade take place. (#913)
- Remove
safe-regex
dependency (#875) - Enhance IBC query methods usability and code organization
- The implementation of query methods is now publicly accessible as standalone functions.
grpc
feature now lives as a separate crate called asibc-query
(#896)
- Re-export ibc proto types from `ibc-proto-rs`` for dep
September 20, 2023
This release introduces a new API under the grpc
feature flag, which has ibc-rs expose grpc endpoints that the hermes relayer needs. Furthermore, no_std
support for the serde
feature has been restored, accompanied by other miscellaneous changes.
There are no consensus-breaking changes.
- Bump tendermint-rs to v0.33.0 (#785)
- Bump ibc-proto-rs to v0.34.0 (#790)
- Allow hosts to handle overflow cases in
increase_*_counter
methods by returningResult<(),ContextError>
type. (#857) - logger and event emitter methods return
Result<(), ContextError>
type. (#859) - Bump
ibc-proto-rs
to v0.35.0 along with some other minor dependency updates (#873)
- Fix compilation error of v0.41.0 by restoring no_std support for serde feature (#741)
- Replace mutable ref with immutable ref in validate handler (#863)
- Blanket implementation of core gRPC services (#686)
- Switch to domain Tendermint event type instead of proto for the
upgrade_client_proposal_handler
return (#838) - Bump ibc-proto to v0.34.1 and borsh to v0.10 (#844)
- Add borsh derive for
MsgTransfer
(#845) - Add borsh derive for
MsgEnvelope
(#846) - Derive
PartialEq
,Eq
forMsgEnvelope
(#847) - Organize imports grouping and granularity using
rustfmt.toml
(#848) - Add
JsonSchema
derive forMsgEnvelope
(#856) - Remove unused code snippets and move serializer roundtrip test to
serializers.rs
(#869)
October 12, 2023
This release is a critical patch release that introduces a vital fix by removing an incorrect validation during a Tendermint client update.
There are no consensus-breaking changes.
August 4, 2023
This release fixes a bug with the UpdateClient
event where the header
field was not properly encoded.
There are no consensus-breaking changes.
- Remove traces of deprecated
mocks-no-std
feature (#819) - Utilize encoded bytes from
Any
for theheader
field ofUpdateClient
event (#821)
August 4, 2023
The goal with this release was to replace ClientState::{confirm_not_frozen, expired}()
with ClientState::status()
(#536). Updating basecoin-rs with the new changes exposed the shortcomings of having SendPacket*Context
be supertraits of TokenTransfer*Context
, which in turned exposed the shortcomings of having Router
be a supertrait of ValidationContext
. Hence, we decoupled everything!
There are consensus-breaking changes.
- [ibc-derive] Replace
ClientState::{confirm_not_frozen, expired}()
withClientState::status()
(#536) - Decouple
TokenTransfer{Validation,Execution}
fromSendPacket{Validation,Execution}
(#786) - Decouple
Router
fromValidationContext
(#788) - Simplify Module lookup in the
Router
trait (#802)
July 31, 2023
This release bumps ibc-proto to v0.32.1, resolving issue with token transfer
deserialization for cases with no memo field provided. It also includes various
enhancements and bug fixes, such as reorganized acknowledgement types, enhanced
ChainId
validation, improved from_str
height creation, synchronized channel
event namings for consistency.
There are consensus-breaking changes.
- Organize acknowledgement types under the
ics04_channel
module to get accessible by any applications. (#717) - Sync field and method namings of ics04 events with the convention (#750)
- use ibc_proto::protobuf::Protobuf to replace tendermint_proto::Protobuf (#754)
- Enhancements and fixes to
ChainId
impls and validation. (#761) - Use
Vec<u8>
for HeaderAttribute instead ofAny
(#764) - Serde: Schema for Coin/Transfer, Amount is string (#772)
- Tendermint ConsensusState -> Any can crash if out of memory (#747)
Height::from_str
accepts invalid heights (#752)- Add serde serialization and deserialization to Packet Receipt (#794)
- Scale encoding for ICS-20 transfer message (#745)
- Add test to ensure
PacketData
keeps proper JSON encoding (#763)
July 5, 2023
This release primarily implements ADR 7. It also includes a number of miscellaneous improvements.
There are no consensus-breaking changes.
- Implement ADR 7, where
ClientState
objects are now statically dispatched instead of dynamically dispatched. (#296) - Revise the
verify_upgrade_client
method to utilize the domain-specificMerkleProof
type (#691) - Revise the
ChainId::new
method so that rather than taking String argument it borrows a str. (#721) - Modify
MsgUpgradeClient
struct to utilizeCommitmentProofBytes
and apply some refinements around upgrade client methods and impls respectively. (#739) - Remove
Router::has_route
(#503)
- Upgrade to tendermint v0.32, ibc-proto-rs v0.32, ics23 v0.10, and get
prehash_key_before_comparison field available for the
ProofSpec
(#640)
- Remove Header trait (#617)
- Deny use of
unwrap()
throughout the crate (#655) ChainId
should serialize itself without usingtendermint::chain::Id
(#729)- use
FromStr
in client_type functions to constructClientType
(#731)
May 23, 2023
This release bumps ibc-proto to v0.30.0 and tendermint to v0.31, and provides utilities for chain upgrades (Tendermint only).
There are consensus-breaking changes.
- Support for upgrade client proposal by featuring helper contexts and domain types (#420)
- Remove unused
ClientState
methods (#681) - Bump ibc-proto to v0.30.0 and tendermint to v0.31 (#689)
- Encode upgraded client/consensus states for upgrade_client validation using
prost::Message
from pros (#672)
- Timestamp ser and der failed on borsh feature (#687)
- Clarify usage of
upgrade_path
for handling upgrade proposals (#141) - Refactor tests for upgrade_client implementation (#385)
- Exclude
ClientState::new()
checks from proto ClientState conversion (#671) - Remove redundant #[allow(clippy::too_many_arguments)] (#674)
- Token transfer: Make
Amount
type less restrictive (#684)
May 8, 2023
This release primarily consolidated the modules in the ibc-rs crate, removed many legacy items, and documented every item in the crate. This represents a big step towards v1.0. Very few items changed name; most were just moved to elsewhere in the module tree. Perhaps a good heuristic to fix the breaking changes is the remove the faulty use
statements, and have your editor re-import the item.
There were also a few minor validation checks missing, which we added. These were pretty much the last remaining known ones.
There are consensus-breaking changes.
- Add missing validation checks for all the IBC message types (#233)
- Reduce and consolidate the amount of public modules exposed (#235)
- Separate validation/execution handlers from context API (#539)
- Make
TYPE_URL
s private (#597)
- Add parity-scale-codec, borsh, serde feature for *Path (#652)
- Document every method of
ValidationContext
andExecutionContext
(#376)
May 2, 2023
This release primarily adds support for the memo
field to the token transfer
app (ICS 20). This required updating ibc-proto-rs and tendermint-rs dependencies
as well.
There are consensus-breaking changes.
- Bump ibc-proto to v0.29.0, bump tendermint to v0.30.0, and add
memo
field toPacketData
(#559) - Add missing
ClientType
andClientId
validation checks (#621)
- Define a new
ValidationContext::validate_message_signer
method to allow validation of thesigner
field in messages across all handlers. (#619)
April 24, 2023
This release involves splitting the newly defined MsgUpdateClient
type in
v0.37.0 into distinct IBC message structs: MsgUpdateClient
and
MsgSubmitMisbehaviour
. Additionally, we made improvements to the Version
validations in connection and channel handshakes, discarded now-unused
store_client_type
interface, and removed IbcEventType
to enable each IBC
event variant to define its own set of event types.
There are consensus-breaking changes
- Remove
store_client_type
interface as it is not included in the IBC spec anymore. (#592) - Code clean-up remained from v0.37.0 release
- (#622)
- Remove
IbcEventType
(#623) - Split
MsgUpdateClient
back intoMsgUpdateClient
andMsgSubmitMisbehaviour
(#628) - Refactor and fix version validation in connection and channel handshakes (#625)
- Make token transfer events compatible with latest ibc-go (#495)
April 13, 2023
This release primarily updates ClientState
to adopt a better API for client updates and misbehaviour detection, borrowed from ibc-go's ADR 6. In the process of updating the API, a few bugs were found in the tendermint light client and fixed.
There are consensus-breaking changes.
ClientState
: Splitcheck_misbehaviour_and_update_state
andcheck_header_and_update_state
(#535)- Improve MsgTransfer struct (#567)
- Remove
ics05_port::context::PortReader
(#580) - Check if
ClientStatePath
is empty during client creation process (#604)
- Disallow creation of new Tendermint client state instance with a frozen height (#178)
- Emit a message event for SendPacket (#574)
- Properly convert from
Any
toMsgEnvelope
(#578) - Tendermint light client: fix missing trusted_validator_set hash check (#583)
- Tendermint light client: fix missing
Header.height()
vsHeader.trusted_height
check (#585) - Tendermint light client: ensure that we use the correct chain ID in commit verification (#589)
- tx_msg: Remove panic in
Msg::get_sign_bytes
(#593) - Tendermint light client: add check that ensure that the consensus state timestamps are monotonic, otherwise freeze the client (#598)
- Tendermint light client: fix how the client's latest height is updated (#601)
- Prefixed denom parity scale codec enabled (#577)
- Add (de)serialization for
ics04_channel::handler::ModuleExtras
(#581)
March 27, 2023
This release adds the emission a "message"
event for all handlers, which hermes currently
depends on.
There are no consensus-breaking changes.
- Emit a message event for each IBC handling (#563)
March 22, 2023
This release fixes a bug in the packet timeout handler.
This is a consensus-breaking change.
- Timeout handler returns an error only when both height and timestamp have not reached yet (#555)
March 17, 2023
This release fixes a bug in the connection handshake.
This is a consensus-breaking change.
- Fix client IDs for the proof verifications in
ConnectionOpenTry
andConnectionOpenAck
(#550)
March 16, 2023
This release primarily updates the ClientState
trait.
There are no consensus-breaking changes.
- Replace specific verify_functions inside
ics02_client
with genericverify_membership
andverify_non_membership
interfaces. (#530) - Replace
ClientState::frozen_height()
andClientState::is_frozen()
withClientState::confirm_frozen()
(#545)
- Fix
ContextError
Display output (#547)
March 9, 2023
This release primarily removes the 'static
lifetime bound on the Module
trait,
and adds some methods to the token transfer validation trait.
There are no consensus-breaking changes.
- Move
verify_delay_passed
process and its associated errors under theics03_connection
section and reduce entanglements with theValidationContext
. (#404) - Refactor and privatize Packet/Ack commitment computations for improved security and modularity. (#470)
- Allow for non-'static bound Modules #490)
- Separate the validation from the execution process for
send/mint/burn_coins
operations. (#502) - Refactor naming in the Transfer application to align with the repo naming conventions. (#506)
- Refactor
is_send/receive_enabled
interfaces within the transfer application tocan_send/receive_coins
returningResult<(), TokenTransferError>
type for a better failure handler (#508)
- Use
<&str>::deserialize
instead ofString::deserialize
to avoid an extra allocation (#496) - In
test_serialization_roundtrip
, check that round-tripped data is equal (#497)
February 28, 2023
This release contains quality of life improvements.
There are no consensus-breaking changes.
- Remove ibc::handler module (#478)
- Discard the
connection-channels
method underValidationContext
since it is no longer used by the core handlers. (#479) - Remove Send + Sync supertraits on the Module trait (#480)
- Modify
validate_self_client
error type to returnContextError
instead ofConnectionError
(#482)
- Fix typos (#472)
February 24, 2023
This release contains an overhaul of the send_packet()
and send_transfer()
architecture.
The main gain is to separate into send_packet_{validate,execute}()
, and similarly for
send_transfer()
.
There are no consensus-breaking changes.
- Update send_packet/transfer(), and related contexts (#442)
February 22, 2023
This release includes the latest Tendermint-rs v0.29.0 and removes the
Reader
and Keeper
API in favor of the new ValidationContext
/ExecutionContext
API as the default.
Additionally, unit tests have been updated to work with the new API.
There are consensus-breaking changes.
- Remove Reader and Keeper API (#279)
- Refactor
get_*
andstore_*
methods to take*Path
structs instead (#382) - Make
ValidationContext::host_timestamp()
abstract and removeValidationContext::pending_host_consensus_state()
(#418)
- Mend error variant todo!()s wherever tendermint client calls the "consensus_state" method (#403)
- Remove
val_exec_ctx
feature flag (#415)
- Make all unit tests test the ValidationContext/ExecutionContext API (#430)
- Add an implementation of
validate_self_client
for the mock client (#432) - Add a docstring and rename the
validate_self_client
argument for improved code documentation and readability (#434) - Refactor connection handler unit tests to adapt with new Validation/Execution API (#440)
February 9, 2023
With this release, the implementation of the new ValidationContext
/ExecutionContext
is complete, although still behind the val_exec_ctx
feature flag. There were also important bug fixes.
There are consensus-breaking changes.
- Implement
verify_upgrade_and_update_state
method for Tendermint clients (#19). - Remove support for asynchronous acknowledgements (#361)
- Fix acknowledgement returned by the token transfer's onRecvPacket callback (#369)
- Mend
ChanOpenConfirm
handler check of expected counterparty state (#396) - Fix issue with the error handling in the
new_check_header_and_update_state
method when consensus state is not found (#405) - Fix the caught error by
get_packet_receipt
underval_exec_ctx
feature when the packet receipt is not found (#409)
- Finish implementing
ValidationContext::validate()
andExecutionContext::execute()
(#393)
- Add tests to verify
AbciEvent
match the expected Ibc events (#163). - Add unit tests to cover edge scenarios for counterparty conn & chan ids at init phases (#175).
January 16, 2023
This release contains a bug fix for the ChanOpenConfirm
handler and it is strongly recommended to upgrade.
This release contains a consensus-breaking change during the channel opening handshake; it was broken, and now is fixed.
- Fix ChanOpenConfirm handler check of counterparty state (#353)
December 14, 2022
This release contains miscellaneous improvements, focusing mainly on addressing technical debt.
There are no consensus-breaking changes.
- Exclude
ChannelEnd
fromMsgChannelOpenInit
andMsgChannelOpenTry
and refactor their fields to match the spec (#20) - Simplify Msg trait by removing unnecessary methods. (#218)
- Refactor proof handlers to conduct proof verifications inline with the process function and apply naming conventions to packet messages types (#230)
- The function parameters in the Reader traits now references, while the functions in the Keeper traits take ownership directly. (#304)
- Change type of
trusted_validator_set
field inMisbehaviourTrustedValidatorHashMismatch
error variant fromValidatorSet
toVec<Validator>
to avoid clippy catches (#309) - The function parameters in the
ValidationContext
trait now use references, while the functions in theExecutionContext
trait take ownership directly. (#319) - Make internal
process()
pub(crate)
(#338)
- Add serialization and deserialization features for codec and borsh to the host type in ics24 (#259)
- Add codec and borsh for ics04_channel::msgs::Acknowledgement and events::ModuleEvent (#303)
- Add parity-scale-codec and borsh for ibc::events::IbcEvent (#320)
- Make the code under mocks features work in no-std (#311)
- Make
serde
optional behind theserde
feature flag (#293)
- Refactor unreachable test of conn_open_ack handler (#30)
- Remove legacy relayer-specific code and move ics18_relayer under the mock module (#154)
- Improve clippy catches and fix lint issues identified by clippy 0.1.67 (#309)
December 14, 2022
This release updates the tendermint-rs dependency to v0.28.0 which includes important security improvements. Many other improvements have been made as well, including misbehaviour handling.
A lot of work has also been put towards implementing ADR 5, which is currently unfinished and has been put behind the feature flag val_exec_ctx
.
The only consensus-breaking changes are the ones related to the fact that we now properly handle misbehaviour messages.
- Implement the IBC misbehaviour handler and misbehaviour handling logic for the Tendermint light client. (#12)
Ics20Context
no longer requires types implementing it to implementChannelReader
andChannelKeeper
, and instead depends on theIcs20ChannelKeeper
andSendPacketReader
traits. Additionally, thesend_packet
handler now requires the calling context to implementSendPacketReader
and returns aSendPacketResult
. (#182)- Add
ValidationContext
andExecutionContext
, and implement for clients (ICS-2) (#240) - Change
host_height
,host_timestamp
return value to aResult
inClientReader
,ConnectionReader
,ChannelReader
andValidationContext
(#242) - Rename Ics* names to something more descriptive (#245)
- Implement
ValidationContext::validate
andExecutionContext::execute
for connections (ICS-3) (#251) - Implement misbehaviour in
ExecutionContext
andValidationContext
(#281) - Update
tendermint
dependencies tov0.28.0
, which contain an important security fix. (#294)
- Set counterparty connection ID to None in
conn_open_init
(#174) - Verify the message's counterparty connection ID in
conn_open_ack
instead of the store's (#274)
- Remove
flex-error
and remove unused error variants(#164) - ConnectionMsg::ConnectionOpen{Try, Ack} should not wrap a Box (#258)
- Track code coverage with
cargo-llvm-cov
(#277)
December 8, 2022
This release mainly updates the tendermint-rs dependency to v0.27.0 and includes security improvements.
There are no consensus-breaking changes.
- Update to changes in tendermint-rs 0.27 (#260)
- Update
ics23
to v0.9.0, which contains substantial security improvements (#278)
November 21, 2022
This release mainly updates the tendermint-rs dependency to v0.26.0.
There are no consensus-breaking changes.
- Update to tendermint-rs 0.26 and ibc-proto 0.22 (#208)
- Add Other Item for Ics02Client,Ics03connection, Ics04Channel Error (#237)
November 9, 2022
This release includes major improvements in making the library compatible with ibc-go v5.0.1. This includes making ibc events compatible and removing the crossing-hellos logic from the connection and channel handshakes.
There are consensus-breaking changes in the connection and channel handshakes. However, there are no consensus-breaking changes for already established channels.
- Make connection events compatible with ibc-go (#145)
- Makes channel/packet events compatible with ibc-go (#146)
- Remove crossing hellos logic from connection handshake. Breaking changes in connection message types. (#156).
- Remove crossing hellos logic from channel handshake (#157)
- call
validate_self_client
inconn_open_try
andconn_open_ack
, and provide a tendermint implementation forvalidate_self_client
(#162) - Refactor channel handlers. Proof calls were inlined, and our handshake variable naming convention was applied (#166)
- Change
ClientType
to contain aString
instead of&'static str
(#206)
- Connection consensus state proof verification now properly uses
consensus_height
(#168). - Allow one-letter chain names in
ChainId::is_epoch_format
(#211) - Don't panic on user input in channel proof verification (#219)
- Add getter functions to SendPacket, ReceivePacket, WriteAcknowledgement, AcknowledgePacket, TimeoutPacket to get the elements of the structure (#231)
October 27, 2022
This release fixes a critical vulnerability. It is strongly advised to upgrade.
- No longer panic when packet data is not valid UTF-8 (#199)
October 24, 2022
This is a small release that allows new ClientTypes
to be created, which was missed when implementing ADR 4. The changes are not consensus-breaking.
- Make ClientType allow any string value as opposed to just Tendermint (#188)
October 19, 2022
This is a major release, which implemented ADR 4, as well as some miscellaneous bug fixes. Please see the corresponding sections for more information.
- Add missing Tendermint
ClientState
checks and make all its fields private. - Add a
frozen_height
input parameter toClientState::new()
. (#22). - Remove
Display
fromIbcEvent
(#144). - Remove
IbcEvent::Empty
(#144). - Make
client_state
field required inMsgConnectionOpenTry
andMsgConnectionOpenAck
. Necessary for correctness according to spec.
(#159). - Redesign the API to allow light client implementations to be hosted outside the ibc-rs repository. (#2483).
- Make client events compatible with ibc-go v5 (#144).
- Delete packet commitment in acknowledge packet handler regardless of channel ordering (#2229).
- Public PrefixedDenom inner type and add as_str func for BaseDenom (#161)
- Derive Hash for ModuleId (#179)
- Improved
core::ics04_channel
APIs, avoiding poor ergonomics of reference-to-tuple arguments and inconsistent ownership patterns. (#2603).
- Propose ADR05 for handlers validation and execution separation. (#2582).
August 22nd, 2022
- Remove
height
attribute fromIbcEvent
and its variants (#2542)
- Fix
MsgTimeoutOnClose
to verify the channel proof (#2534)
August 8th, 2022
- Remove Deserialize from IbcEvent and variants (#2481)
July 27th, 2022
- Remove provided
Ics20Reader::get_channel_escrow_address()
implementation and makecosmos_adr028_escrow_address()
public. (#2387)
- Fix serialization for ICS20 packet data structures (#2386)
- Properly process
WriteAcknowledgement
s on packet callback (#2424) - Fix
write_acknowledgement
handler which incorrectly used packet'ssource_{port, channel}
as key for storing acks (#2428)
- Propose ADR011 for light client extraction (#2356)
July 7th, 2022
- Change
ChannelId
representation to a string, allowing all IDs valid per ICS 024 (#2330).
- Fix
recv_packet
handler incorrectly queryingpacket_receipt
andnext_sequence_recv
using packet'ssource_{port, channel}
. (#2293) - Permit channel identifiers with length up to 64 characters, as per the ICS 024 specification. (#2330).
- Remove the concept of a zero Height (#1009)
- Complete ICS20 implementation (#1759)
- Derive
serde::{Serialize, Deserialize}
forU256
. (#2279) - Remove unnecessary supertraits requirements from ICS20 traits. (#2280)
May 23rd, 2022
- Fix packet commitment calculation to match ibc-go (#2104)
- Fix incorrect acknowledgement verification (#2114)
- fix connection id mix-up in connection acknowledgement processing (#2178)
- Remove object capabilities from the modules (#2159)
May 2nd, 2022
This is a legacy version with no ibc crate changes.
April 27th, 2022
- Make all handlers emit an IbcEvent with current host chain height as height parameter value. (#2035)
- Use the version in the message when handling a MsgConnOpenInit (#2062)
March 28th, 2022
- Refactored channels events in ICS 04 module (#718)
February 24th, 2022
- Fixed the formatting of NotEnoughTimeElapsed and NotEnoughBlocksElapsed in Tendermint errors (#1706)
- IBC handlers now retrieve the host timestamp from the latest host consensus state (#1770)
- Added more unit tests to verify Tendermint ClientState (#1706)
- Define CapabilityReader and CapabilityKeeper traits (#1769)
- Relayer Library
February 4th, 2022
This is a legacy version with no ibc crate changes.
January 27th, 2022
- Hide
ibc::Timestamp::now()
behindclock
feature flag (#1612)
- Verify the client consensus proof against the client's consensus state root and not the host's state root #1745
- Initialize consensus metadata on client creation (#1763)
- Extract all
ics24_host::Path
variants into their separate types (#1760) - Disallow empty
CommitmentPrefix
andCommitmentProofBytes
(#1761)
January 13th, 2021
- Add the
frozen_height()
method to theClientState
trait (includes breaking changes to the TendermintClientState
API). (#1618) - Remove
Timestamp
API that depended on thechrono
crate: (#1665):Timestamp::from_datetime
; useFrom<tendermint::Time>
Timestamp::as_datetime
, superseded byTimestamp::into_datetime
- Delete packet commitment instead of acknowledgement in acknowledgePacket #1573
- Set the
counterparty_channel_id
correctly to fix ICS04chanOpenAck
handler verification (#1649) - Add missing assertion for non-zero trust-level in Tendermint client initialization. (#1697)
- Fix conversion to Protocol Buffers of
ClientState
'sfrozen_height
field. (#1710)
- Implement proof verification for Tendermint client (ICS07). (#1583)
- More conventional ad-hoc conversion methods on
Timestamp
(#1665): Timestamp::nanoseconds
replacesTimestamp::as_nanoseconds
Timestamp::into_datetime
substitutesTimestamp::as_datetime
November 23rd, 2021
- Set the connection counterparty in the ICS 003
connOpenAck
handler (#1532)
- Derive
PartialEq
andEq
onIbcEvent
and inner types (#1546)
October 29th, 2021
- Support for converting
ibc::events::IbcEvent
intotendermint::abci::Event
(#838) - Restructure the layout of the
ibc
crate to matchibc-go
's layout (#1436) - Implement
FromStr<Path>
to enable string-encoded paths to be converted into Path identifiers (#1460)
October 22nd, 2021
- The
check_header_and_update_state
method of theClientDef
trait (ICS02) has been expanded to facilitate ICS07 (#1214)
- Add ICS07 verification functionality by using
tendermint-light-client
(#1214)
October 4th, 2021
This is a legacy version with no ibc crate changes.
September 24th, 2021
September 14th, 2021
- Change all
*Reader
traits to returnResult
instead ofOption
(#1268) - Clean up modules' errors (#1333)
August 24th, 2021
- Set the index of
ibc::ics05_port::capabilities::Capability
(#1257)
- Implement
ics02_client::client_consensus::ConsensusState
forAnyConsensusState
(#1297)
August 2nd, 2021
- Add missing
Protobuf
impl forics03_connection::connection::Counterparty
(#1247)
- Use the
flex-error
crate to define and handle errors ([#1158])
July 22nd, 2021
- Enable
pub
access to verification methods of ICS 03 & 04 (#1198) - Add
ics26_routing::handler::decode
function (#1194) - Add a pseudo root to
MockConsensusState
(#1215)
- Fix stack overflow in
MockHeader
implementation (#1192) - Align
as_str
andfrom_str
behavior inClientType
(#1192)
July 12th, 2021
This is a legacy version with no ibc crate changes.
June 22nd, 2021
This is a legacy version with no ibc crate changes.
June 3rd, 2021
- Started
unwrap
cleanup (#871)
May 21st, 2021
This is a legacy version with no ibc crate changes.
May 14h, 2021
- Process raw
delay_period
field as nanoseconds instead of seconds. (#927)
May 7h, 2021
- Fix parsing in
chain_version
when chain identifier has multiple dashes (#878)
April 14th, 2021
- Follow Rust guidelines naming conventions (#689)
- Per client structure modules (#740)
- MBT: use modelator crate (#761)
- Fix overflow bug in ICS03 client consensus height verification method (#685)
- Allow a conn open ack to succeed in the happy case (#699)
MsgConnectionOpenAck.counterparty_connection_id
is now aConnectionId
instead of anOption<ConnectionId>
(#700)
February 17, 2021
- Change event height to ICS height (#549)
- Fix panic in conn open try when no connection id is provided (#626)
- Disable MBT tests if the "mocks" feature is not enabled (#643)
- Implementation of the
ChanOpenAck
,ChanOpenConfirm
,ChanCloseInit
, andChanCloseConfirm
handlers (#316) - Remove dependency on
tendermint-rpc
(#624)
February 4, 2021
- Fix for storing
ClientType
upon 'create-client' (#513)
- The
ibc::handler::Event
is removed and handlers now produceibc::events::IBCEvent
s (#535)
December 23, 2020
This is a legacy version with no ibc crate changes.
December 2, 2020
- Implement flexible connection id selection (#332)
- ICS 4 Domain Types for channel handshakes and packets ([#315], #95)
- Introduce LightBlock support for MockContext (#389)
- Split
msgs.rs
of ICS002 in separate modules (#367) - Fixed inconsistent versioning for ICS003 and ICS004 (#97)
- Fixed
get_sign_bytes
method for messages (#98) - Homogenize ConnectionReader trait so that all functions return owned objects (#347)
- Align with tendermint-rs in the domain type definition of
block::Id
(#338)
October 19, 2020
- ICS03 Ack and Confirm message processors (#223)
- Routing module minimal implementation for MVP (#159, #232)
- Basic relayer functionality: a test with ClientUpdate ping-pong between two mocked chains (#276)
- Implemented the
DomainType
trait for IBC proto structures (#245, #249). - ICS03 connection handshake protocol initial implementation and tests (#160)
- Add capability to decode from protobuf Any* type into Tendermint and Mock client states
- Cleanup Any* client wrappers related code
- Migrate handlers to newer protobuf definitions (#226)
- Extend client context mock (#221)
- Context mock simplifications and cleanup (#269, #295, #296, #297)
- Split
msgs.rs
in multiple files, implementFrom
for all messages ([#253])
- Removed "Uninitialized" state from connection (#217)
- Disclosed bugs in ICS3 version negotiation and proposed a fix (#209, #213)
September 1, 2020
- Renamed
modules
crate toibc
crate. Version number for the new crate is not reset. (#198) ConnectionId
s are now decoded toVec<ConnectionId>
and validated instead ofVec<String>
(#185)- Removed
Connection
andConnectionCounterparty
traits (#193) - Removed
Channel
andChannelCounterparty
traits (#192)
- partial implementation of message handler (#119, #194)
- partial implementation of message handler (#119, #194)
- Proposal for IBC handler (message processor) architecture (#119, #194)
- Documentation for the repository structure (#1)
- Connection Handshake FSM English description (#122)
- Identifiers limit update according to ICS specs (#168)
August 1, 2020
- Refactor queries, paths, and Chain trait to reduce code and use protobuf instead of Amino. #152, #174, #155
- Channel closing datagrams in TLA+ #141
- Implemented better Raw type handling. #156
- Fixed the identifiers limits according to updated ics spec. #189
- Fix nightly runs. #161
- Fix for incomplete licence terms. #153
July 1st, 2020
This is the initial prototype release of an IBC relayer and TLA+ specifications. There are no compatibility guarantees until v0.1.0.
Includes:
- Client state, consensus state, connection, channel queries.
- Note: deserialization is unimplemented as it has dependency on migration to protobuf for ABCI queries
- IBC Modules partial implementation for datastructures, messages and queries.
- Some English and TLA+ specifications for Connection & Channel Handshake as well as naive relayer algorithm.