Stake Wars 3 — Гайд по ноде валидатора Near

Daruko
6 min readSep 6, 2022

--

Near Stake Wars III — событие, нацеленное на ознакомление членов сообщества с тем, как работают узлы Near с последующем отборов лучших участников в валидаторы основной сети.

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

Stake Wars FAQ.
Список заданий можно найти по ссылке.
Формы для отчета о выполненных заданиях: форма 1, форма 2.
Присоединиться к Discord-сообществу.
Присоединиться к Telegram-сообществу.

Выбор и аренда сервера

Вы можете выбрать любого из следующих провайдеров:

  • Amazon Web Services
  • Google Cloud Platform
  • Microsoft Azure
  • IBM Cloud
  • DigitalOcean
  • Hetzner

Системные требования: 8 ядер CPU, 16GB RAM, 500GB SSD.

Спойлер: Для узла shardnet достаточно 100–200gb свободного места.

Существует бюджетный вариант на Contabo — Cloud VPS L с NVMe.

Я же рекомендую Hetzner, с работой которого проблем точно не возникнет. Минимально подходит вариант CPX31, но лучше CPX41.

После аренды сервера вы получите данные для входа на почтовый ящик.

Подключайтесь к своему серверу через MobaXTerm.

Часть 1. Подготовка

Обновите сервер

sudo apt update && sudo apt upgrade -y

Установите Node.js и npm:

curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -  
sudo apt install build-essential nodejs

Введите Y

PATH="$PATH"

Проверьте версию Node.js и npm:

node -vnpm -v

Должно получиться v18.x.x и 8.x.x

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

sudo npm install -g near-cli

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

export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
echo 'export NEAR_ENV=shardnet' >> ~/.bash_profile
source $HOME/.bash_profile

Устанавливаем инструменты разработчика

sudo apt install -y git binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev cmake gcc g++ python3 docker.io protobuf-compiler libssl-dev pkg-config clang llvm cargo

Установите Python pip

sudo apt install python3-pip

Введите Y

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

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

sudo apt install clang build-essential make
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Введите y

Выберите 1

source ~/.profile 
source ~/.cargo/env

Скопируйте репозиторий nearcore

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

Введите следующую команду, <commit> замените на значение по этой ссылке

git checkout <commit>

Пример:

git checkout 1897d5144a7068e4c0d5764d8c9180563db2fe43

Компилируем бинарные файлы

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

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

sudo nano /etc/systemd/system/neard.service

Далее вводим следующие данные, но меняем на свои значения. Вместо <user> может быть root, директория может быть соответствующей

[Unit]
Description=NEARd Daemon Service

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

[Install]
WantedBy=multi-user.target

Пример того, как получилось у меня:

Запускаем сервис

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

Устанавливаем отображение красивого лога

sudo apt install ccze

Просмотреть лог

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

Такой лог значит что синхронизация началась

Создаем кошелек по этой ссылке. Нажимаем “Создать учетную запись”

Вводим название кошелька и нажимаем “Reserve My Accound ID”

Выбираем “Мнемоническая фраза” и нажимаем “Продолжить”

Сохраняем сид-фразу и снова жмем “Продолжить”

Вводим запрашиваемое слово, жмем “Проверить и завершить”

Если у вас снова попросят ввести всю мнемоническую фразу, то сделайте это

Поздравляю! Вы создали кошелек Near Shardnet (переключение в правом верхнем углу). На балансе автоматически должны появиться тестовые токены $near

Вводим в терминал команду

near login

Вводим y

Появившуюся ссылку введите в браузер, в котором только что создавали кошелек

Нажмите Next, Подключить, затем введите свой кошелек в формате название.shardnet.near

Вы попадете на такую страницу. Это значит что все в порядке и можно продолжать

В терминале введите свой кошелек в формате название.shardnet.near

Проверяем ключ валидатора

cat ~/.near/validator_key.json

Если ключ валидатора отсутствует, то генерируем validator_key.json, где <пул> надо заменить на название вашего будущего пула

near generate-key <пул>.factory.shardnet.near

Например:

near generate-key mypool.factory.shardnet.near

Редактируем сгенерированный файл

nano ~/.near-credentials/shardnet/<пул>.factory.shardnet.near.json

Замените надпись private_key на secret_key

Пример:

{
"account_id": "<пул>.factory.shardnet.near",
"public_key": "ed25519:HeaBJ3xLgvZacQWmEctTeUqyfSU4SDEnEwckWxd92W2G",
"secret_key": "ed25519:****"
}

Ctrl+x, y, enter

Скопируйте сгенерированный файл в папку .near

cp ~/.near-credentials/shardnet/<пул>.factory.shardnet.near.json ~/.near/validator_key.json

Перезапускаем узел

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

Настраиваем стейкинг пул, предварительно отредактировав эту команду

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

Замените следующие значения

  • <pool name> на название вашего пула (без .factory.shardnet.near)
  • <accountId> на ваш кошелек
  • <public key> на ключ, взятый из файла validator_key.json
  • Цифру 5 на желаемый процент комиссии пула
  • Цифру amount=30 на количество токенов, которое вы внесете в пул

Пример:

near call factory.shardnet.near create_staking_pool ‘{“staking_pool_id”: “mypool”, “owner_id”: “mywallet.shardnet.near”, “stake_public_key”: “ed25519:ключключываываыавключключключ”, “reward_fee_fraction”: {“numerator”: 5, “denominator”: 100}, “code_hash”:”DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ”}’ — accountId=”mywallet.shardnet.near” — amount=3000 — gas=300000000000000

После создания пула вы можете себя среди всех заявок валидаторов

near proposals
Мой пул

Сочетание клавиш для поиска по ключевым словам

ctr+shift+f

Проверьте лог и убедитесь что все хорошо

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

Если вы стали валидатором, то будет надпись Validator в обозначенном месте

Прочие команды

Добавить в стейкинг

near call <pool_id> deposit_and_stake --amount <amount> --accountId <accountId> --gas=300000000000000

Убрать из стейкинга

near call <pool_id> unstake '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000

Вынуть из стейкинга

near call <pool_id> withdraw '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000

Баланс стейкинга

near view <pool_id> get_account_staked_balance '{"account_id": "<accountId>"}'

Баланс того, что убрали из стейкинга

near view <pool_id> get_account_unstaked_balance '{"account_id": "<accountId>"}'

Доступно для вывода

near view <pool_id> is_account_unstaked_balance_available '{"account_id": "<accountId>"}'

Пинг

near call <pool_id> ping '{}' --accountId <accountId> --gas=300000000000000

Информация о делегаторах

near view <your pool>.factory.shardnet.near get_accounts '{"from_index": 0, "limit": 10}' --accountId <accountId>.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.prev_epoch_kickout[] | select(.account_id | contains (“<POOL_ID>”))’ | jq .reason

Сколько чанков производит узел

curl -r -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_ID"))'

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response