IntegrateSymbiotic.s.sol
Обзор файла
Данный Solidity-файл содержит скрипт IntegrateSymbiotic, предназначенный для интеграции игровых смарт-контрактов с существующей инфраструктурой Symbiotic. Скрипт нацелен на конфигурацию провайдера голосующих прав (VotingPowerProvider) с использованием токена MANA, а также на интеграцию GameManager с контрактом Settlement из Symbiotic. Кроме того, скрипт задаёт параметры консенсуса и настройки регистрации валидаторов.
Файл также содержит вспомогательный контракт DeploySymbioticInfrastructure, который служит для развертывания инфраструктуры Symbiotic в тестовых целях, если она недоступна.
Подробное описание классов и функций
Контракт IntegrateSymbiotic
Основной скрипт, наследующий Script из forge-std, реализующий интеграцию.
Структуры
SymbioticConfigСодержит адреса ключевых компонентов Symbiotic инфраструктуры:
settlement: адрес контракта SettlementvotingPowers: адрес контракта VotingPowersdriver: адрес контракта DriveroperatorRegistry: адрес реестра операторовvaultFactory: адрес фабрики хранилищvaultConfigurator: адрес конфигуратора хранилищ
GameConfigСодержит адреса игровых контрактов и администратора:
manaToken: адрес токена MANAgameManager: адрес менеджера игрыmanaSettlement: адрес контракта ManaSettlementadmin: адрес администратора
Функция run()
Основной метод, запускающий процесс интеграции.
Описание работы:
Логирует начало интеграции
Загружает конфигурации Symbiotic и игровых контрактов
Запускает транзакции (
vm.startBroadcast()/vm.stopBroadcast())Поэтапно вызывает функции:
configureVotingPowerProvider— настройка провайдера голосующих прав с MANAintegrateGameManagerWithSettlement— интеграцияGameManagerсSettlementconfigureConsensusParameters— настройка параметров консенсусаsetupValidatorRegistration— настройка регистрации валидаторов
Генерирует и сохраняет конфигурационные файлы (
generateIntegrationConfig)Логирует успешное завершение интеграции
Использование:
IntegrateSymbiotic integrateSymbiotic = new IntegrateSymbiotic();
integrateSymbiotic.run();
Вспомогательные функции загрузки конфигураций
getSymbioticConfig() internal view returns (SymbioticConfig memory)
Загружает адреса Symbiotic компонентов из переменных окружения (
vm.envOr) или возвращает пустые адреса (для последующего развертывания в тестах).Логирует отсутствие существующей инфраструктуры.
getGameConfig() internal view returns (GameConfig memory)
Пытается загрузить игровые контракты из локального или Sepolia deployment JSON файла.
При отсутствии файлов читает адреса из переменных окружения.
Возвращает структуру с заполненными адресами игровых контрактов и администратором.
Функции интеграции и настройки
configureVotingPowerProvider(SymbioticConfig memory symbioticConfig, GameConfig memory gameConfig) internal
Если контракт
VotingPowersотсутствует, развертывает новый.Настраивает токен MANA как токен для стейкинга, выдаёт роль
STAKING_MANAGER_ROLEконтракту VotingPowers.Логирует ход и результат конфигурации.
integrateGameManagerWithSettlement(SymbioticConfig memory symbioticConfig, GameConfig memory gameConfig) internal
Интегрирует
GameManagerс Symbiotic Settlement, если он доступен.В противном случае использует автономный
ManaSettlement.В текущей реализации логирует действия; реальная конфигурация требует поддержки в
GameManager.
configureConsensusParameters(SymbioticConfig memory symbioticConfig, GameConfig memory gameConfig) internal
Логирует и задаёт параметры консенсуса:
Минимальное количество валидаторов — 3
Кворум — 67% (2/3)
Длительность эпохи — 300 секунд (5 минут)
Фактическое применение параметров в контракте
Settlementв текущем коде отсутствует — пока ведётся логирование.
setupValidatorRegistration(SymbioticConfig memory symbioticConfig, GameConfig memory gameConfig) internal
Задаёт параметры для регистрации валидаторов:
Минимальный стейк — 10,000 MANA
Максимальное количество валидаторов — 100
Параметры слэшинга: 10% за злонамеренные действия, 1% за недоступность
В текущем виде также только логирует значения.
generateIntegrationConfig(SymbioticConfig memory symbioticConfig, GameConfig memory gameConfig) internal
Формирует и сохраняет два файла конфигурации:
symbiotic-integration.env— для использования в окружениях развертыванияsymbiotic-integration.json— удобный JSON для парсинга оффчейн сервисами
Содержит адреса контрактов и параметры консенсуса.
Контракт DeploySymbioticInfrastructure
Вспомогательный скрипт для тестового развертывания Symbiotic инфраструктуры.
Метод
run()выводит лог о начале развертывания.В текущей реализации не содержит логику развертывания, а лишь заглушку с комментариями.
Возвращает пустые адреса.
Важные детали реализации и алгоритмы
Используется библиотека Forge Std (
forge-std) с возможностью чтения переменных окружения, файлов и ведения логов.Настройка ролей в токене MANA происходит с помощью вызова
grantRole.Интеграция с
GameManagerпредполагает возможность конфигурации адресаSettlement, однако в коде нет вызовов модификации состоянияGameManager. Это скорее заготовка для дальнейшего расширения.Консенсусные параметры и параметры регистрации валидаторов в текущей версии скрипта не применяются напрямую к контрактам, а выводятся в лог для последующего использования.
Генерация конфигурационных файлов помогает синхронизировать состояние блокчейна с оффчейн сервисами и другими компонентами экосистемы.
Скрипт предполагает гибкость в работе с разными средами — локальной, тестовой (Sepolia) и продакшен.
Взаимодействие с другими частями системы
Импортируются и используются контракты:
ManaToken— токен MANA с ролью стейкингаGameManager— основной контракт управления игройManaSettlement— контракт для урегулирования с MANAVotingPowers,Settlement,Driver— компоненты Symbiotic инфраструктуры
Используется
forge-stdдля управления скриптом, доступа к окружению и логированию.Скрипт читает конфигурации из файлов развертывания или переменных окружения, что позволяет интегрироваться в CI/CD процессы.
Конфигурационные файлы, которые он генерирует, служат связующим звеном для оффчейн компонентов и операторов сети.
Диаграмма структуры файла
classDiagram
class IntegrateSymbiotic {
+run()
-getSymbioticConfig() SymbioticConfig
-getGameConfig() GameConfig
-configureVotingPowerProvider(SymbioticConfig, GameConfig)
-integrateGameManagerWithSettlement(SymbioticConfig, GameConfig)
-configureConsensusParameters(SymbioticConfig, GameConfig)
-setupValidatorRegistration(SymbioticConfig, GameConfig)
-generateIntegrationConfig(SymbioticConfig, GameConfig)
}
IntegrateSymbiotic o-- SymbioticConfig : uses
IntegrateSymbiotic o-- GameConfig : uses
class SymbioticConfig {
+address settlement
+address votingPowers
+address driver
+address operatorRegistry
+address vaultFactory
+address vaultConfigurator
}
class GameConfig {
+address manaToken
+address gameManager
+address manaSettlement
+address admin
}
class DeploySymbioticInfrastructure {
+run() (address, address, address)
}
IntegrateSymbiotic --> ManaToken : interacts
IntegrateSymbiotic --> GameManager : interacts
IntegrateSymbiotic --> VotingPowers : deploys/configures
IntegrateSymbiotic --> Settlement : integrates
Итог
Файл IntegrateSymbiotic.s.sol представляет собой мощный скрипт для автоматизации интеграции игровых контрактов с инфраструктурой Symbiotic. Он обеспечивает:
Загрузку и проверку конфигураций
Развёртывание и настройку ключевых компонентов
Настройку параметров консенсуса и регистрации валидаторов
Генерацию конфигурационных файлов для оффчейн использования
Реализация ориентирована на удобство разработки и тестирования, с возможностью расширения функционала и автоматизации в производственных средах.