Nolus: Installation Guide (Testnet is over)
Nolus Protocol — это финансовый пакет Web3, который предлагает инновационный подход к денежным рынкам с новым решением для дальнейшего развития пространства DeFi. В протоколе используется молниеносный полуразрешенный PoS L1, построенный с использованием Cosmos SDK, где смарт-контракты разрабатываются на Rust и выполняются в рамках модели изолированной песочницы CosmWASM, обеспечивая надежную безопасность и совместимость с несколькими цепочками.
Тестнет эксплорер - http://explorer.nodera.org/nolus/staking
Website
Discord
Оглавление
- Подготовка сервера
- Установка ноды
- State sync
- Snapshot
- Создание кошелька и валидатора
- Обновление
- Задания Crew3 (RPC, API, gRPC)
- Удаление ноды
- Полезные команды
Подготовка сервера
На данном этапе устанавливаю на сервере Hetzner - CPX21: 3 CPU, 4 GB RAM, 80 GB SSD, дальше буду смотреть по нагрузке, возможно понадобится 4 CPU, 8 GB RAM, 200 GB SSD.
sudo apt update && sudo apt upgrade -y
Устанавливаем инструменты разработчика и необходимые пакеты
sudo apt install curl build-essential pkg-config libssl-dev git wget jq make gcc tmux chrony -y
wget https://go.dev/dl/go1.18.4.linux-amd64.tar.gz; \ rm -rv /usr/local/go; \ tar -C /usr/local -xzf go1.18.4.linux-amd64.tar.gz && \ rm -v go1.18.4.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/Nolus-Protocol/nolus-core cd nolus-core git checkout v0.1.39 make install
nolusd version #0.1.39
MONIKER_NOLUS=вводим свое имя CHAIN_ID_NOLUS=nolus-rila PORT_NOLUS=37
Сохраняем переменные, перезагружаем .bash_profile и проверяем значения переменных
echo "export MONIKER_NOLUS="${MONIKER_NOLUS}"" >> $HOME/.bash_profile echo "export CHAIN_ID_NOLUS="${CHAIN_ID_NOLUS}"" >> $HOME/.bash_profile echo "export PORT_NOLUS="${PORT_NOLUS}"" >> $HOME/.bash_profile source $HOME/.bash_profile echo -e "\nmoniker_NOLUS > ${MONIKER_NOLUS}.\n" echo -e "\nchain_id_NOLUS > ${CHAIN_ID_NOLUS}.\n" echo -e "\nport_NOLUS > ${PORT_NOLUS}.\n"
nolusd config chain-id $CHAIN_ID_NOLUS nolusd config keyring-backend test nolusd config node tcp://localhost:${PORT_NOLUS}657 sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025unls\"/" $HOME/.nolus/config/app.toml
nolusd init $MONIKER_NOLUS --chain-id $CHAIN_ID_NOLUS
Загружаем генезис файл и адресбук
wget https://raw.githubusercontent.com/Nolus-Protocol/nolus-networks/main/testnet/nolus-rila/genesis.json mv ./genesis.json ~/.nolus/config/genesis.json wget -O $HOME/.nolus/config/addrbook.json "https://raw.githubusercontent.com/sergiomateiko/addrbooks/main/nolus/addrbook.json"
seeds="" PEERS="$(curl -s "https://raw.githubusercontent.com/Nolus-Protocol/nolus-networks/main/testnet/nolus-rila/persistent_peers.txt")" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" ~/.nolus/config/config.toml
Изменяем порты для возможности дальнейшего подселения других нод проектов экосистемы Космос на один сервер
sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${PORT_NOLUS}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${PORT_NOLUS}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${PORT_NOLUS}060\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${PORT_NOLUS}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${PORT_NOLUS}660\"%" $HOME/.nolus/config/config.toml sed -i.bak -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${PORT_NOLUS}317\"%; s%^address = \":8080\"%address = \":${PORT_NOLUS}080\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${PORT_NOLUS}090\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${PORT_NOLUS}091\"%" $HOME/.nolus/config/app.toml
pruning="custom" pruning_keep_recent="100" pruning_keep_every="0" pruning_interval="10" sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.nolus/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.nolus/config/app.toml sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.nolus/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.nolus/config/app.toml
nolusd tendermint unsafe-reset-all --home $HOME/.nolus
printf "[Unit] Description=Nolus Service After=network.target [Service] Type=simple User=$USER ExecStart=$(which nolusd) start Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target" > /etc/systemd/system/nolusd.service
Запускаем сервис и проверяем логи
sudo systemctl daemon-reload && \ sudo systemctl enable nolusd && \ sudo systemctl restart nolusd && \ sudo journalctl -u nolusd -f -o cat
Ждем окончания синхронизации, проверить синхронизации можно командой
nolusd status 2>&1 | jq .SyncInfo
Если вывод показывает false, синхронизация завершена.
State sync
sudo systemctl stop nolusd cp $HOME/.nolus/data/priv_validator_state.json $HOME/.nolus/priv_validator_state.json.backup nolusd tendermint unsafe-reset-all --home $HOME/.nolus SNAP_RPC=http://rpc.nolus.ppnv.space:34657 SNAP_PEER=1a0bb6c35e2663202535d4b849ff06250762d299@rpc.nolus.ppnv.space:35656 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.bak -e "s|^enable *=.*|enable = true|" $HOME/.nolus/config/config.toml sed -i.bak -e "s|^rpc_servers *=.*|rpc_servers = \"$SNAP_RPC,$SNAP_RPC\"|" $HOME/.nolus/config/config.toml sed -i.bak -e "s|^trust_height *=.*|trust_height = $BLOCK_HEIGHT|" $HOME/.nolus/config/config.toml sed -i.bak -e "s|^trust_hash *=.*|trust_hash = \"$TRUST_HASH\"|" $HOME/.nolus/config/config.toml mv $HOME/.nolus/priv_validator_state.json.backup $HOME/.nolus/data/priv_validator_state.json sudo systemctl restart nolusd && sudo journalctl -u nolusd -f -o cat
Snapshot
Останавливаем ноду и удаляем данные
sudo systemctl stop nolusd cp $HOME/.nolus/data/priv_validator_state.json $HOME/.nolus/priv_validator_state.json.backup rm -rf $HOME/.nolus/data
wget http://95.216.4.183:8001/tRDM_nolus.tar.gz tar -xf tRDM_nolus.tar.gz -C $HOME/.nolus mv $HOME/.nolus/priv_validator_state.json.backup $HOME/.nolus/data/priv_validator_state.json rm -rf tRDM_nolus.tar.gz
Перезапускаем ноду и проверяем логи
sudo systemctl restart nolusd && sudo journalctl -u nolusd -f -o cat
Создание кошелька и валидатора
nolusd keys add $MONIKER_NOLUS
Сохраняем мнемоник фразу в надежном месте!
Если вы участвовали в предыдущих тестнетах, восстанавливаем кошелек командой и вводим мнемоник фразу
nolusd keys add $MONIKER_NOLUS --recover
Создаем переменную с адресом кошелька и валидатора
WALLET_NOLUS=$(nolusd keys show $MONIKER_NOLUS -a) VALOPER_NOLUS=$(nolusd keys show $MONIKER_NOLUS --bech val -a) echo "export WALLET_NOLUS="${WALLET_NOLUS}"" >> $HOME/.bash_profile echo "export VALOPER_NOLUS="${VALOPER_NOLUS}"" >> $HOME/.bash_profile source $HOME/.bash_profile echo -e "\nwallet_NOLUS > ${WALLET_NOLUS}.\n" echo -e "\nvaloper_NOLUS > ${VALOPER_NOLUS}.\n"
Для пополнения кошелька тестовыми токенами, перевходим в дискорд и запрашиваем токены в канале testnet-faucet.
nolusd q bank balances $WALLET_NOLUS
После завершения синхронизации и пополнения кошелька, создаем валидатора
nolusd tx staking create-validator \ --amount 1900000unls \ --from $WALLET_NOLUS \ --commission-rate "0.07" \ --commission-max-rate "0.20" \ --commission-max-change-rate "0.1" \ --min-self-delegation "1" \ --pubkey=$(nolusd tendermint show-validator) \ --moniker $MONIKER_NOLUS \ --chain-id "nolus-rila" \ --gas-prices 0.0042unls \ --identity="" \ --details="" \ --website="" \ -y
Проверяем своего валидатора в эксплорере - http://explorer.nodera.org/nolus/staking
Мониторинг можно настроить с использованием Panic! бота по гайду - https://nodera.org/panic_bot
Обновление
sudo systemctl stop nolusd
cd rm -rf nolus-core git clone https://github.com/Nolus-Protocol/nolus-core.git cd nolus-core git checkout v0.1.43 make install
nolusd version
sudo systemctl restart nolusd && sudo journalctl -u nolusd -f -o cat
Задания Crew3
nano $HOME/.nolus/config/app.toml
В разделе API Configuration устанавливаем следующие значения:
В разделе gRPC Configuration устанавливаем следующие значения:
Сохраняем изменения в файле сочетанием клавиш Ctrl +x, затем Y и Enter.
nano $HOME/.nolus/config/config.toml
В разделе RPC Server Configuration Options устанавливаем следующие значения:
В разделе Transaction Indexer Configuration Options устанавливаем следующие значения:
Если сипользуете файервол на сервере, открываем порты
ufw allow 37657 ufw allow 37090 ufw allow 37317
Подтверждаем выполнение заданий в Crew3
Expose RPC - http://<ваш_порт>:37657/
Expose API - http://<ваш_порт>:37317/
Expose gRPC - http://<ваш_порт>:37090/
Удаление ноды
Перед удалением ноды убедитесь, что сохранены файлы из каталога /root/.nolus/config
Для удаления ноды используйте следующие команды
sudo systemctl stop nolusd sudo systemctl disable nolusd sudo rm -rf $HOME/.nolus sudo rm -rf $HOME/nolus sudo rm -rf /etc/systemd/system/nolusd.service sudo rm -rf /usr/local/bin/nolusd sudo systemctl daemon-reload
Полезные команды
sudo systemctl restart nolusd
sudo journalctl -u nolusd -f -o cat
nolusd keys show $MONIKER_NOLUS --bech val -a
Делегировать токены валидатору
nolusd tx staking delegate nolusvaloper1wk0s2249hrskrzmflkp9u43yrxlnra6yxklwwq 90000000 --from $WALLET_NOLUS --chain-id $CHAIN_ID_NOLUS
nolusd tx staking edit-validator --identity="" --details="" --website="" \ --from $WALLET_NOLUS --chain-id $CHAIN_ID_NOLUS -y #identity - PGP ключ c keybase.io (устанавливает аватар валидатора) #details - текстовое описание валидатора