跳到主要内容

Mailbox

Hyperlane 的通用消息传递(GMP)接口是通过一个名为 Mailbox 的智能合约实现的。该合约负责编码和解码消息头,确保消息的全局唯一性,并防止重放攻击

消息头

Mailbox 会在消息体前添加包含以下字段的消息头:

  • version: Mailbox 合约的版本号
  • nonce: 从指定 Mailbox 发送的每条消息的唯一标识符
  • origin: 源链的域 ID
  • sender: 源链上发送者的地址
  • destination: 目标链的域 ID
  • recipient: 目标链上接收者的地址

查看 Message获取更多关于消息编码的信息。

唯一性

nonce 是每个 Mailbox 发送消息时递增的整数。每次发送消息时它都会递增,用于区分相同的消息。

function delivered(bytes32 messageId) external view returns (bool);

messageId 是一个全局唯一的消息标识符,在调用 dispatch 时返回,它是消息(包含消息头)的 keccak256 哈希值。

重放保护

Mailbox 维护了一个已投递 messageId 的映射,用于防止重放攻击。如果收到一个已经投递过的 messageId 的消息,该消息会被拒绝。

function defaultIsm() external view returns (IInterchainSecurityModule);