August 6, 2022

NEAR Stake Wars 3: Full guide

Добрый день от команды mmg. Сегодня речь пойдет о проекте NEAR, а точнее о их мероприятии Stake Wars 3. Данное мероприятие направлено на привлечение новых валидаторов в основную сеть. Вы сможете познать азы валидаторства, поставив ноду и выполнив ряд заданий. Всего вы можете получить не больше 500 $NEAR на свой основной кошелек и не более 50к $NEAR может быть делегировано в пул вашей основной сети, если вы решите стать полноценным валидатором после мероприятия. Всего на данный момент существует 9 заданий, за каждое из них назначена свой награда. В данном гайде описано решение всех заданий, а также решение возникающих проблем у участников.

Ссылки:

Информация о мероприятии

Список заданий

Регистрационная форма

Discord



Подготовка оборудования

Первым делом нам понадобится сервер, его можно приобрести либо у Contabo (как сделал я), либо у Hetzner. В пятом задании (за него дают только делегированные монеты $NEAR) одно из условий, это арендовать сервер у популярного хостинга, в списке есть Hetzner. Я же арендовал у Contabo, его нет в списке.

Минимальные требования: 4 CPU, 8GB RAM, 500GB SSD

Рекомендую: 6 CPU, 16GB RAM, 400GB SSD (~18$)

Если берете у Contabo советую выбирать VPS M и регион США.

Для покупки сервера вам понадобится иностранная карта, но есть выход. Приложение Pyypl с его помощью можно создать карту и забросить на нее крипту, для регистрации необходимо иметь загранпаспорт. Сервис удобен тем, что можно совершать пополнение прямо через приложение Binance с помощью Binance pay.

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

Ссылки на скачивание:

Google play

Apple store


Настройка сервера

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

Для начала необходимо подключится к серверу. Вводим ip, в поле пользователь root и пароль, который вы придумали при покупки сервера.

Первым делом вы можете изменить порт и создать нового пользователя, это не обязательно, но советую всегда заботится о безопасности.

Изменить порт:

nano /etc/ssh/sshd_config

Необходимо стереть решетку и придумать любой порт, затем сохраняем и закрываем файл:

ctr+x->y->enter

Создаем нового пользователя:

sudo useradd -m -s /bin/bash -c "Administrative User" User_name

Задаем пароль и добавляем в группу sudo:

sudo passwd User_name
sudo usermod -aG sudo User_name
su - User_name

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

sudo shutdown -r now

Установка инструментов разработчика

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

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 -v
#18.xx
npm -v
#8.xx

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

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

Установите pip.py:

sudo apt install python3-pip
#Настройка
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

Выбираем пункт 1 и жмем enter:

Задаем источник среды:

source $HOME/.cargo/env

Задание 1

Создаем кошелек в тестовой сети.

Кошелек: https://wallet.shardnet.near.org/

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

В следующее окно вставляем свою мнемоническую фразу и жмем найти учетную запись, тогда на вашем кошельке окажется 50 $NEAR.

Если у вас не получается создать кошелек (выдает ошибку), то у вас вряд ли получится это сделать, следует попробовать позже и перейти к следующему пункту.

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

 sudo npm install -g near-cli

Поставим сеть shardnet:

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

Ничего в консоли не должно высвечиваться


Задание 2

Награды: 30 NEAR

Дедлайн: 7 сентября

Далее мы преступаем непосредственно к установки и запуску самой ноды.

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

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

Проверяем commit. Он должен изменятся, поэтому копируйте по следующей ссылке: https://github.com/near/stakewars-iii/blob/main/commit.md

git checkout <commit>

Это пример, который актуален на 10.08.2022, вам же лучше проверить по ссылке выше:

git checkout 68bfa84ed1455f891032434d37ccad696e91e4f5

Далее вам необходимо скомпилировать бинарный файл, это занимает около 15-20 минут и зависит от мощности вашего сервера:

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

Для работы ноды требуется рабочий каталог со скаченными файлами конфигураций. Для этого используйте следующую команду:

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

Файл config.json на модифицирован, поэтому его стандартная версия нам не подходит, нужно скачать обновленную:

rm ~/.near/config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json

Установите AWS-клиент:

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

Если у вас не получается сделать этот шаг, то в репозитории вашей системы AWS-клиент устарел. Обновите его следующей командой:

pip3 install awscli --upgrade

Перед запуском ноды, вы можете сделать более красивые логи:

sudo apt install ccze

Теперь вам нужно запустить ноду и дождаться полной синхронизации. Сначала будут скачиваться headers, затем blocks. Вы должны дождаться полной их загрузки, в среднем это занимает около 1,5-2 часа:

cd ~/nearcore
./target/release/neard --home ~/.near run

Вот так выглядят логи после синхронизации.

После синхронизации вы можете выйти из логов и продолжить выполнения задания:

ctr+c

Следующий этап это предоставление полного доступа вашего кошелька ноде.

Начать авторизацию. Введите следующую команду и кликните по ссылке:

near login

Вас перекинет на сайт кошелька, после чего вы нажмете на кнопку продолжить и вас попросят ввести название вашего аккаунта в таком формате: имя_аккаунта.shardnet.near.

В следствии чего, вы увидите на экране данное сообщение. Это нормально!

Вернитесь назад и в консоль вставьте: имя_аккаунта.shardnet.near.


Решение проблем

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

В командой строке вводим команду генерации ключа доступа (без скобок):

near generate-key <xx.shardnet.near>
#Где xx - это ник вашего аккаунта

переходим в сгенерированный файл:

nano /home/.near-credentials/shardnet/xx.shardnet.near.json

Копируем public_key и сохраняем его в любом удобном месте.

Затем вставляем его в ссылку вместо public_key:

https://wallet.shardnet.near.org/login/?referrer=NEAR+CLI&public_key=<public_key>&success_url=http://127.0.0.1:5000/

Затем переходим по ссылки и делаем все что необходимо.


Продолжаем выполнение 2 задания

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

near generate-key xx.shardnet.near
#где xx - это ваш ник

Заходим в сгенерированный файл:

nano ~/.near-credentials/shardnet/xx.shardnet.near.json
#где xx - это ваш ник

Изменяем в файле accaunt_id, вставляя factory перед shardnet, также необходимо заменить private_key на secret_key. Вот так должно выглядеть:

{
  "account_id": "....factory.shardnet.near",
  "public_key": "ed25...",
  "secret_key": "ed25..."
}
Ctr+x->y->enter

Затем копируем этот файл в другую папку:

cp ~/.near-credentials/shardnet/xx.shardnet.near.json ~/.near/validator_key.json

Дальше необходимо создать сервисный файл. Используем для этого команду:

sudo nano /etc/systemd/system/neard.service

Вставляем в него скрипт, но вместо USER (в 3х-местах) прописываем ваше имя пользователя на сервере:

[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 

Сохранить и выйти:

ctr+x->y->enter

Запускаем сервисный файл:

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

На этом 2 задание можно считать выполненным. Вы запустили ноду валидатора, поздравляю!

Вы можете посмотреть логи своей ноды с помощью команды:

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

Задание 3

Награды: 10 NEAR

Дедлайн: 7 сентября

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

Перед тем как ввести эту команду проверьте, чему равна цена кресла валидатора:

near validators current

На данный момент seat price = 580 $NEAR(10.08.2022). Если у вас есть столько, а лучше немного больше, то вы сможете стать валидатором. Но в любом случае стейкинг пул стоит создать сейчас.

Команда создания стейкинг пула:

near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "<pool id>", "owner_id": "<accountId>", "stake_public_key": "<public key>", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="<accountId>" --amount=67 --gas=300000000000000

В скобках:

pool id: здесь вводим само название пула, без shardnet.near, то есть в моем случае просто "mmg".

owner id: Здесь вводим имя владельца пула уже с shardnet.near, то есть в моем случае "mmg.shardnet.near"

AccountId: Здесь нужно ввести имя кошелька, то есть в моем случае "mmg.shardnet.near".

Пример:

near call factory.shardnet.near create_staking_pool '{"staking_pool_id":"mmg", "owner_id":"mmg.shardnet.near", "stake_public_key":"здесь ваш публичный ключ", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="mmg.shardnet.near" --amount=67 --gas=300000000000000

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

near proposals

Для поиска как в браузере:

ctr+shift+f

Вы также можете изменить размер комиссии, которую вы берете за стейкинг:

near call <pool_id> update_reward_fee_fraction '{"reward_fee_fraction": {"numerator": 1, "denominator": 100}}' --accountId <account_id> --gas=300000000000000

Измените значение numerator, при условии что denominator = 100, numenator = 1, это 1%. Вы можете изменять числитель и знаменатель в любых пропорциях. Здесь pool_id,account_id полные.


Остальные важные команды

Добавить в стейкинг:

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
#yoctoNEAR = количество near+24нуля например 5 near= 5*10^24 yoctoNEAR

Разблокировать из стейкинга:

near call <pool_id> withdraw '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000
#yoctoNEAR = количество near+24нуля например 5 near= 5*10^24 yoctoNEAR

Пинг, это важная вещь, необходимая для обновления новых предложений и баланса для делегаторов:

near call <pool_id> ping '{}' --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>"}'

Задание 4

Награды: 15 NEAR

Дедлайн: 7 сентября

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

Проверьте свои логи:

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

Это логи валидатора.

Также скачайте RPC:

sudo apt install curl jq

Основные команды

Проверка версии RPC:

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

Информация о делегаторах:

near view <your pool>.factory.shardnet.near get_accounts '{"from_index": 0, "limit": 10}' --accountId <accountId>.shardnet.near

В двух следующих командах нужно писать только ник вместо pool_id, то есть, в моем случае просто mmg.

Узнать причину, по которой вас собираются исключить из валидаторов:

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

Задание 5

Награды: 5000 делегированных NEAR в ваш пул

Дедлайн: 7 сентября

В 5 задании вам нужно написать статью о том, как вы настроили свою ноду, но можно это сделать только если вы поставили свою ноду на одном из топовых провайдеров.

Список топов:

  • Веб-сервисы Амазонки
  • Облачная платформа Google
  • Microsoft Azure
  • IBM Облако
  • DigitalOcean
  • Хетцнер

Задание 6

Награды: 5 NEAR

Дедлайн: 7 сентября

Вы помните, что я говорил о важности пинга? Так вот, это задание заключается в том, что необходимо настроить cron демона, то есть, сделать так, чтобы пинг выполнялся автоматически в определенном промежутке времени (каждые 2 часа).

Первым делом создаем две папки в директории пользователя:

cd
mkdir –p scripts
mkdir –p logs

Создаем скрипт:

cd scripts
sudo nano ping.sh

Вставляем туда следующий скрипт, но изменяем USER_ID, на ваше имя пользователя на сервер, POOLID и AccountID на ваш ник:

#!/bin/sh
# Ping call to renew Proposal added to crontab

export NEAR_ENV=shardnet
export LOGS=/home/<USER_ID>/logs
export POOLID=<YOUR_POOL_ID>
export ACCOUNTID=<YOUR_ACCOUNT_ID>

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

Затем создаем задачу cron:

crontab -e

Там вас попросят выбрать директорию, выбирайте 1.

Вставляем нашу задачу, USER_ID имя пользователя на сервере:

0 */2 * * * sh /home/<USER_ID>/scripts/ping.sh

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

Проверяем работает ли она:

systemctl status cron

И через 2 часа у вас будет первый пинг, можно проверить логи так:

cat ~/logs/all.log

На данный момент (06.08.2022) с пингом также возникли проблема, он может не отображаться в explorer.


6 задание первое за которое следует отчитаться. Для этого вам нужно заполнить форму. Все данные должны быть такими же, как при регистрации. В качестве доказательства выполнения, вам нужно предоставить скрин успешных пингов и ссылку на вас в explorer:

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

Особое внимание уделите этим строчкам, первое думаю понятно, в скобках ведь есть пример. А вот второе это ваш кошелек в основной сети NEAR, на который вам придут награды. Создать его можно по ссылке: https://wallet.near.org/

Также советую отправить на него пару копеек, чтобы активировать.


Задание 7

Награды: 10 000 делегированных $NEAR в ваш пул, 50 $NEAR на кошелек, 200$ в токене $LiNEAR (за лучшее предложение)

Дедлайн: 7 сентября

Суть задания заключается в том, чтобы добыть данные из блокчейна, а затем провести их анализ с помощью знакомых вам инструментов. Это задание для экспертов в области анализа больших данных и для тех, кто знаком с извлечением данных из блокчейнов.

Данная статья не рассчитана на таких людей, думаю они и сами справятся.


Задание 8

Награды: 50 NEAR + 15 000 делегированных NEAR в ваш пул

Дедлайн: 7 сентября

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

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

Затем добавьте набор инструментов:

rustup target add wasm32-unknown-unknown

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

git clone https://github.com/zavodil/near-staking-pool-owner

Компелируем смарт-контракт:

cd near-staking-pool-owner/contract
cargo build --target wasm32-unknown-unknown --release

Разворачиваем смарт-контракт на свой учетной записи:

NEAR_ENV=shardnet near deploy <OWNER_ID>.shardnet.near --wasmFile target/wasm32-unknown-unknown/release/contract.wasm

Затем вам нужно сделать деплой. Тут будьте осторожны, вы не сможете сделать это второй раз!!!! Во все добавлены приписки вам нужно лишь вставить ники учетных записей. SPLITED_ACCOUNT_ID_1= ник основного кошелька. SPLITED_ACCOUNT_ID_2 = ник второго кошелька. Также вы можете изменить пропорцию наград. По умолчанию на основной падает 30%, а на второстепенный 70%:

CONTRACT_ID=<OWNER_ID>.shardnet.near
NEAR_ENV=shardnet near call $CONTRACT_ID new '{"staking_pool_account_id": "<STAKINGPOOL_ID>.factory.shardnet.near", "owner_id":"<OWNER_ID>.shardnet.near", "reward_receivers": [["<SPLITED_ACCOUNT_ID_1>.shardnet.near", {"numerator":3, "denominator":10}], ["<SPLITED_ACCOUNT_ID_2>.shardnet.near", {"numerator":70, "denominator":100}]]}' --accountId $CONTRACT_ID

Вот так выглядит успешная транзакция. Если у вас не так, либо у вас на кошельке не хватает монет (нужно около 20), либо вы совершили ошибку. Внимательно читайте вывод командой строки!

Если у вас все получилось, то необходимо подождать пока вам начислять награды и можно будет их вывести, обычно занимает 2-3 эпохи (начисляются они только в том случае, если вы валидатор, и были им 2-3 эпохи подряд)

Команда для проверки возможности вывода:

near view <OWNER_ID>.factory.shardnet.near is_account_unstaked_balance_available '{"account_id": "<OWNER_ID>.shardnet.near"}'

После введите команду вывода:

CONTRACT_ID=<OWNER_ID>.shardnet.near
NEAR_ENV=shardnet near call $CONTRACT_ID withdraw '{}' --accountId $CONTRACT_ID --gas 200000000000000

Если все окей, сделайте скрин успешного вывода, а также сохраните ссылку на транзакцию (в конце скрина).

В качестве доказательства выполнения заполните форму и укажите ссылку и скрин в соответствующих вопросах.


Задание 9

Награды: 15 NEAR

Дедлайн: 7 сентября

В этом задании вам нужно доказать, что ваша нода работает отлично и ее онлайн больше 70%. Для это, если вы валидатор, то зайдите на сайт этого соревнования:

https://openshards.io/shardnet-uptime-scoreboard/

Найдите там себя и посмотрите, какой у вас онлайн. Если он больше 70%, то смело делайте скрин.

Второй этап - это открыть порт 3030, он создан для мониторинга вашей ноды, вы можете также подключить скрипты мониторинга, если в этом разбираетесь.

Открыть порт 3030:

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

Сохранить это в конфигурации сервера:

sudo apt install iptables-persistent
sudo dpkg-reconfigure iptables-persistent
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Проверить открыт ли порт :

sudo iptables -L | grep 3030

Посетить сайт:

http://<ip вашего сервера>:3030/status

Для отчета вам следует заполнить форму, как в задании 6 и 8. Прикрепите скрин и ссылку, которые вы делали.


Задание 11

Награды: 15 NEAR

Дедлайн: 7 сентября

В начале этого года Aurora запустила первую ферму ставок на NEAR, и это очень весело. Однако все еще есть некоторые нерешенные проблемы, связанные с этим, например, как сделать APY устойчивым, как сделать ферму стекинга более децентрализованной и как один пользователь может одновременно получать вознаграждение за несколько ферм стекинга и т. д. Пожалуйста, предложите улучшенную ферму стекинга. решение, которое могло бы помочь решить некоторые из этих проблем.


Задание 13

Награды: 25 NEAR 5000 делегированых NEAR

Дедлайн: 7 сентября

В этом задании необходимо запустить резервный узел валидатора. Для этого вам необходим еще один сервер. После приобретения сервера необходимо выполнить 1-2,4,6,9 задания. То есть просто настроить ноду, авторизоваться через другие ключи (использую другой кошелек), создавать пул не требуется. Также необходимо настроить автопинг(6 задание), RPC (4 задание), открыть порты (9 задание).

После успешной настройки ноды, вам необходимо создать 2 папки с ключами (одна с резервными, другая с основными на обоих серверах), сделать это можно вручную или через консоль:

Создание папок:

#Ключи резервной ноды
mkdir -p RESERVE_KEYS
#Ключи основной ноды
mkdir -p mainnet

После чего в папку с резервными ключами добавьте файл из папки /.near: validator_key.json и node_key.json. Тоже самое сделайте для папки с основными ключами. Две папки закиньте на оба сервера в директорию пользователя.

Замена ключей на основном сервере (Сделайте скрин с выполнением всех следующих команд):

cat ~/.near/node_key.json | grep public_key
sudo systemctl stop neard
rm ~/.near/validator_key.json ~/.near/node_key.json
cp ~/RESERVE_KEYS/validator_key.json ~/RESERVE_KEYS/node_key.json ~/.near
sudo systemctl start neard
sudo journalctl -n 100 -f -u neard | ccze -A | grep INFO

Замена ключей на резервном сервере (Сделайте скрин с выполнением всех следующих команд):

cat ~/.near/node_key.json | grep public_key
sudo systemctl stop neard
rm ~/.near/validator_key.json ~/.near/node_key.json
cp ~/mainnet/validator_key.json ~/mainnet/node_key.json ~/.near
sudo systemctl start neard
sudo journalctl -n 100 -f -u neard | ccze -A | grep INFO

Пример скрина из официального гайда (на отличия команд не обращайте внимания, главное тут, чтобы было видно ваш старый ключ на ноде, процесс удаления и замены, новый ключ и то, что вы запустили ноду):

После вам необходимо заполнить форму, где вы прикрепите скрины выполнения для обоих серверов

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

Обратная замена для сервера бэкапа:

cat ~/.near/node_key.json | grep public_key
sudo systemctl stop neard
rm ~/.near/validator_key.json ~/.near/node_key.json
cp ~/RESERVE_KEYS/validator_key.json ~/RESERVE_KEYS/node_key.json ~/.near
sudo systemctl start neard
sudo journalctl -n 100 -f -u neard | ccze -A | grep INFO^

Обратная замена для основного сервера:

cat ~/.near/node_key.json | grep public_key
sudo systemctl stop neard
rm ~/.near/validator_key.json ~/.near/node_key.json
cp ~/mainnet/validator_key.json ~/mainnet/node_key.json ~/.near
sudo systemctl start neard
sudo journalctl -n 100 -f -u neard | ccze -A | grep INFO

Задание 14

Награды: 7500 делегированых NEAR

Дедлайн: 7 сентября

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

Для начала вам нужен дополнительный сервер, на котором будет стоять узел резервного копирования, не следует использовать сервер, на котором стоит ваш валидатор!

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

Создадим скрипт (:

cd scripts
mkdir backups
sudo nano backup.sh

Добавим скрипт, прописав пути:

#!/bin/bash

DATE=$(date +%Y-%m-%d-%H-%M)
DATADIR=<WORK_DIR>
BACKUPDIR=<WORK_DIR>/backups/near_${DATE}

mkdir $BACKUPDIR

sudo systemctl stop neard.service

wait

echo "NEAR node was stopped" | ts

if [ -d "$BACKUPDIR" ]; then
    echo "Backup started" | ts

    cp -rf $DATADIR/mainnet/data/ ${BACKUPDIR}/

    # Submit backup completion status, you can use healthchecks.io, betteruptime.com or other services
    # Example
    # curl -fsS -m 10 --retry 5 -o /dev/null https://hc-ping.com/xXXXxXXx-XxXx-XXXX-XXXx-...

    echo "Backup completed" | ts
else
    echo $BACKUPDIR is not created. Check your permissions.
    exit 0
fi

sudo systemctl start neard.service

echo "NEAR node was started" | ts

Создаем задание cron:

sudo nano /etc/crontab

Вставляем задание прописывая ваши пути до скрипта и логов:

0  12 *  *  * near      <WORK_DIR>/NEARmain/backup.sh >> <WORK_DIR>/NEARmain/backups/backup.log 2>&1

После выполнения и успешной работы вы должны заполнить форму

В качестве доказательства вы можете отправить файл вашего скрипта или текст скрипта в соответствующих полях форму.

Обновления

Важное обновление (12.08.2022)

Ночью 12.08.2022 вышло важное обновление. Подробнее о нем можно прочитать в документации. И так, чтобы обновиться нам нужно вручную добавить в файл config.json дополнительную строку, состоящую из ключа вашей ноды из файла node_key.json и ip вашего сервера.

Для начала узнаем ip сервера, вы наверняка его знаете, но вот команда:

curl ifconfig.me

Сохраните этот ip в текстовом документе.

Следом вам нужно узнать публичный ключ ноды (не путать с публичным ключом валидатора!). Команда:

cat ~/.near/node_key.json | grep public_key

Сохраните его также в текстовом документе, вместе с (ed25519).

Затем вам нужно вставить в файл config.json строчку:

"public_addrs": ["public key@public IP:24567"],

public key - это ключ из файла node_key.json.

public IP - ip вышего сервера.

Откройте файл config.json:

nano ~/.near/config.json

Найдите следующие строчки и вставьте новую строку с вашими данным (последняя строка тут):

 "network": { 
"addr": "0.0.0.0:24567", 
"boot_nodes": …, 
"public_addrs": ["public key@public IP:24567"],

Важно, чтобы строка находилась на одном уровне со своими соседями, то есть важно соблюдать табуляцию (4 пробела или 1 TAB).

После сохраните файл и выйдете.

Следующий шаг, перезапуск ноды:

sudo systemctl stop neard
sudo systemctl enable neard
sudo systemctl start neard
sudo systemctl daemon-reload

После перезапуска ноды вам нужно открыть порт(24567), если вы этого не делали.

Первым делом проверим открыт ли он сейчас:

sudo iptables -L | grep 24567

Если ничего не выдало, то он закрыт. Откроем следующей командой:

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

Сохраним в конфигурации сервера:

sudo dpkg-reconfigure iptables-persistent

Проверим, открыт ли он:

sudo iptables -L | grep 24567

Если да, то выдаст следующую строчку:


Обновили commit

Если обновили commit, то вам нужно перейти по ссылке: https://github.com/near/stakewars-iii/blob/main/commit.md

И взять от туда новый commit и выполнить команды:

sudo systemctl stop neard 
export NEAR_ENV=shardnet 
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc 
cd ~/nearcore 
git fetch

Затем проверить. Вставить новый commit в эту команду и скомпилировать бинарный файл:

git checkout <commit>
cargo build -p neard --release --features shardnet

После чего включить ноду:

sudo systemctl enable neard 
sudo systemctl start neard

Обновили config

Первым делом отключаем ноду:

sudo systemctl stop neard 

Затем удаляем старый конфиг и скачиваем новый:

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 systemctl enable neard 
sudo systemctl start neard

Произошел хардфорк

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

Останавливаем ноду и удаляем базу данных:

sudo systemctl stop neard
rm ~/.near/data/*

Скомпилируем бинарный файл, вставляем рекомендуемый commit:

cd ~/nearcore
git fetch
git checkout <commit>
cargo build -p neard --release --features shardnet

Удалим и скачаем генезис:

cd ~/.near
rm genesis.json
wget https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/genesis.json

Скачиваем новый конфиг:

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 systemctl enable neard 
sudo systemctl start neard && journalctl -n 100 -f -u neard | ccze -A

Причины, по которым вы не можете стать валидатором

1) В данный момент при регистрации кошелька возможно получить только 50 монет, также кошелек создается раз через раз. Поэтому будет крайне сложно иметь более 580 монет (10.08.2022) для принятия вашего предложения. Возможно админы исправят ситуацию в ближайшее время.

2) У вас неправильные публичные ключи или есть ошибки в файлах с ними/

Команда для проверки, ключи должны совпадать:

near view <POOL_ID> get_staking_key '{}'

cat ~/.near/validator_key.json | grep public_key

Обновить ключ, если он не правильный:

near call <POOL_ID> update_staking_key '{"stake_public_key": "<PUBLIC_KEY>"}' --accountId <ACCOUNT_ID> --gas=300000000000000

3) Ваш сервер имеет какие либо проблемы, из-за чего нода работает не корректно: не хватает оперативной памяти, низкая пропускная способность сети (скорость интернета).

Проверить можно с помощью следующих команд:

#проверка скорости интернета
sudo pip install speedtest-cli
#Проверяем скорость интернета 
speedtest
#проверка загруженности ядер и RAM
htop

4) В папке (./near-credentials/shardnet) отсутствует файл с ключами валидатора (xx.shardnet.near.json). Или же сама папка отсутствует. Вы можете создать папку вручную или с помощью утилиты (mkdir). Из-за отсутствия файла нода не будет корректно пинговаться.

5) Ваша нода не пунгуется. Если вам не хвататет монет для отправки пинга (37 на данный момент 10.08.2022), то вы можете вывести их из своего стейкинга или же попробовать создать кошелек, чтобы пополнить кошелек пула. После первого успешного пинга ваша нода будет пинговаться без подобной стоимости.


Я хочу перенести ноду на другой сервер

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

Прежде всего остановите ноду:

sudo systemctl stop neard

После сохраните файлы: node_key.json, validator_key.json, xx.shardnet.near.json

Затем вам нужно заново поставить ноду и заменить эти файлы перед запуском ноды.


Моя нода постоянно падает (перезагружается)

На данный момент (10.08.2022) существует серьезная проблема с утечкой оперативной памяти. Из-за чего 16гб оперативки может не хватать для нормальной работы ноды. Для решения этой проблемы можно прибегнуть к swap или файлы подкачки. Важно отметить, что это временное решение, до тех пор, пока не исправят ситуацию.

Для начала проверим, если ли файлы подкачки сейчас:

swapon --show

Если у вас уже есть файлы подкачки, то необходимо их отключить:

sudo swapoff -v /swapfile

Удалить:

sudo rm /swapfile

Создать раздел(на 32гб):

sudo fallocate -l 32G /swapfile

Проверить создался ли он:

ls -lh /swapfile

Создать файловую систему:

sudo mkswap /swapfile

Включить файлы подкачки:

sudo swapon /swapfile

Проверка работоспособности:

swapon --show

На этом у меня все. Эта статья будет со временем обновляться, дополнятся, а также изменяться. Если хотите поддержать автора, то можете подписаться на его группу. Это блог, в котором публикуются интересные темы из мира крипты и финансов.

Телеграмм mmg