May 16, 2023

Установка Cosmos Hub + Kyve Protocol Node

Всем привет в эфире MMS !

Сегодня мы расскажем вам о том, как установить RPC узел CosmosHub и Protocol узел проекта Kyve.

Этот гайд будет актуален тем участникам оплачиваемого тестнета, которые заняли первые 2500 мест в лидерборде, поскольку в свете последних событий, команда Kyve решила раздать этим участникам делегацию, если они установят своего валидатора в сети Kaon, заполнить форму можно тут, но желательно после установки валидатора, приступим.

Системные требования:

Для RPC CosmosHub:

2 CPU cores
1.5 TB NVME of disk storage (or more)
8 GB of memory (RAM)

Для Protocol node:

1 or more physical CPU core
8 GB of disk storage
2 GB of memory (RAM)

Установка RPC CosmosHub

Начнем мы с установки RPC, синхронизироваться нода будет около ~14 дней, но нам главное начать синхронизировать первые блоки, остальные по началу, не сильно важны.
Генезисная высота CosmosHub - 5200791

Обновляем сервер

sudo apt update && sudo apt upgrade -y

Устанавливаем доп. пакеты

sudo apt install make clang git pkg-config libssl-dev build-essential git gcc chrony curl jq ncdu bsdmainutils htop net-tools lsof fail2ban wget -y

Устанавливаем go

В данном случае установка go опциональна, поскольку бинарники мы не будем билдить, лишь качать, но если вы захотите сбилдить определенную вам версию, оставим это тут

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

Устанавливаем переменные и экспортируем их в .bash_profile

GAIA_CHAIN="cosmoshub-4"
GAIA_MONIKER="your_name"

echo 'export GAIA_CHAIN='${GAIA_CHAIN} >> $HOME/.bash_profile
echo 'export GAIA_MONIKER='${GAIA_MONIKER} >> $HOME/.bash_profile
source $HOME/.bash_profile

Качаем бинарный файл версии 4.2.1 и перемещаем его

cd $HOME/
wget https://github.com/cosmos/gaia/releases/download/v4.2.1/gaiad-v4.2.1-linux-amd64
mv gaiad-v4.2.1-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

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

gaiad init $GAIA_MONIKER --chain-id $GAIA_CHAIN

Качаем и перемещаем genesis

wget https://raw.githubusercontent.com/cosmos/mainnet/master/genesis/genesis.cosmoshub-4.json.gz
gzip -d genesis.cosmoshub-4.json.gz
mv genesis.cosmoshub-4.json ~/.gaia/config/genesis.json

Качаем и перемещаем addrbook

wget https://dl2.quicksync.io/json/addrbook.cosmos.json
mv addrbook.cosmos.json ~/.gaia/config/addrbook.json
chmod 666 ~/.gaia/config/addrbook.json

Выключаем индексацию и ставим прунинг с настройкой "everything"

pruning="everything"
indexer="null"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.gaia/config/app.toml
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.gaia/config/config.toml

Добавляем пиры в config.toml еще больше пиров можно найти тут

PEERS=6a2b961ac6020dd4ba011396469f1c78324e039b@18.189.192.156:26656,c1683c75d41c6b2863e52a569666408868469b1c@170.106.64.212:26656,89757803f40da51678451735445ad40d5b15e059@169.155.168.135:26656,2441e90fcb341fcd5bebec15b54e346cdca64a9b@135.148.123.8:14956,37dfe1ec33e9f88f378a61a32462d57d2baa5e74@65.108.99.140:26656,58f1815e3bd03bd93586f1e0287556c035d5ad14@142.132.146.164:15603
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.gaia/config/config.toml

Задаем минимальную цену на газ

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.01uatom\"/;" ~/.gaia/config/app.toml

Открываем порт rpc в config.toml

Позже добавлю автоматический вариант, пока что руками

nano $HOME/.gaia/config/config.toml

Ищем в конфиге блок RPC Server Configuration Options

Под ним будет находится адрес - это и есть порт RPC

laddr = "tcp://127.0.0.1:26657"

Меняем руками Ip 127.0.0.1 на 0.0.0.0, сохраняем и выходим, теперь наш порт RPC открыт

laddr = "tcp://0.0.0.0:26657"

Делаем сервис файл

tee /etc/systemd/system/gaiad.service > /dev/null <<EOF
[Unit]
Description=CosmosHub RPC
After=network-online.target

[Service]
User=$USER
ExecStart=$(which gaiad) start --x-crisis-skip-assert-invariants
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

Запускаем и смотрим логи

Стартовать может минут 5 и более, еще столько же искать активных пиров, не стоит переживать, все запустится

sudo systemctl daemon-reload && \
sudo systemctl enable gaiad && \
sudo systemctl restart gaiad && \
sudo journalctl -u gaiad -f -o cat

Далее приведем бинарники и высоту их смены
v5.0.0
height = 6910000

wget https://github.com/cosmos/gaia/releases/download/v5.0.0/gaiad-v5.0.0-linux-amd64
mv gaiad-v5.0.0-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

v6.0.0
height = 8695000

wget https://github.com/cosmos/gaia/releases/download/v6.0.0/gaiad-v6.0.0-linux-amd64
mv gaiad-v6.0.0-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

v7.0.0
height = 10085397

wget https://github.com/cosmos/gaia/releases/download/v7.0.0/gaiad-v7.0.0-linux-amd64
mv gaiad-v7.0.0-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

v8.0.0
height = 14099412

wget https://github.com/cosmos/gaia/releases/download/v8.0.0/gaiad-v8.0.0-linux-amd64
mv gaiad-v8.0.0-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

v9.0.0
height = 14470501

wget https://github.com/cosmos/gaia/releases/download/v9.0.0/gaiad-v9.0.0-linux-amd64
mv gaiad-v9.0.0-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

v9.1.0
height = 15213800
ВНИМАНИЕ, не доходя до этой высоты необходимо самостоятельно выставить в конфиге app.toml настройку halt-height = 15213800, на этой высоте нода самостоятельно остановиться, после чего как обычно обновляем, далее убираем настройку на дефолт halt-height = 0 и рестартим ноду!

wget https://github.com/cosmos/gaia/releases/download/v9.1.0/gaiad-v9.1.0-linux-amd64
mv gaiad-v9.1.0-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

v10.0.1
height=15816200
Содержит IBC Huckleberry fix

wget https://github.com/cosmos/gaia/releases/download/v10.0.1/gaiad-v10.0.1-linux-amd64
mv gaiad-v10.0.1-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

v11.0.0

height=16596000

wget https://github.com/cosmos/gaia/releases/download/v11.0.0/gaiad-v11.0.0-linux-amd64
mv gaiad-v11.0.0-linux-amd64 gaiad
chmod +x gaiad
mv gaiad /usr/local/bin

Protocol node

Перейдем к тому, для чего мы и ставили свою RPC CosmosHub-а - Protocol Node

Качаем бинарник

cd $HOME/
wget https://github.com/KYVENetwork/kyvejs/releases/download/%40kyve%2Fkysor%401.0.0-beta.20/kysor-linux-x64.zip && \
unzip kysor-linux-x64.zip && \
mv kysor-linux-x64 kysor && \
chmod +x kysor && \
mv kysor /usr/bin/kysor && \
rm kysor-linux-x64.zip

Инициализируем ноду для сети KAON

kysor init -d \
--chain-id kaon-1 \
--rpc "https://rpc-eu-1.kaon.kyve.network" \
--rest "https://api-eu-1.kaon.kyve.network"

Перед тем, как мы сгенерируем нужный нам конфиг, нам необходимо сгенерировать и пополнить свой кошелек Arweave, монетами $AR как это cделать прекрасно показано в гайде для тестнета Korellia от HowToNode aka cyberomanov , поэтому не считаю нужным переписывать, то что уже есть, перейдем дальше к технической части

Как только мы перенесли свой ключ на сервер, нам необходимо его переименовать в arweave.json и перенести в каталог .kysor, если он не там

mv arweave-key-NPnHBDo7koHYkTYRbBkUJP4EW4GPA98fJdxsj6pGnDEA.json arweave.json
mv arweave.json $HOME/.kysor

Далее создаем vallaccount, если кошелек уже существует, добавляем флаг
--recover к команде и вводим свое мнемо

valaccount - это горячий кошелек для оплаты комиссии валидатора

kysor valaccounts create \
--name cosmoshub \
--pool 0 \
--storage-priv "$(cat ~/.kysor/arweave.json)" \
--metrics

После создания кошелька, его мнемонику можно увидеть в файле cosmoshub.toml по пути:
$HOME/.kysor/valaccounts/cosmoshub.toml

Открываем файл и записываем мнемо от нашего valaccount

cat $HOME/.kysor/valaccounts/cosmoshub.toml

Стоит сделать пометку для тех, у кого узел CosmosHub стоит на отдельном сервере от Protocol узла, вам необходимо создать файл .env и вписать туда переменную

nano $HOME/.kysor/.env

Вписываем туда переменную с адресом и RPC портом вашего узла Cosmos далее сохраняем и переходим к следующему шагу

export KYVEJS_TENDERMINT_BSYNC_RPC="http://YOUR_IP:YOUR_PORT"

Устанавливаем npm и nodejs

curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash -
sudo apt-get install -y nodejs

Устанавливаем клиент Bundlr

Bundlr - это L2 Arweave далее мы переведем свои монеты туда

npm install -g @bundlr-network/client

Далее нам необходимо пополнить наш кошелек Bundlr-a

Переходим в рабочую директорию и даем команду

cd $HOME/.kysor
bundlr fund 1000000000000 -h https://node1.bundlr.network -w arweave.json -c arweave

1000000000000 - Это одна монета $AR
100000000000 - Это 0.1 монеты $AR
Думаю логику вы поняли )

Успешно выполненная транзакция выглядит так:

Внимание, монеты могут доходить долго, от 20 минут и более
Статус вашей транзакции можете посмотреть здесь:
https://viewblock.io/arweave

После того, как кошелек будет пополнен, а синхронизация CosmosHub будет выше, чем актуальный блок в Kyve, который можно посмотреть здесь, по
параметру Latest key, можем запускать свой узел

Создаем сервисный файл, для тех у кого Protocol и Cosmos стоят на одном сервере

tee <<EOF > /dev/null /etc/systemd/system/kyve_cosmos.service
[Unit]
Description=Kyve Protocol CosmosHub Pool
After=network-online.target

[Service]
User=$USER
ExecStart=$(which kysor) start --valaccount cosmoshub
Restart=always
RestartSec=3
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target
EOF

Если ваши ноды CosmosHub и Protocol стоят на разных серверах, тогда необходимо добавить дополнительный флаг c нашей переменной

tee <<EOF > /dev/null /etc/systemd/system/kyve_cosmos.service
[Unit]
Description=Kyve Protocol CosmosHub Pool
After=network-online.target

[Service]
User=$USER
ExecStart=$(which kysor) start --valaccount cosmoshub --env-file=/root/.kysor/.env
Restart=always
RestartSec=3
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target
EOF

Стартуем сервис и смотрим логи

sudo systemctl daemon-reload && \
sudo systemctl enable kyve_cosmos && \
sudo systemctl restart kyve_cosmos && \
sudo journalctl -u kyve_cosmos -f -o cat

После успешного старта мы можем наблюдать логи с разного вида информацией, такие как valname valaddr и тд.
В конце наш ждем уведомление, где нас просят авторизовать наш узел

2023-05-16 14:48:24.486 INFO The node will not continue until the account is authorized

Если вы увидели это строчку, то осталось совсем немного, надо лишь создать валидатора в вебе, тут

Подключаем кошелек, на котором будет стоять валидатор и включаем Expert Mod

Далее Заходим во вкладку Validators, справа сверху видим кнопку "Become validator", жмем и стейкаем в себя часть монет

Далее вводим параметры, которые выведены у нас в терминале и смотрим на своего валидатора во вкладке Validators, заполняем профиль нашего валидатора (одно из обязательных условий делегации) и ждем чуда!

Большое спасибо, за внимание и уделенное время

Наш телеграмм канал по нодам — https://t.me/mmsnodes
Наш телеграмм чат по нодам - https://t.me/mmsnodeschat
Наш телеграмм канал по экосистеме Cosmos - https://t.me/cosmochannel_mms

С уважением, MMS_Team