CrossChainVerificationManager.t.sol
Обзор
Данный файл представляет собой тестовый контракт CrossChainVerificationManagerTest, написанный на языке Solidity с использованием фреймворка Forge (forge-std). Основная цель этого файла — провести комплексное модульное тестирование контракта CrossChainVerificationManager и его взаимодействия с другими связанными контрактами, такими как SymbioticDVN, SymbioticISM и Settlement.
CrossChainVerificationManager — это менеджер, обеспечивающий проверку кроссчейн-сообщений через разные протоколы (LayerZero и Hyperlane). В тестах проверяются сценарии запроса верификации, подтверждения сообщений валидаторами, управление валидаторами и протоколами, а также взаимодействие с контрактом Settlement для пакетной верификации.
Описание классов и функций
Контракт: CrossChainVerificationManagerTest
Контракт-наследник Test из forge-std — оболочка для проведения unit тестов.
Публичные переменные
CrossChainVerificationManager public manager — экземпляр тестируемого менеджера.
SymbioticDVN public dvn — контракт для LayerZero-сообщений.
SymbioticISM public ism — контракт для Hyperlane-сообщений.
Settlement public settlement — контракт Settlement (здесь используется мок).
address public admin— адрес администратора (создан черезmakeAddr).address public validator1,validator2— валидаторы, созданные из приватных ключей.address public user— адрес пользователя.uint256 public validator1Key,validator2Key— приватные ключи валидаторов.
События
VerificationRequested— эмитится при запросе верификации сообщения.VerificationCompleted— эмитится при успешном завершении верификации.
Функции
setUp()
Инициализация окружения для тестов:
Генерируются адреса валидаторов из приватных ключей.
Разворачиваются контракты
SymbioticDVN,SymbioticISM,Settlement,CrossChainVerificationManager.Устанавливаются роли админа и паузера для менеджера в DVN и ISM.
Добавляются валидаторы в DVN и ISM через менеджер.
Устанавливается кворум в 100% для подтверждения.
Добавляются поддерживаемые цепи/домены (1 и 137).
Все действия выполняются от имени администратора.
testRequestVerification()
Проверяет возможность запроса верификации сообщения пользователем:
Пользователь вызывает
requestVerificationв менеджере для протокола LayerZero.Проверяется эмиссия события
VerificationRequested.Проверяется правильность сохранения данных запроса.
testCompleteVerificationLayerZero()
Тест полного цикла верификации с использованием протокола LayerZero:
Пользователь запрашивает верификацию.
Создаётся сообщение LayerZero и передаётся в
dvn.Валидаторы подписывают хэш сообщения.
Валидаторы вызывают
verifyMessageвdvn.Проверяется, что сообщение считается верифицированным.
Валидатор вызывает
completeVerificationв менеджере.Проверяется, что статус запроса обновлен.
testCompleteVerificationHyperlane()
Аналогично предыдущему, но для протокола Hyperlane с использованием SymbioticISM.
testIsMessageVerified()
Проверяет корректность функции isMessageVerified в менеджере:
Изначально для сообщений возвращается
false.После верификации в DVN функция возвращает
trueдля LayerZero,falseдля Hyperlane.
testBatchVerifyThroughSettlement()
Тест пакетной верификации нескольких сообщений через контракт Settlement:
Пользователь запрашивает верификацию двух сообщений (LayerZero и Hyperlane).
Сообщения верифицируются в
dvnиism.Валидатор вызывает
batchVerifyThroughSettlement.Проверяется, что оба запроса помечены как верифицированные.
testUpdateContracts()
Тест обновления адресов связанных контрактов в менеджере (DVN, ISM, Settlement):
Администратор обновляет адреса.
Проверяется корректность обновления.
testProtocolSupport()
Проверка возможности включения и отключения поддержки протоколов:
Админ отключает LayerZero.
Проверяется, что запросы через отключенный протокол запрещены (revert).
Админ повторно включает протокол.
testAddRemoveValidator()
Проверка добавления и удаления валидаторов через менеджер:
Админ добавляет валидатора — проверяется, что он активен в DVN/ISM и имеет роль.
Админ удаляет валидатора — проверяется обратное.
testPauseUnpause()
Тест паузы и возобновления работы контрактов:
Админ вызывает
pause— проверяется пауза менеджера, DVN и ISM.Админ вызывает unpause — проверяется возобновление работы.
testUnauthorizedAccess()
Проверка защиты от несанкционированного доступа:
Пользователь без прав пытается добавить валидатора — ожидается revert.
Пользователь без роли валидатора пытается завершить верификацию — ожидается revert.
Важные детали реализации и алгоритмы
В тестах используется
vm.prankиvm.startPrankдля имитации вызовов от разных адресов.Подписи валидаторов формируются с помощью
vm.signнад Ethereum Signed Message хэшами.Верификация сообщений требует кворума 100% валидаторов (обновляется через
updateQuorumThreshold).Используются два протокола: LayerZero (через
SymbioticDVN) и Hyperlane (черезSymbioticISM).Для каждого протокола реализованы отдельные структуры сообщений и логика проверки.
Пакетная верификация реализуется через контракт Settlement.
Управление ролями и правами доступа тщательно протестировано.
Взаимодействие с другими частями системы
SymbioticDVN — контракт, управляющий верификацией сообщений LayerZero.
SymbioticISM — контракт, управляющий верификацией сообщений Hyperlane.
Settlement — контракт, предоставляющий возможность пакетной верификации сообщений.
CrossChainVerificationManager — централизованный менеджер, агрегирующий запросы верификации из разных протоколов и управляет валидаторами.
Тесты демонстрируют, как CrossChainVerificationManager координирует работу с DVN и ISM, управляет ролями валидаторов, поддерживает разные протоколы и взаимодействует с Settlement для оптимизации верификации.
Пример использования
// Пользователь запрашивает верификацию сообщения через LayerZero
bytes32 messageHash = keccak256("example message");
uint48 epoch = 1;
bytes32 requestId = manager.requestVerification(
CrossChainVerificationManager.Protocol.LAYERZERO,
messageHash,
epoch
);
// Валидаторы подписывают и подтверждают сообщение через SymbioticDVN
// После чего один из валидаторов завершает верификацию
manager.completeVerification(requestId, "");
Диаграмма структуры классов и основных методов
classDiagram
class CrossChainVerificationManagerTest {
+CrossChainVerificationManager manager
+SymbioticDVN dvn
+SymbioticISM ism
+Settlement settlement
+address admin, validator1, validator2, user
+uint256 validator1Key, validator2Key
+setUp()
+testRequestVerification()
+testCompleteVerificationLayerZero()
+testCompleteVerificationHyperlane()
+testIsMessageVerified()
+testBatchVerifyThroughSettlement()
+testUpdateContracts()
+testProtocolSupport()
+testAddRemoveValidator()
+testPauseUnpause()
+testUnauthorizedAccess()
}
Заключение
CrossChainVerificationManager.t.sol — это полнофункциональный набор тестов, обеспечивающий надежность и корректность работы менеджера кроссчейн верификации сообщений. Он покрывает критические сценарии работы, включая запросы верификации, подтверждение сообщений, управление ролями и поддержкой протоколов, паузу контрактов и пакетную верификацию через Settlement. Тесты гарантируют, что менеджер корректно взаимодействует с внешними контрактами SymbioticDVN и SymbioticISM и справляется с реальными кейсами использования.