Celestia : OP 堆栈的模块化数据可用性

    简介自去年发布以来,OPStack在汇总开发人员中获得了巨大的吸引力。它被创建新汇总的开发人员和Caldera和Conduit等模块化基础设施提供商所接受,使开发人员能够快速启动他们自己的rollups。正如去年的公告所述,模块化是OPStack愿景的一个基本方面:EachlayeroftheOPStackisdescribedbyawell-definedAPI,tobefilledbyamoduleforthatlayer.[...]WanttoswapoutEthereumforCelestiaasadataavailabilitylayer?Sure!WanttorunBitcoinastheexecutionlayer?Whynot!OPStack的每一层都由定义良好的API描述,由该层的模块填充。[...]想要将以太坊换成Celestia作为数据可用性层?当然!想要运行比特币作为执行层?为什么不!Optimism快速接近的Bedrock升级将模块化OPStack的执行层和证明系统,从而实现与未来欺诈和有效性证明的兼容性。受此启发,CelestiaLabs一直专注于进一步推动OPStack的模块化。

    因此,今天,我们很高兴地宣布OPStack的模块化数据可用性(DA)接口的Beta版发布,这是OPLabs关注开发人员反馈的第一个OPStackMod。该接口允许开发人员定义DA层并从他们喜欢的任何区块链继承安全性,无论是以太坊、Celestia还是比特币。开发人员今天可以开始试验使用Celestia进行DA并“定居”在以太坊上的OPStack版本。Caldera将很快发布Taro测试网,它允许开发人员和用户使用ModularDA试用OPStack的第一个公共测试网。数据可用性层是rollup架构的基础,确保独立验证rollup链所需数据的可用性。下面我们将探讨OP堆栈中数据可用性的基础知识,以及我们如何通过定义良好的DA接口将其模块化以从L1发布和检索数据。OP堆栈中的数据可用性:今天OPStack如何处理当今的数据可用性?出于我们的目的,我们深入研究了两个基本组件,Rollup节点和Batcher,如下所述。Rollup节点Rollup节点是负责从L1块(及其相关的收据)派生出正确的L2链的组件。

    rollup节点检索L1块,过滤数据交易(通常以交易calldata的形式),并从该数据中导出正确的L2链。Batcher——批处理提交者批处理提交者,也称为批处理者,是将L2排序器数据提交给L1以供验证者使用的实体。rollup节点和batcher都在一个循环中工作,使得batcher新提交的L2块数据由rollup节点从L1中检索,并用于派生下一个L2块。批处理程序提交的每个事务都包含calldata,它是L2排序器数据,分为称为帧的字节,是Optimism中数据的最低抽象级别。用于OPStack的模块化DA接口在为OPStack创建模块化DA接口时,我们的目标很简单:使汇总开发人员能够将任何区块链指定为其数据可用性层,无论是以太坊、Celestia还是比特币。在没有这样的接口的情况下,新DA层的每次集成都可能需要开发人员实现和维护OPStack的一个单独分支。OPStack已经包含在代码库中指定L1Chain和L2Chain的抽象,允许我们为数据可用性链建模一个新的与区块链无关的接口,我们称之为DAChain。使用下面定义的接口,开发人员可以实现DAChain来读取和写入任何底层区块链甚至像S3这样的集中式后端的数据。[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]编写阶段以下为接口的Celestia实现编写示例概述了与批处理程序的集成:SimpleTxManager.send是负责创建和发送实际交易的函数,它被修改为调用WriteFrame将帧写入Celestia并返回一个引用。

    然后将引用作为calldata提交到批处理收件箱地址,以代替通常的帧数据。[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]读取阶段以下是与rollup节点集成的接口的Celestia实现的概述:DataFromEVMTransactions是负责从交易列表中返回帧数据的函数。它被修改为使用从批处理收件箱calldata中检索到的帧引用来实际获取帧并将其附加到返回数据。[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]请注意,对NamespacedData的调用返回在给定BlockHeight提交的所有blob的字节切片数组,因此我们只返回我们感兴趣的TxIndex。将Celestia集成为DA层显示与Celestia+OP堆栈集成相比的OP堆栈架构的图表。通过对Rollup节点和批处理程序进行一些小的修改,我们可以使OPStack使用Celestia进行DA。这意味着派生L2链所需的所有数据都可以作为本地blob数据在Celestia上提供,而不是发布到以太坊,尽管一个小的固定大小的帧引用仍然作为批处理程序calldata发布到以太坊。帧参考用于使用celestia-node‌轻节点在Celestia上查找相应的帧。如何整合运作?

    编写阶段如上所述,批处理程序将L2排序器数据作为称为帧的字节提交到以太坊L1上的批处理收件箱合约地址。我们保留批处理程序和calldata事务以保证帧的排序,但我们用固定大小的帧引用替换calldata中的帧。什么是参考帧?它是对Celestia数据交易的引用,该交易已成功将帧数据作为Celestia的一部分包含在内。我们通过在批处理服务中嵌入一个celestia-node轻节点来做到这一点。每当有新的batch等待提交时,我们首先使用轻节点向Celestia提交数据事务,然后在batchercalldata中仅提交帧引用。读取阶段在读取阶段,我们做相反的事情,即我们使用批处理事务calldata中的帧引用来解析它并从Celestia检索相应的实际帧数据。同样,我们在rollup节点中嵌入了一个celestia-node轻节点来查询它的交易。在派生L2链时,rollup节点现在透明地从轻节点读取数据,并能够继续构建新区块。轻节点只下载由rollup提交的数据,而不是像以太坊那样下载整个链。展望欺诈证明是Optimism后Bedrock路线图的关键部分,我们希望探索升级我们的OPStackxCelestia集成,以在以太坊主网上使用欺诈证明。为此,我们可以利用量子引力桥(QGB),它将跨链DA证明中继到以太坊,以启用链上验证汇总数据已在Celestia上可用,以便汇总数据可以在欺诈证明。这将允许OPStackRollup直接利用Celestia提供的DA保证。