特别感谢Georgios Konstantopoulos、Karl Floersch和Starkware团队的反馈和审查。
在二层扩展讨论中经常出现的一个话题是“layer 3”的概念。如果我们可以建立一个第二层协议,锚定到第一层的安全,并在上面增加可扩展性,那么我们肯定可以通过建立一个第三层协议,锚定到第二层的安全,并在上面增加更多的可扩展性来实现更大的扩展?
这个想法的一个简单版本是:如果你有一个能给你带来二次扩展的方案,你能不能把这个方案堆在自己的上面,得到指数级的扩展?像这样的想法包括我2015年的可扩展性论文,Plasma论文中的多层扩展想法,以及更多的想法。不幸的是,这种简单的第3层概念很少有那么容易实现的。设计中总有一些东西是不可堆叠的,只能给你带来一次可扩展性的提升——对数据可用性的限制,依赖L1带宽进行紧急提款,或许多其他问题。
围绕第三层的新想法,如Starkware提出的框架,更加复杂:他们不只是把同样的东西堆叠在自己的上面,他们给第二层和第三层分配了不同的目的。这种方法的某种形式很可能是一个好主意(如果它以正确的方式进行)。这篇文章将讨论三层架构中可能和不可能有意义的事情的一些细节。
为什么你不能只是通过在rollups上堆叠rollups来不断扩展?
Rollups是一种扩展技术,它结合了不同的技术来解决运行区块链的两个主要扩展瓶颈:计算和数据。计算是通过欺诈证明或SNARKs来解决的,它依赖于极少数的行为者来处理和验证每个区块,要求其他人只进行极少量的计算来检查证明过程是否正确。这些方案,特别是SNARKs,几乎可以无限制地扩展;你真的可以不断地制造“许多SNARKs的SNARK”,将更多的计算扩展到一个证明。
数据是不同的。Rollups使用一系列压缩技巧来减少交易需要在链上存储的数据量:一个简单的货币转移从~100字节减少到~16字节,一个兼容EVM的链上的ERC20转移从~180到~23字节,一个保护隐私的ZK-SNARK交易可以从~600字节压缩到~80字节。在所有情况下,大约8倍的压缩。但是,rollups仍然需要在链上提供数据,并保证用户能够访问和验证,以便用户能够独立地计算rollup的状态,并在现有的证明者脱机时作为证明者加入。数据可以被压缩一次,但不能被再次压缩(如果可以),那么一般都有办法把第二个压缩器的逻辑放到第一个压缩器中,并通过压缩一次获得同样的好处。因此,“在rollups之上的rollups ”实际上并不能在可扩展性方面提供巨大的收益--尽管正如我们将在下面看到的,这种模式可以达到其他目的。
那么,什么是第3层的“理智”版本?
好吧,让我们看看 Starkware 在他们关于 layer 3s 的帖子中所提倡的。 Starkware 由非常聪明的密码学家组成,他们实际上是理智的,所以如果他们提倡第 3 层,他们的版本将比“如果 rollups 压缩数据 8 倍,那么显然 rollups 之上的 rollups 将压缩数据 64 倍”要复杂得多。 .
下面是Starkware的帖子中的一个图:
几句引言:
图1中描述了这样一个生态系统的例子。其L3包括:
-具有Validium数据可用性的StarkNet,例如,供对价格极其敏感的应用程序普遍使用。
-为提高应用性能而定制的特定应用StarkNet系统,例如,通过采用指定的存储结构或数据可用性压缩。
-StarkEx系统(如那些为dYdX、Sorare、Immutable和DeversiFi服务的系统)具有Validium或Rollup数据可用性,立即为StarkNet带来经过战斗考验的可扩展性优势。
-隐私StarkNet实例(在这个例子中也作为L4),允许保护隐私的交易,而不包括在公共StarkNets中。
我们可以把这篇文章压缩成对 "L3 "的三种看法:
L2是用于扩展,L3是用于定制功能,例如隐私。在这个愿景中,没有试图提供 “可扩展性的平方”;相反,有一层堆栈帮助应用程序扩展,然后为不同用例的定制功能需求提供单独的层。
L2是用于通用的扩展,L3是用于定制的扩展。定制的扩展可能有不同的形式:使用EVM以外的东西进行计算的专门应用,其数据压缩围绕特定应用的数据格式进行优化的rollups(包括将“数据”与“证明”分开,并完全用每个区块的单一SNARK代替证明),等等。
L2用于无信任的扩展(rollups),L3用于弱信任的扩展(validiums)。验证体是使用SNARKs来验证计算的系统,但将数据可用性留给可信的第三方或委员会。在我看来,Validiums被高度低估了:特别是,许多“企业区块链”应用实际上很可能由一个运行validium验证器并定期向链上提交哈希值的集中式服务器提供最佳服务。Validiums的安全等级比rollups低,但可以大大降低成本。
在我看来,这三种设想从根本上说都是合理的。专门的数据压缩需要自己的平台的想法可能是最弱的主张——设计一个带有通用基础层压缩方案的第二层很容易,用户可以通过特定应用的子压缩器自动扩展,但除此之外,这些用例都是合理的。但这仍然留下了一个大问题:三层结构是实现这些目标的正确方式吗?验证码、隐私系统和定制环境,锚定在第二层而不是仅仅锚定在第一层的意义何在?这个问题的答案原来是相当复杂的。
在第二层的子树内,存款和取款是否变得更便宜、更容易?
与两层模型相比,三层模型的一个可能的论点是:三层模型允许整个子生态系统存在于一个单一的rollup中,这使得该生态系统内的跨域操作可以非常便宜地发生,而不需要通过昂贵的第一层。
但事实证明,你甚至可以在两个承诺于同一个第1层的第2层(甚至第3层)之间廉价地进行存款和取款!这就是所谓的“代币”。关键的认识是,代币和其他资产不一定要在根链上发行。也就是说,你可以在Arbitrum上有一个ERC20代币,在Optimism上创建一个它的包装,并在两者之间来回移动,而不需要任何L1交易!
让我们来看看这样一个系统是如何运作的。有两个智能合约:Arbitrum上的基础合约和Optimism上的封装代币合约。要从Arbitrum转移到Optimism,你将把你的代币发送到基础合约,这将产生一个收据。一旦Arbitrum最终完成,你可以将该收据的Merkle证明,根植于L1状态,并将其发送到Optimism上的包装代币合约,该合约将验证它并向你发出一个包装代币。要把代币移回来,你可以以相反的方式做同样的事情。
即使证明Arbitrum上的存款所需的Merkle路径穿过L1状态,Optimism只需要读取L1状态的根来处理存款(不需要L1事务)。请注意,由于rollups上的数据是最稀缺的资源,这种方案的实际实施将使用SNARK或KZG证明,而不是直接使用Merkle证明,以节省空间。
与根植于L1的代币相比,这样的方案有一个关键的弱点,至少在optimistic rollups中:存款也需要等待欺诈证明窗口。如果一个代币扎根在L1,从Arbitrum或Optimism撤回到L1需要一个星期的延迟,但存款是即时的。然而,在这个方案中,存款和提款都需要一个星期的延迟。也就是说,并不清楚optimistic rollups上的三层架构是否更好:要确保发生在本身运行在防欺诈游戏上的系统内的防欺诈游戏是安全的,有很多技术上的复杂性。
幸运的是,这些问题在ZK rollups上都不会成为问题。由于安全原因,ZK rollups不需要一个星期的等待窗口,但由于其他两个原因,它们仍然需要一个较短的窗口(在第一代技术中可能是12小时)。首先,特别是更复杂的通用ZK-EVM rollups需要更长的时间来覆盖证明一个区块的非并行计算时间。其次,还有一个经济上的考虑,即需要很少提交证明,以尽量减少与证明交易相关的固定成本。下一代ZK-EVM技术,包括专门的硬件,将解决第一个问题,而更好的架构的批量验证可以解决第二个问题。而我们接下来要讨论的正是优化和批量提交证明的问题。
Rollups和validiums有一个确认时间与固定成本的权衡。第3层可以帮助解决这个问题。但是还有什么可以呢?
每个交易的rollups成本很低:它只是16-60字节的数据,取决于应用。但是,每次提交一批交易到链上时,rollups也必须支付高昂的固定成本:optimistic的rollups每批21000个L1 gas,ZK的rollups超过40万个gas(如果你想要只使用STARK的量子安全的东西,则需要数百万个gas)。
当然,rollups可以简单地选择等待,直到有价值1000万个gas的L2交易来提交一个批次,但这将使他们有很长的批次间隔,迫使用户等待更长的时间,直到他们得到一个高安全性的确认。因此,他们有一个权衡:长的批次间隔和最佳成本,或者短的批次间隔和大大增加的成本。
为了给我们一些具体的数字,让我们考虑一个ZK rollups,它的每批成本为600,000 gas,处理完全优化的ERC20传输(23字节),每笔交易成本为368 gas。假设这个rollup处于采用的早期到中期阶段,并且平均为5个TPS。我们可以计算出每笔交易与批次间隔的gas
如果我们进入一个有许多定制的验证码和特定应用环境的世界,那么许多验证码的速度将远远低于5 TPS。因此,确认时间和成本之间的权衡开始成为一个非常大的问题。事实上,“第3层”范式确实解决了这个问题!一个ZK rollup内的ZK rollup,即使是天真地实施,其固定成本也只有~8,000个第一层gas(500字节的证明)。
问题基本上解决了。那么第3层好吗?也许吧。但值得注意的是,有一种不同的方法来解决这个问题,其灵感来自ERC 4337聚合验证。
这将是一个开放的协议:任何ZK-rollup都可以加入,任何批处理者都可以从任何兼容的ZK-rollup汇总证明,并从汇总者那里获得交易费用的补偿。批量处理合约将验证一次证明,然后将一个消息传递给每个rollup,并附上该rollup的三要素;三要素来自批量处理合约的事实将证明过渡是有效的。
如果优化得好,这个方案中每个rollup的成本可能接近8000。5000用于写入新的更新的状态,1280用于新旧root,以及额外的1720用于杂乱的数据杂耍。因此,它将给我们带来同样的节省。Starkware实际上已经有了类似的东西,叫做SHARP,尽管它(还)不是一个无权限的开放协议。
对这种方式的一个反应可能是:但这实际上不就是另一个第三层方案吗?与其说是基础层<-rollup <-validium,不如说是基础层<-批量机制<-rollup 或 validium。从一些哲学的架构角度来看,这可能是真的。但有一个重要的区别:中间层不是一个复杂的完整的EVM系统,而是一个简化的、高度专业化的对象,因此它更有可能是安全的,它更有可能在不需要另一个专门的令牌的情况下被建立起来,它更有可能被治理最小化,不随时间变化。
结论:什么是“层”?
一个三层的扩展架构,包括将相同的扩展方案堆叠在自己的上面,通常不会有好的效果。在rollups之上的rollups,即两层rollups使用相同的技术,当然不会有什么效果。然而,第二层和第三层有不同目的的三层架构,可以发挥作用。在rollups之上的Validiums确实有意义,即使它们不一定是长期的最佳方式。
然而,一旦我们开始进入什么样的架构有意义的细节,我们就会进入一个哲学问题:什么是“层”,什么不是?基础层<-批处理机制<-rollup或validium模式,与基础层<-rollup <-rollup或validium模式的工作相同。但就其工作方式而言,证明聚合层看起来更像ERC-4337,而不是像rollup。通常情况下,我们不把ERC-4337称为“第二层”。同样,我们不把龙卷风现金称为“第2层” - 因此,如果我们要保持一致,我们不会把生活在第2层之上的以隐私为重点的子系统称为第3层。因此,有一个尚未解决的语义学争论,即什么应该首先被称为“层”。
在这个问题上,有许多可能的流派。我个人倾向于将“第2层”这一术语限制在具有以下特性的事物上:
它们的目的是为了提高可扩展性
它们遵循“区块链中的区块链”模式:它们有自己的交易处理机制和自己的内部状态
它们继承了以太坊链的全部安全性
因此,optimistic rollups和ZK rollups是第2层,但validiums、证明聚合方案、ERC 4337、链上隐私系统和Solidity是其他东西。将其中一些称为第3层可能是有意义的,但可能不是所有的;无论如何,在多rollups生态系统的架构远未定型,大部分的讨论只是发生在理论上的时候,确定定义似乎为时过早。
也就是说,语言的争论不如哪些结构实际上最有意义这一技术问题重要。显然,某种“层”可以发挥重要作用,为隐私等非扩展性需求服务,而且显然有一个重要的证明聚合功能,需要以某种方式填补,最好是通过一个开放协议。但同时,有很好的技术理由使连接面向用户的环境和第1层的中间层尽可能简单;“glue layer”是一个EVM rollup,在许多情况下可能不是正确的方法。我猜想,随着第二层扩展生态系统的成熟,更复杂(和更简单)的结构,如本帖所描述的,将开始发挥更大的作用。