Інтеграція з Hyperlane
Hyperlane — permissionless протокол interoperability. Ключова відмінність від Axelar та LayerZero: кожен може розгорнути Hyperlane на будь-якому чейні без дозволу протоколу. Це робить його придатним для нових L2/L3, appchains та кастомних середовищ.
Архітектура
Hyperlane складається з:
- Mailbox — смарт-контракт на кожному чейні, через який відправляються та отримуються повідомлення
- Interchain Security Module (ISM) — кастомізована верифікація повідомлень
- Relayers — off-chain агенти, які передають повідомлення між чейнами
- Validators — підписують checkpoint'и стану Mailbox
ISM — кастомна безпека
Унікальність Hyperlane: кожен контракт-одержувач визначає свій ISM. Ви самі вирішуєте як верифікувати вхідні повідомлення.
Варіанти ISM:
- Multisig ISM — M-of-N підписи від валідаторів
- Aggregation ISM — комбінація кількох ISM
- Routing ISM — різні ISM для різних чейнів
- Optimistic ISM — оптимістична верифікація
- ZK ISM — верифікація через zero-knowledge proofs
Відправка повідомлень
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {IMailbox} from "@hyperlane-xyz/core/contracts/interfaces/IMailbox.sol";
contract HyperlaneMessageSender {
IMailbox public mailbox;
constructor(address _mailbox) {
mailbox = IMailbox(_mailbox);
}
function sendMessage(
uint32 destinationDomain,
bytes32 recipientAddress,
bytes calldata messageBody
) external payable {
uint256 fee = mailbox.quoteDispatch(destinationDomain, recipientAddress, messageBody);
require(msg.value >= fee, "Insufficient gas payment");
bytes32 messageId = mailbox.dispatch{value: fee}(
destinationDomain,
recipientAddress,
messageBody
);
emit MessageSent(messageId, destinationDomain);
}
}
Отримання повідомлень
import {IMessageRecipient} from "@hyperlane-xyz/core/contracts/interfaces/IMessageRecipient.sol";
contract HyperlaneMessageReceiver is IMessageRecipient {
mapping(uint32 => bytes32) public enrolledSenders;
function handle(
uint32 origin,
bytes32 sender,
bytes calldata message
) external payable override {
require(msg.sender == address(mailbox), "Only mailbox");
require(enrolledSenders[origin] == sender, "Unknown sender");
(address recipient, uint256 amount) = abi.decode(message, (address, uint256));
_processMessage(origin, recipient, amount);
}
}
Domain IDs
| Chain | Domain ID |
|---|---|
| Ethereum | 1 |
| Polygon | 137 |
| Arbitrum | 42161 |
| Optimism | 10 |
| Base | 8453 |
| BSC | 56 |
Інтеграція Hyperlane — 2-3 тижні для базового GMP. Особливо цінна для кастомних L2/L3 та appchains.







