September 3, 2022

NEAR: '' Stakewars III '' / installation Raport guide

Near Protocol запустив третій епізод тестнету Stake Wars, метою якого є децентралізація мережі NEAR шляхом залучення нових честних та совістних валідаторів). Анонсовані нагороди становлять 50к $NEAR на ноду в мейнеті та до 500$NEAR за успішне виконання всіх завдань. Думаю, описувати що таке Near Protocol не має сенсу, тому читаємо інформацію про тестет.

Список завдань

Форма для здачі виконаних завдань

Гайд актуальний для комміту 03.09.2022

Тестнет наближається до свого завершення, нових валідаторів не вдасться створити майте це на увазі!

Цей гайд мною створенний для Report [ та щоб кожен кто захотів встановити собі ноду Near мав таку змогу ]

Початок тестнету 13 / липень! Кінець тестнету 9 / вересень!


Зміст

Завдання 1. Підготовка сервера Завдання 1.1 Створення гаманця Завдання 2. Встановлення ноди Завдання 2.1 Активація ноди та створення валідатора Завдання 3. Налаштування стекінг пулу Завдання 4. Перевірка та моніторинг Завдання 5. Встановлення ноди на сервері Хмари Завдання 6. Налаштування автоматичного пінгу Завдання 8. Розгортання смарт контракту Завдання 9. Аптайм 70% + відкрити порт 3030 Завдання 10. Аптайм 60% + делегація на ноду від фонду Завдання 13. Бекап-нода
Завдання 14. Автоскріпт резервного копіювання
Завдання 19. Графана моніторінг Завдання 20. Телеграм виклик Оновлення Корисні посилання та команди


Завдання 1. : Підготовка сервера

Мінімальні вимоги до сервера становлять:

CPU: 4-Core, RAM: 8GB DDR4, Storage: 500GB SSD

Я встановив на сервері Hetzner - AX61. потім переніс на AX51

Вартість оренди сервера - 109.84 євро та 70.54 відповідно

І так давайте ж почнемо!

Перевіряємо вашу машину

wget -qO- bench.sh | bash

_Серв з бекап нодою-Валідатором_

Якщо встановлюєте на іншому сервері, перевірте, чи підходить вибраний сервер для встановлення ноди

lscpu | grep -P '(?=.*avx )(?=.*sse4.2 )(?=.*cx16 )(?=.*popcnt )' > /dev/null \
  && echo "Supported" \
  || echo "Not supported"

Якщо видає "Supported" продовжуємо встановлення

Оновлюємо пакети

sudo apt update && sudo apt upgrade -y

Встановлюємо інструменти розробника, Node.js, npm, python3 та інші необхідні пакети

sudo apt install -y git binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev cmake gcc g++ python3-pip protobuf-compiler libssl-dev pkg-config llvm cargo
sudo apt install clang build-essential make
sudo apt install curl jq build-essential gcc make -y
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -  
sudo apt install nodejs
PATH="$PATH"

Перевіряємо версії

node -v
#v18.x.x
npm -v
#8.x.x

Встановлюємо NEAR-CLI

sudo npm install near-cli

Після встановлення клієнта може бути що його потрібно оновити

В цьому прикладі версія 8.19.1 треба зробити оновлення 8.19.2 командою:

npm install -g [email protected]

Встановлюємо Rust

# завантажуємо настановний скрипт Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Вибираємо пункт 1) продовжити встановлення (за умовчанням).

Починається встановлення
Вивід успішного встановлення
# активуємо середовище Rust для поточної оболонки
source ~/.profile
source ~/.cargo/env

Завдання 1.1 : Створення гаманця

Переходим за посиланням https://wallet.shardnet.near.org/ та створюємо гаманець NEAR для тестової мережі. Зберігаємо мнемоніку у надійному місці. Запам'ятовуємо ім'я гаманця, він також Account_ID. Наразі є проблеми та не відображається кількість токенів на балансі.


Завдання 2. : Встановлення ноди

Клонуємо репозиторій із нодою

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

Перевіряємо коміт. Наразі актуальний коміт - 1897d5144a7068e4c0d5764d8c9180563db2fe43. Актуальний коміт можна знайти за посиланням https://github.com/near/stakewars-iii/blob/main/commit.md

git checkout 1897d5144a7068e4c0d5764d8c9180563db2fe43

Збираємо бінарні файли та білдимо Раст

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

Ініціалізуємо ноду та завантажуємо генезис файл

./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

Створюємо сервісний файл. Я встановлював ноду під суперкористувачем. Якщо ви використовуєте іншого користувача, у сервісному файлі змінюємо root на ім'я користувача.

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

Запускаємо сервіс

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

Дивимося логи та чекаємо поки нода знайде бенкети, завантажить хедери та синхронізується. Це може тривати більше години

journalctl -n 100 -f -u neard

Перевіряємо синхронізацію

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

Поки йде синхронізація ви побачете приблизно такий вивід ()true()

Після того як синхронізація пройде буде приблизно такий вивід ()false()

Додатково: можна додати кольори у виведення логів , патріотичні жовто-блакитні

sudo apt install ccze

Перевірка логів у кольорі

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

Завдання 2.1 : Активація ноди та створення валідатора

Налаштовуємо оточення. Поточний тестнет проходить у мережі (shardnet) тут в зв'язку з тим в якій мережі працювати можете замінити на (testnet) або (mainnet). Вводимо назву мережі як змінну

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

Запускаємо команду для підключення вашого гаманця до shardnet

near login

Копіюємо посилання (http:wallet.shardnet.near.org/login/?.......) та відкриваємо у браузері, в якому встановлювали гаманець у першому завданні

Вводимо Account_ID і даємо всі необхідні дозволи після того, як сторінка видасть помилку з'єднання, ваш гаманець буде прив'язаний.

Переходимо в термінал та вводимо ім'я гаманця (Account_ID).

#Після введення гаманця термінал може зависнути і не видати напис успішно. В даному випадку алгоритм дій такий:

near generate-key <ACCOUNT_ID> 
#ACCOUNT_ID має бути у форматі xxx.shardnet.near
#Приклад: alex1.shardnet.near

Створюється JSON файл, у якому потрібно скопіювати публічний ключ замінити <ACCOUNT_ID> на свій гаманець

nano /root/.near-credentials/shardnet/<ACCOUNT_ID>.shardnet.near.json

У посиланні нижче замінюємо <public_key> на скопійований ключ і відкриваємо у браузері

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

Продовжуємо встановлення

Важливо! На даний момент отримати токени неможливо

Для подальшої зручності використання команд створюємо змінні монікера, ID пулу та ID акаунту. Замінюємо <MONIKER> на свій нік.

MONIKER=<MONIKER>
POOL=<MONIKER>.factory.shardnet.near
ACCOUNT_ID=<MONIKER>.shardnet.near

Зберігаємо змінні, перезавантажуємо .bash_profile та перевіряємо значення змінних

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

source $HOME/.bash_profile

echo -e "\nmoniker > ${MONIKER}.\n"
echo -e "\npool > ${POOL}.\n"
echo -e "\naccount_id > ${ACCOUNT_ID}.\n"

Створюємо ключ валідатора

near generate-key $POOL

Заходимо у файл і змінюємо слово private_key на secret_key

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

Натискаємо Ctrl+X та підтверджуємо зміни

Копіюємо ключ у папку з тестнетом

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

Перезапускаємо ноду

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

Завдання 3. : Налаштування стекінг пулу

Викликаємо стекінг пул фектори, створюємо і розгортаємо новий стекінг пул. Важливо! Замінюємо <MONIKER> та <ACCOUNT_ID> (у моєму випадку: <MONIKER> - trdm; <ACCOUNT_ID> - trdm.shardnet.near). Замість <public key> вставляємо ключ із файлу validator_key.json

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

Додатково! Для зміни налаштувань пулу, наприклад зміни комісії, скористаємося наступною командою

NEAR_ENV=shardnet near call $POOL update_reward_fee_fraction '{"reward_fee_fraction": {"numerator": 1, "denominator": 100}}' --accountId $ACCOUNT_ID --gas=300000000000000

За умови коректного виконання програми, виведеться хеш транзакції та посилання на транзакцію в експлорері.


Тепер можемо застікати ще токенів. У моєму випадку 512.

NEAR_ENV=shardnet near call $POOL deposit_and_stake --amount 512 --accountId $ACCOUNT_ID --gas=300000000000000

Важливо! Залишіть трохи токенів у гаманці для оплати комісій.


Завдання 4. : Перевірка та моніторинг

Знайти свого валідатора можна в експлорері за посиланням: https://explorer.shardnet.near.org/nodes/validators

Перевірка логів

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

Перевірка логів валідатора

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

Перевірка версії ноди

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

Перевірка делегатора

near view $POOL get_accounts '{"from_index": 0, "limit": 10}' --accountId $ACCOUNT_ID

Перевірка вироблених блоків. Замінити <POOL> на адресу свого пулу у форматі xxx.factory.shardnet.near

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.current_validators[] | select(.account_id | contains ("<POOL>"))'

Завдання 5. Встановлення ноди на сервері Хмарі

У цьому завдання Вам потрібно написати статтю в Medium, Github або Teletype, в якій описується інформація про сервер (провайдер, характеристики, вартість і т.д.), а також всі ваші дії з виконання 1-4 завдань з покроковим описом і скріншотами .


Завдання 6. : Налаштування автоматичного пінгу

Створюємо скрипт для автоматичного пінгу:

mkdir logs
mkdir scripts
cat > /root/scripts/ping.sh
#!/bin/sh
# Ping call to renew Proposal added to crontab

export NEAR_ENV=shardnet
export POOL=$POOL
export ACCOUNT_ID=$ACCOUNT_ID
export MONIKER=$MONIKER
export LOGS=/root/logs

echo "---" >> $LOGS/all.log
date >> $LOGS/all.log
near call $POOL ping '{}' --accountId $ACCOUNT_ID --gas=300000000000000 >> $LOGS/all.log
near proposals | grep $MONIKER >> $LOGS/all.log
near validators current | grep $MONIKER >> $LOGS/all.log
near validators next | grep $MONIKER >> $LOGS/all.log

# натискаємо CTRL+D для збереження та виходу з редактора

Створюємо новий crontab, який запускає наш скрипт кожні 2 години

crontab -e

Копіюємо команду та вставляємо у файл

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

Перезапускаємо cron

systemctl restart cron

Перевіряємо чи активний cron

systemctl status cron

Через пару годин перевіряємо логи / а через пару діб роботи вашого валідатора буде приблизно так.

cat /root/logs/all.log

Скріншот транзакцій мого пула [alexcryptopool.factory.shardnet.near]


Завдання 8. : Розгортання смарт контракту

Оновлюємо Rust

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env

Додаємо набор wasm32-unknown-unknown

rustup target add wasm32-unknown-unknown

Клонуємо репозиторій та компілюємо смарт контракт

git clone https://github.com/zavodil/near-staking-pool-owner
cd near-staking-pool-owner/contract
rustup target add wasm32-unknown-unknown
cargo build --target wasm32-unknown-unknown --release

Розгортаємо смарт контракт на своєму обліковому записі

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

Створюємо новий гаманець, на який відправлятимемо частину доходів https://wallet.shardnet.near.org/. Зберігаємо мнемоніку у надійному місці.

Ніколи не показуйте вашу мнемоніку бо вас можуть обдурити та вкрасти ваші гроші з гаманця.

Ініціалізуємо облікові записи для поділу доходів. Вносимо зміни до команди:

<POOL>: адреса вашого стекінг пулу (наприклад: trdm.factory.shardnet.near)
<ACCOUNT_ID>: адреса основного гаманця (наприклад: trdm.shardnet.near)
<REWARDS_ACCOUNT_1>: адреса першого гаманця нагород. Я використовую свій головний гаманець (trdm.shardnet.near)
<REWARDS_ACCOUNT_2>: адреса другого гаманця для нагород (trdm_rewards.shardnet.near)
Також можна змінити розподіл доходу між гаманцями, змінивши показники numerator та denominator. У цій команді використовується розподіл 50/50. Або як забажаєте)

NEAR_ENV=shardnet near call $ACCOUNT_ID new '{"staking_pool_account_id": "<POOL>", "owner_id":"<ACCOUNT_ID>", "reward_receivers": [["<REWARDS_ACCOUNT_1>", {"numerator": 50, "denominator":50}], ["<REWARDS_ACCOUNT_2>", {"numerator": 50, "denominator":50}]]}' --accountId $ACCOUNT_ID

Успішний висновок виглядає так

Після однієї епохи (12 годин) можна вивести токени, використовуючи наступну команду

NEAR_ENV=shardnet near call $ACCOUNT_ID withdraw '{}' --accountId $ACCOUNT_ID --gas 200000000000000
# {} виведе всі токени із стейку. Після успішної транзакції, застікати токени заново

Робимо скріншот отриманого висновку та прикріплюємо його у форму для здачі завдань разом із посиланням на транзакцію.


Завдання 9. : Аптайм 70% + відкрити порт 3030

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

Варіант 1.
Відкриваємо порти / Proceed with operation / ставте літеру } y як зазначено у скрині нижче

ufw enable

ufw enable
ufw allow 3030
ufw allow 22

Перевіряємо чи відкрився порт

ufw status

Варіант 2. Перевіряємо чи відчинен порт 3030


sudo iptables -L | grep 3030

Якщо нічого не показує то потрібно його відчинити командою:

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

Зберігаємо у конфігуряції сервера : при вводі команд нижче вибьє вікно розового кольору для підтвердження - натискаємо yes!

sudo apt install iptables-persistent
sudo dpkg-reconfigure iptables-persistent

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

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

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

Аптайм вважається за такою формулою:
% chunks online = (CHUNKS PRODUCED / CHUNKS EXPECTED) * (VALIDATED EPOCHS / TOTAL EPOCHS)

Також можете подивитись аптайм вашої ноди у терміналі командою:

near proposals | grep alexcryptopool.factory.shardnet.near


Завдання 10. Аптайм 60% + делегація на ноду від фонду

Це завдання автоматично делегує ShardNet NEAR пулам із часом безвідмовної роботи >= 60%.

  • Знімок 2022-08-09: Одноразове делегування 1000 ShardNet NEAR для валідаторів із >= 60% «% фрагментів онлайн» за УВЕСЬ ЧАС .
  • Починаючи з 10.08.2022: щодня 100 ShardNet NEAR делегуються валідаторам із >= 60% «% Chunks Online» за останні 25 ЕПОХ .

Кроки

Відстежуйте час безвідмовної роботи

  • Перевірте свій поточний час безвідмовної роботи та підвищте його до 60% у таблиці лідерів безвідмовної роботи ShardNet
  • Виправлення проблем із створенням блоків.
  • Перегляньте посібник з усунення несправностей
  • Проблеми вузла налагодження
  • Проблеми сортування з пропущеними блоками, переглянувши свій звіт на: http://localhost:3030/debug
  • Надішліть PR на StakeWars Github із причиною відсутності фрагментів https://github.com/near/stakewars-iii/issues
  • Впровадити сценарії моніторингу

ще ви можете подивитись інформацію вашого валідатора за допомогою айпі командою

http://<ваш_ip>:3030/debug

Тут ви можете побачити багато інформації про вашу ноду!
Так як я робив бєкап ноди 15-ть днів тому то в мене на цьому сервері показує Час роботи ноди 15-ть днів.


Завдання 10 виконано!

Завдання 13. Бекап-нода

В даному завданні нам необхідно встановити на сервері ще одну ноду, яка працюватиме в тих випадках, коли з основної будуть якісь проблеми, або проводиться оновлення.

Важливо! Дане завдання прошу уважно вивчити перед встановленням та спробувати зрозуміти які дії виконуються. Якщо дві ноди працюватимуть одночасно з одним ключем, відбудеться подвійне підписання блоку – найстрашніше, що може статися з вашим валідатором. Валідатор буде назавжди поміщений у в'язницю без можливості відновлення, а кошти – загублено.

Створюємо папку для бекап ноди, завантажуємо та збираємо бінарні файли

mkdir backup_node
cd backup_node
git clone https://github.com/near/nearcore
cd nearcore
git fetch origin --tags
git checkout 1897d5144a7068e4c0d5764d8c9180563db2fe43 
cargo build -p neard --release

Створюємо сервісний файл

printf "[Unit]
Description=NEARBACKUPd Daemon Service

[Service]
Type=simple
User=root
#Group=nearbackup
WorkingDirectory=/root/.near
ExecStart=/root/backup_node/nearcore/target/release/neard run
Restart=on-failure
RestartSec=30
KillSignal=SIGINT
TimeoutStopSec=45
KillMode=mixed

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/nearbackupd.service

Створюємо папки для зберігання ключів

mkdir reserve_keys
cd reserve_keys
mkdir main
mkdir backup

Копіюємо ключі від основної ноди в резервну папку

cd
cp /root/.near/validator_key.json /root/reserve_keys/main
cp /root/.near/node_key.json /root/reserve_keys/main

Зупиняємо основну ноду

sudo systemctl stop neard

Видаляємо ключі, генезис і конфіг файли (це потрібно для того, щоб з генерувати node_key бекап ноди). Не дивлячись на те, що ми скопіювали ключі основної ноди до папки на сервері, раджу зберегти їх на ваш комп'ютер

rm /root/.near/genesis.json
rm /root/.near/node_key.json
rm /root/.near/config.json

Ініціалізуємо бекап-ноду

/root/backup_node/nearcore/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

Переносимо ключі бекап-ноди до папки з резервними ключами

cp /root/.near/validator_key.json /root/reserve_keys/backup
cp /root/.near/node_key.json /root/reserve_keys/backup

Повертаємо ключ основної ноди та перевіряємо працездатність

cp /root/reserve_keys/main/node_key.json /root/.near 
sudo systemctl restart neard && journalctl -n 100 -f -u neard | ccze -A|grep INFO 

Наразі ми готові виконувати завдання. Для підтвердження завдання необхідно зробити скріншот всіх наступних дій.

sudo systemctl stop neard
cat .near/node_key.json|grep public_key
rm /root/.near/node_key.json
rm /root/.near/validator_key.json
cp /root/reserve_keys/backup/validator_key.json /root/.near
cp /root/reserve_keys/backup/node_key.json /root/.near
cat .near/node_key.json|grep public_key
sudo systemctl daemon-reload
sudo systemctl enable nearbackupd
sudo systemctl restart nearbackupd && journalctl -f -u nearbackupd | ccze -A|grep INFO

За підсумками у вас повинен вийти скріншот із двома різними ключами ноди та робочими логами.

Завдання виконано.

Тепер ваш валідатор працює на бекап-ноді. Можна спокійно оновлювати та робити інші дії з основною нодою, це не вплине на роботу вашого валідатора.

#Щоб повернутися на основну ноду, виконайте такі команди

cd
sudo systemctl stop nearbackupd
cat .near/node_key.json|grep public_key
rm /root/.near/node_key.json
rm /root/.near/validator_key.json
cp /root/reserve_keys/main/validator_key.json /root/.near
cp /root/reserve_keys/main/node_key.json /root/.near
cat .near/node_key.json|grep public_key
sudo systemctl restart neard && journalctl -f -u neard | ccze -A|grep INFO

Ще раз хочу вас попередити про подвійне підписання блоку, будьте уважні та обережні!

Завдання 14: Автоскріпт резервного копіювання

У цьому завдання вам необхідно створити вузол резервного копіювання, щоб у разі потреби перенесення бази даних ви могли це зробити максимально швидко.

Для початку вам потрібний додатковий сервер, на якому стоятиме вузол резервного копіювання, не слід використовувати сервер, на якому стоїть ваш валідатор! В мене це ще один дедік на Hatzner

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

Саме це зараз і будемо робити :)

#переходимо до потрібної деррикторії
cd scripts

#створюємо папку бєкапс
mkdir backups

#відчиняємо та заповнюємо нана-файл-бекап
sudo nano backup.sh

Додамо скрипт, редагуємо шляхи:

#!/bin/bash

DATE=$(date +%Y-%m-%d-%H-%M)
DATADIR=<редагуємо_шлях>
BACKUPDIR=<редагуємо_шлях>/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      <редагуємо_шлях>/NEARmain/backup.sh >> <редагуємо_шлях>/NEARmain/backups/backup.log 2>&1


Мій приклад:

Виконано!

Завдання 19. : Графана моніторінг

Для цього нам потрібно виконати три дії - а потім налаштувати Графану:
1. Оновити базу данних та скачати і встановити ноду обробник, створити файл сервісу та запустити.

1. Оновлюємо базу даних

sudo apt-get update && sudo apt-get upgrade -y

#1.1 скачуєм ноду обробник та налаштовуємо її я роблю це однією командою:

cd $HOME && \
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz && \
tar xvf node_exporter-1.2.0.linux-amd64.tar.gz && \
rm node_exporter-1.2.0.linux-amd64.tar.gz && \
sudo mv node_exporter-1.2.0.linux-amd64 node_exporter && \
chmod +x $HOME/node_exporter/node_exporter && \
mv $HOME/node_exporter/node_exporter /usr/bin && \
rm -Rvf $HOME/node_exporter/

1.2 Тепер треба створити файл сервісу - exporterd

sudo tee /etc/systemd/system/exporterd.service > /dev/null <<EOF
[Unit]
Description=node_exporter
After=network-online.target
[Service]
User=$USER
ExecStart=/usr/bin/node_exporter
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

1.3 Та запускаємо сервіс однією командою:

sudo systemctl daemon-reload && \
sudo systemctl enable exporterd && \
sudo systemctl restart exporterd

1.4 Перевірити логи:

sudo journalctl -u exporterd -f

1.5 Тепер переходимо в браузері на ноуті чи компі за адресою: http://<ip_server>:9100/, де <ip_server> - на якому встановили node_exporter.

Відобразиться Node Exporter. Натискаємо Metrics:

2) Встановлюємо Промитей - як з того фільму де люди жаждали знайти своїх творців)

Оновлюємо базу данних

sudo apt-get update && sudo apt-get upgrade -y

Встановлюєм прометей

wget https://github.com/prometheus/prometheus/releases/download/v2.38.0/prometheus-2.38.0.linux-amd64.tar.gz && \
tar xvf prometheus-2.38.0.linux-amd64.tar.gz && \
rm prometheus-2.38.0.linux-amd64.tar.gz && \
mv prometheus-2.38.0.linux-amd64 prometheus

Відчиняєм конфіг для налаштування

nano $HOME/prometheus/prometheus.yml

У графу tagrets нам потрібно після коми додати IP-адресу нашого сервера з нодою, звідки експортується статистика.

Приклад:

scrape_configs:
  - job_name: 'near_node'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090',162.55.99.50:3030,162.55.99.50:9100]

Після чого зберігаємо

Даємо права на виконання

chmod +x $HOME/prometheus/prometheus

Створюємо конфіг файл для прометея:

sudo tee /etc/systemd/system/prometheusd.service > /dev/null <<EOF
[Unit]
Description=prometheus
After=network-online.target
[Service]
User=$USER
ExecStart=$HOME/prometheus/prometheus \
--config.file="$HOME/prometheus/prometheus.yml"
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

Та запускаємо

sudo systemctl daemon-reload && \
sudo systemctl enable prometheusd && \
sudo systemctl restart prometheusd

Дивитись логі:

sudo journalctl -u prometheusd -f

Тепер переходимо в браузері на своєму домашньому пристрої за адресою: http://<ір_server>:9090/, де <ір_server> - ір сервера, на якому встановлено prometheus.

3. Залишилось тільки встановити графану та налаштувати її

# дуже легко встановлюємо її однією командою
sudo apt-get install -y adduser libfontconfig1 && \
wget https://dl.grafana.com/oss/release/grafana_8.0.6_amd64.deb && \
sudo dpkg -i grafana_8.0.6_amd64.deb
# запускаємо сервіс 'grafana-server'
sudo systemctl daemon-reload && \
sudo systemctl enable grafana-server && \
sudo systemctl restart grafana-server
# можете подивитись на логі [чи все у нормі)]
sudo journalctl -u grafana-server -f

Переходимо в браузері на ноуті чи компі за адресою: http://<ір_server>:3000/, де <ір_server> - ір сервера, на якому встановлено прометей та графана.

Якщо все пройшло вдало, нас зустрічає вітальне вікно графани а далі вже справа техніки як ви бачите то все легко (коли розумієш що робиш звісно):

Пароль: admin Логін: admin

Тепер задаємо власний пароль:

А далі потрібно створити блоки моніторінгу - це дуже красиво, на данному етапі ми починаємо бачити візуалізацію замість коду, магія інакще не назвеш)

І починаємо виконувати завдання)

1. Загальна інформаційна панель NEAR.

Block Height - near_block_height_head
Total Transactions - near_transaction_processed_successfully_total
Block Processed - rate(near_block_processed_total[$__rate_interval])
Blocks Per Minute - near_blocks_per_minute
Validators - near_is_validator - near_validator_active_total
Chunk - histogram_quantile(0.95, sum(rate(near_chunk_tgas_used_hist_bucket[$__rate_interval])) by (le))
Block Processing - rate(near_block_processing_time_count[$__rate_interval])
Transactions Pool Entries - near_transaction_pool_entries
Blocks Per Minute - near_blocks_per_minute
Processed Total Transactions - rate(near_transaction_processed_total[$__rate_interval])
Processed Successfully Transactions - rate(near_transaction_processed_successfully_total[$__rate_interval])
Reachable Peers - near_peer_reachable
Chunk Tgas Used - near_chunk_tgas_used
Block Processing Time Count - rate(near_block_processing_time_count[$__rate_interval])

в мене вийшло якось так! Мені подобається)

2. Інформаційна панель валідатора NEAR - Ali_Warrior
Вузол є валідатором Пропущені блоки Відсоток вироблених блоків Пропущені шматки Відсоток вироблених шматків Підключені однолітки Загальна частка валідатора

3. Моніторінг серверу

Виконано!

Завдання 20. : Моніторинг за допомогою телеграм боту приєднаного до сервера з нодою!

Виконано!


Оновлення

Зміст

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

Вночі 12.08.2022 (який збіг - в мене днюха теж 12-го але не серпня) вийшло важливе оновлення. Докладніше про нього можна прочитати у документації. І так, щоб оновитися, нам потрібно вручну додати до файлу 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 вищого сервера.

Відкрийте файл: .near/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 enable neard
sudo systemctl daemon-reload
sudo systemctl restart neard

Після перезапуску ноди потрібно відчинити порт(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

Якщо так, то видасть наступний рядок:


Корисні посилання та команди

Зміст

Гаманець: https://wallet.shardnet.near.org/

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

Перевірка логів

journalctl -n 100 -f -u neard

Рестарт ноди

sudo systemctl restart neard

Запустити ноду

sudo systemctl start neard

Зупинити ноду

sudo systemctl stop neard

Переверка балансу

near view $POOL get_account_total_balance '{"account_id": "<MONIKER>.shardnet.near"}'

Анстейк Токенов (змінити <amount yoctoNEAR> на кількість токенів)

#певну кількість
near call $POOL unstake '{"amount": "<amount yoctoNEAR>"}' \
--accountId $ACCOUNT_ID --gas=300000000000000

#все разом
near call $POOL unstake_all --accountId $ACCOUNT_ID \
--gas=300000000000000

Вивід Токенов

#певну кількість (змінити <amount yoctoNEAR> на кількість)
near call $POOL withdraw '{"amount": "<amount yoctoNEAR>"}' \
--accountId $ACCOUNT_ID --gas=300000000000000

#все разом
near call $POOL withdraw_all --accountId $ACCOUNT_ID \
--gas=300000000000000

Список активних валідаторів поточної доби

NEAR_ENV=shardnet near validators current

Список валідаторів на 03.09.2022!

NEAR_ENV=shardnet near proposals

Для того щоб себе знайти скористайтесь комбінацією клавіш ctrl+shift+f та введіть назву вашого пулу у строку пошуку.

Слава Україні

Героям слава!

Написали, що стався hardfork, що мені робити?

Інколи трапляється hardfork, вам треба зтерти ваш genesis.json файл, папку data та перезапустити сервіс

sudo systemctl stop neard
cd ~/.near
rm -rf genesis.json
wget https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/genesis.json
rm -rf data
sudo systemctl restart neard

Якщо оновився конфіг

Інколи в discord будуть приходити повідомлення про обновлення конфігу, треба буде зробити наступне:

sudo systemctl stop neard
cd ~/.near
rm -rf config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json
sudo systemctl restart neard

Якщо оновився комміт

У разі оновлення комміту треба буде оновитися, зробити новий білд та перезапустити валідатора, новий комміт можна знайти тут

sudo systemctl stop neard
cd ~/nearcore
git fetchgit checkout 1897d5144a7068e4c0d5764d8c9180563db2fe43
cargo build -p neard --release --features shardnet
sudo systemctl restart neard

P.S. #мало коду не буває!

Ali_Warrior / made in Ukraine
wget -qO- eth0.me