关于比特币中重要的数据结构

时间:2024-03-28 22:20:45

一、哈希指针(hash pointer)

我们通常所说的指针中保存对应数据的内存地址,哈希指针套用了这个概念,保存对应数据的哈希值就形成了哈希指针。如下图所示:
关于比特币中重要的数据结构

二、区块链(Blockchain)

Block chain is linked list using hash pointers.
区块链是使用哈希指针的链表。
关于比特币中重要的数据结构
如上图所示,第一个区块是创世区块(genesis block),后面是的区块保存前一个区块的哈希,最后一个是最新区块。
利用哈希函数的碰撞阻力特性,只要记住最新区块保存的哈希,就可以验证整个区块链是否被篡改。
利用这个数据结构就可以实现篡改证明日志(tamper-evident log)。

三、默克尔树(Merkle tree)

Merkle tree形似二叉树,不过是用哈希指针进行连接。
关于比特币中重要的数据结构
叶子节点保存交易数据tx的哈希值,每两个数据组成一组计算哈希,然后逐层计算,直到计算出Merkle Root哈希值,保存在区块头中,而中间过程计算的结果不用保存到区块头中。

成员隶属证明(proof of membership):
因为存储容量的限制,轻节点只保存区块头,不保存全部交易数据,保存交易的Merkle Root Hash,这时要想证明特定交易(上图黄色部分tx)属于某个区块,只需要向全节点请求对应分支路径的相关数据(上图中的红色部分哈希值)即可,最终可计算出Merkle Root Hash,由于哈希函数具有碰撞阻力的特性,如与区块头中保存的Merkle Root Hash一致,则可证明该交易tx确实属于这个区块,为合法交易。
证明过程的时间复杂度为θ(log(n)),能够在极有限的时间内进行计算验证。
非成员关系证明(proof of non-membership)
如要做非成员关系证明,需将Merkle tree的节点进行排序,如要证明某个交易不属于该区块,只需要向全节点请求该交易的前后两个交易,如果发现前后两个交易是相邻的,那么这个交易必然不属于该区块。比特币中不存在非成员关系证明的需求,因此比特币中的Merkle tree是没有排序的。

相关文章