GameManager.t.sol

Обзор файла

Файл GameManager.t.sol представляет собой набор автоматизированных тестов на языке Solidity для смарт-контракта GameManager. Этот контракт управляет основной игровой логикой, включая действия игроков, обработку батчей (пакетов действий), прогресс персонажей, PvP-бои, крафтинг и торговлю на маркетплейсе. Тесты написаны с использованием библиотеки Forge Std (forge-std/Test.sol), что обеспечивает удобную среду для имитации транзакций и проверки состояний.

Основная цель файла — проверить корректность работы GameManager в различных сценариях: успешное выполнение игровых действий, обработка ошибок, пауза контракта, проверка параметров, взаимодействие с токеном ManaToken и мок-контрактом SettlementMock. Тесты охватывают весь спектр игровых механик и обеспечивают надежность и безопасность смарт-контракта.


Классы и основные компоненты

В данном файле определён один тестовый контракт:

Контракт GameManagerTest

Переменные состояния:

Переменная

Тип

Описание

gameManager

GameManager

Тестируемый контракт

manaToken

ManaToken

Контракт токена MANA

settlement

SettlementMock

Мок для Settlement, эмуляция внешней логики

admin

address

Администратор, владелец прав

player1

address

Тестовый игрок 1

player2

address

Тестовый игрок 2

validator

address

Валидатор (не используется явно)

События (для проверки эмиссии):


Основные функции и методы

setUp()


Тесты конструктора


Тесты функции submitGameAction


Тесты функции processBatch


Тесты функции getActionStatus


Тесты функции getPlayerManaBalance и getPlayerState


Экстренные функции


Функции управления паузой


Проверка и валидация параметров для различных игровых механик


Расчёт стоимости игровых действий

Тесты проверяют правильное масштабирование стоимости с учётом уровня игрока и типа действия.


Проверка возможности выполнения действий игроком


Получение статистики


Вспомогательные функции для генерации параметров действий


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


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

Тесты демонстрируют интеграцию с токеном, проверку ролей, работу с правами администратора и игрока, а также обработку игровых событий.


Пример использования функции submitGameAction

vm.prank(player1);
bytes32 actionId = gameManager.submitGameAction(
    GameManager.ActionType.SPEND_MANA,
    abi.encode("some_action_parameters"),
    100 * 10**18
);

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

classDiagram
    class GameManagerTest {
        +GameManager gameManager
        +ManaToken manaToken
        +SettlementMock settlement
        +address admin
        +address player1
        +address player2
        +address validator
        
        +setUp()
        +test_Constructor()
        +test_Constructor_ZeroAddresses()
        +test_SubmitGameAction_SpendMana()
        +test_SubmitGameAction_EarnMana()
        +test_SubmitGameAction_InsufficientMana()
        +test_ProcessBatch_Success()
        +test_ProcessBatch_AlreadyProcessed()
        +test_GetActionStatus_Created()
        +test_GetPlayerManaBalance()
        +test_EmergencyUpdatePlayerState()
        +test_Pause()
        +test_AllActionTypes()
        +testFuzz_SubmitGameAction(uint256)
        +testFuzz_ProcessBatch(uint8)
        +test_SupportsInterface()
        +test_Constants()
        +test_SubmitPvPBattle_Success()
        +test_ValidatePvPBattleParams_ValidParams()
        +test_CalculatePvPCost_Ranked()
        +test_GetPvPStats_DefaultPlayer()
        +test_CanPlayRanked_InsufficientLevel()
        +test_SubmitCraftingAction_Success()
        +test_ValidateCraftingParams_ValidParams()
        +test_CalculateCraftingCost_Tier1()
        +test_GetCraftingStats_DefaultPlayer()
        +test_CanCraft_Tier1Recipe()
        +test_SubmitMarketplaceTrade_Success()
        +test_ValidateMarketplaceTradeParams_ValidParams()
        +test_CalculateMarketplaceCost_BuyTrade()
        +test_GetMarketplaceStats_DefaultPlayer()
        +test_CanMakeMarketplaceTrade_InsufficientLevel()
        +test_GetMarketplaceFeeRate_DefaultLevel()
        +test_GetTradeHistory_DefaultPlayer()
        +test_ValidateMarketplaceTrade_ComprehensiveValidation()
        +test_CalculateLevelUpCost_Level1()
        +test_CalculateExperienceForLevel_Level1()
        +test_CanLevelUp_InsufficientExperience()
        +test_GetLevelProgressInfo_CanLevelUp()
        +test_SubmitLevelUpAction_Success()
        +test_LevelUp_ProcessBatch_Success()
        +testFuzz_CalculateLevelUpCost(uint256)
        +testFuzz_CalculateExperienceForLevel(uint256)
        +testFuzz_CalculateLevelBasedCost_Crafting(uint256,uint256)
        +_createValidLevelUpParams(uint256,uint256)
        +_createValidCraftingParams(uint256,uint256)
        +_createValidBattleParams(address,uint256,uint8)
        +_createValidTradeParams(uint256,uint256,uint8,uint256)
    }

Заключение

Файл GameManager.t.sol — это полный и глубоко проработанный набор модульных и интеграционных тестов для контрактов игровой системы на Ethereum. Он обеспечивает высокую степень уверенности в корректности реализации ключевых игровых механик, включая манипуляции с токенами, обработку игровых действий, прогресс игроков, PvP-сражения, крафтинг и торговлю. Тесты охватывают как позитивные сценарии, так и негативные кейсы, а также используют фуззинг для проверки на граничных значениях.

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