BTC笔记-02-数据结构
BTC-数据结构
哈希指针
hash pointers
,指向一个结构体在内存中的位置,同时还包含这个结构体的哈希值。这样可以检测出结构体的内容是否被更改- 区块链就是一个链表,使用了哈希指针。每一个区块的哈希指针都由前一个区块的全部内容计算得出,这样区块链具有
tamper-evident log
的特性
Merkel Tree
哈希树,每个叶节点均以数据块的哈希作为标签,而除了叶节点以外的节点则以其子节点标签的加密哈希作为标签 。
根节点所记录的哈希值称为 root hash
每个区块有两部分:block header
和 block body
,区块包含交易信息,交易信息构成一个 Merkel Tree
,block header
中包含整个 Merkel Tree
的 root hash
,但不包含交易的详细信息。详细信息位于 block body
中
Merkel Tree
可以提供 Merkel proof
,证明树中包含了某个交易,过程如下:
其中验证方轻节点仅保存 block header
信息
这种证明树中包含某个交易的过程称为 proof of membership
或 proof of inclusion
,其验证复杂度为 \(O(\log n)\)
如果使用 Merkel Tree
证明一个交易不在树中 proof of non-membership
,在未对叶节点排序的情况下,需要逐一验证,复杂度为 \(O(n)\)
如果对叶子节点(交易)按哈希值排序,则可在 \(O(\log n)\) 复杂度下证明,这种对叶子节点排序后的树称 Sorted Merkel Tree
比特币所用到的 Merkel Tree
不需要排序
哈希指针在无环的情况下可以替代普通指针,有环时无法使用哈希指针