Установка ноды валидатора Near Shardnet

Orangeclub
4 min readSep 4, 2022

Для ноды я выбрал сервер Hetzner AX-41 по цене 46.63 евро. Приступим к установке. Выполняем необходимые команды из Challenge 001.
sudo apt update && sudo apt upgrade -y

Установим Node.js и npm:

curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -  
sudo apt install build-essential nodejs
PATH="$PATH"

Проверяем версиюNode.js и npm:

node -v
npm -v

Установим NEAR-CLI

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

Проверим, соответствует ли процессор требованиям ноды.

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++ python3 docker.io protobuf-compiler libssl-dev pkg-config clang llvm cargosudo 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

Наконец-то переходим непосредственно к установке ПО near:

Качаем репозитарий nearcore:

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

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

git checkout 1897d5144a7068e4c0d5764d8c9180563db2fe43

Скомпилируем бинарник nearcore:

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

Должно всё закончится без ошибок:

Создадим папку .near и файлы config.json, genesis.json, node_key.json с помощью команды:

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

Заменим файл config.json актуальным, с необходимыми изменениями, для этого удалим созданный файл и скачаем актуальный:

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

Для запуска ноды я буду использовать systemctl:

sudo tee /etc/systemd/system/neard.service > /dev/null <<EOF
[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
EOF

Запускаем ноды и ждём, пока скачается вся необходимая база данных для работы:

sudo systemctl daemon-reload && \
sudo systemctl enable neard && \
sudo systemctl restart neard && sudo journalctl -u neard -f -o cat

После чего логинимся в созданный ранее кошелек на сайте https://wallet.shardnet.near.org/:

Копируем указанную ссылку в браузер и предоставляем доступ к кошельку:

После чего вы увидите ошибку, но это нормально:

Вводите свой кошелек:

Исполните следующую команду, Вы должны будете увидеть данные по Вашему кошельку, в т.ч. его public_key и secret_key:

cat ~/.near/validator_key.json

Создадим файл пула и скопируем данные в файл validator_key:

near generate-key valera878.factory.shardnet.nearcp ~/.near-credentials/shardnet/valera878.shardnet.near.json ~/.near/validator_key.json

Внесём необходимые изменения в файл validator_key,json:

  1. Заменим значение поля “account_id”, в моём случае на valera878.factory.shardnet.near

2. Изменим название private_key на secret_key

Содержание файла должно быть следуюшим:

{
"account_id": "valera878.factory.shardnet.near",
"public_key": "ed25519:HeaBJ3xLgvPkjHQgEctTeUqyfSU4SDEnWjdsQxd93R4S",
"secret_key": "ed25519:****"
}

Перезапустим ноду:

sudo systemctl restart neard && sudo journalctl -u neard -f -o cat

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

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

Вы увидите, что пул успешно создан.

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

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

Внесите и застейкайте токены, которые у Вас есть на кошельке:

near call valera878.factory.shardnet.near deposit_and_stake --amount 2000 --accountId valera878.shardnet.near --gas=300000000000000

Добавим команду пинг в постоянно исполнение, с помощью скрипта. Она необходима для исполнения каждую эпоху. Создадим файл ping.sh

nano ~/ping.sh

Добавим в него следующую команду:

#!/bin/bash
GREEN_COLOR='\033[0;32m'
RED_COLOR='\033[0;31m'
WITHOU_COLOR='\033[0m'
DELAY=300 #in secs - how often restart the script
for (( ;; )); donear call orang3club.factory.shardnet.near ping '{}' --accountId orang3club.shardnet.near --gas=300000000000000
for (( timer=${DELAY}; timer>0; timer-- ))
do
printf "* sleep for ${RED_COLOR}%02d${WITHOU_COLOR} sec\r" $timer
sleep 1
done
done

Сохраняем файл и запускаем его исполнение, например в screen’е:

apt install screen -y
screen
./ping.sh

Вы увидите следующее:

Ваша нода работает! Проверять текущее производство блоков и чанков можно следующей командой:

near validators current | grep valera878

--

--