区块链V神:以太坊2.0算法Rollup的不完整指南


Rollup在以太坊社区中风靡一时,并有望在可预见的未来成为以太坊的关键可扩展性解决方案。但是,这项技术究竟是什么?您能从中得到什么期望?您将如何使用它?这篇文章将尝试回答其中一些关键问题。(banq注:实际是一种分布式事务机制的解决方案。)
 
背景:什么是第一层和第二层缩放?
扩展区块链生态系统有两种方法:
第一种方法:让区块链自身具有更高的交易能力。这种技术的主要挑战在于,实现“更大区块”的区块链本质上更难以验证,并且可能变得更加集中。为了避免此类风险,开发人员可以提高客户端软件的效率,或者更可持续地使用诸如分片的技术,以使构建和验证链的工作分散在多个节点上。目前,被称为“ eth2”正在实现以太坊的升级。
第二种方法:更改使用区块链的方式。用户不是将所有交易活动直接放在区块链上,而是通过“第2层”协议在链下执行大量交易细节。链上有一个智能合约,它只有两个任务:处理充值和提款,以及核实证明链下发生的所有事情都遵循规则。进行这种证明的方法有多种,但是它们都具有以下特性:在链上验证证明比在链上进行原始计算便宜得多。
 
State channels vs plasma vs rollups 三者比较
第2层缩放的三种主要类型是 state channelsPlasma 和rollups。它们是三种不同的范式,具有不同的优势和劣势,在这一点上,我们非常有信心所有第2层缩放都大致可以归为这三类
 
State channels状态通道
想象一下,爱丽丝正在与鲍勃通过互联网交易,鲍勃向爱丽丝支付每兆字节0.001美元。爱丽丝和鲍勃使用以下第2层缩放方案,并不是每次付款都进行链上交易。
首先,鲍勃将1美元(或一些ETH或稳定币等价物)放入智能合约中,为了向爱丽丝支付第一笔款项,鲍勃签署了一张“票证”(一条链上消息),上面写着“ $ 0.001”,然后将其发送给Alice。
当鲍勃要进行第二次付款,鲍勃将在另一张票证上写“ $ 0.002”,并将其发送给爱丽丝。依此类推,可以根据需要进行多次付款。
当爱丽丝和鲍勃完成交易后,爱丽丝可以发布价值最高的票证,用她自己的另一个签名包起来。智能合约将验证爱丽丝和鲍勃的签名,向爱丽丝支付鲍勃票上的金额,并将剩余的钱退还给鲍勃。
如果爱丽丝不愿意关通频道(由于恶意或技术故障),则鲍勃可以启动撤回期限(例如7天),当然前提如果爱丽丝在这段时间内没有提供票证。
该技术功能强大:可以对其进行调整,以处理双向支付、智能合约关系(例如,爱丽丝和鲍勃在通道内签订金融合同)和组成(如果爱丽丝和鲍勃拥有开放通道,鲍勃和查理也是如此,爱丽丝可以不信任地与查理互动)。但是通道可以做什么是受到限制的。
不能使用渠道将资金从链下发送给尚未参与的人。通道不能用于表示没有明确逻辑所有者的对象(例如Uniswap)。而且通道,特别是如果用来做比简单的定期付款更复杂的事情的通道,需要锁定大量资金。
  
plasma
为了存放资产,用户将其发送到管理plasma链的智能合约。plasma链为该资产分配一个新的唯一ID(例如537)。每个plasma链都有一个运算符(可以是一个集中的参与者,或者是一个多重签名,或者是更复杂的东西,例如PoS或DPoS)。每隔一个间隔(可能是15秒,一个小时或两者之间的任何时间),操作者都会生成一个“批batch”,其中包括他们已从链下收到的所有plassma交易。
他们生成一个Merkle树,放在树中的每个索引X处,X如果存在这样的事务,则在该事务中有一个转移资产ID的事务,否则叶子为零。
他们发布此树的Merkle根进行链接。他们还发送每个索引的Merkle分支X给该资产的当前所有者。
要提取资产,用户发布最新交易的Merkle分支,将资产发送给他们。合同开始质询期,在此期间,任何人都可以通过证明:

  1. 发送方在发送资产时不拥有资产,
  2. 或发送资产来尝试使用其他Merkle分支机构使退出无效。在以后的某个时间给其他人。如果在7天内(例如)没有人证明出口是欺诈性的,则用户可以提取资产。

plasma提供比通道更强大的属性:您可以将资产发送给从未参与系统的参与者,并且资本要求低得多。但这是有代价的:在“正常操作”期间,通道不需要任何数据就可以在链上进行传输,但是Plasma要求每条链定期发布一个哈希。此外,plasma传输不是即时的:您必须等待时间间隔结束并等待块被发布。
此外,palsma和通道共有一个共同的弱点:它们安全的博弈论依赖于这样的思想,即由两个系统控制的每个对象都具有一定的逻辑“所有者”。如果该所有者不关心其资产,则可能导致涉及该资产的“无效”结果。
这对于许多应用程序都可以,但是对于其他许多应用程序(例如Uniswap)却是一个破坏交易的因素。即使是在未经所有者同意的情况下也可以更改对象状态的系统(例如基于帐户的系统,您可以在其中增加在未经他人同意的情况下无法达到平衡)。这一切都意味着在任何实际的plasma或通道部署中都需要大量的“特定于应用程序的推理”,并且不可能制作仅模拟整个以太坊环境(或“ EVM”)的plasma或通道系统。为解决此问题,我们开始进行rollup。
 
Rollup
plasma和通道是“完整”的第2层方案,因为它们试图将数据和计算都移出链。但是,围绕数据可用性的基本博弈论问题意味着不可能为所有应用程序安全地做到这一点。plasma和通道通过依赖所有者的明确概念来解决此问题,但这会阻止它们变得完全抽象。
另一方面,Rollup是“混合”第2层方案。rollup将计算(和状态存储)移到链外,但每个交易事务在链上保留一些数据。为了提高效率,他们使用了大量的花哨压缩技巧在任何可能的地方来将数据替换为计算。
结果是系统的可扩展性仍然受到基础区块链的数据带宽的限制,但是字节大小比率非常有利:以太坊基础层ERC20令牌传输成本约为45000瓦斯,而rollup中的ERC20令牌传输占用16个字节的链上空间,成本不到300瓦斯。
这些数据是在链事实为关键。将数据放在链上并对此达成共识,任何人都可以根据需要在本地处理Rollup中的所有操作,从而允许他们检测欺诈,发起提款或亲自开始生成交易批。缺乏数据可用性问题意味着恶意或脱机操作员的工作量甚至更少危害(例如,它们不能导致1周的延误),为有权发布批次的人开放了更大的设计空间,并使Rollup更容易进行推理。而最重要的是,现有的以太坊应用程序几乎无需编写任何新代码即可迁移到Rollup。
 
Rollup如何工作?
链上有一个智能合约,它维护状态根:rollup状态的Merkle根(意思是,“余额”内的帐户余额,合同代码等)。

任何人都可以以高度压缩的形式发布批处理,交易集合以及先前的状态根和新的状态根(处理交易后的Merkle根)。合同检查批处理中的先前状态根是否与其当前状态根相匹配;如果是这样,它将状态根切换到新的状态根。

为了支持存款和提款,我们增加了使输入或输出处于rollup状态“之外”的交易的功能。如果批次具有来自外部的输入,则提交该批次的事务也需要将这些资产转移到rollup合同中。如果某个批次有外部输出,则在处理该批次时,智能合约会启动这些提款。
就是这样!除了一个主要细节:如何知道批次中的状态后根是正确的?如果某人可以提交具有任何后期状态根源的批次而没有任何后果,那么他们可以将rollup中的所有硬币转移给自己。
这个问题很关键,因为有两个非常不同的解决方案系列,而这两个解决方案系列导致了两种rollup方式。
 
乐观Rollup与ZK Rollup
Rollup的两种类型是:
  1. 乐观rollup,使用欺诈证明:rollup合同会跟踪其整个状态根历史以及每个批次的哈希值。如果有人发现某个批次的状态后根不正确,则发布需要链的证明,以证明该批次的计算不正确。合同将验证证明,并还原该批次及其之后的所有批次。
  2. ZK rollup,使用有效性证明:每个批次都包含一个称为ZK- SNARK的加密证明(例如,使用PLONK协议),这证明后状态根是执行批次的正确结果。无论计算量有多大,都可以在链上非常迅速地验证证明。

总的来说,我个人认为,在短期内,对于通用EVM计算而言,乐观可能会胜出,而对于简单付款,交易和其他特定于应用的用例,ZK可能会胜出。随着ZK-SNARK技术的改进,中长期ZK将在所有用例中胜出。
 
欺诈证明的剖析
乐观rollup的安全性取决于以下想法:如果有人将无效的批次发布到rollup中,则任何跟得上链并检测到欺诈的人都可以发布欺诈证明,以证明该批次无效并向合同证明。应该还原。

声称某批次无效的欺诈证明将包含绿色的数据:该批次本身(可以对照存储在链上的哈希值进行检查)以及Merkle树的各个部分,它们仅需要证明已读取和//特定的帐户即可或按批次修改。可以从绿色的节点中重建黄色的树中的节点,因此无需提供。此数据足以执行批处理并计算状态后的根。
如果批次中计算出的状态后根与提供的状态后根不同,则说明该批次是欺诈性的。
可以保证,如果一个批次的构造不正确,并且所有先前的批次都正确构造,则可以创建一个欺诈证明,证明该批次的构造不正确。请注意有关先前批次的声明:如果有多个无效批次发布到rollup中,那么最好尝试证明最早的无效批次。当然,还可以保证,如果正确构造了一个批次,则永远不可能创建表明该批次无效的欺诈证明。
 
ZK rollup如何工作?
一个简单的以太坊交易(发送ETH)需要约110个字节。但是,rollup上的ETH传输仅占用〜12个字节
ZK特有的一个重要压缩技巧是,如果事务的一部分仅用于验证,而与计算状态更新无关,则可以将该部分留在链下。这不能在乐观中完成,因为如果以后需要在欺诈证明中检查数据,则仍需要将数据包含在链上,而在ZK中,SNARK证明批次的正确性已经证明了任何数据提供了验证所需的信息。
一个重要的例子是隐私保护:在乐观中,每笔交易中用于隐私的〜500字节需要进行保留,而在ZK中,覆盖整个批次的ZK-SNARK已经没有了。
这些压缩技巧是rollup可伸缩性的关键。没有它们,rollup可能只会使基础链的可伸缩性提高约10倍,而采用压缩技巧时,缩放系数几乎可以超过100倍所有应用程序。
 
谁可以提交批次
可以提交乐观或ZK的批处理有很多思想流派。通常,每个人都同意,为了能够提交一批,用户必须放下大量的押金。如果该用户曾经提交过欺诈性批次(例如,具有无效的状态根),则该存款将被部分燃烧,并作为对欺诈证明者的奖励。除此之外,还有许多可能性:

  • 完全无政府状态:任何人都可以随时提交一批。这是最简单的方法,但是有一些重要的缺点。特别地,存在多个参与者将生成并尝试并行提交批次的风险,并且这些批次中只有一个可以被成功包含。这导致在将批量发布到链中时在生成证明和/或浪费的气体方面浪费了大量的精力。
  • 集中式序列器:只有一个角色,即序列器,可以提交批次(提款除外:通常的技术是用户可以先提交提款请求,然后如果序列器在下一次不处理该提款请求批处理,那么用户可以自己提交一次操作批处理)。这是最“有效”的方法,但它依赖于中心角色的活跃性。
  • 序列器拍卖:举行拍卖(例如每天),以确定谁有权在第二天成为序列器。该技术的优点在于它筹集了可以由例如银行分配的资金。由rollup控制的DAO(请参阅:MEV拍卖
  • 从PoS集中随机选择:任何人都可以将ETH(或rollup的自己的协议令牌)存放到rollup合同中,并且从一批存放者中随机选择每批的序列器,被选择的概率与数量成正比存放。该技术的主要缺点是导致大量不必要的资本锁定。
  • DPoS投票:通过拍卖选择了一个序列器,但是如果它们的表现不佳,令牌持有者可以投票将其踢出并进行新的拍卖来替换它们。

拆分批处理和状态根供应
当前正在开发的一些rollup使用“拆分批次”范例,其中提交一批第2层事务的动作和提交状态根的动作是分别完成的。这具有一些关键优势:
  1. 您可以允许许多序列器并行发布批处理,以提高检查的抵抗力,而不必担心某些批处理将是无效的,因为其他批处理已首先包含在内。
  2. 如果状态根是欺诈性的,则无需还原整个批次。您可以只还原状态根,然后等待某人为同一批次提供新的状态根。这为交易发送者提供了更好的保证,即他们的交易将不会被还原。

因此,总而言之,存在着一个相当复杂的技术园地,它们试图在涉及效率,简单性,审查制度阻力和其他目标的复杂权衡之间取得平衡。现在说这些想法的最佳组合还为时过早。时间会证明一切。
 
rollup中有哪些尚未解决的挑战?
Rollup的基本概念现在已得到很好的理解,但我们可以肯定它们在根本上是可行且安全的,并且已经将多个rollup部署到了主网上,但仍有很多rollup设计领域尚未得到很好的探索,充分利用以太坊的可伸缩性,将以太坊生态系统的大部分完全整合到rollup中将面临很多挑战。
 
 
结论
rollup是一种强大的新的2层伸缩范例,在短期和中期的未来(以及可能也是长期的)中,有望成为以太坊伸缩的基石。
详细点击标题见原文。
 
黑客新闻讨论
作为自2015年以来活跃于区块链领域的人,我发现Rollup汇总是一个非常酷的发明。用零知识证明简单地压缩数据的想法非常简单和美观。
 
简洁明了。我刚刚开始学习dapp开发,并且能够轻松掌握L2缩放的不同形式。
我对递归ZK-Rollup智能合约特别满意,即使它们很复杂且计算量很大。他们似乎比乐观汇总更值得信赖,我可以看到它们最终成为标准。
很好地跟随这项dapp技术的发展,似乎每隔几个月就会带来巨大的潜力和新的突破!
  
我仍然对Vitalik和所有其他协议开发人员感到敬畏,他们可以理解使区块链技术发挥作用的所有不同方面(数学,社会激励,工程学)。很棒的文章,我特别感谢折衷表。
 
为什么不使用侧链呢?它们可以至少有效地压缩交易事务,并具有更简单的安全性。
侧链的主要缺点是它们很难以任何可信的方式分散运行。基本上与第一层意义上的区块链一样困难。
 
不确定汇总是不是伪科学,但我发现区块链著作是抽象的。尝试以下解释:
以太坊区块链拥有大量资金。但是,对于许多潜在的用例而言,它的成本和性能特征很差。解决这些问题的一种方法是将资金暂时从以太坊转移到另一个更便宜/更快的区块链(我们称之为二级链)。尽可能多地在其周围随机播放;完成洗牌后,将钱返还以太坊。“汇总”是实现该技巧的一种方法(还有其他方法)。汇总意味着(至少对我来说),您打算在某个时间点向以太坊发布二级链状态的检查点。执行此检查点操作相对便宜,因为它只是一些少量字节的“输入”。当有人要求从二级链中提款到以太坊时,这很方便。如果他们能够说“给我我的钱”,那么就有窃取资金的潜力。必须有一种方法来知道:a)他们在次级链上拥有这笔钱,并且b)他们还没有花光这笔钱。这是通过提出以下形式的提款请求来实现的:“给我我的钱,因为...此汇总表明我合法拥有这笔钱”。如果没有汇总或类似的方案,以太坊合同决定是否给他们钱,就需要查看二级链上相关交易的整个历史。那是不可能的。然后,在发明了汇总概念之后,可以通过两种方式来区分提款请求是有效还是伪造:
本文为问题空间提供了一些有用的背景知识:https : //arxiv.org/pdf/1904.06441.pdf