SetupTestData.s.sol

Обзор

Файл SetupTestData.s.sol содержит скрипт на языке Solidity, предназначенный для настройки тестовых данных в локальной среде разработки. Основная задача скрипта — автоматическое создание и инициализация набора тестовых игроков с разным уровнем, количеством токенов MANA и достижениями для демонстрационных и тестовых целей.

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

Это позволяет быстро подготовить игровое окружение с реалистичными данными для тестирования игровых механик и пользовательского интерфейса.


Описание классов и функций

Контракт SetupTestData

Наследуется от Script из Forge Std — используется для написания скриптов развертывания и настройки.

Структура TestPlayer

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


Функция run() external

Главная функция скрипта, запускающая процесс настройки тестовых данных.

Логика работы:
  1. Загрузка адресов развернутых контрактов
    Читает JSON-файл ./deployments/local.json и парсит адреса контрактов ManaToken, GameManager и ManaSettlement.

  2. Создание экземпляров контрактов
    Инициализирует объекты для взаимодействия с контрактами по их адресам.

  3. Определение списка тестовых игроков
    Заполняет массив из 10 игроков с разными адресами, именами, количеством MANA и уровнем.

  4. Начало транзакционного режима (broadcast)
    Все последующие вызовы будут отправлены в блокчейн.

  5. Инициализация каждого игрока:

    • Выпуск токенов MANA на адрес игрока (manaToken.mint).

    • Регистрация игрока в контракте ManaSettlement.

    • Создание и установка профиля игрока с такими параметрами, как уровень, опыт, общее количество заработанной и потраченной маны, статистика побед/поражений, рейтинг, количество созданных предметов и достижения.

    • Вызов updatePlayerState для записи состояния игрока в контракте.

  6. Создание массива достижений (5 уникальных достижений, хешированных через keccak256).

  7. Добавление достижений игрокам
    Некоторым игрокам присваиваются достижения через addPlayerAchievement.

  8. Завершение транзакционного режима.

  9. Вывод в консоль итогов — количество созданных игроков, выданных достижений, общей суммы MANA, а также сводка по каждому игроку.

Параметры:
Возвращаемое значение:
Пример использования:

Этот скрипт запускается в среде Forge с помощью команды:

forge script SetupTestData.s.sol:SetupTestData --fork-url <url> --broadcast

Вспомогательная функция getTotalMana(TestPlayer[] memory players) internal pure returns (uint256 total)

Вычисляет суммарное количество токенов MANA, распределённых среди всех тестовых игроков.

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


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


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

Таким образом, SetupTestData.s.sol служит связующим звеном, которое конфигурирует начальное состояние для игровых и токеновых контрактов, обеспечивая готовую для тестов среду.


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

classDiagram
    class SetupTestData {
        +struct TestPlayer
        +run() external
        -getTotalMana(TestPlayer[] memory) internal pure returns (uint256)
    }
    class TestPlayer {
        +address addr
        +string name
        +uint256 manaAmount
        +uint256 level
    }
    SetupTestData o-- TestPlayer : uses

Резюме

SetupTestData.s.sol — это скрипт на Solidity, используемый для инициализации тестового игрового окружения с набором предопределённых игроков, их токенов и достижений. Он интегрируется с контрактами токенов и игрового состояния, облегчая тестирование и демонстрацию проекта. Скрипт демонстрирует грамотное использование Forge Std для работы с файлами, управления транзакциями и логирования.

Это важный инструмент для разработчиков и тестировщиков, позволяющий быстро создавать реалистичные игровые сценарии.