Helios 是一个用 Rust 编写的去信任、高效、可移植的多链轻客户端。
Helios 将不受信任的集中式 RPC 端点转换为其用户安全且不可操作的本地 RPC。它可以在几秒钟内同步,不需要存储,并且足够轻量级,可以在移动设备上运行。
Helios 的二进制大小很小,可以编译成 WebAssembly。这使其成为直接嵌入钱包和 dapp 的完美目标。
首先安装heliosup
,Helios 的安装程序:
curl https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash
要安装 Helios,请运行heliosup
。
要在以太坊上运行 Helios,请运行以下命令,将$ETH_RPC_URL
替换为 RPC 提供者 URL(例如 Alchemy):
helios ethereum --execution-rpc $ETH_RPC_URL
$ETH_RPC_URL
必须是提供eth_getProof
端点的受支持的以太坊执行 API 提供商。 Infura 目前不支持此功能。我们建议使用炼金术。
Helios 现在将在http://127.0.0.1:8545
运行本地 RPC 服务器。
Helios 还在 rpc.md 文件中提供了其支持的 RPC 方法的文档。
要在 OP Stack 链上运行 Helios,请运行以下命令,将$ETH_RPC_URL
替换为 RPC 提供程序 URL(例如 Alchemy),并将$NETWORK
替换为受支持的 OP Stack 网络:
helios opstack --network $NETWORK --execution-rpc $ETH_RPC_URL
目前支持的网络值是op-mainnet
和base
,很快就会有更多网络值。
--consensus-rpc
或-c
可用于设置自定义共识层 rpc 端点。这必须是支持轻客户端信标链API的共识节点。为此,我们建议使用 Nimbus。如果未提供共识 rpc,则默认为我们运行的https://www.lightclientdata.org
。
--checkpoint
或-w
可用于设置自定义弱主观性检查点。这必须等于一个纪元的第一个信标块哈希值。弱主观性检查点是系统信任的根源。如果将此设置为恶意值,攻击者可能会导致客户端同步到错误的链。 Helios 最初设置一个默认值,然后缓存它所看到的最新最终块以供以后使用。
--network
或-n
设置要同步的网络。当前有效的选项是mainnet
、 sepolia
和holesky
但是用户可以在其配置文件中添加自定义网络。
--rpc-port
或-p
设置本地 RPC 应运行的端口。默认值为8545
。
--rpc-bind-ip
或-b
设置绑定到 JSON-RPC 服务器的 IP。默认情况下,Helios 将使用127.0.0.1
。使用0.0.0.0
允许远程访问。
--data-dir
或-d
设置 Helios 用于存储缓存的弱主观性检查点的目录。每个网络仅存储最新的检查点,只有 32 字节。
--fallback
或-f
设置检查点回退 url(字符串)。仅当--checkpoint
标志提供的检查点对于 Helios 来说太过时而无法用于同步时,才使用此选项。如果未提供任何内容且未设置--load-external-fallback
标志,Helios 将出错。例如,您可以像这样指定后备: helios --fallback "https://sync-mainnet.beaconcha.in"
(或使用简写,如下所示: helios -f "https://sync-mainnet.beaconcha.in"
)
--load-external-fallback
或-l
启用弱主观性检查点回退(不需要值)。例如,假设您设置的检查点值过于过时,Helios 无法与其同步。如果设置了此标志,Helios 将在 ethpandaops/checkpoint-sync-health-checks 的社区维护列表中查询所有网络 api 的最新插槽。槽列表会针对健康的 api 进行过滤,并且将返回最近 epoch 中出现最频繁的检查点。注意:这是社区维护的列表,因此不提供安全保证。如果传递到--checkpoint
检查点失败,请将此作为最后的手段。不建议这样做,因为恶意检查点可以从列出的 api 返回,即使它们被认为是健康的。这可以像这样运行: helios --load-external-fallback
(或简写的helios -l
)。
--strict-checkpoint-age
或-s
启用严格的检查点年龄检查。如果检查点已超过两周且启用了此标志,Helios 将出错。如果没有此标志,Helios 将会向用户发出警告并继续。如果检查点超过两周,理论上存在可能导致 Helios 和超轻客户端同步错误的攻击。这些攻击既复杂又昂贵,因此 Helios 默认禁用此攻击。
--help
或-h
打印帮助消息。
所有配置选项都可以在~/.helios/helios.toml
中的每个网络级别上设置。这是一个示例配置文件:
[mainnet]consensus_rpc =“https://ethereum.operationsolarstorm.org”execution_rpc =“https://eth-mainnet.g.alchemy.com/v2/XXXXX”检查点= “0x85e6151a246e8fdba36db27a0c7678a575346272fe978c9281e13a8b26cdfa68”[op-mainnet]consensus_rpc =“https://op-mainnet.operationsolarstorm.org”execution_rpc = “https://opt-mainnet.g.alchemy.com/v2/XXXXX”[base]consensus_rpc =“https://base.operationsolarstorm.org”execution_rpc =“https://base-mainnet.g.alchemy。 com/v2/XXXXX”
config.md 文件中提供了配置选项的全面细分。
将 Helios 作为 Rust 库运行的示例可以在示例目录中看到。
检查点是信标链共识层块哈希而不是执行层块哈希。 https://holesky.etherscan.io/blocks 显示了 Holesky 执行层块哈希的示例
检查点可以从以下链接获取:
以太坊主网 https://beaconcha.in
Holesky 测试网 https://holesky.beaconcha.in
建议使用块哈希作为不到两周的检查点,但是您实际上可以使用较旧的检查点,它仍然可以工作,但会给您一个警告。使用不到两周的检查点可以防止一些很难实施的攻击。
例如,要获取 Holesky 测试网的最新检查点,请访问 https://holesky.beaconcha.in/ 并获取任何最终纪元中第一个区块的区块哈希值。在撰写本文时,纪元 78425 中的第一个块哈希是最旧的插槽 2509600,其块根为 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6,并且是要使用的最新检查点值。
这个最新的检查点可以作为命令行中的附加 CLI 选项提供,以在以太坊 Holesky 测试网上运行 Helios Light Client 节点:
太阳神以太坊 ——网络空洞 --consensus-rpc http://testing.holesky.beacon-api.nimbus.team --execution-rpc https://ethereum-holesky.g.allthatnode.com --检查点0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6
例如,要获取以太坊主网的最新检查点,请访问 https://beaconcha.in 并获取任何最终纪元中第一个区块的区块哈希值。在编写纪元 222705 中的第一个块哈希时,最旧的插槽 7126560 的块根为 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2,并且是要使用的最新检查点值。
这个最新的检查点可以作为命令行中的附加 CLI 选项提供,以在以太坊主网上运行 Helios Light Client 节点:
太阳神以太坊 --网络主网 --consensus-rpc https://www.lightclientdata.org --execution-rpc https://ethereum-mainnet.g.allthatnode.com --检查点0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2
如果您希望使用配置文件而不是 CLI 参数,那么您应该将配置文件中的示例检查点替换为上面获得的最新检查点。
为了确保 Helios 按预期工作,我们有一个可供您运行的全面测试套件。在运行测试之前,请确保在项目目录的根目录中创建一个.env
文件。您可以复制.env.example
文件的内容并填写您自己的机密。
cp .env.example .env
要运行所有测试,请使用以下命令:
货物测试全部
要对单个包运行测试,请使用以下命令,并替换为您要测试的包:
货物测试 -p <包名称>
欢迎对 Helios 做出所有贡献。在打开 PR 之前,请提交详细说明错误或功能的问题。打开 PR 时,请确保您的贡献已构建、已使用cargo fmt
进行检查,并且包含测试(如果适用)。
如果您在使用 Helios 时遇到问题或正在考虑做出贡献,请随时在此处加入我们的电报。
该代码按原样提供。对于代码的安全性或正确性,不作任何明示或暗示的保证、陈述或保证。它未经审核,因此不能保证它会按预期工作,用户可能会遇到传输信息的延迟、故障、错误、遗漏或丢失。本回购协议中的任何内容均不应被解释为针对任何特定事实或情况的投资建议或法律建议,并且无意取代称职的律师。如果您有任何疑问或疑虑,强烈建议您联系您所在司法管辖区的信誉良好的律师。 a16z对前述内容的任何使用不承担任何责任,用户应谨慎使用并自行承担风险。请参阅 a16z.com/disclosures 了解更多信息。