主页 > imtoken冷钱包苹果版下载 > 一文看懂以太坊扩容计划Rollup

一文看懂以太坊扩容计划Rollup

imtoken冷钱包苹果版下载 2023-10-10 05:07:17

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

作者:富尔维亚

翻译校对:盛超、阿健

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

Rollup 在现在的以太坊社区已经非常有名了。 在可预见的未来以太坊提现审核最多要多久,Rollup 是以太坊实现扩容的关键方案。 但 Rollup 到底是什么? 您可以从这项技术中得到什么,以及如何使用它? 本文将尝试回答一些关键问题。

背景知识:什么是Layer 1扩展,什么是Layer 2扩展?

有两种方式可以实现区块链生态系统的扩展。 第一种扩展方式是让区块链本身拥有更高的交易处理能力。 比如让区块“更大”,但是“大区块”会让区块链的验证过程更加困难,也可能让节点更加中心化。 为避免此类风险,开发人员可以提高客户端软件的效率。 一种更可持续的扩展方式是使用分片等技术将构建和验证区块链的工作分散到许多不同的节点上——“eth2”正试图以这种方式升级以太坊。

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

状态通道 vs Plasma vs rollup

Layer 2 扩容的方案主要有 3 种:状态通道、Plasma 和 rollup。 这三种场景代表三种不同的范式,每种都有自己的优点和缺点。 所有的 Layer 2 扩展一般都属于这三类(关于如何归类一些折衷方案存在争议,比如“validium”)(编者注:中文翻译)。

状态通道如何工作?

另请参阅 statechannels.org

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

首先,Bob 将 1 美元(稳定币,或等值的 ETH)存入智能合约。 为了向爱丽丝支付第一笔款项,鲍勃签署了一张“票据”(一条链下消息),上面写着“0.001 美元”并将其发送给爱丽丝。 为了进行第二次付款,Bob 在另一张纸条上签名,上面写着“0.002 美元”并将其发送给 Alice。 以此类推,每次支付都重复这个过程(译者注:状态通道参与者只需要保持一个最新的状态变化,所以新票签完后,之前的票就失效了)。 Alice 和 Bob 完成交易后,Alice 可以在最有价值的账单包上签名并发布到主链(关闭通道)。 智能合约验证 Alice 和 Bob 双方的签名,验证通过后,向 Alice 支付 Bob 票上标注的金额,并将剩余金额(译者注:$1 减去前者)返还给 Bob。 如果 Alice(由于恶意或技术故障)不愿意关闭通道,Bob 可以发起提现挑战期(比如 7 天)——如果 Alice 不能在这个期限内提供 Bob 支付的账单,那么 Bob 可以取回之前所有的钱都存储在智能合约中。

状态通道技术强大:广义状态通道可以支持双向支付,实现智能合约(例如Alice和Bob在通道中签署金融合约),并且是可组合的(如果Alice和Bob之间有开放通道,Bob Alice 和 Charlie 之间也有一个开放的通道,因此 Alice 可以在不信任的情况下与 Charlie 交互)。 但通道的作用是有限的:它不能向尚未加入通道的用户发送链下资金; 它不能用于没有明确逻辑所有者的对象(例如 Uniswap 智能合约)。 另外,如果通道处理的交易比小额支付场景更复杂,需要在通道中锁定大量资金。

等离子体的工作原理

另请参阅原始 Plasma 白皮书 Plasma Cash

要将主链上的资产存入 Plasma 链,用户需要将主链上的资产发送到管理 Plasma 链的智能合约。 Plasma 链将为资产分配一个新的唯一 ID(例如 537)。 每个 Plasma 链都有一个运营商(这可能是一个中心化的参与者,或者由多重签名控制,或者更复杂的东西,比如 PoS 链或 DPoS 链)。 每隔一段时间(可能是 15 秒,或一个小时,或介于两者之间的任何时间),运营商会生成所有 Plasma 链的交易“批次”。 运营商生成一棵 Merkle 树。 在索引为X的叶子节点处,如果资产ID为X的资产在本批次中有交易,则对应的交易存在于叶子节点上,否则叶子节点为零。 运营者将这棵树的 Merkle 根发布到主链上。 运营者还需要将每个索引 X 的 Merkle 分叉发送给资产的当前所有者。 如果某个资产需要从 Plasma 链上提取到主链上,用户需要将该资产的最后一笔交易对应的 Merkle 分支发送到主链的智能合约中。 然后智能合约开始一个挑战期(例如 7 天),在此期间任何人都可以尝试使用其他 Merkle 分叉来证明:(i)用户在提款时不拥有资产,或(ii)用户是在某些时候,资产被发送给其他人,从而使提款申请无效。 如果7天内没有人证明提款是欺诈的,用户就可以顺利取回自己的资产。

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

此外,Plasma 和状态通道都有一个重要缺陷:它们的安全模型背后的博弈论依赖于两个系统控制的资产都有逻辑“所有者”的想法。 只要资产所有者关心他们的资产,当涉及该资产的状态变化是“无效的”时,资产所有者将找到一种方法来表明该变化是“无效的”。 这对于某些应用程序来说是无关紧要的,但对于许多其他应用程序来说却是一个问题(例如 Uniswap 假设依赖的想法自相矛盾)。 即使系统中对象的状态可以在未经系统所有者同意的情况下更改(例如,在基于账户的系统中,其余额可以在未经所有者同意的情况下增加),它也不能很好地与 Plasma 兼容. 这意味着在现实中部署plasma或state channels时,需要推导出“特定应用”的潜在逻辑设计定制方案,不可能做出能完全模拟以太坊运行环境(即“EVM”)的plasma ) 或者状态通道系统。 接下来我们看看rollup是如何解决这个问题的。

卷起

另见:EthHub对optimistic rollup的介绍,EthHub对ZK rollup的介绍

Plasma 和状态通道方案都是“完整的”第 2 层方案,因为它们将数据和计算都移动到链下(即进入它们自己的第 2 层系统)。 然而,数据可用性的基本博弈论原则意味着此类系统无法安全地实施所有应用程序。 Plasma 和状态通道通过明确资产对象和所有者之间的关系来解决这个问题,但这阻碍了它们的完全通用性。 Rollup 与前两者的不同之处在于它是一种具有“混合性质”的两层解决方案。 Rollup 将计算(和完整状态存储)移到链下,但将每个交易的部分数据信息保留在链上。 为了提高效率,Rollup 使用了一系列奇特的压缩技巧,并尽可能用计算替换数据。 因此,该系统的可扩展性仍然受到底层区块链数据带宽的限制,但在此基础上实现的扩展倍数非常可观:在以太坊主链上执行 ERC-20 代币转账消耗约 45,000 gas,而在 Rollup 中,每笔交易只需要在主链上存储 16 个字节的数据,消耗的 gas 不到 300。

数据存储在主链上是Rollup的一个关键因素(注意:这与将数据存储在“IPFS”上不同以太坊提现审核最多要多久,因为IPFS对存储的数据没有共识,而Rollup的数据必须存储在区块链上)。 将数据存储在主链上并进行共识,使得任何人都可以在本地处理Rollup中的所有操作,包括欺诈检测、发起提现、生成批次等。由于没有数据可用性问题,运营商作恶或走私的损失相对较小离线(例如,他们不能导致 1 周的退出延迟),并提供更清晰的视图,说明谁有权发布批次。 更多的可能性,也让 Rollup 更容​​易理解。 更重要的是,数据可用性的缺失意味着资产不需要与所有者有清晰的逻辑映射关系。 与其他二层扩容方案相比,这是让以太坊社区对 Rollup 更加兴奋的一个重要因素:Rollup 是通用的,例如 EVM 可以运行在 Rollup 中,这样就可以实现现有的以太坊应用程序而无需编写新的应用程序. 在代码的情况下迁移到 Rollup。

Rollup 究竟是如何工作的?

主链上有一个智能合约,有一个状态根——代表 Rollup 状态的 Merkle 根。 (状态内容包括Rollup中的账户余额、合约代码等)

以太坊联盟和以太坊的关系_以太坊提现审核最多要多久_以太坊硬分叉升级要多久

任何人都可以在主链上的智能合约上发起批量交易(transaction)。 这个batch是一个高度压缩的Rollup内部事务的batch,包括old state root和new state root(在old state root基础上执行batch transaction后生成的new state root)。 主链合约会检查旧状态根是否匹配新状态根(译者注:即新状态根是否可以由这批交易集触发的状态转换产生)。 如果验证通过,主链上的旧状态根将更新为新状态根。

以太坊硬分叉升级要多久_以太坊联盟和以太坊的关系_以太坊提现审核最多要多久

为了支持充值(译者注:将资产从主链其他地方存入Rollup合约)和取款(译者注:解除Rollup合约对自身资产的控制,归还到链上其他地方),批处理交易的输入或输出可以在 Rollup 的“外部”声明。 如果批次中有交易的输入来自于 Rollup 之外,那么这个批次操作会将主链其他地方的资产转移到 Rollup 合约中。 如果该批次中有来自 Rollup 外部的交易输出,那么该批次将触发智能合约中的取款操作,将 Rollup 中的资产带回主链。

整个过程就是这么简单! 但还有一个细节。 批量执行完成后如何知道状态根是否正确? 如果有人可以提交一个假的状态根而不会产生任何后果,他们就可以将所有资产转移给自己。 这个问题很关键,因为这个问题有两种不同的解决方案,从而产生两种类型的 Rollup。

Optimistic rollups 与 ZK rollups

两种类型的汇总包括:

Optimistic Rollup 使用欺诈证明来解决上述问题:主链的 Rollup 合约记录了 Rollup 内部状态根变化的完整记录,以及每批(触发状态根变化)的哈希值。 如果有人发现某个batch对应的新state root是错误的,可以在主链上发布证明batch生成的新state root是错误的。 合约对证明进行验证,如果验证通过,则回滚该批次之后的所有批次交易。 ZK Rollup,使用validity proof来解决上述问题:每一个batch都包含一个密码学证明,叫做ZK-SNARK(例如,使用PLONK协议来证明在这个batch操作之后可以从旧状态转换成新状态(译者注) :在ZK Rollup中,提交的密码学证明只需要具有体积小、验证速度快的特点,不需要是零知识的,所以实现ZK Rollup只需要SNARK,ZK-SNARK不一定事实上,在ZK Rollup中,因为批量交易信息是存储在主链上的,而这个信息正是在密码学证明系统中所证明的,所以ZK Rollup本身并不是零知识的,而是拥有零知识的ZK Rollup全称为ZK ZK Rollup),无论batch的计算量如何,都可以在主链上高效验证证明。

这两个汇总之间的设计权衡很复杂

Nature Optimistic Rollup 主链上每批ZK Rollup的固定gas开销约为40,000(开销比较轻,主要操作是改变state root的值)约500,000(ZK的验证开销- SNARK比较大)提现周期1周左右(需要留出时间看是否有人出示欺诈证明取消无效提现请求)非常快(提现请求提交后下一批完成)技术复杂度低(ZK-SNARKs技术相对较新,在数学层面相对复杂)实现通用性的难度相对容易(实现通用化EVM的Rollup可以很快部署到主网)相对困难(使用ZK -SNARK 来证明广义 EVM 执行操作比证明简单的计算操作要难得多,当然(例如 Cairo)和其他人正在努力简化这个过程) Rollup中每笔交易的成本相对较高,相对较低(如果部分交易数据仅用于验证交易有效性,不涉及状态变化,则这部分数据不需要存储在主链上,并且所有数据需要存储在 Optimisitc Rollup 中,用于后续欺诈证明的生成和验证) 链下计算的开销相对较低 Low(虽然需要更多的全节点重新计算) 相对较高(生成 ZK-SNARK 证明,尤其生成通用计算的证明可能很昂贵,比直接计算大数千倍)

总的来说,我自己的观点是,短期内Optimisitc Rollup很可能胜在通用EVM的实现上,而ZK Rollup很可能胜在简单的支付、转账等特定应用。 但从中长期来看,随着ZK-SNARK技术的完善,ZK Rollup将在所有应用场景中胜出。

防欺诈剖析

Optimistic Rollup 的安全性取决于这样的想法,如果有人将无效的 batch 发布到 Rollup 中,任何同步过链的人都可以向主链上的合约发出欺诈证明,证明该 batch 的处理是无效的,应该被rolled back(译者注:不清楚作者这里的“the chain”指的是主链还是Rollup,虽然两者都是正确的)。

以太坊硬分叉升级要多久_以太坊联盟和以太坊的关系_以太坊提现审核最多要多久

断言批次无效的欺诈证明需要包括上图中以绿色标识的数据:批次本身(可根据存储在链上的哈希值进行检查)以及批次读取或修改特定帐户的 Merkle 树的证据小路。 黄色节点可以由绿色节点重构,因此不需要包含在证明中。 此数据足以执行批处理并计算新的状态根(请注意,这与无状态客户端验证单个块的方式完全相同)。 如果计算出的新状态根与批次中提供的状态根不同,则证明该批次是欺诈性的。

可以确保的是,如果批次中存在错误,而之前的所有批次都是正确的,则可以创建欺诈证明来证明该批次的构造不正确。 注意,如果 Rollup 中有多个无效的 batch,最好尝试证明最老的那个 batch 无效。 当然可以保证的是,如果批次是正确的,则永远不可能创建批次无效的欺诈证明。

压缩是如何实现的?

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

参数(单位:字节数)以太坊主链Rollup合约Nonce(序号)~30Gasprice~80-0.5Gas30-0.5To(目标地址)214Value(转账价值)~9~3Signature(签名)~68(2+33 + 33) ~0.5From (原始地址) 0 (从签名恢复) 4 Total ~112~12

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

ZK Rollup 有一个特别重要的压缩技巧:如果交易的一部分只是用于验证,与计算状态更新无关,那么这部分数据就不需要存储在主链上。 这在 Optimisitc Rollup 中是做不到的,因为数据仍然需要存储在链上,以备不时之需进行后续的防欺诈验证。 在 ZK Rollup 中,证明一批数据正确性的 SNARK 证明,已经证明参与方已经提供了验证所需的所有数据。 一个重要的例子是具有隐私保护属性的 Rollup 的实现:在 Optimisitc Rollup 中实现隐私保护,需要将每笔交易中用于保护隐私的 ZK-SNARK 约 500 字节上传到链上,在 ZK 中实现隐私保护Rollup,覆盖整个batch的ZK-SNARK已经可以证明“内部”ZK-SNARK是有效的。 (译者注:由于SNARKs是可以嵌套的,所以在ZK Rollup中实现隐私保护,只需要将最终生成的最外层SNARK提交到链上即可。在验证外层SNARK时,内层SNARK是有效的。性可以在同时。)

这些压缩技术是 Rollup 扩展的关键。 如果没有这些技术,Rollup 可能只能在主链扩容的基础上实现 10 倍左右的扩容(虽然在一些特定的大型应用中,简单的 Rollup 可以实现 Scaling 已经很强大了),但是在使用压缩之后技巧,几乎任何应用程序都可以扩展超过 100 倍。

谁可以提交批次?

关于谁可以在 Optimistic Rollups 或 ZK Rollups 中提交批次,有很多思想流派。 一般而言,认为提交批次的用户必须质押大笔保证金,而如果用户曾经提交过欺诈性批次(比如提交无效的状态根),那么这笔保证金的一部分将被销毁,另一部分则被销毁。奖励提交欺诈证明的用户。 但除此之外,还有很多可能性:

(译者注,可以将batch发布到主链的用户称为sequencer(排序者),这个词的由来是因为这个角色需要对batch中的交易进行排序)

单独的批处理和状态根提交

目前正在开发的部分 Rollups 采用“分批”模型,即提交一批 Layer 2 交易的行为和提交状态根的行为分开进行。 这有一些关键优势。

您可以允许多个分拣机并行发出批次,以增加审查抵抗力,并减轻因其他批次提前打包而导致某些批次无效的担忧。 如果一个状态根是欺诈性的,而不是回滚整个批次,你可以只回滚状态根并等待有人为同一批次提供新的状态根。 这样更好的保证了发送方的交易不会被回滚。

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

Rollup 会带来多大的扩展?

在现有的以太坊主链上,每个区块的Gas线为1250万,每笔交易的字节在链上花费16个Gas。 这意味着,如果一个区块只包含一个 batch(假设这里使用 ZK Rollup,验证证明花费 500,000 Gas),那么这个 batch 可以包含 1200 万 / 16 = 750,000 字节的数据。 如上所述,Rollup 中的每笔 ETH 转账只需要 12 字节的存储空间,这意味着每批可以包含 62,500 笔交易。 目前以太坊主链出块间隔为13秒,这意味着实现的TPS约为4807(相比之下,以太坊主链上ETH转账的TPS约为1250000 / 21000 / 13 = 45)。

下表是其他一些应用场景的扩展效率。

应用场景 Rollup中单次对应操作上传到链上所需的字节数 以太坊主链上对应操作的Gas消耗量 最大扩容倍数 ETH转账 1221,000105xERC20 转账 16(多出来的4个字节用来表示token ) ~50,000187x Uniswap Transaction ~14 (4 bytes for sender + 4 bytes for receiver + 3 bytes for transaction amount + 1 byte for maximum price + 1 byte for miscellaneous) ~100,000428x privacy-protected withdrawal operations (Optimisic Rollup) 296 (root index 4 bytes + nullifier 4 bytes + receiver 4 bytes + ZK-SNARK proof 256 bytes) ~380,00077x privacy-protected withdrawal operation (ZK Rollup) 40 (root index 4 bytes + nullifier 32 bytes + receiver 4 bytes) ~ 380,000570x

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

应该指出的是,由于多种原因,这些数字实际上过于乐观。 最重要的原因是一个区块中只包含一个batch几乎是不可能的,因为会有多个不同的Rollup系统。 第二个原因是总会有存款和取款。 第三个原因是短期内 Rollup 的使用率可能较低,因此固定成本收费模式将占据主导地位。 但即使考虑到这些因素,100倍以上的扩张应该也不是什么难事。

那么如果我们想要达到1000-4000TPS(根据具体的应用场景而定)怎么办呢? 这需要 eth2 数据分片。 在这个提议中,每 12 秒创建一个 16MB 的存储空间,可以填充任何数据,系统将确保对这些数据的可用性达成共识。 这个数据空间可以被 Rollup 使用。 这个约 1398 kB/s 的数据吞吐量比当前以太坊主链约 60 kB/s 的吞吐量高出 23 倍。 从长远来看,数据容量有望进一步增长。 因此,使用eth2数据分片实现的Rollup的TPS可以高达10万,未来还会更大。

还有哪些未解决的挑战?

虽然Rollup的基本概念已经为人们所熟知,我们也确信Rollup本质上是可行和安全的,并且以太坊主网上已经部署了多个Rollup,但是Rollup在设计上还是有很多地方。 没有很好地探索,将以太坊生态系统的大部分完全纳入 Rollup 以利用其可扩展性仍然存在挑战。 一些主要挑战包括:

总结

Rollup 是一种新的强大的 layer-2 扩容范式,有望成为以太坊未来短期和中期(也可能是长期)扩容的基石。 以太坊社区对 Rollup 感到非常兴奋,因为与之前的 layer-2 扩展尝试不同,Rollup 可以支持通用的 EVM 代码,让现有的应用程序可以轻松迁移。 Rollup 通过做出关键妥协来实现这一点:它不是试图完全移动到链下,而是在链上保留关于每笔交易的少量数据。 (译者注:即不存在上述数据可用性问题)

Rollup 的种类很多,在设计上也有很多选择:使用欺诈证明的 Optimisitc Rollup,使用有效性证明的 ZK Rollup。 排序者可以是中心化参与者、去中心化自由参与者,或者介于两者之间的许多其他选项。 Rollups 仍然是一项处于早期阶段的技术,开发仍在快速进行,但它们确实有效,其中一些(特别是 Loopring、ZKSync 和 DeversiFi)已经运行了几个月。 期待未来几年在 Rollup 领域取得更多激动人心的成果。