- hash指针与普通指针区别
用hash指针代替普通指针
-
数据结构一:区块链
区块中hash值是对前面区块block header做哈希操作而产生的。
区块链的特性:牵一发而动全身
只要记住最后系统保存的root hash通过区块链这种数据结构可以很容易检测出区块链中是否被改动。 -
数据结构二:Merkle tree
Merkle tree可以提供交易信息tx是否存在这颗Merkle tree中。 -
每个区块由区块头(block header)与区块身(block body)组成。
block header:存放根hash值; block body:存放交易列表;
-
比特币节点分为:全结点和轻结点。
> 全结点:保存整个区块的内容; > 轻结点:只保存block header;
question 由于轻结点只保存block header,那么轻结点是怎么知道交易tx在这颗Merkle tree下?
实现步骤:
1> 轻结点向全结点发送Merkle proof;
2> 全结点返回红色的哈希值;
Merkle proof可以证明Merkle tree中包含了某个交易。
question: 证明某个交易中不包含在这棵merkle tree中的空间复杂度,怎么证明,有没有简便的方法实现。
1> 将每个交易tx取hash;
2> 按哈希值进行排序;
3> 对待证明的tx交易取hash值,值设定为a;
4> 观察a在排好序的位置所在的区间;
若a在相邻的两个节点的中间,则证明这两个tx交易的merkle proof,从而证明了tx交易不在这颗merkle tree中,当然比特币中没有这种方式。