V神 : 混合式二层(Layer 2)协议的曙光

注:原文作者是以太坊创始人VitalikButerin,以下是译文内容。

特别感谢PlasmaGroup团队提供的审阅及反馈工作。

目前2层扩容方法正从理论阶段走向实践阶段,但同时,这些扩容技术所存在的内在挑战也越来越容易被看到,也因此它们距离成为成熟的以太坊扩容技术还有一段距离。以太坊在很大程度上可以说是成功的,因为它的开发体验是非常简单的:你编写一个程序,发布该程序,任何人都可以与之交互。另一方面,设计一个状态通道或Plasma应用,依赖于很多关于激励和特定于应用的开发复杂性的明确推理。对于特定的用例,例如相同的两方之间的重复付款和二人博弈游戏,状态通道是适合的,但对于更广泛的应用而言,这被证明是具有挑战性的。而Plasma,在支付方面可以很好地发挥作用,但面对更多的应用也同样会面临挑战:即使实施一个去中心化交易所,也需要客户端存储更多的历史数据,在Plasma上应用以太坊式智能合约似乎也非常困难。

但与此同时,一个被遗忘的“半layer-2”协议类别又重新出现了——这个类别在扩展性方面的收益较小,但其具有更容易泛化和更有利安全模型的好处。在一篇被大家遗忘已久的博客文章中,我介绍了“影子链”的概念,即区块数据发布在链上,但默认情况下区块不会被验证的一种架构。相反,区块是被暂时接受的,只有在一段时间后才能最终确定。在这两周内,一个暂时接受的区块可能会受到挑战;只有这样才能验证该区块,如果该区块被证明是无效的,那么该区块所在链将被恢复,并且原始发布者的存款将受到惩罚。合约不会跟踪系统的完整状态,它只跟踪状态根,用户自己可通过从头至尾处理提交给链的数据来计算状态。而最近出现的一个ZKRollup提议,通过使用ZK-SNARKs验证区块的有效性,在没有挑战期的情况下做同样的事情。

在链上发布ZKRollup包的剖析图:影响ZKRollup系统状态的数百笔“内部交易”被压缩成一个包,每笔内部交易包含约10个字节,用于指定状态转换,再加上一个约100-300字节的SNARK。

在这两种情况下,主链用于验证数据可用性,但不验证区块有效性或执行任何重要的计算,除非有挑战被提出。因此,这种技术并不具有惊人的可扩展性收益,因为链上数据开销最终会成为瓶颈,尽管如此,它依然是一个非常重要的技术。数据比计算便宜,有很多方法可以非常显著地压缩交易数据,特别是因为交易中的大部分数据是签名数据,很多签名可通过多种形式的聚合压缩为单个签名。zkrollup通过将每笔交易压缩到仅10个字节,其可承诺每秒500笔交易,这比以太坊链本身的吞吐量高出30倍。签名不需要包括在内,因为有效性由零知识验证。而使用BLS聚合签名,可以在影子链中实现类似的吞吐量。而即将到来的以太坊伊斯坦布尔硬分叉,将把数据的gas成本从每字节68单位降低到每字节16单位,从而将这些技术的吞吐量再提高4倍。

————————————————————————————————————————————————

那么,数据链上技术与数据链下技术相比有什么好处呢?首先,前者不需要半可信的运营者。在ZKRollup中,由于有效性是由加密证明验证的,所以package提交者没法实现恶意破坏。在optimisticrollup中,恶意提交者可以发布坏区块,但下一个提交者将在发布自己的区块之前立即挑战该区块。在ZKrollup和optimisticrollup中,在链上发布足够的数据,允许任何人计算完整的内部状态,只需按顺序处理所有提交的delta,并且没有可夺走此属性的“数据预扣攻击”。因此,成为一个运营者可能是完全没有权限的,所需要的只是一个用于反垃圾交易目的的保证金。

第二,optimisticrollup特别容易概括;optimisticrollup系统中的状态转换函数实际上可以是任何可在单个区块的gas限制内计算的函数。尽管在实践中,使ZKSNARKs超过通用计算是非常困难的(至少目前而言是这样),ZKRollup在理论上也是可用同样的方式进行概括的。第三,optimisticrollup更容易构建客户端,因为其对第二层网络基础设施的需求更少,只需扫描区块链就可以完成更多的工作。

但这些优势来自于哪里呢?答案在于一个被称为数据可用性问题的高级技术性问题。基本上,在第二层系统中有两种方法。第一种是将无效数据发布至区块链,第二种方法是根本不发布数据。已发布但无效的数据很容易处理,因为一旦数据在链上发布,就有多种方法可以明确地确定其是否有效,而无效的提交则是明确无效的,因此提交者可能会受到严重惩罚。另一方面,不可用的数据会更难处理,因为即使在受到质疑时可检测到不可用性,也无法可靠地确定未发布的数据是谁的错误,尤其是在数据被默认保留的情况下,仅当某些验证机制试图验证其可用性时才按需显示。这一点在“渔夫困境”中得到了说明,它显示了一个挑战响应游戏如何无法区分恶意提交者和恶意挑战者:

渔夫困境,如果你只在时间T3开始查看给定的特定数据,那么你不知道自己是处在Case1还是Case2中,因此谁是错误的呢?

Plasma和状态通道,通过将问题推给用户,都是围绕解决“渔夫困境”问题:如果你作为用户,你决定你正在与之交互的另一个用户不向你发布他们应发布的数据,那么你有责任退出,并转移到另一个交易对手/运营者。事实上,作为一个用户,你拥有所有以前的数据,以及关于你签署的所有交易的数据,这允许你向链证明你在layer-2协议中拥有哪些资产,从而安全地将它们带出系统。你证明了一个给了你资产的操作的存在,没有其他人能证明你批准的将资产发送给他人的操作的存在,所以你得到了资产。

这种技术很优雅,然而,它依赖于一个关键的假设:每个状态对象都有一个逻辑上的“所有者”,并且没有所有者的同意就无法更改对象的状态。这对于基于UTXO的支付而言是好的,它甚至可用于去中心化交易所,但这种“所有权”属性还远远不够。一些应用程序并不具有自然所有者,即使在那些拥有所有者的应用程序中,也常常有多个人可合法地对对象进行编辑。而且,如果不引入拒绝服务攻击的可能性,就无法允许任意第三方退出资产,准确地说这是因为无法证明发布者或提交者是否有过错。

另外,Plasma和状态通道也存在各自特有的问题。状态通道不允许已不是通道一部分的用户进行链外交易。Plasma要求用户存储大量的历史数据,当不同的资产可相互缠结时,这些数据会变得更大买单机制的去中心化交易所中发生的那样)。

由于数据链上计算链下第2层技术没有数据可用性问题,所以它们没有这些弱点。ZKrollup和optimisticrollup非常小心地在链上放置足够的数据,以允许用户计算第2层系统的完整状态,确保如果任何参与者消失,新的参与者都可轻松取代他们。它们唯一存在的问题,是在不进行链上计算的情况下验证计算,这是一个更容易解决的问题。而且,扩展性获得了显著的提高:在ZKRollup中,每笔交易大约有10个字节,通过使用BLS聚合签名,可以在optimisticrollup中实现类似级别的可扩展性。这相当于目前理论上每秒最多可支持500笔交易,而在伊斯坦布尔硬分叉后,就可实现超过2000TPS。

————————————————————————————————————————————————————

但如果你想要实现更多的可扩展性呢?然后,在数据链上layer2和数据链下layer2协议之间有一个很大的中间地带,有很多混合方法可以为你提供这两者的一些好处。举个简单的例子,可通过发布一个映射来防止在PlasmaCash上实现的去中心化交易所的历史存储爆炸问题,该映射表示哪些订单与链上的哪些订单匹配:

左边:如果PlasmaCash用户拥有1个币,他们需要存储的历史数据。中间:如果PlasmaCash用户拥有1个使用原子交换与另一个币进行交换的币,他们需要存储的历史数据。右边:如果订单匹配在链上发布,PlasmaCash用户需要存储的历史数据。

即使在去中心化交易所的环境之外,用户需在Plasma中存储的历史数据量,也可以通过让Plasma链定期在链上发布每个用户的一些数据来减少。我们还可以想象一个平台在某些状态没有逻辑“所有者”的情况下像Plasma一样工作。Plasma开发人员已开始着手这些优化工作。

因此,对于layer2可扩展性解决方案的开发人员来说,这种混合方案极大地提高了开发的易用性、通用性和安全性,并减少了每个用户的负载。这样做的效率损失也被夸大了:即使在完全脱链的layer-2结构中,用户在不同的交易对手和供应者的存款、取款和移动将是不可避免的,并且会经常发生,因此,不管怎样,都会有大量的每用户链上数据。混合路由为在半layer-2体系结构中快速部署完全通用的以太坊式智能合约打开了大门。

另请参见:

IntroducingtheOVM

BlogpostbyKarlFloersch

RelatedideasbyJohnAdler

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-3:845ms