August 1, 2022

Как я поставил ноду NEAR

Вступление

StakeWars — программа по привлечению новых валидаторов в сеть Near. Каждый участник может поставить ноду, запустить валидатора и выполнять задания от команды Near.

Это технически сложная нода, требующая определенного набора знаний о работе с Linux, Cron, смарт-контрактами, валидаторами и так далее. Но мы тут для получения UNP (Unlocked Near Points), каждый поинт будет конвертирован на ваш аккаунт в мейннете по курсу 1 UDP = 1 NEAR.

А награды? Существует таблица, включающая в себя все челленджи и количество начисляемых за их выполнения поинтов.

  • Максимум 500 $Near для участников в мейннете (разлок сразу)
  • Максимум 50 000 $Near делегации для новых валидаторов в мейннете.

Количество наград напрямую определяется количеством выполненных вами заданий.

Мы будем выполнять все задания, которые не требуют от нас сверх-усилий, но я хочу вас предупредить — легко не будет.

Дедлайн: 9 сентября 2022 года


С чего начать?

  1. Первым делом заполняем форму. (Будет KYC, указывайте имя из документов)
  2. Вступаем в Discord. Следить за актуальными анонсами, связанными со StakeWars можно тут.


Выбираем сервер

Требования к серверу: 4 CPU x 8 RAM x 500 SSD

Вы можете взять совершенно любой сервер. Найти подходящий на Hetzner, взять на вдсине (если вы богат), а я возьму сервер 4 х 8 х 400 на Contabo. Такой сервер обойдется в ~8 usd/мес.


Установка ноды

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

sudo apt update && sudo apt upgrade -y

2) Cоздаем учетную запись тут:

3) Устанавливаем все необходимые пакеты (построчно):

sudo apt install ccze
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"

4) Устанавливаем near-cli:

sudo npm install -g near-cli

5) Устанавливаем переменные среды (построчно):

export NEAR_ENV=shardnet 
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc

6) Устанавливаем питон (построчно):

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

7) Устанавливаем и запускаем RUST:

sudo apt install curl build-essential gcc make -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Пишем Y, затем 1 и enter.
source ~/.profile
source ~/.cargo/env

8) Клонируем репозиторий:

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

9) Переходим по ссылке и копируем актуальный коммит. Вставляем его вместо commit_hash в команду и выполняем:

git checkout commit_hash

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

cargo build -p neard --release --features shardnet

11) Загружаем генезис:

./target/release/neard --home ~/.near init --chain-id shardnet --download-genesis

12) Скачиваем измененный конфиг (построчно):

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 apt-get install awscli -y
rm ~/.near/genesis.json
cd ~/.near
wget https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/genesis.json

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

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

Активация ноды

1) Вводим:

near login

Копируем ссылку и авторизуем приложение через ранее созданный near wallet. Затем вводим имя своего кошелька в консоли.

2) Устанавливаем переменные (построчно, заменяем #NODENAME на свой логин из предыдущего пункта. То, что до первой точки.):

NODENAME=#NODENAME
POOL=#NODENAME.factory.shardnet.near
ACCOUNT_ID=#NODENAME.shardnet.near

## Пример:
# NODENAME=egex
# POOL=egex.factory.shardnet.near
# ACCOUNT_ID=egex.shardnet.near

Сохраняем их в баш профиль и перезагружаем его (построчно):

echo "export NODENAME="${NODENAME}"" >> $HOME/.bash_profile
echo "export POOL="${POOL}"" >> $HOME/.bash_profile 
echo "export ACCOUNT_ID="${ACCOUNT_ID}"" >> $HOME/.bash_profile 
source $HOME/.bash_profile

3) Генирируем ключ валидатора:

near generate-key $POOL

Заходим в файл, меняем private_key на secret_key

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

Сохраняем: CTRL + X -> Y -> ENTER

4) Переносим ключ в папку нира:

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

Настраиваем пул для стейкинга

1) Копируем ваш public_key пару строк выше и создаем переменную для него:

PUBKEY=#PUBLIC_KEY
echo "export PUBKEY="${PUBKEY}"" >> $HOME/.bash_profile
source $HOME/.bash_profile

Проверяем, все ли переменные на месте:

echo -e "\nnodename > ${NODENAME}\n" 
echo -e "\npool > ${POOL}\n" 
echo -e "\naccount_id > ${ACCOUNT_ID}\n"
echo -e "\npubkey > ${PUBKEY}\n"

2) Создаем новый стейкинг пул:

near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "'${NODENAME}'", "owner_id": "'${ACCOUNT_ID}'", "stake_public_key": "'${PUBKEY}'", "reward_fee_fraction": {"numerator": '5', "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="${ACCOUNT_ID}" --amount=495 --gas=300000000000000

При условии правильного выполнения вы получите ссылку на транзакцию в эксплорере:


Создаём задачу в crontab | 6 челлендж

1) Создаем папки и файл скрипта

mkdir logs
mkdir scripts
cat > /root/scripts/ping.sh
##### вставляем то что ниже
#!/bin/sh 
# Ping call to renew Proposal added to crontab

export NEAR_ENV=shardnet 
export LOGS=/root/logs

echo "---" >> $LOGS/all.log
date >> $LOGS/all.log
near call <nickname.factory.shardnet.near> ping '{}' --accountId <nickname.shardnet.near> --gas=300000000000000 >> $LOGS/all.log
near proposals | grep <nickname> >> $LOGS/all.log
near validators current | grep <nickname> >> $LOGS/all.log
near validators next | grep <nickname> >> $LOGS/all.log

Предварительно заменяем <nickname> на ваш ник, убираем ёлочки. Получится вот так:

Вставили? Нажимаем enter -> ctrl+d.

2) Создаем новую задачу крону (построчно):

crontab -l > cron
echo "0 */2 * * * sh /root/scripts/ping.sh" >> cron
crontab cron
rm cron

3) Проверяем наличие задачи в кроне:

crontab -l

4) Смотрим логи:

cat /root/logs/all.log

5) Ищем свой аккаунт в эксплорере (name.factory.shardnet.near) и делаем скрин пинга.

Отправляем скриншот 4-5 успешных пингов в форму.



9 челлендж

1) Открываем порт 3030:

sudo iptables -A INPUT -p tcp --dport 3030 -j ACCEPT

Перезапускаем near:

sudo systemctl restart neard

2) Проверяем доступность порта. Открываем у себя в браузере:

https://ip_сервера:3030/status

3) Проверяем аптайм своей ноды тут. Аптайм выше 70%? Делаем скрин и отправляем в форму вместе с ссылкой из второго пункта.

note: аптайм зависит от регулярности ping. То есть должен правильно работать кронтаб скрипт.


Полезные команды

1) Просмотр логов

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

2) Перезапуск ноды

sudo systemctl restart neard

3) Проверка баланса

near view $POOL get_account_total_balance '{"account_id": "$ACCOUNT_ID"}'

4) Список текущих активных валидаторов

near validators current

5) Список будущих активных валидаторов

near validators next