March 3

Hermes для Namada IBC-channel / Namada_Install

Hermes v 1.7.4

В данном гайде будет установлен гермес версии v1.7.4 (fix от czarcas7ic). Начиная с версии v1.6.0 необходимо вносить изменения в конфиг файл, используемый в предыдущих версиях. Версия v1.7.4 (fix от czarcas7ic) помогает решить некоторые проблемы с газом, которые появились с крайним обновлением osmosis

Подготовка

Любой ретранслятор можно установить как на 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

Polkachu к примеру для relayer использует 40000/2000

Установка Hermes

Актуальную версию проверяем здесь

 mkdir -p $HOME/.hermes
# install rust
curl https://sh.rustup.rs -sSf | sh
source "$HOME/.cargo/env"
cd
git clone https://github.com/czarcas7ic/hermes && cd hermes
git checkout v1.7.4-osmo-5
cargo build --release --bin hermes
cp $HOME/hermes/target/release/hermes $HOME/.cargo/bin/hermes
hermes version
#hermes 1.7.4+00f45397

Config

Копируем примерный конфиг ниже и заменяем на наши данные

Вы можете ознакомиться со всеми дополнительными флагами здесь - https://github.com/informalsystems/hermes/blob/master/config.toml

nano $HOME/.hermes/config.toml
[global]
# укажите уровень детализации вывода журнала ретранслятора Default: 'info'
# допустимые варианты 'error','warn','info','debug','trace'
# заменити на свое warrior_node - а также порти
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:61575'
grpc_addr = 'http://127.0.0.1:9999'
event_source = { mode = 'push', url = 'ws://127.0.0.1:61557/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
gas_price_multiplier = 1.1
max_gas_price = 0.6

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 = 'warrior_node'
[chains.packet_filter]
policy = 'allow'
list = [
  ['transfer', 'channel-222'], #PROVENANCE
]

[[chains]]
### CHAIN_2 Provenance ###
id = 'cosmos-1-testnet'

rpc_addr = 'http://127.0.0.1:46610'
grpc_addr = 'http://127.0.0.1:9292'
event_source = { mode = 'push', url = 'ws://127.0.0.1:46610/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 = 'warrior_node'
[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"

Создаем service

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 namada-testnet-v3 --a-connection connection-0 --a-port  transfer --b-port transfer --order unordered
hermes create channel --a-chain namada-testnet-v3 --b-chain harmony-testnet-0 --a-port transfer --b-port transfer --order unordered --new-client-connection

Перед открытием канала убедитесь, что ранее не созданы другие каналы для нужных Вам сетей!!!

ВАЖНО - после создания канала нужно следить за ним, чтобы он не "замерз" (frozen). После замерзания канала его можно будет восстановить через proposal или придется открывать новый канал. Чтобы этого не произошло человеку, открывшему канал необходимо будет запускать скрипт автоматического обновления канала. Пример:

#!/bin/bash
for((;;)); do
  hermes update client --host-chain namada-testnet-v3 --client 07-tendermint-39
sleep 5
  echo "update TERITORI to GAIA client is done"
sleep 5
  hermes update client --host-chain harmony-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)

#інсталюйте основні
sudo apt update; sudo apt upgrade -y
sudo apt install make clang pkg-config libssl-dev build-essential git jq llvm libudev-dev -y

#install rust
curl --proto '=https' --tlsv1.2 -sSf https://sh .rustup.rs | sh -s -- -y
джерело $HOME/.cargo/env

#встановити буфери протоколу
sudo apt update
sudo apt install protobuf-compiler

#set variables
CHAIN_ID="shielded-expedition. 88f17d1d14 "
KEY_NAME=" <ВАШЕ ІМ'Я КЛЮЧА> "
VAL_NAME =" <ВАШЕ ІМ'Я ВАЛІДАТОРА> "
ЕЛЕКТРОННА ПОШТА=" <ВАША ЕЛЕКТРОННА ПОШТА> "

#make variables permanent
echo 'export CHAIN_ID='\"${CHAIN_ID}\" >> $HOME/.bash_profile
echo 'export KEY_NAME='\"${KEY_NAME}\" >> $HOME/.bash_profile
echo 'export VAL_NAME ='\"${VAL_NAME}\" >> $HOME/.bash_profile
echo 'export EMAIL='\"${EMAIL}\" >> $HOME/.bash_profile
джерело $HOME/.bash_profile

#check
cat ~/.bash_profile

#встановити попередньо скомпільовані двійкові файли Namada - v0.31.4
wget https://github.com/anoma/namada/releases/download/v0.31.6/namada-v0.31.6-Linux-x86_64.tar.gz
tar xf namada-* .tar.gz
sudo mv namada-v0.31.6-Linux-x86_64/namada* /usr/local/bin/
rm -rf namada*

#або скомпілюйте двійкові файли самостійно
git clone https://github.com/anoma/namada.git
cd namada
git checkout v0.31.6
make install
sudo chmod +x ~/.cargo/bin/namada*
sudo mv ~/.cargo/bin/namada* /usr/local/bin

#install CometBft
mkdir cometbft
wget https://github.com/cometbft/cometbft/releases/download/v0.37.2/cometbft_0.37.2_linux_amd64.tar.gz
tar xvf cometbft_0.37.2_linux_amd64.tar.gz -C ./cometbft
chmod +x cometbft/cometbft
sudo mv cometbft/cometbft /usr/local/bin/
rm -rf cometbft*

#перевірити версію
namada -V

#ініціалізувати ланцюг і робочий каталог
namada client utils join-network --chain-id $CHAIN_ID

#додати службовий файл
sudo tee /etc/systemd/system/namadad.service << EOF
[Unit]
Description=Namada Node
After=network.target
[Service]
User=$USER
WorkingDirectory=$HOME/.local/share/namada
Type =simple
ExecStart=/usr/local/bin/namada --base-dir=$HOME/.local/share/namada node ledger run
Environment=NAMADA_CMT_STDOUT=true
Environment=TM_LOG_LEVEL=p2p:none,pex:error
RemainAfterExit=no
Restart =on-failure
RestartSec=10s
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

#add peers
peers="$(curl -s https://raw.githubusercontent.com/AlexToTheMoon/AM-Solutions/main/files/namada-peers.txt)"
sed -i "s#^persistent_peers *=.* #persistent_peers = \"$peers\"#;" $HOME/.local/share/namada/shielded-expedition.88f17d1d14/config.toml

#add seeds
seeds="tcp://[email protected]:26656,\
tcp://2cdf24 [email protected]: 12904,\
tcp://[email protected]:26656"
sed -i "s#^seeds *=.*#seeds = \"$seeds\"#;" $HOME/.local/share/namada/shielded-expedition.88f17d1d14/config.toml

#addrbook
wget -qO $HOME/.local/share/namada/shielded-expedition.88f17d1d14/cometbft/config/addrbook.json https:/ /snapshots.theamsolutions.info/nam-addrbook.json

#enable Namada service
sudo systemctl enable namadad.service
sudo systemctl daemon-reload
sudo systemctl restart namadad.service

#перевірте журнали
sudo journalctl -u namadad.service -fn 50 -o cat

#повний статус вузла (якщо ви не використовуєте стандартний порт 26657, змініть на правильний)
curl localhost:26657/status

#sync status (false = вузол синхронізовано)
curl -s localhost:26657/status | jq .result.sync_info.catching_up

ЗНІМОК ДАНИХ
(оновлюється кожні 4 години)

#check snapshot date/time : curl -s https://snapshots.theamsolutions.info/ | egrep -o ">namada-snap*.*tar" | tr -d ">"

#run node from snapshot
snap=$(curl -s https://snapshots.theamsolutions.info/ | egrep -o ">namada-snap*.*tar" | tr -d ">")
workd="$HOME/ .local/share/namada/shielded-expedition.88f17d1d14"
wget -P $HOME https://snapshots.theamsolutions.info/${snap}
sudo systemctl stop namadad.service
cp ${workd}/cometbft/data/priv_validator_state. json ~/priv_validator_state.jsonNBAK
rm -rf ${workd}/db/ ${workd}/cometbft/data/ ${workd}/cometbft/data/ ${workd}/tx_wasm_cache ${workd}/vp_wasm_cache
tar xf ~/ ${snap} -C ${workd}; rm ~/${snap}
cp ~/priv_validator_state.jsonNBAK ${workd}/cometbft/data/priv_validator_state.json
sudo systemctl перезапустити namadad.service

НАЛАШТУВАННЯ ВАЛІДАТОРА
(Вузол повинен бути синхронізований)

#генерувати новий ключ
namadaw gen --alias "${KEY_NAME}"

#або відновити ключ із мнемоніки
namadaw derive --alias "${KEY_NAME}"

#check key address
namadaw find --alias "${KEY_NAME}"

#list all the keys
namadaw list

#check balance
namadac balance --owner "${KEY_NAME}" --node http://localhost:26657

#initialize validator
namadac init-validator \
--alias "${VAL_NAME}" \
--account-keys "${KEY_NAME}" \
--signing-keys "${KEY_NAME}" \
--commission-rate 0.1 \
- -max-commission-rate-change 0.1 \
--email "${EMAIL}" \
--node http://localhost:26657

#bond токени до вашого валідатора
namadac bond \
--source "${KEY_NAME}" \
--validator "${VAL_NAME}" \
--amount 1000 \
--node http://localhost:26657

КОРИСНО

#query TX
namadac tx-result --tx-hash <TX HASH> --node tcp://149.50.96.147:26657

#знайти ключ перевірки
namadac find-validator --tm-address=$(curl -s localhost:26657 /status | jq -r .result.validator_info.address) --node http://localhost:26657

#відправити кошти
namada transfer --target <RECEIVER-KEY(nam1..)> --source <SENDER-KEY(NAME )> --amount 100 --token NAM --node http://localhost:26657

#check validator konsensus status
namadac validator-state --validator " <адреса валідатора tham1...> " --node http://localhost:26657

#unjail validator
namadac unjail-validator --validator " <адреса валідатора tham1... > " --node http://localhost:26657