Установка Cosmos нод
Всем привет с вами снова MMS_Team, ранее мы разбирали создание валидатора в нодах основанных на Cosmos здесь разберём установку самих нод.
Краткую инструкцию по аренде сервера можно посмотреть тут
Если будете выбирать Hetzner можете воспользоваться нашей ссылкой, будем благодарны.
Как установить несколько нод на один сервер можно почитать тут
В качестве примера будем использовать gaiad (это только для примера, при установке используйте данные проекта)
Итак начнём первое что вы можете видеть во всех гайдах это
Команда 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 , если ее не ввести то будут использоваться данные которые находились в нём при загрузке. Так же если решили переустановить ноду то заново переменные вводить не нужно они остаются в баш профиле, при удалении ноды рекомендуется удалить все переменные связанные с нодой из баш профиля, иначе могут появляться ошибки при загрузке.
Далее выполняем команду инициализации
Как уже писалось выше можно обойтись без переменных и вместо них ввести свои значения. Команда инициализации создаст рабочую папку проекта (в нашем примере .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="" в кавычки вписываем сиды и выполняем обе строки
Выключаем индексер (по желанию) для экономии места.
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
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 время, в секундах, через которое произойдёт перезагрузка сервиса
Перечитывает файлы сервиса, необходимо выполнять после создания или редактирования сервиса
Включает созданный сервис добавляя его в автозапуск
Перезапуск сервиса (как запуск работает тоже)
Просмотр логов, если в логах постоянно рестартит сервис, то рекомендую остановить его и запустить бинарник напрямую gaiad start , так будет выводить более подробную информацию об ошибке.
Отключение сервиса и удаление его из автозапуска
Вывод показывает статус ноды, проверяем синхронизацию когда "catching_up": false то нода синхронизирована (если установленно несколько нод на сервере то указываем порт нужной ноды)
После того как нода синхронизировалась создаем или восстанавливаем кошелёк, необходимо будет придумать и ввести пароль для работы с кошельком
После создания кошелька обязательно сохраняем мнемоник он необходим для восстановления кошелька, для восстановления используем ключ --recover, и вводим мнемоник от кошелька.
Запишем адрес кошелька в переменную (это будет удобнее чем постоянно вводить что-то такое cosmos15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc)
Добавляем переменную, команда gaiad keys show $GAIA_WALLET -a покажет адрес кошелька, и записываем в баш профиль
echo 'export GAIA_ADDR='${GAIA_ADDR} >> $HOME/.bash_profile source $HOME/.bash_profile
Запишем адрес валидатора в переменную
Добавляем переменную, команда 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 отобразит адрес валидатора записанный в переменной
Нужно запросить средства на кошелёк для создания валидатора, краны в основном указываются в документации, гитах или дискордах проектов. После запроса средств проверяем баланс командой
Теперь создаем валидатора, подробно написано тут, после создания не должно быть ошибок, если в поле raw_log есть какие-то записи то это ошибка и валидатор не создался. После создания валидатора обязательно сохраните файл priv_validator_key.json из папки конфиг в данном примере $HOME/.gaia/config/priv_validator_key.json. Этот файл необходим для восстановления валидатора в случае отказа сервера или при переносе ноды на другой сервер. Важно при переносе ноды на другой сервер перед копированием этого файла старая нода должна быть полностью остановлена.
Рассмотрим полезные команды для управления нодой
Просмотр списка активных валидаторов
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 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