02-BTC-数据结构

目录

前言

比特币的数据结构 

哈希指针(Hash pointers)

默克尔树(Merkle tree)


前言

学习肖臻老师的《区块链技术与应用》公开课笔记,供学习参考。


比特币的数据结构 

哈希指针(Hash pointers)

比特币中最基本的结构就是区块链,区块就是一个个区块组成的链表。区块链与普通的链表的区别为:

  • 用哈希指针代替了普通的指针

区块链的第一个区块叫做创世块(genesis block),最后一个区块为最近产生的区块(most recent block),每一个区块都包含指向前一个区块的哈希指针,最后一个区块的哈希指针则保存在系统中。因为一个区块中的哈希指针是将前面整个区块的内容,包括其中的hash pointer合在一起取哈希值,所以一旦改变其中一个区块的内容,后面的区块的内容都要该改变。  因此,如果我们保留的最后一个哈希指针发生变化 ,则说明区块链中的内容发生了改变。

默克尔树(Merkle tree)

 默克尔树与普通的树的区别也是用哈希指针代替了普通指针。树的最后一层是数据块(data blocks),上面的内部节点都是哈希指针,第一层是根节点,其中根节点的区块也可取哈希为根哈希。 同区块链相同,只要记住根哈希值,就能检测出对树中任何部位的修改。

比特币中的各个区块之间用哈希指针连接,每个区块所包含的交易形成merkle tree,最下面一层的每个数据块实际上是一个交易,每个区块中都包含块头和块身(block header,block body)。块头中只有有根哈希值,块身中有交易的列表。

比特币中的节点分为两类:

全节点:保存整个区块的内容,包括块头和块身。

轻节点:只有块头。

 当需要向一个轻节点证明某交易是写入区块链时,需要使用merkle tree提供的merkle proof找到该交易的根节点与轻节点中的根节点进行对比,若一致则证明该交易写入了区块链。

Merkle proof:从交易所在的区块一直往上到根节点的路径。

PS:只有当一个数据结构是无环的,才能用哈希指针代替普通指针。

你可能感兴趣的:(区块链)