NEAR: Stake Wars

InnaKondratova
6 min readAug 2, 2022
NEAR: Stake Wars

Challenge 001: Подготавливаем сервер

Для начала проверим, все ли обновления установлены:

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
PATH=”$PATH”

Проверим версии установленных node.js и npm. Должно быть node.js ≥ v18.x.x и npm ≥ 8.x.x:

node -v
npm -v

у нас все ок

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

sudo npm install -g near-cli

near-cli установлен

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

export NEAR_ENV=shardnet

Также запускаем эти команды, чтобы установить постоянную среду рядом с тестовой сетью:

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

Challenge 002: Устанавливаем ноду

Заявленные разработчиком характеристики сервера:

Арендуем сервер у HETZNER (CPX31 + дополнительное место 500 Гб):

Характеристики нашего сервера

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

lscpu | grep -P ‘(?=.*avx )(?=.*sse4.2 )(?=.*cx16 )(?=.*popcnt )’ > /dev/null \
&& echo “Supported” \
|| echo “Not supported”

Как видно наш сервер подходит

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

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 clang llvm cargo

Ждем окончания установки

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

sudo apt install python3-pip

Ждем окончания установки Python pip

Настраиваем Python 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 & Cargo:

curl — proto ‘=https’ — tlsv1.2 -sSf https://sh.rustup.rs | sh

Активируем среду Rust для текущей оболочки:

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

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

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

Смотрим логи, ждем пока наша нода найдет пиры, загрузит хедеры и синхронизируется. Пишут, что это может занять около часа, но фактически проходит за 20–25 минут:

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

Активируем нашу ноду и создаем валидатор

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

near login

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

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

Создаем ключ валидатора (в формате: name.factory.shardnet.near):

near generate-key ccg.factory.shardnet.near

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

nano ~/.near-credentials/shardnet/ccg.factory.shardnet.near.json

Копируем данный файл в папку тестнета:

cp ~/.near-credentials/shardnet/ccg.factory.shardnet.near.json ~/.near/validator_key.json

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

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

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

Вызываем стейкинг пул фэктори, создаем и разворачиваем новый стейкинг пул. Важно! Для “staking_pool_id” в параметре указываем только “ccg”, а “.factory.shardnet.near” будет добавлено автоматически. Для “owner_id” и “accountId” указываем “ccg.shardnet.near”. Для “stake_public_key” вставляем ключ из файла validator_key.json

NEAR_ENV=shardnet near call factory.shardnet.near create_staking_pool ‘{“staking_pool_id”: “ccg”, “owner_id”: “ccg.shardnet.near”, “stake_public_key”: “ed25519:7VZmhcyLQECfLy9zkGBMAjzAhDmS25bG8h1aMszPYSaj”, “reward_fee_fraction”: {“numerator”: 5, “denominator”: 100}, “code_hash”:”DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ”}’ — accountId=”ccg.shardnet.near” — amount=30 — gas=300000000000000

Немного изменим параметры комиссии нашего пула:

near call ccg.factory.shardnet.near update_reward_fee_fraction ‘{“reward_fee_fraction”: {“numerator”: 1, “denominator”: 100}}’ — accountId ccg.shardnet.near — gas=300000000000000

Challenge 004: Проверка и мониторинг ноды

Лог можно посмотреть так:

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

все ок

Проверяем версию нашей ноды:

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

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

near view ccg.factory.shardnet.near get_accounts ‘{“from_index”: 0, “limit”: 10}’ — accountId ccg.shardnet.near

Проверяем причину kick-а валидатора:

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 (“ccg”))’ | 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 (“ccg”))’

Challenge 005: Установка ноды на облачном сервере

Арендуем сервер у HETZNER (CPX31 + дополнительное место 500 Гб):

Характеристики нашего сервера

Стоимость аренды сервера: 12 евро/мес. (с учетом доп. 500 Гб получается 26 евро/мес.)

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

InnaKondratova
InnaKondratova

Written by InnaKondratova

Ambassadors, content maker, contributor

No responses yet

Write a response