全部语种
分享
作者:2077 Research 来源:X,@2077Research 翻译:善欧巴,金色财经
随着以太坊网络不断发展成熟,理解不同类型节点的概念变得愈发重要。然而,现实是大多数用户并不愿意运行节点,即使硬件需求对许多活跃用户而言已经不再是问题。
在以太坊发展的“终局”中,用户必须能够在无需复杂技术知识或资源的情况下验证状态完整性和数据可用性。毕竟,如果区块链无法实现验证,它就只是一种效率低下的数据库。
本文将探讨三种关键类型的节点,这些节点将塑造以太坊网络的未来:无状态节点、状态节点以及完整/存档节点。我们将研究无状态节点如何利用零知识证明实现新区块的可信验证,状态节点如何提供快速且可信的以太坊当前状态访问,以及完整/存档节点如何存储从创世区块开始的完整链历史。通过理解每种节点类型的角色与权衡,我们可以迈向更去中心化、更安全、更具扩展性的以太坊生态系统。
目前,大多数用户不愿意花费精力运行任何类型的节点,尽管对于比特币和以太坊来说,运行节点的硬件需求对许多链上活跃用户而言完全可以负担。“活跃用户”指的是那些链上资产规模较大的用户,他们并不是因为硬件成本而不运行节点。
主要原因可能是以下几点的综合作用:绝大多数用户并不关心运行节点,也不愿花几百美元购买硬件,或者缺乏运行节点的技术知识。尽管比特币和以太坊在降低运行难度方面取得了很大进展,但对于普通非技术用户来说,这仍然是一个复杂的任务。
无状态以太坊的愿景
我认为,在每条区块链的“终局”中,用户需要能够验证状态完整性和数据可用性,而不需要理解这些概念是什么。好消息是,这一愿景通过足够的工程能力是完全可行的(借助零知识技术和一些数据可用性采样)。
在这种终局中,几乎所有值得使用的钱包都将内置一个无状态节点。当区块链添加新块时,该节点可以通过 P2P 网络向任何完整节点请求最新区块头及零知识证明,验证状态从前一区块头到新区块头的变更是正确的,同时通过向几个节点请求随机数据样本,以接近 100% 的信心确认所有数据(包括数据块和执行数据)已发布。此外,它还可以获取一个零知识证明,证明网络已就该区块达成共识并完成最终确认。
所需的带宽和计算资源非常小,完全可以在手机甚至智能手表上完成(@drakefjustin 常提到这一点)。这种节点被归类为“无状态”节点,因为它可以在不本地保存当前状态的情况下,依赖不同类型的证明来验证新区块。
这些证明不必是 zk 证明。在我们能够使用 zk 证明执行上述内容之前,我们将进行无状态执行验证。事实上,无状态执行今天可以实现,但对于当前的 Merkle-Patricia-Tree 结构来说效率非常低,见证证明太大而无法实用。
这是无状态执行在当前 Merkle-Patricia 树中遇到的主要问题,此屏幕截图中的许多区块都远小于 100kb,而无状态验证所需的证明通常比区块本身大 50 倍以上。
然而,以太坊将来会将其状态树结构升级为不同于当前的 Merkle-Patricia-Tree 结构。你们中的许多人可能听说过多年来一直在路线图上的 Verkle 树,它们将允许创建实用的无状态客户端,因为 Verkle 树结构的性质允许非常小的见证/证明。
Verkle 树的一个主要问题是它们并不具有量子安全性。这意味着它们充其量只是状态树结构的临时解决方案,直到有成熟且高效的永久性解决方案出现。最终的解决方案可能会是基于 STARK 证明的二进制哈希树(STARK-proven binary hash tree)。事实上,很可能 Verkle 树会被跳过,直接采用某种形式的 STARK 证明的二进制哈希树(相关梗图见 @VitalikButerin)。
无状态节点一个非常有趣的选项是,它可以选择不完全无状态。例如,节点可以根据用户的需求,本地存储与其用例相关的状态数据(前提是客户端支持该功能)。
假设你的资产分散在多个地址、资产种类和 DeFi 协议中,那么你可以将与自己用例相关的所有状态数据本地写入磁盘,而仅需消耗极少的磁盘空间。即使跟踪多个大型 DeFi 协议的完整状态数据也仅需几 GB,而考虑到几乎所有新款手机都配备了 128GB 或更多存储空间,用户在手机闪存中存储自己所需的状态数据不仅可行,而且可能相当实用。
(关于轻客户端的简短说明:在一个无状态客户端能够轻松高效地验证状态转换和共识的世界中,我认为传统依赖诚实多数假设的轻客户端将不再有实际用途。)
状态节点仅保存当前状态和最近的状态数据,删除所有超过一定时间的数据(详见 EIP-4444 提案)。当前状态对于本地构建区块是必要的,而这是无状态节点无法完成的功能。
有状态节点不应与“完整”节点混淆,因为有状态节点不会保存完整的链历史,因为这在未来会变得非常数据密集。有状态节点对于任何想要快速且无需信任地访问以太坊当前状态的用户都很有用,无论是从状态查询数据、构建区块还是使用这种类型的节点进行质押。
保留在消费级硬件上运行有状态节点的可能性是一个非常重要的目标,我认为,即使无状态节点非常轻量和成熟,以太坊社区也必须保留这一目标。其中一个主要原因是,所有无状态节点都依赖有状态节点来创建新区块无状态验证所需的见证。
还需要访问当前状态才能知道内存池中的交易是否有效,因此,在网络上拥有一组非常分散的状态节点非常重要,这些节点可以通过某种形式的包含列表设计确保非常强大的审查抵抗保证。
好消息是,有了状态到期机制,我们可以大大简化有状态节点的运行,因为一段时间内无人交互的状态可以从节点的磁盘中删除,任何想要与已到期状态交互的人都必须提供见证(本质上是默克尔证明)才能将已到期状态恢复到当前状态。任何有权访问链历史的人都可以以无需信任的方式构建这些类型的证明来恢复已到期状态。截至撰写本文时,以太坊状态已接近 300gb,在实施某种形式的状态到期机制之前,状态大小将继续以或多或少的上升趋势增长。
出于本文的目的,我将批量处理完整节点和存档节点,因为普通完整节点可以使用其写入磁盘的信息在本地计算存档节点写入磁盘的所有数据。不同之处在于,完整节点会修剪不再是最新/近期状态的状态。例如,您无法从普通完整节点查询“大约 5 年前区块 Y 上账户 X 的 ETH 余额是多少”,而存档节点会在一毫秒内回答该查询。
也就是说,理论上可以从完整节点写入磁盘的数据(整个链历史)计算出此查询的答案,但支持此功能的执行客户端并不多。我认为,认为许多用户(甚至是高级用户)将在 10 年内运行完整/存档节点是不合理的,要使这成为一个合理的选择,我们必须将 L1 吞吐量限制在完全不合理的水平,因为我们可以在 L1 上以最小的权衡获得更高的吞吐量。当大多数用户可以使用 zk 证明轻松验证新块时,我认为当收益如此巨大时,这是一个值得追求的权衡。
也许我们可以获得能够在 HDD 上高效运行的执行客户端,并且能够以相对低廉的价格存储数百 TB 的存档状态。这样可以让出于任何原因想要存档所有以太坊的用户这样做,我知道 Erigons 的目标之一是允许在 HDD 上运行完整存档节点。
未来,以太坊的形态将由其网络节点的构成决定。通过让无状态节点成为大多数用户的现实选择,同时认识到状态节点和完整/存档节点的重要性,以太坊可以在去中心化、安全性和扩展性之间找到完美的平衡,为所有用户带来福祉。