Celestia: как установить ноду (Validator Node). Подробный гайд
Требования: 4 CPU, 8 RAM, 250 GB SSD
Аренда сервера
Перед установкой ноды нам надо арендовать сервер, я пользуюсь услугами сервиса Hetzner.
Если придерживаться требований к серверу из официальной документации Celestia, аренда получается довольно затратной. Но мы можем использовать менее мощное железо (на свой страх и риск) в проектах, где еще нет оплачиваемой стадии тестнета.
∎ Регистрируемся на Hetzner, если у вас еще нет аккаунта. После этого переходим сюда и нажимаем NEW PROJECT и придумываем имя:
∎ Затем нажимаем на созданный проект и на открывшейся странице нажимаем ADD SERVER:
∎ Выбираем сервер и нажимаем CREATE & BUY NOW:
∎ После этого вам на почту придет пароль от сервера:
∎ Переходим в терминал, пишем команду для входа на сервер, где вставляем IP адрес своего арендованного сервера:
ssh root@IP_АДРЕС_СЕРВЕРА
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Отвечаем "yes", а потом попросят ввести пароль, который прислали на почту, два раза. После этого надо будет ввести новый пароль, который вы будете использовать при входе на сервер. Его попросят ввести тоже два раза.
Подготовка сервера
∎ Теперь, когда сервер арендован, надо обновить репозитории:
sudo apt update && sudo apt upgrade -y
∎ И установить необходимые новые пакеты:
sudo apt install curl tar wget clang pkg-config libssl-dev jq build-essential bsdmainutils git make ncdu -y
cd $HOME ver="1.18.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 (в выводе должно быть go version go1.18.3 linux/amd64):
go version
Установка ноды
cd $HOME rm -rf celestia-app git clone https://github.com/celestiaorg/celestia-app.git cd celestia-app git checkout v0.6.0 make install
∎ Проверяем версию (должна быть 0.6.0):
celestia-appd version
cd $HOME rm -rf networks git clone https://github.com/celestiaorg/networks
∎ Создаём переменные. Вставляем свои данные вместо ИМЯ_НОДЫ и ИМЯ_КОШЕЛЬКА в кавычках (в поле CHAIN ничего не меняем):
NODE_NAME="ИМЯ_НОДЫ" WALLET_NAME="ИМЯ_КОШЕЛЬКА" CHAIN="mamaki"
∎ Добавляем переменные в баш профиль (ничего не меняем):
echo 'export NODE_NAME='${NODE_NAME} >> $HOME/.bash_profile echo 'export WALLET_NAME='${WALLET_NAME} >> $HOME/.bash_profile echo 'export CHAIN='${CHAIN} >> $HOME/.bash_profile source $HOME/.bash_profile
celestia-appd init $NODE_NAME --chain-id $CHAIN
cp $HOME/networks/mamaki/genesis.json $HOME/.celestia-app/config
Настройка сервера
∎ Настраиваем режим валидатора:
sed -i 's/mode = \"full\"/mode = \"validator\"/g' $HOME/.celestia-app/config/config.toml
PRUNING="custom" PRUNING_KEEP_RECENT="100" PRUNING_INTERVAL="10" sed -i -e "s/^pruning *=.*/pruning = \"$PRUNING\"/" $HOME/.celestia-app/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \ \"$PRUNING_KEEP_RECENT\"/" $HOME/.celestia-app/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \ \"$PRUNING_INTERVAL\"/" $HOME/.celestia-app/config/app.toml
BOOTSTRAP_PEERS=$(curl -sL https://raw.githubusercontent.com/celestiaorg/networks/master/mamaki/bootstrap-peers.txt | tr -d '\n') echo $BOOTSTRAP_PEERS sed -i.bak -e "s/^bootstrap-peers *=.*/bootstrap-peers = \"$BOOTSTRAP_PEERS\"/" $HOME/.celestia-app/config/config.toml
∎ Устанавливаем параметры конфигурации консенсуса:
sed -i 's/timeout-commit = ".*/timeout-commit = "25s"/g' $HOME/.celestia-app/config/config.toml sed -i 's/peer-gossip-sleep-duration *=.*/peer-gossip-sleep-duration = "2ms"/g' $HOME/.celestia-app/config/config.toml
∎ Устанавливаем параметры конфигурации P2P:
max_num_inbound_peers=40 max_num_outbound_peers=10 max_connections=50 sed -i -e "s/^use-legacy *=.*/use-legacy = false/;\ s/^max-num-inbound-peers *=.*/max-num-inbound-peers = $max_num_inbound_peers/;\ s/^max-num-outbound-peers *=.*/max-num-outbound-peers = $max_num_outbound_peers/;\ s/^max-connections *=.*/max-connections = $max_connections/" $HOME/.celestia-app/config/config.toml
∎ Сбрасываем состояние валидатора:
celestia-appd tendermint unsafe-reset-all --home $HOME/.celestia-app
celestia-appd config keyring-backend test
tee $HOME/celestia-appd.service > /dev/null <<EOF [Unit] Description=celestia-appd Cosmos daemon After=network-online.target [Service] User=$USER ExecStart=$(which celestia-appd) start Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
sudo mv $HOME/celestia-appd.service /etc/systemd/system/
sudo systemctl enable celestia-appd sudo systemctl daemon-reload sudo systemctl restart celestia-appd
journalctl -u celestia-appd -f -o cat
∎ Проверяем статус синхронизации (если в строке catching up стоит false, то нода синхронизирована):
curl -s localhost:26657/status
Если нода долго не синхронизируется, то можно использовать снепшот.
sudo systemctl stop celestia-appd
cd $HOME rm -rf ~/.celestia-app/data mkdir -p ~/.celestia-app/data
Далее копируйте всё одной командой:
SNAP_NAME=$(curl -s https://snaps.qubelabs.io/celestia/ | \
egrep -o ">mamaki.*tar" | tr -d ">")
wget -O - https://snaps.qubelabs.io/celestia/${SNAP_NAME} | tar xf - -C ~/.celestia-app/data/
∎ Перезапускаем сервис и смотрим логи:
sudo systemctl restart celestia-appd && journalctl -u celestia-appd -f -o cat
Создание валидатора
После того как нода синхронизировалась, можно приступать к следующим шагам.
∎ Создаём кошелёк, если устанавливаем эту ноду впервые:
celestia-appd keys add $WALLET_NAME
Сохраняем мнемоник в надёжном месте! Также сохраните адрес кошелька, он нам пригодится (celestia1...).
∎ Если кошелёк уже есть, то восстанавливаем его и после команды вставляем мнемоник от кошелька:
celestia-appd keys add $WALLET_NAME --recover
∎ Создаём переменную с адресом валидатора (ничего не меняем):
WALLET_ADDRESS=$(celestia-appd keys show $WALLET_NAME -a) VALOPER=$(celestia-appd keys show $WALLET_NAME --bech val -a) echo 'export WALLET_ADDRESS='${WALLET_ADDRESS} >> $HOME/.bash_profile echo 'export VALOPER='${VALOPER} >> $HOME/.bash_profile source $HOME/.bash_profile
∎ Запрашиваем токены в кране. Переходим в Discord, верифицируемся и переходим в ветку mamaki-faucet, вставляем свой адрес celestia1... :
$request celestia1...
Будьте внимательны с вводом своего адреса в кране, так как монеты можно запрашивать 1 раз в неделю!
celestia-appd q bank balances $WALLET_ADDRESS
∎ Если монеты поступили, то создаём валидатора:
celestia-appd tx staking create-validator \ --amount=9000000utia \ --pubkey=$(celestia-appd tendermint show-validator) \ --moniker=$WALLET_NAME \ --chain-id=$CHAIN \ --commission-rate=0.1 \ --commission-max-rate=0.2 \ --commission-max-change-rate=0.01 \ --min-self-delegation="1" \ --from=$WALLET_ADDRESS
∎ Проверяем статус валидатора:
celestia-appd q staking validator $CELESTIA_VALOPER
Полезные команды:
journalctl -u celestia-appd -f -o cat
celestia-appd tx staking delegate $VALOPER 1000000utia --from $WALLET_ADDRESS --chain-id $CHAIN
∎ Посмотреть список активных валидаторов:
celestia-appd q staking validators --limit=3000 -oj \ | jq -r '.validators[] | select(.status=="BOND_STATUS_BONDED") | [(.tokens|tonumber / pow(10;6)), .description.moniker] | @csv' \ | column -t -s"," | tr -d '"'| sort -k1 -n -r | nl
Спасибо за внимание!
Ссылка на TG канал: https://t.me/cryptonik_space