Mailbox
Hyperlane 的 通用消息传递(GMP)接口是通过一个名为 Mailbox 的智能合约实现的。该合约负责编码和解码消息头,确保消息的全局唯一性,并防止重放攻击。
消息头
Mailbox 会在消息体前添加包含以下字段的消息头:
version
: Mailbox 合约的版本号nonce
: 从指定 Mailbox 发送的每条消息的唯一标识符origin
: 源链的域 IDsender
: 源链上发送者的地址destination
: 目标链的域 IDrecipient
: 目标链上接收者的地址
查看 Message
库获取更多关于消息编码的信息。
唯一性
nonce
是每个 Mailbox 发送消息时递增的整数。每次发送消息时它都会递增,用于区分相同的消息。
- Solidity
function delivered(bytes32 messageId) external view returns (bool);
messageId
是一个全局唯一的消息标识符,在调用 dispatch
时返回,它是消息(包含消息头)的 keccak256
哈希值。
重放保护
Mailbox 维护了一个已投递 messageId
的映射,用于防止重放攻击。如果收到一个已经投递过的 messageId
的消息,该消息会被拒绝。
- Solidity
function defaultIsm() external view returns (IInterchainSecurityModule);