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