Zenrock
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
- Network Chain ID:
gardia-2
- Denom:
urock
- Binary:
zenrockd
zenrock-sidecar
- Working directory:
.zrchain
- RPC: https://t-zenrock.archive.rpc.utsa.tech/
- API: https://t-zenrock.archive.api.utsa.tech/
- Explorers: https://exp.utsa.tech/zenrock-test/staking
- Docs: https://github.com/zenrocklabs/zenrock-validators
Обновления
Подготовка сервера
# обновляем репозитории apt update && apt upgrade -y # устанавливаем необходимые утилиты apt install curl iptables build-essential git wget jq make gcc nano tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y
File2Ban - подробнее здесь и здесь
# устанавливаем и копируем конфиг, который будет иметь больший приоритет apt install fail2ban -y && \ cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \ nano /etc/fail2ban/jail.local # раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 <ip> systemctl restart fail2ban # проверяем status systemctl status fail2ban # проверяем, какие jails активны (по умолчанию только sshd) fail2ban-client status # проверяем статистику по sshd fail2ban-client status sshd # смотрим логи tail /var/log/fail2ban.log # останавливаем работу и удаляем с автозагрузки #systemctl stop fail2ban && systemctl disable fail2ban
ver="1.22.3" && \ wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz" && \ sudo rm -rf /usr/local/go && \ sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz" && \ rm "go$ver.linux-amd64.tar.gz" && \ echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ go version
ufw allow 26656 comment p2p_port
Новая установка ноды
ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>
В настоящее время для работы ноды необходимо запустить два отдельных клиента:
# при необходимости создаем каталог go/bin/ mkdir -p $HOME/go/bin/
cd $HOME mkdir -p zenrock && cd zenrock
curl -o zenrockd https://releases.gardia.zenrocklabs.io/zenrockd-4.7.1 chmod +x $HOME/zenrock/zenrockd mv $HOME/zenrock/zenrockd $HOME/go/bin/
zenrockd version --long | grep -e version -e commit # version: 4.7.1 # commit: dbf453ce6e010d87f1571142b0e8a84062764e27
Инициализируем ноду, чтобы создать необходимые файлы конфигурации
zenrockd init UTSA_guide --chain-id gardia-2
curl -s https://rpc.gardia.zenrocklabs.io/genesis | jq .result.genesis > $HOME/.zrchain/config/genesis.json # Проверим genesis sha256sum ~/.zrchain/config/genesis.json # 85baddb3e1cb6b349aee2d79050b88f781ee34c0d0fc51d9ee2fecd04877ca3c
wget -O $HOME/.zrchain/config/addrbook.json "https://share106-7.utsa.tech/zenrock/addrbook.json"
Настраиваем конфигурацию ноды
zenrockd config set client chain-id gardia-2 #zenrockd config set client keyring-backend test sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0urock"|g' $HOME/.zrchain/config/app.toml external_address=$(wget -qO- eth0.me) sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.zrchain/config/config.toml peers="5458b7a316ab673afc34404e2625f73f0376d9e4@zenrock-testnet-peer.itrocket.net:11656,[email protected]:26656,[email protected]:26656" sed -i -e "s|^persistent_peers *=.*|persistent_peers = \"$peers\"|" $HOME/.zrchain/config/config.toml seeds="50ef4dd630025029dde4c8e709878343ba8a27fa@zenrock-testnet-seed.itrocket.net:56656" sed -i.bak -e "s/^seeds =.*/seeds = \"$seeds\"/" $HOME/.zrchain/config/config.toml sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.zrchain/config/config.toml
(ОПЦИОНАЛЬНО) Настраиваем прунинг
pruning="custom" pruning_keep_recent="1000" pruning_interval="10" sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.zrchain/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.zrchain/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.zrchain/config/app.toml
(ОПЦИОНАЛЬНО) Выкл индексацию вconfig.toml
indexer="null" sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.zrchain/config/config.toml
(ОПЦИОНАЛЬНО) State Sync
# добавляем пир peers="[email protected]:36656" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.zrchain/config/config.toml
SNAP_RPC=https://t-zenrock.archive.rpc.utsa.tech:443 LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \ TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \ s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \ s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \ s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; \ s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.zrchain/config/config.toml
Создаем сервисный файл zenrockd
tee /etc/systemd/system/zenrockd.service > /dev/null <<EOF [Unit] Description=Zenrock After=network-online.target [Service] User=$USER ExecStart=$(which zenrockd) start Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
systemctl daemon-reload systemctl enable zenrockd systemctl restart zenrockd && journalctl -u zenrockd -f -o cat
Создаем или восстанавливаем кошелек
# создать кошелек zenrockd keys add <name_wallet> --keyring-backend os # восстановить кошелек (после команды вставить seed) zenrockd keys add <name_wallet> --recover --keyring-backend os
Snapshot Archive
type: archive | time: every 1 days | pruning: nothing | indexer: kv
systemctl stop zenrockd cp $HOME/.zrchain/data/priv_validator_state.json $HOME/.zrchain/priv_validator_state.json.backup rm -rf $HOME/.zrchain/data rm -rf $HOME/.zrchain/wasm # скачиваем curl -o - -L https://share106-7.utsa.tech/zenrock/zenrock_archive_testnet.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.zrchain/ mv $HOME/.zrchain/priv_validator_state.json.backup $HOME/.zrchain/data/priv_validator_state.json systemctl restart zenrockd
Устанавливаем Sidecar
Сервис validator sidecar позволяет проверяющим голосовать за данные oracle в процессе согласования в CometBFT
# создаем необходимые директории mkdir -p $HOME/.zrchain/sidecar/bin mkdir -p $HOME/.zrchain/sidecar/keys
wget -O $HOME/.zrchain/sidecar/bin/zenrock-sidecar https://releases.gardia.zenrocklabs.io/validator_sidecar-1.2.3 chmod +x $HOME/.zrchain/sidecar/bin/zenrock-sidecar
cd $HOME git clone https://github.com/zenrocklabs/zenrock-validators
Задаем наш пароль для кошельков sidecar
read -p "Enter password for the keys: " key_pass
cd $HOME/zenrock-validators/utils/keygen/bls/ go mod tidy go build
bls_output_file=$HOME/.zrchain/sidecar/keys/bls.key.json $HOME/zenrock-validators/utils/keygen/bls/bls --password $key_pass -output-file $bls_output_file
cd $HOME/zenrock-validators/utils/keygen/ecdsa/ go mod tidy go build
ecdsa_output_file=$HOME/.zrchain/sidecar/keys/ecdsa.key.json ecdsa_creation=$($HOME/zenrock-validators/utils/keygen/ecdsa/ecdsa --password $key_pass -output-file $ecdsa_output_file) ecdsa_address=$(echo "$ecdsa_creation" | grep "Public address" | cut -d: -f2)
echo "ecdsa address: $ecdsa_address" #Public address: 0xe766944B5a25B1DE938eF19D15D1F5d3B4fe6E2D
ВАЖНО - для продолжения необходимо пополнить созданный ecdsa key тестовыми токенами Ethereum Holesky
Можно воспользоваться краном - https://stakely.io/faucet/ethereum-holesky-testnet-eth
ВАЖНО - для продолжения необходимо зарегистрироваться на https://app.infura.io или другом агрегаторе, чтобы получить следующие эндпойнты:
- mainnet eth: https://xxx
- holesky eth: https://xxx
- holesky eth: wss://xxx
Опытным путем замечено, что бесплатные эндпойнты на infura не работают стабильно
EIGEN_OPERATOR_CONFIG="$HOME/.zrchain/sidecar/eigen_operator_config.yaml" TESTNET_HOLESKY_ENDPOINT="<HTTPS_TESTNET_HOLESKY_ENDPOINT>" MAINNET_ENDPOINT="<HTTPS_MAINNET_ENDPOINT>" OPERATOR_VALIDATOR_ADDRESS_TBD="<ADDR_zenrockVALOPER>" OPERATOR_ADDRESS_TBU=$ecdsa_address ETH_RPC_URL="<HTTPS_TESTNET_HOLESKY_ENDPOINT>" ETH_WS_URL="<WSS_TESTNET_HOLESKY_ENDPOINT>" ECDSA_KEY_PATH=$ecdsa_output_file BLS_KEY_PATH=$bls_output_file
Копируем исходные конфигурационные файлы
cp $HOME/zenrock-validators/configs/eigen_operator_config.yaml $HOME/.zrchain/sidecar/ cp $HOME/zenrock-validators/configs/config.yaml $HOME/.zrchain/sidecar/
sed -i "s|EIGEN_OPERATOR_CONFIG|$EIGEN_OPERATOR_CONFIG|g" "$HOME/.zrchain/sidecar/config.yaml" sed -i "s|TESTNET_HOLESKY_ENDPOINT|$TESTNET_HOLESKY_ENDPOINT|g" "$HOME/.zrchain/sidecar/config.yaml" sed -i "s|MAINNET_ENDPOINT|$MAINNET_ENDPOINT|g" "$HOME/.zrchain/sidecar/config.yaml"
Меняем данные в eigen_operator_config.yaml
sed -i "s|OPERATOR_VALIDATOR_ADDRESS_TBD|$OPERATOR_VALIDATOR_ADDRESS_TBD|g" "$HOME/.zrchain/sidecar/eigen_operator_config.yaml" sed -i "s|OPERATOR_ADDRESS_TBU|$OPERATOR_ADDRESS_TBU|g" "$HOME/.zrchain/sidecar/eigen_operator_config.yaml" sed -i "s|ETH_RPC_URL|$ETH_RPC_URL|g" "$HOME/.zrchain/sidecar/eigen_operator_config.yaml" sed -i "s|ETH_WS_URL|$ETH_WS_URL|g" "$HOME/.zrchain/sidecar/eigen_operator_config.yaml" sed -i "s|ECDSA_KEY_PATH|$ECDSA_KEY_PATH|g" "$HOME/.zrchain/sidecar/eigen_operator_config.yaml" sed -i "s|BLS_KEY_PATH|$BLS_KEY_PATH|g" "$HOME/.zrchain/sidecar/eigen_operator_config.yaml"
Создаем сервисный файл zenrock-sidecar
tee /etc/systemd/system/zenrock-sidecar.service > /dev/null <<EOF [Unit] Description=Zenrock-sidecar After=network-online.target [Service] User=$USER ExecStart=$HOME/.zrchain/sidecar/bin/zenrock-sidecar Restart=on-failure RestartSec=30 LimitNOFILE=65535 Environment="OPERATOR_BLS_KEY_PASSWORD=$key_pass" Environment="OPERATOR_ECDSA_KEY_PASSWORD=$key_pass" Environment="SIDECAR_CONFIG_FILE=$HOME/.zrchain/sidecar/config.yaml" [Install] WantedBy=multi-user.target EOF
systemctl daemon-reload systemctl enable zenrock-sidecar systemctl restart zenrock-sidecar && journalctl -u zenrock-sidecar -f -o cat
Создаем валидатора
zenrockd comet show-validator # {"@type":"/cosmos.crypto.ed25519.PubKey","key":"ZXONS7NNjLWH4HePBOoHKDAYeLXQO5iUwpCRQSi1poI="}
nano $HOME/.zrchain/validator.json
{ "pubkey": {#pubkey}, "amount": "1000000urock", "moniker": "moniker", "identity": "", "website": "", "security": "", "details": "", "commission-rate": "0.05", "commission-max-rate": "0.25", "commission-max-change-rate": "0.05", "min-self-delegation": "1" }
zenrockd tx validation create-validator $HOME/.zrchain/validator.json \ --from=<key-name> \ --chain-id=gardia-2 \ --gas auto --gas-adjustment 1.5 --gas-prices 27urock
Полезные команды
# проверить логи journalctl -u zenrockd -f -o cat # проверить статус curl localhost:$PORT/status | jq # проверить баланс zenrockd q bank balances <address> # проверить pubkey валидатора zenrockd tendermint show-validator # проверить валидатора zenrockd query staking validator <valoper_address> zenrockd query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq # проверка информации по TX_HASH zenrockd query tx <TX_HASH> # параметры сети zenrockd q slashing params
# собрать реварды со всех валидаторов, которым делегировали (без комиссии) zenrockd tx distribution withdraw-all-rewards --from <name_wallet> --fees=500amf -y # собрать реварды c отдельного валидатора или реварды + комиссию со своего валидатора zenrockd tx distribution withdraw-rewards <valoper_address> --from <name_wallet> --fees=500amf --commission -y # заделегировать себе в стейк еще (так отправляется 1 монетa) zenrockd tx validation delegate zenvaloper1z2rrhln32vxdylu2273yllrclv884x8uptwh32 1000000urock --from=lesnik_utsa_wallet --gas auto --gas-adjustment 1.4 --gas-prices 27urock -y
# вывести список кошельков zenrockd keys list # показать ключ аккаунта zenrockd keys show <name_wallet> --bech acc # показать ключ валидатора zenrockd keys show <name_wallet> --bech val # показать ключ консенсуса zenrockd keys show <name_wallet> --bech cons # показать все поддерживаемые адреса zenrockd debug addr <wallet_addr> # показать приватный ключ zenrockd keys export <name_wallet> --unarmored-hex --unsafe zenrockd keys unsafe-export-eth-key <name_wallet> # запрос учетной записи zenrockd q auth account $(zenrockd keys show <name_wallet> -a) -o text # удалить кошелек zenrockd keys delete <name_wallet>
ГОВЕРНАНС (подробнее здесь)
# список proposals zenrockd q gov proposals # посмотреть результат голосования zenrockd q gov proposals --voter <ADDRESS> # проголосовать за предложение zenrockd tx gov vote 1 yes --from <name_wallet> --gas auto --gas-adjustment 1.4 --gas-prices 27urock -y
FOLDER=.zrchain # узнать свой peer PORTR=$(grep -A 3 "\[p2p\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+") && \ echo $(zenrockd tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR # узнать порт RPC echo -e "\033[0;32m$(grep -A 3 "\[rpc\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+")\033[0m" # проверка количества пиров PORT= curl -s http://localhost:$PORT/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr | split(":")[2])"' | wc -l # cписок моникеров подключенных пиров curl -s http://localhost:$PORT/net_info | jq '.result.peers[].node_info.moniker' # Проверка prevotes/precommits. Пригодится при обновах curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].prevotes_bit_array' && \ curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].precommits_bit_array' # check prevote of your validator curl -s localhost:$PORT/consensus_state -s | grep $(curl -s localhost:26657/status | jq -r .result.validator_info.address[:12])
systemctl stop zenrockd systemctl stop zenrock-sidecar systemctl disable zenrockd systemctl disable zenrock-sidecar rm /etc/systemd/system/zenrockd.service rm /etc/systemd/system/zenrock-sidecar.service systemctl daemon-reload cd $HOME rm -rf .zrchain zenrock zenrock-validators rm -rf $(which zenrockd) rm -rf $(which zenrock-sidecar)