Hyperlane Cross-Chain Message Passing (General Message Passing, GMP) — это стандартизированная процедура, которую можно повторно выполнять между любыми поддерживаемыми цепочками. Приложение вызывает функцию dispatch на Mailbox исходной цепочки, чтобы отправить сообщение; офчейн-релеер передаёт это сообщение вместе с метаданными для верификации в цепочку назначения; после проверки модулем Interchain Security Module (ISM) Mailbox вызывает функцию handle контракта получателя, завершая доставку. Статья Hyperlane (HYPER) описывает общую архитектуру уровня совместимости Hyperlane через три компонента: Mailbox, ISM и Warp Route.
В мультичейн-приложениях разработчикам необходимо понимать весь путь сообщения от отправки до доставки, чтобы правильно настраивать модули безопасности, оценивать комиссии и устранять проблемы с недоставленными сообщениями. Статья ISM и Warp Route объясняет разделение обязанностей между типами ISM (например, Multisig и Aggregation) и Warp Route, помогая разработчикам выбирать подходящую степень проверки на этапе обработки.
Каждое кроссчейн-сообщение имеет глобально уникальный messageId. Mailbox хранит отображение уже доставленных сообщений, чтобы предотвратить повторные атаки. Статья Hyperlane vs LayerZero vs Wormhole сравнивает структурные различия между тремя протоколами с точки зрения механизмов верификации и прав развёртывания. Отправитель сообщения заранее оплачивает комиссию за доставку в цепочке назначения прямо на исходной цепочке через Interchain Gas Payment (IGP). Релеер оплачивает газ в цепочке назначения, чтобы завершить вызов process. Проводник (Explorer) позволяет отследить полный жизненный цикл сообщения: от отправки до обработки.
Поток кроссчейн-сообщений Hyperlane состоит из шести последовательных этапов: отправка (на исходной цепочке), запись в дерево Меркла, подпись валидатора (если требуется ISM), индексация релеером и сбор метаданных, обработка (отправка в цепочку назначения) и проверка ISM с handle (доставка в цепочке назначения). Этот поток не привязан к конкретному приложению или одноразовому событию; любой контракт, интегрированный с Mailbox, может инициировать его многократно.
| Этап | Цепочка | Основное действие | Ключевые участники |
|---|---|---|---|
| Отправка | Исходная цепочка | Кодирование сообщения, запись в дерево Меркла, эмиссия событий | Контракт отправителя, Mailbox |
| Аттестация (Подпись) | Исходная (офчейн) | Подпись контрольной точки на корне дерева Меркла | Валидатор (для Multisig ISM) |
| Релей | Офчейн → Цепочка назначения | Индексация событий, сбор метаданных, выполнение process | Релеер |
| Проверка | Цепочка назначения | Проверка источника и целостности сообщения | ISM |
| Доставка | Цепочка назначения | Вызов handle получателя для выполнения бизнес-логики | Mailbox, получатель |
Таблица показывает полную разбивку этапов GMP Hyperlane от исходной цепочки до цепочки назначения. Отправка и доставка происходят в контрактах Mailbox соответствующих цепочек. Релееры и валидаторы выполняют офчейн-функции передачи и обеспечения безопасности, а ISM служит шлюзом верификации сообщений в цепочке назначения.
Рисунок 1. Обзор потока кроссчейн-сообщений Hyperlane: полный путь от отправки в исходной цепочке через релеер/валидатора до проверки ISM и доставки handle в цепочке назначения.
Этап отправки в исходной цепочке начинается с вызова контрактом отправителя функции Mailbox.dispatch(). Mailbox получает три основных параметра: идентификатор домена цепочки назначения (destinationDomain), адрес получателя (recipientAddress, закодированный как bytes32) и тело сообщения (messageBody). Mailbox добавляет к телу стандартный заголовок сообщения, который включает поля version, nonce, origin, sender, destination и recipient. Это делает сообщение уникально идентифицируемым и защищённым от подделки.
После выполнения dispatch Mailbox вставляет полное сообщение как лист в инкрементальное дерево Меркла (поддерживаемое контрактом MerkleTreeHook) и эмитирует события Dispatch и DispatchId. messageId — это хэш keccak256 от всего сообщения (включая заголовок). Он возвращается вызовом dispatch и доступен для отслеживания в Explorer. nonce — это монотонно возрастающий счётчик в Mailbox исходной цепочки. Даже если тело сообщения одинаково, разные nonce приводят к разным messageId.
Отправитель может запросить кроссчейн-комиссию через quoteDispatch(). Эта комиссия покрывает стоимость отправки в исходной цепочке и предоплаченный межцепочечный газ для доставки в цепочке назначения. После dispatch специальный хук (Post-Dispatch Hook) может предоплатить газ цепочки назначения релееру через InterchainGasPaymaster (IGP). Как только dispatch завершён, сообщение переходит в состояние ожидания релея. messageId генерируется из хэша полного сообщения, а Mailbox цепочки назначения предотвращает повторную доставку через отображение delivered(messageId).
Релеер и Валидатор выполняют разные, но взаимодополняющие функции в протоколе Hyperlane. Валидатор отвечает за аттестацию безопасности: когда Mailbox исходной цепочки отправляет новое сообщение, MerkleTreeHook эмитирует событие InsertedIntoTree. Валидатор считывает текущий корень дерева Меркла, подписывает контрольную точку и публикует подпись в общедоступном хранилище (например, AWS S3 или Google Cloud Storage). Релеер отвечает за транспортный уровень: он слушает события от Mailbox исходной цепочки, собирает метаданные, необходимые ISM (например, подписи валидаторов, доказательство Меркла), и вызывает Mailbox.process() в цепочке назначения для отправки сообщения.
Валидатор требуется только в сценариях Multisig ISM или Economic Security Module. Если получатель настроил Optimistic ISM, модуль с доказательством с нулевым разглашением или другой модуль, не требующий подписей валидаторов, релеер собирает только те метаданные, которые нужны этому ISM. Hyperlane не предписывает фиксированный набор валидаторов; получатель может сам настроить адреса валидаторов и пороговое количество подписей в Multisig ISM.
Релеер состоит из Индексатора и Отправителя. Индексатор запрашивает события из исходной цепочки через RPC и сохраняет их в локальной базе данных. Отправитель проверяет, что газ предоплачен, извлекает метаданные, симулирует и транслирует вызов process. Если доставка не удалась, релеер автоматически повторяет попытку с экспоненциальной задержкой. Подписи валидаторов общедоступны: любой может передать их и вызвать process. Отправитель сообщения выбирает способ предоплаты получателю через IGP, а оператор релеера должен сбалансировать доход на аккаунте цепочки назначения.
Этап доставки в цепочке назначения начинается с вызова релеером Mailbox.process(metadata, message). Mailbox сначала проверяет, не было ли messageId уже доставлено; если оно есть в отображении delivered, повторная отправка отклоняется. Затем Mailbox запрашивает ISM, указанный контрактом получателя (через recipientIsm() или пользовательскую конфигурацию приложения), и передаёт message и metadata в функцию ISM.verify().
После успешной верификации ISM Mailbox вызывает функцию handle(origin, sender, body) контракта получателя, передавая тело сообщения и информацию об источнике на уровень бизнес-логики приложения. Контракт получателя должен реализовать функцию handle интерфейса IMessageRecipient, которая выполняет такие операции, как голосование за кроссчейн-управление, создание/выпуск активов или обновление состояния. После успешной доставки Mailbox помечает messageId как доставленное и эмитирует события Process и ProcessId.
Для кроссчейн-приложений с активами, таких как Warp Route, функция handle запускает логику блокировки, создания, сжигания или выпуска токенов. Для приложений кроссчейн-управления функция handle записывает голоса или выполняет предложения. Газ для этапа доставки оплачивается релеером в цепочке назначения, а отправитель уже предоплатил соответствующую комиссию на исходной цепочке через IGP.
Рисунок 2. Последовательность доставки в цепочке назначения: Mailbox process запускает ISM verify; после успешной верификации вызывается recipient handle, а повторная доставка блокируется через отображение messageId.
ISM (Interchain Security Module) — это смарт-контракт в цепочке назначения, который отвечает за проверку подлинности кроссчейн-сообщений. Перед доставкой Mailbox передаёт message и metadata, полученные от релеера, в ISM.verify(). Логика верификации зависит от типа ISM. ISM по умолчанию — Multisig ISM: он требует, чтобы заданное количество валидаторов подписали корень дерева Меркла исходной цепочки, достигнув порога. Приложения также могут развернуть собственные ISM или использовать Aggregation ISM для объединения нескольких путей верификации.
Чтобы проверить конфигурацию ISM, можно запросить адрес ISM контракта получателя, проверить порог валидаторов и параметры типа ISM, а также посмотреть статус верификации и метаданные для конкретного сообщения в Explorer.
| Тип ISM | Метод проверки | Вариант использования |
|---|---|---|
| Multisig ISM | Валидаторы подписывают корень дерева Меркла для достижения порога | Модель безопасности по умолчанию, общие сообщения |
| Aggregation ISM | Все ISM должны подтвердить сообщение | Многоуровневая безопасность |
| Rate Limited ISM | Ограничивает количество сообщений или объём переводов в единицу времени | Кроссчейн для высокоценных активов |
| Routing ISM | Указывает разные ISM для каждой исходной цепочки | Разные стратегии безопасности для разных цепочек |
| Custom ISM | Приложение определяет собственную логику verify | Особые бизнес-требования |
В случае Multisig ISM релеер извлекает подписи контрольных точек из общедоступного хранилища валидаторов и передаёт их вместе с доказательством Меркла. Economic Security Module обеспечивает экономическую безопасность через EigenLayer AVS; мошенничество валидатора может привести к слэшингу. Если верификация успешна, ISM возвращает true, и Mailbox выполняет handle. Если проверка не пройдена, транзакция process отменяется, и релеер повторит попытку в соответствии со стратегией задержки.
Передача кроссчейн-сообщений Hyperlane несёт структурные риски на уровне механизма. Их нужно рассматривать на уровне сообщений, транспортном уровне и экономическом уровне. Риски на уровне сообщений: неправильная настройка пользовательских ISM может ослабить верификацию; уязвимости в логике функции handle получателя могут привести к некорректному изменению состояния. Риски на транспортном уровне: задержки или остановка релеера могут оставить сообщения недоставленными надолго (IGP предоплачен, но релеер не отправил); колебания цен на газ в цепочке назначения могут повлиять на желание релеера отправлять; простой валидаторов в Multisig ISM с высоким порогом может нарушить жизнеспособность.
Экономические риски: мошенничество валидатора может привести к слэшингу HYPER; неправильная настройка комиссии IGP может привести к нехватке средств на доставку. Доставка сообщений не мгновенна — нужно дождаться финальности исходной цепочки и отправки релеером. Надёжность зависит от предоплаты IGP и качества работы релеера.
| Источник риска | Типичное проявление | Стратегия смягчения |
|---|---|---|
| Конфигурация ISM | Слишком низкий порог проверки или ненадёжные валидаторы | Аудит параметров ISM, использование Aggregation ISM |
| Задержка релеера | Сообщение зависло в ожидании | Отслеживание через Explorer, достаточные комиссии IGP, резервный релеер |
| Простой валидатора | Не достигнут порог подписей Multisig | Избыточные валидаторы, мониторинг публикации контрольных точек |
| Уязвимость контракта | Эксплойт логики handle или ISM | Аудит, Rate Limited ISM, Pausable ISM |
| Атака повторного воспроизведения | Одно и то же messageId доставлено повторно | Отображение delivered в Mailbox автоматически отклоняет |
Перед работой проверьте ончейн-адреса контрактов Mailbox, ISM и получателя. Различайте конфигурации протокола по умолчанию и пользовательские конфигурации приложения. Для сценариев вроде кроссчейн-активов Warp Route также обращайте внимание на маршрутизирующий контракт и маппинг токенов.
Кроссчейн-сообщения Hyperlane следуют повторяемому потоку: отправка → аттестация → релей → проверка → доставка. Mailbox.dispatch() на исходной цепочке кодирует сообщение и записывает его в дерево Меркла; валидаторы подписывают контрольную точку (в сценариях Multisig ISM); релеер собирает метаданные и вызывает process в цепочке назначения; после проверки ISM Mailbox вызывает handle и завершает доставку. messageId глобален и уникален; доставленные сообщения нельзя воспроизвести повторно. IGP предоплачивает газ цепочки назначения, а Explorer предоставляет отслеживание полного жизненного цикла.
Отправитель на исходной цепочке вызывает Mailbox.dispatch(), чтобы отправить сообщение. Mailbox записывает его в дерево Меркла и эмитирует события. Релеер слушает события, собирает метаданные, необходимые ISM, и вызывает Mailbox.process() в цепочке назначения. После проверки ISM Mailbox вызывает функцию handle получателя, завершая доставку.
Отправка происходит в контракте Mailbox исходной цепочки по инициативе контракта отправителя. Доставка происходит в контракте Mailbox цепочки назначения: релеер вызывает process, после проверки ISM вызывается handle получателя.
Валидатор подписывает контрольную точку корня дерева Меркла исходной цепочки, предоставляя аттестацию для модулей безопасности, таких как Multisig ISM. Релеер отвечает за транспортный уровень офчейн: индексирует события исходной цепочки, собирает метаданные и отправляет вызов process в цепочке назначения. Их функции взаимодополняющие: релеер необходим для всех сообщений, а валидатор — только для определённых типов ISM.
Каждое сообщение имеет уникальный messageId (хэш keccak256, возвращаемый при отправке). Hyperlane Explorer позволяет запросить статус полного жизненного цикла сообщения от отправки до обработки, включая время отправки в исходной цепочке, записи релеера, результаты проверки ISM и подтверждение доставки в цепочке назначения.
Распространённые причины: недостаточная предоплата IGP, релеер ещё не отправил или повторяет попытку, подписи валидаторов не достигли порога Multisig, слишком высокие комиссии за газ в цепочке назначения (задерживают релеера) или сбой проверки ISM. В Explorer можно посмотреть конкретную причину ожидания и записи повторных попыток для конкретного сообщения.
Нет. Mailbox поддерживает отображение delivered(messageId). Как только messageId был доставлен, он будет отклонён при process в цепочке назначения, что предотвращает повторные атаки. Поле nonce также гарантирует, что даже при одинаковом теле сообщения разные отправки приводят к разным messageId.





