CrossChainGameActions.t.sol
Обзор файла
Данный файл представляет собой комплексный тестовый контракт на языке Solidity, реализующий проверку функциональности кросс-чейн игровых действий и связанных с ними механизмов внутри экосистемы blockchain-игры. Контракт CrossChainGameActionsTest использует фреймворк Forge для тестирования и симулирует взаимодействие между двумя игровыми цепочками (CHAIN_1 и CHAIN_2) с помощью различных компонентов: менеджеров игры, токенов MANA, менеджеров кросс-чейн переводов и проверок, а также механизмов синхронизации и обработки батчей игровых действий.
Цель тестов — убедиться в корректности подачи, валидации, передачи и обработки кросс-чейн игровых действий и состояний игроков, а также проверить корректность обработки ошибок и оптимизацию газа.
Описание классов и функций
Контракт CrossChainGameActionsTest
Наследуется от Test из forge-std. Содержит множество публичных переменных для хранения экземпляров смарт-контрактов и адресов участников. Включает набор тестовых функций, которые проверяют отдельные аспекты кросс-чейн механики.
Публичные свойства
GameManager public gameManager1, gameManager2;
Инстансы менеджеров игры для двух цепочек.CrossChainManaManager public crossChainManager1, crossChainManager2;
Менеджеры для управления кросс-чейн переводами MANA.ManaToken public manaToken1, manaToken2;
Токены MANA для каждой из цепочек.ManaSettlement public manaSettlement1, manaSettlement2;
Контракты для урегулирования MANA.CrossChainVerificationManager public verificationManager;
Менеджер для верификации кросс-чейн сообщений.SymbioticDVN public symbioticDVN;
Компонент верификации на основе DVN.SymbioticISM public symbioticISM;
Компонент ISM для интеграции.Settlement public settlement;
Мок-контракт урегулирования.address public admin, player1, player2, validator1, validator2;
Адреса участников теста.uint64 public constant CHAIN_1 = 1;
Идентификатор первой цепочки.uint64 public constant CHAIN_2 = 2;
Идентификатор второй цепочки.
События
CrossChainGameActionSubmitted — публикуется при отправке кросс-чейн игрового действия.
CrossChainBatchProcessed— при обработке батча действий.CrossChainPlayerStateSynchronized — при синхронизации состояния игрока.
Функции
function setUp() public
Инициализация окружения для тестов:
Развёртывание моков и основных контрактов.
Назначение ролей и разрешений.
Добавление поддерживаемых цепочек и валидаторов.
Начальная эмиссия MANA игрокам.
Тестовые функции
testSubmitCrossChainGameAction()
Проверяет успешную отправку кросс-чейн действия игроком (например, крафт предмета). Подтверждает событие и корректность записи действия.testCrossChainManaTransfer()
Тестирует инициацию кросс-чейн перевода токенов MANA с блокировкой баланса и записью перевода.testCrossChainGameActionInitiation()
Проверяет начало кросс-чейн PvP сражения с корректной записью параметров.testCrossChainBatchProcessing()
Симулирует обработку батча действий с обновлением состояний игроков, используя мок подписи от валидаторов.testPlayerStateSynchronization()
Тестирует синхронизацию состояния игрока между цепочками с проверкой обновления локального состояния.testCrossChainActionValidation()
Проверяет валидацию кросс-чейн действий, включая проверку корректности целевой цепочки.testCrossChainManaBalanceQuery()
Запрашивает баланс MANA игрока в кросс-чейн контексте и проверяет корректность возврата.test_Revert_InvalidCrossChainAction()
Проверяет откат транзакции при передаче некорректного параметра — нулевого идентификатора целевой цепочки.test_Revert_InsufficientManaForCrossChain()
Проверяет откат при недостаточном балансе MANA для выполнения кросс-чейн действия.testCrossChainActionExpiry()
Симулирует истечение срока действия кросс-чейн действия и проверяет, что статус меняется на EXPIRED.testMultiChainPlayerState()
Проверяет, что состояния игрока могут отличаться в разных цепочках, и корректно обновляются.testCrossChainActionGasOptimization()
Сравнивает потребление газа при обычном и кросс-чейн действиях, убеждается, что разница в расходе газа находится в приемлемых пределах.
Важные детали реализации и алгоритмы
Роли и разрешения: Для обеспечения безопасности и правильной работы назначаются роли
GAME_MANAGER_ROLEиSTAKING_MANAGER_ROLEна токенах MANA, что ограничивает доступ к важным функциям.Кросс-чейн поддержка: Менеджеры кросс-чейн действий и переводов поддерживают список валидаторов и цепочек, что обеспечивает подтверждение легитимности данных и предотврашает атаки.
Обработка батчей: Для повышения эффективности обработки и синхронизации состояния используется механизм батчевой обработки игровых действий с подтверждением кворума валидаторов.
Синхронизация состояний: Состояния игроков обновляются с помощью подписанных доказательств (proof), что поддерживает консистентность данных между цепочками.
Тестирование исключений: Применяется проверка корректной обработки ошибок и откатов при некорректных операциях.
Оптимизация газа: Тесты измеряют потребление газа, что позволяет контролировать эффективность и масштабируемость кросс-чейн операций.
Взаимодействие с другими частями системы
GameManager — основной контракт, управляющий игровыми действиями, состояниями игроков и логикой игры.
ManaToken — ERC20 токен, используемый в игре для оплаты действий и крафта.
CrossChainManaManager — управление кросс-чейн переводами токенов и игровыми действиями.
CrossChainVerificationManager, SymbioticDVN, SymbioticISM — обеспечивают проверку и валидацию сообщений и действий между цепочками.
ManaSettlement и Settlement — механизмы урегулирования балансов и состояний.
Данный тестовый файл обеспечивает проверку, что все вышеуказанные компоненты корректно взаимодействуют в сценариях кросс-чейн игры.
Пример использования
// Игрок отправляет кросс-чейн действие крафта предмета на другую цепочку
vm.startPrank(player1);
manaToken1.approve(address(gameManager1), 1000 * 10**18);
bytes memory craftParams = abi.encode(uint256(100), uint256(5));
bytes32 actionId = gameManager1.submitCrossChainGameAction(
GameManager.ActionType.CRAFT_ITEM,
craftParams,
250 * 10**18,
CHAIN_2
);
vm.stopPrank();
Диаграмма структуры файла
classDiagram
class CrossChainGameActionsTest {
+GameManager gameManager1
+GameManager gameManager2
+CrossChainManaManager crossChainManager1
+CrossChainManaManager crossChainManager2
+ManaToken manaToken1
+ManaToken manaToken2
+ManaSettlement manaSettlement1
+ManaSettlement manaSettlement2
+CrossChainVerificationManager verificationManager
+SymbioticDVN symbioticDVN
+SymbioticISM symbioticISM
+Settlement settlement
+address admin
+address player1
+address player2
+address validator1
+address validator2
+uint64 CHAIN_1
+uint64 CHAIN_2
+setUp()
+testSubmitCrossChainGameAction()
+testCrossChainManaTransfer()
+testCrossChainGameActionInitiation()
+testCrossChainBatchProcessing()
+testPlayerStateSynchronization()
+testCrossChainActionValidation()
+testCrossChainManaBalanceQuery()
+test_Revert_InvalidCrossChainAction()
+test_Revert_InsufficientManaForCrossChain()
+testCrossChainActionExpiry()
+testMultiChainPlayerState()
+testCrossChainActionGasOptimization()
}
CrossChainGameActionsTest --> GameManager : gameManager1, gameManager2
CrossChainGameActionsTest --> CrossChainManaManager : crossChainManager1, crossChainManager2
CrossChainGameActionsTest --> ManaToken : manaToken1, manaToken2
CrossChainGameActionsTest --> ManaSettlement : manaSettlement1, manaSettlement2
CrossChainGameActionsTest --> CrossChainVerificationManager : verificationManager
CrossChainGameActionsTest --> SymbioticDVN : symbioticDVN
CrossChainGameActionsTest --> SymbioticISM : symbioticISM
CrossChainGameActionsTest --> Settlement : settlement
Заключение
Файл CrossChainGameActions.t.sol представляет собой обширный набор тестов для проверки кросс-чейн игровой логики в системе, обеспечивая корректность работы игровых действий, переводов токенов, синхронизации состояний и безопасности через проверки ролей и валидаторов. Это фундаментальная часть для обеспечения надежности и масштабируемости мультичейн-игры с токеном MANA.