Hermes v 1.10.0+
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
В данном гайде будет установлен гермес версии 1.10.0+. Начиная с версии v1.6.0 необходимо вносить изменения в конфиг файл, используемый в предыдущих версиях. Версия 1.10.0+ помогает решить некоторые проблемы с газом, которые появились с крайним обновлением osmosis
Гайд по установке hermes ранних версий можно найти здесь - https://teletype.in/@lesnik13utsa/k3PdYH_Jbcb
Подготовка
Любой ретранслятор можно установить как на 1 сервер вместе с необходимыми нодами, так и на отдельный сервер, при этом даже не обязательно поднимать собственные ноды, а достаточно знать открытые RPC, gRPC и API рабочих нод. Но, поскольку успех ретрансляции сильно зависит от задержки и скорости ввода-вывода, то в настоящее время рекомендуется обслуживать узлы на том же компьютере, что и процесс ретрансляции
Поскольку процесс ретрансляции должен иметь возможность запрашивать сеть обратно по высоте в течение как минимум 2/3 unbonding period (trusting period = 2/3 от unbonding period), то рекомендуется использовать настройки прунинга, которые сохранят полное состояние цепочки в течение более длительного периода времени, чем период unbonding
То есть 14 дней от 21 или 10 дней от 14 или 1,3 дня от 2 дней
Необходимый прунинг можно посчитать по формуле 14 дней*24*60*60/ среднее время блока
- Для 14 дней pruning-keep-recent = 200000
- Для 10 дней pruning-keep-recent = 150000
- Для 1,3 дня pruning-keep-recent = 18720
- Для 1,5 часа pruning-keep-recent = 1000
P/s - у нас прунинг будет 1000/0/10 и попробуем немного обхитрить систему изменив конфиг следующим образом:
# Следует ли включать обнаружение неправильного поведения для клиентов. [По умолчанию: false] misbehaviour = false
Установка Hermes
Актуальную версию проверяем здесь
mkdir -p $HOME/.hermes
# install rust curl https://sh.rustup.rs -sSf | sh source "$HOME/.cargo/env"
cd rm -r hermes git clone https://github.com/informalsystems/hermes && cd hermes git checkout v1.10.3 cargo build --release --bin hermes
cp $HOME/hermes/target/release/hermes $HOME/.cargo/bin/hermes hermes version #hermes 1.10.3+e26d356a
Config
Копируем примерный конфиг ниже и заменяем на наши данные
Вы можете ознакомиться со всеми дополнительными флагами здесь - https://github.com/informalsystems/hermes/blob/master/config.toml
nano $HOME/.hermes/config.toml
[global] # укажите уровень детализации вывода журнала ретранслятора Default: 'info' # допустимые варианты 'error','warn','info','debug','trace' log_level = 'info' [mode] [mode.clients] enabled = true refresh = true misbehaviour = false [mode.connections] enabled = false [mode.channels] enabled = false [mode.packets] enabled = true clear_interval = 100 clear_on_start = true tx_confirmation = true auto_register_counterparty_payee = false [rest] # Следует ли включать службу REST или нет. Значение по умолчанию: false enabled = false host = '0.0.0.0' port = 3000 [telemetry] # Следует ли включать службу телеметрии или нет. Значение по умолчанию: false enabled = false host = '0.0.0.0' port = 3001 [telemetry.buckets] [tracing_server] enabled = false port = 5555 [[chains]] ### CHAIN_1 Osmosis ### id = 'osmosis-1' rpc_addr = 'http://127.0.0.1:61757' grpc_addr = 'http://127.0.0.1:9960' event_source = { mode = 'push', url = 'ws://127.0.0.1:61757/websocket', batch_delay = '500ms' } rpc_timeout = '10s' account_prefix = 'osmo' key_name = 'wallet' address_type = { derivation = 'cosmos' } store_prefix = 'ibc' default_gas = 400000 max_gas = 5000000 gas_price = { price = 0.025, denom = 'uosmo' } gas_multiplier = 1.1 max_msg_num = 30 max_tx_size = 180000 clock_drift = '15s' max_block_time = "30s" trusting_period = '14days' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = 'lesnik_utsa' [chains.packet_filter] policy = 'allow' list = [ ['transfer', 'channel-222'], #PROVENANCE ] [[chains]] ### CHAIN_2 Provenance ### id = 'pio-mainnet-1' rpc_addr = 'http://127.0.0.1:46657' grpc_addr = 'http://127.0.0.1:9290' event_source = { mode = 'push', url = 'ws://127.0.0.1:46657/websocket', batch_delay = '500ms' } rpc_timeout = '20s' account_prefix = 'pb' key_name = 'wallet' address_type = { derivation = 'cosmos' } store_prefix = 'ibc' default_gas = 800000 max_gas = 4000000 gas_price = { price = 1905, denom = 'nhash' } gas_multiplier = 1.5 max_msg_num = 30 max_tx_size = 180000 clock_drift = '15s' max_block_time = "30s" trusting_period = '14days' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = 'lesnik_utsa' [chains.packet_filter] policy = 'allow' list = [ ['transfer', 'channel-7'], #OSMOSIS ]
Проверяем правильность конфигурации
hermes config validate # Success: "configuration is valid" hermes health-check # hermes evidence --chain <CHAIN_ID>
Добавляем кошельки в Hermes. За подробной информацией обращаемся сюда
ВАЖНО - ДЛЯ EVM сетей добавляем -hd-path "m/44'/60'/0'/0/0"
tee /etc/systemd/system/hermesd.service > /dev/null <<EOF [Unit] Description=hermes After=network-online.target [Service] User=$USER ExecStart=$(which hermes) start Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
systemctl daemon-reload systemctl enable hermesd systemctl restart hermesd && journalctl -u hermesd -f -o cat
Дальше должны пойти подобные логи с хешами транзакций и баланс кошельков должен начать уменьшаться. Если есть такие логи, значит все настроено и работает
Полезные команды
# ВАРИАНТ 1 - предпочтительный способ создать новый канал используя существующее соединение (connection) # если оно было ранее создано для нужного чейна hermes create channel --a-chain ${CHAIN_ID_1} --a-connection <connection-0> --a-port transfer --b-port transfer --order unordered # ВАРИАНТ 2 - новый канал по новому соединению (connection) в случае, если вы специально хотите создать нового клиента и новое соединение как часть потока создания канала # это менее предпочтительный вариант, поскольку создание новых клиентов и подключений должно выполняться только при определенных обстоятельствах, чтобы не создавать избыточные ресурсы hermes create channel --a-chain ${CHAIN_ID_1} --b-chain ${CHAIN_ID_2} --a-port transfer --b-port transfer --order unordered --new-client-connection # ПРИМЕРЫ hermes create channel --a-chain teritori-testnet-v3 --a-connection connection-0 --a-port transfer --b-port transfer --order unordered hermes create channel --a-chain teritori-testnet-v3 --b-chain theta-testnet-001 --a-port transfer --b-port transfer --order unordered --new-client-connection
Перед открытием канала убедитесь, что ранее не созданы другие каналы для нужных Вам сетей!!!
ВАЖНО - после создания канала нужно следить за ним, чтобы он не "замерз" (frozen). После замерзания канала его можно будет восстановить через proposal или придется открывать новый канал. Чтобы этого не произошло человеку, открывшему канал необходимо будет запускать скрипт автоматического обновления канала. Пример:
#!/bin/bash for((;;)); do hermes update client --host-chain teritori-testnet-v3 --client 07-tendermint-39 sleep 5 echo "update TERITORI to GAIA client is done" sleep 5 hermes update client --host-chain theta-testnet-001 --client 07-tendermint-1055 echo "update GAIA to TERITORI client is done" sleep 3600 done
hermes query channels --show-counterparty --chain jagrat
journalctl -u hermesd -f -o cat journalctl -fn 100 -u hermesd | grep "Ok" journalctl -u hermesd | grep "Ok"
systemctl stop hermesd && \ systemctl disable hermesd && \ rm /etc/systemd/system/hermesd.service && \ systemctl daemon-reload && \ cd $HOME && \ rm -rf .hermes && \ rm -rf $(which hermes)