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