December 9, 2021

Установка и запуск ноды валидатора в тестовой сети 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), убедитесь, что следующие порты открыты:

  • 7777
  • 8888
  • 9999
  • 35000

Проверить статус файервола можно командой

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

Внимание! Начинаем поэтапное обновление. Все обновления выполняем поочередно друг за другом.

Обновление до версии v1.1.0

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

Обновление до версии v1.1.2

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

Обновление до версии v1.2.0

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

Обновление до версии v1.2.1

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

Обновление до версии v1.3.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

Обновление до версии v1.3.2

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

Обновление до версии v1.3.4

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

Обновление до версии v1.4.1

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

Обновление до версии v1.4.2

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

Обновление до версии v1.4.3

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

Обновление до версии v1.4.4

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

Обновление до версии v1.4.5

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

Обновление до версии v1.4.6

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