Vitalik : 混合式二层(Layer 2)协议的曙光
特别感谢Plasma Group团队提供的审阅及反馈工作。
目前2层(layer 2)扩容方法(基本上是指 Plasma 和 状态通道 )正从理论阶段走向实践阶段,但同时,这些扩容技术所存在的内在挑战也越来越容易被看到,也因此它们距离成为成熟的以太坊扩容技术还有一段距离。以太坊在很大程度上可以说是成功的,因为它的开发体验是非常简单的:你编写一个程序,发布该程序,任何人都可以与之交互。另一方面,设计一个状态通道或Plasma应用,依赖于很多关于激励和特定于应用的开发复杂性的明确推理。对于特定的用例,例如相同的两方之间的重复付款和二人博弈游戏(如在Celer中成功实现的那样),状态通道是适合的,但对于更广泛的应用而言,这被证明是具有挑战性的。而Plasma(尤其是Plasma Cash),在支付方面可以很好地发挥作用,但面对更多的应用也同样会面临挑战:即使实施一个去中心化交易所,也需要客户端存储更多的历史数据,在Plasma上应用以太坊式智能合约似乎也非常困难。
但与此同时,一个被遗忘的“ 半layer-2 ”协议类别又重新出现了——这个类别在扩展性方面的收益较小,但其具有更容易泛化和更有利安全模型的好处。在一篇被大家遗忘已久的 博客文章 中,我介绍了 “影子链”(shadow chain) 的概念,即区块数据发布在链上,但默认情况下区块不会被验证的一种架构。相反,区块是被暂时接受的,只有在一段时间(比如2周)后才能最终确定。在这两周内,一个暂时接受的区块可能会受到挑战;只有这样才能验证该区块,如果该区块被证明是无效的,那么该区块所在链将被恢复,并且原始发布者的存款将受到惩罚。合约不会跟踪系统的完整状态,它只跟踪状态根(state root),用户自己可通过从头至尾处理提交给链的数据来计算状态。而最近出现的一个 ZK Rollup提议 ,通过使用 ZK-SNARKs 验证区块的有效性,在没有挑战期的情况下做同样的事情。
在链上发布ZK Rollup包( package )的剖析图:影响ZK Rollup系统状态(即帐户余额)的数百笔“内部交易”被压缩成一个包( package ),每笔内部交易包含约10个字节,用于指定状态转换,再加上一个约100-300字节的SNARK(证明转换都是有效的)。
在这两种情况下,主链用于验证数据可用性,但不(直接)验证区块有效性或执行任何重要的计算,除非有挑战被提出。因此,这种技术并不具有惊人的可扩展性收益,因为链上数据开销最终会成为瓶颈,尽管如此,它依然是一个非常重要的技术。数据比计算便宜,有很多方法可以非常显著地压缩交易数据,特别是因为交易中的大部分数据是签名数据,很多签名可通过多种形式的聚合压缩为单个签名。zk rollup通过将每笔交易压缩到仅10个字节,其可承诺每秒 500笔交易 ,这比以太坊链本身的吞吐量高出30倍。签名不需要包括在内,因为有效性由零知识验证。而使用BLS聚合签名,可以在影子链中实现类似的吞吐量(最近称为“ optimistic rollup ”,以突出其与ZK Rollup的相似性)。而即将到来的以太坊伊 斯坦布尔硬分叉 ,将把数据的gas成本从每字节68单位降低到每字节16单位,从而将这些技术的吞吐量再提高 4 倍(即 TPS会超过2000 )。————————————————————————————————————————————————
那么,数据链上(on-chain)技术(如 zk/optimistic rollup )与数据链下技术(如 plasma )相比有什么好处呢?首先,前者不需要半可信的运营者。在ZK Rollup中,由于有效性是由加密证明验证的,所以package提交者没法实现恶意破坏(根据设置,恶意提交者可能会导致系统停止几秒钟,但这是可实现的最大危害)。在optimistic rollup中,恶意提交者可以发布坏区块,但下一个提交者将在发布自己的区块之前立即挑战该区块。在ZK rollup和optimistic rollup中,在链上发布足够的数据,允许任何人计算完整的内部状态,只需按顺序处理所有提交的delta,并且没有可夺走此属性的“数据预扣攻击”。因此,成为一个运营者可能是完全没有权限的,所需要的只是一个用于反垃圾交易目的的保证金(比如10eth)。
第二,optimistic rollup特别容易概括;optimistic rollup系统中的状态转换函数实际上可以是任何可在单个区块的gas限制内计算的函数(包括提供验证过渡期所需状态部分的Merkle分支)。尽管在实践中,使ZK SNARKs超过通用计算(例如EVM执行)是非常困难的(至少目前而言是这样),ZK Rollup在理论上也是可用同样的方式进行概括的。第三,optimistic rollup更容易构建客户端,因为其对第二层网络基础设施的需求更少,只需扫描区块链就可以完成更多的工作。
但这些优势来自于哪里呢?答案在于一个被称为数据可用性问题的高级技术性问题(请参阅 注释 、 视频 )。基本上,在第二层系统中有两种欺骗方法。第一种是将无效数据发布至区块链,第二种方法是根本不发布数据(例如,在Plasma中,将新Plasma区块的根哈希发布到主链,但不向任何人透露区块的内容)。已发布但无效的数据很容易处理,因为一旦数据在链上发布,就有多种方法可以明确地确定其是否有效,而无效的提交则是明确无效的,因此提交者可能会受到严重惩罚。另一方面,不可用的数据会更难处理,因为即使在受到质疑时可检测到不可用性,也无法可靠地确定未发布的数据是谁的错误,尤其是在数据被默认保留的情况下,仅当某些验证机制试图验证其可用性时才按需显示。这一点在 “渔夫困境”(Fisherman’s dilemma) 中得到了说明,它显示了一个挑战响应游戏如何无法区分恶意提交者和恶意挑战者:
渔夫困境,如果你只在时间T3开始查看给定的特定数据,那么你不知道自己是处在Case 1还是Case 2中,因此谁是错误的呢?
Plasma和状态通道,通过将问题推给用户,都是围绕解决“渔夫困境”问题:如果你作为用户,你决定你正在与之交互的另一个用户(状态通道的交易对手,或者Plasma链的运营者)不向你发布他们应发布的数据,那么你有责任退出,并转移到另一个交易对手/运营者。事实上,作为一个用户,你拥有所有以前的数据,以及关于你签署的所有交易的数据,这允许你向链证明你在 layer-2协议中拥有哪些资产,从而安全地将它们带出系统。你证明了一个(先前同意的)给了你资产的操作的存在,没有其他人能证明你批准的将资产发送给他人的操作的存在,所以你得到了资产。这种技术很优雅,然而,它依赖于一个关键的假设:每个状态对象都有一个逻辑上的“所有者”,并且没有所有者的同意就无法更改对象的状态。这对于基于UTXO的支付而言是好的(但不适用于基于账户的支付,因为在这种情况下,你可以在没有他人同意的情况下向上编辑他人的余额;这就是基于账户的Plasma如此困难的原因),它甚至可用于去中心化交易所,但这种“所有权”属性还远远不够。一些应用程序(例如 uniswap )并不具有自然所有者,即使在那些拥有所有者的应用程序中,也常常有多个人可合法地对对象进行编辑。而且,如果不引入拒绝服务(DoS)攻击的可能性,就无法允许任意第三方退出资产,准确地说这是因为无法证明发布者或提交者是否有过错。
另外,Plasma和状态通道也存在各自特有的问题。状态通道不允许已不是通道一部分的用户进行链外交易(理由:假设存在从通道内部向任意新用户发送1美金的方法,然后,这种技术可被多次并行使用,将1美元发送给比系统中资金更多的用户,已破坏了其安全保证)。Plasma要求用户存储大量的历史数据,当不同的资产可相互缠结时,这些数据会变得更大(例如,当一项资产以另一项资产的转移为条件进行转移时,就像在具有单段式(single-stage)买单机制的去中心化交易所中发生的那样)。
由于数据链上计算链下(data-on-chain computation-off-chain)第2层技术没有数据可用性问题,所以它们没有这些弱点。ZK rollup和optimistic rollup非常小心地在链上放置足够的数据,以允许用户计算第2层系统的完整状态,确保如果任何参与者消失,新的参与者都可轻松取代他们。它们唯一存在的问题,是在不进行链上计算的情况下验证计算,这是一个更容易解决的问题。而且,扩展性获得了显著的提高:在ZK Rollup中,每笔交易大约有10个字节,通过使用BLS聚合签名,可以在optimistic rollup中实现类似级别的可扩展性。这相当于目前理论上每秒最多可支持500笔交易,而在伊斯坦布尔硬分叉后,就可实现超过2000 TPS 。
————————————————————————————————————————————————————
但如果你想要实现更多的可扩展性呢?然后,在数据链上layer 2和数据链下layer 2 协议之间有一个很大的中间地带,有很多混合方法可以为你提供这两者的一些好处。举个简单的例子,可通过发布一个映射来防止在Plasma Cash上实现的去中心化交易所的历史存储爆炸问题,该映射表示哪些订单与链上的哪些订单(每个订单小于4字节)匹配:
左边:如果Plasma Cash用户拥有1个币,他们需要存储的历史数据。中间:如果Plasma Cash用户拥有1个使用原子交换与另一个币进行交换的币,他们需要存储的历史数据。 右边:如果订单匹配在链上发布,Plasma Cash用户需要存储的历史数据。
即使在去中心化交易所的环境之外,用户需在Plasma中存储的历史数据量,也可以通过让Plasma链定期在链上发布每个用户的一些数据来减少。我们还可以想象一个平台在某些状态没有逻辑“所有者”的情况下像Plasma一样工作(像ZK rollup或optimistic rollup那样)。Plasma开发人员已开始着手 这些优化 工作。因此,对于layer 2可扩展性解决方案的开发人员来说,这种混合方案极大地提高了开发的易用性、通用性和安全性,并减少了每个用户的负载(例如,不需要用户存储历史数据)。这样做的效率损失也被夸大了:即使在完全脱链的layer-2结构中,用户在不同的交易对手和供应者的存款、取款和移动将是不可避免的,并且会经常发生,因此,不管怎样,都会有大量的每用户链上数据。混合路由(route)为在半layer-2体系结构中快速部署完全通用的以太坊式智能合约打开了大门。
另请参见: