Сompleted testnets
October 5, 2022

NOIS: Installation Guide (Testnet is over)

Nois Network — это Proof of Stake блокчейн-протокол, который позволяет разработчикам использовать безопасную, эффективную и беспристрастную случайность через IBC.

Тестнет эксплорер - http://explorer.nodera.org/nois-003/

DYOR:

Website
Discord
Twitter

Оглавление


Подготовка сервера

Оглавление

На данном этапе устанавливаю на сервере 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

Устанавливаем GO

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 - текстовое описание валидатора

Nodera

Telegram | Discord | Twitter