game_contracts.go

Обзор

Файл game_contracts.go предназначен для управления и агрегирования экземпляров смарт-контрактов, связанных с игровой логикой в блокчейн-приложении. Он предоставляет структуру GameContracts, которая содержит обёртки над тремя основными контрактами: GameManager, ManaToken и ManaSettlement. Это упрощает взаимодействие с контрактами, объединяя их в единую точку доступа. Кроме того, в файле определены константы, соответствующие перечислениям (enum) из Solidity — для типов действий и их статусов, что облегчает работу с ними на стороне Go.

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


Подробное описание

Структура GameContracts

type GameContracts struct {
	GameManager    *GameManager
	ManaToken      *ManaToken
	ManaSettlement *ManaSettlement
}

Назначение:

GameContracts агрегирует три ключевых смарт-контракта:

Поля:

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


Функция NewGameContracts

func NewGameContracts(
	gameManagerAddr common.Address,
	manaTokenAddr common.Address,
	manaSettlementAddr common.Address,
	backend bind.ContractBackend,
) (*GameContracts, error)

Назначение:

Конструктор для создания и инициализации объекта GameContracts. Производит связывание (binding) контрактов с их адресами в блокчейне через переданный backend.

Параметры:

Возвращаемые значения:

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

gameContracts, err := NewGameContracts(
    common.HexToAddress("0xGameManagerAddress"),
    common.HexToAddress("0xManaTokenAddress"),
    common.HexToAddress("0xManaSettlementAddress"),
    ethBackend,
)
if err != nil {
    log.Fatalf("Failed to initialize game contracts: %v", err)
}

Константы ActionType

const (
	ActionTypeSpendMana        = 0
	ActionTypeEarnMana         = 1
	ActionTypeLevelUp          = 2
	ActionTypeCraftItem        = 3
	ActionTypePvPBattle        = 4
	ActionTypeMarketplaceTrade = 5
)

Назначение:

Константы, соответствующие перечислению (enum) ActionType в смарт-контракте Solidity. Они описывают типы игровых действий, которые могут происходить в системе.

Описание значений:


Константы ActionStatus

const (
	ActionStatusCreated   = 0
	ActionStatusProcessed = 1
	ActionStatusExpired   = 2
	ActionStatusNotFound  = 3
)

Назначение:

Константы, соответствующие перечислению (enum) ActionStatus в Solidity, отражающие состояние игровых действий.

Описание значений:


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


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


Диаграмма структуры

classDiagram
    class GameContracts {
        +GameManager *GameManager
        +ManaToken *ManaToken
        +ManaSettlement *ManaSettlement
        +NewGameContracts(gameManagerAddr common.Address, manaTokenAddr common.Address, manaSettlementAddr common.Address, backend bind.ContractBackend) *GameContracts, error
    }

    GameContracts --> GameManager
    GameContracts --> ManaToken
    GameContracts --> ManaSettlement

Резюме

Файл game_contracts.go — это удобный и централизованный менеджер для игровых смарт-контрактов, который инкапсулирует их инициализацию и предоставляет типизированный доступ к ним. Константы в файле обеспечивают синхронизацию состояний и типов действий между Go-приложением и Solidity-контрактами, снижая вероятность ошибок из-за несоответствий.

Такой подход упрощает разработку и поддержку кода, делая интеграцию с блокчейном более удобной и надёжной.