health-check.sh
Обзор
health-check.sh — это скрипт на Bash, предназначенный для комплексной проверки состояния игровой сети и связанных с ней компонентов. Он выполняет мониторинг:
Наличия и корректности конфигурационных файлов.
Доступности и состояния развернутых смарт-контрактов.
Подключения к RPC-узлу блокчейна.
Статуса валидаторов сети.
Наличия и работы оффчейн-компонентов, таких как игровые ноды.
Скрипт выводит цветные сообщения, информирующие пользователя об успешности или проблемах с каждым из проверяемых элементов. В случае критических ошибок выполнение прерывается с соответствующим уведомлением.
Подробное описание функционала
Основные блоки скрипта
Загрузка конфигурации
Проверяется наличие файла./config/network.env. Если файл есть — он загружается, иначе используется набор значений по умолчанию.Определение файла развертывания
Проверяется наличие файлов с информацией о деплое:./deployments/local.jsonили./deployments/sepolia.json. Используется первый найденный.Извлечение адресов смарт-контрактов
Из выбранного файла деплоя с помощьюjqизвлекаются адреса контрактов:MANA Token
Game Manager
Mana Settlement
Проверка соединения с RPC
Производится POST-запрос к RPC-URL (по умолчаниюhttp://localhost:8545) методомeth_blockNumberдля проверки доступности и получения номера последнего блока.Проверка статуса контрактов
Проверяется, задеплоены ли контракты (адреса не пустые и не равны "null").Проверка статуса валидаторов
Если существует директория./validators, скрипт перебирает JSON-файлы валидаторов, проверяет их активность и выводит информацию:Имя валидатора
Адрес
Статус (активен/неактивен)
Проверка оффчейн-компонентов
Проверяется наличие бинарного файла игровой ноды и локального конфигурационного файла. Также проверяется, запущены ли процессы с именемgame-node.Итоговое резюме
Подсчитывается количество найденных проблем и выводится итоговое сообщение о состоянии системы.
Описание ключевых частей скрипта
Переменные цветов
Переменная | Значение | Назначение |
|---|---|---|
RED |
| Красный цвет для ошибок |
GREEN |
| Зеленый цвет для успешных действий |
YELLOW |
| Желтый цвет для предупреждений |
BLUE |
| Синий цвет для заголовков |
NC |
| Сброс цвета (No Color) |
Проверка конфигурации
if [ -f "./config/network.env" ]; then
source ./config/network.env
echo -e "${GREEN}✓ Configuration loaded${NC}"
else
echo -e "${YELLOW}⚠ Configuration file not found, using defaults${NC}"
fi
Пояснение:
Если файл конфигурации существует, он подключается и может содержать переменные окружения, например, RPC_URL или MIN_VALIDATORS.
Определение файла деплоя
if [ -f "./deployments/local.json" ]; then
DEPLOYMENT_FILE="./deployments/local.json"
elif [ -f "./deployments/sepolia.json" ]; then
DEPLOYMENT_FILE="./deployments/sepolia.json"
else
echo -e "${RED}✗ No deployment file found${NC}"
exit 1
fi
Пояснение:
Последовательная проверка наличия файлов с информацией о развертывании смарт-контрактов. Если ни один файл не найден — скрипт завершается с ошибкой.
Извлечение адресов контрактов
Используется jq для парсинга JSON:
MANA_TOKEN=$(jq -r '.contracts.manaToken' $DEPLOYMENT_FILE)
GAME_MANAGER=$(jq -r '.contracts.gameManager' $DEPLOYMENT_FILE)
MANA_SETTLEMENT=$(jq -r '.contracts.manaSettlement' $DEPLOYMENT_FILE)
Пример использования:
Если local.json содержит:
{
"contracts": {
"manaToken": "0x123456...",
"gameManager": "0xabcdef...",
"manaSettlement": "0x987654..."
}
}
то переменные будут заполнены соответствующими адресами.
Проверка RPC соединения и получение номера блока
if curl -s -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
$RPC_URL > /dev/null; then
BLOCK_NUMBER=$(curl -s -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
$RPC_URL | jq -r '.result')
BLOCK_NUMBER_DEC=$((16#${BLOCK_NUMBER#0x}))
echo -e "${GREEN}✓ RPC connection successful${NC}"
echo " Latest block: $BLOCK_NUMBER_DEC"
else
echo -e "${RED}✗ RPC connection failed${NC}"
exit 1
fi
Особенности:
Отправляется JSON-RPC запрос методом
eth_blockNumber.Результат приходит в шестнадцатеричной форме, преобразуется в десятичное число.
В случае ошибки выводится сообщение и скрипт завершается.
Проверка статуса контрактов
Проверяется, что адреса контрактов не равны "null" и не пусты:
if [ "$MANA_TOKEN" != "null" ] && [ "$MANA_TOKEN" != "" ]; then
echo -e "${GREEN}✓ MANA Token deployed${NC}"
else
echo -e "${RED}✗ MANA Token not deployed${NC}"
fi
Аналогично для других контрактов.
Проверка валидаторов
Валидаторы хранятся в директории
./validatorsв JSON-файлах.Для каждого файла извлекается имя валидатора (имя файла без расширения), адрес
addressи флаг активностиisActive.Активные валидаторы подсчитываются, неактивные выводятся как предупреждения.
if [ -d "./validators" ]; then
for validator_file in ./validators/*.json; do
if [ -f "$validator_file" ]; then
VALIDATOR_NAME=$(basename "$validator_file" .json)
VALIDATOR_ADDR=$(jq -r '.address' "$validator_file")
IS_ACTIVE=$(jq -r '.isActive' "$validator_file")
if [ "$IS_ACTIVE" = "true" ]; then
echo -e "${GREEN}✓ $VALIDATOR_NAME ($VALIDATOR_ADDR)${NC}"
VALIDATOR_COUNT=$((VALIDATOR_COUNT + 1))
else
echo -e "${YELLOW}⚠ $VALIDATOR_NAME ($VALIDATOR_ADDR) - Inactive${NC}"
fi
fi
done
else
echo -e "${YELLOW}⚠ No validator directory found${NC}"
fi
Проверка оффчейн-компонентов
Проверяется наличие бинарного файла игровой ноды
./off-chain/game-node.Проверяется наличие локального конфигурационного файла
./off-chain/.env.local.Проверяется активность процессов с именем
game-node.
Итоговая проверка и вывод
Скрипт подсчитывает количество найденных проблем и выводит итоговое сообщение:
Если проблем нет — выводится зелёное сообщение о готовности сети.
Если есть проблемы — предупреждение с количеством проблем и рекомендацией проверить лог-файлы.
Взаимодействие с другими частями системы
Файлы конфигурации:
./config/network.env— содержит переменные окружения, которые могут влиять на поведение скрипта (например,RPC_URL,MIN_VALIDATORS).Файлы деплоя:
./deployments/local.jsonили./deployments/sepolia.json— содержат адреса смарт-контрактов.Валидаторы: JSON-файлы в
./validators/, описывающие валидаторов и их статус.Оффчейн компоненты: директория
./off-chain/с бинарями и конфигурациями, а также директория с логами.RPC-узел: скрипт обращается к RPC-узлу, чтобы проверить доступность блокчейна и получить актуальный номер блока.
Пример запуска
./health-check.sh
Вывод будет цветным и структурированным, например:
=== Game Network Health Check ===
Timestamp: Thu Jun 22 14:00:00 UTC 2024
✓ Configuration loaded
✓ Using deployment: ./deployments/local.json
Contract Addresses:
MANA Token: 0x123456...
Game Manager: 0xabcdef...
Mana Settlement: 0x987654...
Network Connectivity:
✓ RPC connection successful
Latest block: 1234567
Contract Status:
✓ MANA Token deployed
✓ Game Manager deployed
✓ Mana Settlement deployed
Validator Status:
✓ validator1 (0xabc123...)
⚠ validator2 (0xdef456...) - Inactive
Active validators: 1
✗ Insufficient validators (1 < 3)
Off-Chain Components:
✓ Game node binary exists
✓ Off-chain configuration exists
✓ Game nodes running: 2
=== Health Check Summary ===
⚠ 1 issues detected
Please review the issues above and take corrective action.
Важные детали реализации
Использование
set -eв начале скрипта гарантирует остановку выполнения при ошибках.Цветовой вывод реализован с помощью ANSI escape последовательностей.
Для парсинга JSON используется утилита
jq, что требует её наличия в системе.Проверка RPC соединения выполняется двумя последовательными запросами — можно оптимизировать одним, сохраняя вывод.
Валидаторы считаются активными только при
isActive == true; неактивные помечены предупреждениями.Минимальное количество валидаторов задаётся переменной
MIN_VALIDATORS, по умолчанию 3.
Диаграмма потока выполнения
flowchart TD
A[Запуск скрипта] --> B{Есть config/network.env?}
B -- Да --> C[Загрузить конфигурацию]
B -- Нет --> D[Вывести предупреждение, использовать дефолты]
C & D --> E{Файл деплоя?}
E -- local.json --> F[Использовать local.json]
E -- sepolia.json --> G[Использовать sepolia.json]
E -- Нет --> H[Завершить с ошибкой]
F & G --> I[Извлечь адреса контрактов]
I --> J[Проверить RPC соединение]
J --> K[Проверить статус контрактов]
K --> L[Проверить валидаторов]
L --> M[Проверить оффчейн-компоненты]
M --> N[Подсчитать и вывести итоги]
N --> O[Завершить]
style H fill:#f96,stroke:#900,stroke-width:2px,color:#900
style O fill:#6f6,stroke:#060,stroke-width:2px,color:#060
Заключение
Скрипт health-check.sh является мощным инструментом для быстрого аудита состояния игровой сети, смарт-контрактов, валидаторов и оффчейн-сервисов. Он помогает своевременно выявлять проблемы и уведомлять операторов системы для поддержания стабильной и работоспособной инфраструктуры.