Ноды
September 11, 2022

Запуск валидатора Kichain в mainnet

Гайд по запуску валидатора в майнете на примере Kichain network.

Установим необходимые пакеты на сервер:

sudo apt install wget chrony git build-essential make jq mc curl -y

Откройте необходимые tcp порты в firewall 26656.

Установите GO:

cd $HOME
ver="1.18.5"
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

Установим бинарник ki network, на момент написания актуальный Mainnet-3.0.0:

rm -rf $HOME/ki-tools
git clone https://github.com/KiFoundation/ki-tools.git
cd ki-tools
git checkout -b v3.0.0 tags/3.0.0
make install
kid version

Создадим переменные для удобства:

MONIKER=ваш моникер
WALLET=кошелек
CHAIN=kichain-2
echo "export MONIKER="${MONIKER}"" >> $HOME/.bash_profile
echo "export WALLET="${WALLET}"" >> $HOME/.bash_profile
echo "export CHAIN="${CHAIN}"" >> $HOME/.bash_profile
source $HOME/.bash_profile

Инициализируем ноду:

cd
kid init $MONIKER --chain-id $CHAIN --home $HOME/.kid/
kid tendermint unsafe-reset-all --home $HOME/.kid

Скачаем генезис:

curl https://github.com/KiFoundation/ki-networks/blob/v0.1/Mainnet/kichain-2/genesis.json?raw=true > $HOME/.kid/config/genesis.json

Создадим или восстановим кошелек (для восстановления добавьте флаг --recover):

kid keys add $WALLET --keyring-backend file

Измените seeds, peers на актуальные:

Сиды
Пиры

seeds="[email protected]:26656"
peers="[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656"

А теперь замените значения конфигурации автовставкой:

sed -i.bak -e "s/^seeds *=.*/seeds = \"$seeds\"/; s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" ~/.kid/config/config.toml

Изменим внешний IP адрес:

external_address=`curl ifconfig.me`
sed -i.bak -e "s/^external_address = \"\"/external_address = \"$external_address:26656\"/" $HOME/.kid/config/config.toml

Настроим прунинг для экономии места (я взял настройки для снапшота полькачу) и gas:

pruning="custom" && \
pruning_keep_recent="100" && \
pruning_keep_every="0" && \
pruning_interval="10" && \
indexer="null" && \
minimum_gas_prices="0.025uxki" && \
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.kid/config/app.toml && \
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.kid/config/app.toml && \
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.kid/config/app.toml && \
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.kid/config/app.toml
sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"$minimum_gas_prices\"/" $HOME/.kid/config/app.toml
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.kid/config/config.toml

Создадим службу для запуска:

sudo tee /etc/systemd/system/kichaind.service > /dev/null <<EOF
[Unit]
Description=KiChain Node
After=network-online.target

[Service]
User=$USER
ExecStart=`which kid` start
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

И активируем:

sudo systemctl daemon-reload
sudo systemctl enable kichaind

Стартуем со снапшота

Установим нужные пакеты:

sudo apt install snapd -y
sudo snap install lz4

Внимание, полный сброс вашего узла!

systemctl stop kichaind
kid tendermint unsafe-reset-all --home $HOME/.kid
rm -r ~/.kid/wasm

А теперь загружаем снапшот от команды polkachu и стартуем (вам нужно обновить ссылку на последний актуальный снапшот самостоятельно):

wget -O kichain_11412789.tar.lz4 https://snapshots1.polkachu.com/snapshots/kichain/kichain_11412789.tar.lz4
lz4 -c -d kichain_*.tar.lz4  | tar -x -C $HOME/.kid
rm -v kichain_*.tar.lz4
systemctl restart kichaind
sudo journalctl -u kichaind -f

Дождитесь полной синхронизации узла ("catching_up": false):

curl localhost:26657/status

А теперь можно создать валидатора:

kid tx staking create-validator \
            --commission-max-change-rate=0.1 \
            --commission-max-rate=0.1 \
            --commission-rate=0.1 \
            --min-self-delegation=1 \
            --amount=1000000uxki \
            --pubkey `kid tendermint show-validator --home $HOME/.kid/` \
            --moniker=$MONIKER \
            --chain-id=$CHAIN \
            --gas-prices=0.025uxki \
            --from=$WALLET \
            --home $HOME/.kid/

Миграция ноды Kichain на Cosmovisor

Установим сам cosmovisor:

go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/[email protected]

Создадим каталоги и скопируем текущий бинарник:

mkdir -p $HOME/.kid/cosmovisor/genesis/bin $HOME/.kid/cosmovisor/upgrades
cp $(which kid) $HOME/.kid/cosmovisor/genesis/bin/

Остановите службу ноды:

sudo systemctl stop kichaind

Бэкапим старый сервисник, чтобы быстро откатиться, в случае неудачи.

cp /etc/systemd/system/kichaind.service /home

Создаем новую службу (я отключил автобэкапы и автоматическую загрузку бинарников):

sudo tee /etc/systemd/system/kichaind.service > /dev/null <<EOF  
[Unit]
Description=Kichain node
After=network.target

[Service]
User=$USER
Environment="DAEMON_NAME=kid"
Environment="DAEMON_HOME=$HOME/.kid"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="UNSAFE_SKIP_BACKUP=true"
ExecStart=$(which cosmovisor) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

Стартуем:

sudo systemctl daemon-reload
sudo systemctl enable kichaind
sudo systemctl restart kichaind
journalctl -f -u kichaind

Если не поехало, подкиньте космовизору бинарник:

mkdir -p $HOME/.kid/cosmovisor/upgrades/v3/bin/
wget -qO $HOME/.kid/cosmovisor/upgrades/v3/bin/kid https://github.com/KiFoundation/ki-tools/releases/download/3.0.0/kid-mainnet-3.0.0-linux-amd64
chmod +x $HOME/.kid/cosmovisor/upgrades/v3/bin/kid

Полезные команды

Проверка баланса:

kid query bank balances адрес_кошелька

Отправка коинов на другой кошелек:

kid tx bank send $WALLET ADDRESS_TO 1000000uxki

Посмотреть адрес валидатора:

kid keys show $WALLET --bech val

Делегирование:

kid tx staking delegate kivaloper_адрес_валидатора 1000000uxki --chain-id $CHAIN --from $WALLET --fees 5000uxki

Посмотреть реварды:

kid query distribution commission kivaloper_адрес_валидатора

Снять реварды:

kid tx distribution withdraw-rewards kivaloper_адрес_валидатора --from адрес_кошелька  --chain-id $CHAIN --fees=5000uxki --commission

Выйти из тюрьмы:

kid tx slashing unjail --from $WALLET --chain-id=$CHAIN --gas=auto --fees=5000uxki

@starnodes_ru - наш канал в Telegram с новостями и гайдами по тестнетам.