Rust implementation of the Inter-Blockchain Communication (IBC) protocol.
This project comprises primarily four crates:
- The
ibc
crate defines the main data structures and on-chain logic for the IBC protocol. - The
ibc-relayer
crate provides an implementation of an IBC relayer, as a library. - The
ibc-relayer-cli
crate is a CLI (a wrapper over theibc-relayer
library), comprising thehermes
binary. - The
ibc-proto
crate is a library with Rust types generated from .proto definitions necessary for interacting with Cosmos SDK and its IBC structs. - The
ibc-telemetry
crate is a library for use in thehermes
CLI, for gathering telemetry data and exposing that in a Prometheus endpoint.
See the table below for more details.
Includes TLA+ specifications.
Crate name | Type | Version | Docs |
---|---|---|---|
ibc (modules) | lib | ||
ibc-relayer | lib | ||
ibc-relayer-cli | bin: hermes | ||
ibc-proto | lib | ||
ibc-telemetry | lib |
Developed with the latest stable version of Rust: 1.53.0
.
(May work with older versions.)
The relayer CLI binary, called hermes
, has a comprehensive guide at
hermes.informal.systems.
IBC is specified in English in the cosmos/ibc repo. Any protocol changes or clarifications should be contributed there.
This repo contains the TLA+ specification and Rust implementation for the IBC modules and relayer. If you're interested in contributing, please comment on an issue or open a new one!
See also CONTRIBUTING.md.
We follow Semantic Versioning, though APIs are still under active development.
Copyright © 2021 Informal Systems Inc. and ibc-rs authors.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use the files in this repository except in compliance with the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.