Features

This section includes a summary of the supported and planned features. It also includes a feature matrix which compares hermes to the cosmos-go-relayer.

Cosmos SDK & IBC compatibility: Hermes supports Cosmos SDK chains implementing the IBC protocol v1 protocol specification. Cosmos SDK versions 0.45.0 through 0.50.x are officially supported. IBC-go versions 4.1.1 through 8.x are officially supported. In case Hermes finds an incompatible SDK or IBC-go version, it will output a log warning upon initialization as part of the start command or upon health-check command.


Supported Features

  • Basic features
    • Create and update clients.
    • Refresh clients to prevent expiration.
    • Establish connections with new or existing clients.
    • Establish channels with new or existing connection.
    • Channel closing handshake.
    • Relay packets, acknowledgments, timeout and timeout-on-close packets, with zero or non-zero delay.
    • Queries for all objects.
  • Packet relaying over:
    • multiple paths, for the chains in config.toml.
  • Restart support:
    • Clear packets.
    • Resume channel handshake if configured to relay all.
    • Resume connection handshake if configured to relay all.
  • Client upgrade:
    • Upgrading clients after a counterparty chain has performed an upgrade for IBC breaking changes.
  • Packet delay:
    • Establish path over non-zero delay connection.
    • Relay all packets with the specified delay.
  • Interchain Accounts & Interchain Security

    Relaying between Interchain Security-enabled chains requires Hermes v1.2+.

  • Monitor and submit misbehaviour for clients
    • Monitor client updates for misbehaviour (fork and BFT time violation).
    • Submit misbehaviour evidence to the reference chain via /broadcast_evidence tendermint RPC.
    • Submit misbehaviour evidence to the on-chain IBC client in a transaction that includes the MsgMisbehaviour message.

    Misbehaviour submission to full node not yet supported.

  • Individual commands that build and send transactions for:
    • Creating and updating IBC Tendermint light clients.
    • Sending connection open handshake messages.
    • Sending channel open handshake messages.
    • Sending channel closing handshake messages.
    • Initiating a cross chain transfer (mainly for testing).
    • Relaying sent packets, acknowledgments and timeouts.
    • Automatically generate a configuration file from the chain-registry
    • Client upgrade.
  • Channel handshake for existing channel that is not in Open state.
  • Connection handshake for existing connection that is not in Open state.
  • Telemetry support.

Upcoming / Unsupported Features

Planned features:

  • Interchain Queries
  • Non-SDK support
  • Relay from all IBC events, including governance upgrade proposal
  • Dynamic & automatic configuration management

Features matrix


Legend:

TermDescription
feature not supported
feature is supported
Chainchain related
Clclient related
Connconnection related
Chanchannel related
Cfgconfig related
.._Handshake_..can execute all transactions required to finish a handshake from a single command
.._<msg>_Abuilding and sending msg from a command that scans chain state
.._<msg>_Pbuilding and sending msg from IBC event; doesn't apply to .._Init and FT_Transfer features

Feature comparison between Hermes and the Go relayer

Features \ StatusHermesCosmos GoFeature Details
Feegrant supportadd feeGranter to tx sign for sending the transactions
Restartreplays any IBC events that happened before restart
Multiple_Pathsrelays on multiple paths concurrently
Connection Delay
Cl_Misbehaviormonitors and submits IBC client misbehavior
Cl_Refreshperiodically refresh an on-chain client to prevent expiration
Packet Delay
Chan_Unordered
Chan_Ordered
Cl_Tendermint_Createtendermint light client creation
Cl_Tendermint_Updatetendermint light client update
Cl_Tendermint_Upgradetendermint light client upgrade
Conn_Open_Handshake_A
Conn_Open_Handshake_P
Chan_Open_Handshake_A
Chan_Open_Handshake_P
Chan_Open_Handshake_Optimisticopen a channel on a non-Open connection
Chan_Close_Handshake_P
Chan_Close_Handshake_A
FT_Transfercan submit an ICS-20 fungible token transfer message
ICA_Relaycan relay ICS-27 Interchain account packets
Interchain Query (ICQ) supportinterchain querying using ABCI
Cross-chain Queriescross-chain querying between IBC-enabled chains
Packet_Recv_A
Packet_Recv_P
Packet_Timeout_A
Packet_Timeout_P
Packet_TimeoutClose_A
Packet_TimeoutClose_P
Packet_Optimisticrelay packets over non-Open channels
Modular Architecturedefined interface can be implemented for different chain types
Cl_Non_Tendermintsupports non tendermint IBC light clients
Chain_Non_Cosmossupports non cosmos-SDK chains
Penumbra supportsupports Penumbra non-cosmos-SDK chain
Cfg_Staticprovides means for configuration prior to being started
Cfg_Dynamicprovides means for configuration and monitoring during runtime
Cfg_Download_Configprovides means for downloading recommended configuration
Cfg_Edit_Configprovides means for editing the configuration from the CLI
Cfg_Validationprovides means to validate the current configuration
Telemetrytelemetry server to collect metrics
REST APIREST API to interact with the relayer