May 16

Установка 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, синхронизироваться нода будет около ~10 дней, но нам главное начать синхронизировать первые блоки, остальные по началу, не сильно важны.
Генезисная высота 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,f1b16c603f3a0e59f0ce5179dc80f549a7ecd0e2@34.138.248.129:26656,8c5462c5e6b1a444ed26eb3d690e87166d9c0986@185.162.249.161:26656,d09c50da7b46624b8f1866bcf66fa11639bfb696@198.244.203.179:26656,7abab0475a506ed3b9ab2ad40948bfe53b797e13@128.199.128.15:26090,6ea2ef7d3dd5d6967708a0b31eed85ba090a90a1@65.108.121.190:12010,67685d93f2256caa7a2d53e3a104f9e437c3d247@95.216.114.244:26656,4cbe028d9e6207d1cd9a7838f1b08a26460e6292@45.63.106.94:26656,e66d3c9d0f420744d34b1f08f0fed9cfcf433460@162.19.238.186:26656,1be2bc01d01005833c538dedf11b23207cbb43f1@34.105.81.137:26656,538348fa1eac998dad392a3f00f7b957042c3e84@15.235.53.86:11156,71d3c8187bd9e58e8c94c126921f2fec4624bf26@57.128.98.12:10000,ebfa8b6c2cfb664d48cfb1749e89e0dbeac0f949@13.212.49.238:26656,cf395b1ba2b8f9fe74fbd85b265b0e83c6a4771b@198.244.213.94:22256,4ebf074e8b4a24438bd0bd503b62b4728dfb8eae@35.212.101.35:26656,b8b8e899663296024709e186fc393b8d8020d136@65.109.68.185:2010,ad490dd7066a5779d221632d616d20a8abc63332@51.81.93.101:26656,966df04206d6e70713fcf6cf14591787c2cd71da@142.132.138.18:26656,57b3ec821a394c243a856b2c82cfb59b7830b0ac@65.108.98.218:19095,aee22c124c40f3f793a8cba3279b081632ff645d@135.181.20.40:26656,4ddba29a7dfa740a4edeb5c620c963f67f951e1d@5.9.72.212:2000,9ef5a70d2218c4b599030eaad4f66e1da2ba5dda@35.73.70.202:26656,6681cee74de13aaac561442bcbc420bdb025aacc@116.202.85.179:26656,3ce30fdd489fa87b6465141cc56b48e5a22fe8e1@154.53.41.185:10093,b9b99fbf40189c604ea618c4b99c61abc1489b70@18.140.125.215:26656,f1f8810d0b3faded25a17a63edc1b7acaf117ef1@5.254.13.45:26656,e7610bd2d6f70feee6ecc50a101164ca59234137@35.207.149.205:26656,40e6c7f38706875254c1c64280d40fa468245bde@34.88.195.35:26656,53b3651680ec3482d736808cbb3035940107f8ab@82.100.58.119:26656,b6d18881d8277022d7a8a1880e7b24a4eb773f71@66.206.5.26:26656,71409c23ff950971f28a6c9111378b3c38b92484@65.108.99.37:26716,e48cbe82cc6193c28c08d8e1df6872052fa6e388@89.149.200.138:26656,81062b9a8807a1229543b84bae2898c50a1b1dfc@52.211.169.132:26656,aa61bc0e8a42eda6ac1276c4279941714a4a38f4@88.99.70.38:26656,61912dd14eb4e0c4588977491426b77fd7b0dcfc@141.95.72.172:26656,cf52e109b7015d5c21f50ab4331fb7062160ab6c@35.206.171.231:26656
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

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