Нода 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
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
sudo apt install python3-pip
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
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%.
В итоге у нас должен пойти похожий лог. Сверяем текущий блок с эксплорером. Должно быть похожее значение.
Активируем валидатора
near login
Полностью копируем ссылку из терминала и вставляем ее в браузер, в котором мы залогинены в наш кошелек.
Вставляем адрес нашего кошелька в поле и жмем "Confirm". На этом этапе просто ждем, пока появится такая страница.
Идем обратно в терминал и вбиваем адрес нашего кошелька, жмем ENTER. Должна появиться инфа о том, что кошелек подключен.
``` cd .. ``` 
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". Сохраняем все данные в блокнот, они нам могут пригодиться, будет гораздо удобнее иметь к ним легкий доступ.
target/release/neard run
Запускается валидатор, сверяем блоки
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
Жмем ":", вписываем "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
Задание 5
Цель задания - написать гайд по выполнению первых четырех заданий. Собственно, спасибо за прочтение и ещё раз спасибо Crypto Kiddies Club.
Задание 6
Цель задания - создать cron task для автоматического пинга.
Нам необходимо создать дерикторию "scripts" в папке юзера (в моем случае нет юзера, просто в root), а там уже создать файл "ping.sh".
Вы на данном этапе можете находиться в какой - то директории, отличной от моей, потому го немного теории по навигации.
Вернуться назад можно с помощью этой команды:
cd ..
Посмотреть список файлов и папок в текущей директории можно с помощью команды:
ls
Перейти в папку в данной директории можно с помощью команды:
cd названиепапки
Показать, где я нахожусь сейчас можно с помощью команды:
pwd
Итак, допустим я нахожусь в папке "nearcore".
cd ..
pwd
Я в руте, создаю тут папку "scripts".
mkrid scripts
ls
cd scripts
touch ping.sh
ls
vim ping.sh
Вставляю данный скрипт, предварительно изменив пути. Вот так выглядит шаблон.
#!/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
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, выполнены. Теперь от вас требуется поддержание ноды в рабочем состоянии и накатывать обновления, которые анонсят в Дискорде.