BTC-数据结构-03

275 阅读1分钟
  • 比特币中主要使用两种数据结构:

    • 区块链blockchain(由哈希指针连接的链表)
    • 默克尔树Merkle tree(由哈希指针构成的二叉树)
  • 哈希指针hash pointer:普通指针存储的是某个结构体在内存中的地址。而哈希指针除了要存地址之外,还要保存该结构体的哈希值(可防止篡改,不能用于环状的结构)

  • 比特币系统主体由一条区块链(一连串区块节点)构成,而区块由区块头block header和区块体block body构成。区块体中包含交易信息(一个交易列表,由Merkle树组织起来),而区块头中有各种域,其中包括区块体中那颗Merkle树的根哈希root hash值

    • data structure.png
  • 默克尔证明Merkle proof

    • 比特币中的节点分为两类:
      • 全节点full node(保存整个区块的内容,即块头块身都有,有交易的具体信息)
      • 轻节点light node(例如手机上的比特币钱包,只有块头)
    • 问题:如何向一个轻节点证明某个交易是写入区块链的?
      • 找到交易所在的位置(最底行的其中一个数据块),提供该区块一直往上到根节点的路径(全节点提供)
      • 通过collision resistance的性质,可以认为人为的篡改是不可能的,因此可以验证proof of membership/inclusion(当涉及proof of non-membership时,可以通过排序的方法加以辅助)
      • 对于轻节点来说,这个过程的时间复杂度为O(lgn)