无状态区块链的概念
在目前的以太坊中,验证者需要存储整个网络的状态信息,例如交易事务、智能合约代码等,这种状态存储机制虽然具有安全性,但在处理大量交易和合约执行时效率低下导致网络拥堵,并且存储大规模区块链状态需要昂贵的硬件和大量的存储空间,对验证者来说门槛变高成本增加。此外,有很多早期创建的项目或者 rug 的项目早已没有了合约交互和状态进展,但验证者仍然需要存储没必要的相关信息。
Vitalik 在最近刚结束的韩国区块链周 KBW2023 上提到,如今以太坊客户端不得不去储存越来越多的数据,解决方案中如果有无状态和 PBS,那么状态过期(state expiry)就是低优先级的。
早在 2017 年 Vitalik 就提出了无状态(Stateless)客户端的概念。无状态区块链(Stateless blockchains)的理念是,无论交易吞吐量如何,验证者只需存储一个恒定大小的状态,从而减轻存储负担。这样做的好处是,验证者的存储需求将不再随着网络规模的增大而线性增加。
无状态本身有两种类型:弱无状态和强无状态。弱无状态性通过将状态存储的责任交给少数节点来使大多数节点变得无状态。强大的无状态性完全消除了任何节点存储完整状态数据的需要。
1、弱无状态(Weak Statelessness)
弱无状态指的是状态数据由区块提议者进行存储,而其他节点则通过使用称为见证(witnesses)的小型数据集来验证区块。区块提议者需要访问完整的状态数据,以创建见证,这些见证是验证该区块内交易所更改的状态值所需的最小数据集。其他验证者不需要存储完整的状态数据,他们只存储状态根(state root),这是整个状态的哈希值。他们接收区块和见证来更新自己的状态根。即区块生产者节点是状态客户端,区块验证者是无状态客户端。弱无状态依赖于 PBS 和 Verkle Trees 的实现。
2、强无状态(Strong Statelessness)
强无状态是将状态数据的责任完全转移到用户,进一步降低网络中节点的存储和处理压力。用户将交易将与见证一起发送给区块提议者,然后区块提议者负责仅存储生成见证所需的状态数据,并对这些见证进行聚合,以生成区块。这种方式下需要用户不断更新见证以保持交易的有效性。
无状态区块链的不可能性分析
目前无论哪种类型的无状态区块链,用户在发起交易时都会附带一个状态证明,用于验证交易的有效性。这个证明可以是 Merkle 树的一部分,或者其他加密学方法的应用,用于证明用户的账户及其余额。验证者使用这个证明来验证交易,而不需要存储整个网络的状态信息。
由于其他参与者进行交易(于此用户相关的交易)而导致用户的状态(例如账户余额)发生变化,这些状态变化会影响到用户的证明,使其变得不再有效。为了保证用户提交的交易在网络中得到验证防止双重支付,他们必须持续地更新他们的见证,以反映最新的状态变化。为了确保交易的合法性和状态的正确性,验证者需要根据最新的状态信息来验证交易。如果一个用户的证明不再与最新状态相符,那么他们的交易将无法通过验证。
频繁的更新见证对用户来说是不可能实现的,需要依赖第三方或特定的结构又与去中心化概念相冲突。因此,为了解决这个问题,研究者开始探索是否可以构建一种无状态区块链,而不需要频繁更新见证。
然而 a16z 的研究员否定了这个想法。a16z 研究表明必须更新见证的用户数与所有用户进行的交易总数大致呈线性增长。也就是说最终即使某些用户不进行交易,他们的仍然需要频繁更新见证,以保持证明的有效性和一致性。这是区块链网络的状态是整体动态变化的结果,没有办法构建一个用户永远不需要频繁更新证明一个无状态区块链。并通过与 Claude Shannon 的信息论原则相悖来说明,当前的设计框架下,无状态区块链是不可能实现的。
状态并没有消失,而是从验证者手中转移出来,并以频繁见证更新的形式推送给用户。无状态区块链和 L2 都是尝试通过不同的方法解决区块链的扩展性问题。无状态区块链关注的是减少节点存储的状态数据量,以便更多的节点可以参与网络维护,而 L2 解决方案关注的是如何在二层网络中处理交易和状态,以提高整体的扩展性和吞吐量。但无论是在无状态区块链还是 L2 网络中,都存在状态和见证的更新问题,只不过 L2 频繁更新见证交给了数据可用性委员会。
虽然当下的无状态区块链构想都需要用户频繁更新证明,从这一点来说,无状态区块链是不可能的,那么是否可以像 L2 一样将频繁更新见证交给其他参与者?从Vitalik 在韩国区块链周的演讲来看,他更希望能实现无状态而非状态过期,是否有其他突破点,我们拭目以待。