CrossChainVerificationManager.sol

Обзор

Контракт CrossChainVerificationManager предназначен для управления проверкой сообщений между разными блокчейн-сетями (кросс-чейн) через сеть Symbiotic. Он интегрирует два ключевых компонента верификации сообщений — SymbioticDVN (Decentralized Validator Network) и SymbioticISM (Interchain Security Module), а также взаимодействует с контрактом Settlement для подтверждения эпох (временных периодов) и батчевой проверки. Контракт обеспечивает безопасное и управляемое выполнение запросов на верификацию сообщений, поддерживает разные протоколы передачи сообщений (LayerZero, Hyperlane), управление ролями, а также паузу и экстренные операции.


Основные особенности и функциональность


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

Перечисления

enum Protocol

Перечисляет поддерживаемые протоколы кросс-чейн сообщений:


Структуры

struct VerificationRequest

Структура, описывающая запрос на верификацию сообщения:


Ошибки (Custom Errors)

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


Роли доступа (Role Constants)


Основные переменные


Конструктор

constructor(
    address _symbioticDVN,
    address _symbioticISM,
    address _settlement,
    address _admin
)

Инициализирует контракт, задавая адреса связанных контрактов и администратора. Проверяет, что адреса не нулевые. По умолчанию активирует поддержку протоколов LayerZero и Hyperlane. Назначает роли администратора, паузера и экстренного оператора.


Функции

1. requestVerification

function requestVerification(
    Protocol protocol,
    bytes32 messageHash,
    uint48 epoch
) external whenNotPaused nonReentrant returns (bytes32 requestId)
bytes32 id = crossChainVerificationManager.requestVerification(
    CrossChainVerificationManager.Protocol.LAYERZERO,
    keccak256(abi.encodePacked("message")),
    currentEpoch
);

2. completeVerification

function completeVerification(
    bytes32 requestId,
    bytes calldata proof
) external onlyRole(VALIDATOR_ROLE) whenNotPaused nonReentrant

3. batchVerifyThroughSettlement

function batchVerifyThroughSettlement(
    bytes32[] calldata requestIds,
    uint48 epoch,
    bytes calldata proof
) external onlyRole(VALIDATOR_ROLE) whenNotPaused nonReentrant

4. getVerificationRequest

function getVerificationRequest(
    bytes32 requestId
) external view returns (VerificationRequest memory request)

5. isMessageVerified

function isMessageVerified(
    Protocol protocol,
    bytes32 messageHash
) external view returns (bool verified)

6. Функции обновления адресов контрактов

Все функции требуют роль администратора, проверяют ненулевой адрес, обновляют соответствующий контракт и эмитируют события об обновлении.


7. updateProtocolSupport

function updateProtocolSupport(
    Protocol protocol,
    bool supported
) external onlyRole(DEFAULT_ADMIN_ROLE)

Обновляет статус поддержки протокола (включить или отключить).


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


9. Пауза и раз-пауза


10. supportsInterface

Переопределяет метод из AccessControl для поддержки интерфейсов.


Взаимодействие с другими контрактами

Контракт взаимодействует с этими системами для делегирования верификации сообщений и координации состояния.


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


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

// Пользователь создает запрос на верификацию сообщения из LayerZero
bytes32 reqId = crossChainVerificationManager.requestVerification(
    CrossChainVerificationManager.Protocol.LAYERZERO,
    keccak256(abi.encodePacked("myMessage")),
    currentEpoch
);

// Валидатор завершает верификацию
crossChainVerificationManager.completeVerification(reqId, proofData);

// Проверка статуса
bool isVerified = crossChainVerificationManager.isMessageVerified(
    CrossChainVerificationManager.Protocol.LAYERZERO,
    keccak256(abi.encodePacked("myMessage"))
);

Диаграмма классов

classDiagram
    class CrossChainVerificationManager {
        <<contract>>
        +bytes32 VALIDATOR_ROLE
        +bytes32 PAUSER_ROLE
        +bytes32 EMERGENCY_ROLE
        +enum Protocol { LAYERZERO, HYPERLANE }
        +struct VerificationRequest
        +SymbioticDVN symbioticDVN
        +SymbioticISM symbioticISM
        +Settlement settlement
        +uint256 requestNonce
        +mapping(bytes32 => VerificationRequest) verificationRequests
        +mapping(Protocol => bool) supportedProtocols
        +constructor(address _symbioticDVN, address _symbioticISM, address _settlement, address _admin)
        +requestVerification(protocol, messageHash, epoch) returns (bytes32)
        +completeVerification(requestId, proof)
        +batchVerifyThroughSettlement(requestIds, epoch, proof)
        +getVerificationRequest(requestId) returns (VerificationRequest)
        +isMessageVerified(protocol, messageHash) returns (bool)
        +updateDVN(newDVN)
        +updateISM(newISM)
        +updateSettlement(newSettlement)
        +updateProtocolSupport(protocol, supported)
        +addValidator(validator)
        +removeValidator(validator)
        +pause()
        +unpause()
        +supportsInterface(interfaceId) returns (bool)
    }

Итог

Контракт CrossChainVerificationManager является ядром системы кросс-чейн верификации сообщений в сети Symbiotic, обеспечивая надежный, гибкий и безопасный механизм интеграции различных протоколов и компонентов сети, а также удобное управление ролями и состоянием системы. Его архитектура позволяет расширение и адаптацию под новые протоколы и требования.