December 10, 2022

Установка Cosmos нод

Всем привет с вами снова MMS_Team, ранее мы разбирали создание валидатора в нодах основанных на Cosmos здесь разберём установку самих нод.

Краткую инструкцию по аренде сервера можно посмотреть тут

Если будете выбирать Hetzner можете воспользоваться нашей ссылкой, будем благодарны.

Как установить несколько нод на один сервер можно почитать тут


В качестве примера будем использовать gaiad (это только для примера, при установке используйте данные проекта)


Итак начнём первое что вы можете видеть во всех гайдах это

sudo apt update && sudo apt upgrade -y


Команда sudo apt update обновляет списки пакетов и репрозиториев на актуальные (не обновляет установленные пакеты) Команда sudo apt upgrade обновляет установленные пакеты до последних версий и устанавливает новые пакеты, если они требуются в качестве зависимостей. Ключ -y нужен если при установке пакетов какой либо из них запросит подтверждение то оно введётся автоматически.

Следующим шагом мы устанавливаем дополнительные пакеты

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

Давайте попробуем разобраться что и для чего нам нужно


make выполняет запуск процедуры компиляции приложения из исходного кода. По сути компилирует нам рабочий бинарник.

git распределённая система управления версиями. По сути с помощью этого пакета мы выбираем необходимую нам версию исходного кода для бинарника

Chrony — это гибкая реализация протокола сетевого времени Network Time Protocol (NTP). Используется для синхронизации системных часов с различных NTP-серверов

curl — инструмент для передачи данных с сервера или на него

jq позволяет анализировать, фильтровать, сравнивать и преобразовывать данные JSON.

Ncdu (NCurses Disk Usage) является инструментом командной строки для просмотра и анализа использования дискового пространства на Linux.

htop — компьютерная программа, предназначенная для вывода на терминал списка запущенных процессов и информации о них.

Пакет Net-tools содержит набор программ, которые формируют основу поддержки сетей в Linux

lsof — утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессами

Fail2ban — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.

Wget — свободная неинтерактивная консольная программа для загрузки файлов по сети.

Далее устанавливаем go и проверяем версию Go — компилируемый многопоточный язык программирования

ver="1.19.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 -b <latest-release-tag> https://github.com/cosmos/gaia.git cd gaia && make install

git clone -b <latest-release-tag> https://github.com/cosmos/gaia.git этой строкой скачивается репрозиторий с определённой версией которую мы указываем вместо <latest-release-tag>, так же можно скачать полный репрозиторий если выполнить команду git clone https://github.com/cosmos/gaia.git

cd gaia && make install здесь мы переходим в папку со скаченным репрозиторием gaia и запускаем установку бинарника. Установку надо смотреть в документации проекта, может использоваться make install, make build, так и скачивание уже скомпилированного бинарника.

Теперь рассмотрим переменные, для чего мы их задаём.

GAIA_CHAIN="gaia" GAIA_MONIKER="your_name" GAIA_WALLET="your_name"

Здесь задается имя сети, ноды, и кошелька, (можно вводить всё это в командах вручную без переменных, но если у вас несколько нод и вы планируете сделать мониторинг то опереировать переменными проще) в данном виде переменные будут работать только в рамках сессии для того чтобы они они применялись постоянно нужно их добавить в баш профиль

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

После любого изменения баш профиля необходимо вводить команду source $HOME/.bash_profile , если ее не ввести то будут использоваться данные которые находились в нём при загрузке. Так же если решили переустановить ноду то заново переменные вводить не нужно они остаются в баш профиле, при удалении ноды рекомендуется удалить все переменные связанные с нодой из баш профиля, иначе могут появляться ошибки при загрузке.

Далее выполняем команду инициализации

gaiad init $GAIA_MONIKER --chain-id $GAIA_CHAIN

Как уже писалось выше можно обойтись без переменных и вместо них ввести свои значения. Команда инициализации создаст рабочую папку проекта (в нашем примере .gaia/)с конфигами и рабочими папками.

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

wget https://github.com/hyphacoop/testnets/raw/add-theta-testnet/v7-theta/public-testnet/genesis.json.gz gzip -d genesis.json.gz mv genesis.json $HOME/.gaia/config/genesis.json

В данном примере скачивается запакованный файл, после чего он распаковывается и перемещается в папку проекта.

Теперь нужно настроить конфиг файлы для ноды.

Сначала добавим сиды и пиры для того чтобы нода могла подключиться к сети. (возможны вариации, могут быть только сиды, или только пиры) Сиды и пиры так же указываются либо в гите проекта либо в документации, при необходимости свежих пиров (если нода долго не может подключиться к сети), ищем либо в дискордах проектов, либо в тематических каналах.

seeds="" sed -E -i 's/seeds = \".*\"/seeds = \"$seeds\"/' $HOME/.gaia/config/config.toml

В строке seeds="" в кавычки вписываем сиды и выполняем обе строки

peers="" sed -i "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/;" $HOME/.gaia/config/config.toml

В строке peers="" в кавычки вписываем сиды и выполняем обе строки

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

indexer=null

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

Настраиваем прунинг (по желанию) для экономии места.

pruning="custom" pruning_keep_recent="100" pruning_keep_every="0" pruning_interval="50" sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.gaia/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.gaia/config/app.toml sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.gaia/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.gaia/config/app.toml Так же задаём минимальну цену за газ sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.001uatom\"/" ${GAIA_VALOPER}app.toml

Создаём сервис

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

[Service] User=$USER ExecStart=$(which gaiad) start --home $HOME/.gaia Restart=on-failure RestartSec=3 LimitNOFILE=65535

[Install] WantedBy=multi-user.target EOF

sudo tee /etc/systemd/system/gaiad.service > /dev/null <<EOF эта строчка задает место создания сервиса, сервисы находятся в папке /etc/systemd/system/ так что здесь задаем имя сервиса gaiad.service

Description=gaia название сервиса как он будет отображаться

ExecStart=$(which gaiad) start --home $HOME/.gaia параметры запуска, ключ --home $HOME/.gaia указывает местоположение рабочей папки проекта.

Restart=on-failure указывает что при ошибке сервис будет перезагружен

RestartSec=3 время, в секундах, через которое произойдёт перезагрузка сервиса

Теперь запускаем наш сервис

sudo systemctl daemon-reload

Перечитывает файлы сервиса, необходимо выполнять после создания или редактирования сервиса

sudo systemctl enable gaiad

Включает созданный сервис добавляя его в автозапуск

sudo systemctl restart gaiad

Перезапуск сервиса (как запуск работает тоже)

journalctl -u gaiad -f -o cat

Просмотр логов, если в логах постоянно рестартит сервис, то рекомендую остановить его и запустить бинарник напрямую gaiad start , так будет выводить более подробную информацию об ошибке.

sudo systemctl stop gaiad

Остановка сервиса

sudo systemctl disable gaiad

Отключение сервиса и удаление его из автозапуска

curl localhost:26657/status

Вывод показывает статус ноды, проверяем синхронизацию когда "catching_up": false то нода синхронизирована (если установленно несколько нод на сервере то указываем порт нужной ноды)

После того как нода синхронизировалась создаем или восстанавливаем кошелёк, необходимо будет придумать и ввести пароль для работы с кошельком

gaiad keys add $GAIA_WALLET

После создания кошелька обязательно сохраняем мнемоник он необходим для восстановления кошелька, для восстановления используем ключ --recover, и вводим мнемоник от кошелька.

gaiad keys add $GAIA_WALLET --recover

Запишем адрес кошелька в переменную (это будет удобнее чем постоянно вводить что-то такое cosmos15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc)

GAIA_ADDR=$(gaiad keys show $GAIA_WALLET -a)

Добавляем переменную, команда gaiad keys show $GAIA_WALLET -a покажет адрес кошелька, и записываем в баш профиль

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

Запишем адрес валидатора в переменную

GAIA_VALOPER=$(gaiad keys show $GAIA_WALLET --bech val -a)

Добавляем переменную, команда gaiad keys show $GAIA_WALLET --bech val -a покажет адрес валидатора, и записываем в баш профиль

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

Посмотреть вывод любой переменной можно с помощью команды echo например echo $GAIA_VALOPER отобразит адрес валидатора записанный в переменной

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

gaiad query bank balances $GAIA_ADDR

Теперь создаем валидатора, подробно написано тут, после создания не должно быть ошибок, если в поле raw_log есть какие-то записи то это ошибка и валидатор не создался. После создания валидатора обязательно сохраните файл priv_validator_key.json из папки конфиг в данном примере $HOME/.gaia/config/priv_validator_key.json. Этот файл необходим для восстановления валидатора в случае отказа сервера или при переносе ноды на другой сервер. Важно при переносе ноды на другой сервер перед копированием этого файла старая нода должна быть полностью остановлена.

Рассмотрим полезные команды для управления нодой

Проверка статуса валидатора

gaiad q staking validator $GAIA_VALOPER

Просмотр списка активных валидаторов

gaiad q staking validators -oj --limit=3000 | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " \t " + .description.moniker' | sort -gr | nl

Просмотр списка неактивных валидаторов

gaiad q staking validators -oj --limit=3000 | jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " \t " + .description.moniker' | sort -gr | nl

Выход из тюрьмы

gaiad tx slashing unjail --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas auto --gas-adjustment 1.4 -y

Посмотреть причину попадания в тюрьму

gaiad query slashing signing-info $(gaiad tendermint show-validator)

Собрать награды со своего валидатора

gaiad tx distribution withdraw-rewards $GAIA_VALOPER --commission --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

Собрать награды со всех валидаторов в которых делегировали

gaiad tx distribution withdraw-all-rewards --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

Делегировать средства на своего валидатора

gaiad tx staking delegate $GAIA_VALOPER 1000000uatom --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

Делегировать средства другому валидатору

gaiad tx staking delegate <TO_VALOPER_ADDRESS> 1000000uatom --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

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

gaiad tx staking redelegate $GAIA_VALOPER <TO_VALOPER_ADDRESS> 1000000uatom --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

Вывести средства со своего валидатора

gaiad tx staking unbond $GAIA_VALOPER 1000000uatom --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

Перевести средства на другой кошелёк

gaiad tx bank send wallet <TO_WALLET_ADDRESS> 1000000usei --from $GAIA_WALLET --chain-id $GAIA_CHAIN

Посмотреть список голосований

gaiad query gov proposals

Посмотреть иформацию по номеру голосования

gaiad query gov proposal 1

Проголосовать "да" за номер голосования

gaiad tx gov vote 1 yes --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

Проголосовать "нет" за номер голосования

gaiad tx gov vote 1 no --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

Проголосовать "воздержался" за номер голосования

gaiad tx gov vote 1 abstain --from $GAIA_WALLET --chain-id $GAIA_CHAIN --gas-adjustment 1.4 --gas auto -y

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

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

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