SymbioticDVN.sol


Обзор

Контракт SymbioticDVN реализует децентрализованную сеть верификаторов (Decentralized Verifier Network, DVN), обеспечивающую проверку сообщений для межцепочечных коммуникаций LayerZero. Основная цель — гарантировать достоверность и целостность сообщений, передаваемых между различными блокчейн-сетями, с помощью консенсуса группы валидаторов, работающих в рамках симбиотической системы.

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


Основные возможности и функции


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

Роли


Константы

Название

Описание

VERIFICATION_TIMEOUT (3600)

Тайм-аут на верификацию сообщения, 1 час (сек).

MAX_VALIDATORS_PER_VERIFICATION (100)

Максимальное количество валидаторов для проверки.


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

VerificationStatus

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


Структуры данных

MessageVerification

Хранит данные о конкретной верификации сообщения:

Поле

Тип

Описание

messageHash

bytes32

Хэш проверяемого сообщения.

srcEid

uint32

Идентификатор исходной цепочки LayerZero.

dstEid

uint32

Идентификатор целевой цепочки LayerZero.

payloadHash

bytes32

Хэш полезной нагрузки сообщения.

confirmations

uint64

Число подтверждений, требуемых для сообщения.

timestamp

uint256

Время инициации верификации.

status

enum

Текущий статус верификации (см. VerificationStatus).

validatorCount

uint256

Количество валидаторов, подтвердивших сообщение.

validatorSigned

mapping

Отметки, какие валидаторы подписали сообщение.

ValidatorVerification

Информация о подписи валидатора:

Поле

Тип

Описание

validator

address

Адрес валидатора.

signature

bytes

Подпись валидатора на сообщении.

timestamp

uint256

Время верификации валидатором.

isValid

bool

Валидность подписи.

LayerZeroMessage

Описание сообщения LayerZero для верификации:

Поле

Тип

Описание

messageHash

bytes32

Хэш сообщения.

srcEid

uint32

Исходный LayerZero endpoint ID.

dstEid

uint32

Целевой LayerZero endpoint ID.

payloadHash

bytes32

Хэш полезной нагрузки.

confirmations

uint64

Требуемое число подтверждений.

payload

bytes

Полезная нагрузка сообщения.


События


Методы

Конструктор

constructor(address _admin)

requestVerification

function requestVerification(LayerZeroMessage calldata message) external whenNotPaused returns (bytes32 messageHash)

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

LayerZeroMessage memory msg = LayerZeroMessage({
    messageHash: keccak256(abi.encodePacked(...)),
    srcEid: 1,
    dstEid: 2,
    payloadHash: keccak256(abi.encodePacked(...)),
    confirmations: 10,
    payload: bytes("")
});
bytes32 hash = symbioticDVN.requestVerification(msg);

verifyMessage

function verifyMessage(bytes32 messageHash, bytes calldata signature) external onlyRole(VALIDATOR_ROLE) whenNotPaused

getVerificationStatus

function getVerificationStatus(bytes32 messageHash) external view returns (VerificationStatus status, uint256 validatorCount, uint256 requiredValidators)

isMessageVerified

function isMessageVerified(bytes32 messageHash) external view returns (bool verified)

getValidatorVerification

function getValidatorVerification(bytes32 messageHash, address validator) external view returns (ValidatorVerification memory verification)

Управление цепочками


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


Кворум и пороги


Проверка поддержки цепочки


Пауза и экстренные операции


Внутренний метод: _verifyValidatorSignature

function _verifyValidatorSignature(bytes32 messageHash, bytes calldata signature, address validator) internal pure returns (bool valid)

Поддержка интерфейсов


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


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


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

classDiagram
    class SymbioticDVN {
        <<contract>>
        +bytes32 VALIDATOR_ROLE
        +bytes32 PAUSER_ROLE
        +bytes32 EMERGENCY_ROLE
        +uint256 VERIFICATION_TIMEOUT
        +uint256 MAX_VALIDATORS_PER_VERIFICATION
        +uint256 quorumThreshold
        +uint256 totalValidators
        +mapping(bytes32 => MessageVerification) verifications
        +mapping(bytes32 => mapping(address => ValidatorVerification)) validatorVerifications
        +mapping(uint32 => bool) supportedChains
        +mapping(address => bool) activeValidators
        +constructor(address _admin)
        +requestVerification(LayerZeroMessage message) returns (bytes32)
        +verifyMessage(bytes32 messageHash, bytes signature)
        +getVerificationStatus(bytes32 messageHash) returns (VerificationStatus, uint256, uint256)
        +isMessageVerified(bytes32 messageHash) returns (bool)
        +getValidatorVerification(bytes32 messageHash, address validator) returns (ValidatorVerification)
        +addSupportedChain(uint32 eid)
        +removeSupportedChain(uint32 eid)
        +addValidator(address validator)
        +removeValidator(address validator)
        +updateQuorumThreshold(uint256 newThreshold)
        +getRequiredValidators() returns (uint256)
        +isChainSupported(uint32 eid) returns (bool)
        +pause()
        +unpause()
        +emergencyVerifyMessage(bytes32 messageHash)
        -_verifyValidatorSignature(bytes32 messageHash, bytes signature, address validator) returns (bool)
        +supportsInterface(bytes4 interfaceId) returns (bool)
    }

    class MessageVerification {
        +bytes32 messageHash
        +uint32 srcEid
        +uint32 dstEid
        +bytes32 payloadHash
        +uint64 confirmations
        +uint256 timestamp
        +VerificationStatus status
        +uint256 validatorCount
        +mapping(address => bool) validatorSigned
    }

    class ValidatorVerification {
        +address validator
        +bytes signature
        +uint256 timestamp
        +bool isValid
    }

    class LayerZeroMessage {
        +bytes32 messageHash
        +uint32 srcEid
        +uint32 dstEid
        +bytes32 payloadHash
        +uint64 confirmations
        +bytes payload
    }

    SymbioticDVN --> MessageVerification : uses
    SymbioticDVN --> ValidatorVerification : uses
    SymbioticDVN --> LayerZeroMessage : input

Заключение

Контракт SymbioticDVN является ключевым элементом для обеспечения безопасности и достоверности межцепочечных сообщений в экосистеме LayerZero. Он сочетает в себе строгие механизмы контроля доступа, динамическое управление валидаторами, а также гибкий механизм верификации с учётом кворума, что позволяет надёжно подтверждать сообщения в децентрализованной среде.

Документация и архитектура контракта обеспечивают прозрачность и расширяемость для дальнейшего развития и интеграции в более крупные системы межцепочечных взаимодействий.