酸饼博客
关注区块链技术应用与数字货币

区块链入门100问(13) :如何理解比特币的数据结构?

比特币是区块链应用。
区块链,顾名思义,是区块由后向前有序连接起来的数据结构。区块由后向前有序地链接在这个链条里。

区块由区块头和区块体两部分组成。对每个区块头通过SHA256算法取哈希,生成哈希值。哈希值跟区块一一对应,通过哈希值能识别出对应的区块。

每个区块的前一个区块,通常称为它的“父区块”。每个区块的区块头的“父区块”字段,保存了它的父区块的哈希值,通过父区块的哈希值链接到父区块。把每个区块链接到格子父区块的哈希值系列,形成了一条一直可以追溯到第一个区块的链条。

第一个区块也称为“创世区块”。创世区块没有父区块,它的“父区块字段”为0。

比特币的区块头由以下几个字段组成:
version:区块版本,用来跟踪协议的升级和更新。
Previous Block Hash:父区块的哈希值
Merkle Root:比特币的交易信息以Merkle树的结构保存在区块体里面,Merkle Root字段是Merkle树的根节点的哈希值。
Timestamp:区块的时间戳,UNIX时间戳格式,其数值是区块生成的时间点相对于UTC时间1970-01-01 00:00过去了多少秒。
nBits:区块的目标哈希值,用来调整挖矿难度。在前面的《如何理解比特币系统挖矿的目标值?》一文介绍过这个字段。
Nonce:随机数。挖矿的过程就是找出这个随机数,跟区块头的其他字段连在一起取哈希,得到的哈希值小于目标值。之前的《比特币的挖矿是怎么样的一个过程?》有介绍过。

比特币的区块头就由以上的6个字段组成。其中Merkle Root字段的值来自于交易体。

区块体包括当前区块经过验证的、 区块创建过程中生成的所有交易记录。交易记录的哈希值作为Merkle树的叶节点,相邻的两个叶子节点一起取哈希作为父节点,相邻的父节点继续和在一起取哈希上一级的父节点,最终形成一个Merkle树。Merkle树的跟节点的哈希值保存到区块头的Merkle Root字段。

Merkle树是一种哈希二叉树,这种数据结构通常用来快速归纳和校验大规模数据的完整性。

在比特币的区块体里,Merkle树用来归纳区块里的所有交易,生成这些交易集合的数据指纹,并且提供了一种高效的途径来校验区块是否包含某条交易。

以上即是比特币区块的内部结构。区块体的交易数据形成Merkle树,该Merkle树的根节点的哈希值作为区块头的Merkle Root字段的值,与区块头的其他字段一起取哈希,得到该区块的哈希值。区块哈希值可以明确、唯一地标识区块。

未经允许不得转载:酸饼 » 区块链入门100问(13) :如何理解比特币的数据结构?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留言联系关于酸饼