Babylon
Babylon — это новый проект Cosmos, видение которого состоит в том, чтобы использовать безопасность биткойнов для повышения безопасности зон Cosmos и других цепочек PoS
- Network Chain ID:
bbn-test-2
- Denom:
ubbn
- Binary:
babylond
- Working directory:
.babylond
- API: https://t-babylon.api.utsa.tech/
- RPC: https://t-babylon.rpc.utsa.tech/
- Explorers:
- Telegram (ru):
- Docs: https://docs.babylonchain.io/
- Faucet: discord
# проверяем статус prevotes/precommits FOLDER=.babylond # узнать порт RPC echo -e "\033[0;32m$(grep -A 3 "\[rpc\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+")\033[0m" PORT=<ввести свой порт> # Проверка 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'
cd $HOME/babylon git pull git checkout make build $HOME/babylon/build/babylond version --long | grep -e version -e commit # # commit: # ПОСЛЕ ОСТАНОВКИ СЕТИ НА НУЖНОМ БЛОКЕ!!! systemctl stop babylond mv $HOME/babylon/build/babylond $(which babylond) babylond version --long | grep -e version -e commit # systemctl restart babylond && journalctl -u babylond -f -o cat
Подготовка сервера
# обновляем репозитории 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.20.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
Новая установка ноды
ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>
git clone https://github.com/babylonchain/babylon && cd babylon git checkout v0.7.2 make install babylond version --long | grep -e version -e commit # v0.7.2 # commit: fee9407953347b6f78c9dc63c3dd141d936f4f04
Инициализируем ноду, чтобы создать необходимые файлы конфигурации
babylond init UTSA_guide --chain-id bbn-test-2
#wget -O $HOME/.babylond/config/genesis.json "https://snapshots.kjnodes.com/babylon-testnet/genesis.json" wget https://github.com/babylonchain/networks/raw/main/bbn-test-2/genesis.tar.bz2 tar -xjf genesis.tar.bz2 && rm genesis.tar.bz2 mv genesis.json ~/.babylond/config/genesis.json # Проверим генезис sha256sum ~/.babylond/config/genesis.json # 091bd1c0ec67178faae923eb3b21020d6d4b5844de31bf314d7936168b3aa18c
Проверяем, что состояние валидатора на начальном этапе
cd && cat .babylond/data/priv_validator_state.json { "height": "0", "round": 0, "step": 0 } # если нет, то выполняем команду babylond tendermint unsafe-reset-all --home $HOME/.babylond
wget -O $HOME/.babylond/config/addrbook.json "https://share101.utsa.tech/babylon/addrbook.json"
Настраиваем конфигурацию ноды
В настоящее время валидаторы могут использовать только test
серверную часть keyring, потому что им необходимо автоматически отправлять транзакции, содержащие подписи BLS. В будущем Babylon будет поддерживать другие типы зашифрованных бэкэндов, предоставляемых Cosmos SDK для валидаторов
# правим конфиг, благодаря чему мы можем больше не использовать флаг chain-id для каждой команды CLI в client.toml babylond config chain-id bbn-test-2 # при необходимости настраиваем keyring-backend в client.toml # В настоящее время в babylon валидаторы могут использовать только keyring backend=test babylond config keyring-backend test # настраиваем минимальную цену за газ в app.toml sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.00001ubbn\"/;" ~/.babylond/config/app.toml # добавляем seeds/bpeers/peers в config.toml external_address=$(wget -qO- eth0.me) sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.babylond/config/config.toml peers="" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.babylond/config/config.toml #bpeers="" #sed -i.bak -e "s/^bootstrap-peers *=.*/bootstrap-peers = \"$bpeers\"/" $HOME/.babylond/config/config.toml seeds="8da45f9ff83b4f8dd45bbcb4f850999637fbfe3b@seed0.testnet.babylonchain.io:26656" sed -i.bak -e "s/^seeds =.*/seeds = \"$seeds\"/" $HOME/.babylond/config/config.toml # при необходимости увеличиваем количество входящих и исходящих пиров для подключения, за исключением постоянных пиров в config.toml # может помочь при падении ноды, но увеличивает нагрузку sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 50/g' $HOME/.babylond/config/config.toml sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 25/g' $HOME/.babylond/config/config.toml # настраиваем фильтрацию "плохих" peers sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.babylond/config/config.toml
# consensus sed -i -e "s/^timeout_commit *=.*/timeout_commit = \"10s\"/" $HOME/.babylond/config/config.toml #sed -i -e "s/^timeout_propose *=.*/timeout_propose = \"10s\"/" $HOME/.babylond/config/config.toml #sed -i -e "s/^create_empty_blocks_interval *=.*/create_empty_blocks_interval = \"10s\"/" $HOME/.babylond/config/config.toml #sed -i 's/create_empty_blocks = .*/create_empty_blocks = true/g' ~/.babylond/config/config.toml #sed -i 's/timeout_broadcast_tx_commit = ".*s"/timeout_broadcast_tx_commit = "10s"/g' ~/.babylond/config/config.tom
В app.toml в самом низу конфигурации nano $HOME/.babylond/config/app.toml
найдите раздел Babylon Bitcoin configuration в котором добавьте название вашего кошелька к параметру key-name = ""
(ОПЦИОНАЛЬНО) Настраиваем прунинг одной командой вapp.toml
pruning="custom" pruning_keep_recent="1000" pruning_interval="10" sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.babylond/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.babylond/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.babylond/config/app.toml
(ОПЦИОНАЛЬНО) Выкл индексацию вconfig.toml
indexer="null" sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.babylond/config/config.toml
(ОПЦИОНАЛЬНО) Вкл/выкл снэпшоты вapp.toml
# По умолчанию снэпшоты выключены "snapshot-interval=0" snapshot_interval=1000 sed -i.bak -e "s/^snapshot-interval *=.*/snapshot-interval = \"$snapshot_interval\"/" ~/.babylond/config/app.toml
(ОПЦИОНАЛЬНО) Смена портов #для 2 ноды
# config.toml sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:36658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:36657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:6061\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:36656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":36660\"%" $HOME/.babylond/config/config.toml # app.toml sed -i.bak -e "s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:9190\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:9191\"%; s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:1327\"%" $HOME/.babylond/config/app.toml # client.toml sed -i.bak -e "s%^node = \"tcp://localhost:26657\"%node = \"tcp://localhost:36657\"%" $HOME/.babylond/config/client.toml external_address=$(wget -qO- eth0.me) sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:36656\"/" $HOME/.babylond/config/config.toml
Подробнее о смене портов здесь
(ОПЦИОНАЛЬНО) State Sync
# при необходимости скачиваем wasm curl -L https://share101.utsa.tech/babylon/wasm-babylon.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.babylond --strip-components 2
# добавляем пир peers="[email protected]:61456" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.babylond/config/config.toml
SNAP_RPC=https://t-babylon.rpc.utsa.tech:443 LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \ 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/.babylond/config/config.toml
systemctl restart babylond && journalctl -u babylond -f -o cat
Важно - для разных блокчейнов нужно разное количество RAM для успешного старта со State sync
systemctl stop babylond babylond tendermint unsafe-reset-all --home $HOME/.babylond --keep-addr-book
(ОПЦИОНАЛЬНО) Snapshot
systemctl stop babylond cp $HOME/.babylond/data/priv_validator_state.json $HOME/.babylond/priv_validator_state.json.backup babylond tendermint unsafe-reset-all --home $HOME/.babylond --keep-addr-book # download wasm if necessary #curl -L https://share101.utsa.tech/okp4/wasm-okp4.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.babylond --strip-components 2 # download snapshot (data) #curl -L https://share101.utsa.tech/babylon/snap-babylon.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.babylond --strip-components 2 mv $HOME/.babylond/priv_validator_state.json.backup $HOME/.babylond/data/priv_validator_state.json systemctl restart babylond && journalctl -u babylond -f -o cat
tee /etc/systemd/system/babylond.service > /dev/null <<EOF [Unit] Description=babylond After=network-online.target [Service] User=$USER ExecStart=$(which babylond) start Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
systemctl daemon-reload systemctl enable babylond systemctl restart babylond && journalctl -u babylond -f -o cat
Если после старта нода долго не может подцепиться к пирам, то ищем новые пиры или просим addrbook.json в дискорд
# стопаем ноду, удаляем адресную книгу и сбрасываем данные systemctl stop babylond rm $HOME/.babylond/config/addrbook.json babylond tendermint unsafe-reset-all --home $HOME/.babylond # перезагружаем ноду systemctl restart babylond && journalctl -u babylond -f -o cat
Создаем или восстанавливаем кошелек и сохраняем вывод
# создать кошелек babylond keys add <name_wallet> --keyring-backend test # восстановить кошелек (после команды вставить seed) babylond keys add <name_wallet> --recover --keyring-backend test # восстановить кошелек для EVM сетей #babylond keys add <name_wallet> --recover --coin-type 118 --algo secp256k1
Ожидается, что валидаторы будут отправлять подпись BLS в конце каждой эпохи. Для этого у валидатора должна быть пара ключей BLS для подписи информации
babylond create-bls-key $(babylond keys show <name_wallet> -a)
Эта команда создаст ключ BLS и добавит его в файл priv_validator_key.json
Это тот же файл, в котором хранится закрытый ключ, который валидатор использует для подписи блоков. Пожалуйста, убедитесь, что этот файл защищен должным образом!
2. Добавляем название кошелька в app.toml
В самом низу конфигурации nano $HOME/.babylond/config/app.toml
найдите раздел Babylon Bitcoin configuration в котором добавьте название вашего кошелька к параметру key-name = ""
sed -i -e "s|^key-name *=.*|key-name = \"<name_wallet>\"|" $HOME/.babylond/config/app.toml
3. Перезагружаем ноду, чтобы ключ загрузился в память
systemctl restart babylond && journalctl -u babylond -f -o cat
babylond tx checkpointing create-validator \ --chain-id bbn-test-2 \ --commission-rate 0.05 \ --commission-max-rate 0.2 \ --commission-max-change-rate 0.1 \ --min-self-delegation "1000000" \ --amount 1000000ubbn \ --pubkey $(babylond tendermint show-validator) \ --moniker "<name_moniker>" \ --from <name_wallet> \ --fees 2ubbn
Note: In order to become an active validator, you need to have moreubbn
tokens bonded than the last validator ordered by the tokens bonded (or the validator set to not be full) as well as have at least10000000ubbn
bonded.
В Babylon стать валидатором можно только после окончания эпохи. Для тестовой сети эпоха длится около 30 минут
Не забываем сохранить priv_validator_key.json !!!
Подробнее о создании/редактировании валидатора можно почитать здесь
Полезные команды
Для добавления лого в mintscan (ТОЛЬКО ДЛЯ MINTSCAN):
- форк https://github.com/cosmostation/chainlist
- в папке Moniker находим название проекта
- через add file/upload file добавляем свою аватарку. название файла обязательно должно быть валопер.png . и только png
- PR
# проверить блоки babylond status 2>&1 | jq ."SyncInfo"."latest_block_height" # проверить логи journalctl -u babylond -f -o cat # проверить статус curl localhost:26657/status # проверить баланс babylond q bank balances <address> # проверить pubkey валидатора babylond tendermint show-validator # проверить валидатора babylond query staking validator <valoper_address> babylond query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq # проверка информации по TX_HASH babylond query tx <TX_HASH> # параметры сети babylond q staking params babylond q slashing params # проверить сколько блоков пропущено валидатором и с какого блока актив babylond q slashing signing-info $(babylond tendermint show-validator) # узнать транзакцию создания валидатора (заменить свой valoper_address) babylond query txs --events='create_validator.validator=<your_valoper_address>' -o=json | jq .txs[0].txhash -r # просмотр активного сета babylond q staking validators -o json --limit=1000 \ | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \ | jq -r '.tokens + " - " + .description.moniker' \ | sort -gr | nl # просмотр неактивного сета babylond q staking validators -o json --limit=1000 \ | jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \ | jq -r '.tokens + " - " + .description.moniker' \ | sort -gr | nl
# собрать реварды со всех валидаторов, которым делегировали (без комиссии) babylond tx distribution withdraw-all-rewards --from <name_wallet> --fees 2ubbn -y # собрать реварды c отдельного валидатора или реварды + комиссию со своего валидатора babylond tx distribution withdraw-rewards <valoper_address> --from <name_wallet> --fees 2ubbn --commission -y # заделегировать себе в стейк еще (так отправляется 1 монетa) babylond tx epoching delegate <valoper_address> 1000000ubbn --from <name_wallet> --fees 2ubbn -y # ределегирование на другого валидатора babylond tx epoching redelegate <src-validator-addr> <dst-validator-addr> 1000000ubbn --from <name_wallet> --fees 2ubbn -y # unbond babylond tx epoching unbond <addr_valoper> 1000000ubbn --from <name_wallet> --fees 2ubbn -y # отправить монеты на другой адрес babylond tx bank send <name_wallet> <address> 1000000ubbn --fees 2ubbn -y # выбраться из тюрьмы babylond tx slashing unjail --from <name_wallet> --fees 2ubbn -y
! Если транзакции не отправляются с ошибкой account sequence mismatch, expected 18, got 17: incorrect account sequence
, то добавьте в команду ключ -s 18
(номер замените на тот, который ждет sequence)
# вывести список кошельков babylond keys list # показать ключ аккаунта babylond keys show <name_wallet> --bech acc # показать ключ валидатора babylond keys show <name_wallet> --bech val # показать ключ консенсуса babylond keys show <name_wallet> --bech cons # показать все поддерживаемые адреса babylond debug addr <wallet_addr> # показать приватный ключ babylond keys export <name_wallet> --unarmored-hex --unsafe # запрос учетной записи babylond q auth account $(babylond keys show <name_wallet> -a) -o text # удалить кошелек babylond keys delete <name_wallet>
systemctl stop babylond && \ systemctl disable babylond && \ rm /etc/systemd/system/babylond.service && \ systemctl daemon-reload && \ cd $HOME && \ rm -rf .babylond babylon && \ rm -rf $(which babylond)
ГОВЕРНАНС (подробнее здесь)
# список proposals babylond q gov proposals # посмотреть результат голосования babylond q gov proposals --voter <ADDRESS> # проголосовать за предложение babylond tx gov vote 1 yes --from <name_wallet> --fees 555ubbn # внести депозит в предложение babylond tx gov deposit 1 1000000ubbn --from <name_wallet> --fees 555ubbn # создать предложение babylond tx gov submit-proposal --title="Randomly reward" --description="Reward 10 testnet participants who completed more than 3 tasks" --type="Text" --deposit="11000000grain" --from=<name_wallet> --fees 500ubbn
FOLDER=.babylond # узнать свой peer PORTR=$(grep -A 3 "\[p2p\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+") && \ echo $(babylond tendermint show-node-id)@$(curl ifconfig.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])