验证器
运行验证器所需的一切。
有经验的操作员可能更喜欢使用terraform部署代理。此过程将自动创建代理密钥、Validator buckets、权限以及在AWS上运行Validator集群所需的任何其他辅助设置。
HyperlaneValidators与其他验证器没有网络连接,也不会定期提交事务。Hyperlane验证器是基于每个源链运行的,这些说明是针对单个链编写的。
运行验证器需要满足以下条件:
- 一个RPC节点
- 验证器通过对其正在验证的链上的Mailbox 合约进行简单的视图调用来读取默克尔根。
在Polygon主网上操作验证器需要访问存档节点。这是因为验证器应仅在区块已经被最终确定后才签署根,而Polygon需要256个区块确认才能实现最终性。
-
安全签名密钥
- 验证器使用此密钥对
Mailbox
的最新默克尔根进行签名。保护此密钥非常重要。如果密钥被泄露,攻击者可以尝试伪造消息,导致验证器被减持。 - Hyperlane验证器代理当前支持使用通过API keys/secrets访问的AWS KMS密钥进行签名,以及用于测试的十六进制明文密钥。更多详情请参阅agent keys。
- 验证器使用此密钥对
-
公共可读存储
- 验证器将它们的签名离线写入公开访问且高可用的存储中,以便由Relayer进行聚合。
- Hyperlane验证器代理当前支持使用上述相同的AWS API密钥将签名存储在AWS S3上,同时也支持将签名存储在本地文件系统中以进行测试。
-
可运行的机器
- 验证者可以自己编译Rust二进制文件,也可以运行Abacus Works提供的Docker镜像。二进制文件可以使用你喜欢的云服务运行。由于Hyperlane没有"双重签名"的概念,你甚至可以在不同区域运行多个实例,以实现高可用性。
指南
我们强烈建议您按照local agents guide了解如何在本地配置和运行验证器。
本地代理设置显示了如何在本地机器上运行验证器,这仅用于测试和开发目的。这也意味着本地验证器的签名只能由本地运行的中继器访问。
对于生产环境,您应该将签名发布到一个公开访问的存储中。请参阅AWS bucket setup guide。
一般而言,在运行生产型验证器之前,您需要确保您具备以下条件:
- 创建一个密钥供验证器签名,请参阅Agent Keys 文档。
- 设置您的验证器签名发布存储的位置,请参阅 AWS Signatures Bucket Setup指南。
配置
与本地设置一样,在配置Validator时也需要提供一些基本参数。
Parameter | Description |
---|---|
--db | 将持久数据写入磁盘的路径。 |
--originChainName | 正在验证的链的名称。例如:ethereum 。 |
--chains.[originChainName].customRpcUrls | 覆盖验证器为您的源链使用的默认RPC url。 |
--chains.[originChainName].blocks.reorgPeriod | 验证器在对 Mailbox merkle root签名之前需要等待的块确认次数。 |
您的验证器可以使用命令行参数和环境变量进行配置。请查看agent configuration 页面和configuration reference以获取完整的配置可能性列表。
当然,您还可以通过使用逗号分隔的方式将附加配置文件的路径提供给CONFIG_FILES
environment variable。如果您选择在Docker运行,请查看agent configuration中的Docker部分,了解如何将配置文件挂载到您的Docker容器中的提示。
设置特定的配置
这些配置要求因您设置的环境而异。
验证器基本配置
- Local Setup
- Production Setup (AWS)
参数 | 说明 |
---|---|
--validator.key | 验证器的私人密钥,用于签署梅克尔根。 |
--chains.${localChainName}.signer.key | 您的验证器的私钥,将用于在链上提交交易,公开宣布您的验证器的检查点同步器。 |
参数 | 说明 |
---|---|
--validator.region | AWS KMS 密钥的地区。例如:us-east-1 。 |
--validator.type | Set to the aws literal. |
--validator.id | 验证器 AWS KMS 密钥的别名,前缀为 "alias/"。例如:alias/hyperlane-validator-signer-${originChainName} 。 |
--chains.${originChainName}.signer.type | Set to the aws literal. |
--chains.${originChainName}.signer.id | 验证器 AWS KMS 密钥的别名,前缀为 "alias/"。例如:alias/hyperlane-validator-signer-${originChainName} 。 |
检查点同步器配置
- Local Setup
- Production Setup (AWS)
参数 | 说明 |
---|---|
--checkpointSyncer.type | 设置为 localStorage 。 |
--checkpointSyncer.path | 写入 Validator 签名的本地目录路径。这应该是本地设置中 $MY_VALIDATOR_SIGNATURES_DIRECTORY 的值。例如:--checkpointSyncer.path='/tmp/hyperlane-validator-signatures-ethereum' 。 |
请注意,中继器必须配置为--allowLocalCheckpointSyncers
,才能从该验证器读取签名。
参数 | 说明 |
---|---|
--checkpointSyncer.type | 设置为 s3 。 |
--checkpointSyncer.bucket | AWS S3 存储名称。 |
--checkpointSyncer.region | AWS S3 存储的区域。例如:us-east-1 。 |
开始验证
安装
生产环境的推荐安装方法是使用Docker映像。
- Docker image
- Building from source
首先下载 docker 映像:
docker pull gcr.io/abacus-labs-dev/hyperlane-agent:3adc0e9-20240319-152359
克隆并安装
首先,克隆Hyperlane monorepo:
git clone git@github.com:hyperlane-xyz/hyperlane-monorepo.git
然后按照rust
目录中的setup instructions进行操作。这将设置rustup
,如果你使用的是苹果芯片,则需要安装Rosetta 2。
# 安装rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# (仅apple silicon需要)安装rosetta 2
softwareupdate --install-rosetta --agree-to-license
构建Validator:
cargo build --release bin validator