通过对 Celestia 创始人博士毕业论文及 Celestia 前身 Lazyledger 白皮书的研究,解读 Celestia 的工作流程、费用和应用方式。
原文标题:《Celestia 数据可用性》
整理:CFG Labs、W3. Hitchhiker
本文由 CFG Labs 核心团队和 W3. Hitchhiker 共同完成编译,大部分内容截取于 9 月 15 日晚第十次 Office Hour。
总览:
作者介绍:W3. Hitchhiker,CFG Labs 核心贡献者,独立的加密研究团队,旨在通过第一性原理思维和链上数据支持发现尖端技术和创新项目。此前在二级市场,偏主观,非套保,对冲。从 Defi 中积累了经验。逐步对一级也开始感兴趣,同时也可以有效地与项目的沟通,找到投资方法和理念。目前整个团队 ( 人员 ) 在 50+。团队有三个部门,技术部门,筹码部门,和投研部门。投研部门包括三个负责技术的同事,其中包括任泓毅和刘必成。也是这次的分享嘉宾。我们主要看偏底层的基础设施类项目。我们对于 DA 层项目,Layer2 的 Rollups,ZK 等下个周期的技术创新比较感兴趣。去年年底了解到 Celesita 之后,我们希望通过一级市场,技术输出等方式为社区做些贡献。我们花了半个月的时间翻译了 Mustafa (Celestia 的创始人)的 200 多页的博士毕业论文,该论文也融合了 Lazyledger(Celestia 前身)的白皮书。Mustafa 对于我们的工作还比较认可的,也在社区积累了很多的朋友,包括 Chloe &Frank from CFG Labs。这次受到他们的邀请,为大家解读这个项目。本次主要分享团队成员有 Rex, 任泓毅以及刘必成。

DA 的提出,也是比较火热的话题。我们可以看到以太坊发展中的性能瓶颈,不仅是交易确认速度(十几秒),高手续费等。所以我们要拓展区块链的性能。以太坊社区里面的讨论方向包括,1)一个是 L2,用 Rollups 做执行和计算,Rollups(执行层)的并行,加速链的效率;2) 第二个是链的扩容问题,目前链都认为区块扩容是最有效的处理整个网络效率的方案(State Bloat)。为了能够使得网络更好地被利用,Vitalik 在 end game 中也提到过扩容(降低费用)和 Rollups 的方案的提出。但是随着扩容方案的提出,性能上升无疑也会给共识节点提出额外的要求,为了保证网络的安全性,验证节点通过(区中心化)验证的方式实现去中心化。共识节点,为了实现 1)高性能 2)支持更多的 rollups 加入,需要通过验证的去中心化方式去实现(全节点 vs 轻节点)。数据可用性(Celestia)是非常契合这些要求的。以太坊合并之后第一步是推广的 EIP-4844 也就是 Proto- Danksharding,以及 danksharding 也是强调数据可用性这块,足可见社区对 DA 的重视。

DA 官方的解释就是通过数据抽样,保证数据在网络上的可用性。数据可用性如何理解呢?回到之前的点,可以理解下之前提到过的去中心化验证。本质上就是轻节点在不参与共识的情况下,不需要存储全部数据,也不需要及时的维护全网的状态。对于这种节点,需要高效的方式确保数据可用性和准确。接下来介绍下 DA 与共识在数据安全上的差异。因为区块链的核心在于数据的不可更改。区块链能够保证数据在全网的数据是一致的。共识节点为了保证性能,会有更为中心化的趋势。其他节点需要通过 DA 获得经过共识确认的可用数据。这里的共识(交易内容以及交易顺序的一致性)与其他网络的共识(交易的排序,验证等)并不完全一致。

Celestia 遵从了 Cosmos 的理念,开放,独立主权,是专注于数据可用性的模块化公链,也做了共识(Tendermint)(没有提供执行环境)。主要有以下几个特点:
下文介绍包括 Celestia 工作流程、与 Danksharding 对比、近期大家关心的话题、Mamaki 测试网的现状、Optimint、Celestia 应用方式、系统的验证、Celestia 的费用、社区解答等环节。
Celestia 的实现思路主要分为三个部分讲解,与其他链相似的共识,P2P 的交互就不介绍了,这里主要着重讲下差异点:
1)区块构建上的一些差异。首先定义一个个 shares。shares 中包括交易以及这批交易相关的证明的数据。Cosmos SDK ( 质押,治理,账户体系),Tendermint 里面的共识和执行是分开的。Celestia 本身是没有执行层,也没有结算层。所以交易和状态的关系在 Celestia 中和以太坊是不一样的,以太坊的状态是交易执行完成之后对整个状态树的变更。而 Celestia 设想的状态不是交易执行,而是交易整个存储在链上的状态。(share)之前的实现他们已经推翻了,在找新的方案。这个 shares 很关键,欺诈证明,抽样都需要。所以 Shares 可以理解为交易及交易相关的证明数据,构建成了一个固定长度的,固定格式的数据块。

Shares 介绍完以后,就是他的区块和其他链的区块的区别,就是他的 data root 是什么呢。Data Root 我们这里也是按照白皮书来说明(可能跟实际实现不同,只是讲概念)。这个图是 2K*2K 的矩阵。首先看下这个矩阵如何来的。首先是 K*K 的矩阵,K 是设定的参数,随时可以修改。我准备好了 K*K 的矩阵之后,我会把之前的 shares,包含交易相关的数据,每个 shares 放在矩阵的格子里面。这样我会把 k*k 矩阵的格子填充起来。不够的话就补足,补一些无效数据。如果够了的呢,就等下一个区块。这个 K 的大小意味着 Celesita, 单个区块可以容忍的最多的交易容量,即区块容量。Shares 里面这个交易可以是一笔,也可以多笔,同一个批次。固定长度意味着交易是有上限的。K*K 确定了 Celestia 的单个区块的容量。具体多大需要关注其发展。把这个 shares 放在 K*K 矩阵之后,首先通过横向的 reed solomon 的方式进行拓展,从 K*K 变成 2K*K 的矩阵。K*K 是原始数据,扩展数据是 2K*K 减原来的 K*K=K’*K’。然后再把原来的 K*K 做纵向扩展,得到 K”*K”,再把 K”*K”做横向扩展。通过这种编码方式,最终得到 2K*2K 个行列的方阵,就把 shares 编码到了 data 里面。这个 data 的构成就是这样进行的。DataRoot 是什么呢。我们看到 2K*2K 的矩阵,我们可以把每个行每个列都构建成默克尔树。默克尔树就会有默克尔根。我们就会得到 2k+2K 的默克尔根。然后把 24K 的默克尔根再构建成默克尔树,最后得到默克尔树的根。我们就看到 dataroot, 就是 data 的根。Data root 放在状态头(区块头)中。Celesita 的 DA 都是围绕 DATA root 来的,区块的比较关键的数据是 Data Root。怎么确认数据和数据相关的交易,怎么生成这些 shares,目前在重构。
2)既然我们已经在区块头中准备了这些 root,接下来我们看看 DA 是如何工作的。

共识节点和共识节点的交互这里就不具体阐明了,P2P 的方式。DA 涉及到的是共识节点和轻节点的交互问题。不能参与共识的节点统一称为轻节点。传播主要看 DA 和轻节点之间的流程。我们看是如何交互的。共识节点经历过一段共识 ( 数据确认)之后,会产生新的区块,会把区块头,包括 data root 发送给轻节点。轻节点收到 data root 之后。就需要进行随机采样,我们看到 2K*2K 矩阵,在 2K*2K 矩阵中其中挑选一组坐标,打包成一组集合。这个集合就是本次抽样的一个集合。将抽样的集合发送给他们相连的共识节点。请求共识节点将坐标对应 shares 发送给轻节点。共识节点就有两种回复。一种我有你请求的,那么 1)shares,以及 2)shares 在 data root 中的默克尔证明一起回复给轻节点,轻节点收到回复之后,会去做默克尔证明,证明这个 shares 在这个 data root 里面的,之后就会接受 shares。当他把他的抽样都收到回应之后。这个时候就基本上认可了这个区块,认可了这个数据是可用的。Dataroot 都是链的交易,能够回应就说明了这些 Data 在网络上都是被共识节点认可的。如果某个共识节点没有回应,轻节点会把我收到的相关 shares 转发给对应的共识节点,帮助整个网络快速地收敛。P2P 网络,网络的扩大,共识节点确实收不到 / 收到比较慢共识结果。我轻节点可以通过这个机制,快速帮助对网络的传播。
有个问题,轻节点抽样一组坐标,没有说抽样多少个,2K*2K, 二维纠删码,只要抽样 K*K, 是可以完全恢复过来的。为什么没有明确的要求轻节点抽样这么多个。为什么没有明确给出呢。如果我们整个网络只有 1 个轻节点,确保数据一定被恢复过来,那么需要抽样 K*K,才能保证恢复原始数据。而实际上对于一条网络,肯定会有 N 个轻节点,可以将任务分摊给 N 个节点。官方官方文档也给到了计算公式。你抽样多少次,抽样多少个,和你得到数据可用的概率的计算公式。轻节点可以需要根据安全等级需求,选择自己去做一个数据采样的决定。同时在 Celestia 中,轻节点越多,块越大,网络执行效率就越高。如果只有 1 个轻节点,采样数据至少 K*K 个。如果有 K*K 的轻节点,理想情况下采样不重复,每个节点只需要抽样 1 次就可以了。整个网络的性能,每个节点的带宽,性能是一致的。节点越多,意味着抽样的总数越大的。这也可以解释节点越多,网络效率越高。
欺诈证明,为什么需要有欺诈证明,我们有了纠删码,抽样,理论上获得的数据。比如说我从十个共识节点抽样获得的数据,通过纠删码可以确定这些数据是十个节点给的。但是这个地方会有些问题,就是这十个节点都有没有给我们正确的数据,我们怎么来做呢。纠删码只能证明这些数据是他们想给我们的。但是需要验证他们想给我们的数据是否是正确,那么欺诈证明确保共识节点是按照设想规则给我们编码的。这就是为什么我们需要欺诈证明。欺诈证明就是来解决这些问题。证明节点通过抽样获得 shares,恢复的数据到底是对的,还是无效的。
欺诈证明的组成有三个点。
接下来我们介绍下欺诈证明是如何交互的?








【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
