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 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.