ConfigureNetwork.s.sol
Обзор
Файл ConfigureNetwork.s.sol представляет собой скрипт на языке Solidity, предназначенный для настройки параметров игровой сети, включающей токен MANA и связанные игровые контракты. Основная задача скрипта — задать и задокументировать экономические, операционные и параметры безопасности для оптимальной работы игрового протокола. Кроме того, скрипт генерирует конфигурационные файлы и скрипты мониторинга сети, которые используются вне блокчейна для поддержки и слежения за состоянием системы.
Этот контракт расширяет функциональность Script из Forge Std, что позволяет запускать конфигурационные операции в тестовых и локальных средах.
Структуры данных
EconomicParameters
Структура, описывающая экономические параметры игровой сети:
Поле | Описание |
|---|---|
baseManaReward | Базовое вознаграждение за игровые действия (в wei MANA) |
levelUpManaCost | Стоимость повышения уровня персонажа (в wei MANA) |
craftingManaCost | Базовая стоимость крафта (в wei MANA) |
pvpEntryFee | Вступительный взнос для PvP боёв (в wei MANA) |
validatorCommission | Комиссия валидаторов в базисных пунктах (100 б.п. = 1%) |
stakingRewardRate | Годовая ставка вознаграждения стейкинга (%) |
slashingPenalty | Штраф за слашинг (%) |
marketplaceFee | Торговая комиссия маркетплейса в базисных пунктах |
OperationalParameters
Структура, описывающая операционные параметры сети:
Поле | Описание |
|---|---|
batchSize | Максимальное число действий в одном батче |
batchTimeout | Таймаут батча в секундах |
consensusTimeout | Таймаут достижения консенсуса в секундах |
epochDuration | Длительность эпохи (периода) в секундах |
minValidators | Минимальное количество валидаторов |
maxValidators | Максимальное количество валидаторов |
quorumPercentage | Процент кворума (0-100), необходимый для консенсуса |
SecurityParameters
Структура, описывающая параметры безопасности:
Поле | Описание |
|---|---|
maxActionValue | Максимальное значение за одно действие (в wei MANA) |
dailyActionLimit | Лимит действий в день на одного игрока |
suspiciousThreshold | Порог подозрительной активности (действия в минуту) |
emergencyPauseDelay | Задержка перед экстренной паузой (в секундах) |
Класс ConfigureNetwork
Наследуется от Script (forge-std), что позволяет выполнять транзакции и операции с контрактами в рамках скриптового окружения.
Методы
run() external
Основная точка входа. Последовательность действий:
Выводит лог начала конфигурации.
Загружает адреса ключевых контрактов:
ManaToken,GameManager,ManaSettlement.Получает параметры конфигурации из внутренних функций.
Запускает режим broadcast (отправка транзакций).
Вызывает методы конфигурирования по группам параметров.
Останавливает broadcast.
Генерирует конфигурационные файлы (текстовый
.envи JSON).Создаёт скрипты мониторинга сети.
Выводит итоговые сообщения о завершении.
getManaTokenAddress() internal view returns (address)
Возвращает адрес контракта токена MANA, используя функцию getContractAddress.
getGameManagerAddress() internal view returns (address)
Возвращает адрес контракта GameManager.
getManaSettlementAddress() internal view returns (address)
Возвращает адрес контракта ManaSettlement.
getContractAddress(string memory contractName) internal view returns (address)
Параметры:
contractName— имя контракта, адрес которого необходимо получить.Возвращает адрес контракта, считанный из JSON-файла развертывания.
Логика:
Сначала пытается прочитать локальный файл
./deployments/local.json.Если не найден — пытается
./deployments/sepolia.json.Если ни один файл не найден — происходит revert.
Для получения адреса используется
vm.parseJsonAddressс путем.contracts.<contractName>.
getEconomicParameters() internal pure returns (EconomicParameters memory)
Возвращает предопределённый набор экономических параметров, например:
50 MANA базовый наградной токен.
1% комиссия валидаторов.
5% годовая ставка вознаграждения стейкинга и т.д.
getOperationalParameters() internal pure returns (OperationalParameters memory)
Возвращает предопределённый набор параметров для управления сетью, например:
Размер батча 100 действий.
Таймауты и длительности эпох.
Кворум 67% и др.
getSecurityParameters() internal pure returns (SecurityParameters memory)
Возвращает параметры безопасности, например:
Максимальная ценность действия 10 000 MANA.
Лимит 1000 действий в сутки на игрока.
Задержка экстренной паузы — 1 час.
configureEconomicParameters(address manaTokenAddr, address gameManagerAddr, EconomicParameters memory params) internal
Параметры:
manaTokenAddr — адрес токена MANA.
gameManagerAddr — адрес менеджера игры.
params— структура экономических параметров.
Функция выводит в консоль значения параметров.
В текущей реализации не записывает параметры непосредственно в контракты (комментарии указывают, что это может быть сделано в будущем).
configureOperationalParameters(address gameManagerAddr, OperationalParameters memory params) internal
Параметры:
gameManagerAddr — адрес менеджера игры.
params— структура операционных параметров.
Выводит в консоль значения параметров.
Аналогично экономической конфигурации, пока только логирование.
configureSecurityParameters(address gameManagerAddr, SecurityParameters memory params) internal
Параметры:
gameManagerAddr — адрес менеджера игры.
params— структура параметров безопасности.
Выводит параметры в консоль.
generateConfigurationFiles(EconomicParameters memory economicParams, OperationalParameters memory operationalParams, SecurityParameters memory securityParams) internal
Генерирует и записывает в файловую систему два файла:
./config/network.env— текстовый файл с параметрами в формате переменных окружения../config/network.json— JSON-файл с параметрами, удобный для парсинга внешними сервисами.
Использует vm.writeFile для записи файлов.
createMonitoringScripts() internal
Создаёт два скрипта на Bash:
./scripts/health-check.sh — скрипт для проверки состояния сети.
./scripts/collect-metrics.sh— скрипт для сбора метрик сети.
Скрипты содержат шаблоны с комментариями, где можно добавить логику проверки и сбора данных.
Взаимодействие с другими частями системы
Скрипт взаимодействует с контрактами
ManaToken,GameManagerиManaSettlementпо их адресам, которые он считывает из JSON-файлов развертывания.Использует инфраструктуру Forge Std (
Script,console,vm) для выполнения операций настройки и записи файлов.Генерируемые конфигурационные файлы и скрипты предназначены для использования вне блокчейна, например, для администрирования сети, мониторинга и потенциалной автоматизации.
Важные детали реализации
Параметры на текущем этапе не устанавливаются напрямую в контрактах, а лишь логируются. Это может быть расширено для реальной записи параметров.
Используется формат базисных пунктов (basis points) для комиссии и торговых сборов — 1% = 100 б.п.
Структуры параметров сгруппированы по тематике, что упрощает расширение и поддержку.
Генерация конфигурационных файлов и скриптов мониторинга повышает удобство эксплуатации и интеграции с DevOps-процессами.
Пример использования
Для запуска конфигурации достаточно выполнить скрипт с помощью Forge:
forge script ConfigureNetwork.s.sol:ConfigureNetwork --broadcast
В результате:
Будут выведены в консоль параметры конфигурации.
Созданы файлы
./config/network.envи./config/network.json.Созданы скрипты мониторинга в папке
./scripts/.
Диаграмма структуры класса ConfigureNetwork
classDiagram
class ConfigureNetwork {
+run()
-getManaTokenAddress() address
-getGameManagerAddress() address
-getManaSettlementAddress() address
-getContractAddress(string) address
-getEconomicParameters() EconomicParameters
-getOperationalParameters() OperationalParameters
-getSecurityParameters() SecurityParameters
-configureEconomicParameters(address, address, EconomicParameters)
-configureOperationalParameters(address, OperationalParameters)
-configureSecurityParameters(address, SecurityParameters)
-generateConfigurationFiles(EconomicParameters, OperationalParameters, SecurityParameters)
-createMonitoringScripts()
}
class EconomicParameters {
+baseManaReward: uint256
+levelUpManaCost: uint256
+craftingManaCost: uint256
+pvpEntryFee: uint256
+validatorCommission: uint256
+stakingRewardRate: uint256
+slashingPenalty: uint256
+marketplaceFee: uint256
}
class OperationalParameters {
+batchSize: uint256
+batchTimeout: uint256
+consensusTimeout: uint256
+epochDuration: uint256
+minValidators: uint256
+maxValidators: uint256
+quorumPercentage: uint256
}
class SecurityParameters {
+maxActionValue: uint256
+dailyActionLimit: uint256
+suspiciousThreshold: uint256
+emergencyPauseDelay: uint256
}
ConfigureNetwork o-- EconomicParameters
ConfigureNetwork o-- OperationalParameters
ConfigureNetwork o-- SecurityParameters
Заключение
ConfigureNetwork.s.sol — критически важный скрипт для централизованной и стандартизированной настройки параметров игровой сети с токеном MANA. Он помогает разработчикам и администраторам быстро и прозрачно конфигурировать и документировать ключевые параметры, а также обеспечивает создание вспомогательных инструментов для мониторинга и управления сетью. Несмотря на то, что прямое изменение параметров в смарт-контрактах пока не реализовано, архитектура легко расширяема и хорошо интегрируется с инфраструктурой Forge и внешними системами.
---
Если необходимы дополнительные пояснения или примеры, пожалуйста, сообщите.