# 《区块链技术与应用》02 BTC 数据结构

By [Minna Yu](https://paragraph.com/@minna-yu) · 2022-06-15

---

**这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理，以及部分延伸的思考。文末附有公开课链接。**

**本篇内容主要回答以下几个问题：**

1、区块链和普通的链表区别在哪里？

2、区块链是如何使用哈希指针实现历史内容的不可篡改的？

3、Merkle tree的特点是什么？在区块链中可以有什么样的实际应用？

4、全节点和轻节点的区别是什么？轻节点如何实现数据验证？

### Hash pointers哈希指针

**哈希指针作用**

（1）存地址（起始位置），普通指针都会有

（2）存结构体的哈希值，就可以知道内容是否被修改

**也就是说哈希指针与普通的指针的区别在于，多加了一个哈希值的存储。**

**区块链就是一个个区块组成的链表。**

区块链和普通的链表的区别，用的是哈希指针。

Block chain is a linked list using hash pointers.

**整个区块的内容一起取哈希，如果历史的内容有篡改，最后的哈希值就对不上，所以这样的结构可以保证数据的不可篡改。**

![](https://storage.googleapis.com/papyrus_images/256c7f6f23ea9305cbd4f3761b59843df75933b1a3f92e23dc5365fb3e76fdac.png)

### Merkle tree

![](https://storage.googleapis.com/papyrus_images/53924937aeed01f57593cb30f141b7ff3a29f00e9a5a58c56a5866b776616a11.png)

Merkle tree结构的好处，只要存了root hash 根哈希值，就可以检测出整个链表中任何的修改

每个区块分为块头block header和块身block body，header存了区块的根哈希值，body里面有交易的列表，最下面的数据块，里面是transaction。

**Merkle tree的作用，提供Merkle proof**

区块链分全节点，轻节点，有的轻节点只存header

对于轻节点的交易，想要知道是不是在链上记录了，就需要merkle proof，就是下图里面涂了颜色的路径。

![](https://storage.googleapis.com/papyrus_images/87f62c204abcff86c7f55e4c1b7e24dd1cb3d03356075fba2541c515cd70503f.png)

最上面的轻节点（类似钱包应用）存储了橘色的根哈希值，要如何知道最下面的黄色交易tx是否被记录了呢？

![](https://storage.googleapis.com/papyrus_images/4660cbea1a4e795184933d2d6e026e71152e77b11b0e2cffd7d2721b5f12d8b9.png)

首先根据tx本地计算出最下面第一个绿色H（），结合全节点请求的红色H（）往上一层计算出H（），再结合全节点红色的H（），往上得出绿色的H（），再结合全节点的H（），计算出根哈希值

\*\*Merkle proof就是在这个过程中计算需要用到的哈希值。\*\*发生交易的tx这边的人给轻节点证明，自己进行了交易

Proof of membership/inclusion 对数级别的计算量，要证明某个交易存在，效率比较高

如果要进行Proof of non-membership 不存在某个交易

方法一：每个都计算一下，不存在就是没有，线性的计算量

方法二：sorted merkle tree对哈希值进行排序。再把要证明的哈希值进行对比，就是对数级别的计算量

**视频原文地址**

  

[https://www.bilibili.com/video/BV1Vt411X7JF?spm\_id\_from=333.337.search-card.all.click&vd\_source=6807dc8dcddb18fe6db9d949c12b670c](https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c)

---

*Originally published on [Minna Yu](https://paragraph.com/@minna-yu/02-btc)*
