比特币中的数据结构
看这一小节的时候Merkle Tree没有太看懂,要回去再看看!以及老师在课上提出的两个问题
这一讲讲解比特币中用到的数据结构
hash pointers(哈希指针)
1. 区块链
区块链相当于一个链表,与传统的链表不同的是,区块链的指针
是对前一个块的整体取hash算出来的,如果改变了区块链中某一个结点的值,后面所有的hash都对不上了,所以这是tamper-evident log
(多米诺骨牌)
所以说只保存最后一个结点的hash,然后判断这个hash是否修改,就可以判断前面的链是否被修改了。
也就是比如可以只保存最近3个区块,如果我需要更早的区块(比如倒数第4个),我算一下这块的hash值跟我保存的倒数第三块能不能接的上。
2. Merkle tree(默克尔树,可信树)
比较像B+树,非叶子结点不存值,只有叶子结点存的是区块,上面的只起一个索引的作用。
只要检测根结点的hash值是否变化,就可以检测树中任何地方的修改。跟上面的区块链一样,前面的修改了,后面的就会改变。
默克尔树就是下面发生了修改,上面就会改变,也是牵一发而动全身。
轻结点内只有一个hash header,也就是只有默克尔树的根结点的hash值。proof of membership如何向这个轻结点证明,我有一个交易是否存在于你的轻结点?(26min)
- 首先,我要给你一个merkle proof
(这玩意是什么啊,给出来的长什么样子?)
- 然后用Hash往上推,就可以用O(logn)的时间复杂度进行判断
proof of non-membership向这个结点证明,某个交易不存在这个merkle树中。
只要是无环的就可以表示,如果是有环的数据结构还用哈希指针的话就成循环依赖了。