Crate ibc_types

source ·
Expand description

This crate defines common data structures for Inter-Blockchain Communication (IBC) messages that can be reused by different IBC implementations or IBC ecosystem tooling.

Unlike ibc-rs, which provides a specific and opinionated implementation of IBC, ibc-types just defines Rust types that allow working with IBC messages, allowing an IBC implementation or IBC ecosystem tooling to be built on top using a common language.

In addition to defining Rust types for IBC messages, ibc-types also defines Rust types for IBC events, and provides code for parsing IBC events to and from ABCI messages. IBC events are de facto a critical part of IBC, in that they’re needed to interoperate with relayers, but are not really specified anywhere. Providing event parsing code in ibc-types allows IBC implementations and relayer implementations to share common code for producing and consuming events.

The ibc-types crate is a top-level wrapper crate re-exporting the contents of subcrates scoped by IBC module. This structure means that external users of the library can use one catch-all crate, but allows dependency relationships between different IBC modules. For example, the ibc-types crate re-exports the client types defined in the ibc-types-core-client crate, as well as the types for the Tendermint light client defined in the ibc-types-lightclients-tendermint crate. But because these are separate crates, the Tendermint light client types can depend on the core IBC client types, preventing cyclic dependency issues.


  • Core IBC data modeling such as clients, connections, and channels.
  • Specific IBC light clients, such as the Tendermint light client.
  • A timestamp type for IBC.
  • IBC transfer types.



  • A marker type that captures the relationships between a domain type (Self) and a protobuf type (Self::Proto).