区块链技术与应用03-BTC数据结构

Play Video

哈希指针

哈希指针,相比于普通指针,除了保存结构体的地址,还有结构体的哈希值,可以检测结构体内容是否被篡改

每一个区块都包含前一个区块的哈希指针

tamper-evident log

区块中任何一处改动,指向最后一个区块的哈希指针的值就会改变。因此大部分节点可以不用储存整条链的数据,只要保存最近的一些区块即可。

image-20221023170454933
image-20221023170454933

默克尔树

merkle tree

binary tree

也是用哈希指针代替了普通指针

只要根节点哈希值,就能检测整个树任何部位修改

block header 内有根哈希值

block blody 包含区块内容

image-20221023171918529
image-20221023171918529

默克尔树的作用:merkle proof

全节点保存整个区块内容,轻节点只保存header

image-20221023172131510
image-20221023172131510

需要证明的交易到根节点的路径,轻节点只需要向全节点请求红色的哈希,就可以往上算出根哈希。轻节点只需要把算出来的哈希和自己本身blockheader存储的根哈希对比,相等即证明该交易存在

这种证明也叫proof of membership/inclusion

merkle proof 证明存在的复杂度是logN

证明不存在:如果叶节点不排序的话,除了全节点把整颗树发给轻节点遍历tx外(复杂度N),没有更高效的方法

将叶节点按tx的哈希值排序 sorted merkle tree,可以解决这个问题。

比特币没有用排序,因为他不需要作不存在证明。

将带证明的tx哈希值算出来,找到他相邻两个tx,(按假设他不存在?)都作merkle proof,如果两个算出来根节点数值都正确,则说明这两个tx是相邻的,中间没有存在交易,即交易不存在(logN)

哈希指针不能用于有环结构