# Smooth 模块化区块链系列教程(三): 数据可用性采样

By [wiger.eth](https://paragraph.com/@wiger) · 2022-10-13

---

### 概括

Celestia 是一个数据可用性层 DA Layer。

Celestia 的 2 个特性是数据可用性采样 (DAS) 和命名空间默克尔树(NMT)。

DAS：轻节点无需下载完整的区块数据，即可验证区块的数据可用性。

NMT：使得 Celestia 上的执行和结算层，只能够下载与它们相关的交易。

### 2D Reed-Solomon(RS) Encoding

RS 编码定义：在原始数据中取多个点求冗余进行扩充，当接收器收到足够多正确的数据点后，即使数据中存在部分缺失和损坏，也可以恢复原始数据。

RS 编码在 DAS 中的应用：轻节点只下载，包含交易列表默克尔根(commitment)的区块头部，即可验证数据可用性。

![2D Reed-Solomon(RS) Encoding](https://storage.googleapis.com/papyrus_images/f51c14cb8445224608c1ac4962aca67aa4a99cf1351890b896a2e2aa7078b2ac.png)

2D Reed-Solomon(RS) Encoding

1.  原始区块数据 Block Data：
    
    1.  Header：交易列表的 Merkle root。
        
    2.  Data：交易原始数据。
        
2.  对原始区块数据 Block Data 进行二维 R-S 扩展编码：
    
    1.  将 Block Data 划分为 k x k 矩阵。
        
    2.  保留奇偶校验数据，将 k x k 矩阵，多次通过 R-S 编码，扩展为 2k x 2k 矩阵。
        
    3.  提取 2k 行的 Merkle Roots 和 2k 列 Merkle Roots，合并构成 4k 个单独的 Merkle Roots，并将合并后的 Merkle Roots 称作：Merkle Root of Merkle Roots，这就是扩展后区块头部中的数据承诺 Commitment。
        

### 数据可用性采样 Data Availability Sampling

Celestia 轻节点对 2k × 2k 的扩展后数据块进行采样：

1.  每个轻节点，在 2k x 2k 的扩展矩阵中随机选择一组坐标。
    
2.  向这些坐标对应的全节点发起请求：请求数据块，和相应的 Merkle Root。
    
3.  如果轻节点的每一个采样请求，都可以接收到有效的响应，则整个区块的数据是大概率可用的。
    

由于 R-S 编码的特性，只要 Celestia 轻节点采样足够多的数据块，全节点就可以恢复原始的块数据。

### 可扩展性 Scalability

虽然单个轻节点计算资源有限，但也正因此，轻节点的硬件门槛没有那么高，网络中可以有很多的轻节点，每个轻节点只需对块数据的一小部分进行采样。

所以网络中的轻节点越多，它们可以下载和存储的数据就越多。

所以网络中的轻节点越多，区块容量也可以更大，即可以包含更多的交易。

为了验证区块头部，Celestia 轻节点需要下载 4k 个 Merkle Root。所以轻节点的吞吐量，也决定了 Celestia DA 层的吞吐量。

### 不正确扩展数据的错误性证明 Fraud Proofs of Incorrectly Extended Data

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](https://docs.celestia.org/concepts/how-celestia-works/data-availability-layer)

---

*Originally published on [wiger.eth](https://paragraph.com/@wiger/smooth-3)*
