Near Protocol запускает третий эпизод тестнета Stake Wars, целью которого является децентрализация сети NEAR, путем привлечение новых валидаторов. Анонсированные награды составляют 50к $NEAR на ноду в мейнете и 500 $NEAR токенов за успешное выполнение всех заданий. Думаю, описывать что такое Near Protocol не имеет смысла, поэтому читаем информацию о тестнете, подаем заявку на участие по https://nearprotocol1001.typeform.com/to/Z39N7cU9?typeform-source=near.org. В данном гайде описано выполнение заданий. Удачи и да прибудет с Вами Web3.
Список заданй: https://github.com/near/stakewars-iii/tree/main/challenges
Форма с выполнением КАЖДОЙ задачи : https://docs.google.com/forms/d/e/1FAIpQLScp9JEtpk1Fe2P9XMaS9Gl6kl9gcGVEp3A5vPdEgxkHx3ABjg/viewform
Сайт: https://nearcon.org/
Discord : https://discord.gg/bca7SHNM
Twitter : https://twitter.com/nearprotocol
Ссылка на Hetznet : https://hetzner.cloud/?ref=NY9VHC3PPsL0
Рекумендуемые параметры сервера: CPU: 4-Core, RAM: 8GB DDR4, Storage: 500GB SSD Сервер на котором буду работать:CPU: 8-Core, RAM: 16GB DDR4, Storage: 240GB SSD
4) Выполняем установку и заходим, переходим в Session, выбираем вкладку SSH, в remote host вводим наш IP адрес который пришел нам на почту,которую мы регистрировали
6) Перед началом работы вы можете убедиться, что на вашем компьютере установлены правильные функции процессора(ожидаем Supported):
lscpu | grep -P '(?=.*avx )(?=.*sse4.2 )(?=.*cx16 )(?=.*popcnt )' > /dev/null \
&& echo "Supported" \
|| echo "Not supported"
sudo apt update && sudo apt upgrade -y
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 llvm cargo
sudo apt install clang build-essential make
sudo apt install curl jq
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs
PATH="$PATH"
если у вас возникли проблемы с установкой docker.io на ubuntu, попробуйте выполнить эту команду:
apt-get install containerd=1.3.3-0ubuntu2
Вот репозиторий Github для NEAR CLI.: https://github.com/near/near-cli . Для установки NEAR-CLI, если вы не вошли в систему с правами root, что не рекомендуется, вам нужно будет использовать sudoдля установки NEAR-CLI, чтобы сохранить двоичный файл near в /usr/local/bin
sudo npm install -g near-cli
10) Настраиваем окружение. Текущий тестнет проходит в сети shardnet. Вводим название сети в качестве переменной
export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
echo 'export NEAR_ENV=shardnet' >> ~/.bash_profile
source $HOME/.bash_profile
Предложение валидатора означает, что он хочет войти в набор валидаторов, для того чтобы предложение было принято, оно должно соответствовать минимальной цене места.
near proposals
Здесь отображается список активных валидаторов в текущую эпоху, количество произведенных блоков, ожидаемое количество блоков и скорость онлайн. Используется для мониторинга, если у валидатора возникают проблемы.
near validators current
Здесь показаны валидаторы, предложение которых было принято одну эпоху назад, и которые войдут в набор валидаторов в следующую эпоху.
near validators next
sudo apt install python3-pip
USER_BASE_BIN=$(python3 -m site --user-base)/bin
export PATH="$USER_BASE_BIN:$PATH"
sudo apt install curl build-essential gcc make -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.profile
source ~/.cargo/env
13) Заходим по ссылке https://wallet.shardnet.near.org/ и создаем кошелек NEAR для тестовой сети. Сохраняем мнемонику в надежном месте. Запоминаем имя кошелька, он же Account_ID.
git clone https://github.com/near/nearcore
cd nearcore
git fetch
Проверяем коммит. По состоянию на 31 июля, актуальный коммит - c1b047b8187accbf6bd16539feb7bb60185bdc38. Актуальный коммит можно найти по ссылке https://github.com/near/stakewars-iii/blob/main/commit.md
git checkout c1b047b8187accbf6bd16539feb7bb60185bdc38
cargo build -p neard --release --features shardnet
- Двоичный путь является 'target/release/neard'. Если вы видите проблемы, возможно, команда cargo не найдена. Компиляция 'nearcore' двоичного файла может занять некоторое время(у меня заняло примерно час).
./target/release/neard --home ~/.near init --chain-id shardnet --download-genesis
Эта команда создаст структуру каталогов и создаст 'config.json' , 'node_key.json' , и 'genesis.json' в переданной вами сети.
-
'config.json' - Параметры конфигурации, которые реагируют на то, как будет работать узел. 'Config.json' содержит необходимую информацию для запуска узла в сети, как взаимодействовать с одноранговыми узлами и как достичь консенсуса. Хотя некоторые параметры настраиваются. Как правило, валидаторы предпочитают использовать файл 'config.json' по умолчанию.
-
'genesis.json' - Файл со всеми данными, с которыми начиналась работа в 'genesis' в сети. Здесь содержатся начальные учетные записи, контракты, ключи доступа и другие записи, которые представляют начальное состояние блокчейна. Файл 'genesis.json' представляет собой снимок состояния сети в определенный момент времени. В контактах учетные записи, балансы, активные валидаторы и другая информация о сети.
-
'node_key.json' - Файл, содержащий открытый и закрытый ключи для узла. Также включает необязательный 'account_id' параметр, который требуется для запуска узла проверки (не рассматривается в этом документе).
-
'data/' - Папка, в которую узел 'NEAR' будет записывать свое состояние.
Рекомендую сохранить данные файлы, чтобы потом не возникло проблем с восстановлением и предоставлением данных, что вы действительно все сделали правильно и получили вознаграждения
'boot_nodes': Если вы не указали загрузочные узлы для использования во время инициализации на шаге 3, сгенерированный 'config.json' массив покажет пустой массив, поэтому нам нужно будет заменить его полным массивом с указанием загрузочных узлов.
'tracked_shards': В сгенерированном 'config.json' это поле является пустым. Вам нужно будет заменить его на "tracked_shards": [0]
rm ~/.near/config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json
cd ~/nearcore
./target/release/neard --home ~/.near run
- Теперь узел запущен, и вы можете видеть логи в консоли. Ваш узел должен находить
peers
, загружатьheaders
до 100%, а затем загружать блоки.
near login
Примечание: Эта команда запускает веб-браузер, позволяющий авторизовать полный ключ доступа для локального копирования.
1 – Скопируйте ссылку в свой браузер
изображение
2 – Предоставить доступ к Near CLI
3 – После предоставления разрешения вы увидите страницу, подобную этой, вернитесь в консоль
cd ~/.near
wget https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/genesis.json
Но лучше удалите ноду и повторите все заново,можно создать сначала сервисный файл,а потом уже подключаться к кошельк, самое главное следить за логами
Выполните следующую команду:
cat ~/.near/validator_key.json
Примечание: Если файл validator_key.json отсутствует, выполните следующие действия, чтобы создать его
Создать validator_key.json
Сгенерируйте файл ключа:
near generate-key <pool_id>
Скопируйте сгенерированный файл в папку shardnet: не забудьте заменить <pool_id> идентификатором вашей учетной записи
cp ~/.near-credentials/shardnet/YOUR_WALLET.json ~/.near/validator_key.json
Примечание: идентификатор учетной записи должен совпадать с именем контракта пула ставок, иначе вы не сможете подписывать блоки.\
Содержимое файла должно быть в следующем формате:
{
"account_id": "xx.factory.shardnet.near",
"public_key": "ed25519:HeaBJ3xLgvZacQWmEctTeUqyfSU4SDEnEwckWxd92W2G",
"secret_key": "ed25519:****"
}
target/release/neard run
sudo tee /etc/systemd/system/neard.service > /dev/null <<EOF
[Unit]
Description=neard
[Service]
Type=simple
User=root
#Group=near
WorkingDirectory=/home/root/.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
EOF
Команда:
sudo systemctl enable neard
Команда:
sudo systemctl start neard
sudo systemctl reload neard
Команда:
journalctl -n 100 -f -u neard
Команда:
sudo apt install ccze
Команда:
journalctl -n 100 -f -u neard | ccze -A
Чтобы стать валидатором и войти в набор валидаторов, необходимо выполнить минимальный набор критериев успеха.
1)Узел должен быть полностью синхронизирован
curl -s http://127.0.0.1:3030/status | jq .sync_info
validator_key.json
должен быть на месте 3)Контракт должен быть инициализирован с помощьюpublic_key
вvalidator_key.json
- Идентификатор учетной записи должен быть установлен на идентификатор контракта пула ставок
- Должно быть достаточно делегаций, чтобы соответствовать минимальной цене места. Посмотреть стоимость места можно здесь(https://explorer.shardnet.near.org/nodes/validators).
- Предложение должно быть отправлено путем пинга контракта
- После принятия предложения валидатор должен подождать 2-3 эпохи, чтобы войти в набор валидаторов
- После установки валидатора валидатор должен выдавать более 90% назначенных блоков
Проверьте статус работы узла валидатора. Если отображается "Validator", значит ваш пул выбран в списке текущих валидаторов.
Для обеспечения безопасности средств делегаторов NEAR использует фабрику стейкинг-пула с контрактом на стейкинг, прошедшим белую проверку. Чтобы запустить валидатора на NEAR, стакинг-пул должен быть развернут на учетной записи NEAR и интегрирован в узел валидатора NEAR. Делегаторы должны использовать пользовательский интерфейс или командную строку, чтобы делать ставки в пул. Ставочный пул - это смарт-контракт, развернутый на учетной записи NEAR.
Важно! заменяем <pool id>
, <MONIKER>
и <ACCOUNT_ID>
на значения указанные в 18 пункте. Вместо <public key>
вставляем ключ из файла validator_key.json
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
NEAR_ENV=shardnet near call $POOL deposit_and_stake --amount 30 --accountId $ACCOUNT_ID --gas=300000000000000
Заходим по ссылке и ищем нашего валидоатор и проверяем количество застейканных монет:
https://explorer.shardnet.near.org/nodes/validators
Уведомление по электронной почте может сделать поддержание валидатора в рабочем состоянии более удобным. Станьте валидатором, подтверждающим транзакции в testnet, и получите >95% времени работы.
Файлы журналов
Лог-файл хранится либо в каталоге ~/.nearup/logs
, либо в systemd
, в зависимости от вашей настройки.
Команда systemd:
journalctl -n 100 -f -u neard | ccze -A
Пример файла журнала:
Валидатор | 1 валидатор
INFO stats: #85079829 H1GUabkB7TW2K2yhZqZ7G47gnpS7ESqicDMNyb9EE6tf Validator 73 validators 30 peers ⬇ 506.1kiB/s ⬆ 428.3kiB/s 1.20 bps 62.08 Tgas/s CPU: 23%, память: 7.4 GiB
Надпись "Validator" указывает на то, что вы являетесь активным валидатором. 73 валидатора: Всего 73 валидатора в сети 30 peers: В настоящее время у вас 30 peers. Для достижения консенсуса и начала валидации вам необходимо как минимум 3 peers. #46199418: блок - Посмотрите, чтобы убедиться, что блоки движутся
Любой узел в сети предлагает услуги RPC на порту 3030, если порт открыт в брандмауэре узла. NEAR-CLI использует вызовы RPC за сценой. Обычно RPC используется для проверки статистики валидатора, версии узла и просмотра доли делегата, хотя его можно использовать для взаимодействия с блокчейном, счетами и контрактами в целом.
Более подробно о многих командах и их использовании можно узнать здесь:
https://docs.near.org/api/rpc/introduction
Команда:
sudo apt install curl jq
Общие команды:
curl -s http://127.0.0.1:3030/status | jq .version
near view <ваш пул>.factory.shardnet.near get_accounts '{"from_index": 0, "limit": 10}' --accountId <accountId>.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.prev_epoch_kickout[] | select(.account_id | contains ("<POOL_ID>"))' | jq .reason
curl -r -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_ID"))'
Challange 6 (Создайте задачу cron на машине, на которой запущен валидатор узлов, которая позволяет автоматически пинговать сеть)
Создайте новый файл в /home/root/scripts/ping.sh
#!/bin/sh
# Ping вызывает информацию для обновления Proposal и добавляет в crontab
mkdir logs
mkdir scripts
cat > /root/scripts/ping.sh
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
crontab -e
0 */2 * * * sh /root/scripts/ping.sh
systemctl restart cron
Проверяем активен ли cron
systemctl status cron
- Через пару часов проверяем логи
cat /root/logs/all.log
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
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/. Сохраняем мнемонику в надежном месте.
CONTRACT_ID=<OWNER_ID>.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
NEAR_ENV=shardnet near call $ACCOUNT_ID withdraw '{}' --accountId $ACCOUNT_ID --gas 200000000000000
{} выведет все токены из стейка. После успешной транзакции, застейкать токены заново
Делаем скриншот полученного вывода и прикрепляем его в форму для сдачи заданий вместе с ссылкой на транзакцию.
sudo systemctl stop neard
export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
cd ~/nearcore
git fetch
git checkout 68bfa84ed1455f891032434d37ccad696e91e4f5
cargo build -p neard --release --features shardnet
Скачиваем новый файл конфига
rm ~/.near/config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json
Если при выполнении команды cargo возникает ошибка версии Rust
Обновляем раст и запускаем cargo заново
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
cargo build -p neard --release --features shardnet
Перезапускаем ноду и ждем окончания синхронизации
sudo systemctl start neard && journalctl -n 100 -f -u neard | ccze -A
В логах может быть куча сообщений с текстом "missing chunks". Проверяем логи командой, если блоки совпадают с эксплорером и увеличиваются, всё ок.
journalctl -n 100 -f -u neard|ccze -A| grep INFO
#Проверьте, открыт ли порт 3030
sudo iptables -L | grep 3030
#Откройте порт, если он не открыт
sudo iptables -A INPUT -p tcp --dport 3030 -j ACCEPT
#Использование iptables-persistent
sudo apt install iptables-persistent
#Использование файлов
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
#Убедитесь, что порт открыт, посетив
http://<IP Address>:3030/status
Заполняем форму:https://docs.google.com/forms/d/e/1FAIpQLScp9JEtpk1Fe2P9XMaS9Gl6kl9gcGVEp3A5vPdEgxkHx3ABjg/viewform
n/a
sudo systemctl stop neard && \
sudo systemctl disable neard && \
rm /etc/systemd/system/neard.service && \
sudo systemctl daemon-reload && \
cd $HOME && \
rm -rf .near nearcore && \
rm -rf $(which neard)