# 区块链技术与应用03-BTC数据结构 **Published by:** [kanikig.eth](https://paragraph.com/@kanikig-2/) **Published on:** 2022-10-28 **URL:** https://paragraph.com/@kanikig-2/03-btc ## Content 哈希指针哈希指针,相比于普通指针,除了保存结构体的地址,还有结构体的哈希值,可以检测结构体内容是否被篡改 每一个区块都包含前一个区块的哈希指针 tamper-evident log 区块中任何一处改动,指向最后一个区块的哈希指针的值就会改变。因此大部分节点可以不用储存整条链的数据,只要保存最近的一些区块即可。image-20221023170454933默克尔树merkle tree binary tree 也是用哈希指针代替了普通指针 只要根节点哈希值,就能检测整个树任何部位修改 block header 内有根哈希值 block blody 包含区块内容image-20221023171918529默克尔树的作用:merkle proof 全节点保存整个区块内容,轻节点只保存headerimage-20221023172131510需要证明的交易到根节点的路径,轻节点只需要向全节点请求红色的哈希,就可以往上算出根哈希。轻节点只需要把算出来的哈希和自己本身blockheader存储的根哈希对比,相等即证明该交易存在 这种证明也叫proof of membership/inclusion merkle proof 证明存在的复杂度是logN 证明不存在:如果叶节点不排序的话,除了全节点把整颗树发给轻节点遍历tx外(复杂度N),没有更高效的方法 将叶节点按tx的哈希值排序 sorted merkle tree,可以解决这个问题。 比特币没有用排序,因为他不需要作不存在证明。 将带证明的tx哈希值算出来,找到他相邻两个tx,(按假设他不存在?)都作merkle proof,如果两个算出来根节点数值都正确,则说明这两个tx是相邻的,中间没有存在交易,即交易不存在(logN) 哈希指针不能用于有环结构 ## Publication Information - [kanikig.eth](https://paragraph.com/@kanikig-2/): Publication homepage - [All Posts](https://paragraph.com/@kanikig-2/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@kanikig-2): Subscribe to updates - [Twitter](https://twitter.com/kanikig2): Follow on Twitter