Packet Relaying
This section describes the configuration and commands that can be used to start Hermes and relay packets over one or multiple paths.
Table of Contents
The start
Command
To relay packets only configure the mode
section of the configuration file like so:
[global]
log_level = 'info'
[mode]
[mode.clients]
enabled = true
# ...
[mode.connections]
enabled = false
[mode.channels]
enabled = false
[mode.packets]
enabled = true
# ...
Then start Hermes using the start command:
hermes start
Hermes sends packet transactions triggered by IBC packet events for all open channels between the configured chains. This is also referred to packet streaming.
Packet Streaming
After Hermes is started using the start
command, it listens to IBC packet events emitted by any of
the configured chains. Assuming the events are coming from a source
chain, Hermes builds packets
based on these events, packets that are then sent either to the source
chain or the counterparty (destination
) chain.
Current events and actions are:
send_packet
: Hermes builds a packet message with thepacket
obtained from the event and any required proofs obtained from the counterparty of the chain where the message is sent. The concrete packet is:MsgRecvPacket
, sent todestination
chain if the channel is in open state on thedestination
chain, and a timeout has not occurred,MsgTimeout
, sent to thesource
chain if the channel is in open state on thedestination
chain, but a timeout has occurred.MsgTimeoutOnClose
, sent to thesource
chain if the channel is in closed state on thedestination
chain.
write_acknowledgement
: Hermes builds aMsgAcknowledgement
packet that is sent to thedestination
chain.
In addition to these events, Hermes will also handle channel closing events:
chan_close_init
: Hermes builds aMsgChannelCloseConfirm
and sends it to thedestination
chain
Packet Delay
If the relay path is using a non-zero delay connection, then hermes
will delay all packet transactions. The delay is relative to the submission time for the client update at the height required by the packet proof.
The delay is used to prevent light client attacks and ensures that misbehavior detection finalizes before the transaction is submitted.
For more information on the misbehavior detector see the misbehaviour section.