验证者
概述
验证者作为 多重签名ISM 或 经济安全模块 的一部分运行,履行 Hyperlane 协议的安全层。如果使用不同的 ISM,则不需要验证者。它们负责通过在 邮箱 中发生新调度时签署梅克尔根(也称为检查点)来证明消息。签名必须对任何人(通常是中继器)可用,以便提取并与消息一起提交到目标链。
与许多其他协议不同,Hyperlane 没有 固定的验证者集。任何人都可以自由运行自己的验证者,只要接收合约指定了包含其验证者的 多重签名ISM。
验证者检查点是公开的。这确保了传输层是无权限的,因为任何人都可以提取签名并调用 Mailbox.process()
来传递消息。中继器仅为消息发送者提供便利服务。
验证者仅在最终确定的检查点上签名,以避免危及协议的安全性。签署被重组的消息会导致经济安全模块中的惩罚。验证者代理连接到单个链以检查新消息。如果要验证多个链,则必须运行多个此代理 的实例。
Hyperlane 正在开发一个用 Rust 实现的验证者二进制文件,任何人都可以轻松运行。从操作上讲,验证者需要运行此二进制文件,并访问其验证的链的 RPC 提供者或节点。我们希望大多数 Hyperlane 验证者将来自每个链现有的节点运营商社区。
想要运行验证者吗?请遵循 验证者指南。
更详细的信息
验证者代理使用两种关键类型:一种用于在其验证的区块链上签署交易,另一种用于在以太坊兼容的 ECDSA 曲线上签署检查点。由于检查点是公开的,当验证者首次开始操作时,必须通过链上 announce
交易宣布其检查点位置。这是验证者代理提交的唯一交易;区块链特定密钥在其他情况下根本不使用。也可以手动宣布新的验证者,以避免配置区块链特定密钥。任何人都可以宣布验证者。
对于使用 多重签名ISM 的消息,验证者通过调用 MerkleTreeHook.latestCheckpoint()
来读取当前的梅克尔根。
验证者使用 MerkleTreeHook.latestCheckpoint()
函数来确定何时需要索引新交易。此轮询机制确保验证者可 以开始签署新消息,而无需回填整个树。
多重签名ISM 前提条件
要验证来自源链的消息,验证者的检查点签名密钥必须在目标链接收者指定的 多重签名ISM 中注册。这只能在 ISM 合约部署时完成,但通过在任何 StaticThresholdAddressSetFactory 的实现上发送 deploy(validatorAddresses, threshold)
交易可以轻松完成。
AVS 操作员前提条件
要为 EigenLayer AVS 运行验证者并提供 经济安全,验证者必须注册为 AVS 操作员。有关更多详细信息,请参阅 AVS 操作员指南。
架构
验证者由两个主要任务组成:一个用于源链的索引器,以及一个用于发布签名梅克尔根的检查点提交者。
索引器
验证者唯一索引的事件类型是来自梅克尔树钩 合约 的 InsertedIntoTree
,该合约在每次新消息调度时由 邮箱 调用。这是通过 RPC 进行的,代理根据梅克尔插入事件构建内存中的梅克尔树,这些事件也被缓存到本地 RocksDB 数据库中以加快启动速度。每当调度新消息时,检查点提交者会从内存树生成一个检查点并将其添加到处理队列中。
检查点提交者
检查点提交者使用 ECDSA 密钥签署检查点并将其发布到高可用存储中。检查点的模式为
pub struct Checkpoint {
/// merkle_tree hook 地址
pub merkle_tree_hook_address: H256,
/// 邮箱 / 梅克尔树钩域
pub mailbox_domain: u32,
/// 检查点根
pub root: H256,
/// 检查点索引
pub index: u32,
}
当前代理实现支持的唯一检查点存储是 AWS S3。Google Cloud Storage 已集成,但存在一个 开放问题。Azure Blob Storage 的贡献仍在 进行中。
活跃性影响
根据多重签名ISM 中配置的阈值,验证者的停机可能会阻止协议的活跃性。提交者优先处理新检查点而非旧检查点,以便中继器可以首先获取较新消息的元数据,这些消息更有可能尚未交付。
默认 ISM 验证者
验证者的数量取决于跨链安全模块(ISM)配置。默认 ISM 使用特定的验证者集,您可以在 这里 查看验证者的详细信息,例如阈值、操作员和地址。