ManaToken.sol

Обзор

Файл ManaToken.sol содержит реализацию смарт-контракта MANA — ERC20 токена, используемого в качестве игровой валюты и токена для стейкинга валидаторов. Контракт базируется на стандарте ERC20 с добавлением ролевого контроля доступа (AccessControl) и возможности приостанавливать операции с токенами (Pausable). Основная функциональность включает выпуск (mint), сжигание (burn) токенов с контролем прав доступа, а также управление ролями и паузой для повышения безопасности.


Описание классов и методов

Контракт ManaToken

Наследуется от:


Константы

Имя

Тип

Описание

GAME_MANAGER_ROLE

bytes32

Роль менеджера игровой логики (для mint и burn)

STAKING_MANAGER_ROLE

bytes32

Роль менеджера стейкинга (для mint и burn)

PAUSER_ROLE

bytes32

Роль, позволяющая ставить контракт на паузу и снимать с паузы

INITIAL_SUPPLY

uint256

Начальное количество токенов для выпуска — 1 миллион MANA (в 18 десятичных знаках)


Пользовательские ошибки (Custom Errors)

Для оптимизации газа используются следующие кастомные ошибки:


События


Конструктор

constructor(address initialOwner)

Функции

mint

function mint(address to, uint256 amount) external whenNotPaused

burn

function burn(address from, uint256 amount) external whenNotPaused

burnSelf

function burnSelf(uint256 amount) external whenNotPaused

pause

function pause() external onlyRole(PAUSER_ROLE)

unpause

function unpause() external onlyRole(PAUSER_ROLE)

_update (переопределение)

function _update(address from, address to, uint256 value) internal override whenNotPaused

decimals

function decimals() public pure override returns (uint8)

supportsInterface

function supportsInterface(bytes4 interfaceId) public view override returns (bool)

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


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


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

classDiagram
    class ManaToken {
        +bytes32 GAME_MANAGER_ROLE
        +bytes32 STAKING_MANAGER_ROLE
        +bytes32 PAUSER_ROLE
        +uint256 INITIAL_SUPPLY
        +constructor(address initialOwner)
        +mint(address to, uint256 amount)
        +burn(address from, uint256 amount)
        +burnSelf(uint256 amount)
        +pause()
        +unpause()
        +decimals() uint8
        +supportsInterface(bytes4 interfaceId) bool
        -_update(address from, address to, uint256 value)
    }
    ManaToken ..|> ERC20
    ManaToken ..|> AccessControl
    ManaToken ..|> Pausable

Резюме

Контракт ManaToken.sol представляет собой надежный и расширяемый ERC20 токен с поддержкой ролевого контроля и механизмом паузы, предназначенный для использования в игровой экосистеме и системе стейкинга. Его архитектура обеспечивает безопасность операций с токеном, гибкость в управлении правами и интеграцию с другими смарт-контрактами системы.