-
比特币中主要使用两种数据结构:
- 区块链
blockchain(由哈希指针连接的链表) - 默克尔树
Merkle tree(由哈希指针构成的二叉树)
- 区块链
-
哈希指针
hash pointer:普通指针存储的是某个结构体在内存中的地址。而哈希指针除了要存地址之外,还要保存该结构体的哈希值(可防止篡改,不能用于环状的结构) -
比特币系统主体由一条区块链(一连串区块节点)构成,而区块由区块头block header和区块体block body构成。区块体中包含交易信息(一个交易列表,由Merkle树组织起来),而区块头中有各种域,其中包括区块体中那颗Merkle树的根哈希root hash值
-
默克尔证明
Merkle proof:- 比特币中的节点分为两类:
- 全节点
full node(保存整个区块的内容,即块头块身都有,有交易的具体信息) - 轻节点
light node(例如手机上的比特币钱包,只有块头)
- 全节点
- 问题:如何向一个轻节点证明某个交易是写入区块链的?
- 找到交易所在的位置(最底行的其中一个数据块),提供该区块一直往上到根节点的路径(全节点提供)
- 通过
collision resistance的性质,可以认为人为的篡改是不可能的,因此可以验证proof of membership/inclusion(当涉及proof of non-membership时,可以通过排序的方法加以辅助) - 对于轻节点来说,这个过程的时间复杂度为
O(lgn)
- 比特币中的节点分为两类: