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询问最新的同步委员会签名来自信地追踪链的头部。

感谢聚合 签名 BLS 只需要一次检查即可确认新区块。如果签名有效,并且得到了三分之二以上委员会成员的签名,则可以认为该区块已被纳入链上(当然,也可以从链上重新形成,但要跟踪该区块的完成情况)该区块可以提供更强的保证)。

然而,这个策略有一个明显的缺陷:如何找到当前的同步委员会。首先要获得一个名为“信任”的来源 弱主观性控制点。不要被这个名字吓倒——它指的是一个旧的区块链,我们可以保证它在过去的某个时刻被包含在链上。参考点的年龄背后有一些有趣的数学计算;最坏情况的分析表明大约需要两周,而更精确的估计表明需要几个月的时间。

如果参考点太旧,则有 理论攻击,这可以欺骗节点遵循错误的链。获得主观性的弱控制点超出了协议的范围。 Helios 方法提供了一个硬编码到代码库中的初始检查点(可以轻松撤消);然后,它将最后完成的区块链存储在本地,以用作将来同步节点时的参考点。

方便地,可以对信标链的块进行散列以创建唯一的信标块散列。这意味着您可以轻松地在节点中查询完整的信标块,然后通过散列并将其与已知的块散列进行比较来证明该块内容的有效性。 Helios 使用此属性来检索和验证弱主观性检查点块内的某些字段,包括两个非常重要的字段:当前同步委员会和下一个同步委员会。非常重要的是,这个机制可以让轻客户端快速查看区块链的历史。

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

1. 使用检查点之后的下一个同步委员会来接收并验证未来一个同步委员会中出现的块。

2. 使用这个新块,获得一个新的下一个同步委员会。

3. 如果您仍然落后,请返回步骤 1。

这个过程的每次迭代都允许我们快进 27 小时的链历史,从过去的任何区块链开始,并与当前区块链同步。

...在执行层面

运行时客户端的工作是获取共识层验证的信标块头,并将它们与不可信的 RPC 结合使用到运行时,以提供经过验证的运行时数据。然后可以通过 Helios 本地托管的 RPC 服务器访问该数据。

这是获取帐户余额的简单示例,首先快速概述信息在以太坊中的存储方式。每张发票包含项目代码哈希、随机数、存储哈希和余额等多个字段。这些帐户保存在一个大的修改过的 树 默克尔-帕特里夏,称为状态树。如果我们知道状态树的根,我们可以使用 默克尔证明 确认树中任何帐户的存在(或排除)。这些确认几乎不可能伪造。

Helios 拥有来自共识层的经过身份验证的状态根。使用对不受信任的运行时 RPC 的根和默克尔证明请求,Helios 可以在本地验证存储在以太坊上的所有数据。

我们使用各种技术来验证运行时层使用的各种数据;它们一起使我们能够验证从不受信任的 RPC 接收的所有数据的真实性。尽管不受信任的 RPC 可以拒绝对数据的访问,但它无法再为我们提供错误的结果。

在野外使用 Helios

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

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

我们正在等待看看团队会拿出什么成果。同时,有很多方法可以为 Helios 做出贡献 - 如果您对为代码库做出贡献不感兴趣,您还可以创建与 Helios 集成的软件以利用其优势。这些只是一些可以实施的想法:

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

要开始使用,请查看 代码库 — 该团队欢迎您的错误报告、功能请求和代码请求。

联系团队: 推特电报 或远播者 @a16z加密.

翻译作者 兔穴

风险投资公司 | 电报 | 推特 YouTube | VK |网站

更多新闻: