# Smooth 模块化区块链系列教程(四): 命名空间默克尔树

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

---

### 概括

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

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

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

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

### 默克尔树

默克尔树每一个节点的值，都由其子节点的值相加，然后求哈希得到。

![Hash](https://storage.googleapis.com/papyrus_images/db42a2e17a4390edaebce0666f3b298ace97484f389ee10e48e3e898345e9f11.png)

Hash

当每一个子节点的数据发生变化，其父节点，父节点的父节点，…… ，一直到最上面的根结点，一整条向上的路径，数值都会发生变化。

因此，当交易数值发生篡改，只需比较最上方的根结点，即可检查出。

同时，根据这条路径，可以快速地找到被篡改的节点。

![Merkle Trees](https://storage.googleapis.com/papyrus_images/8bbf1ba99f53f24750b7c002c02c9a7b57a24431b0f4b980e0371d56858655aa.png)

Merkle Trees

比如在下图中，希望检查 Tx = hD 的交易，是否被成功写入区块。

只需要将标记为红色的 Tx = hC, Tx = hAB, Tx = hEFGH，三个交易逐层相加，然后得到最上层的 hABCDEFGH。

只需要比较最上层的 hABCDEFGH，就能检查：计算出来的默克尔根，是否与区块头部中的根哈希值一致。

如果成功匹配，就证明交易已经被成功计入了区块。

这种比较方式下，只需要 3 次，就可以实现验证，但如果没有默克尔证明的话，则需要七次。

因此在成千上万笔交易组成的区块链中，默克尔树大大提升了计算效率。

![Merkle Trees Computing](https://storage.googleapis.com/papyrus_images/7be94729dd409f7b3138e148d65769411db3ca6091d244f79c1fafc3b93b418c.png)

Merkle Trees Computing

### 命名空间默克尔树 Namespaced Merkle Trees

Celestia 将区块中的数据划分为多个命名空间，每个使用 DA 层的 dApp 只使用其中一个命名空间。

每个 dApp 只需要下载自己的数据，可以忽略其他 dApp 的数据。

DA 层必须能够证明，其提供的数据是完整的，即证明返回的数据，是当前命名空间下的所有数据。

因此 Celestia 使用命名空间默克尔树 (NMT)。

![Namespaced Merkle Trees](https://storage.googleapis.com/papyrus_images/32c243209448a4b10fbe654b58b8279b7cbe270dc5cb735c7186e884c99f004c.png)

Namespaced Merkle Trees

上图是一个高度为 3，含有 8 个数据块的 NMT，数据被划分为三个命名空间。

当 dApp 需要 Namespace 2 的数据，DA 层需要提供：数据块 D3，D4，D5 和 D6，节点N2，N8 和 N7 进行计算证明，这里默认所有 dApp 都是有 N14 数据的。这样一来，dApp 就能够检查 DA 所提供的数据是否是当前块数据的一部分。

也可以验证 DA 是否提供了 Namespace 2 的所有数据。比如，如果 DA 层仅提供数据块 D4 和 D5，那么 DA 还必须提供节点 N11 和 N12 的数据来证明。但是，dApp 可以通过检查两个节点的命名空间范围来识别数据不完整，因为 N12 和 N11 都由一部分 Namespace 2 中的交易组合得到。

### 引用

> 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)
> 
> 默克尔树与默克尔根详解: [https://academy.binance.com/zh/articles/merkle-trees-and-merkle-roots-explained](https://academy.binance.com/zh/articles/merkle-trees-and-merkle-roots-explained)

---

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