SetupValidators.s.sol

Обзор

SetupValidators.s.sol — это скрипт на Solidity, предназначенный для настройки валидаторов в локальной или тестовой сети. Его основная задача — подготовить аккаунты валидаторов, выделив им необходимое количество токенов MANA для стейкинга, а также сгенерировать конфигурационные файлы и docker-compose для дальнейшего запуска и управления валидаторами в off-chain среде.

Скрипт интегрируется с уже развернутыми контрактами ManaToken, GameManager и ManaSettlement, используя их адреса из JSON-файлов развертывания. Он автоматизирует процесс распределения токенов валидаторам, создание локальных конфигураций и подготовку среды для запуска валидаторов.


Подробное описание

Контракт SetupValidators

Контракт наследуется от Script (библиотека forge-std), что позволяет выполнять сценарии развертывания и настройки смарт-контрактов.


Структура ValidatorConfig

struct ValidatorConfig {
    address validatorAddress;
    uint256 stakeAmount;
    string name;
    bool isActive;
}

Используется для хранения основных данных по каждому валидатору.


Константы


Функции

function run() external

Основная точка входа скрипта:

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

forge script SetupValidators.s.sol --broadcast

function getValidatorConfigs() internal pure returns (ValidatorConfig[] memory)

Возвращает массив из 3 предопределенных валидаторов с фиксированными адресами, именами и стейками.


function setupValidator(ManaToken manaToken, ValidatorConfig memory validator) internal

Настройка отдельного валидатора:


function generateValidatorConfigs(ValidatorConfig[] memory validators) internal

Генерация конфигурационных файлов для каждого валидатора и создание директории ./validators:


function generateDockerCompose(ValidatorConfig[] memory validators) internal

Генерирует docker-compose.yml, описывающий запуск валидаторов и вспомогательного сервиса anvil (локальный Ethereum node):


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


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


Пример конфигурационного файла валидатора (validator-1.env)

# Validator Configuration: validator-1
VALIDATOR_NAME=validator-1
VALIDATOR_ADDRESS=0x70997970C51812dc3A010C7d01b50e0d17dc79C8
STAKE_AMOUNT=50000000000000000000000
MIN_STAKE=10000000000000000000000
IS_ACTIVE=true

# Network Configuration
RELAY_API_URL=http://localhost:8080
EVM_RPC_URL=http://localhost:8545

# Validator Settings
BATCH_SIZE=100
BATCH_TIMEOUT=30s
CONSENSUS_TIMEOUT=60s
LOG_LEVEL=info

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

classDiagram
    class SetupValidators {
        +uint256 MIN_VALIDATOR_STAKE
        +uint256 DEFAULT_VALIDATOR_STAKE
        +run()
        -getValidatorConfigs() ValidatorConfig[]
        -setupValidator(ManaToken, ValidatorConfig)
        -generateValidatorConfigs(ValidatorConfig[])
        -generateDockerCompose(ValidatorConfig[])
    }

    class ValidatorConfig {
        +address validatorAddress
        +uint256 stakeAmount
        +string name
        +bool isActive
    }

    SetupValidators "1" *-- "[]" ValidatorConfig : uses

Итог

SetupValidators.s.sol — это автоматизированный скрипт настройки валидаторов в экосистеме, связанной с токеном MANA и игровым менеджером. Он упрощает процесс подготовки локальных валидаторов для разработки и тестирования, выделяя токены, создавая конфигурационные файлы и поднимая локальную инфраструктуру с помощью Docker. Это важный инструмент для разработчиков и операторов валидаторов в рамках данного проекта.