USD:读懂 Bedrock:Optimism 落子布局 Rollup 生态的第一步_SDC

Bedrock是OPStack有史以来第一个正式版本的名称,作为一组免费和开源的模块化组件,它旨在为Optimism的发展提供动力。

改进总结

Bedrock在其前身的基础上进行了改进,主要包含:

使用经过优化的批量交易压缩以及将以太坊作为数据可用性层,从而降低交易费用;通过更好地处理L1重组,缩短了将L1交易打包到rollups中的延迟;通过代码重用来启用模块化证明系统;通过消除设计负债来提高节点性能。更低的费用

Bedrock使用了经过优化的数据压缩策略,以最大限度地降低数据成本。我们目前正在对这一变化的影响进行基准测试,但我们预计它将大幅降低费用。?

Bedrock还消除了向L1提交数据时与EVM执行相关的所有Gas成本,与之前版本的协议相比,这将额外减少10%的费用。?

更短的存款入账时间

Bedrock在节点软件中引入了对L1重组的支持,这大大减少了用户等待存款入账所需的时间。

该协议的早期版本最多可能需要10分钟来确认存款入账,而使用Bedrock后,我们预计存款会在3分钟内确认入账。

改进的模块化证明

Bedrock从OPStack中抽象出了证明系统,以便rollup可以使用故障证明或有效性证明来证明在rollup上输入后的正确执行,这种抽象也将允许使用Cannon来证明系统中的故障。?

改进的节点性能

通过在单个rollup「区块」中执行多笔交易,而不是之前版本中「每个区块一笔交易」的模型,节点软件性能因此得到了显著提高。

这使得MerkleTrie更新的成本能在多笔交易中进行分摊,在当前的交易量下,这会使状态数据的增长幅度每年减少大约15GB。

通过消除之前版本的协议中的技术负债,节点性能也得到进一步提高,这包括不再需要一个单独的「数据传输层」节点来为L1编制索引,并更新节点软件以有效地查询来自L1的交易数据。

改进的以太坊等效性

Bedrock从一开始就被设计成尽可能与以太坊「一致」,先前版本协议中与以太坊的多项偏差已被消除,包括:

「每个区块一笔交易」的模型;自定义操作码以获取L1的区块信息;在JSON-RPCAPI中分离L1/L2费用字段;ETH余额的自定义ERC20表示形式。Bedrock还增加了对EIP-1559、区块链重组和L1上存在的其他以太坊功能的支持。

中信出版:中信书店正积极推行与各大行的数字人民币试点工作:2月11日消息,中信出版在互动平台表示,中信书店正积极推行与各大行的数字人民币试点工作。(财联社)[2022/2/11 9:44:56]

设计原则

Bedrock被构建为模块化和可升级的设计,同时可以复用以太坊的现有代码,并尽可能达成?100%以太坊等效的目标。

模块化

通过使用定义良好的接口和版本控制方案,Bedrock可以轻松地更换OP堆栈中的不同组件,并添加新功能。

这就允许其借助一个灵活的架构,适应以太坊生态系统的未来发展,例如:

rollup节点与执行客户端分离;模块化防故障设计。代码复用

Bedrock尽可能地使用现有的以太坊架构和基础设施,这种方法使OPStack能够从以太坊主网使用的经过实战测试的代码库中继承安全性和林迪效应优势。

您会在整个设计中找到这样的示例,包括:

最少修改的执行客户端;EVM合约而不是预编译的客户端代码。以太坊等效性

Bedrock旨在最大程度地兼容现有的以太坊开发人员体验,但由于L1和rollup之间的根本差异,也存在一些例外情况:费用模型的不同、更快的出块时间以及包含L1存款交易的特殊交易类型。

这些例外情况包括:

旨在证明最小修改的以太坊执行客户端的故障证明;以太坊执行客户端的代码重用,以供L2网络中的节点和排序器使用。协议

Rollups建立在数据可用性的基础上,在最常见的配置中,rollup协议从两个主要信息来源派生出「规范的L2链」:

交易数据由定序器发布到L1;存款交易由账户和智能合约提交到L1上的桥接合约。以下是该协议的基本组成部分:

通过直接与L1上的智能合约交互,将存款写入「规范的L2链」;提款是写入「规范的L2链」,并隐式触发与L1上智能合约和账户的交互;Batches是与rollup上的batches相对应的数据写入;区块推导是如何解释L1上的数据读取以理解「规范的L2链」;证明系统定义了L1上发布的输出根的最终性,以便它们可以被执行。存款

存款是L1上的一笔交易,并将包含在rollup中。根据定义,存款被保证包含在「规范的L2链」中,作为防止审查或控制L2的一种手段。

从L1传递的任意消息

声音 | 火币日本CEO陈海腾:日本正积极推动区块链技术落地应用:2020年1月11日,火币大学全球区块链领导者课程GBLP东京模块的授课在一桥大学一桥讲堂开课,火币日本CEO陈海腾为学员详细解读日本区块链产业。

陈海腾透露日本正积极推动区块链技术和实体经济的快速融合。同时,数字资产在日本也有各种支付场景的案例。

目前,在日本52190家店铺可以直接接受数字资产,其中包括电器连锁店Bic Camera、旅行连锁店HIS、六本木的奢侈品店等高知名度的商家。日本东日本公司发行公共交通卡“Suica”(西瓜卡),也正在考虑使用数字资产充值,该卡的发行量7500万张,支持使用的商铺高达58万家 。此外,火币日本也通过区块链加公益的方式,为受到火灾的世界遗产冲绳首里城进行募捐。[2020/1/11]

存款交易是作为存款的一部分进行的rollup交易。通过Bedrock,存款是完全通用的以太坊交易,例如以太坊上的账户或智能合约可以创建「存款」合约。

Bedrock定义了一个在L1上可用的存款合约:它是一个智能合约,L1帐户和智能合约可以与之交互以写入L2。L2上的存款交易是从该存款合约发出的交易中派生出来的,其中包括预期参数,例如from、to和data。

有关详细信息,请参阅存款合约协议规范部分。

在L1上购买有担保的L2Gas?

Bedrock还明确了Gas燃烧机制和存款费用市场,存款交易在L2上花费的Gas是通过Gas燃烧在L1上购买的。

这种Gas具体是在费用市场上购买的,并且在单个L1区块中提供给所有存款交易的Gas总量有一个硬性上限,该机制用于防止拒绝服务攻击,这种攻击可能发生在将交易从L1写入L2时,因为这些交易在L2上耗费大量Gas,但在L1上却很便宜。

提供给存款交易的Gas有时被称为「有担保的Gas」。GuaranteedGas的独特之处在于它是通过在L1上燃烧Gas来支付的,因此是不可退还的。

且每单位有担保的L2Gas所要求的必须燃烧的L1Gas总量,取决于EIP-1559式收费机制报告的L2Gas价格。此外,用户根据计算费用机制更新所花费的L1Gas数量获得动态Gas津贴。

如需更深入的解释,请阅读存款部分的协议规范。

提款

提款是在L2上发起并由在L1上执行的交易完成的跨层交易。值得注意的是,L2账户可以使用提款来调用L1合约,或将ETH从L2账户转移到L1账户。

声音 | 邓建鹏:用区块链来治理区块链,积极推动区块链行业自治:中央财经大学法学院教授邓建鹏表示,引导区块链安全有序发展,首先就要制定标准,界定什么样的区块链是合规的。另外,积极推进法律代码化,“区块链本身就是一些代码,在代码研发、编制的时候,有关部门可以出台一些指引,要求在编制代码时适当地把一些法律的要件或者一些要素编到代码里面去,实现法律代码化,以链制链,用区块链来治理区块链,这样就不需要执法人员去额外地监管区块链”。此外,邓建鹏还认为,要积极推动区块链行业的自治,让行业协会来制定治理章程,在治理章程的基础上,再考虑制定相关法律法规。(法制日报)[2019/11/11]

提款是通过在L2上调用MessagePasser预部署合约启动的,该合约在其存储中记录了消息的重要属性,然后通过调用OptimismPortal合约在L1上完成提款,以证明包含此提款消息。

这样,提款和存款就不一样了:提款交易必须使用L1上的智能合约来完成,而不是依赖于区块派生出来的信息。

分两步的提款过程

提款证明验证错误是过去几年许多跨链桥黑客攻击事件的根本原因。Bedrock版本在先前版本的提款过程中引入了一个额外的步骤,旨在为这些类型的错误提供额外的防御设计。

在分两步的提款过程中,每次提款必须在最终退出前7天提交与提款对应的Merkle证明,这种新的安全机制给了监控工具整整7天的时间来查找和检测无效的提款证明。

在此期间如果发现提款证明无效,就可以在资金丢失之前部署智能合约修复,这大大降低了跨链桥妥协的风险。

有关详细信息,请参阅提款协议规范部分。

批次交易

在Bedrock中,为L1和L2之间的消息传递定义了一种有线格式,这种有线格式的设计目的是将写入L1的成本和软件复杂性降到最低。

优化数据压缩

为了优化数据压缩,L2交易列表被组织到对象组中,每个channel的最大规模能够在可配置参数中定义,最初将设置为9.5M,这些channel预计将使用压缩功能进行压缩并提交给L1。

batch并行提交

为了并行化来自向L1提交压缩channel数据的定序器消息,channel被进一步分解为「channelframes」,这些「channelframes」是可以适合单个L1交易的压缩channel数据块。?

声音 | 惠州市经信局局长:积极推动区块链等信息技术发展:10月23日消息,据惠州日报消息,日前,市经信局党组书记、局长吴欣接受记者采访时表示,市经信局将抓住机遇,大力推动包括新能源汽车在内的先进装备制造业发展。

同时,积极开展我市5G产业及应用、智能网联汽车创新发展等专题研究,加强对区块链等新一代信息技术的研究,争取在数字经济等新兴产业方面取得突破。[2018/10/23]

假设「channelframes」是相互独立的,并且顺序是已知的,那么由定序器发送到L1的以太坊交易可以并行发送,从而最大限度地降低了定序器软件的复杂性,并允许填充L1上所有可用的数据空间。

最小化以太坊Gas

Bedrock删除了L1系统在称为「batchertransactions」的交易中向L1提交channel数据所使用的所有执行Gas。之前发生在L1智能合约上的所有验证逻辑都被移动到了区块派生逻辑中。相反,「batchertransactions」被发送到以太坊上的单个EOA地址,称为「batchinboxaddress」。

Batches仍需接受有效性检查,batche中的单个交易也是如此,无效batches和有效batches中的无效单个交易被视为被丢弃并且与系统无关。

注意:以太坊将很快升级包含EIP-4844的新版本,它引入了一个单独的数据写入费用市场,并增加了以太坊协议愿意存储的数据量上限,这一变化有望进一步降低与将数据发布到L1相关的成本。

?如需更深入的解释,请阅读有线格式规范。?

区块派生

在Bedrock中,该协议的设计旨在保证L1上存款的时间与「规范L2链」的区块派生有关。这样做是通过定序器、存款和L1区块属性将数据写入L1的纯函数。?

为了实现这一点,该协议定义了保证存款入账、处理L1和L2时间戳以及处理channel中的排序窗口以确保正确排序的策略。

保证存款入账?

区块派生协议的目标是这样进行定义的:

每个「L2区块间隔」过去后,必须有一个L2区块,且L2区块的时间戳与L1的时间戳保持同步。

在Bedrock中,引入了「sequencingepoch」的概念:它是由一系列L1区块派生出来的L2区块的范围,每个epoch由一个「epochnumber」标识,该「epochnumber」等于排序窗口中第一个L1区块的区块序号。受一些限制,epoch的大小可以有所不同。?

声音 | 狄刚:应积极推进以区块链技术服务于现实需求的应用落地:今日,中国人民银行数字货币研究所副所长狄刚发文对区块链的发展提出了五点看法和建议,一、从需求引导上,金融行业应该积极推进以区块链技术服务于现实需求的应用落地;二、积极关注公有链的发展,在参考借鉴技术创新的同时要考虑必要的监管平衡;三、应该积极构建完善的安全认证测评体系;四、在传统技术架构基础上结合区块链技术优点继承式的演进;五、对密码技术的发展给予高度关注与积极投入。[2018/9/4]

batch派生channel将与「epochnumber」相关联的L1区块的时间戳视为确定L2上交易顺序的锚点。该协议保证一个epoch的第一个L2区块永远不会落后于所匹配epoch的L1区块的时间戳。一个epoch的第一个区块必须包含L1上的存款,以保证存款将被处理。

请注意,在Bedrock版本中,L2上的区块间隔目标配置为2秒。?

处理L1和L2时间戳

Bedrock试图解决将L2上时间戳与存入交易中存在的L1上时间戳进行协调的问题。

它通过允许一个很短的时间窗口来进行排序,以便在epoch之间的L2交易上自由应用时间戳来实现这一点。

排序窗口是L1区块的序列,从中可以导出epoch。一个排序窗口中,其第一个L1区块的编号N包含epoch的「batchertransactions」。?

排序窗口包含区块,其中取决于排序窗口的大小:一个固定的rollup级别配置参数必须至少为2,增加它会为定序器提供了更多关于存款的L2交易排序机会,降低它为定序器提交「batchertransactions」引入的更严格时间窗口。这是在创造MEV机会和增加软件复杂性之间的权衡。

称为「最大定序器漂移」的协议常量控制一个区块在其?epoch?内可以具有的最大时间戳,有了这种漂移,定序器就可以在连接到L1出现临时问题时保持活跃。

区块派生管道

「规范的L2链」可以从头开始处理,方法是从L2创世状态开始,将L2链起始设置为第一个epoch,然后处理所有排序窗口,以便根据以下简化的顺序确定定序器batches和存款的正确顺序管道:

故障证明

在定序器处理一个或多个L2区块后,从这些区块中执行交易计算得出的输出将需要用L1写入,以实现L2到L1消息传递的无信任执行,例如提款等。

在Bedrock中,输出以树形结构的形式进行哈希处理,从而最大限度地降低了证明输出捕获的任何数据片段的成本。提议者定期向L1提交作为整个「规范L2链」的Merkle根的输出根。?

OPStack的未来升级应该包括一个故障证明变体的规范,其中包含绑定,以激励提议者提出正确的输出根。

有关完整详细信息,请阅读?L2输出根提案部分的协议规范。?

执行

在Bedrock中,OPStack通过镜像以太坊执行层和共识层之间的分离,在很大程度上不得不依赖于以太坊指定的技术关注点分离。

所以Bedrock以同样的方式引入了执行客户端和rollup节点的分离。

执行客户端

执行客户端是定序器和其他类型的节点操作员运行以确定「规范L2链」状态的系统。它还执行其他功能,例如处理入站交易和点对点通信,以及处理系统状态以处理针对它的查询。

借助Bedrock,OPStack旨在重用以太坊自己的执行客户端规范及其许多执行操作。在此版本中,Bedrock展示了对以太坊客户端go-ethereum的极其有限的修改,其差异小于2000行代码。

存在差异的根本原因有两个:处理存款交易和收取交易费用。

处理存款交易

为了在rollup中表示已存入的交易,引入了一种额外的交易类型。执行客户端实现这个新的交易类型是根据EIP-2718类型的交易标准。

收取交易费用

Rollups从根本上说还有两种与交易相关的费用:

一个是定序器费用。使用与以太坊相同的Gas表和相同的EIP-1559算法计算操作定序器的成本,这些费用用于操作排序器的协议,并根据网络拥堵情况随时波动。

另一个数据可用性费用。数据可用性成本与将批次处理交易写入L1相关,这些费用旨在支付定序器向L1提交批次交易所需支付的费用。

在Bedrock中,费用的数据可用性部分是根据称为GasPriceOracle的rollup系统智能合约中的信息确定的,该智能合约在区块派生过程中,是根据从每个epoch开始时插入的L1区块属性中检索到的Gas价格信息进行更新。

Bedrock指定在使用JSON-RPC时将这两种费用加到一个字段中。

rollup节点

与以太坊不同,Bedrock没有PoS共识。相反,「规范的L2链」的共识是由区块派生定义的。OPStack的执行客户端与一个新组件通信,该组件实现了称为rollup节点的区块派生,该节点使用与以太坊完全相同的引擎API与执行客户端通信。

rollup节点是一个无状态组件,负责通过读取L1上的数据和存款来推导系统的状态。在Bedrock中,rollup节点可用于对来自用户或其他汇总节点的传入交易进行排序,或者通过单独依赖L1来验证在L1上发布的已确认交易。

rollup节点的多种用途概述如下:

验证「规范的L2链」

运行rollup节点的最简单模式是只遵循「规范的L2链」。在这种模式下,rollup节点没有对等节点,严格用于从L1读取数据并根据区块派生协议规则对数据进行解释。

这种节点的一个目的是根据协议定义验证由其他节点共享或发布在L1上的任何输出根是否正确。此外,打算将输出根提交给L1的提议者自己可以使用optimism_outputAtBlock生成他们需要的输出根,并返回对应于L2输出根的32字节哈希值。

为此,节点应该只需要跟随「最终确定」的区块头。术语「finalized」指的是以太坊PoS共识,而「最终确定」的L2区块头是仅从「最终确定」的L1区块派生的「规范L2链」的区块头。

参与L2网络

使用rollup节点的最常见方法是参与其他rollup节点的网络、跟踪L2的进程和状态。在这种模式下,rollup节点同时读取数据和它从L1观察到的存款,将其解释为区块,并接受来自其他rollup节点网络中的用户和对等方的入站交易。

参与网络的节点可以使用它们正在同步的L2的安全和不安全区块头。

安全的L2区块头表示可以构建的rollup,其中每个区块都可以完全从参考L1链中导出,在L1必须「最终确定」之前;不安全的L2区块头包括尚未从L1派生的不安全区块。这些区块要么来自将rollup节点作为定序器操作,要么来自不安全的同步与定序器。这也称为「最新」区块头。在出现分歧的情况下,总是选择安全的L2区块头而不是不安全的L2区块头。当出现分歧时,该链的不安全部分将重组;在大多数情况下,对于终端用户应用程序,L2网络中的rollup节点将引用不安全的L2区块头。

交易排序

使用rollup节点的第三种方法是对交易进行排序。在这种模式下,rollup节点将在不安全的L2区块头之上创建新区块。目前,每个OPStack网络只有一个定序器。

定序器还负责将批次交易发布到L1,以便网络中的其他节点从中同步。

Batcher

定序器的作用是生产批次交易,为此,排序器可以运行rollup节点并具有单独的进程,这些进程通过从它们运行的??受信任的rollup节点读取来执行批处理。

这保证了OPStack的一个附加组件,称为批次交易处理程序,它从rollup节点读取交易数据并将其解释为要写入L1的批处理交易,batcher组件负责读取由定序器运行的rollup节点的不安全L2区块头,创建batcher交易,并将它们写入L1。

标准桥接合约

Bedrock还包括一对用于最常见类型存款的桥接合约,称为标准桥接合约。这些合约封装了存款和提款合约,为ETH和ERC-20代币的存款和提款提供简单的接口。

这些桥接合约的设计是在跨链桥的一侧为本地代币,另一侧包含一个可以管理铸造和销毁的封装代币,桥接原生代币涉及将原生代币锁定在合约中,然后在跨链桥的另一侧铸造等量的封装代币。

有关详细信息,请参阅标准跨链桥协议规范部分。

Cannon

虽然在Cannon中实现了防故障构建和验证,但故障证明游戏规范和将输出根挑战者集成到rollup节点中是后续规范里程碑的一部分。

延伸阅读

协议规范

协议规范定义了OPStack的技术细节,它是协议内部运作的最新事实来源。

Bedrock差异

要深入了解Bedrock与先前版本之间的差异,请参阅「Bedrock有何不同」。

责编:Lynn

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

区块博客

[0:15ms0-3:726ms