NOIS: Installation Guide (Testnet is over)
Nois Network — это Proof of Stake блокчейн-протокол, который позволяет разработчикам использовать безопасную, эффективную и беспристрастную случайность через IBC.
Тестнет эксплорер - http://explorer.nodera.org/nois-003/
Website
Discord
Оглавление
- Подготовка сервера
- Установка ноды
- State sync (опционально)
- Создание кошелька
- Создание валидатора
- Создание бота
- Удаление ноды
- Обновление
- Полезные команды
Подготовка сервера
На данном этапе устанавливаю на сервере Hetzner - CPX21: 3 CPU, 4 GB RAM, 80 GB SSD, дальше буду смотреть по нагрузке.
sudo apt update && sudo apt upgrade -y
Устанавливаем инструменты разработчика и необходимые пакеты
sudo apt install curl build-essential git wget jq make gcc tmux chrony -y
wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz; \ rm -rv /usr/local/go; \ tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz && \ rm -v go1.19.5.linux-amd64.tar.gz && \ echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile && \ source ~/.bash_profile && \ go version
Установка ноды
Клонируем репозиторий проекта с нодой, переходим в папку с проектом и собираем бинарные файлы
cd $HOME git clone https://github.com/noislabs/noisd.git cd noisd git checkout v0.6.0 make install noisd version --long | head # version: 0.6.0
MONIKER_NOIS=вводим свое имя CHAIN_ID_NOIS=nois-testnet-004 PORT_NOIS=32
Сохраняем переменные, перезагружаем .bash_profile и проверяем значения переменных
echo "export MONIKER_NOIS="${MONIKER_NOIS}"" >> $HOME/.bash_profile echo "export CHAIN_ID_NOIS="${CHAIN_ID_NOIS}"" >> $HOME/.bash_profile echo "export PORT_NOIS="${PORT_NOIS}"" >> $HOME/.bash_profile source $HOME/.bash_profile echo -e "\nmoniker_nois > ${MONIKER_NOIS}.\n" echo -e "\nchain_id_nois > ${CHAIN_ID_NOIS}.\n" echo -e "\nport_nois > ${PORT_NOIS}.\n"
noisd config chain-id $CHAIN_ID_NOIS noisd config keyring-backend test noisd config node tcp://localhost:${PORT_NOIS}657 sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0unois\"/" $HOME/.noisd/config/app.toml
noisd init $MONIKER_NOIS --chain-id $CHAIN_ID_NOIS
Загружаем генезис файл и адресбук
wget -q -O $HOME/.noisd/config/genesis.json https://github.com/noislabs/networks/raw/main/nois-testnet-004/genesis.json
SEEDS="ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:17356" PEERS="" sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.noisd/config/config.toml
Изменяем порты для возможности дальнейшего подселения других нод проектов экосистемы Космос на один сервер
sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${PORT_NOIS}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${PORT_NOIS}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${PORT_NOIS}060\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${PORT_NOIS}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${PORT_NOIS}660\"%" $HOME/.noisd/config/config.toml sed -i.bak -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${PORT_NOIS}317\"%; s%^address = \":8080\"%address = \":${PORT_NOIS}080\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${PORT_NOIS}090\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${PORT_NOIS}091\"%" $HOME/.noisd/config/app.toml
pruning="custom" pruning_keep_recent="100" pruning_keep_every="0" pruning_interval="50" sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.noisd/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.noisd/config/app.toml sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.noisd/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.noisd/config/app.toml
noisd tendermint unsafe-reset-all --home $HOME/.noisd
printf "[Unit] Description=nois After=network-online.target [Service] User=$USER ExecStart=$(which noisd) start --home $HOME/.noisd Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target" > /etc/systemd/system/noisd.service
Запускаем сервис и проверяем логи
sudo systemctl daemon-reload && \ sudo systemctl enable noisd && \ sudo systemctl restart noisd && \ sudo journalctl -u noisd -f -o cat
Ждем окончания синхронизации, проверить синхронизации можно командой
noisd status 2>&1 | jq .SyncInfo
Если вывод показывает false, синхронизация завершена.
State sync (опционально) ВРЕМЕННО НЕ РАБОТАЕТ!!
Для ускорения синхронизации (а также для освобождения места на сервере) можно использовать state sync.
sudo systemctl stop noisd noisd tendermint unsafe-reset-all --home $HOME/.noisd peers="8073bd66d5fa581c7b3d0a08d0df1fe318d70d99@135.181.35.46:55656"; \ sed -i.bak -e "s/^persistent_peers =./persistent_peers = "$peers"/" $HOME/.noisd/config/config.toml SNAP_RPC="http://135.181.35.46:55657" LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \ TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH sed -i -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \ s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \ s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \ s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" ~/.noisd/config/config.toml
Запускаем сервис и проверяем логи
sudo systemctl daemon-reload && \ sudo systemctl enable noisd && \ sudo systemctl restart noisd && \ sudo journalctl -u noisd -f -o cat
Ждем окончания синхронизации, проверить синхронизации можно командой
noisd status 2>&1 | jq .SyncInfo
Если вывод показывает false, синхронизация завершена.
Создание кошелька
noisd keys add $MONIKER_NOIS
Сохраняем мнемоник фразу в надежном месте!
Если вы участвовали в предыдущих тестнетах, восстанавливаем кошелек командой и вводим мнемоник фразу
noisd keys add $MONIKER_NOIS --recover
Создаем переменную с адресом кошелька и валидатора
WALLET_NOIS=$(noisd keys show $MONIKER_NOIS -a) VALOPER_NOIS=$(noisd keys show $MONIKER_NOIS --bech val -a) echo "export WALLET_NOIS="${WALLET_NOIS}"" >> $HOME/.bash_profile echo "export VALOPER_NOIS="${VALOPER_NOIS}"" >> $HOME/.bash_profile source $HOME/.bash_profile echo -e "\nwallet_nois > ${WALLET_NOIS}.\n" echo -e "\nvaloper_nois > ${VALOPER_NOIS}.\n"
Для пополнения кошелька тестовыми токенами, отправляем свой адрес в ветку #faucet в формате !faucet ваш_адрес
noisd q bank balances $WALLET_NOIS
Создание валидатора
После завершения синхронизации и пополнении кошелька, создаем валидатора
noisd tx staking create-validator \ --amount 19990000000unois \ --from $WALLET_NOIS \ --commission-max-change-rate "0.05" \ --commission-max-rate "0.2" \ --commission-rate "0.1" \ --min-self-delegation "1" \ --pubkey $(noisd tendermint show-validator) \ --moniker $MONIKER_NOIS \ --chain-id $CHAIN_ID_NOIS \ --identity="" \ --details="" \ --website="" \ -y
Проверяем своего валидатора в эксплорере - http://explorer.nodera.org/nois-003/staking
Мониторинг можно настроить с использованием Panic! бота по гайду - https://nodera.org/panic_bot
Создание бота
Одним из заданий является запуск drand bot
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/installers/docker.sh)
noisd keys add <имя нового кошелька>
Сохраняем адрес кошелька и мнемонику
Запрашиваем токены (web кран временно не работает, запрашиваем токены в дискорде)
curl -X POST -d '{"address": "адрес_нового_кошелька","denom": "unois"}' -H "Content-type: application/json" https://faucet.noislabs.com/credit
Создаем и загружаем переменные
export WALLET_BOT=$(noisd keys show имя_нового_кошелька -a) export MNEMONIC='мнемоник_нового_кошелька' export NOIS_CONTRACT=nois14ex94lcyfsyjy3mj470yernkxykh2jvcvuepa63utqeuq4gggvmqx5sjm2 export ENDPOINT=http://95.216.241.112:30657/ export MONIKER=ваш_моникер #моникер должен совпадать с моникером валидатора source $HOME/.bash_profile
noisd q bank balances $WALLET_BOT
screen -S nois_bot
Дополнительные команды для взаимодействия со скрином можно посмотреть здесь
docker run -e MONIKER=$MONIKER -e "MNEMONIC=$MNEMONIC" -e PREFIX=nois -e DENOM=unois -e NOIS_CONTRACT=$NOIS_CONTRACT -e CHAIN_HASH=8990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce -e ENDPOINT=$ENDPOINT -e GAS_PRICE=0.05unois noislabs/nois-bot:latest
Проверяем работоспособность бота по ссылке
Каждый блок, 5 наиболее быстрых ботов получают награды, с остальных ботов списывается комиссия. Кран дает по 10 токенов один раз в 24 часа. Если ваш бот будет работать медленно, комиссия будет больше наград, количество токенов будет уменьшаться. Когда токенов будет недостаточно для транзакции, бот отключится. Запустить его снова можно после получения дополнительных токенов с крана через сутки.
Удаление ноды
Перед удалением ноды убедитесь, что сохранены файлы из каталога /root/.noisd/config
Для удаления ноды используйте следующие команды
sudo systemctl stop noisd && sudo systemctl disable noisd && \ sudo rm -rf $HOME/.noisd && sudo rm -rf $HOME/nois && \ sudo rm -rf $HOME/full-node && sudo rm -rf /etc/systemd/system/nois.service && \ sudo rm -rf /usr/local/bin/noisd && sudo systemctl daemon-reload
Обновление
Для обновления ноды сохраняем файл /root/.noisd/config/priv_validator_key.json, удаляем ноду и устанавливаем заново по гайду. Сохраненный файл возвращаем на место после восстановления кошелька и до создания валидатора
Полезные команды
sudo systemctl restart noisd
sudo journalctl -u noisd -f -o cat
noisd keys show $MONIKER_NOIS --bech val -a
Делегировать токены валидатору
noisd tx staking delegate noisvaloper1e0lvgjx4xspw358rfypmp297szupedu06jg6jg 1000000unois --from $WALLET_NOIS --chain-id $CHAIN_ID_NOIS
noisd tx staking edit-validator --identity="" --details="" --website="" \ --from $WALLET_NOIS --chain-id $CHAIN_ID_NOIS -y #identity - PGP ключ c keybase.io (устанавливает аватар валидатора) #details - текстовое описание валидатора