构建 Helios:完全无需信任地访问以太坊柏拉图区块链数据智能。垂直搜索。人工智能。

构建 Helios:对以太坊的完全无需信任的访问

我们使用区块链的主要原因之一是去信任化。该属性有望让我们能够自主访问我们的财富和数据。在很大程度上,像以太坊这样的区块链已经兑现了这一承诺——我们的资产真正属于我们。 

不过,为了方便起见,我们做出了一些让步。其中之一就是我们使用集中式 RPC(远程过程调用)服务器。用户通常通过 Alchemy 等中心化提供商访问以太坊。这些公司在云服务器上运行高性能节点,以便其他人可以轻松访问链上数据。当钱包查询其代币余额或检查待处理交易是否已包含在区块中时,它几乎总是通过这些集中式提供商之一来执行此操作。 

现有系统的问题在于用户需要信任提供商,并且无法验证其查询的正确性。

输入 赫利俄斯,我们开发的基于 Rust 的以太坊轻客户端,提供对以太坊的完全无需信任的访问。 Helios——它使用以太坊的轻客户端协议,由 最近的开关股权证明 — 将来自不受信任的集中式 RPC 提供者的数据转换为可验证安全的本地 RPC。 Helios 与集中式 RPC 协同工作,无需运行完整节点即可验证其真实性。 

可移植性和去中心化之间的权衡是一个常见的痛点,但我们的客户端(我们已经向公众提供了构建的基础)在大约两秒内同步,不需要存储,并允许用户从以下位置访问安全的链数据任何设备(包括手机和浏览器扩展)。但什么是 依赖集中式基础设施的潜在陷阱?我们将在这篇文章中介绍它们如何发挥作用,介绍我们的设计决策,并概述一些想法供其他人为这个项目做出贡献。 代码库.

中心化基础设施的陷阱:以太坊“黑暗森林”中的理论生物

一个(理论上的)生物潜伏在 黑暗的森林。它不会在以太坊内存池中寻找猎物,而是通过模仿我们所依赖的中心化基础设施来设置陷阱。陷入这个陷阱的用户不会犯任何错误:他们访问他们最喜欢的去中心化交易所,设置合理的滑点容忍度,并像往常一样买卖代币......他们做的一切都是正确的,但仍然成为一种新型的受害者三明治攻击,在以太坊黑暗森林的入口处精心设置的陷阱:RPC 提供商。

在详细阐述之前,让我们先看看去中心化交易所上的交易是如何进行的。当用户发送交换交易时,他们向智能合约提供几个参数——要交换的代币、交换金额,以及最重要的是,用户必须接收的交易完成的最小代币数量。最后一个参数指定交换必须满足“最小输出”或恢复。这通常被称为“滑点容忍度”,因为它有效地设置了交易发送到内存池和包含在区块中之间可能发生的最大价格变化。如果该参数设置得太低,则用户接受接收较少代币的可能性。这种情况还可能导致三明治攻击,攻击者有效地将出价夹在两个恶意互换之间。掉期会推高现货价格并迫使用户的交易以不太有利的价格执行。然后攻击者立即出售以获取少量利润。

只要将此最小输出参数设置为接近公允值,您就可以免受三明治攻击。但是,如果您的 RPC 提供商没有提供去中心化交易所智能合约的准确报价怎么办?然后,用户可能会被诱骗使用较低的最小输出参数签署交换交易,更糟糕的是,用户会直接将交易发送给恶意 RPC 提供商。提供商可以扣留交易并将攻击交易包直接发送给 Flashbot,从而确保自己的利润,而不是将这笔交易广播到公共内存池(其中有数十个机器人竞相执行三明治攻击)。

这种攻击的根本原因是信任其他人获取区块链的状态。经验丰富的用户传统上通过运行自己的以太坊节点来解决这个问题——这是一项时间和资源密集型的工作,至少需要一台持续在线的机器、数百GB的存储空间,以及大约一天的时间从头开始同步。这个过程肯定比以前容易了;团体喜欢 ARM 上的以太坊 我们孜孜不倦地努力使在低成本硬件上运行节点成为可能(例如带有外部硬盘驱动器的 Raspberry Pi)。但即使有这些相对最低的要求,运行节点对于大多数用户来说仍然很困难,特别是对于使用移动设备的用户来说。

值得注意的是,集中式 RPC 提供者攻击虽然完全合理,但通常是 简单的网络钓鱼攻击 ——而我们所描述的情况尚未发生。尽管像 Alchemy 这样的大型提供商的跟踪记录让我们没有理由怀疑他们,但在将不熟悉的 RPC 提供商添加到你的钱包之前,还是值得做一些进一步的研究。

Helios 简介:完全无需信任的以太坊访问

通过引入其轻客户端协议(通过最近转向权益证明而成为可能),以太坊为快速与区块链交互并以最低的硬件要求验证 RPC 端点开辟了令人兴奋的新可能性。自从这个月以来 合并,我们已经看到一批新的轻客户端彼此独立地出现(北极星, 雨云,以及基于 JavaScript 的 芳纶)采取了不同的方法来实现相同的目标:高效且无需信任的访问,而不使用完整节点。

我们的解决方案 Helios 是一个以太坊轻客户端,可在大约两秒内同步,无需存储,并提供对以太坊的完全无需信任的访问。与所有以太坊客户端一样,Helios 由执行层和共识层组成。与大多数其他客户端不同,Helios 将两层紧密耦合,以便用户只需安装和运行一个软件。 (艾瑞贡 也正在朝这个方向发展,通过添加直接内置到其存档节点中的共识层轻客户端)。 

那么它是怎样工作的? Helios 共识层使用先前已知的信标链区块哈希和与不受信任的 RPC 的连接来可验证地同步到当前区块。 Helios 执行层将这些经过身份验证的信标链区块与不受信任的执行层 RPC 结合使用,来证明有关链状态的任意信息,例如账户余额、合约存储、交易收据和智能合约调用结果。这些组件协同工作,为用户提供完全无需信任的 RPC,无需运行完整节点。

…在共识层

共识层轻客户端符合信标链轻客户端 规范,并利用信标链的同步委员会(在 Altair 硬分叉中的合并之前引入)。同步委员会是随机选择的 512 名验证者子集,服务时间约为 27 小时。 

当验证者加入同步委员会时,他们会签署他们看到的每个信标链区块头。如果超过三分之二的委员会成员签署了给定的区块头,则该区块很可能位于规范信标链中。如果 Helios 了解当前同步委员会的构成,它可以通过向不受信任的 RPC 请求最新同步委员会签名来自信地跟踪链的头部。 

感谢劳工统计局 签名 聚合时,只需要一次检查即可验证新标头。如果签名有效并且已由超过三分之二的委员会成员签署,则可以安全地假设该块已包含在链中(当然它可以从链中重组,但跟踪块最终性可以提供更严格的保证)。

不过,这个策略显然缺少一个部分:如何找到当前的同步委员会。首先要获取称为“信任根”的信任根 弱主观性检查点。不要让这个名字吓到你——它只是意味着一个旧的区块哈希,我们可以保证它在过去的某个时刻包含在链中。检查点的确切年龄背后有一些有趣的数学计算;最坏情况分析建议大约两周,而更实际的估计建议几个月。 

如果检查点太旧,则有 理论攻击 这可能会欺骗节点遵循错误的链。获取弱主观性检查点对于协议来说是带外的。我们使用 Helios 的方法提供了一个硬编码到代码库中的初始检查点(可以轻松覆盖);然后,每当节点同步时,它都会在本地保存最新的最终块哈希,以用作将来的检查点。 

方便的是,信标链区块可以被散列以产生唯一的信标区块散列。这意味着可以很容易地向节点请求完整的信标块,然后通过对其进行散列并与已知的块散列进行比较来证明块内容是有效的。 Helios 使用此属性来获取并证明弱主观性检查点块内的某些字段,其中包括两个非常重要的字段:当前同步委员会和下一个同步委员会。至关重要的是,这种机制允许轻客户端快速浏览区块链的历史。

现在我们有了一个弱主观性检查点,我们可以获取并验证当前和下一个同步委员会。如果当前链头与检查点位于同一同步委员会周期内,那么我们立即开始使用签名的同步委员会头验证新块。如果我们的检查点落后于几个同步委员会,我们可以:

  1. 在我们的检查点之后使用下一个同步委员会来获取并验证未来发起一个同步委员会的块。
  2. 使用这个新块来获取新的下一个同步委员会。
  3. 如果仍然落后,则返回步骤 1。

此过程的每次迭代都允许我们快进链的历史记录的 27 小时,从过去的任何区块哈希开始,并同步到当前的区块哈希。

…在执行层

执行层轻客户端的目标是获取由共识层验证的信标块头,并将它们与不可信的执行层 RPC 一起使用以提供经过验证的执行层数据。然后可以通过 Helios 本地托管的 RPC 服务器访问该数据。

这是一个获取帐户余额的简单示例,首先快速介绍以太坊中状态的存储方式。每个账户都包含几个字段,例如合约代码哈希、随机数、存储哈希和余额。这些帐户存储在一个大的、经过修改的 默克尔-帕特里夏树 称为状态树。如果我们知道状态树的根,我们可以验证 默克尔证明 证明树中任何帐户的存在(或排除)。这些证据实际上是不可能伪造的。

Helios 拥有来自共识层的经过身份验证的状态根。使用这个根 merkle 证明请求到不受信任的执行层 RPC,Helios 可以在本地验证存储在以太坊上的所有数据。

我们应用不同的技术来验证执行层使用的各种数据;一起使用,它们使我们能够验证从不受信任的 RPC 检索到的所有数据。虽然不受信任的 RPC 可以拒绝对数据的访问,但它无法再为我们提供错误的结果。

在野外使用 Helios

可移植性和去中心化之间的权衡是一个常见的痛点——但由于 Helios 非常轻量,用户可以从任何设备(包括手机和浏览器扩展)访问安全的链数据。在任何地方运行 Helios 的能力使更多人能够访问无需信任的以太坊数据,无论他们的硬件如何。这意味着用户可以使用 Helios 作为 MetaMask 中的 RPC 提供者,并且无需任何其他更改即可信任地访问 dapp。 

此外,Rust 对 WebAssembly 的支持使应用程序开发人员可以轻松地将 Helios 嵌入 Javascript 应用程序(如钱包和 dapps)中。这些集成将使以太坊更安全,并减少我们对中心化基础设施的信任需求。

我们迫不及待地想看看社区会做出什么成果。但与此同时,有很多方法可以为 Helios 做出贡献 - 如果您对为代码库做出贡献不感兴趣,您也可以构建集成 Helios 的软件以利用其优势。这些只是我们感到兴奋的一些想法:

  • 支持直接从P2P网络获取轻客户端数据,而不是通过RPC
  • 实现一些缺失的 RPC 方法
  • 构建可编译为 WebAssembly 的 Helios 版本
  • 将 Helios 直接集成到钱包软件中
  • 构建一个 Web 仪表板来查看您的代币余额,该仪表板从使用 WebAssembly 嵌入到网站中的 Helios 获取数据
  • 实现引擎API,使Helios的共识层可以连接到现有的执行层全节点

查看代码库 首先,我们欢迎您的错误报告、功能请求和代码。如果您构建了更多内容,请与我们分享 Twitter, Telegram,或 Farcaster @a16zcrypto。

***
此处表达的观点是引用的个人 AH Capital Management, LLC (“a16z”) 人员的观点,而不是 a16z 或其关联公司的观点。 此处包含的某些信息是从第三方来源获得的,包括来自 a16z 管理的基金的投资组合公司。 虽然取自被认为可靠的来源,但 a16z 并未独立验证此类信息,也不就该信息的当前或持久准确性或其在特定情况下的适用性做出任何陈述。 此外,该内容可能包含第三方广告; a16z 未审查此类广告,也不认可其中包含的任何广告内容。

此内容仅供参考,不应被视为法律、商业、投资或税务建议。 您应该就这些事项咨询您自己的顾问。 对任何证券或数字资产的引用仅用于说明目的,并不构成投资建议或提供投资咨询服务的要约。 此外,本内容并非针对也不打算供任何投资者或潜在投资者使用,并且在任何情况下都不得在决定投资于 a16z 管理的任何基金时作为依据。 (投资 a16z 基金的要约仅通过私募备忘录、认购协议和任何此类基金的其他相关文件提出,并应完整阅读。)任何提及、提及或提及的投资或投资组合公司所描述的并不代表对 a16z 管理的车辆的所有投资,并且不能保证这些投资将是有利可图的,或者将来进行的其他投资将具有类似的特征或结果。 由 Andreessen Horowitz 管理的基金进行的投资清单(不包括发行人未允许 a16z 公开披露的投资以及对公开交易的数字资产的未宣布投资)可在 https://a16z.com/investments 获得/。

其中提供的图表仅供参考,在做出任何投资决定时不应依赖。 过去的表现并不预示未来的结果。 内容仅在所示日期生效。 这些材料中表达的任何预测、估计、预测、目标、前景和/或意见如有更改,恕不另行通知,并且可能与他人表达的意见不同或相反。 有关其他重要信息,请参阅 https://a16z.com/disclosures

时间戳记:

更多来自 安德森霍洛维茨