原文:Javed Khan,celestia blog 编译:GWEI Research(DeFi之道)
简介
自去年发布以来,OP Stack 在汇总开发人员中获得了巨大的吸引力。它被创建新汇总的开发人员和 Caldera 和 Conduit 等模块化基础设施提供商所接受,使开发人员能够快速启动他们自己的rollups 。
正如去年的公告所述,模块化是 OP Stack 愿景的一个基本方面:
Each layer of the OP Stack is described by a well-defined API, to be filled by a module for that layer. [...] Want to swap out Ethereum for Celestia as a data availability layer? Sure! Want to run Bitcoin as the execution layer? Why not!OP Stack 的每一层都由定义良好的 API 描述,由该层的模块填充。 [...] 想要将以太坊换成 Celestia 作为数据可用性层?当然!想要运行比特币作为执行层?为什么不!
Optimism 快速接近的 Bedrock 升级将模块化 OP Stack 的执行层和证明系统,从而实现与未来欺诈和有效性证明的兼容性。
受此启发,Celestia Labs 一直专注于进一步推动 OP Stack 的模块化。因此,今天,我们很高兴地宣布 OP Stack 的模块化数据可用性 (DA) 接口的 Beta 版发布,这是 OP Labs 关注开发人员反馈的第一个 OP Stack Mod。该接口允许开发人员定义 DA 层并从他们喜欢的任何区块链继承安全性,无论是以太坊、Celestia 还是比特币。
开发人员今天可以开始试验使用 Celestia 进行 DA 并“定居”在以太坊上的 OP Stack 版本。 Caldera 将很快发布 Taro 测试网,它允许开发人员和用户使用 Modular DA 试用 OP Stack 的第一个公共测试网。
数据可用性层是 rollup 架构的基础,确保独立验证 rollup 链所需数据的可用性。下面我们将探讨 OP 堆栈中数据可用性的基础知识,以及我们如何通过定义良好的 DA 接口将其模块化以从 L1 发布和检索数据。
OP 堆栈中的数据可用性:今天
OP Stack 如何处理当今的数据可用性?出于我们的目的,我们深入研究了两个基本组件,Rollup 节点和 Batcher,如下所述。
Rollup 节点
Rollup 节点是负责从 L1 块(及其相关的收据)派生出正确的 L2 链的组件。 rollup 节点检索 L1 块,过滤数据交易(通常以交易calldata
的形式),并从该数据中导出正确的 L2 链。
Batcher——批处理提交者
批处理提交者,也称为批处理者,是将 L2 排序器数据提交给 L1 以供验证者使用的实体。 rollup 节点和 batcher 都在一个循环中工作,使得 batcher 新提交的 L2 块数据由 rollup 节点从 L1 中检索,并用于派生下一个 L2 块。
批处理程序提交的每个事务都包含calldata
,它是 L2 排序器数据,分为称为帧的字节,是 Optimism 中数据的最低抽象级别。
用于 OP Stack 的模块化 DA 接口
在为 OP Stack 创建模块化 DA 接口时,我们的目标很简单:使汇总开发人员能够将任何区块链指定为其数据可用性层,无论是以太坊、Celestia 还是比特币。在没有这样的接口的情况下,新 DA 层的每次集成都可能需要开发人员实现和维护 OP Stack 的一个单独分支。
OP Stack 已经包含在代码库中指定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节点和批处理程序进行一些小的修改,我们可以使 OP Stack 使用 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 路线图的关键部分,我们希望探索升级我们的 OP Stack x Celestia 集成,以在以太坊主网上使用欺诈证明。
为此,我们可以利用量子引力桥 (QGB),它将跨链 DA 证明中继到以太坊,以启用链上验证汇总数据已在 Celestia 上可用,以便汇总数据可以在欺诈证明。这将允许 OP Stack Rollup 直接利用 Celestia 提供的 DA 保证。