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

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

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

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

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

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

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

Hash pointers哈希指针

哈希指针作用

(1)存地址(起始位置),普通指针都会有

(2)存结构体的哈希值,就可以知道内容是否被修改

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

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

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

Block chain is a linked list using hash pointers.

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

post image

Merkle tree

post image

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

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

Merkle tree的作用,提供Merkle proof

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

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

post image

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

post image

首先根据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