ManageValidators.s.sol

Обзор

ManageValidators.s.sol — это скриптовый контракт на Solidity, предназначенный для управления валидаторами в блокчейн-сети. Основная функциональность включает регистрацию валидаторов, управление их стейком (ставкой), проверку состояния и мониторинг валидаторов. Скрипт использует возможности Foundry (forge-std) для взаимодействия с окружением, чтения переменных окружения и записи файлов конфигурации.

Данный файл автоматизирует процессы взаимодействия с токеном MANA и позволяет:


Описание классов и функций

Контракт ManageValidators

Реализует логику управления валидаторами с помощью встроенных методов. Наследует Script из forge-std, что позволяет запускать скрипты в среде Foundry.


Структура ValidatorInfo

Хранит информацию о валидаторе:


Константы


Функция run()

Описание:
Главная точка входа скрипта. Считывает действие из переменной окружения VALIDATOR_ACTION и вызывает соответствующую функцию.

Параметры: отсутствуют.

Действия:

Пример использования:

VALIDATOR_ACTION=register forge script ManageValidators.s.sol

Функция registerValidator()

Описание:
Регистрация нового валидатора с заданным адресом, именем, эндпоинтом и стейком. Проверяет минимальный стейк, при необходимости ментит MANA токены, сохраняет информацию и генерирует конфигурационный файл.

Параметры: отсутствуют (использует vm.env* для получения параметров).

Переменные окружения:

Пример использования:

VALIDATOR_ACTION=register \
VALIDATOR_ADDRESS=0x... \
VALIDATOR_NAME="validator-1" \
VALIDATOR_ENDPOINT="http://validator1.node" \
STAKE_AMOUNT=10000000000000000000000 \
forge script ManageValidators.s.sol

Функция stakeValidator()

Описание:
Добавляет дополнительный стейк для валидатора. Если у валидатора недостаточно MANA, скрипт ментит необходимую сумму.

Параметры: отсутствуют (использует vm.env*).

Переменные окружения:


Функция unstakeValidator()

Описание:
Инициирует процесс уменьшения стейка валидатора. В текущей реализации — только вывод сообщения, в реальной системе ожидался бы вызов соответствующего контракта с задержкой.

Параметры: отсутствуют (использует vm.env*).

Переменные окружения:


Функция listValidators()

Описание:
Выводит на консоль список активных валидаторов и агрегированную информацию. В демо-версии список жестко закодирован.


Функция checkValidatorHealth()

Описание:
Показывает текущее состояние валидаторов и сети: онлайн статус, время последнего ответа, состояние консенсуса и кворума.


Вспомогательные функции

getManaTokenAddress()

Возвращает адрес контракта MANA токена, читая из файлов деплоя local.json или sepolia.json. Если файлы отсутствуют, берёт из переменной окружения MANA_TOKEN_ADDRESS.


getGameManagerAddress()

Аналогично getManaTokenAddress(), возвращает адрес контракта GameManager.


saveValidatorInfo(ValidatorInfo memory validator)

Сохраняет информацию валидатора в локальный JSON-файл в папке ./validators/.


generateValidatorConfig(string memory name, address validatorAddr, string memory endpoint)

Генерирует .env конфигурационный файл для валидатора с ключевыми параметрами, включая адреса контрактов и параметры работы.


Важные детали реализации


Взаимодействие с другими частями системы


Пример запуска скрипта

export VALIDATOR_ACTION=register
export VALIDATOR_ADDRESS=0x1234...abcd
export VALIDATOR_NAME="MyValidator"
export VALIDATOR_ENDPOINT="http://localhost:3030"
export STAKE_AMOUNT=10000000000000000000000 # 10,000 MANA

forge script ManageValidators.s.sol

Mermaid диаграмма структуры контракта

classDiagram
    class ManageValidators {
        <<contract>>
        +uint256 MIN_STAKE
        +run()
        -registerValidator()
        -stakeValidator()
        -unstakeValidator()
        -listValidators()
        -checkValidatorHealth()
        -getManaTokenAddress() address
        -getGameManagerAddress() address
        -saveValidatorInfo(ValidatorInfo)
        -generateValidatorConfig(string, address, string)
    }

    class ValidatorInfo {
        <<struct>>
        +address validatorAddress
        +string name
        +string endpoint
        +uint256 stakeAmount
        +bool isActive
        +uint256 registrationTime
    }

    ManageValidators --> ValidatorInfo : uses

Итог

ManageValidators.s.sol — скрипт для управления жизненным циклом валидаторов в тестовой или локальной среде блокчейна. Он автоматизирует процессы регистрации, стейкинга и мониторинга, облегчая взаимодействие с токеном MANA и сохраняет информацию в удобном формате. Возможность расширения и интеграции с реальными контрактами делает данный файл полезным инструментом для разработчиков и операторов сетей на базе Ethereum-совместимых цепочек.