目前的二层扩容的方法--基本是Plasma和状态通道。正从理论走向实践,但与此同时,将这些技术视为以太坊成熟的扩容解决方案时所面临的内在挑战也显而易见了。可以说以太坊之所以成功,很大程度上是因为它具有友好的开发体验:开发者编写一个程序,发布该程序之后,任何人都可以与它进行交互。另一方面还依赖了状态通道的设计或Plasma应用程序依赖于许多关于激励和特定于应用程序的开发。状态通道在特定的用例中表现得非常好,比如同一个双方之间的重复付款和两个玩家之间的游戏(在celer中成功实现)之间的交互,但是要有更广泛的使用还是具有一定的挑战性。特别是Plasma Cash可以很好地进行交易支付,但是要普遍化使用也带来了不少的挑战:即使实施去中心化交易所也需要客户存储更多的历史数据,并且在Plasma上推广以太坊式智能合约似乎非常困难。
但与此同时,一个被遗忘的“半二层(semi-layer-2)”协议类别又重新出现了,该协议在扩展方面对用户来说不会有太大的收益,但是该协议更容易普及和更加安全模型。2014年,一篇被遗忘已久的博客文章提出了“影子链(shadow chains)”的概念,即区块数据在链上发布,但区块在默认情况下不会被验证的架构。相反区块是暂时接受的,只有在一段时间(如2周)后才能最终确定。在这两周内,一个暂时接受的区块可以被质疑;只有这样该区块才被验证,如果该区块被证明是无效的,那么该区块之后的链将被回滚,区块发布者的抵押将受到惩罚。智能合约并不需要跟踪系统的整个状态,它只跟踪根状态,用户自己可以通过处理自始至终提交给链的数据来计算状态。最近的提案ZK Rollup通过使用ZK-SNARK来验证区块的有效性,从而在没有挑战期的情况下完成了相同的工作。
在链上发布的zk rollup包的解析。数百个影响zk rollup系统状态(即帐户余额)的“内部事务”被压缩到一个包中,该包中包含每个指定状态转换的内部事务约10个字节,外加一个约100-300字节的snark,证明转换都是有效的。
在这两种情况下,主链用于验证数据可用性,但不(直接)验证区块有效性或执行任何重要计算,除非提出质疑。因此该技术并没有带来巨大可扩展性的增益,因为链上数据开销最终会带来瓶颈,但它却是非常重要的。数据比计算便宜,而且有很多方法可以非常显著地压缩事务数据,特别是因为事务中的大多数数据是签名,并且许多签名可以通过多种形式的聚合压缩为一个签名。ZK Rollup承诺将每笔交易压缩到仅约10个字节,从而实现500tx / 秒的速度,比以太坊本身增加30倍。签名不需要包括在内,因为它们的有效性由零知识证明来验证。使用BLS聚合签名可以在影子链中实现类似的吞吐量。即将推出的伊斯坦布尔硬分叉将把数据的gas成本从每字节68降低到每字节16,将这些技术的吞吐量再提高4倍(即每秒超过2000个事务)。
那么,zk/optimistic rollup(乐观汇总)之类的数据链上技术与plasma之类的数据链外技术相比有什么好处呢?首先不需要半信任的操作者。在zk rollup中,由于有效性是通过加密证明来验证的,因此包提交程序实际上不可能是恶意的(根据设置,恶意提交程序可能会导致系统暂停几秒钟,但这是可能造成的最大危害)。在(optimistic rollup)乐观汇总中,恶意提交者可以发布恶意区块,但下一个提交者将在发布自己的区块之前立即对该区块提出质疑。在zk和(optimistic rollup)乐观汇总中,链上发布的数据足够让任何人来计算完整的内部状态,只需按顺序处理所有提交的增量,并且没有“数据预扣攻击”可以夺走此属性。因此成为一名操作者是完全没有权限的,所需要的只要一笔用于反垃圾邮件目的的保证金(如10 ETH)。
其次,乐观汇总(optimistic rollup)特别容易推广;乐观汇总(optimistic rollup)系统中的状态转移函数可以是在单个区块的gas限内计算得到的任何数据(包括提供验证该转移所需的部分状态的merkle分支)。zk rollup在理论上是可以用同样的方式进行推广的,但在实践中,要使ZK-SNARKs超越普通计算(例如EVM执行)非常困难。第三,乐观汇总(optimistic rollup)更容易为其构建客户端,因为对第二层网络基础设施的需求较少;只需扫描区块链就可以完成更多工作。
但这些优势从何而来?答案在于一个技术性很强的问题,即数据可用性问题。基本上有两种方法可以尝试在第二层系统中作弊。第一是向区块链发布无效数据。第二种方法是完全不发布数据(例如在Plasma中将新Plasma区块的根哈希发布到主链,但不向任何人透露该区块的内容)。已发布但无效的数据很容易处理,因为一旦数据在链上发布,就有多种方法可以明确地判断它是否有效,而无效的提交则明确地无效,因此提交者可能会受到重罚。另一方面,不可用的数据更难处理,因为即使在受到质疑时可以检测到不可用性,但也无法可靠地确定是谁的发布的错误数据,尤其是如果默认情况下保留数据,并且只有在某些验证机制试图验证其可用性时才按需显示数据。这在“渔夫困境”中得到了说明,它显示了挑战响应游戏如何无法区分恶意提交者和恶意挑战者:
渔夫的困境。如果您仅在时间T3开始查看特定的数据,你就会在案例1或案例2中混淆,因此也不知道谁是恶意用户。
Plasma和通道都通过将问题推给用户来解决渔民的困境:如果您作为用户决定与您交互的另一个用户(通道中的交易对手、Plasma链中的操作员)没有向您发布他们应该发布的数据,则您有责任选择退出并移至其他交易对手/操作员。作为用户您拥有以前的所有数据以及您签署的所有交易有关的数据,这一事实使您可以向链中证明您在第2层协议中拥有哪些资产,从而安全地将其从交易中退出系统。你证明了一个(先前同意的)操作的存在,将资产交付给你,没有其他人能够证明你已把资产发送给别人的操作,所以你可以撤回属于你的资产。
该技术非常优雅。然而它依赖于一个关键的假设:每个状态对象都有一个逻辑“所有者”,未经所有者同意,对象的状态不能更改。这对于基于utxo的支付(但不是基于账户的支付,你可以在未经他人同意的情况下向上修改他人的余额;),甚至可以让它为分布式交易所工作,但这种“所有权”属性远非普遍性。有些应用程序(如Uniswap)没有自然所有者,甚至在那些有所有者的应用程序中,通常有多个用户可以合法地对对象进行编辑。没有办法允许任意第三方退出资产而不引入拒绝服务(DoS)攻击的可能性,恰恰是因为无法证明发行人或提交人是否有过错。
Plasma和通道还存在其他特殊问题。通道不允许非该通道的用户进行脱链交易(参数:假设存在一种在通道内部可以向任意新用户发送1美元的方式,那么该技术可以与向系统中资金不足的用户发送1美金,已经违反了其安全保证)Plasma要求用户存储大量的历史数据,当不同的资产可以交织在一起时,历史数据就会变得更大。
因为链上计算链下二层技术不存在数据可用性问题,所以它们没有这些弱点。zk和optimistic rollup非常小心地将足够多的数据放在链上,以允许用户计算第二层系统的完整状态,确保如果任何参与者消失,一个新的参与者可以轻松地代替他们。他们唯一的问题是验证计算而不在链上进行计算,这是一个容易得多的问题。ZK rollup中每个事务约10个字节,通过使用BLS聚合来聚集签名,在乐观汇总(optimistic rollup)中可以实现类似级别的可扩展性。从理论上讲,伊斯坦布尔之后的2000多个交易每秒最多可以进行约500笔交易。
但是如果您想要更大的可扩展性怎么办?然后链上数据第二层协议和链外数据第而层协议之间有很大的中间地带,许多混合方法为您提供了这两种协议的一些好处。举个简单的例子你可以通过发布链上哪些订单与哪些订单相匹配(每个订单少于4个字节)的映射来防止在Plasma Cash上实现的去中心化交易所中的历史存储爆炸:
左:如果Plasma cash用户拥有1枚代币,则需要存储历史数据。中:Plasma cash用户需要存储的历史数据,如果他们拥有1枚代币,该代币已通过原子交换与另一枚代币交换。右:如果订单匹配在链上发布,Plasma cash用户需要存储的历史数据。
即使在去中心化交易所环境之外,也可以通过使Plasma链定期在链上发布某些按用户数据来减少用户需要在Plasma中存储的历史记录量。还可以想象一个平台,在某些状态确实具有逻辑“所有者”的情况下,其工作方式与Plasma类似,而在没有状态的情况下,其工作方式与ZK或乐观汇总(optimistic rollup)类似。Plasma开发人员已经开始着手进行此类优化。
因此第二层可扩展性解决方案的开发人员有一个很好的理由,至少在某些时候更愿意在链上发布每个用户的数据:它大大提高了开发的易用性、通用性和安全性,并减少了每个用户的负载(例如不需要用户存储历史数据)。这样做的效率损失也被夸大了:即使在完全的外链二层架构中,用户可以在不同的用户之间的存放、撤回和转移将是不可避免的且频繁发生的,因此无论在哪种情况下都会有大量的每个用户的链数据。混合路由为在准二层架构中相对快速地部署完全通用的以太坊式智能合约打开了大门。