DeployGameContracts.s.sol

Обзор

Файл DeployGameContracts.s.sol представляет собой скрипт для развертывания полного набора смарт-контрактов, управляющих экономикой игровой системы на базе Ethereum. Основная задача — автоматизация процесса деплоя и начальной настройки трех ключевых контрактов:

Скрипт поддерживает два варианта развертывания:

  1. Основной деплой через контракт DeployGameContracts — с конфигурируемыми параметрами из окружения, включая возможность использования уже существующего контракта ManaSettlement.

  2. Локальный деплой через расширение DeployGameContractsLocal — для тестирования и разработки с предустановленными параметрами и созданием тестовых аккаунтов.


Структура и описание

Контракт: DeployGameContracts

Основной скрипт деплоя, наследующий функционал из forge-std/Script.sol.

Структуры данных


Метод: run()

function run() external virtual returns (DeployedContracts memory)

Основные шаги работы:

  1. Получение параметров деплоя из окружения через getDeployConfig().

  2. Запуск транзакций с помощью vm.startBroadcast().

  3. Поочередное развертывание контрактов:

    • ManaToken

    • ManaSettlement (если не используется существующий)

    • GameManager (с привязкой к settlement и токену)

  4. Настройка прав доступа:

    • Присвоение роли GAME_MANAGER_ROLE контракту GameManager в ManaToken.

    • Инициализация ManaSettlement с администратором и GameManager.

  5. При необходимости — чеканка начального количества токенов MANA администратору.

  6. Остановка транзакций (vm.stopBroadcast()).

  7. Верификация корректности деплоя через verifyDeployment().

  8. Вывод подробного отчета через outputDeploymentSummary().

  9. Возврат структуры с адресами развернутых контрактов.

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

forge script DeployGameContracts.s.sol:DeployGameContracts --broadcast

Метод: getDeployConfig()

function getDeployConfig() internal view returns (DeployConfig memory)

Используемые переменные окружения:

Переменная

Описание

Значение по умолчанию

GAME_ADMIN

Адрес администратора

msg.sender

EXISTING_SETTLEMENT

Адрес уже развернутого ManaSettlement

address(0) (не используется)

INITIAL_MANA_SUPPLY

Начальный выпуск токенов MANA

1_000_000 MANA (с 18 decimals)


Метод: verifyDeployment()

function verifyDeployment(
    ManaToken manaToken,
    GameManager gameManager,
    ManaSettlement manaSettlement,
    DeployConfig memory config
) internal view

Метод: outputDeploymentSummary()

function outputDeploymentSummary(
    DeployedContracts memory deployed,
    DeployConfig memory config
) internal view

Контракт: DeployGameContractsLocal

Расширяет DeployGameContracts для локального деплоя с фиксированными параметрами и тестовыми аккаунтами.

Метод: run()

function run() external override returns (DeployedContracts memory)

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


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


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

classDiagram
    class DeployGameContracts {
        +struct DeployConfig
        +struct DeployedContracts
        +run() DeployedContracts
        -getDeployConfig() DeployConfig
        -verifyDeployment(ManaToken, GameManager, ManaSettlement, DeployConfig)
        -outputDeploymentSummary(DeployedContracts, DeployConfig)
    }

    class DeployGameContractsLocal {
        +run() DeployedContracts
    }

    DeployGameContracts <|-- DeployGameContractsLocal

    DeployGameContracts ..> ManaToken
    DeployGameContracts ..> GameManager
    DeployGameContracts ..> ManaSettlement
    DeployGameContracts ..> Script

Итог

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