August 2, 2022

NEAR: Stakewars руководство по установке

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

Минимальные требования к серверу составляют:

CPU: 4-Core, RAM: 8GB DDR4, Storage: 500GB SSD

Я установил на сервере Zomro.

Характеристики моего сервера:

  • Шаблон ОС: Ubuntu-20.04-amd64-fromdisk
  • Дисковое пространство: SSD диск на 400 Гб с возможностью расширения
  • Оперативная память: 8 Гб
  • Кол-во процессоров: 4
  • Цена сервера: 34.79 EUR / мес.

Проверяем, что сервер имеет нужные характеристики процессора.

lscpu | grep -P '(?=.*avx )(?=.*sse4.2 )(?=.*cx16 )(?=.*popcnt )' > /dev/null \ 
&& echo "Supported" \ 
|| echo "Not supported"
как это выглядит на моем сервере

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

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

Настраиваем окружение.

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 для тестовой сети.

Сохраняем мнемонику в надежном месте.

Задание 2.1
Установка ноды

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

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

Проверяем коммит. По состоянию на 2 августа, актуальный коммит - c1b047b8187accbf6bd16539feb7bb60185bdc38. Актуальный коммит можно найти по ссылке 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

Создаем сервисный файл. Я устанавливал ноду под суперпользователем (root), так как на сервере будет только одна нода.

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

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

journalctl -n 100 -f -u neard | ccze -A
Если нет ни каких ошибок, то лог будет выглядить как на скриншоте

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

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

near login

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

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

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

Для дальнейшего удобства использования команд, создаем переменные моникера, 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

Задание 3
Настройка staking пула

Вызываем staking пул factory, создаем и разворачиваем новый staking пул. Заменяем <MONIKER> и <ACCOUNT_ID> (в моем случае: <MONIKER> - slashyreal; <ACCOUNT_ID> - slashyreal.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

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


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

near call slashyreal.factory.shardnet.near deposit_and_stake --amount 580 --accountId slashyreal.shardnet.near --gas=300000000000000

Задание 4
Проверка и мониторинг

Найти своего валидатора можно в эксплорере по ссылке: https://explorer.shardnet.near.org/nodes/validators
Или через терминал, для этого можно воспользоваться командой:

near proposals

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

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>"))'