August 20, 2022

Нода Near или как укротить убийцу Solana.

Гайд создал админ HARDBUBBLE <3

Привет всем фомоебам, которые не успели поставить ноду и выполнить задания до 8 августа. К нашему счастью, NEAR одумались и перенесли дэдлайн на 7 сентября. Так что вытяните свои руки из попы, отберите карты и паспорта у своих друзей(ты себя видел?) родителей и заработайте на криптовалютах наконец-то.

!Дисклеймер! автор статьи не кодер и не сможет решить ваши проблемы с кривыми логами.

Сколько можно поднять NEAR`чика

Ссылаясь на официальную таблицу награждений в общей сложности за 1 полностью рабочую ноду со всеми выполненными заданиями мы получим: 175 UNP они же NEAR. Поясняю за UNP, DNP.

  • UNP — равен 1 NEAR, после завершения ивента поступит на ваш кошелёк в mainnet.
  • DNP — равен 500 NEAR, после завершения ивента поступит на ваш кошелёк в тестовой сети. DNP вы не сможете вывести или как-то с ними взаимодействовать. Их можно закинуть в стейкинг под 11% APY на 1 год, проценты от этого и будет ваша прибыль.

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

Все остальные смертные могут выполнить 1, 2, 3, 4, 6, 8, 9 задания и получить 125 NEAR ≈ 625$ (NEAR по 5$), если вы спустите их на медвежке по 5$, мне будет за вас стыдно.

Итог

Если вы умеете кодить: 175 NEAR ≈ 875$ не учитывая аренду сервера.

Если вы ламер: 125 NEAR ≈ 625$ не учитывая аренду сервера.

Итог — учитесь кодить.

Подготовка к установке ноды

Аренда сервера, он же дедик

Минимальные требования сервера: CPU: 4-Core CPU with AVX support RAM: 8GB DDR4 Storage: 500GB SSD

Арендовать можно тут:

CONTABO — 9€

HETZNER — 31.5€

DigitalOcean — FREE. Переходите по линку, и получаете 100$ для своей ноды, хватит на 1 месяц. Для подтверждения на карте должно быть 5$, можно крутить себе рефов используя друзей, родственников , дропы мимо, т.к. через, примерно, 15 дней на карте должны быть 50$, для проверки на абуз.

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

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

Ставим ноду

Знаю, что есть однострочник (ставит ноду в 1 строку), но впоследствии он сыпет много ошибок и ты не сможешь попросить помощи у более опытных челиков, так как они не имеют понятия что и как ты там ставил. Лучше уделить больше времени и поставить своими ручками, может чему-то научитесь, чем сэкономить 20 минут и потом фиксить ошибки.

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

Для "управления" сервером зачастую используют терминалы: MobaXterm
PuTTY

Теперь выполняем задания. Вы можете воспользоваться оффициальным гайдом. Повторюсь я не умею писать код, по этому взял инфу с общедоступных ресурсов, особый респект Crypto Kiddies Club и Nodera.

Для подтверждения выполнения задания заполняйте ФОРМУ

Задание 1

Цель задания - создать кошелек на Near и поставить NEAR CLI.

Создаем Near кошелек

Переходим на сайт и создаем кошелек в тестовой сети.

Выбираем себе ник и жмем синюю кнопку.

В качестве метода защиты я выбрал "Secure Passphrase".

Сохраняем сид фразу (никому не показываем ее никогда), жмем "Continue". Далее вставляем слово из нашей сид фразы, которое у нас запросили. В моем случае это слово под номером 3, жмем "Verify & Complete". Этот шаг может потребовать несколько больше времени, просто ждем, если словите ошибку - пробуйте снова.

Далее вставляем всю нашу сид фразу в поле и жмем "Find My Account". Процесс тоже займет некоторое время.

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

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

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

sudo apt update && sudo apt upgrade -y
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash - 
sudo apt install build-essential nodejs

Вбиваем "Y" и жмем ENTER.

PATH="$PATH"
node -v

Должно отбиться в терминале v18.x.x.

npm -v

Должно отбиться в терминале 8.x.x.

sudo npm install -g near-cli
export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
echo 'export NEAR_ENV=shardnet' >> ~/.bash_profile
source $HOME/.bash_profile

Проверяем, встал ли NEAR CLI на сервер.

near proposals

Если что - то такое выдает - все ок.

Задание 2

Цель задания — поднимаем ноду Near и активируем ее как валидатора.

Поднимаем ноду

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
apt-get install containerd=1.3.3-0ubuntu2

Вбиваем "Y" и жмем ENTER.

sudo apt install python3-pip

Вбиваем "Y" и жмем ENTER.

USER_BASE_BIN=$(python3 -m site --user-base)/bin
export PATH="$USER_BASE_BIN:$PATH"
sudo apt install clang build-essential make
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Вбиваем "y" и жмем ENTER.

Вбиваем "1" и жмем ENTER.

source $HOME/.cargo/env
git clone https://github.com/near/nearcore
cd nearcore
git fetch

Идем по ссылке и берем там актуальную строчку

git checkout c1b047b8187accbf6bd16539feb7bb60185bdc38
cargo build -p neard --release --features shardnet

Тут потребуется минут 10, зависит от скорости скачивания.

./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
./target/release/neard --home ~/.near run

Запускается нода, начинается что - то вроде синхронизации, ждем 100%.

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

Активируем валидатора

Нажимаем "CTRL+C" в консоли.

near login

Вбиваем "y" и жмем ENTER.

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

Жмем "Next".

Жмем "Connect".

Вставляем адрес нашего кошелька в поле и жмем "Confirm". На этом этапе просто ждем, пока появится такая страница.

Идем обратно в терминал и вбиваем адрес нашего кошелька, жмем ENTER. Должна появиться инфа о том, что кошелек подключен.

```
cd ..
```

![image](_attachments/Pasted%20image%2020220801233031.png)
cat ~/.near/validator_key.json

Если пишет, что нет такого файла - делаем следующее (у меня нет файла).

Придумаем название для нашего пула (pool_id). Я выбрал название как при создании кошелька "cryptobusher666". Теперь мой пул называется "cryptobusher666.factory.shardnet.near". Вбиваем команду (замените pool_id на свой), в моем случае:

near generate-key cryptobusher666.factory.shardnet.near

Вбиваем команду, предварительно заменив pool_id на ваш собственный.

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

Так как мы работаем в MobaXTerm, мы можем облегчить себе жизнь при редактировании .json файла, просто переходим в навигаторе (слева) в папку "root -> .near".

Открываем наш файл "validator_key.json".

Откроется окно с данными, нужно заменить "private_key" на "secret_key".

Нужно удостоверится, что тут указан ваш pool_id. Если это не так - редактируем.

Жмем "CTRL+S". Сохраняем все данные в блокнот, они нам могут пригодиться, будет гораздо удобнее иметь к ним легкий доступ.

Жмем "Yes".

target/release/neard run

Запускается валидатор, сверяем блоки

Жмем "CTRL+C".

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

Открывается редактор, жмем клавишу "i".

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

[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

Если ставите ноду на Hetzner, то, скорее всего, у вас будет как у меня.

[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

Эмем "ESC".

Жмем ":", вписываем "wq" и жмем "ENTER".

sudo systemctl enable neard
sudo systemctl start neard
sudo apt install ccze

Данной командой можем в любой момент чекнуть логи. Чтоб выйти, просто вбиваем "CTRL+C".

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

Задание 3

Цель задания - задеплоить стейкинг пул. Произвести операции делегирования и застейкать Near.

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

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=30 --gas=300000000000000

Меняем следующие поля на свои:

  • "staking_pool_id": "<pool id>" - тут меняем <pool id> на свой (только первая часть названия), я вбиваю сюда "cryptobusher666"
  • "owner_id": "<accountId>" - тут меняем <accountId> на свой, я вбиваю сюда "cryptobusher666.shardnet.near"
  • "stake_public_key": "<public key>" - тут меняем <public key> на свой, который можно найти в файле "validator_key.json" (мы сохраняли эти данные в нашем прошлом задании) я вбиваю сюда "ed25519:Bdki49wnff9SHF4ZpUYvrvf9KyAKezDSTWfX8sCVdfqu"
  • --accountId="<accountId>" - тут меняем <accountId> на свой, я вбиваю сюда "cryptobusher666.shardnet.near"

В итоге финальная команда в моем случае выглядит так:

near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "cryptobusher666", "owner_id": "cryptobusher666.shardnet.near", "stake_public_key": "ed25519:Bdki49wnff9SHF4ZpUYvrvf9KyAKezDSTWfX8sCVdfqu", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="cryptobusher666.shardnet.near" --amount=30 --gas=300000000000000

Можем зайти в эксплорер и проверить, что произошло на нашем аккаунте (в моем случае на "cryptobusher666.shardnet.near"). Виден успешный вызов метода и изменение баланса (примерно на 30 Near).

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

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

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

 near proposals | grep cryptobusher666

Мне ничего не выдало, должно быть так вообще:

Посерфил дискорд и понял, для того, чтоб попасть в proposal нужно застейкать суммарно 56 Near. Где их взять - не особо понятно, но все создают еще один кошелек, чтоб получить дополнительных 50 Near и застейкать их. Не уверен, что это прям понравится команде, но другого выхода я не вижу, потому сделал как все.

Создал аккаунт, получил на него около 50 Near, скинул на основной кошелек.

Вбиваем команду, сменив все значения на свои, вот шаблон команды:

near call <staking_pool_id> deposit_and_stake --amount <amount> --accountId <accountId> --gas=300000000000000

У меня команда выглядит так:

near call cryptobusher666.factory.shardnet.near deposit_and_stake --amount 49 --accountId cryptobusher666.shardnet.near --gas=300000000000000

Появились дополнительные токены в пуле.

Проверяем, попали ли мы в proposals:

 near proposals | grep cryptobusher666

Ура, попали. Идем в дискорд Near, в канал "stake-wars-tokens_delegation".

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

Задание 4

Цель задания - настроить мониторинг статуса ноды.

Напоминаю, что лог можно посмотреть с помощью команды:

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

Подробное описание значений в логе можно найти в оффициальном гайде по данному заданию.

sudo apt install curl jq

Вбиваем "Y" и жмем ENTER.

Готово.

Задание 5

Цель задания - написать гайд по выполнению первых четырех заданий. Собственно, спасибо за прочтение и ещё раз спасибо Crypto Kiddies Club.

Задание 6

Цель задания - создать cron task для автоматического пинга.

Нам необходимо создать дерикторию "scripts" в папке юзера (в моем случае нет юзера, просто в root), а там уже создать файл "ping.sh".

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

Вернуться назад можно с помощью этой команды:

cd ..

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

ls

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

cd названиепапки

Показать, где я нахожусь сейчас можно с помощью команды:

pwd

Итак, допустим я нахожусь в папке "nearcore".

cd ..
pwd

Я в руте, создаю тут папку "scripts".

mkrid scripts

Проверяю, создалась ли папка.

ls

Иду в эту папку.

cd scripts

Создаю файл "ping.sh".

touch ping.sh

Проверяю, создался ли файл.

ls

Открываю файл с помощью vim.

vim ping.sh

Жму "i".

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

#!/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

Вот так выглядит мой вариант.

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

export NEAR_ENV=shardnet
export LOGS=/root/logs
export POOLID=cryptobusher666
export ACCOUNTID=cryptobusher666

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

Жму "ESC".

Жму ":" и пишу "wq".

Жму "ENTER".

Создаю папку для логов.

mkdir $HOME/logs

Меняем permission для скрипта.

chmod +x $HOME/scripts/ping.sh

Создаем crontab с интервалом в 2 часа.

crontab -e

Я выбрал второй вариант, жму "2" и "ENTER".

Все как обычно, жму "i", вставляю скрипт, предварительно заменив значение на свое, вот шаблон:

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

Вот мой вариант:

0 */2 * * * sh /root/scripts/ping.sh

Жму "ESC", жму ":", пишу "wq" и жму "ENTER".

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

cat $HOME/logs/all.log

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

Задание 8

Цель задания - задеплоить контракт для распределения наград между 2мя аккаунтами.

Нам предлагают поставить cargo и Rust, но мы это делали ранее, на всякий случай прогоню эти 2 команды.

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

Прожимаем там "y" и "1" в процессе выполнения, не буду скринить.

source $HOME/.cargo/env
rustup target add wasm32-unknown-unknown

Тут надо склонировать репозиторий из Гитхаба. Для этого я создам директорию "github" в "root".

mkdir github
cd github
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

Вот как выглядит моя команда:

NEAR_ENV=shardnet near deploy cryptobusher666.shardnet.near --wasmFile target/wasm32-unknown-unknown/release/contract.wasm

Создаем переменную, вот шаблон команды:

CONTRACT_ID=<OWNER_ID>.shardnet.near

Моя команда выглядит так:

CONTRACT_ID=cryptobusher666.shardnet.near

Тут нам нужен еще один аккаунт для получения наград. Создаем новый аккаунт в Shardnet сети, мы это делали в первом задании, все происходит похожим образом. Я создал новый аккаунт "cryptobusher6662.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

Вот моя команда (немного подправил еще "numerator" и "denominator" чтоб изменить распределение наград, можете тоже поиграться).

NEAR_ENV=shardnet near call $CONTRACT_ID new '{"staking_pool_account_id": "cryptobusher666.factory.shardnet.near", "owner_id":"cryptobusher666.shardnet.near", "reward_receivers": [["cryptobusher666.shardnet.near", {"numerator": 5, "denominator":10}], ["cryptobusher6662.shardnet.near", {"numerator": 5, "denominator":10}]]}' --accountId $CONTRACT_ID

Необходимо подождать, пока мы начнем получать реварды и сделать их вывод. Это можно сделать после завершения эпохи, которая длится 12 часов. Ждем и вбиваем команду, скорректировав все своими значениями. Вот шаблон:

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

Вот мой вариант:

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

Далее делаем скрин успешного вывода токенов и прикрепляем к форме отчета по данному заданию.

Задание 9

Для успешного выполнения задания ваш валидатор должен иметь аптайм выше 70%. Проверить аптайм можно по ссылке, после открытия 3030 порта.

Открываем порты

ufw enable
ufw allow 3030

Проверяем открылся ли порт

ufw status

Заходим по ссылке http://<ваш_ip>:3030/statusи делаем скриншот для отправки в форму.

После этого заходим на сайт https://openshards.io/shardnet-uptime-scoreboard/, ждем когда аптайм станет более 70%, делаем скриншот и заполняем форму.

Аптайм считается по следующей формуле: % chunks online = (CHUNKS PRODUCED / CHUNKS EXPECTED) * (VALIDATED EPOCHS / TOTAL EPOCHS)

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

Напоминаю, что дэдлайн 7 СЕНТЯБРЯ, анонсы по наградам и новостям по ноде буду публиковать в своем канале.