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 不需要排序
哈希指针在无环的情况下可以替代普通指针,有环时无法使用哈希指针

浙公网安备 33010602011771号