随着以太坊使用量的增加,运行完整节点将更加耗能、需要更多的带宽。因此,能够运行完整节点的人变得更少,从而降低了网络的去中心化程度。此外,随着交易需求的增加,以太坊难以扩展,导致网络拥塞和高昂的Gas费。
2017 年,Vitalik 提出了无状态客户端,为以太坊面临的去中心化挑战提供了可能的解决方案。无状态客户端背后的关键思想是减少运行全节点的存储和带宽要求,使更多人可以参与网络并使网络去中心化。本文将深入探讨无状态客户端的工作方式及其潜在的优缺点。
什么是以太坊状态?
要了解无状态客户端,我们首先需要了解以太坊中“状态”的概念。以太坊状态是指以太坊世界中所有账户、合约、余额、随机数和存储的当前状态。它可以被视为是一个数据库,存储给定时间点与以太坊网络相关的所有信息。
状态保存在 Merkle Patricia trie 中,它本质上是一个修改后的 Merkle 树,用于存储键值对。该trie的根哈希总结了整个状态。在每个新区块之后,状态会根据该区块中的交易进行更新。新的状态根哈希包含在块头中。
随着时间的推移,添加了越来越多的账户、合约和交易,以太坊状态变得越来越大。如今,状态大小已超过1TB,并且每年以数十 GB 的速度增长。这种不断增长的状态是去中心化问题的根源。
为什么状态增长会带来问题?
以太坊状态规模的增加导致了几个关键问题:
新节点的同步时间更长:新节点通过处理所有历史状态来进行更改需要花费极长的时间来同步。这使得运行新的完整节点变得更加困难,从而阻碍了去中心化。目前,在消费类硬件上,从创世同步新节点需要几天甚至几周的时间。这是有效启动新节点并允许更多参与者加入网络面临的主要障碍。
增加的硬件要求:更大的状态需要更多的存储、内存和处理能力来存储、访问和更新。这会阻止资源较少的用户运行节点。现在,运行完全同步的以太坊节点至少需要容量为1-2TB 的 SSD。这对于许多潜在的节点运营者来说是遥不可及的。
更多带宽使用:新块的广播还必须包括更新的状态,需要更多带宽。这增加了节点运营者的成本。目前,国家主导着大多数区块广播,因此区块大小持续增长。更多带宽意味着节点运营者的成本更高。
区块验证速度较慢:读取和更新较大的状态会使区块验证速度变慢,从而限制交易吞吐量。每个交易都需要多次存储读取和写入来更新余额、随机数、合约状态等。较大的状态意味着每个区块有更多的读取/写入,从而减少每秒可以处理的交易数量。
永久存储成本:一旦数据被添加到状态中,它就必须被永久存储。这创造了无限制的状态增长。目前还没有主动删除旧的和未使用的状态数据的机制。因此,只要以太坊继续运行,状态保留成本就会无限增加。
无状态客户端详解
无状态客户端提供了一种验证新区块的方法,而无需访问完整的以太坊状态。他们利用称为“见证人”的加密证明来证明区块中状态更改的有效性,而无需底层状态数据。
以下是无状态客户端的高级工作方式:
客户端仅存储块头和状态根,而不存储完整的状态数据。块头包含元数据,例如处理该块后状态树的根哈希。
当验证一个新区块时,客户端会收到一个“见证人”以及该区块。该见证人是一组 Merkle 证明,证明交易的特定状态更新是有效的。
见证人包含处理交易所需的特定状态值的 Merkle 证明。例如,帐户余额或合约存储已更新。
客户端使用见证来确保交易相对于最后已知的状态根是有效的。这些证据证明状态更改与之前的根匹配。
如果有效,客户端会更新到区块头中提供的新状态根。这个新的状态根将用于验证下一个区块。
通过使用见证人来验证状态而不是在本地存储完整状态,无状态客户端获得了几个优势:
非常快的同步时间:无需重播历史状态更改。无状态客户端几乎可以立即与区块头同步。
存储要求低:状态根只有32字节。只需要区块头,而不是数百 GB 的状态。
带宽更少:仅传输区块头和见证人,而不传输完整状态。带宽使用量被最小化。
快速验证:见证人仅包含较小的相关状态子集。仅证明所涉及的更新帐户/存储。
轻松的轻客户端支持:轻客户端可以轻松验证证明。轻客户端模型与无状态验证非常兼容。
无状态客户端面临的挑战
虽然无状态客户端具有一些主要优势,但也面临者需要克服的重大的技术挑战:
见证人大小:见证人可能太大而无法有效进行传输。如果使用完整的 Merkle 证明,它们可能会超出区块大小限制。
见证人创建:生成最佳见证人对于区块提议者来说很复杂。提议者必须组装正确的证明片段来验证每笔交易。
没有见证人奖励:提供见证人不会获得直接奖励。与挖矿不同,见证人创建没有内置的激励结构。
临时数据:见证人证明某一时间点的状态,需要重新生成。随着状态的进展,证人不能被重复使用。
状态存储:仍然需要有人维护完整的状态来产生见证人。无状态验证依赖于有状态见证生成。
复杂的应用程序:一些合约可能依赖于大型状态子集、膨胀的见证人。例如,每笔交易更新许多存储插槽的合约。
可能的解决方案
研究人员提出了各种解决方案来应对这些挑战:
Verkle 树:用于减少见证大小的特殊数据结构。Verkle 树使用简洁的加密承诺来最小化证明大小。
见证缓存:提议者可维护最近的见证以供重用。缓存可能相关的见证人会再次摊销创建成本。
协议激励:提供有用见证人的奖励机制。新的激励结构可以补偿见证人的创建。
中间状态根:长时间跟踪根以避免重新生成证明。维护部分根可以重用见证片段。
状态租金:需要付款以长期维持状态,修剪未使用的状态。租金迫使陈旧的存储得到清理以限制证明大小。
分区见证模型:提议者和验证者之间的分离状态处理。让一些专用的提议者节点生成见证人。
需要权衡选择这些方法,进一步研究它们以发现最佳实施方案。值得庆幸的是,零知识密码学的快速创新可为高效的无状态客户端开辟新的可能性。
潜在影响
如果能够克服技术障碍,无状态客户端可以显著推进以太坊:
实施更快的同步和验证,以支持更高的事务吞吐量。无状态验证将大大加快块处理速度。
减少运行节点的资源需求,提高去中心化程度。笔记本电脑和爱好者实际上可以运行完整节点。
更好地支持移动钱包等轻客户端。状态证明与轻客户端模型高度兼容。
更顺利地引入分片,并在分片之间进行无状态验证。跨分片交易可利用有效的状态证明。
能够删除和修剪不再有用的旧状态数据。可积极管理状态增长,而不是使其无限制。
节点运营者可更灵活地根据需要自定义状态。节点可根据用例定制状态保留策略。
过渡到计算和带宽比存储更重要的模型。将架构转向更加云友好的模型。
还有一些潜在的风险,例如容易受到 DDoS 攻击的可能性增加以及区块链历史记录仅由少数节点运营者可靠地存储。然而,加密证明可以降低这些风险。总体而言,无状态客户端是克服以太坊当前限制的最有希望的方法之一。
结语
随着采用率的增加,以太坊不断增长的状态规模给去中心化带来了挑战。无状态客户端提供了一种出路,使节点能够在没有完整区块链状态的情况下验证交易。这最终可能允许手机运行以太坊节点,从而大大提高去中心化程度。
声明:本网站所有相关资料如有侵权请联系站长删除,资料仅供用户学习及研究之用,不构成任何投资建议!