主页 > 小米不能安imtoken > 以太坊扩容计划汇总

以太坊扩容计划汇总

小米不能安imtoken 2023-01-17 12:01:44

一篇文章了解以太坊扩容计划 Rollup

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

Rollup 在当前的以太坊社区中已经众所周知。 Rollup 是在可预见的未来扩展以太坊的关键解决方案。但究竟什么是汇总?您可以从这项技术中得到什么以及如何使用它?本文将尝试回答一些关键问题。

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

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

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

状态通道与等离子与汇总

Layer 2 扩展主要有三个选项:状态通道、等离子和汇总。这三个场景代表了三种不同的范式,每一种都有自己的优点和缺点。所有 layer 2 scaling 大致分为这三类(对于一些折衷方案如何分类存在争议,例如“validium”)(编者按:中文翻译)。

状态通道如何工作?

以太坊区块链钱包查询

另请参阅 statechannels.org

想象 Alice 为 Bob 提供网络连接服务。作为交换,Bob 向 Alice 支付 0.$001/MB 的 Internet 流量。 Bob 不需要支付第一层主链上的每一笔费用,双方使用如下两层方案。

首先,Bob 将 1 美元(稳定币,或等值的 ETH)存入智能合约。为了向 Alice 支付第一笔款项,Bob 签署了一张“票证”(一条链下消息),上面写着“0.$001”并将其发送给 Alice。为了进行第二次付款,Bob 签署了另一张写着“$0.002”的便条并将其发送给 Alice。依此类推,为每次付款重复此过程。当 Alice 和 Bob 完成交易后,Alice 可以用她的签名包裹最有价值的纸币,并在主链上发布(关闭通道)。智能合约验证 Alice 和 Bob 的签名。验证通过后,将 Bob 票据上标注的金额支付给 Alice,剩余金额(译者注:1 美元减去前者)返还给 Bob。如果 Alice 不愿意关闭频道(由于恶意或技术故障),Bob 可以发起提款挑战期(例如 7 天)——如果 Alice 不能在此期间提供 Bob 支付的账单以太坊区块链钱包查询,那么 Bob 可以取回之前的存储在智能合约中的所有资金。

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

等离子的工作原理

另见原始 Plasma 白皮书,Plasma Cash

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

Plasma 提供了比状态通道更强大的功能:您可以发送资产 对于从未加入 Layer 2 的用户而言,锁定资金也低得多。但这是有代价的:状态通道不需要存储任何数据当它们“正常”时进入主链,但 Plasma 要求每条链在一段时间内在主链上发布一次哈希值。此外,Plasma 链中的交易不是即时的,即必须等待一批交易(也称为 Plasma 块)证据(即 Merkle 根值)发送到主链。开。

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

汇总

另见:EthHub 对乐观汇总的介绍,EthHub 对 ZK 汇总的介绍

以太坊区块链钱包查询

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

在主链上存储数据是Rollup的关键因素(请注意:这与将数据存储在“IPFS”上不同,因为IPFS不同意存储数据,Rollup的数据必须存储在区块链上)。将数据存储在主链上并进行共识,任何人都可以在本地处理 Rollup 中的所有操作,包括欺诈检测、发起提款、生成批次等。由于不存在数据可用性问题,运营商如果作恶或作恶,受到的损失相对较小。下线(例如他们不能造成 1 周的退出延迟),同时也提供了谁有权下发批次的信息更多的可能性,同时也让 Rollup 更容​​易理解。更重要的是,不存在数据可用性问题意味着资产不需要与其所有者有明确的逻辑映射关系。这是以太坊社区对 Rollup 比其他 layer-2 扩展解决方案更兴奋的一个重要因素:Rollup 是通用的,例如 EVM 可以在 Rollup 中运行,这样就可以使用现有的以太坊应用程序,而无需编写新的应用程序。无需代码即可迁移到汇总。

Rollup 究竟是如何工作的?

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

任何人都可以在主链上为智能合约发起批量交易(transaction)。该批次是内部事务的一个 Rollup High 压缩批次,还包括旧状态根和新状态根(在旧状态根之上执行批量事务后生成的新状态根)。主链合约会检查旧状态根是否匹配新状态根。如果验证通过,主链上的旧状态根将更新为新的状态根。

为了支持其他地方的存款和取款),一批交易的输入或输出可以是 Rollup “外部”的状态。如果批处理中有来自 Rollup 外部输入的交易,则此批处理操作会将资产从主链的其他地方转移到 Rollup 合约。如果批次中某笔交易的输出来自 Rollup 之外,则该批次将触发智能合约中的提款操作,将资产从 Rollup 中取回主链。

整个过程就是这么简单!但还有一个细节。如何知道批处理执行完成后的状态根是正确的?如果有人可以在没有任何后果的情况下提交虚假的状态根,他们可以将所有资产转移给自己。这个问题很关键,因为这个问题有两种不同的解决方案,导致两种类型的汇总。

乐观汇总与 ZK 汇总

Rollup 的两种类型包括:

Optimistic Rollup,它使用欺诈证明来解决上述问题:主链的 Rollup 合约记录了该 Rollup 内部状态根更改的完整记录,以及每个批次的哈希(触发状态根更改)。如果有人发现某个批次对应的新状态根错误,他们可以在主链上发布该批次生成的新状态根错误的证明。合约验证proof,如果验证通过,则batch之后的所有batch交易都回滚。

ZK Rollup,使用有效性证明解决了上述问题:每个批次都包含一个称为 ZK-SNARK 的密码证明(例如,使用 PLONK 协议,证明可以通过该批次从旧状态获得新状态。处理操作后转换 ZK-SNARK 并不是必须的,实际上在 ZK Rollup 中,由于批量交易信息存储在主链上,而这些信息正是密码证明系统中所证明的,所以 ZK Rollup 本身没有零知识 零知识的 ZK Rollup 称为 ZK ZK Rollup)。无论批量计算有多大,都可以在主链上高效地验证证明。

以太坊区块链钱包查询

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

总的来说,我个人的看法是,Optimisitc Rollup 在实现通用 EVM 方面可能会在短期内获胜,ZK Rollup 可能会在简单的支付、转账和其他特定应用中获胜。但从中长期来看,随着 ZK-SNARK 技术的进步,ZK Rollup 将在所有应用场景中获胜。

分析欺诈证明

Optimistic Rollups 的安全性取决于这样的想法,即如果有人将无效批次发布到 Rollup,任何已同步链的人都可以向主链报告欺诈 合约签发欺诈证明,证明批次无效并且应该回滚)。

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

保证的是,如果一个批次有错误并且之前的所有批次都是正确的,那么可以创建欺诈证明,证明该批次的结构是错误的。注意,如果rollup中有多个无效批次,最好尽量使最早的批次失效。当然可以保证的是,如果批次是正确的,则永远不可能创建该批次无效的欺诈证明。

如何实现压缩?

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

@ >

以太坊区块链钱包查询

Nonce:这个参数的目的是防止重放。如果一个账户状态的当前nonce是5,那么该账户下一笔交易的nonce参数一定是5,但是一旦交易处理完毕,账户状态的nonce就会递增到6,所以一个nonce为的交易5 将不会再打包。在 Rollup 中,我们可以完全省略 nonce,因为我们只需要从更新前的状态恢复 nonce;如果有人试图用更早的 nonce 重播交易,签名将无法验证,因为签名验证将使用更大的 nonce 数据。部分原因是 Rollup 可以采用更简单的高级编码技术,而当前的以太坊 RLP 浪费了每个值长度 1 个字节。 Rollup 还使用了一些非常巧妙的压缩技术。

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

这些压缩技术是 Rollup 扩展能力的关键。如果没有这些技术,Rollup 可能只能实现 10 倍左右的主链容量(虽然在某些计算密集型应用中,简单的 Rollup 实现的扩展已经很强大了),但是在使用压缩技术之后,扩展几乎所有应用程序的因子都可以超过 100 倍。

谁可以提交批次?

关于谁能在 Optimistic Rollup 或 ZK Rollup 中提交批次,已经有很多思想流派。一般来说,假设提交批次的用户必须质押大量押金,如果用户曾经提交欺诈批次(例如提交无效的状态根),这笔押金的一部分将被烧毁,另一部分奖励给提交欺诈证明的用户。但除此之外,还有很多可能性:

批量交易需要排序)

将批次与状态根提交分开

目前正在开发的一些Rollup使用“split-batch”(“split-batch”batch”)模式,即执行两层交易批次的提交行为和提交状态根的行为分开。这样做有一些关键优势。

您可以允许多个测序仪并行发布批次,以提高抗审查性,并减轻对某些批次将因其他批次进行预打包而无效的担忧。

如果状态根是欺诈性的,您可以回滚状态根并等待有人为同一批次提供新的状态根,而不是回滚整个批次。这样可以更好的保证事务发送者的事务不回滚。

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

以太坊区块链钱包查询

Rollup 会带来多大的扩展?

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

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

需要注意的是,由于某些原因,这些数字实际上过于乐观了。最重要的原因是一个块中只包含一个批次几乎是不可能的,因为会有多个不同的 Rollup 系统。第二个原因是存款和取款操作会一直存在。第三个原因是短期内 Rollup 的使用率可能会很低,因此固定成本的计费模式将占主导地位。但即使考虑到这些因素,扩展 100 倍以上应该也不难。最大扩容乘数计算方式:以太坊主链对应操作的gas消耗/(Rollup中对应操作需要上传的字节数*16)*1200万/1250万

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

还有哪些挑战?

虽然 Rollup 的基本概念现在众所周知,但我们也相当肯定 Rollup 本质上是可行和安全的,并且在以太坊主网上已经部署了多个 Rollup,但是 Rollup 在设计上还是有很多方面的等级。没有得到很好的探索,将以太坊生态系统的大部分引入 Rollup 以利用其可扩展性仍然存在相当多的挑战。一些主要挑战包括:

总结

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

Rollup 的种类很多,在设计上有很多选择:Optimisitc Rollup using Fraud Proof,ZK Rollup using Proof of Validity。分拣员可以是集中式角色、分散式自由角色或介于两者之间的许多其他选项。 Rollup 仍是一项早期技术,并且正在快速发展,但它们正在发挥作用,其中一些(特别是 Loopring、ZKSync 和 DeversiFi)已经运行了几个月。期待在未来几年在 Rollup 领域取得更多令人兴奋的结果。