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;
}
validatorAddress — Ethereum-адрес валидатора.
stakeAmount — сумма стейка в токенах MANA (в wei).
name — удобочитаемое имя валидатора, используется в конфигурационных файлах.
isActive — флаг активности валидатора (true/false).
Используется для хранения основных данных по каждому валидатору.
Константы
MIN_VALIDATOR_STAKE— минимальный допустимый стейк валидатора (10,000 MANA, с 18 десятичными).DEFAULT_VALIDATOR_STAKE— дефолтный стейк для валидаторов (50,000 MANA).
Функции
function run() external
Основная точка входа скрипта:
Определяет и загружает адреса развернутых контрактов из JSON-файлов (
./deployments/local.jsonили./deployments/sepolia.json).Создает экземпляры контрактов
ManaToken,GameManager,ManaSettlement.Выводит информацию о подключенных контрактах в консоль.
Получает конфигурации валидаторов через
getValidatorConfigs().Запускает транзакции (через
vm.startBroadcast()/vm.stopBroadcast()), которые:Для каждого валидатора вызывают
setupValidator— распределяют токены для стейкинга.
После настройки генерирует конфигурационные файлы валидаторов и
docker-compose.yml.Выводит итоговую информацию о проведенной настройке.
Пример использования:
forge script SetupValidators.s.sol --broadcast
function getValidatorConfigs() internal pure returns (ValidatorConfig[] memory)
Возвращает массив из 3 предопределенных валидаторов с фиксированными адресами, именами и стейками.
Валидаторы настроены с дефолтным стейком 50,000 MANA.
Все валидаторы активны.
function setupValidator(ManaToken manaToken, ValidatorConfig memory validator) internal
Настройка отдельного валидатора:
Логгирует информацию о валидаторе.
Вызывает функцию
mintконтрактаManaTokenдля выдачи токенов валидатору.В коде оставлено место для будущей интеграции с системой регистрации валидаторов Symbiotic.
function generateValidatorConfigs(ValidatorConfig[] memory validators) internal
Генерация конфигурационных файлов для каждого валидатора и создание директории ./validators:
Для каждого валидатора создается
.envфайл с настройками:Имя валидатора.
Адрес валидатора.
Размер стейка.
Минимальный стейк.
Флаг активности.
Настройки сети и параметры работы валидатора (например, URL API, таймауты, уровень логирования).
После генерации файлов вызывается
generateDockerComposeдля созданияdocker-compose.yml.
function generateDockerCompose(ValidatorConfig[] memory validators) internal
Генерирует docker-compose.yml, описывающий запуск валидаторов и вспомогательного сервиса anvil (локальный Ethereum node):
Для каждого валидатора создается отдельный сервис с:
Сборкой из
./off-chain/Dockerfile.Подключением соответствующего
.envфайла.Пробросом портов (начиная с 8090).
Зависимостью от
anvil.Подключением к
game-network.
Сервис
anvilзапускает локальный Ethereum node с 10 аккаунтами и балансом 1000 ETH.Создается сеть
game-networkтипаbridge.
Взаимодействие с другими частями системы
Использует адреса и ABI контрактов
ManaToken,GameManagerиManaSettlement, которые должны быть предварительно развернуты.Через контракт
ManaTokenвыполняется выпуск токенов MANA валидаторам.Генерируемые конфигурационные файлы и
docker-compose.ymlиспользуются для запуска off-chain валидаторов (возможно, в Docker-контейнерах), что позволяет интегрировать Ethereum-валидаторов с внешними сервисами.Предполагается дальнейшая интеграция с системой регистрации валидаторов Symbiotic (помечено в комментариях).
Важные детали реализации
Используется Forge scripting environment (команды
vm.*), что позволяет взаимодействовать с файловой системой и запускать внешние процессы (например, создание директорий).Стейк валидаторов выдается путем вызова
mintтокена MANA на соответствующие адреса — таким образом, валидаторы получают токены для стейкинга.Конфигурационные файлы содержат как параметры сети, так и параметры работы валидаторов (batch size, таймауты и т.д.).
Docker-окружение позволяет быстро развернуть локальную сеть валидаторов для тестирования.
Пример конфигурационного файла валидатора (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. Это важный инструмент для разработчиков и операторов валидаторов в рамках данного проекта.