Перенос Cosmos ноды на примере Crowd Control

В этой статье мы разберем процесс переноса Cosmos ноды. В качестве примера будем использовать ноду Crowd Control. Гайд по установке смотри здесь.

Минимальные системные требования:

  • CPU - Core x2
  • RAM - 4Gb;
  • Storage - 100Gb.

Explorer: 1 2

Network Chain ID: Testnet3

Хостинги с беспроблемной оплатой в РФ, мои рефералки:

Содержание:

1. Процесс переноса ноды

Для переноса ноды на новый сервер, нам потребуется скачать файл priv_validator_key.json со своего старого сервера, на котором установлена нода. Пример пути к данному файлу выглядит так:

$HOME/.<PROJECT_NAME>/config/priv_validator_key.json

В нашем случае путь будет выглядеть так:

$HOME/.Cardchain/config/priv_validator_key.json
Просто нажмите правой кнопкой на priv_validator_key.json и скачивайте к себе на комп
Просто нажмите правой кнопкой на priv_validator_key.json и скачивайте к себе на комп

После скачивания данного файла, переходим на новый сервер и приступаем к установке ноды. Создавать новый кошелёк - не нужно, мы его восстановим, используя сид фразу от старого кошелька (которую необходимо обязательно сохранять при первичной установке), создавать валидатора тоже не нужно.

2. Начинаем установку

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

sudo apt update && sudo apt upgrade -y

Устанавливаем набор утилит:

sudo apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y

Устанавливаем Go одной командой:

ver="1.18.1" && \ 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/DecentralCardGame/Testnet wget https://github.com/DecentralCardGame/Cardchain/releases/download/v0.81/Cardchain_latest_linux_amd64.tar.gz tar xzf Cardchain_latest_linux_amd64.tar.gz chmod +x Cardchaind mv $HOME/Cardchaind /usr/local/bin sudo rm Cardchain_latest_linux_amd64.tar.gz

Проверяем версию:

Cardchaind version --long | head

Вывод должен быть таким:

version: 0.81-5450b07d commit: 5450b07df2b55448bac743d34ed0ba4537a6d401

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

Cardchaind init <name_moniker> --chain-id Testnet3

- вместо <name_moniker> напишите свое название своего валидатора без <скобок>.

Скачиваем Genesis:

cp $HOME/Testnet/genesis.json $HOME/.Cardchain/config/genesis.json

Скачиваем адресбук (дополнительные пиры сети):

wget -O $HOME/.Cardchain/config/addrbook.json "https://raw.githubusercontent.com/obajay/nodes-Guides/main/Crowd%20Control/addrbook.json"

Задаем минимальное значение газа:

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0ubpf\"/;" ~/.Cardchain/config/app.toml

Добавляем сиды и пиры для того чтобы нода могла подключиться к сети:

external_address=$(wget -qO- eth0.me) sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.Cardchain/config/config.toml peers="56d11635447fa77163f31119945e731c55e256a4@45.136.28.158:26658" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.Cardchain/config/config.toml seeds="" sed -i.bak -e "s/^seeds =.*/seeds = \"$seeds\"/" $HOME/.Cardchain/config/config.toml

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

pruning="custom" && \ pruning_keep_recent="100" && \ pruning_keep_every="0" && \ pruning_interval="10" && \ sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.Cardchain/config/app.toml && \ sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.Cardchain/config/app.toml && \ sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.Cardchain/config/app.toml && \ sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.Cardchain/config/app.toml

Выключаем индексер (по желанию) для экономии места:

ndexer="null" && \ sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.Cardchain/config/config.toml

Создаём сервисный файл

sudo tee <<EOF >/dev/null /etc/systemd/system/Cardchaind.service [Unit] Description=Cardchain Daemon After=network-online.target [Service] User=$USER ExecStart=$(which Cardchaind) start Restart=always RestartSec=10 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF

3. Запуск ноды, синхронизируемся (быстрый вариант)

SNAP_RPC="http://crowd.rpc.t.stavr.tech:21207" PEERS="0aa2875c176ffda48fe9cd4569d527e629fd868d@crowd.peer.stavr.tech:21206" sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.Cardchain/config/config.toml 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\"|" $HOME/.Cardchain/config/config.toml; \ Cardchaind unsafe-reset-all --home $HOME/.Cardchain wget -O $HOME/.Cardchain/config/addrbook.json "https://raw.githubusercontent.com/obajay/nodes-Guides/main/Crowd%20Control/addrbook.json" sudo systemctl restart Cardchaind && journalctl -u Cardchaind -f -o cat

Посмотреть логи:

sudo journalctl -u Cardchaind -f -o cat

Посмотреть результат синхронизации:

curl -s localhost:26657/status

- если false - значит все готово.

4. После синхронизации восстанавливаем кошелек

Cardchaind keys add <walletname> --recover

- пишем название старого кошелька вместо <скобок>, восстанавливаем при помощи сид фразы и прописываем старый пароль для удобства.

5. Перенос валидатора

На данном этапе нам нужно будет остановить ноды на обоих серверах, что бы избежать одновременной работы 2 валидаторов. Стараемся выполнять действия описанные ниже как можно быстрее, что бы не попасть в тюрьму

Останавливаем ноду на обоих серверах:

sudo systemctl stop Cardchaind

Удаляем priv_validator_key.json на новом сервере:

rm -rf /root/.Cardchain/config/priv_validator_key.json

После чего переносим скачанный ранее priv_validator_key.json на новый сервер, в соответствующую директорию config:

Просто перетащите с компа priv_validator_key.json и закиньте в папку $HOME/.Cardchain/config/
Просто перетащите с компа priv_validator_key.json и закиньте в папку $HOME/.Cardchain/config/

6. Запуск ноды:

sudo systemctl restart Cardchaind && sudo journalctl -u Cardchaind -f -o cat

Проверяем работоспособность валидатора в эксплорере. Обратите внимание на обработку блоков и попадание в тюрьму,

Проверить валидатора

Cardchaind query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq

- вместо <name_moniker> - указать свое имя валидатора без <скобок>

Команда выхода из тюрьмы:

Cardchaind tx slashing unjail --from <name_wallet> --fees 500ubpf -y

Ссылки:

55
7 комментариев

ничеси, что на пдфе есть. такое мы знаем, такое мы валидируем))

2
Ответить

меня, честно говоря, заглавная "C" жутко бесила, я поэтому бинарник переименовал

1
Ответить

ого, не думал что здесь когда ни будь появится комментарий) а ты в саму игру играл уже?

Ответить