ManaToken.t.sol

Обзор

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

Основная цель файла — обеспечить надежность и безопасность ключевых операций токена: создания (mint), сжигания (burn), управления ролями и паузы, а также проверить стандартные функции ERC20. Тесты охватывают как позитивные сценарии, так и отлавливают ошибки и ограничения.


Подробное описание компонентов

Контракт ManaTokenTest

Основной тестовый контракт для ManaToken. Наследуется от Test из forge-std, что предоставляет удобные методы для тестирования.

Свойства

Свойство

Тип

Описание

manaToken

ManaToken

Экземпляр тестируемого токена

owner

address

Адрес владельца (админ с правами)

gameManager

address

Адрес с ролью управления игрой

stakingManager

address

Адрес с ролью управления стейкингом

pauser

address

Адрес с ролью прерывания/возобновления

user1, user2

address

Тестовые аккаунты пользователей

События (для тестирования)


Методы

setUp()

Инициализирует тестовую среду:

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

function test_Sample() public {
    setUp();
    // В этом месте manaToken уже развернут и роли назначены
}

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


Тесты функции mint (создание токенов)


Тесты функции burn (сжигание токенов)


Тесты функции burnSelf (сжигание собственных токенов)


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


Тесты управления ролями


Стандартные тесты ERC20


Fuzz-тесты (тестирование с рандомными значениями)


Особые случаи


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


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


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

classDiagram
    class ManaTokenTest {
        +ManaToken manaToken
        +address owner
        +address gameManager
        +address stakingManager
        +address pauser
        +address user1
        +address user2
        +function setUp()
        +function test_Constructor()
        +function test_Constructor_ZeroAddress()
        +function test_Mint_GameManager()
        +function test_Mint_StakingManager()
        +function test_Mint_UnauthorizedUser()
        +function test_Mint_ZeroAddress()
        +function test_Mint_ZeroAmount()
        +function test_Mint_WhenPaused()
        +function test_Burn_GameManager()
        +function test_Burn_StakingManager()
        +function test_Burn_UnauthorizedUser()
        +function test_Burn_ZeroAddress()
        +function test_Burn_ZeroAmount()
        +function test_Burn_InsufficientBalance()
        +function test_Burn_WhenPaused()
        +function test_BurnSelf()
        +function test_BurnSelf_ZeroAmount()
        +function test_BurnSelf_InsufficientBalance()
        +function test_BurnSelf_WhenPaused()
        +function test_Pause()
        +function test_Pause_UnauthorizedUser()
        +function test_Unpause()
        +function test_Unpause_UnauthorizedUser()
        +function test_Transfer_WhenPaused()
        +function test_HasRole()
        +function test_RoleConstants()
        +function test_Transfer()
        +function test_Approve_TransferFrom()
        +function testFuzz_Mint(uint256 amount)
        +function testFuzz_Burn(uint256 mintAmount, uint256 burnAmount)
        +function testFuzz_Transfer(uint256 mintAmount, uint256 transferAmount)
        +function test_MultipleRoles()
        +function test_SupportsInterface()
    }
    ManaTokenTest --> ManaToken : использует
    ManaTokenTest ..> IAccessControl : проверяет роли

Итог

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