区块链技术与应用(二): 比特币的数据结构
比特币数据结构中最重要的概念就是哈希指针。普通指针存储的是某个结构体在内存中的地址,而哈希指针,除了要存地址之外,还要存整个结构体的哈希值。
比特币数据结构如下:
Genesis block:创世区块
most recent block:最近创建的区块
如图:每个区块都包含指向前一个区块的哈希指针。最后一个区块也有哈希指针,保存在系统里。
注意:某个区块的哈希指针是计算该区块之前的一个区块包括其哈希指针一起计算得出的。通过这个数据结构可以实现防篡改日志。比如有一个人篡改了一个区块的内容,会导致其哈希值与后一个区块的哈希指针对不上了,所以还得篡改后一个区块的哈希指针,但篡改后再后一个区块的的哈希值就対不上了。所以无法篡改,只要记住最后一个块的哈希指针, 就能判断整个区块是否被更改。
普通链表,改一个节点对其他节点没有影响,区块链则是牵一发则动全身。
有这个性质之后,比特币中一些节点就没有必要保存整条区块链的内容,只用保存最近的几千个区块。如果你要用到前面的区块,则向其他节点索要。节点可能有恶意,所以要判断给你的区块是否是正确的,用到哈希指针的性质了。
如果你要用C区块的内容,但你只保存了A区块及以后的区块,向其它节点索要之后,节点给你,你根据C区块的内容计算是否等于A中哈希指针,等于则为正确区块。
比特币另外一个数据结构就是merkletree(略)。