Stake Wars — это программа, которая помогает сообществу ознакомиться с тем, что значит быть валидатором NEAR, и дает им ранний шанс получить доступ к Сhunk-only producer. Вознаграждения, предлагаемые программой Stake Wars, поддерживают новых участников, которые хотят присоединиться к основной сети в качестве валидатора, начиная с конца сентября 2022 года.
С чего начать?
- Узнайте больше о программе Stake Wars
- Ознакомьтесь, что такое Chunk-only Producer
- Заполните форму для регистрация Chunk-Only Producer
Далее в статье будем создавать кошелек, арендовать сервер и производить запуск узла
Требования к серверу для Chunk-only Producer:
- CPU: 4-Core CPU with AVX support
- RAM: 8GB DDR4
- Storage: 500GB SSD
- Аренда сервера
Я использую сервер от mail.ru. Через поддержку можно расширить квоту на объем жесткого диска.
Создание кошелька
Переходим на сайт https://wallet.shardnet.near.org/
Нажимаем “Создать учетную запись”
Вводим свободное имя пользователя и нажимаем “Reserve My Account ID”
Выберите метод восстановления. Я использую мнемоническую фразу.
Затем сохраните мнемоническую фразу и введите её
В результате на вашем аккаунте должны появиться токены NEAR
Запуск узла
- Подключитесь к серверу и обновите пакеты
sudo apt update && sudo apt upgrade -y
2. Установите Node.js и npm
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install build-essential nodejsPATH="$PATH"
Проверьте версии:
node -v
Должен быть ответ: v18.xx
npm -v
Должен быть ответ: 8.xx
3. Установите NEAR-CLI
sudo npm install -g near-cli
4. Настройте окружающую среду
export NEAR_ENV=shardnetecho 'export NEAR_ENV=shardnet' >> ~/.bashrc
5. Установите инструменты разработчика
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
6. Установите Python pip
sudo apt install python3-pip
7. Установите конфигурацию
USER_BASE_BIN=$(python3 -m site --user-base)/binexport PATH="$USER_BASE_BIN:$PATH"
8. Установите Building env
sudo apt install clang build-essential make
9. Установите Rust & Cargo
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Выберите “1”
source $HOME/.cargo/env
10. Клонируйте nearcore репозиторий
git clone https://github.com/near/nearcorecd nearcoregit fetch
Далее проверьте <commit>
в файле и замените его на значение из файла
git checkout <commit>
в моём случае команда выглядит так
git checkout 8448ad1ebf27731a43397686103aa5277e7f2fcf
11. Скомпилируйте бинарный файл
cargo build -p neard --release --features shardnet
12. Инициализируйте рабочую директорию
Для правильной работы узлу NEAR требуется рабочий каталог и несколько файлов конфигурации.
./target/release/neard --home ~/.near init --chain-id shardnet --download-genesis
Эта команда создаст структуру каталогов и сгенерирует config.json
, node_key.json
genesis.json
13. Замените config.json
rm ~/.near/config.jsonwget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json
14. Установите AWS Cli
sudo apt-get install awscli -y
15. Замените genesis.json
rm ~/.near/genesis.jsoncd ~/.nearwget https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/genesis.json
Активация узла в качестве валидатора
- Введите в терминале команду
near login
2. Затем скопируйте ссылку и вставьте её в браузер
3. Предоставьте полный доступ Near CLI, нажимайте “Next”
4. Далее “Подключить”
5. Введите вашу учетную запись и нажмите “Подтвердить”
Вы должны увидеть такую страницу — это ОК
6. Введите в терминале вашу учетную запись на жмите “Enter”
7. Проверьте validator_key.json
cat ~/.near/validator_key.json
Если файл validator_key.json отсутствует, выполните следующие действия, чтобы создать его:
near generate-key <pool_id>
<pool_id> — -> xx.factory.shardnet.near , где xx это имя вашего пула
В моем случае команда выглядит следующим образом:
near generate-key marmaladejummy.factory.shardnet.near
8. Скопируйте сгенерированный файл в папку shardnet
cp ~/.near-credentials/shardnet/YOUR_WALLET.json ~/.near/validator_key.json
YOUR_WALLET замените на ваше имя, в моем случае команда выглядит следующим образом:
cp ~/.near-credentials/shardnet/marmaladejummy.shardnet.near.json ~/.near/validator_key.json
9. Отредактируйте validator_key.json
nano ~/.near/validator_key.json
- Отредактируйте «account_id» => xx.factory.shardnet.near, где xx — имя вашего пула.
- Измените
private_key
наsecret_key
Содержимое файла должно соответствовать следующему шаблону:
{
"account_id": "xx.factory.shardnet.near",
"public_key": "ed25519:Ea3xp8cpk4b9aFmacBZL1CjLh2aZ8JR34b92afoB1K2g",
"secret_key": "ed25519:****"
}
Ctrl+s — сохранить файл
Ctrl+x — закрыть файл
10 . Создайте сервисный файл
sudo nano /etc/systemd/system/neard.service
Вставляем следующий текст в файл:
[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
! Отредактирует строки USER, WorkingDirectory, ExecStart под ваши значения
Ctrl+s — сохранить файл
Ctrl+x — закрыть файл
11. Запустите узел валидатора
sudo systemctl daemon-reloadsudo systemctl enable neardsudo systemctl start neard
12. Отобразите цветные логи
journalctl -n 100 -f -u neard | ccze -A
Необходимо дождаться полной синхронизации
Запуск стейкинг пула
Разверните контракт стейкинг пула, шаблон команды:
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=450 --gas=300000000000000
Замените на свои данные
- Pool ID: Имя стейкинг пула. Пример: marmaladejummy
- Owner ID: Shardnet аккаунт. Пример: marmaladejummy.shardnet.near
- Public Key: public key из файла validator_key.json
- 5: Комиссия, которую будет взимать пул
- Account Id: Shardnet аккаунт. Обычно совпадает с Owner ID
Должно появиться сообщение об успешном создании пула
Проверить пул можно тут
Создайте cron задачу для автоматического пинга
cd
mkdir scripts
cd scripts
nano ping.sh
В тексте файла прописываем:
#!/bin/sh
# Ping call to renew Proposal added to crontabexport 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
Отредактируйте LOGS, POOLID, ACCOUNTID в зависимости от ваших данных.
Создаем новый crontab, запускающий наш скрипт каждые 2 часа:
crontab -e
Прописываем строку с измененным путем к файлу скрипта:
0 */2 * * * sh /<USER_ID>/scripts/ping.sh
Сохраняем и закрываем файл
Список crontab, чтобы увидеть, что он работает:
crontab -l
Просмотрите свои логи:
cat home/<USER_ID>/logs/all.log
Руководство по командам NEAR CLI
Предложение валидатора указывает на то, что он хотел бы войти в набор валидатора, чтобы предложение было принято, оно должно соответствовать минимальной цене места. Команда:
near proposals
Cписок активных валидаторов в текущую эпоху, количество произведенных блоков, количество ожидаемых блоков и скорость онлайн. Используется для мониторинга наличия проблем у валидатора. Команда:
near validators current
Валидаторы, чье предложение было принято одну эпоху назад, и которые войдут в набор валидаторов в следующую эпоху. Команда:
near validators next
Руководство по транзакциям
Депозит и стейкинг NEAR. Команда:
near call <staking_pool_id> deposit_and_stake --amount <amount> --accountId <accountId> --gas=300000000000000
Анстейкинг NEAR. Количество в yoctoNEAR. Команда:
near call <staking_pool_id> unstake '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000
Анстейкинг всех NEAR. Команда:
near call <staking_pool_id> unstake_all --accountId <accountId> --gas=300000000000000
Вывод. Анстейкинг занимает 2–3 эпохи, после чего вы можете вывести в YoctoNEAR из пула. Команда:
near call <staking_pool_id> withdraw '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000
Команда вывести все:
near call <staking_pool_id> withdraw_all --accountId <accountId> --gas=300000000000000
Пинг выдает новое предложение и обновляет балансы ставок для ваших делегаторов. Каждую эпоху следует отправлять пинг, чтобы сообщать о наградах в актуальном состоянии. Команда:
near call <staking_pool_id> ping '{}' --accountId <accountId> --gas=300000000000000
Команда общего баланса:
near view <staking_pool_id> get_account_total_balance '{"account_id": "<accountId>"}'
Стейкинг баланса:
near view <staking_pool_id> get_account_staked_balance '{"account_id": "<accountId>"}'
Анстейкнутый баланс:
near view <staking_pool_id> get_account_unstaked_balance '{"account_id": "<accountId>"}'
Доступно для вывода:
near view <staking_pool_id> is_account_unstaked_balance_available '{"account_id": "<accountId>"}'
Пауза в стейкинга:
near call <staking_pool_id> pause_staking '{}' --accountId <accountId>
Продолжить стейкинг:
near call <staking_pool_id> resume_staking '{}' --accountId <accountId>
RPC
Любой узел в сети предлагает службы RPC через порт 3030, если этот порт открыт в брандмауэре узла. Обычно RPC используется для проверки статистики валидатора, версии узла и просмотра доли делегатора, его можно использовать для взаимодействия с блокчейном, учетными записями и контрактами в целом.
Подробнее о многих командах и о том, как их использовать, можно узнать здесь
Общие команды
Проверьте версию вашего узла: Команда:
sudo apt install curl jq
curl -s http://127.0.0.1:3030/status | jq .version
Команда проверки делегаторов и ставок:
near view <your pool>.factory.shardnet.near get_accounts '{"from_index": 0, "limit": 10}' --accountId <accountId>.shardnet.near