Stratos (Full-node) /// v6.1
Устанавливаем ноду Stratos Full-node для участия в tropos-1.
Если вы не знаете, что такое нода — читаем статью.
Если вы не знаете, где арендовать сервер для ноды — читаем статью.
Если вы не знаете, как подключиться к серверу — читаем статью.
Если вы всё знаете — открываем MobaXterm и создаём сессию.
- Краткое описание ивента: несколько слов про ивент, условия участия.
- Требования к железу: рекомендуемые технические параметры сервера.
- Установка
- Полезные вещи
- Полезные команды при работе с нодой;
- Ределегация: выводим реварды за стейкинг и ределегируем их.
- Перенос и бэкап: пригодится при переезде;
- Удаление ноды: на будущее;
- Идентификация: делаем валидатора уникальным.
- Благодарности
- Полезные ресурсы на каждый день
Stratos - новое поколение децентрализованной сети, обеспечивающее масштабируемые и надежные базы данных и вычислительную сеть.
Текущая фаза тестнета является стимулируемой (оплачиваемой).
Подробнее: https://github.com/stratosnet/sds/wiki/Tropos-Incentive-Testnet.
Medium | Docs | GitHub | WebSite | Twitter | Discord | Telegram | RU_Chat
Официальные требования: 4 CPU x 16 GB RAM x 2TB SSD - Ubuntu 18.04+.
Субъективные наблюдения: 2 CPU x 4 GB RAM x 500 GB SSD - Ubuntu 20.04.
# обновляем 'базу данных', обновляем дистрибутив sudo apt-get update && sudo apt-get upgrade -y
# скачиваем необходимые зависимости sudo apt-get install git curl build-essential gcc jq snapd --yes
# создаём папку для 'stratos', скачиваем файлы ноды одной командой mkdir $HOME/stratos; cd $HOME/stratos; \ wget https://github.com/stratosnet/stratos-chain/releases/download/v0.6.1/stchaincli && \ wget https://github.com/stratosnet/stratos-chain/releases/download/v0.6.1/stchaind
# выдаём права на исполнение и переносим к другим исполняемым файлам chmod +x * && mv * /usr/bin/ && cd
# проверяем версию stchaincli version && stchaind version
Если всё прошло успешно, тогда переходим к инициализации ноды.
Первым делом добавим наш никнейм, который будет в дальнейшем использоваться в качестве названия кошелька, в систему, как переменную.
Замените условную переменную <nickname> на желаемый никнейм, раскрывая кавычки.
# например, "export NICKNAME="cyberomanov"" echo "export NICKNAME="<nickname>"" >> ~/.bash_profile
# чтобы переменная загрузилась, необходимо перезагрузить '.bash_profile' source ~/.bash_profile
# проверим значение переменной, выведя её на экран echo $NICKNAME
stchaind init $NICKNAME
# удаляем старые файлы генезиса и конфига, скачиваем новые одной командой rm $HOME/.stchaind/config/genesis*; \ wget -O $HOME/.stchaind/config/genesis.json https://raw.githubusercontent.com/stratosnet/stratos-chain-testnet/main/genesis.json; \ wget -O $HOME/.stchaind/config/config.toml https://raw.githubusercontent.com/stratosnet/stratos-chain-testnet/main/config.toml
# пробуем добавить пользовательские пиры одной командой sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \ \"62abe9adad2c079423cee48d697b94568d0da0b0@143.198.136.75:26656,\ d12cd591f7062aa11bf94e79578647e2cac26b86@18.178.110.255:26656,\ d12cd591f7062aa11bf94e79578647e2cac26b86@18.178.110.255:26656\"/" \ $HOME/.stchaind/config/config.toml
# настраиваем прунинг одной командой pruning="custom" && \ pruning_keep_recent="50" && \ pruning_keep_every="1000" && \ pruning_interval="30" && \ sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.stchaind/config/app.toml && \ sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.stchaind/config/app.toml && \ sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.stchaind/config/app.toml && \ sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.stchaind/config/app.toml
# создаём файл сервиса для запуска ноды sudo tee <<EOF >/dev/null /etc/systemd/system/stratosd.service [Unit] Description=Stratos Chain Node After=network-online.target [Service] User=$USER ExecStart=$(which stchaind) start Restart=on-failure RestartSec=10 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
# включаем сервис 'stratosd' одной командой sudo systemctl daemon-reload; \ sudo systemctl enable stratosd; \ sudo systemctl restart stratosd
# проверяем логи sudo journalctl -u stratosd -f -o cat
Ждём, пока нода найдёт рабочие пиры и начнёт синхронизацию.
Скорее всего, вам придётся попросить у товарищей в чате addrbook.json, если нода не сможет найти пиры сама.
# получаем высоту блоков нашей ноды stchaincli status 2>&1 \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ | jq ."sync_info"."latest_block_height"
# получаем статус синхронизации ноды stchaincli status 2>&1 \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ | jq ."sync_info"."catching_up" # 'true' - нода синхронизируется, 'false' - нода синхронизирована
# выполняем команду создания тестового кошелька stchaincli keys add $NICKNAME --keyring-backend=test # либо восстанавливаем старый по мнемонике stchaincli keys add $NICKNAME --keyring-backend=test --recover
Не забываем записать мнемонику - это единственный способ восстановить кошелёк.
Чтобы запросить токены на адрес, необходимо, прежде всего, этот адрес узнать.
Если вы сделали бэкап ключей, как я просил - можете скопировать адрес оттуда.
Для остальных выполняем команду:
stchaincli keys list --keyring-backend=test
Копируем адрес и выполняем команду запроса тестовых токенов с крана:
Замените условную переменную <address> на stratos-адрес, раскрывая кавычки.
# запрашиваем токены на адрес curl -X POST https://faucet-tropos.thestratos.org/faucet/<address>
Посмотреть баланс из терминала можно только после полной синхронизации ноды:
Замените условную переменную <address> на stratos-адрес, раскрывая кавычки.
# проверяем баланс из командной строки stchaincli query account <address> \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"`
Отправляем транзакцию создания валидатора после полной синхронизации:
Можно указать сайт, identity, details, если есть что указывать.
stchaincli tx staking create-validator \ --amount="90000000000ustos" \ --pubkey=$(stchaind tendermint show-validator) \ --moniker=$NICKNAME \ --website="" \ --identity="" \ --details="" \ --chain-id=tropos-1 \ --commission-max-change-rate="0.1" \ --commission-max-rate="0.5" \ --commission-rate="0.1" \ --min-self-delegation="1" \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ --gas="auto" \ --gas-adjustment=1.5 \ --gas-prices="0.5ustos" \ --keyring-backend=test \ --from=$NICKNAME \ -y
Проверить, всё ли прошло удачно, можно в эксплорере (когда он заработает):
Посмотрим информацию о валидаторе:
stchaincli query staking validator $(stchaincli keys show $NICKNAME \ --bech val --address --keyring-backend test) \ --trust-node \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"`
Несколько команд для удобной работы с нодой.
# получаем высоту блоков нашей ноды stchaincli status 2>&1 \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ | jq ."sync_info"."latest_block_height"
# получаем статус синхронизации ноды stchaincli status 2>&1 \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ | jq ."sync_info"."catching_up" # 'true' - нода синхронизируется, 'false' - нода синхронизирована
# посмотреть информацию о валидаторе stchaincli query staking validator $(stchaincli keys show $NICKNAME \ --bech val --address --keyring-backend test) \ --trust-node \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"`
# локальный эксплорер stchaincli q staking validators \ -o json --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ | jq '.[] | select(.status==2)' \ | jq -r '.tokens + " - " + .description.moniker' | sort -gr | nl
# выйти из 'тюрьмы' stchaincli tx slashing unjail \ --from=$NICKNAME \ --chain-id=tropos-1 \ --keyring-backend=test \ --gas="auto" \ --gas-prices="0.5ustos" \ --gas-adjustment=1.5 \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"`
# перезапустить сервис с нодой sudo systemctl restart stratosd
# остановить сервис с нодой sudo systemctl stop stratosd
# проверить логи ноды sudo journalctl -u stratosd -f -o cat
План работы: выводим реварды за активное валидирование, проверяем баланс, ределегируем собранную награду снова на своего валидатора.
# вывести реварды за стейкинг для последующей ределегации stchaincli tx distribution withdraw-all-rewards \ --chain-id=tropos-1 \ --gas="auto" \ --gas-adjustment=1.5 \ --gas-prices="0.5ustos" \ --keyring-backend=test \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ --from=$NICKNAME \ -y
# проверяем новый баланс на аккаунтах stchaincli query account <address> \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"`
Где <address> - адрес, с которого производилось создание валидатора.
В amount показывает весь свободный баланс. Не советую делегировать весь баланс, помните, что каждая транзакция имеет комиссию.
# получаем operator_address stchaincli query staking validator $(stchaincli keys show $NICKNAME \ --keyring-backend test --bech=val -a)\ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ --trust-node | grep "valoper" | awk '{print $2}'
# делегировать токены на своего валидатора stchaincli tx staking delegate <operator_address> "1000000000ustos" \ --chain-id=tropos-1 \ --gas="auto" \ --gas-adjustment=1.5 \ --gas-prices="0.5ustos" \ --keyring-backend=test \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ --from=$NICKNAME \ -y
Посмотрим информацию о валидаторе:
stchaincli query staking validator $(stchaincli keys show $NICKNAME \ --bech val --address --keyring-backend test) \ --trust-node \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"`
Добавим аватар и немного описания нашему валидатору.
Советую сначала скопировать команду в блокнот, отредактировать, а затем вставлять в терминал.
stchaincli tx staking edit-validator \ --moniker="new node nickname" \ --website="https://t.me/nickname" \ --identity="1A1A2B2B3C3C4D4D" \ --details="any details" \ --chain-id=tropos-1 \ --gas="auto" \ --gas-adjustment=1.5 \ --gas-prices="0.5ustos" \ --keyring-backend=test \ --node `cat "$HOME/.stchaind/config/config.toml" \ | grep -oPm1 "(?<=^laddr = \")([^%]+)(?=\")"` \ --from=$NICKNAME \ -y
Если вы не знаете, что такое identity и где его получить - посмотрите на пример из статьи @letskynode.
Про перенос я написал полноценную статью. Читаем внимательно и вдумчиво.
Если вы вдруг разочаровались в проекте и хотите удалить его с сервера, то можно просто разрушить/удалить сервер из личного кабинета хостинга.
Это сработает, если на сервере нет других важных нод. В случае, если вы хотите оставить сервер, но удалить конкретную ноду - приступаем к её удалению:
# останавливаем и отключаем сервис ноды sudo systemctl stop stratosd; \ sudo systemctl disable stratosd; \ sudo systemctl daemon-reload
Не забудьте сделать бэкап папки $HOME/.stchaind и $HOME/.stchaincli, даже если хотите удалить ноду с сервера.
# удаляем папки и исполняемые файлы sudo rm -Rvf $HOME/.stchaind $HOME/.stchaincli \ /usr/bin/stchaincli /usr/bin/stchaind $HOME/stratos
мамичу за то, что родила такого гения.
@AlexVoy за альтернативный гайд.
@how_to_node - канал, где я выкладываю свои гайды.