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 thepacketobtained 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 todestinationchain if the channel is in open state on thedestinationchain, and a timeout has not occurred,MsgTimeout, sent to thesourcechain if the channel is in open state on thedestinationchain, but a timeout has occurred.MsgTimeoutOnClose, sent to thesourcechain if the channel is in closed state on thedestinationchain.
write_acknowledgement: Hermes builds aMsgAcknowledgementpacket that is sent to thedestinationchain.
In addition to these events, Hermes will also handle channel closing events:
chan_close_init: Hermes builds aMsgChannelCloseConfirmand sends it to thedestinationchain
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.