Relé Hermes (IBC)

Descripción general

Esta guía proporciona un recorrido completo sobre la configuración de un retransmisor utilizando Hermes, un retransmisor IBC que opera como un mecanismo fundamental fuera de la cadena dentro de la arquitectura IBC, cuya tarea es facilitar la retransmisión de datagramas IBC entre dos cadenas blockchain distintas. Este proceso implica un procedimiento meticuloso de monitorear el estado de cada cadena, construir transacciones basadas en estas observaciones y posteriormente enviar estas transacciones a las cadenas relevantes dentro de la red.

Requisitos previos

  • Rust 1.72 o posterior : asegúrese de que Rust esté actualizado a la versión 1.72 o superior para compilar Hermes correctamente.

Tutorial

Paso 1: clonar el repositorio de Hermes

git clone https://github.com/informalsystems/hermes.git
cd hermes

Paso 2: instalar y configurar Hermes

cargo build --release --bin hermes

# move hermes to cargo bin
cp ./target/release/hermes ~/.cargo/bin

# check installed herems
hermes --version

# create working directory and config file for herems
mkdir ~/.hermes
touch ~/.hermes/config.toml

Paso 3: actualizar las configuraciones de la cadena

  1. Abrir ~/.hermes/config.tomlen un editor de texto.

  2. Complete las configuraciones para L1 y L2 como en el ejemplo siguiente, reemplazando los valores del marcador de posición ( <...>) con valores reales. Puedes encontrar información sobre las configuraciones de cada uno en la documentación oficial de Hermes .

Asegúrese de utilizar sus propios puntos finales RPC para mejorar la seguridad y confiabilidad.

Cuando configura Hermes, los l2 max_block_timedeben configurarse como 2 * create_empty_blocks_intervalen su archivo ~/.minitia/config/config.toml.

Ejemplo de configuración
[global]
log_level = 'info'

[mode]

[mode.clients]
enabled = true
refresh = true
misbehaviour = true

[mode.connections]
enabled = true

[mode.channels]
enabled = false

[mode.packets]
enabled = true
clear_interval = 10
clear_on_start = true
tx_confirmation = true

[rest]
enabled = true
host = '127.0.0.1'
port = 3000

[telemetry]
enabled = true
host = '127.0.0.1'
port = 3001

[[chains]]
id = '<l1-chain-id>' # mahalo-1
type = "CosmosSdk"
rpc_addr = '<l1-rpc-endpoint>' # https://rpc.mahalo-1.initia.xyz (mahalo-1)
grpc_addr = '<l1-grpc-endpoint>' # http://34.143.171.2:9090 (mahalo-1)
event_source = { mode = 'push', url = '<l1-websocket-endpoint>', batch_delay = '500ms' } # wss://rpc.mahalo-1.initia.xyz/websocket (mahalo-1)
rpc_timeout = '10s'
trusted_node = false
account_prefix = 'init'
key_name = 'relayer'
store_prefix = 'ibc'
default_gas = 100000
max_gas = 3000000
gas_price = { price = 0.15, denom = 'uinit' }
gas_multiplier = 1.5
max_msg_num = 10 # recommend set it to 10 or increase max_gas
max_tx_size = 2097152
clock_drift = '5s'
max_block_time = '10s'
address_type = { derivation = 'cosmos' }

[[chains]]
id = '<l2-chain-id>' # $L2_CHAIN_ID
type = "CosmosSdk"
rpc_addr = '<l2-rpc-endpoint>' # http://127.0.0.1:26657
grpc_addr = '<l2-grpc-endpoint>' # http://127.0.0.1:9090
# must be pull mode for miniwasm ex) event_source = { mode = 'pull', interval = '500ms' }
event_source = { mode = 'push', url = '<l2-websocket-endpoint>', batch_delay = '500ms' } # ws://127.0.0.1:26657/websocket
rpc_timeout = '10s'
trusted_node = false
account_prefix = 'init'
key_name = 'relayer'
store_prefix = 'ibc'
default_gas = 100000
max_gas = 3000000
gas_price = { price = 0.15, denom = '<denom>' } # $DENOM
gas_multiplier = 1.5
max_msg_num = 10 # recommend set it to 10 or increase max_gas
max_tx_size = 2097152
clock_drift = '5s'
# max_block_time should be configured as `2 * create_empty_blocks_interval`
# in your ~/.minitia/config/config.toml
max_block_time = '2m0s' 
address_type = { derivation = 'cosmos' }

Paso 4: crear clave de retransmisión

  1. Asegúrese de que la cuenta de retransmisión tenga fondos suficientes en las cadenas L1 y L2.

  2. Configurar claves de retransmisión

# create temporal keyfile for herems
echo $RELAYER_MNEMONIC > mnemonic.key

# add relayer key for the chains
hermes keys add --key-name relayer --chain $L1_CHAIN_ID --mnemonic-file ./mnemonic.key
hermes keys add --key-name relayer --chain $L2_CHAIN_ID --mnemonic-file ./mnemonic.key

rm ./mnemonic.key

Paso 5: transferir canal

Si usó launchel comando minitia, puede omitir este paso.

Crea un Canal con clientes y conexiones. Este proceso puede tardar hasta 5 minutos.

hermes create channel \
  --a-chain $L1_CHAIN_ID \
  --b-chain $L2_CHAIN_ID \
  --a-port transfer \
  --b-port transfer \
  --new-client-connection 

SUCCESS Channel {
    ...
}

Paso 6: inicie Hermes

hermes start

Last updated