自学区块链(二)BTC的数据结构

BTC的数据结构

1、最基本的数据结构就是区块链(就是一个一个区块组成的链表),和普通的链表的区别是,使用的是哈希指针代替了普通指针。

2、默克尔树(Merkle tree,MT)是一种哈希二叉树


哈希指针

普通指针是存的结构体的在内存中的起始地址,而哈希指针除了要保存这个结构体的地址之外,还要保存这个结构体的哈希值H()。正因为保存了哈希值,所以能够防止结构体内容被篡改。


箭头就是哈希指针

H()这个哈希值是对整区块取的哈希。这个结构的好处是,不管区块中哪个点被篡改,都会导致我们最后保存的哈希值发生变化,我们保存的最后一个H()值可以验证出来前面数据的安全性。而普通链表修改一个元素对后面时不产生影响的。

正因为有这个性质,区块链中就可以不用保存全部区块,保存最近的一些区块,要用到其他区块时就找别的节点要,(由于去中心化)当存在恶意节点传过来篡改过的数据,可以通过这个性质来验证。

默克尔树(Merkle tree,MT)

是一种哈希二叉树,最上面的值去哈希root hash,可以保护整棵树的数据安全性(中间不管哪一步被篡改,都会对应不上root hash值)


BTC当中各个区块用hash指针相连,每个区块当中的交易信息就保存在默克尔树中,最底层的数据块其实就是交易信息。

节点分为两类:全节点和轻节点,手机上的钱包就属于轻节点的应用,全节点保存交易的所有信息(包括默克尔树),轻节点保存的只有block header(默克尔树的根哈希值在这),轻节点在需要验证交易是否在这个默克尔树上的,需求向全节点发送请求,全节点会发送一个merkle proof给轻节点验证(给出旁边的交易的哈希值)。

你可能感兴趣的:(自学区块链(二)BTC的数据结构)