Celestia核心技术概览

Celestia 是一个模块化的数据可用性网络,支持下一代可扩展区块链架构 - 模块化区块链。 Celestia 通过将执行与共识解耦并引入新的原始数据可用性采样来进行扩展。

Celestia核心技术概览
一键发币: SOL | BNB | ETH | BASE | Blast | ARB | OP | POLYGON | AVAX | FTM | OK

Celestia 是一个模块化的数据可用性网络,可以根据用户数量安全地扩展,使任何人都可以轻松启动自己的区块链。

Celestia 支持下一代可扩展区块链架构 - 模块化区块链。 Celestia 通过将执行与共识解耦并引入新的原始数据可用性采样来进行扩展。

前者要求 Celestia 只负责排序交易并保证其数据可用性; 这类似于减少原子广播的共识。

后者为数据可用性问题提供了有效的解决方案,只需资源有限的轻节点从每个块中采样少量随机块来验证数据可用性。

有趣的是,参与采样的轻节点越多,网络可以安全处理的数据量就会增加,从而使区块大小增加,而不会同样增加验证链的成本。

1、单体式区块链 vs. 模块化区块链

区块链实例化复制状态机:无需许可的分布式网络中的节点将确定性事务的有序序列应用于初始状态,从而产生共同的最终状态。

换句话说,这意味着网络中的节点都遵循相同的规则集(即交易的有序序列)从起点(即初始状态)到终点(即共同的最终状态)。 状态)。 此过程确保网络中的所有节点都同意区块链的最终状态,即使它们独立运行。

这意味着区块链需要以下四个功能:

  • 执行需要执行正确更新状态的事务。 因此,执行必须确保仅执行有效的事务,即导致有效状态机转换的事务。
  • 结算需要一个执行层验证证据、解决欺诈纠纷以及在其他执行层之间架起桥梁的环境。
  • 共识需要就交易顺序达成一致。
  • 数据可用性(DA)需要使交易数据可用。 请注意,执行、结算和共识都需要 DA。

传统区块链,即单体区块链,在单个基础共识层中一起实现所有四种功能。 单一区块链的问题在于共识层必须执行许多不同的任务,并且不能仅针对其中一项功能进行优化。 因此,单一范例限制了系统的吞吐量。

作为一种解决方案,模块化区块链将这些功能在多个专用层之间解耦,作为模块化堆栈的一部分。 由于专业化提供的灵活性,该堆栈的排列方式有多种可能性。 例如,一种这样的安排是将四种功能分为三个专门层。

基础层由 DA 和共识组成,因此被称为共识和 DA 层(或简称为 DA 层),而结算和执行都移至各自层的顶部。 因此,每一层都可以专门化以最佳方式仅执行其功能,从而提高系统的吞吐量。 此外,这种模块化范例使多个执行层(即汇总)能够使用相同的结算和 DA 层。

2、Celestia 的数据可用性层

Celestia 是一个数据可用性 (DA) 层,为数据可用性问题提供可扩展的解决方案。 由于区块链网络的无需许可的性质,DA层必须为执行层和结算层提供一种机制,以信任最小化的方式检查交易数据是否确实可用。

Celestia DA 层的两个关键功能是数据可用性采样 (DAS) 和命名空间 Merkle 树 (NMT)。 这两个功能都是新颖的区块链扩展解决方案:DAS 使轻节点能够验证数据可用性,而无需下载整个块; NMT 使 Celestia 上的执行层和结算层能够下载仅与其相关的交易。

2.1 数据可用性抽样 (DAS)

一般来说,轻节点仅下载包含区块数据(即交易列表)的承诺(即 Merkle 根)的区块头。

为了使 DAS 成为可能,Celestia 使用二维 Reed-Solomon 编码方案对块数据进行编码:每个块数据被分成块,排列在矩阵中,并通过多次应用 Reed-Solomon 奇偶校验数据将奇偶校验数据扩展为扩展矩阵。 所罗门编码。

然后,为扩展矩阵的行和列计算单独的 Merkle 根; 这些Merkle root中的Merkle root被用作块头中的块数据承诺。

为了验证数据是否可用,Celestia 轻节点正在对数据块进行采样。

每个轻节点在扩展矩阵中随机选择一组唯一坐标,并在全节点中查询数据块以及这些坐标处相应的 Merkle 证明。 如果轻节点收到每个采样查询的有效响应,则很大概率保证整个区块的数据可用。

此外,每个收到的具有正确 Merkle 证明的数据块都会被传播到网络。 因此,只要 Celestia 轻节点一起采样足够的数据块(即至少是唯一的块),完整的块就可以由诚实的完整节点恢复。

有关 DAS 的更多详细信息,请查看原始论文

  • 可扩展性

DAS 使 Celestia 能够扩展 DA 层。 DAS 可以由资源有限的轻节点执行,因为每个轻节点仅采样一小部分块数据。 网络中的轻节点越多,它们可以共同下载和存储的数据就越多。

这意味着增加执行 DAS 的轻节点数量可以允许更大的区块(即更多交易),同时仍然保持 DAS 对于资源有限的轻节点来说是可行的。 然而,为了验证区块头,Celestia 轻节点需要下载中间 Merkle 根。

对于字节大小的块数据,这意味着每个轻节点必须下载字节。 因此,Celestia 轻节点带宽容量的任何改进都会对 Celestia DA 层的吞吐量产生二次方影响。

  • 错误扩展数据的欺诈证明

下载中间 Merkle 根的要求是使用二维 Reed-Solomon 编码方案的结果。 或者,DAS 可以采用标准(即一维)Reed-Solomon 编码进行设计,其中原始数据被分割成块并用附加的奇偶校验数据块进行扩展。 由于区块数据承诺是生成的数据块的 Merkle 根,轻节点不再需要下载字节来验证区块头。

标准里德-所罗门编码的缺点是处理错误生成扩展数据的恶意区块生产者。

这是可能的,因为 Celestia 不需要大多数共识(即区块生产者)诚实地保证数据可用性。 因此,如果扩展数据无效,即使轻节点正在采样足够的唯一块(即,至少对于标准编码和二维编码),原始数据也可能无法恢复。

作为一种解决方案,错误生成的扩展数据的欺诈证明使轻节点能够拒绝具有无效扩展数据的块。 此类证明需要重建编码并验证不匹配。 使用标准里德-所罗门编码,这需要下载原始数据,即字节。 相比之下,使用二维里德-所罗门编码,仅需要字节,因为仅足以验证扩展矩阵的一行或一列。

2.2 命名空间默克尔树 (NMT)

Celestia 将块数据划分为多个命名空间,每个命名空间对应使用 DA 层的每个应用程序(例如,汇总)。 这样,每个应用程序只需要下载自己的数据,而可以忽略其他应用程序的数据。

为此,DA 层必须能够证明所提供的数据是完整的,即返回给定命名空间的所有数据。 为此,Celestia 使用命名空间默克尔树 (NMT)。

NMT 是一棵 Merkle 树,其叶子按名称空间标识符排序,并且修改了哈希函数,以便树中的每个节点都包含其所有后代的名称空间范围。 下图显示了高度为 3(即八个数据块)的 NMT 示例。 数据被划分为三个命名空间。

当应用程序请求命名空间 2 的数据时,DA 层必须提供数据块 D3、D4、D5 和 D6 以及节点 N2、N8 和 N7 作为证明(请注意,应用程序已经具有块头中的根 N14) )。

因此,应用程序能够检查提供的数据是否是块数据的一部分。 此外,应用程序可以验证是否提供了命名空间 2 的所有数据。 例如,如果DA层仅提供数据块D4和D5,则它还必须提供节点N12和N11作为证明。 但是,应用程序可以通过检查两个节点的命名空间范围来识别数据不完整,即 N12 和 N11 都有命名空间 2 的后代部分。

有关 NMT 的更多详细信息,请参阅原始论文

2.3 为 DA 构建 PoS 区块链

Celestia DA 层由 PoS 区块链组成。 Celestia 将此区块链称为 celestia-app,这是一个提供交易以促进 DA 层的应用程序,并使用 Cosmos SDK 构建。 下图展示了celestia-app的主要组件。

Celestia-app 的主要组件

celestia-app 构建在 celestia-core 之上,celestia-core 是 Tendermint 共识算法的修改版本。 与原始Tendermint版本相比,celestia-core 的更重要的变化包括:

  • 启用块数据的纠删码(使用二维里德-所罗门编码方案)。
  • 将 Tendermint 用于存储区块数据的常规 Merkle 树替换为命名空间 Merkle 树使上面的层(即执行和结算)仅下载所需的数据(有关更多详细信息,请参阅下面描述用例的部分)。

有关 Tendermint 变更的更多详细信息,请查看 ADRs。 请注意,celestia-core 节点仍在使用 Tendermint p2p 网络。

与 Tendermint 类似,celestia-core 通过 ABCI++ 连接到应用层(即状态机),ABCI++ ABCI(应用程序区块链接口)的重大演进。

celestia-app 状态机是执行 PoS 逻辑并实现 DA 层治理所必需的。

然而,celestia-app 与数据无关——状态机既不验证也不存储 celestia-app 提供的数据。

3、Celestia-app 事务的生命周期

用户请求 celestia-app 通过发送 PayForBlobs 交易来提供数据。 每个此类交易都包含发送者的身份、可用的数据(也称为消息)、数据大小、命名空间和签名。 每个区块生产者将多个 PayForBlobs 交易批量放入一个区块中。

不过,在提议区块之前,生产者会通过 ABCI++ 将其传递给状态机,其中每个 PayForBlobs 交易都被分割成一条命名空间消息(在下图中用 Msg 表示),即数据以及命名空间 ID 和可执行文件 交易(下图中用 e-Tx 表示)不包含数据,而只是一个承诺,可以在以后用来证明数据确实可用。

因此,块数据由划分为命名空间和可执行交易的数据组成。 请注意,一旦提交了区块,Celestia 状态机只会执行这些事务。

接下来,区块生产者将区块数据的承诺添加到区块头中。 正如“Celestia 的数据可用性层”页面中所述,承诺是中间 Merkle 根的 Merkle 根(即扩展矩阵的每一行和每一列都有一个)。 为了计算此承诺,区块生产者执行以下操作:

  • 它将可执行事务和命名空间数据拆分为多个共享。 每个共享都由一些以命名空间为前缀的字节组成。 为此,可执行事务与保留的命名空间相关联。
  • 它将这些份额排列成方阵(按行)。 请注意,份额被填充到下一个 2 的幂。 结果的大小平方称为原始数据。
  • 它使用上述二维里德-所罗门编码方案将原始数据扩展为方阵。 扩展共享(即包含擦除数据)与另一个保留的命名空间相关联。
  • 它使用上述 NMT 计算扩展矩阵的每一行和每一列的承诺。

因此,区块数据的承诺是 Merkle 树的根,叶子是命名空间 Merkle 子树森林的根,扩展矩阵的每一行和每一列都有一个。

3.1 检查数据可用性

为了增强连接性,celestia-node 通过一个单独的 libp2p 网络(即所谓的 DA 网络)增强了 celestia-app,该网络服务于 DAS 请求。

轻节点连接到 DA 网络中的 celestia 节点,监听扩展区块头(即区块头以及相关 DA 元数据,例如中间 Merkle 根),并对接收到的区块头执行 DAS(即询问 对于随机数据块)。

请注意,虽然建议这样做,但执行 DAS 是可选的——轻节点可以相信与区块头中的承诺相对应的数据确实是由 Celestia DA 层提供的。 此外,轻节点还可以向celestia-app提交交易,即PayForBlobs交易。

在对块头执行 DAS 时,每个轻节点都会从扩展矩阵和相应的 Merkle 证明中向 Celestia 节点查询大量随机数据块。 如果所有查询均成功,则轻节点接受区块头有效(从 DA 角度来看)。

如果至少一个查询失败(即未收到数据块或 Merkle 证明无效),则轻节点会拒绝该块头并稍后重试。 重试对于处理漏报是必要的,即尽管块数据可用,但块头被拒绝。 例如,这可能是由于网络拥塞而发生的。

或者,尽管数据不可用,轻节点也可以接受块头,即误报。 这是可能的,因为健全性属性(即,如果一个诚实的轻节点接受一个可用的块,那么至少一个诚实的完整节点最终将拥有整个块数据)在概率上得到保证(有关更多详细信息,请查看原始数据) 纸)。

通过微调 Celestia 的参数(例如,每个轻节点采样的数据块的数量),可以充分降低误报的可能性,从而使区块生产者没有动机保留区块数据。

4、数据可检索性和修剪

Celestia 等数据可用性层的目的是确保区块数据可证明地发布,以便应用程序和汇总可以知道其链的状态并存储该数据。 数据发布后,数据可用性层本质上并不能保证历史数据将被永久存储并保持可检索。

在本文档中,我们讨论了 Celestia 中数据可检索性和修剪的状态,以及为 Rollup 开发人员提供的一些提示,以确保可以同步新的 Rollup 节点。

Celestia-node 中的数据可检索性和修剪
Celestia-node的主分支目前不支持剪枝,因此所有桥接节点和全存储节点目前默认存储和服务所有历史数据,并充当归档节点。

然而,对修剪节点的支持存在于一个实验性功能分支中,预计该分支将在主网之后不久登陆主网。 数据新近度窗口(在此期间修剪的节点将存储数据 blob)目前建议为 30 天。

早于新近度窗口的数据 blob 将被已修剪的节点修剪,但将继续由不修剪数据的归档节点存储。 只要归档节点存在于公共网络上,轻节点就能够从归档节点查询命名空间中的历史 blob 数据。

当数据新近度窗口建立后,轻节点只会对数据新近度窗口内的区块进行数据可用性采样。

4.1 汇总的建议做法

Rollup 可能需要访问历史数据,以便允许新的 Rollup 节点通过重放历史块来重建最新状态。 一旦数据在 Celestia 上发布并保证可用,汇总和应用程序就负责存储其历史数据。

虽然只要公共 Celestia 网络上存在存档节点,就可以通过在历史区块上使用 celestia-node 中的 GetAll API 方法继续执行此操作,但汇总开发人员不应依赖此作为访问历史数据的唯一方法, 因为存档节点不能保证免费服务历史数据请求。 以下是访问历史数据的一些其他建议方法。

  • 使用专业的归档节点或数据提供商。 预计专业基础设施提供商将提供对存档节点的付费访问,可以检索历史数据,例如使用 GetAll API 方法。 这比仅仅依赖公共 Celestia 网络上的免费存档节点提供了更好的保证。
  • 共享汇总节点的快照。 汇总可以共享其数据目录的快照,这些快照可以由引导新节点的用户手动下载。 这些快照可以包含汇总的最新状态和/或所有历史块。
  • 添加对历史块同步的点对点支持。 共享快照的手动版本较少,其中汇总节点可以实现对块同步的内置支持,其中汇总节点通过对等网络相互下载历史块数据。
  • 命名空间固定。 未来,celestia-node 预计将允许节点选择“固定”它们希望存储并可供其他节点使用的选定名称空间中的数据。 这将允许汇总节点负责存储其数据,而无需实现自己的点对点历史块同步机制。

5、数据可用性常见问题解答

什么是数据可用性?

数据可用性回答了这个问题:这些数据是否已发布? 具体来说,节点在收到添加到链中的新块时将验证数据可用性。 节点将尝试下载新块的所有交易数据以验证可用性。 如果节点可以下载所有交易数据,那么它就成功验证了数据可用性,证明该区块数据确实已发布到网络上。

模块化 VS 单片

正如您将看到的,像 Celestia 这样的模块化区块链采用了其他原语,允许节点更有效地验证数据可用性。 数据可用性对于任何区块链的安全都至关重要,因为它确保任何人都可以检查交易分类账并验证它。 当扩展区块链时,数据可用性变得尤其成问题。 随着区块变大,普通用户下载所有数据变得不切实际,因此用户无法再验证链。

什么是数据可用性问题?

当新提议的区块的交易数据无法下载和验证时,就会出现数据可用性问题。 区块生产者发起的这种类型的攻击称为数据扣留攻击,即区块生产者扣留新区块的交易数据。

由于交易数据被保留,节点无法更新到最新状态。 这种攻击可能会产生多种后果,从中断链条到获得窃取资金的能力。 后果的严重性将取决于区块链的类型(L1 或 L2)以及数据可用性是保留在链上还是链下。 数据可用性问题通常出现在 L2 扩展解决方案(如汇总和验证)周围。

Celestia 中节点如何验证数据可用性?

在大多数区块链中,验证数据可用性的节点通过下载一个块的所有交易数据来实现这一点。 如果他们能够下载所有数据,则他们已经验证了其可用性。 在 Celestia 中,轻节点可以使用一种新机制来验证数据可用性,而无需下载一个块的所有数据。 这种用于验证数据可用性的新原语称为数据可用性采样。

什么是数据可用性抽样?

数据可用性采样是轻节点验证数据可用性的一种机制,而无需下载一个块的所有数据。 数据可用性采样(DAS)的工作原理是让轻节点对小部分块数据进行多轮随机采样。 随着轻节点完成更多轮的块数据采样,它增加了数据可用的信心。 一旦轻节点成功达到预定的置信水平(例如 99%),它将认为块数据可用。

想要更简单的解释吗? 查看此主题,了解数据可用性采样就像掷硬币一样。

Celestia 对数据可用性采样做出了哪些安全假设?

Celestia 假设有最小数量的轻节点对给定的块大小进行数据可用性采样。 这种假设是必要的,以便全节点可以从采样和存储的数据轻节点的部分重建整个块。 所需的轻节点数量将取决于块大小 - 对于更大的块,假定运行更多的轻节点。

轻节点做出的第二个值得注意的假设是它们连接到至少一个诚实的完整节点。 这确保了他们可以收到错误纠删码块的欺诈证明。 如果轻节点没有连接到诚实的全节点,例如在日食攻击期间,它无法验证该块是否构建不当。

为什么为了安全需要块重构?

在 Celestia 中,块需要进行纠删码,以便有冗余数据来帮助数据可用性采样过程。 然而,负责对数据进行纠删码的节点可能会错误地执行此操作。 由于 Celestia 使用欺诈证明来验证纠删码是否正确,因此需要完整的块数据来生成错误的编码欺诈证明。

可能存在验证者只向轻节点而不是全节点提供数据的情况。 如果全节点没有能力从轻节点存储的部分数据重建完整的块,它们将无法生成错误的编码欺诈证明。

什么是数据存储?

数据存储涉及存储和访问过去交易数据的能力。

模块化 VS 单片

数据存储和检索需要用于多种目的,例如:

  • 读取之前交易的信息
  • 同步节点
  • 索引和提供交易数据
  • 检索 NFT 信息
数据存储存在什么问题?

数据存储的问题是过去的交易数据是否可以存储并在以后成功检索。 无法检索历史交易数据可能会导致问题,例如用户无法访问有关其过去交易的信息或无法从创世同步的节点。 幸运的是,有关存储和访问过去数据的假设很弱。 用户只需访问区块链历史记录的单个副本即可访问历史交易数据。 换句话说,数据存储安全是 N 个诚实假设中的 1 个。

数据可用性和数据存储之间有什么区别?

数据可用性是指验证新区块的交易数据是否公开且可用。 相反,数据存储涉及存储和访问旧区块中过去的交易数据。

区块链状态在哪里适合这个?

到目前为止,所有内容都是关于交易数据的,但区块链状态是一个相关的主题。 状态与交易数据不同。 具体来说,状态就像网络的当前快照,其中包括有关帐户余额、智能合约余额和验证器集信息的信息。 国家规模引起的问题本质上与数据可用性和可检索性问题不同。

为什么 Celestia 不鼓励存储历史数据?

大多数区块链不会激励数据存储,因为区块链不应该有责任保证过去的数据将永远可检索。 另外,数据存储问题只需要单方为用户存储和提供数据,这并不是一个强问题。 因此,Celestia 的目的是提供一种安全且可扩展的方式来验证数据的可用性。 一旦数据被验证为可用,存储和检索历史数据的工作就留给需要该数据的其他实体。 幸运的是,外部各方有自然的动机来存储历史数据并向用户提供历史数据。

如果没有奖励谁可以存储历史数据?

有多种类型的参与者可能会存储历史数据。 其中一些包括:

  • 提供对过去交易数据的访问的区块浏览器。
  • 为过去的数据提供 API 查询的索引器。
  • 需要某些流程的历史数据的应用程序或汇总。
  • 希望保证能够访问其交易历史记录的用户。
区块链可以做哪些事情来提供更强的数据可检索性保证?
  • 根据节点存储的交易数据量和对其服务的数据请求量来奖励节点(某些数据存储区块链就是这种情况,例如 Filecoin)。
  • 将交易数据发布到数据存储区块链上,以激励历史数据的存储和服务请求。

原文链接:Overview of Celestia

DefiPlot翻译整理,转载请标明出处

通过 NowPayments 打赏