SymbioticDVN.t.sol

Обзор

Файл SymbioticDVN.t.sol содержит набор unit-тестов для смарт-контракта SymbioticDVN, реализованного на языке Solidity и предназначенного для кроссчейн-верификации сообщений. Основная цель тестов — проверить корректность работы функций контракта, связанных с запросом верификации сообщений, проверкой подписей валидаторов, достижением кворума, управлением валидаторами, поддерживаемыми цепочками, а также обработкой исключительных ситуаций (например, истечением таймаута или аварийной верификацией).

Данные тесты написаны с использованием библиотеки forge-std (фреймворк Foundry), что обеспечивает удобный доступ к функциям для создания адресов, эмитации событий, имитации вызовов от имени других адресов (prank), а также управления временем и состоянием блокчейна.


Описание классов и функций

Контракт SymbioticDVNTest

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

Поля класса

Имя

Тип

Описание

SymbioticDVN dvn

контракт

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

address admin

адрес

Адрес администратора (создателя и управляющего).

address validator1, validator2, validator3

адреса

Адреса трёх валидаторов, используемых в тестах.

address user

адрес

Адрес обычного пользователя (не валидатора).

uint256 validator1Key, validator2Key, validator3Key

число

Приватные ключи валидаторов для генерации подписей.

События

Тесты подписываются на события, которые эмитирует контракт SymbioticDVN. Они проверяют корректность вызовов:

Методы

setUp()
setUp();
// После вызова доступны валидаторы, контракт и поддерживаемые цепочки
testRequestVerification()
testVerifyMessage()
testQuorumReached()
testInvalidSignature()
testUnsupportedChain()
testExpiredVerification()
testAddRemoveValidator()
testUpdateQuorumThreshold()
testEmergencyVerifyMessage()
testPauseUnpause()
testFuzzVerification(bytes32 messageHash, uint32 srcEid, uint32 dstEid)

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


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


Визуальная диаграмма — Структура класса SymbioticDVNTest

classDiagram
    class SymbioticDVNTest {
        +SymbioticDVN dvn
        +address admin
        +address validator1
        +address validator2
        +address validator3
        +address user
        +uint256 validator1Key
        +uint256 validator2Key
        +uint256 validator3Key
        +setUp()
        +testRequestVerification()
        +testVerifyMessage()
        +testQuorumReached()
        +testInvalidSignature()
        +testUnsupportedChain()
        +testExpiredVerification()
        +testAddRemoveValidator()
        +testUpdateQuorumThreshold()
        +testEmergencyVerifyMessage()
        +testPauseUnpause()
        +testFuzzVerification(bytes32,uint32,uint32)
    }

    SymbioticDVNTest ..> SymbioticDVN : использует
    SymbioticDVNTest ..> Test : наследует

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

Запрос верификации сообщения

function testRequestVerification() public {
    SymbioticDVN.LayerZeroMessage memory message = SymbioticDVN.LayerZeroMessage({
        messageHash: keccak256("test message"),
        srcEid: 1,
        dstEid: 137,
        payloadHash: keccak256("test payload"),
        confirmations: 12,
        payload: "test payload"
    });

    bytes32 messageHash = dvn.requestVerification(message);
    assertEq(messageHash, message.messageHash);
}

Проверка подписи валидатора

function testVerifyMessage() public {
    bytes32 messageHash = dvn.requestVerification(message);

    bytes32 ethSignedMessageHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash));
    (uint8 v, bytes32 r, bytes32 s) = vm.sign(validator1Key, ethSignedMessageHash);
    bytes memory signature = abi.encodePacked(r, s, v);

    vm.prank(validator1);
    dvn.verifyMessage(messageHash, signature);
}

Заключение

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