August 2, 2022

Near Stakewars node Install Guide

Полезные ссылки:

Минимальные требования: CPU: 4-Core, RAM: 8GB DDR4, Storage: 500GB SSD


Я установил на сервере Contabo L. Цена составляет 16 евро в месяц.


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

Обновляем пакеты

sudo apt update && sudo apt upgrade -y


Устанавливаем необходимые утилиты

Устанавливаем инструменты разработчика, Node.js, npm и другие необходимые пакеты

sudo apt install -y git binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev cmake gcc g++ python docker.io protobuf-compiler libssl-dev pkg-config llvm cargo
sudo apt install clang build-essential make
sudo apt install curl jq
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -  
sudo apt install nodejs
PATH="$PATH"

Проверяем версии

node -v
#v18.x.x
npm -v
#8.x.x

Устанавливаем NEAR-CLI

sudo npm install -g near-cli

Настраиваем окружение. Текущий тестнет проходит в сети shardnet. Вводим название сети в качестве переменной

export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc

Устанавливаем и настраиваем Python pip

sudo apt install python3-pip

USER_BASE_BIN=$(python3 -m site --user-base)/bin
export PATH="$USER_BASE_BIN:$PATH"

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

# устанавливаем необходимые пакеты
sudo apt install curl build-essential gcc make -y
# загружаем установочный скрипт Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

жмем 1) продолжить установку (по умолчанию).

# активируем среду Rust для текущей оболочки
source ~/.profile
source ~/.cargo/env

Создание кошелька

Заходим по ссылке https://wallet.shardnet.near.org/ и создаем кошелек NEAR для тестовой сети. Сохраняем мнемонику


Установка ноды

Клонируем репозиторий с нодой

git clone https://github.com/near/nearcore
cd nearcore
git fetch

Сверяем коммит. Актуальный можете проверить по ссылке https://github.com/near/stakewars-iii/blob/main/commit.md

git checkout c1b047b8187accbf6bd16539feb7bb60185bdc38

Качаем бинарники

cargo build -p neard --release --features shardnet

Создаем генезис

./target/release/neard --home ~/.near init --chain-id shardnet --download-genesis

Скачиваем конфиг

rm ~/.near/config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json

Создаем сервисный файл.

printf "[Unit]
Description=NEARd Daemon Service

[Service]
Type=simple
User=root
#Group=near
WorkingDirectory=/root/.near
ExecStart=/root/nearcore/target/release/neard run
Restart=on-failure
RestartSec=30
KillSignal=SIGINT
TimeoutStopSec=45
KillMode=mixed

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/neard.service

Старт сервиса

sudo systemctl daemon-reload
sudo systemctl enable neard
sudo systemctl restart neard

Смотрим логи и ждем пока нода синхронизируется

journalctl -n 100 -f -u neard

Проверяем синхронизацию

curl -s http://127.0.0.1:3030/status | jq .sync_info

Сверяем высоту блока Синхронизация должна быть False


Активация ноды и создание валидатора

Запускаем команду

near login

Копируем ссылку и открываем в браузере, в котором устанавливали кошелек в первом задании

Вводим Account_ID и даем все необходимые разрешения, после того как страница выдаст ошибку соединения, ваш кошелек будет пополнен.

Переходим в терминал и вводим имя кошелька (Account_ID).

После введения кошелька, терминал может зависнуть и не выдать надпись successfully. В данном случае алгоритм действий следующий:

near generate-key <ACCOUNT_ID> 
#ACCOUNT_ID должен быть в формате xxx.shardnet.near
#Например: trdm.shardnet.near

Сгенерируется JSON файл, в котором нужно скопировать публичный ключ

nano /root/.near-credentials/shardnet/trdm.shardnet.near.json

Копируем "public_key" и нажимаем Ctrl + X для выхода из редактора

В ссылке ниже заменяем <public_key> на скопированный ключ и открываем в браузере

https://wallet.shardnet.near.org/login/?referrer=NEAR+CLI&public_key=<public_key>&success_url=http://127.0.0.1:5000/

Продолжаем установку

Создаем переменные моникера, ID пула и ID аккаунта. Заменяем <MONIKER> на свой ник.

MONIKER=<MONIKER>
POOL=<MONIKER>.factory.shardnet.near
ACCOUNT_ID=<MONIKER>.shardnet.near

Сохраняем переменные, перезагружаем .bash_profile и проверяем значения переменных

echo "export MONIKER="${MONIKER}"" >> $HOME/.bash_profile
echo "export POOL="${POOL}"" >> $HOME/.bash_profile
echo "export ACCOUNT_ID="${ACCOUNT_ID}"" >> $HOME/.bash_profile

source $HOME/.bash_profile

echo -e "\nmoniker > ${MONIKER}.\n"
echo -e "\npool > ${POOL}.\n"
echo -e "\naccount_id > ${ACCOUNT_ID}.\n"

Создаем ключ валидатора

near generate-key $POOL

Заходим в файл и меняем слово private_key на secret_key

nano ~/.near-credentials/shardnet/$POOL.json

Нажимаем Ctrl + X и подтверждаем изменения

Копируем ключ в папку тестнета

cp ~/.near-credentials/shardnet/$POOL.json ~/.near/validator_key.json

Перезапускаем ноду

sudo systemctl daemon-reload
sudo systemctl enable neard
sudo systemctl restart neard

Настройка стекинг пула

Вызываем стекинг пул фэктори, создаем и разворачиваем новый стекинг пул. Важно! Заменяем <MONIKER> и <ACCOUNT_ID> (в моем случае: <MONIKER> - trdm; <ACCOUNT_ID> - trdm.shardnet.near). Вместо <public key> вставляем ключ из файла validator_key.json

NEAR_ENV=shardnet near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "<MONIKER>", "owner_id": "<ACCOUNT_ID>", "stake_public_key": "<public key>", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="$ACCOUNT_ID" --amount=30 --gas=300000000000000

Дополнительно! Для изменения настроек пула, например изменения комиссии, воспользуемся следующей командой

NEAR_ENV=shardnet near call $POOL update_reward_fee_fraction '{"reward_fee_fraction": {"numerator": 1, "denominator": 100}}' --accountId $ACCOUNT_ID --gas=300000000000000

При условии корректного исполнения программы, выведется хэш транзакции и ссылка на транзакцию в эксплорере:


Теперь можем застейкать еще токенов. В моем случае 500.

NEAR_ENV=shardnet near call $POOL deposit_and_stake --amount 500 --accountId $ACCOUNT_ID --gas=300000000000000

Важно! Оставьте немного токенов в кошельке для оплаты комиссий.


Мониторинг ноды

Проверка логов

journalctl -n 100 -f -u neard | ccze -A

Проверка версии ноды

curl -s http://127.0.0.1:3030/status | jq .version

Проверяем делегатора

near view $POOL get_accounts '{"from_index": 0, "limit": 10}' --accountId $ACCOUNT_ID

Проверка произведенных блоков. Заменить <POOL> на адрес своего пула в формате xxx.factory.shardnet.near

curl -s -d '{"jsonrpc": "2.0", "method": "validators", "id": "dontcare", "params": [null]}' -H 'Content-Type: application/json' 127.0.0.1:3030 | jq -c '.result.current_validators[] | select(.account_id | contains ("<POOL>"))'

Полезные команды

Перезапуск ноды

sudo systemctl restart neard

Проверка баланса

near view $POOL get_account_total_balance '{"account_id": "<MONIKER>.shardnet.near"}'

Анстейк токенов

#определенное количество
near call $POOL unstake '{"amount": "<amount yoctoNEAR>"}' \
--accountId $ACCOUNT_ID --gas=300000000000000

#все
near call $POOL unstake_all --accountId $ACCOUNT_ID \
--gas=300000000000000

Вывод токенов

#определенное количество
near call $POOL withdraw '{"amount": "<amount yoctoNEAR>"}' \
--accountId $ACCOUNT_ID --gas=300000000000000

#все
near call $POOL withdraw_all --accountId $ACCOUNT_ID \
--gas=300000000000000

Список активных валидаторов текущей эпохи

near validators current

Список валидаторов, чей пропозал принят и которые будут активны в следующей эпохе

near validators next