LIC:一文了解以太坊扩容方案Rollup

原文标题:《引介|Rollup不完全指南》

撰文:Fulvia

翻译&校对:Shengchao&阿剑

译者注:

原文中Rollup同时以单复数形式出现多次,在译文中统一确定为首字母大写的Rollup。

Rollup在当前的以太坊社区已经十分著名。在可预见的未来,Rollup是以太坊实现扩容的关键解决方案。但Rollup到底是什么?你能从这项技术身上得到什么,又该如何使用它?这篇文章将尝试回答一些关键问题。

背景知识:什么是一层扩容,什么是二层扩容?

实现区块链生态系统扩容有两种方式。第一种扩容的方式是让区块链本身拥有更高的事务处理容量。比如让区块变得“更大”,但“大区块”会让区块链的验证过程变得更为困难,而且可能会使节点更加中心化。为了避免这样的风险,开发者可以提高客户端软件的效率。更加具有可持续性的扩容方式是,使用分片等技术,让构建和验证区块链的工作分摊到许多不同的节点上——“eth2”就在尝试使用这种方式升级以太坊。

第二种扩容的方式是改变使用区块链的方法。用户不需要直接把所有的活动都直接放在区块链主链上,而是在主链外的“二层”协议中执行大部分活动,并生成一个证明,证明链外发生的这一切活动都遵循规则。主链上部署一个智能合约,它只有两个任务:处理存取款,以及对上述证明进行验证。有多种方法实现证明和验证,但它们都有一个共同的特性,那就是在链上验证证明比在链下做原始计算的开销要小得多。

状态通道vsplasmavsrollup

二层扩容主要有三种方案:状态通道,Plasma和rollup。三种方案代表了三种不同的范式,每种方案有自己的优缺点。所有的二层扩容大致都属于这三类。

状态通道如何工作?

另请参阅https://www.jeffcoleman.ca/state-channels,statechannels.org

想象一下,Alice向Bob提供了网络连接服务。作为交换,Bob为上网产生的流量支付0.001美元/MB的费用给Alice。Bob不需要在一层主链支付每笔费用,双方使用如下二层方案。

首先,Bob将1美元存入一个智能合约中。为了向Alice支付第一笔款项,Bob签署了一张"票据",“票据”上写着“0.001美元”,并将其发送给Alice。为了支付第二笔款项,Bob签署另一张写着“$0.002”的票据,并将其发送给Alice。以此类推,每次付款都重复这个过程。当Alice和Bob完成交易后,Alice可以将价值最高的票据包裹上自己的签名后,发布到主链上。智能合约会验证Alice和Bob的签名,验证通过后,将Bob的票据上标注的金额支付给Alice,剩下的金额返还给Bob。如果Alice不愿意关闭通道,Bob可以发起一个提现挑战期——如果Alice在这段时间内无法提供Bob支付的票据,那么Bob就可以拿回之前存在智能合约里的所有钱。

巴克莱银行将Coinbase的股票目标价从61美元上调至70美元:金色财经报道,巴克莱银行 (BCS) 在周四的一份研究报告中表示,正在公布财报之前修改 Coinbase (COIN) 预期,并将该股评级从“同等权重”下调至“减持”。尽管如此,该银行仍将Coinbase (COIN) 的目标价格从 61 美元上调至 70 美元。截至发稿时,Coinbase股票在盘前交易中的报价为85.95 美元。[2023/7/13 10:53:02]

状态通道技术很强大:广义的状态通道可以支持双向支付、实现智能合约,并具有可组合性。但是通道的作用是有限制的:不能向还没有加入通道的用户在链下发送资金;不能用于没有明确逻辑所有者的对象。此外,如果使用通道处理的事务比小额支付场景更复杂,需要锁定大量的资金在通道中。

Plasma如何工作

另请参阅Plasma原始白皮书,PlasmaCash

要将资产从主链存入Plasma链,用户需要在主链将资产发送至管理Plasma链的智能合约。Plasma链会给该资产分配一个新的唯一ID。每条Plasma链都有一个操作者。每隔一段时间,操作者就会生成一个“批处理”,包含这段时间内所收到的所有Plasma链的交易。操作者生成一棵Merkle树,在索引为X的叶子节点处,如果资产ID为X的资产在这一批次中发生了交易,则叶子节点上存有对应交易,否则该叶子节点为零。操作者将这棵树的Merkle根发布到主链上。操作者还需要将每个索引X的Merkle分支发送给该资产的当前所有者。如果需要将资产从Plasma链提取至主链上,用户需要给主链的智能合约发送该资产最近一次交易对应的Merkle分支。智能合约随即开始了一个挑战期,在此期间,任何人都可以尝试使用其他Merkle分支来证明:用户在提取资产时并不拥有该资产,或者用户在某个时间点将资产发送给了其他人,从而使退出申请无效。如果在7天内没有人证明退出是欺诈性的,用户便可以成功取回资产。

Plasma提供了比状态通道更强的功能:你可以将资产发送给从未加入二层的用户,锁定的资金也低得多。但这是有代价的:状态通道在“正常运行”时不需要将任何数据存入主链,但Plasma要求每条链每隔一段时间在主链发布一次哈希值。此外,Plasma链中的交易没有即时性,即必须等待一批交易的证据发到主链上。

此外,Plasma和状态通道都有一个重要缺陷:其安全模型所对应的博弈论依赖于这样的想法:两个系统所控制的资产在逻辑层面都要有"所有者"。只要资产所有者在乎自己的资产,那么当涉及该资产的状态变更“无效”时,资产所有者就会想办法出示变更“无效”的证明。这对一些应用来说无关紧要,但对不少其他应用来说这是个问题。即使系统中一个对象的状态可以在未经系统所有者同意的情况下被改变,也不能很好地与Plasma兼容。这意味着,在现实中部署plasma或状态通道时,都需要推演“特定应用”的潜在逻辑设计定制化方案,不太可能做出一个能完整模拟以太坊运行环境的plasma或状态通道系统。接下来让我们看看rollup是如何解决这个问题的。

Rollup

另请参阅:EthHub关于optimisticrollup的介绍,EthHub关于ZKrollup的介绍

Plasma和状态通道方案都是“完全的”layer2方案,因为它们将数据和计算都转移到链下。然而,数据可得性的基本博弈论原理意味着这样的系统不可能安全地实现所有应用。Plasma和状态通道通过明确资产对象和所有者之间的关系来解决这个问题,但这使它们无法完全通用。Rollup则与前两者不同,是一种具有“混合性质”的二层方案。Rollup将计算转移到链下,但在链上保存了每笔交易的部分数据信息。为了提高效率,Rollup使用了一系列花哨的压缩技巧,并尽可能地用计算替代数据。其结果是,这个系统的可扩展性仍然受限于底层区块链的数据带宽,但在此基础上实现的扩容倍数非常可观:在以太坊主链执行一笔ERC-20代币的转账大约消耗45000gas,但在Rollup中,每笔交易仅需要在主链上存储16字节数据,消耗的gas小于300。

数据存储在主链是Rollup的关键因素。将数据存储在主链并进行共识,使得任何人可以在本地处理Rollup中的所有操作,包括欺诈检测,发起提款,生成批处理等。因为不存在数据可得性问题,所以运营者如果作恶或者离线所造成的损失相对更少,也在谁有权发布批处理这个问题上提供了更多的可能性,同时也使Rollup更易于理解。更为重要的是,不存在数据可得性问题意味着,资产无需和所有者有明确的逻辑映射关系。相比其他二层扩容方案,这是以太坊社区对Rollup感到更加激动的重要因素:Rollup是具有通用性的,比如可以在Rollup中运行EVM,从而使现有的以太坊应用可以在不写新代码的情况下迁移至Rollup。

Rollup究竟如何工作?

在主链上有一个智能合约,存有一个状态根——表征Rollup状态的Merkle根。

任何人都可以在主链上对该智能合约发起一个批处理事务,这个批处理是对一批Rollup内部事务的高度压缩,还包括旧的状态根和新的状态根。主链合约会检验旧的状态根与新的状态根是否匹配。如果检验通过,主链上的旧状态根会更新为新状态根。

为了支持存款和取款,批处理中的事务的输入或输出可以是Rollup“外部”的状态。如果批处理中有交易的输入来自Rollup之外,那么这个批处理操作会将主链其他地方的资产转移至Rollup合约中。如果批处理中有交易的输出来自Rollup之外,那么这个批处理会触发智能合约中的取款操作,将资产从Rollup取回主链。

整个过程就这么简单!不过还有一个细节。如何知道批处理执行完成之后的状态根是正确的?如果有人可以提交一个伪造的状态根,而不产生任何后果,他们就可以把所有的资产转移给自己。这个问题很关键,因为这个问题有两种截然不同的解决办法,从而形成了两种类型的Rollup。

OptimisticrollupsvsZKrollups

Rollup的两种类型包括:

OptimisticRollup,使用欺诈证明解决上述问题:主链的Rollup合约记录了该Rollup内部状态根变更的完整记录,以及每个批处理的哈希值。如果有人发现某个批处理对应的新状态根是错误的,他们可以在主链上发布一个证明,证明该批处理生成的新状态根是错误的。合约校验该证明,如果校验通过则对该批处理之后的所有批处理交易全部回滚。

ZKRollup,使用有效性证明解决上述问题:每个批处理中包含一个称为ZK-SNARK的密码学证明。无论批处理的计算量多大,都可以在主链上高效对证明进行验证。

这两种Rollup之间的设计权衡比较复杂

性质OptimisticRollupZKRollup每个批处理在主链上的固定gas开销约40,000约500,000提现周期约1周非常快技术复杂度低高实现通用性的难度相对更容易相对更难等工作正在努力简化该过程)Rollup中每笔事务的成本相对更高相对更低链下计算的开销相对更低相对更高

总的来说我自己的观点是,短期内OptimisitcRollup很可能在实现具有通用性的EVM中胜出,ZKRollup很可能在简单的支付、转账和其他特定应用中胜出。但从中长期来看,随着ZK-SNARK技术的改进,ZKRollup将在所有应用场景中胜出。

剖析欺诈证明

OptimisticRollup的安全性取决于这样的想法:如果有人将一个无效的批处理发布到Rollup中,任何同步了该链的人只要发现欺诈行为便可以向主链上的合约发布欺诈证明,证明该批处理是无效的,应该被回滚”到底是指主链,还是指Rollup,虽然都是对的)。

一个断言某个批处理无效的欺诈证明需要包括上图中以绿色标识的数据:该批处理本身以及证明该批处理读取或修改了特定账户的默克尔树路径。黄色的节点可以通过绿色的节点重建,所以无需包含在证明中。这些数据足以执行批处理并计算新的状态根。如果计算出的新状态根和批处理中提供的新状态根不一样,那么就证明了该批处理是欺诈的。

可以确保的是,如果一个批处理中存在错误,而在此之前的所有批处理都是正确的,那么就可以创建一个欺诈证明,证明该批处理的构造是错误的。注意如果在Rollup中有多个无效的批处理,那么最好尽量证明最早的那个批处理无效。当然可以确保的是,如果一个批处理是正确的,那么永远不可能创建一个欺诈证明,证明该批处理是无效的。

压缩是如何实现的?

一笔最简单的以太坊转账大约需要110字节,但是在Rollup中实现ETH转账只需要大约12字节:

参数以太坊主链Rollup合约Nonce~30Gasprice~80-0.5Gas30-0.5To214Value~9~3Signature~68~0.5From0(从签名中还原)4总计~112~12

这其中的部分原因是Rollup可以采用更简单的高级编码技巧,而目前以太坊的RLP在每个值的长度上浪费了1个字节。同时Rollup还运用了一些非常聪明的压缩技巧。

Nonce:这个参数的目的是为了防止重放。如果一个账户状态当前的nonce是5,那么该账户的下一笔交易的nonce参数必须是5,但是一旦交易被处理,账户状态中的nonce就会被递增为6,这样nonce为5的交易就不会再被打包。在Rollup中,我们可以完全省略nonce,因为我们只需要从更新前状态中恢复nonce;如果有人试图用较早的nonce重放交易,签名将无法通过验证,因为签名校验将使用nonce更大的数据。

GasPrice:我们可以允许用户使用固定范围的Gas价格进行支付,例如范围是0-2的16次幂。另外,我们也可以只为每个批处理收取固定的费用,甚至可以将gas支付完全移到Rollup之外,让交易者通过特定渠道向批处理创建者支付费用。

Gas:我们同样可以只是将Gas总量范围选择为2的幂。另外,我们也可以只在批处理层面设置Gas限制。

To:我们可以用索引代替20字节的地址。

Value:我们可以用科学计数法来存储Value。在大多数情况下,转账只需要1-3个有效位。

Signature:我们可以使用BLS聚合签名,使许多签名聚合成一个约32-96字节的签名。然后,这个签名可以一次性对整个消息集和发送者进行批处理的签名校验。表中的~0.5表示在一个主链区块中可以验证的聚合签名数量是有限的,因此如果批处理中的交易较多,需要约每100笔交易生成一次聚合签名。

ZKRollup有一个特殊的重要压缩技巧:如果交易的一部分只用于验证,与计算状态更新无关,那么这部分数据可以不存储在主链上。这在OptimisitcRollup中是做不到的,因为该数据仍然需要存储在链上,以备后续欺诈证明校验的不时之需,而在ZKRollup中,证明某批处理数据正确性的SNARK证明,已经证明了相关方提供了所有验证所需的数据。一个重要的例子是实现具有隐私保护性质的Rollup:在OptimisitcRollup中实现隐私保护,每笔交易中用于保护隐私的约500字节的ZK-SNARK需要上链,而在ZKRollup中实现隐私保护,覆盖整个批处理的ZK-SNARK已经可以证明"内部"的ZK-SNARK是有效的。

这些压缩技巧是Rollup实现扩容的关键,如果没有这些技巧,Rollup或许只能在主链的扩容基础上实现大约10倍的扩容,但在使用了压缩技巧之后,几乎所有应用的扩容系数都可以超过100倍。

谁可以提交批处理?

对于哪些人可以在OptimisticRollup或ZKRollup中提交批处理这个问题,已经存在许多流派。一般来说,大家都认为提交批处理的用户必须质押一大笔押金,如果某用户曾经提交过一个具有欺诈性的批处理,那么这笔押金的一部分将被燃烧销毁,另一部分奖励给提交欺诈证明的用户。但除此之外,还存在许多可能:

,该术语得名原因是该角色需要对批处理中的交易进行排序)

完全无许可的排序者:任何人都可以在任何时候提交批处理。这个方法最简单,但有一些严重的缺点,比如存在这样的问题:多个参与者同时生成并试图提交批处理,而其中仅有一个批处理可以成功被收录。这将导致在生成证明的计算开销或提交证明时的Gas开销有大量被浪费。

中心化的排序者:通过排序者这样的角色提交批处理。这种方法“效率”最高,但需要依赖一个中心化的角色。

排序者拍卖:通过拍卖来决定谁有权利成为第二天的排序者。这种方案的优点是可以筹集资金,而这些资金可以通过Rollup的DAO来分配。

从PoS集合中随机选择:任何人都可以将ETH存入Rollup合约中,每一个批处理的排序者都会在这些存款人中随机选取,被选中的概率与存款金额成正比。这种方案的主要缺点是需要锁定大量资产。

DPoS投票:某些排序者通过拍卖选取后执行批处理,但如果他们表现不佳,那么代币持有者可以投票将其踢出,并举行新的拍卖来替代他们。

将批处理和状态根提交分开

目前正在开发的一些Rollup采用的是“分割-批处理”模式,即提交一批二层交易批处理的行为和提交一个状态根的行为是分开进行的。这其中有一些关键的优势。

你可以允许许多排序者并行发布批次,以提高抗审查能力,减轻对于某些批处理会因为其他一些批处理提前打包而无效的担心。

如果一个状态根存在欺诈,无需回滚整个批处理,可以只回滚状态根,并等待有人为同一批处理提供新的状态根。这样可以更好地确保交易发送者的交易不会被还回滚。

总的来说,这是一个相当复杂的技术组合,还在涉及效率,简单性,抗审查性和其他目标的复杂权衡中找到平衡。现在说这哪种组合最有效还为时过早,时间会证明一切。

Rollup会带来多大的扩容?

在现有的以太坊主链上,每个区块的Gas上线是1250万,而交易的每个字节存储在链上花费16Gas。这意味着,如果一个区块中只包含一个批处理,那么这个批处理可以包含1200万/16=75万字节的数据。而如上文所述,Rollup中的每一笔ETH转账只需要12字节的存储空间,这意味着每个批处理中可以包含62500笔交易。目前以太坊主链的区块间隔是13秒,也就是说实现的TPS约为4807。

下表中包含了其他一些应用场景的扩容效率。

应用场景Rollup内单笔对应操作需上链的字节数以太坊主链对应操作的Gas消耗最大扩容倍数ETH转账1221,000105xERC20转账16~50,000187xUniswap交易~14~100,000428x具有隐私保护性的提现操作296~380,00077x具有隐私保护性的提现操作40~380,000570x

最大扩容倍数计算方法:以太坊主链对应操作的Gas消耗/(Rollup中对应操作需上链的字节数*16)*1200万/1250万

需要说明的是,出于某些原因,这些数字其实是过于乐观的。最重要的原因是,一个区块中几乎不可能只包含一个批处理,因为到时会有多个不同的Rollup系统。第二个原因是,存款和提现操作始终将会存在。第三个原因是,短期内Rollup的使用量可能较低,因此固定成本的收费模式会占据主导。不过即使考虑了这些因素,超过100倍的扩容应该不难实现。

那如果我们想要实现1000-4000TPS呢?这就需要eth2数据分片了。在这个提案中,每12秒开辟一个16MB的存储空间,这个存储空间可以被任何数据填满,系统将确保对这些数据的可用性达成共识。这个数据空间可以被Rollup使用。这个约1398kB/秒的数据吞吐量比当前以太坊主链的约60kB/秒提高了23倍,从长远来看,数据容量有望进一步增长。因此,使用eth2数据分片实现的Rollup的TPS可以高达10万,在未来甚至会更大。

还有哪些尚未解决的挑战?

虽然现在Rollup的基本概念已经被人们所熟知,我们也很确定Rollup从本质上说上是可行的、安全的,而且已经有多个Rollup在以太坊主网部署,但Rollup在设计层面仍有许多地方没有被很好地探索,如果要将以太坊生态系统的大部分都完全引入Rollup从而利用其扩容性,这方面仍存在不少挑战。一些关键的挑战包括:

用户和生态系统的入驻:目前使用Rollup的应用不多,用户对Rollup不熟悉,很少有钱包开始整合Rollup。商家和慈善机构还不接受它们用于支付。

跨Rollup交易:有效地将资产和数据从一个Rollup转移到另一个Rollup中,而不需要通过主链中转并产生相应费用。

审计激励:如何最大限度地提高至少有一个诚实节点会完全验证OptimisticRollup的概率,从而确保在出现问题时有人发布欺诈证明?对于小规模的Rollup来说,这不是一个重要的问题,可以简单地依靠利他主义实现,但对于更大规模的Rollup来说,需要把激励问题研究清楚。

探索在Plasma和Rollup两者之间设计的可能性:是否有技术可以把部分与状态更新相关的数据放在链上,但不把全部数据放在链上?通过这种技术是否会诞生出新的有用的工具?

最大限度地提高预确认的安全性:很多Rollup为了让用户体验更好,提供了一个“预确认”的概念,即在交易完成后,排序者即刻提供一个承诺:某笔交易将被包含在下一批处理中,如果排序者食言,他们的押金将被销毁。但是这种方案在经济层面的安全性是有限的,因为排序者可能同时向非常多的用户做出很多承诺。这个机制是否可以改进?

提高对缺席排序器的响应速度:如果一个Rollup的排序者突然离线,那么如何最大限度地快速以及低成本地从这种情况中恢复,要么快速和低成本地大规模退出到另一个Rollup,要么更换排序者。快速响应这是非常有价值的。

高效的ZK-VM:生成一个ZK-SNARK证明,证明具有通用性的EVM代码已经正确执行,并有一个确定的结果。

总结

Rollup是一种新的强大的二层扩容范式,预计将成为以太坊未来短期和中期实现扩容的基石。以太坊社区对于Rollup非常兴奋,因为与之前的二层扩容尝试不同,Rollup可以支持通用的EVM代码,允许现有的应用程序轻松迁移过来。Rollup通过做出一个关键的妥协来实现这一目标:不试图完全搬到链下,而是将每笔交易的少量数据保留在链上。

Rollup有很多种,设计上也有很多选择:使用欺诈证明的OptimisitcRollup,使用有效性证明的ZKRollup。排序者可以是一个中心化的角色,也可以是一个去中心化的自由角色,或者是介于两者之间的许多其他选择。Rollup仍然是一项早期阶段的技术,开发正在快速地继续,但它们是有效的,一些已经运行了几个月。期待在未来的几年里,Rollup领域会有更多令人兴奋的成果出现。

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

链链资讯

比特币交易所:盘锦市核心要点

请广大市民持续关注河北疫情信息,如无特殊情况,不要前往河北省。春节农村返乡人员需持7天内有效新冠病核酸检测阴性结果,返乡后实行14天居家健康监测,期间不聚集、不流动,每7天开展一次核酸检测.

DAI以太坊:黄南藏族自治州核心要点

原则上近期非必须不出省、不前往中高风险地区。春节农村返乡人员需持7天内有效新冠病核酸检测阴性结果,返乡后实行14天居家健康监测,期间不聚集、不流动,每7天开展一次核酸检测.

SOL:德阳市核心要点

低风险地区人员不要前往中高风险地区。如非必要,近期不要前往河北省石家庄市、邢台市等中高风险地区。如必须前往,需提前向所在社区村(单位)报备.

[0:5ms0-4:93ms