作者: Alec Chen
来源: Volt Capital
“模块化区块链”的想法正在成为围绕可扩展性和区块链基础设施的一种分类定义叙事。
这个理论很简单:通过分解layer 1区块链的核心组件,我们可以在单个层上进行100倍的改进,从而产生一个更可扩展、可组合和去中心化的系统。在我们详细讨论模块化区块链之前,我们必须了解现有的区块链架构以及区块链当前应用面临的限制。
来源: Ethereum Foundation
什么是区块链?
我们简要回顾一下区块链的基础知识。区块链中的区块由两个组件组成:区块头和与之关联的交易数据。区块通过“完整节点”进行验证,“完整节点”解析并计算整个区块数据,以确保交易是有效的,用户发送的币不会超过他们的账户余额。
让我们简要概述组成区块链的功能“层”。
交易和状态更改最初在这里处理。用户通常还通过这一层与区块链进行交互,包括签署交易、部署智能合约和转移资产。
解决层是验证rollup执行和解决争议的地方。这一层在整体链中不存在,是模块化堆栈的可选部分。与美国法院系统类似,可以把解决层想象成美国最高法院,为纠纷提供最终仲裁。
区块链的共识层通过全节点下载和执行区块内容的网络提供排序和最终性,并就状态转换的有效性达成共识。
验证状态转换是否有效所需的数据应该发布并存储在这一层。在恶意区块生产者保留交易数据的攻击事件中,这应该很容易验证。数据可用性层是区块链可扩展性三难困境的主要瓶颈,稍后我们将探讨其原因。
例如,以太坊是单片区块链,这意味着基础层处理上面提到的所有组件。
来源: ResearchGate
区块链目前面临一个被称为“区块链可扩展性三难困境”的问题。与分布式系统的布鲁尔定理类似,区块链体系结构通常在去中心化、安全性或可扩展性方面做出妥协,以便为其他两个方面提供强有力的保证。
安全是指网络在受到攻击时的运行能力。这一原则是区块链的核心原则,永远不应该妥协,所以真正的权衡通常是在可扩展性和去中心化之间。
让我们在区块链系统的语境中定义去中心化:为了让区块链去中心化,硬件需求不能成为参与的限制,验证网络的资源需求应该很低。
可扩展性是指区块链的吞吐量除以其验证成本:即区块链处理不断增加的交易量,同时保持较低的验证资源需求的能力。有两种主要方法可以提高吞吐量。首先,可以增加区块的大小,从而增加区块中可以包含的交易的容量。不幸的是,更大的区块大小导致网络中心化,因为运行完整节点的硬件需求增加,以响应更高的计算输出需求。特别是单片区块链,由于吞吐量的增加与验证链的成本增加相关,导致去中心化程度降低,因此会遇到这个问题。其次,你可以将执行移出链,将计算的负担从主网络上的节点转移出去,同时利用允许验证链上计算的证明。
通过模块化架构,区块链有可能通过关注点分离原则开始解决区块链可扩展性三难问题。通过模块化的执行和数据可用性层,区块链能够扩展吞吐量,同时通过打破计算和验证成本之间的相关性,维护使网络不可信和去中心化的属性。让我们通过引入错误性证明(Fault Proofs)、Optimistic Rollup以及它们与数据可用性问题的关系来探讨如何实现这一目标。
错误性证明与Optimistic Rollup
V神在《Endgame》一文中表示,中心化和去中心化之间的一个可能的妥协是,为了可扩展性的目的,区块生产的未来集中于池和专门的生产者,而重要的事,区块验证(让生产者诚实)要保持去中心化。这可以通过将区块链节点拆分为完整节点和轻客户端来实现。与此模型相关的有两个问题:区块验证(验证计算是否正确)和区块可用性(验证所有数据是否已经发布)。让我们首先探索它在区块验证中的应用。
全节点下载、计算和验证区块中的每个交易,而轻客户端只下载区块头并假定交易是有效的。然后,轻客户端依赖完整节点生成的错误性证明来进行交易验证。这反过来又允许轻客端自主地识别无效交易,使它们能够在几乎与完整节点相同的安全保证下运行。默认情况下,轻客户端假定状态转换是有效的,并且可以通过接收错误性证明来质疑状态的有效性。当一个节点的状态受到错误性证明的挑战时,通过一个完整节点重新执行相关交易来达成共识,从而削减不诚实节点的权益。
来源: https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/
轻客户端和错误性证明模型在诚实的少数假设下是安全的,即至少存在一个诚实的完整节点,并且提交错误性证明的链处于完整状态。这个模型特别适用于分片的区块链(比如合并后的以太坊架构),因为验证器可以选择在一个分片上运行完整节点,在其他分片上运行轻客户端,同时在所有分片上维护N个安全保证中的1个。
Optimistic Rollup利用这个模型安全地将区块链执行层抽象为定序器,这是一种功能强大的计算机,捆绑并执行多个交易,并定期将压缩的数据发送回父链。将这个计算移出链(相对于父链)可以使交易吞吐量增加10-100倍。我们怎么能相信这些链下定序器是善意的呢?我们引入了债券和代币,操作人员必须持有它们来运行定序器。由于定序器将交易数据发送回父链,我们可以使用验证器(检查父链及其rollup之间的状态不匹配的节点)来发布错误证明,并随后削减恶意定序器的利益。因为Optimistic Rollup利用了错误性证明,所以它在网络中存在一个可靠的验证者的假设下是安全的。这种错误性证明的使用就是Optimistic Rollup的由来——假定状态转换是有效的,直到在解决层处理的争议期间被证明有效。
这就是我们在最小化信任的同时扩容的方法:允许计算变得中心化,同时保持对计算的验证是去中心化的。
数据可用性问题
错误性证明是解决去中心化区块验证的有效工具,而完整节点则依赖于区块可用性来生成错误性证明。恶意的区块生产者可能选择只发布区块头,保留部分或全部对应数据,从而阻止完整节点验证和识别无效交易,从而生成错误性证明。对于完整节点来说,这种类型的攻击是微不足道的,因为它们可以轻松地下载整个区块,并在注意到不一致或保留数据时离开无效链。但是,轻客户端将继续跟踪潜在无效链的区块头,从完整节点分叉。(请记住,轻客户端不会下载整个区块,并假定状态转换在默认情况下是有效的。)
这是数据可用性问题的本质,因为它与错误性证明有关:轻客户端必须确保所有交易性数据在验证之前在一个区块中发布,这样,完整节点和轻客户端必须自动就规范链的同一个区块头达成一致。
解决方案
看起来我们又回到原点了。轻客户端如何确保不违背轻客户端的初衷,在不需要中心化硬件、不下载整个区块的情况下释放区块中的所有交易数据?
实现这一点的一种方法是通过一种称为纠删码的数学原语。通过复制一个区块中的字节,纠删码可以重建整个区块,即使有一定比例的数据丢失。该技术被用于执行数据可用性抽样,允许轻客户端通过随机抽样区块的一小部分来概率地确定区块的整体已发布。这允许轻客户端确保所有的交易数据都包含在一个特定的区块中,然后才接受它有效,并遵循相应的区块头。然而,对于这种技术有一些注意事项:数据可用性抽样具有很高的延迟,与诚实的少数假设相似,安全保证依赖于有足够的轻客户端执行抽样,从而能够概率地确定区块的可用性。
数据可用性抽样的简化模型
有效性证明和零知识Rollup
去中心化区块验证的另一个解决方案是,在状态转换时不需要交易数据。与此相反,有效性证明比错误性证明更悲观。通过消除争议过程,有效性证明可以保证所有状态转移的原子性,但需要对每个状态转移都进行证明。这是通过利用新的零知识技术SNARKs和STARKs完成的。与错误性证明相比,有效性证明需要更多的计算强度来换取更强的状态保证,影响可扩展性。
零知识证明是利用有效性证明而不是错误性证明进行状态验证的证明。它们遵循一个类似于Optimistic Rollup的计算和验证模型(尽管模式是有效性证明而不是错误性证明),通过定序器/验证器模型,定序器处理计算,验证器生成相应的证明。例如,Starknet在启动过程中使用了中心化定序器,并在路线图上逐步去中心化开放定序器和验证器。由于定序器上的脱链执行,零知识rollup(ZK rollup)的计算本身是不受控制的。然而,由于这些计算的证明必须在链上验证,最终性仍然是证明生成的瓶颈。
需要注意的是,使用轻客户端进行状态验证的技术只适用于错误性证明架构。由于通过有效性证明保证状态转换是有效的,因此节点验证区块不再需要交易数据。然而,有效性证明的数据可用性问题仍然存在,而且更加微妙:尽管状态得到了保证,但有效性证明的交易数据仍然是必要的,这样节点才能够更新并服务于向最终用户的状态转换。因此,利用有效性证明的rollup仍然受制于数据可用性问题。
我们发展到哪里了
回想一下V神的论点:所有的道路都通向中心化的区块生产和去中心化的区块验证。虽然我们可以通过区块生成器硬件的进步指数级地提高rollup吞吐量,但真正的可扩展性瓶颈是区块可用性,而不是区块验证。这引出了一个重要的见解:无论我们使执行层多么强大,或者我们使用什么证明模型,我们的吞吐量最终都会受到数据可用性的限制。
我们目前确保数据可用性的一种方法是在链上发布区块链数据。Rollup实现利用以太坊主网作为数据可用性层,定期在以太坊上发布所有的rollup区块。这种临时解决方案面临的主要问题是,以太坊当前的架构依赖于通过下载整个区块来保证数据可用性的完整节点,而不是轻客户端执行数据可用性抽样。当我们增加区块大小以获得额外的吞吐量时,这不可避免地会导致对完整节点验证数据可用性、中心化网络的硬件需求增加。
在未来,以太坊计划转向利用数据可用性采样的分片架构,由完整节点和轻客户端组成,从而确保网络安全。(注:以太坊分片技术上使用KZG承诺而不是错误性证明,但数据可用性问题是相关的。)然而,这只能解决部分问题:Rollup架构面临的另一个基本问题是,rollup区块作为calldata转储到以太坊主网。这就带来了后续的问题,因为大规模使用calldata成本高昂,不管rollup交易批处理大小如何,都会以每字节16 gas的成本对L2用户造成阻碍。
Validium是另一种提高可扩展性和吞吐量同时保持数据可用性保证的方法:可以将颗粒级交易数据(相对于原始数据)发送到数据可用性委员会、PoS守护者或数据可用性层。通过将数据可用性从以太坊calldata转移到链下解决方案,Validium绕过了与增加rollup使用量相关的固定字节gas成本。
Rollup架构还带来了一种独特的见解,即区块链本身不需要提供执行或计算,而只需要排序区块并保证这些区块的数据可用性的功能。这是Celestia背后的设计原则,这是第一个模块化区块链网络。Celestia以前被称为LazyLedger,一开始是一个“惰性区块链”,将执行和验证留给其他模块化层,只专注于通过数据可用性抽样为交易排序和数据可用性保证提供数据可用性层。中心化的区块生产和去中心化的区块验证器是Celestia设计的核心前提:即使是手机也能作为一个轻客户端参与,确保网络安全。由于数据可用性抽样的特性,将rollup插入到Celestia作为数据可用性层能够支持更高的区块大小(也就是吞吐量),因为Celestia轻节点的数量在增长,同时保持相同的概率保证。
现在的其他解决方案包括StarkEx、zkPorter和Polygon Avail。StarkEx是目前唯一用于生产的Validium。无论如何,大多数有效性都包含对数据可用性源的信任的隐含假设,无论这是通过可信的委员会、守护者还是通用的数据可用性层进行管理。这种信任也表明,恶意操作者可以阻止用户资金被提取。
目前的进展
Celestium架构
模块化区块链架构是当前加密领域中备受争议的话题。由于与碎片化解决方案和数据可用层相关的安全问题和额外的信任假设,Celestium提出的模块化区块链架构的设想遭到了重大挫折。
与此同时,区块链堆栈的所有方面都取得了重大进展:Fuel Labs正在执行层开发并行化虚拟机,而Optimism团队正在研究分片、激励验证和去中心化定序器。Hybrid Optimistic和零知识解决方案也在开发中。
以太坊合并后的发展路线图包括统一解决层和数据可用层的计划。具体来说,Danksharding是以太坊路线图中一个有前景的开发,旨在将以太坊L1数据碎片和区块空间转换和优化为“数据可用性引擎”,从而允许L2 rollup实现低成本、高吞吐量的交易。
Celestia的无主见架构还允许广泛的执行层实现将其用作数据可用层,为WASM、Starknet和FuelVM等替代的非EVM虚拟机奠定基础设施。这种用于各种执行解决方案的共享数据可用性允许开发人员在Celestia集群之间创建信任最小化的桥梁,解锁跨链和跨生态系统的可组合性和互操作性,就像在以太坊和它的rollup之间可能实现的那样。
由Starkware首创的Volitions为链上和链下的数据可用性困境引入了一个创新的解决方案:用户和开发人员可以选择使用Validium将交易数据发送到链下,或者保持交易数据在链上,每个都有其独特的优点和缺点。
此外,Layer 2解决方案的使用和普及开启了layer 2: 分形扩展(fractal scaling)。分形扩展允许将特定于应用程序的rollup部署在layer 2——开发人员现在可以在部署应用程序时完全控制其基础设施,从数据可用性到隐私。部署在layer 3还可以解锁所有layer 3应用程序在layer 2上的互操作性,而不是像应用程序特定的主权链(例如Cosmos)那样昂贵的基链。
与web基础设施从内部部署的服务器进化到云服务器类似,去中心化的web正在从单片区块链和竖井式共识层进化到模块化、特定于应用程序的共享共识层链。无论哪种解决方案和应用最终会流行起来,有一点是明确的:在模块化的未来,用户将是最终的赢家。