IBC - CW20 (wasm)
- Офф инструкция от Nois - https://docs.nois.network/use-cases/for-ibc-relayer-operators
- App - https://ibc.nois.network/connections
- Dashboard - https://monitoring.noislabs.com/d/A8EXIS44z/nois?orgId=1&refresh=10s&from=now-1h&to=now&var-chain_id=nois-testnet-003
В данном руководстве будет описано как настроить ретранслятор между сетями Aura и Nois для передачи данных через wasm CW20. На момент написания статьи Nois еще не передает токены ICS 20. Использование Hermes для передачи токенов ICS 20 ранее было описано в данной статье
Ниже будет 2 способа запуска - через Hermes и через Ts-relayer. Можно выбрать любой из способов, но важно понимать, что Hermes в будущем удобнее масштабировать
HERMES
Подготовка
Hermes можно установить как на 1 сервер вместе с необходимыми нодами, так и на отдельный сервер, при этом даже не обязательно поднимать собственные ноды, а достаточно знать открытые RPC рабочих нод. Но, поскольку успех ретрансляции сильно зависит от задержки и скорости ввода-вывода, то в настоящее время рекомендуется обслуживать узлы на том же сервере, где запущен процесс ретрансляции. При этом есть разница между тем какой сервер используется. Существует прямая связь между мощностью процессора, скоростью интернета и количеством переданных данных
Поскольку процесс ретрансляции должен иметь возможность запрашивать сеть обратно по высоте в течение как минимум 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 - Не рекомендуется использовать pruning-keep-recent менее 1 суток
P/s - Также не рекомендуется самим открывать каналы с маленьким значением trusting period
- установить две необходимые ноды и полностью синхронизировать их. В данном примере устанавливаем Aura и Nois
- minimum-gas-prices на Aura настраиваем на 0,0025; на Nois настраиваем на 0.05
- RPC должны быть открыты и доступны Hermes (как это сделать можно узнать здесь)
- индексация должна быть настроена в положение indexer = "kv"
(если, не меняли, то пропускаем этот пункт)
- проверить наличие токенов на кошельках. Лучше всего использовать одну и ту же мнемонику во всех сетях, не используйте свои адреса ретрансляции ни для чего другого, потому что это может привести к ошибкам в последовательности несогласованных учетных записей
Установка Hermes
Актуальную версию проверяем здесь
mkdir -p $HOME/.hermes/bin wget https://github.com/informalsystems/hermes/releases/download/v1.0.0/hermes-v1.0.0-x86_64-unknown-linux-gnu.tar.gz && \ tar -C $HOME/.hermes/bin/ -vxzf hermes-v1.0.0-x86_64-unknown-linux-gnu.tar.gz && \ echo 'export PATH="$HOME/.hermes/bin:$PATH"' >> $HOME/.bash_profile && \ source $HOME/.bash_profile # check version hermes version # hermes 1.0.0+ed4dd8c
Настройка Hermes
Для начала задаем переменную для кошелька. Данные ниже даны для примера!!!
MNEMONIC="way festival bargain mass swear flat fish help dinosaur flat lemon dry fish fiber belt year smoke glimpse extra fancy acquire method help universe"
Меняем на свои значения RPC_ADDR, GRPC_ADDR, websocket_addr, account_prefix, memo_prefix. Значение 127.0.0.1 заменяем на IP адрес сервера в случае установки Hermes отдельно от нод. Активные каналы с Nois проверяем здесь https://ibc.nois.network/connections
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 [rest] # Следует ли включать службу REST или нет. Значение по умолчанию: false enabled = true host = '127.0.0.1' port = 3000 [telemetry] # Следует ли включать службу телеметрии или нет. Значение по умолчанию: false enabled = true host = '127.0.0.1' port = 3001 [[chains]] ### CHAIN_1 - NOIS ### id = 'nois-testnet-003' rpc_addr = 'http://127.0.0.1:60857' grpc_addr = 'http://127.0.0.1:9790' websocket_addr = 'ws://127.0.0.1:60857/websocket' rpc_timeout = '10s' account_prefix = 'nois' key_name = 'wallet' #address_type = { derivation = 'cosmos' } store_prefix = 'ibc' max_gas = 3500000 gas_price = { price = 0.05, denom = 'unois' } gas_multiplier = 1.2 max_msg_num = 15 max_tx_size = 180000 clock_drift = '5s' max_block_time = '6s' trusting_period = '31hours' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = 'lesnik_utsa#4480 (UTSA Relayer)' [chains.packet_filter] policy = 'allow' list = [ # ['wasm.nois1s9ly26evj8ehurptws5d6dm4a9g2z0htcqvlvn95kc30eucl4s5sd8hkgp', 'channel-25'], #AURA-v3 # ['wasm.nois1s9ly26evj8ehurptws5d6dm4a9g2z0htcqvlvn95kc30eucl4s5sd8hkgp', 'channel-24'], #AURA-v3 # ['wasm.nois1td3zu6nlztw24v24p27vk6l9nwsyerzawkk456cuauzarf3ksr6s8kuuyy', 'channel-26'], #AURA-v4 ['wasm.nois1j3des9cjg0adpvkauck6c9muyrw6sxa7keaf82h2taxdjf69z8csw32v0e', 'channel-43'] #AURA-v5 [[chains]] ### CHAIN_2 - AURA### id = 'euphoria-2' rpc_addr = 'http://127.0.0.1:56657' grpc_addr = 'http://127.0.0.1:9390' websocket_addr = 'ws://127.0.0.1:56657/websocket' rpc_timeout = '10s' account_prefix = 'aura' key_name = 'wallet' #address_type = { derivation = 'ethermint', proto_type = { pk_type = '/ethermint.crypto.v1.ethsecp256k1.PubKey' } } store_prefix = 'ibc' max_gas = 15000000 gas_price = { price = 0.0025, denom = 'ueaura' } gas_multiplier = 1.2 max_msg_num = 15 max_tx_size = 180000 clock_drift = '5s' trusting_period = '31hours' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = 'lesnik_utsa#4480 (UTSA Relayer)' [chains.packet_filter] policy = 'allow' list = [ # ['wasm.aura1a472r2dggwwhf7hm8l8wk2fkafywve7pvufc9e2tkmmmh2z4xqwqpphpkg', 'channel-16'], #NOIS-v3 # ['wasm.aura1qrf8f9kyh4zzckz2zy52z5gppwweumvrlxqrgd4xr3ydf3sx4dlqt8lnt8', 'channel-15'], #NOIS-v3 # ['wasm.aura19z2hv8l87qwg8nnq6v76efjm2rm78rkdghq4rkxfgqrzv3usw8lq26rmwt', 'channel-18'], #NOIS-v4 ['wasm.aura1dz64l7pgcm45p3hctydqj7c6gn9czy0mqmst9dh2e0s25q66xumqe3atts', 'channel-24'] #NOIS-v5 ]
Проверяем правильность конфигурации
hermes config validate # Success: "configuration is valid" hermes health-check 2023-02-01T15:05:25.654244Z INFO ThreadId(01) using default configuration from '/root/.hermes/config.toml' 2023-02-01T15:05:25.654493Z INFO ThreadId(01) [nois-testnet-003] performing health check... 2023-02-01T15:05:25.662572Z INFO ThreadId(01) chain is healthy chain=nois-testnet-003 2023-02-01T15:05:25.662592Z INFO ThreadId(01) [euphoria-2] performing health check... 2023-02-01T15:05:25.668090Z INFO ThreadId(01) chain is healthy chain=euphoria-2 SUCCESS performed health check for all chains in the config
Добавляем кошельки в Hermes. За подробной информацией обращаемся сюда
# создаем файлы с мнемноникой sudo tee $HOME/.hermes/nois-testnet-003.mnemonic > /dev/null <<EOF ${MNEMONIC} EOF sudo tee $HOME/.hermes/euphoria-2.mnemonic > /dev/null <<EOF ${MNEMONIC} EOF # восстанавливаем кошельки hermes keys add --chain nois-testnet-003 --mnemonic-file $HOME/.hermes/nois-testnet-003.mnemonic hermes keys add --chain euphoria-2 --mnemonic-file $HOME/.hermes/euphoria-2.mnemonic # посмотреть кошельки hermes keys list --chain nois-testnet-003 hermes keys list --chain euphoria-2 # посмотреть баланс hermes keys balance --chain nois-testnet-003 hermes keys balance --chain euphoria-2
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
Полезные команды
hermes query channels --show-counterparty --chain euphoria-2 hermes query channels --show-counterparty --chain nois-testnet-003
journalctl -u hermesd -f -o cat
systemctl stop hermesd && \ systemctl disable hermesd && \ rm /etc/systemd/system/hermesd.service && \ systemctl daemon-reload && \ cd $HOME && \ rm -rf .hermes && \ rm -rf $(which hermesd)
TS-RELAYER
При установке через Ts-relayer можно использовать отдельный сервер и пока команда Nois предлагает нам использовать их docker образы для запуска. В данном случае от нас требуется seed фраза от Вашего кошелька с балансом на счету
export MNEMONIC='<YOUR_MNEMONICS_HERE>' docker run -d --name ts-relayer-v5 \ -e "MNEMONIC=$MNEMONIC" \ noislabs/nois-relayer:euphoria-2-aura1dz64l7pgcm45p3hctydqj7c6gn9czy0mqmst9dh2e0s25q66xumqe3atts \ ibc-relayer start \ --src-connection=connection-22 \ --dest-connection=connection-34 \ --poll 3
Полезные команды
# посмотреть логи docker logs ts-relayer-v4 -f docker restart ts-relayer-v4 # удалить ноду docker stop ts-relayer-v4 docker rm ts-relayer-v4