Celestia 是一个数据可用性层 DA Layer。
Celestia 的 2 个特性是数据可用性采样 (DAS) 和命名空间默克尔树(NMT)。
DAS:轻节点无需下载完整的区块数据,即可验证区块的数据可用性。
NMT:使得 Celestia 上的执行和结算层,只能够下载与它们相关的交易。
RS 编码定义:在原始数据中取多个点求冗余进行扩充,当接收器收到足够多正确的数据点后,即使数据中存在部分缺失和损坏,也可以恢复原始数据。
RS 编码在 DAS 中的应用:轻节点只下载,包含交易列表默克尔根(commitment)的区块头部,即可验证数据可用性。

原始区块数据 Block Data:
Header:交易列表的 Merkle root。
Data:交易原始数据。
对原始区块数据 Block Data 进行二维 R-S 扩展编码:
将 Block Data 划分为 k x k 矩阵。
保留奇偶校验数据,将 k x k 矩阵,多次通过 R-S 编码,扩展为 2k x 2k 矩阵。
提取 2k 行的 Merkle Roots 和 2k 列 Merkle Roots,合并构成 4k 个单独的 Merkle Roots,并将合并后的 Merkle Roots 称作:Merkle Root of Merkle Roots,这就是扩展后区块头部中的数据承诺 Commitment。
Celestia 轻节点对 2k × 2k 的扩展后数据块进行采样:
每个轻节点,在 2k x 2k 的扩展矩阵中随机选择一组坐标。
向这些坐标对应的全节点发起请求:请求数据块,和相应的 Merkle Root。
如果轻节点的每一个采样请求,都可以接收到有效的响应,则整个区块的数据是大概率可用的。
由于 R-S 编码的特性,只要 Celestia 轻节点采样足够多的数据块,全节点就可以恢复原始的块数据。
虽然单个轻节点计算资源有限,但也正因此,轻节点的硬件门槛没有那么高,网络中可以有很多的轻节点,每个轻节点只需对块数据的一小部分进行采样。
所以网络中的轻节点越多,它们可以下载和存储的数据就越多。
所以网络中的轻节点越多,区块容量也可以更大,即可以包含更多的交易。
为了验证区块头部,Celestia 轻节点需要下载 4k 个 Merkle Root。所以轻节点的吞吐量,也决定了 Celestia DA 层的吞吐量。
1D Reed-Solomon(RS) Encoding:将数据分为 k 份,从而进行扩容,扩容后得到 2k 的 Merkle Root,这时轻节点不再需要下载 O(n) 字节来验证块头。
但 1D 缺点在于,不容易处理恶意生成扩展数据的区块生产者。
因为 Celestia 不需要大多数诚实来保证数据可用性。 因此,如果扩展数据无效,原始数据可能无法恢复。
这时,采用 Fraud Proofs 可以拒绝具有无效扩展的区块,Fraud Proof 需要重建编码并验证是否匹配。
采用 1D R-S 编码的 Fraud Proofs,需要下载完整的原始数据来进行验证,复杂度为 O(n)。
而采用 2D R-S 编码,无需上述的 Fraud Proofs,只需对扩展矩阵中的一列,或一行进行计算,即可验证,复杂度为 O(n)。
所以通常采用 2D R-S 编码。
Celestia's Data Availability Layer: https://docs.celestia.org/concepts/how-celestia-works/data-availability-layer

