这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。
本篇内容主要回答以下几个问题:
1、区块链和普通的链表区别在哪里?
2、区块链是如何使用哈希指针实现历史内容的不可篡改的?
3、Merkle tree的特点是什么?在区块链中可以有什么样的实际应用?
4、全节点和轻节点的区别是什么?轻节点如何实现数据验证?
哈希指针作用
(1)存地址(起始位置),普通指针都会有
(2)存结构体的哈希值,就可以知道内容是否被修改
也就是说哈希指针与普通的指针的区别在于,多加了一个哈希值的存储。
区块链就是一个个区块组成的链表。
区块链和普通的链表的区别,用的是哈希指针。
Block chain is a linked list using hash pointers.
整个区块的内容一起取哈希,如果历史的内容有篡改,最后的哈希值就对不上,所以这样的结构可以保证数据的不可篡改。


Merkle tree结构的好处,只要存了root hash 根哈希值,就可以检测出整个链表中任何的修改
每个区块分为块头block header和块身block body,header存了区块的根哈希值,body里面有交易的列表,最下面的数据块,里面是transaction。
Merkle tree的作用,提供Merkle proof
区块链分全节点,轻节点,有的轻节点只存header
对于轻节点的交易,想要知道是不是在链上记录了,就需要merkle proof,就是下图里面涂了颜色的路径。

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

首先根据tx本地计算出最下面第一个绿色H(),结合全节点请求的红色H()往上一层计算出H(),再结合全节点红色的H(),往上得出绿色的H(),再结合全节点的H(),计算出根哈希值
**Merkle proof就是在这个过程中计算需要用到的哈希值。**发生交易的tx这边的人给轻节点证明,自己进行了交易
Proof of membership/inclusion 对数级别的计算量,要证明某个交易存在,效率比较高
如果要进行Proof of non-membership 不存在某个交易
方法一:每个都计算一下,不存在就是没有,线性的计算量
方法二:sorted merkle tree对哈希值进行排序。再把要证明的哈希值进行对比,就是对数级别的计算量
视频原文地址
