BTC中使用的指针并非是寻常链表中的指针,而是哈希指针。指针存储的是数据的地址,而哈希指针存储着地址和哈希值。由于保存哈希值,因此可以查看改数据是否被篡改。

一个一个区块相连形成区块链,与链表类似,区别是将指针改为哈希指针。系统中会产生第一个区块称为创世区块(genesis block) 最后一个区块为最近产生的区块,系统中存着最后一个区块的哈希值。

后一个区块中的哈希值是对前一个区块的所有内容取哈希,包括前一个区块中的H()。如果其中一个区块的数据被改动,其后面的所有区块中保存的H()都会改变,系统中的H()也会改变,因此,可以利用系统中存储的最后一个区块的哈希值判断数据是否被篡改。这个性质可以让节点不必存储所有的区块,只需存储最近的区块,当需要其他区块时,可以向其它节点要,根据自己保存区块的哈希值来判断其它节点提供的区块是否正确。
底层为Date Block,其中存储着交易,中间为Hash Pointers,最上一层为根节点。每个数据区块的哈希值存储在上一层,根节点的哈希值被保存起来,该哈希值可以验证交易是否被篡改。

每个区块分为块头和块身。
Block Header
存储着MerkleTree的根哈希值,没有交易的具体内容,只有根哈希值。
Block Body
含有交易列表。
全节点存储了交易的Mekle Tree, 轻节点只存储着根节点的哈希值。轻节点想知道黄色交易是否已经被写入区块链中,它需要向全节点请求获得H()红色而轻节点可以计算出H()绿色,两者组合可以计算出上一级的H(),最终可以算出根哈希值,与轻节点存储的根哈希值比较,即可验证交易是否在此Mekle Tree中。


