Как я поставил ноду NEAR
Вступление
StakeWars — программа по привлечению новых валидаторов в сеть Near. Каждый участник может поставить ноду, запустить валидатора и выполнять задания от команды Near.
Это технически сложная нода, требующая определенного набора знаний о работе с Linux, Cron, смарт-контрактами, валидаторами и так далее. Но мы тут для получения UNP (Unlocked Near Points), каждый поинт будет конвертирован на ваш аккаунт в мейннете по курсу 1 UDP = 1 NEAR.
А награды? Существует таблица, включающая в себя все челленджи и количество начисляемых за их выполнения поинтов.
- Максимум 500 $Near для участников в мейннете (разлок сразу)
- Максимум 50 000 $Near делегации для новых валидаторов в мейннете.
Количество наград напрямую определяется количеством выполненных вами заданий.
Мы будем выполнять все задания, которые не требуют от нас сверх-усилий, но я хочу вас предупредить — легко не будет.
С чего начать?
- Первым делом заполняем форму. (Будет KYC, указывайте имя из документов)
- Вступаем в Discord. Следить за актуальными анонсами, связанными со StakeWars можно тут.
Выбираем сервер
Требования к серверу: 4 CPU x 8 RAM x 500 SSD
Вы можете взять совершенно любой сервер. Найти подходящий на Hetzner, взять на вдсине (если вы богат), а я возьму сервер 4 х 8 х 400 на Contabo. Такой сервер обойдется в ~8 usd/мес.
Установка ноды
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"
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
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
./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
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
Активация ноды
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
cat /root/logs/all.log
5) Ищем свой аккаунт в эксплорере (name.factory.shardnet.near) и делаем скрин пинга.
Отправляем скриншот 4-5 успешных пингов в форму.
9 челлендж
sudo iptables -A INPUT -p tcp --dport 3030 -j ACCEPT
sudo systemctl restart neard
2) Проверяем доступность порта. Открываем у себя в браузере:
https://ip_сервера:3030/status
3) Проверяем аптайм своей ноды тут. Аптайм выше 70%? Делаем скрин и отправляем в форму вместе с ссылкой из второго пункта.
note: аптайм зависит от регулярности ping. То есть должен правильно работать кронтаб скрипт.
Полезные команды
journalctl -n 100 -f -u neard | ccze -A
sudo systemctl restart neard
near view $POOL get_account_total_balance '{"account_id": "$ACCOUNT_ID"}'
4) Список текущих активных валидаторов
near validators current
5) Список будущих активных валидаторов
near validators next