July 28, 2022

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

Near Protocol запускает третью часть Stake Wars, целью которого является децентрализация сети NEAR, путем привлечение новых валидаторов.

Список задач (кликабельно) | Форма для отчетов (кликабельно)

Награды: Делегируют 50k $NEAR на вашу ноду и дадут 500 $NEAR за успешное выполнение всех заданий (отчеты нужно отправлять с 5-го по 8-е, а 1-4 задания по сути являются установкой самой ноды.

Вступить в Discord сервер NEAR, чтобы получать техническую помощь (рекомендовано!) | https://discord.gg/rwT6EKXcpU

Задание 1 | Часть 1 | Сервер

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

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

Я использовал более мощный сервер, но с меньшим хранилищем на ServerPoint.

Тариф:

Size G3.8
$35 / month
8 x Intel Xeon E5 CPU Cores
8 GBs of RAM
160 GBs SSD Storage
6000 GBs/mo data transfer

Какую OS ставить? Ubuntu 20 (20.04 Linux)
Почему Serverpoint?

Просто потому что использовал его ранее для разворачивания серверов под различные цели.

Как подключиться к серверу?

Существуют различные способы подключения, лично я пользуюсь базовыми способами без интерфейсов. Putty или обычная cmd.

Нажмите сочетая клавиш WIN+R

Введите cmd

В командой строке введите

ssh root@айпи-сервера

Введите пароль или вставьте предварительно скопировав и нажав ПКМ (правую кнопку мыши). Пароль вы не будете видеть, поэтому проверить правильность его копирования сможете только успешным входом.

Далее по нужде напишите "yes", чтобы принять сертификат.

При входе на сервер, используйте команду ниже, чтобы проверить подходит ли ваш сервер под данную задачу.

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

Если выдает "Supported" продолжаем установку

Сервер подходит (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

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

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

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

sudo npm install -g near-cli

Настраиваем окружение. Текущий Stake Wars на Near проходит в сети 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", то есть 1) продолжить установку (по умолчанию).

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

Задание 1 | Часть 2 | Создание NEAR кошелька

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

Сохраняем мнемоническую фразу в надежном месте. Запоминаем имя кошелька, он же Account_ID (прим. kauman.shardnet.near).

У вас на балансе должно быть 559 токенов $NEAR. У меня их уже нет, так как они находятся в стейкинге.

Задание 2 | Часть 1 | Установка ноды

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

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

Проверяем коммит. По состоянию на 29 июля, актуальный коммит:

c1b047b8187accbf6bd16539feb7bb60185bdc38

Актуальный коммит можно найти по ссылке https://github.com/near/stakewars-iii/blob/main/commit.md или в discord канале https://discord.gg/rwT6EKXcpU (#stake-wars-announcements)

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

Устанавливаем цветные логи (для простоты, удобства и красоты)

sudo apt install ccze

Команда для проверки логов

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

Смотрим логи и ждем пока нода найдет пиры, загрузит хедеры и синхронизируется. Вы можете увидеть загрузку хеадеров в консоли, чтобы понимать, что все идет по плану.

Это может занимать ориентировочно 1-2 часа.

Чтобы проверить, что синхронизация прошла успешно, используем следующую команду:

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

и смотрим на строчку syncing, она должна стать true когда синхронизации закончится (или нет, никто на этот ответ вопрос не дал, поэтому лично я просто загрузил хеадеры и на это ушло минут 5, а потом выполнил все по гайду и сутки спустя висит до сих пор "false", но это не мешает мне стать валидатором в следующую эпоху).

Задание 2 | Часть 2 | Аутентификация и создание валидатора

Осуществляем подключение

near login

Копируем ссылку и открываем в браузере, в котором осуществлён вход в кошелек NEAR в сети shardnet.

Вводим ACCOUNT_ID (прим. kauman.shardnet.near) и даем все необходимые разрешения. Страница выдаст ошибку - не пугаемся.

Возвращаемся в консоль и вводим имя кошелька ACCOUNT_ID (прим kauman.shardnet.near) и жмём enter.

Вы должны увидеть сообщение об успешной авторизации.

Если после ввода ничего не происходит, попробуйте подключиться к серверу другим методом. Например у меня не работала авторизация когда я использовал Putty для подключения к серверу, на решения вопроса ушли целые сутки и после попытки авторизации через обычный cmd все получилось.

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

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

Пример:

MONIKER=kauman
POOL=kauman.factory.shardnet.near 
ACCOUNT_ID=kauman.shardnet.near

Вводим значения по одному и проверяем значения переменных.

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 (у меня уже изменено)

Так же копируем сразу ваш public_key в текcтовик для дальнейшего использования

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

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

Копируем ключ в папку shardnet'a

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

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

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

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

Вызываем стекинг пул фэктори, создаем и разворачиваем новый стекинг пул.

Важно!

Заменяем <MONIKER> на ваш. (прим. kauman)
Заменяем <ACCOUNT_ID> на ваш. (прим. kauman.shardnet.near)
Заменяем <public key> на ранее скопированный из файла validator_key.json

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 call $POOL update_reward_fee_fraction '{"reward_fee_fraction": \ {"numerator": 1, "denominator": 100}}' --accountId $ACCOUNT_ID \ --gas=300000000000000

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

Теперь можем застейкать еще токенов. Не стейкайте все токены, чтобы оставить не много на комиссию, рекомендованный размер ~500 $NEAR.

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

Задание 4 | Проверяем валидатора

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


Использовав поиск по имени (прим. kauman.factory.shardnet.near)

или использовать консоль с командой и найти себя

near proposals

Готово!

Список полезный команд

Предложение валидатора указывает на то, что он хотел бы войти в набор валидатора, чтобы предложение было принято, оно должно соответствовать минимальной цене места. Команда:

near proposals


Cписок активных валидаторов в текущую эпоху, количество произведенных блоков, количество ожидаемых блоков и скорость онлайн. Используется для мониторинга наличия проблем у валидатора. Команда:

near validators current


Валидаторы, чьё предложение было принято одну эпоху назад, и которые войдут в набор валидаторов в следующую эпоху. Команда:

near validators next

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

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

Частые ошибки | Ответы на вопросы | Помощь

Q: Ввёл команду для просмотра логов и не могу выйти. Как перестать смотреть логи? Как остановить логи?

A: CTRL + C

Q: Как проверить версию ноды?

A: Используем команду

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

Q: Как проверить делегатора?

A: Используем команду

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

Q: Где найти сайт кошелька?

A: https://wallet.shardnet.near.org/

Q: Где найти эксплорер (explorer)?

A: https://explorer.shardnet.near.org/

Q: Как перезапустить ноду?

A: Используем команду

sudo systemctl restart neard