GameManager.abi.json

Обзор

Файл GameManager.abi.json содержит ABI (Application Binary Interface) смарт-контракта GameManager, который реализует логику управления игровым процессом децентрализованной игры с использованием блокчейна. Контракт управляет такими аспектами, как действия игроков, крафтинг, уровни, PvP-сражения, экономика игры, роли и права доступа, а также взаимодействие с валидаторами и кросс-чейн операциями.

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


Основные сущности и структуры

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

Перечисления (enums)


Конструктор

constructor(address _settlement, address _manaToken, address _admin)

Инициализирует контракт с ключевыми адресами и устанавливает роли доступа.


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

Управление ролями и доступом

Игровые действия

Обработка батчей действий

Состояние игроков и статистика

Валидация и проверка параметров действий

Расчёты стоимости и опыта

Управление валидаторами

Управление экономикой и фондами

Управление состоянием контракта

Кросс-чейн синхронизация состояния

Взаимодействия с внешними контрактами


Ошибки (Errors)


События (Events)


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


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


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

Отправка игрового действия

bytes32 actionId = gameManager.submitGameAction(
    GameManager.ActionType.CRAFT, 
    abi.encode(recipeId, quantity), 
    manaCost
);

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

GameManager.PlayerState memory state = gameManager.getPlayerState(playerAddress);
uint256 currentLevel = state.level;
uint256 manaBalance = state.manaBalance;

Регистрация валидатора

gameManager.registerValidator(validatorAddress, stakeAmount);

Обработка батча действий (вызывается валидаторами)

gameManager.processBatch(batchId, batchResult, currentEpoch, quorumProof);

Диаграмма структуры (Mermaid classDiagram)

classDiagram
    class GameManager {
        +constructor(address _settlement, address _manaToken, address _admin)
        +submitGameAction(ActionType actionType, bytes actionParams, uint256 manaAmount) returns (bytes32)
        +submitCrossChainGameAction(ActionType actionType, bytes actionParams, uint256 manaAmount, uint64 targetChain) returns (bytes32)
        +processBatch(bytes32 batchId, BatchResult result, uint48 epoch, bytes proof)
        +processCrossChainBatch(bytes32 batchId, BatchResult result, uint64 sourceChain, uint48 epoch, bytes proof)
        +getPlayerState(address player) returns (PlayerState)
        +registerValidator(address validator, uint256 stakeAmount)
        +deregisterValidator(address validator)
        +getValidatorInfo(address validator) returns (ValidatorInfo)
        +distributeEpochRewards()
        +pause()
        +unpause()
        +updateEconomicConfig(EconomicConfig newConfig)
        +calculateCraftingCost(uint256 recipeId, uint256 quantity, uint256 playerLevel) returns (uint256)
        +calculateLevelUpCost(uint256 currentLevel) returns (uint256)
        +validateCraftingParams(bytes actionParams, address player) returns (bool)
        +validateMarketplaceTrade(bytes actionParams, address player, uint256 tradeAmount) returns (bool)
        +hasRole(bytes32 role, address account) returns (bool)
        +grantRole(bytes32 role, address account)
        +revokeRole(bytes32 role, address account)
        +paused() returns (bool)
        +manaToken() returns (address)
        +settlement() returns (address)
    }

    class PlayerState {
        +address player
        +uint256 manaBalance
        +uint256 level
        +uint256 experience
        +uint256 lastActionTimestamp
        +uint256 wins
        +uint256 losses
        +uint256 rating
        +uint256 totalManaEarned
        +uint256 totalManaSpent
        +uint256 itemsCrafted
    }

    class ValidatorInfo {
        +address validator
        +uint256 stakedAmount
        +uint256 totalRewardsEarned
        +uint256 lastRewardEpoch
        +uint256 participationCount
        +bool isActive
    }

    class BatchResult {
        +bytes32 batchId
        +PlayerState[] newStates
        +uint48 processedAt
    }

    GameManager --> PlayerState : uses
    GameManager --> ValidatorInfo : uses
    GameManager --> BatchResult : uses

Заключение

GameManager.abi.json представляет собой ABI контракта, который является ядром логики многопользовательской блокчейн-игры. Контракт управляет состоянием игроков, экономикой, игровыми действиями, а также взаимодействует с валидаторами и кросс-чейн механизмами. Он обеспечивает безопасность и масштабируемость игрового процесса, используя ролевую модель доступа, батчи для обработки действий и комплексные проверки параметров.