无状态客户端:以太坊去中心化之路

MarsBit
媒体专栏
热度: 15420

随着以太坊的状态不断增长, 无状态客户端为减轻节点的存储和带宽压力, 提高去中心化及网络效率提供了创新解决方案。

原文标题:Stateless Clients: A Path to Decentralization inEthereum

原文作者:ohotties.eth

原文来源:mirror

编译:MarsBit,MK

以太坊作为领先的区块链平台,随着其使用率的增加,面临着网络去中心化、扩展性和资源需求等多方面的挑战。本文将深入探讨Vitalik在2017年提出的无状态客户端概念,分析其如何通过减轻节点负担和加速验证过程,为以太坊的去中心化和扩展提供可能的解决方案。以下内容为MarsBit编译:

随着以太坊的使用率逐渐攀升,运行一个完整节点所需的资源和带宽也随之增加。这导致能够运行完整节点的人数逐渐减少,从而降低了网络的去中心化程度。此外,随着交易需求的不断增加,以太坊在扩展性上也面临着挑战,造成了网络拥堵和高昂的气费。

Vitalik于2017年提出的无状态客户端为以太坊所面临的去中心化挑战提供了潜在的解决方案。无状态客户端的核心思想是减少运行完整节点所需的存储和带宽,使得更多人能够参与并促进网络去中心化。本文将深入探讨无状态客户端的工作机制及其潜在的利弊。

何为以太坊状态?

要理解无状态客户端,我们首先需要了解以太坊中的“状态”概念。以太坊状态指的是所有账户、合约、余额、随机数以及在以太坊世界中的当前存储状态。它可以被视为在特定时间点记录以太坊网络所有相关信息的数据库。

状态被持续存储在Merkle Patricia Trie中,本质上是一个存储键值对的优化过的Merkle树。该trie的根哈希总结了整个状态。每当生成一个新块时,状态都会根据该块中的交易进行更新,而新的状态根哈希则被包含在块头中。

随着时间的推移,更多的账户、合约和交易被添加,以太坊的状态不断增长。目前,状态的大小已超过1TB,每年还在增长数十GB。这种不断增长的状态是去中心化问题的根源。

为何状态增长会导致问题

以太坊状态大小的增加导致了几个关键问题:

• 新节点同步时间更长 - 新节点需处理所有历史状态变更以完成同步,这需耗费极长时间。这使运行新的完整节点变得困难,进而阻碍了去中心化。目前,在消费者硬件上从创世块开始同步一个新节点需数天甚至数周的时间,这对于高效启动新节点并让更多参与者加入网络构成了重大障碍。

• 硬件要求增加 - 更大的状态需要更多的存储、内存和处理能力来存储、访问和更新。这阻止了资源较少的用户运行节点。至少,现在运行一个完全同步的以太坊节点需要拥有1-2TB容量的SSD,对于许多潜在的节点操作者来说,这是无法承受的。

• 更多的带宽使用 - 新块的广播还必须包括更新的状态,需更多的带宽。这增加了节点操作者的成本。目前,状态占据了大部分块的广播,因此块大小持续增长。更多的带宽意味着节点操作者的成本更高。

• 区块验证更慢 - 读取和更新更大的状态使区块验证变慢,限制了交易吞吐量。每个交易需要多次存储读取和写入以更新余额、随机数、合约状态等。更大的状态意味着每个块需要更多的读/写操作,降低了每秒可以处理的交易数量。

• 永久的存储成本 - 一旦数据被添加到状态中,就必须永久存储。这造成了无限的状态增长。目前还没有机制可以主动删除旧的和未使用的状态数据。因此,只要以太坊继续运行,状态的保留成本就会无限增加。

无状态客户端解析

无状态客户端提供了一种不需访问完整以太坊状态便可验证新块的方法。它们利用名为“见证”的加密证明来证明区块中的状态变化的有效性,而无需拥有底层状态数据。

以下是无状态客户端的高级工作原理:

• 客户端仅存储块头和状态根,而非完整的状态数据。块头包含了诸如该块处理后的状态trie的根哈希之类的元数据。

• 在验证新块时,客户端会收到一个与该块一起的“见证”。这个见证是一组Merkle证明,证明由交易引起的特定状态更新是有效的。

• 见证包含了处理交易所需的特定状态值的Merkle证明。例如,更新的账户余额或合约存储。

• 客户端利用见证确保交易根据最后已知的状态根是有效的。证明验证状态变化与之前的根匹配。

• 若验证有效,客户端将更新到块头中提供的新状态根。此新状态根将用于验证下一个块。

• 通过使用见证来验证状态,而非在本地存储完整状态,无状态客户端获得了几个优势:

• 同步时间极短 - 无需重新处理历史状态变更,无状态客户端仅需块头即可实现几乎即时的同步。

• 存储需求低 - 状态根仅为32字节。无需数百GB的状态存储,仅需存储块头。

• 带宽使用较少 - 仅传输块头和见证,而非完整的状态,从而最大程度减少了带宽使用。

• 验证速度快 - 见证仅包含小的相关状态子集,仅证明被触及的更新账户/存储,从而加快了验证速度。

• 轻客户端支持方便 - 轻客户端可以轻松验证证明。无状态验证与轻客户端模型非常兼容。

无状态客户端的挑战

尽管无状态客户端带来了诸多重要的优势,但仍需解决一些重要的技术挑战:

• 见证大小 - 见证可能过大,无法有效传输。若使用完整的Merkle证明,其大小可能超过区块的大小限制。

• 见证创建 - 对于区块提议者来说,生成最优的见证是一项复杂的任务。提议者需组装正确的证明片段以验证每笔交易。

• 见证激励缺失 - 提供见证不带来直接的奖励。与挖矿不同,见证创建并未包含内置的激励机制。

• 临时数据 - 见证在特定时间点证明状态,需重新生成。随着状态的变化,无法重复使用见证。

• 状态存储 - 仍需有人维护完整的状态以生成见证。无状态验证依赖于有状态的见证生成。

• 复杂应用 - 一些合约可能依赖于大的状态子集,导致见证膨胀。例如,每次交易都更新多个存储槽的合约。

可能的解决方案

研究人员已经提出了多种解决方案来应对这些挑战:

• Verkle树 - 特定的数据结构,用于缩减见证大小。Verkle树利用简洁的加密承诺来最小化证明大小。

• 见证缓存 - 提议者可维护最近的见证以供再次使用。缓存可能重新相关的见证,以分摊创建成本。

• 协议激励 - 为提供有用的见证设立奖励机制。新的激励结构可补偿见证创建的努力。

• 中间状态根 - 随时间跟踪根以避免重新生成证明。维护部分根可能允许重复使用见证片段。

• 状态租赁 - 为长期维护状态支付费用,修剪未使用的状态。租赁机制促使清理过时的存储,以限制证明大小。

• 分区见证模型 - 将状态处理分配给提议者和验证者。有些专用的提议者节点负责生成见证。

每种方法之间存在权衡,需进一步研究以发现最佳实现方法。幸运的是,零知识密码学中的快速创新可能为高效的无状态客户端开创新的可能性。

潜在影响

如果能够克服技术障碍,无状态客户端可显著推动以太坊的进步:

• 加速同步和验证,以支持更高的交易吞吐量。无状态验证将大幅提升区块处理速度。

• 降低运行节点所需的资源,提高去中心化水平。笔记本电脑和爱好者可真正运行完整节点。

• 更好地支持轻客户端,如移动钱包。状态证明与轻客户端模型高度兼容。

• 无状态验证使分片实现更为顺畅。跨分片交易可利用高效的状态证明。

• 能够删除和修剪不再有用的旧状态数据。状态增长可被主动管理,而非无限制地增长。

• 节点操作者可根据需要定制状态的更多灵活性。节点可根据用例调整状态保留策略。

• 转向一个模型,其中计算和带宽比存储更为重要。架构转向更加云友好的模型。

还存在一些潜在风险,如增加的DDoS攻击的脆弱性,以及区块链历史仅被少数节点操作者可靠地存储。然而,加密证明可降低这些风险。总的来说,无状态客户端是克服以太坊当前限制的最有前景的方法之一。

结论

随着采用率的增加,以太坊不断增长的状态大小对去中心化构成了挑战。无状态客户端通过使节点能够在不依赖完整区块链状态的情况下验证交易,提供了一种解决方案。这最终可能允许移动电话运行以太坊节点,大大增加了去中心化的程度。

声明:本文为入驻“MarsBit 专栏”作者作品,不代表MarsBit官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
免责声明:本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况,及遵守所在国家和地区的相关法律法规。