Установка и запуск ноды валидатора в тестовой сети Casper на Ubuntu 20.04
Принимая участие в Casper Testnet, вы подтверждаете, что ознакомились с кодексом поведения и требованиями (en,гугл переводчик) к участникам вознаграждаемого тестнета.
Прежде чем настраивать ноду, убедитесь, что она соответствует минимальным системным требованиям (en):
- 4 Cores CPU
- 32 GB RAM (по тестам пока подходит и 16 GB RAM)
- 1 TB SSD
- Ubuntu 18.04 или Ubuntu 20.04 (предпочтительнее)
1. Открытие портов
Если вы пользуетесь файерволом (firewall), убедитесь, что следующие порты открыты:
Проверить статус файервола можно командой
ufw status
Если получили Status: inactive, переходите к следующему пункту. Если Status: active, вводите команды:
sudo ufw allow 7777
sudo ufw allow 8888
sudo ufw allow 9999
sudo ufw allow 35000
2. Установка переменных
Зададим переменную, определяющую версию настраиваемой ноды.
CASPER_VERSION=1_0_0
Установим переменную, определяющую имя сети, которую вы пытаетесь настроить.
CASPER_NETWORK=casper-test
3. Установка необходимых дистрибутивов
sudo apt update && sudo apt upgrade -y
Установим необходимые компоненты
sudo apt install -y dnsutils software-properties-common git sudo apt install gpg-agent
sudo apt install jq -y
Удалим предыдущие версии
Внимание! Выполняйте эти команды только если до этого устанавливали ноду на данном сервере.
sudo systemctl stop casper-node-launcher.service sudo apt remove -y casper-client sudo apt remove -y casper-node-launcher sudo rm /etc/casper/casper-node-launcher-state.toml sudo rm -rf /etc/casper/1_*_* sudo rm -rf /var/lib/casper/*
Установим ноду Casper
Добавляем репозиторий Casper в Ubuntu.
echo "deb https://repo.casperlabs.io/releases" bionic main | sudo tee -a /etc/apt/sources.list.d/casper.list curl -O https://repo.casperlabs.io/casper-repo-pubkey.asc sudo apt-key add casper-repo-pubkey.asc sudo apt update
Устанавливаем необходимый софт для ноды
sudo apt install casper-node-launcher -y sudo apt install casper-client -y
4. Создание смарт-контрактов, необходимых для подключение к сети
Установим необходимые компоненты для создания смарт-контрактов
cd ~ sudo apt purge --auto-remove cmake wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' sudo apt update sudo apt install cmake -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh sudo apt install libssl-dev -y sudo apt install pkg-config -y sudo apt install build-essential -y BRANCH="1.0.20" \ && git clone --branch ${BRANCH} https://github.com/WebAssembly/wabt.git "wabt-${BRANCH}" \ && cd "wabt-${BRANCH}" \ && git submodule update --init \ && cd - \ && cmake -S "wabt-${BRANCH}" -B "wabt-${BRANCH}/build" \ && cmake --build "wabt-${BRANCH}/build" --parallel 8 \ && sudo cmake --install "wabt-${BRANCH}/build" --prefix /usr --strip -v \ && rm -rf "wabt-${BRANCH}"
cd ~ git clone git://github.com/CasperLabs/casper-node.git cd casper-node/
git checkout release-1.4.3
make setup-rs make build-client-contracts -j
5. Генерирование ключей и пополнение счета
5.1.1 Если раньше не создавали ключи, генерируем ключи ноды
cd /etc/casper/validator_keys
sudo -u casper casper-client keygen .
Это создаст 3 файла в директории /etc/casper/validator_keys
- secret_key.pem – приватный ключ (нельзя ни с кем делиться)
- public_key.pem - публичный ключ
- public_key_hex - 16-ричное представление публичного ключа
Сделайте бэкап ключей в надежном месте.
5.1.2 Если раньше были ключи, копируем ключи на сервер
Вводим команды копирования ключей с локального компьтера на сервер в директорию /etc/casper/validator_keys. Если у вас Windows, можно воспользоваться MobaXterm или WinSCP.
Естественно, не забываем ввести корректный путь до ваших ключей и имя@IP-адрес удаленного сервера.
На сервере установим необходимые права для папки, куда будем импортировать ключи.
sudo chmod 777 /etc/casper/validator_keys
С локального компьютера копируем ключи.
scp -C -r путь-до-вашего-ключа/secret_key.pem [email protected]:/etc/casper/validator_keys
scp -C -r путь-до-вашего-ключа/public_key.pem [email protected]:/etc/casper/validator_keys
scp -C -r путь-до-вашего-ключа/public_key_hex [email protected]:/etc/casper/validator_keys
Задаем необходимые права на ключи на удалённом сервере.
sudo chown -R casper:casper /etc/casper/validator_keys/
5.2 Создаём аккаунт, если раньше его не было
Заходим на сайт, нажимаем «Download Signer» и скачиваем расширение.
Заходим в расширение и устанавливаем пароль. Сразу сохраняем его в надежном месте.
Импортируем аккаунт, нажав на Import Account.
Нажимаем на кнопку Upload, выбираем свой ключ secret_key.pem и придумываем название импортируемого аккаунта.
Нажимаем на кнопку Import для завершения операции. Переходим дальше.
5.3 Пополнение баланса аккаунта
Переходим на страницу крана, нажимаем Sign in, авторизуемся с помощью расширения и запрашиваем средства, введя свой публичный ключ.
Дождитесь отображения в столбце Status, что транзакция прошла успешно.
6. Настраиваем и запускаем ноду
На всякий случай ещё раз установим переменные.
CASPER_VERSION=1_0_0
CASPER_NETWORK=casper-test
Настраиваем конфигурацию ноды.
sudo -u casper /etc/casper/pull_casper_node_version.sh $CASPER_NETWORK.conf $CASPER_VERSION sudo -u casper /etc/casper/config_from_example.sh $CASPER_VERSION
Получим IP адрес известного валидатора.
KNOWN_ADDRESSES=$(sudo -u casper cat /etc/casper/$CASPER_VERSION/config.toml | grep known_addresses) KNOWN_VALIDATOR_IPS=$(grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' <<< "$KNOWN_ADDRESSES") IFS=' ' read -r KNOWN_VALIDATOR_IP _REST <<< "$KNOWN_VALIDATOR_IPS" echo $KNOWN_VALIDATOR_IP
TRUSTED_HASH=$(casper-client get-block --node-address http://$KNOWN_VALIDATOR_IP:7777 -b 20 | jq -r .result.block.hash | tr -d '\n')
if [ "$TRUSTED_HASH" != "null" ]; then sudo -u casper sed -i "/trusted_hash =/c\trusted_hash = '$TRUSTED_HASH'" /etc/casper/$CASPER_VERSION/config.toml; fi
Внимание! Начинаем поэтапное обновление. Все обновления выполняем поочередно друг за другом.
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_1_0
sudo -u casper /etc/casper/config_from_example.sh 1_1_0
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_1_2
sudo -u casper /etc/casper/config_from_example.sh 1_1_2
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_2_0
sudo -u casper /etc/casper/config_from_example.sh 1_2_0
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_2_1
sudo -u casper /etc/casper/config_from_example.sh 1_2_1
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_3_1
sudo -u casper /etc/casper/config_from_example.sh 1_3_1
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_3_2
sudo -u casper /etc/casper/config_from_example.sh 1_3_2
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_3_4
sudo -u casper /etc/casper/config_from_example.sh 1_3_4
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_4_1
sudo -u casper /etc/casper/config_from_example.sh 1_4_1
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_4_2
sudo -u casper /etc/casper/config_from_example.sh 1_4_2
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_4_3
sudo -u casper /etc/casper/config_from_example.sh 1_4_3
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_4_4
sudo -u casper /etc/casper/config_from_example.sh 1_4_4
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_4_5
sudo -u casper /etc/casper/config_from_example.sh 1_4_5
sudo -u casper /etc/casper/pull_casper_node_version.sh casper-test.conf 1_4_6
sudo -u casper /etc/casper/config_from_example.sh 1_4_6
sudo logrotate -f /etc/logrotate.d/casper-node sudo systemctl start casper-node-launcher; sleep 2 systemctl status casper-node-launcher
Теперь ждём синхронизации ноды, мониторя статус в пункте 7. После синхронизации переходим к пункту 8.
7. Мониторинг ноды
sudo tail -fn100 /var/log/casper/casper-node.log /var/log/casper/casper-node.stderr.log
Проверить видит ли ваша нода известного валидатора среди других пиров
curl -s http://$KNOWN_VALIDATOR_IP:8888/status | jq .peers
curl -s http://127.0.0.1:8888/status
Перед тем, как выполнять пункт 8, проверьте логи. Синхронизация будет длиться порядка 72 часов на железе, соответствующем минимальным требованиям
В логах должно быть следующее.
"message":"finished joining"
"message":"started JSON-RPC server"
"message":"started REST server"
{"timestamp":"Feb 09 02:28:35.577","level":"INFO","fields":{"message":"finished joining"},"target":"casper_node::cli"} {"timestamp":"Feb 09 02:28:35.578","level":"INFO","fields":{"message":"started JSON-RPC server","address":"0.0.0.0:7777"},"target":"casper_node::components::rpc_server::http_server"} {"timestamp":"Feb 09 02:28:35.578","level":"INFO","fields":{"message":"started REST server","address":"0.0.0.0:8888"},"target":"casper_node::components::rest_server::http_server"}
Эра и блок должны совпадать с актуальными на сайте.
8. Соединение с сетью
Только после полной синхронизации, продолжаем.
PUBLIC_KEY_HEX=$(sudo -u casper cat /etc/casper/validator_keys/public_key_hex) STATE_ROOT_HASH=$(casper-client get-state-root-hash --node-address http://127.0.0.1:7777 | jq -r '.result | .state_root_hash') PURSE_UREF=$(sudo -u casper casper-client query-state --node-address http://127.0.0.1:7777 --key "$PUBLIC_KEY_HEX" --state-root-hash "$STATE_ROOT_HASH" | jq -r '.result | .stored_value | .Account | .main_purse') casper-client get-balance --node-address http://127.0.0.1:7777 --purse-uref "$PURSE_UREF" --state-root-hash "$STATE_ROOT_HASH" | jq -r '.result | .balance_value'
Делегируем баланс на своего валидатора
PUBLIC_KEY_HEX=$(sudo -u casper cat /etc/casper/validator_keys/public_key_hex) CHAIN_NAME=$(curl -s http://127.0.0.1:8888/status | jq -r '.chainspec_name')
sudo casper-client put-deploy \ --chain-name "$CHAIN_NAME" \ --node-address "http://127.0.0.1:7777/" \ --secret-key "/etc/casper/validator_keys/secret_key.pem" \ --session-path "$HOME/casper-node/target/wasm32-unknown-unknown/release/add_bid.wasm" \ --payment-amount 5500000000 \ --gas-price=1 \ --session-arg=public_key:"public_key='$PUBLIC_KEY_HEX'" \ --session-arg=amount:"u512='900000000000'" \ --session-arg=delegation_rate:"u8='10'"
В session-arg=amount вписываем сумму, которую хотим делегировать.
Для примера 900 CSPR = 900000000000
В session-arg=delegation_rate вписываем % вознаграждений, который хотим получить. По умолчанию 10%.
После выполнения команды получим хеш транзакциии.
Проверим, что транзакция прошла успешно
Вместо <DEPLOY_HASH> подставим хеш, что получили выше и выполним команду.
casper-client get-deploy --node-address http://127.0.0.1:7777 <DEPLOY_HASH> | jq .result.execution_results
Информация о текущем аукционе
Чтобы определить, была ли принята ставка, выполните следующую команду.
casper-client get-auction-info --node-address http://127.0.0.1:7777
После выигрыша аукциона можно найти себя в пуле активных валидаторов здесь.
Полезная информация
Casper Tools
На GitHub есть удобный набор инструментов для отслеживания состояния ноды и выполнения простых транзакций. Полный список возможностей можно найти здесь.
Предлагаю ознакомиться с простым дашбордом, который позволит узнавать состояние ноды.
sudo apt install git
git clone https://github.com/matsuro-hadouken/casper-tools.git
cd casper-tools
python3 status.py
На выходе должны получить что-то подобное.
Перезапуск ноды
systemctl restart casper-node-launcher
Полезные ссылки
Сайт проекта: https://casper.network/
Testnet Explorer: https://testnet.cspr.live/
Оригинал инструкции: https://github.com/make-software/how-to-casperlabs/blob/master/docs/ubuntu/setup-testnet-validator-from-scratch.md
Документация: https://casper.network/docs/
GitHub проекта: https://github.com/casper-network
Англоязычный телеграм-канал для участников тестнета: https://t.me/CasperTestNet
Discord проекта: https://discord.com/invite/Q38s3Vh
Telegram проекта: https://t.me/casperblockchain
Twitter проекта: https://twitter.com/Casper_Network
YouTube проекта: https://www.youtube.com/channel/UCjFz9Sfi4yFwocnDQTWDSqA