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 відповідно
_Серв з бекап нодою-Валідатором_
Якщо встановлюєте на іншому сервері, перевірте, чи підходить вибраний сервер для встановлення ноди
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
sudo npm install near-cli
Після встановлення клієнта може бути що його потрібно оновити
В цьому прикладі версія 8.19.1 треба зробити оновлення 8.19.2 командою:
npm install -g [email protected]
# завантажуємо настановний скрипт 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
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
systemctl restart cron
systemctl status cron
Через пару годин перевіряємо логи / а через пару діб роботи вашого валідатора буде приблизно так.
cat /root/logs/all.log
Скріншот транзакцій мого пула [alexcryptopool.factory.shardnet.near]
Завдання 8. : Розгортання смарт контракту
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 allow 3030 ufw allow 22
ufw status
Якщо нічого не показує то потрібно його відчинити командою:
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
- Впровадити сценарії моніторингу
ще ви можете подивитись інформацію вашого валідатора за допомогою айпі командою
Тут ви можете побачити багато інформації про вашу ноду!
Так як я робив бєкап ноди 15-ть днів тому то в мене на цьому сервері показує Час роботи ноди 15-ть днів.
Завдання 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
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
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> - ір сервера, на якому встановлено прометей та графана.
Якщо все пройшло вдало, нас зустрічає вітальне вікно графани а далі вже справа техніки як ви бачите то все легко (коли розумієш що робиш звісно):
А далі потрібно створити блоки моніторінгу - це дуже красиво, на данному етапі ми починаємо бачити візуалізацію замість коду, магія інакще не назвеш)
І починаємо виконувати завдання)
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
Вузол є валідатором
Пропущені блоки
Відсоток вироблених блоків
Пропущені шматки
Відсоток вироблених шматків
Підключені однолітки
Загальна частка валідатора
Виконано!
Завдання 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 -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
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
Ali_Warrior / made in Ukraine
wget -qO- eth0.me