比特币区块链的数据结构解析

  • 时间:
  • 来源: 网络
  • 分类: 百科
  • 550条评论
  • 701浏览
区块[qū kuài]链(数据[shù jù]区块、数据块、数据块链)作为比特[bǐ tè]币的核心概念,对于理解比特币结构[jié gòu]起着至关重要的作用。在《什么是数据区块》中,编者从数据区块分布式交易[jiāo yì]记录[jì lù]的角度简单的介绍了数据区块的概念。今天,编者从数据区块的程序结构上来详细的分析数据区块里面到底记录了什么信息。

数据区块文件[wén jiàn]的位置
如果你用的是Bitcoin-Qt客户端,那么数据区块的信息就存在你的电脑里面。每次当你打开Bitcoin-Qt,数据区块都会跟整个P2P网络分布式数据库同步。根据操作系统的不同,数据区块目录blocks一般存放路径为:

Windows: %APPDATA%Bitcoin
Linux:~/.bitcoin/
MacOS: ~/Library/Application Support/Bitcoin/

打开数据区块文件
我们打开blocks文件夹,便可以看到很多名为blkXXX.dat的文件,这些文件中保存了传说中的数据区块记录。


blkXXX.dat文件在终端下面可以用hexdump打开。
hexdump -n 10000 -C blk00000.dat

数据区块结构
hexdump程序把数据区块文件转化为十六进制+ASCII表示,编者解释一下:每一个数据区块记录了六个内容:神奇数、区块大小、数据区块头部信息、交易计数、交易详情。在这当中,数据区块头部信息的HASH[HASH]值是下一个新区块的HASH值的参考目标数,最后一项交易详情记录了该区块中所有的交易记录(编者会在以后详细说明交易记录的结构)。
数据区块结构如下图:

数据区块头部结构
数据区块头部结构中记录了:版本号、前一个区块的记录、Merkle树的根值、时间戳、目标特征值、随机数。
在比特币矿工挖矿的过程就是产生新的数据区块的过程(编者以后会详细说明),这个过程需要对比前一个数据区块头部的HASH值和随机数,如果满足一定条件则生成新的区块。Merkle树的根值为该区块中所有被记录交易的根节点[jié diǎn]HASH值,中本聪用一个HASH树来对每一比[yī bǐ]交易进行数字签名,以确保每一比交易都不可伪造和没有重复交易,Merkle树就是HASH树的一种。数据区块头部结构如下图:


交易记录

交易记录就像一个记账本一样,记录了所有比特币的交易信息,每一个比特币玩家的比特币收支[shōu zhī]情况都被永久的嵌入了数据区块中以供别人查询,这也就是为什么每一比比特币交易都是可以查询到的。这个这些数据区块中的交易数据存放在每一个比特币玩家的客户端节点中,所有的这些节点则组成了比特币那及其坚韧的分布式数据库系统。任何一个节点的数据被破坏都不会影响整个数据库的正常运转,因为其它的健康节点中都保存了完整的数据库。
在本文中,编者将详细解析数据区块中交易记录的结构。

交易记录结构
数据区块的交易记录中,详细记载了比特币的交易记录和相关细节。其中在比特币收支详情里面,记录了收支的比特币地址和merkle节点值等情况,因此收支详情是交易记录中最重要的部分。
完整的交易记录结构如下表格:


比特币支出和接收交易的结构
在数据块中,比特币支出和接收交易是写在一起的,整个收支记录包括很多比记录。每一比记录都有自己的索引编号以供查询。

每一比记录中包括了生成时间、引用交易的哈希值、交易记录索引编号、比特币支出地址、支出地址数量等细节。每一比收支交易记录都有一个Merkle节点值,这个hash节点值是整个Merkle树的一部分,决定了每一个地址都不能重复交易和被伪造。
收支交易结构图如下:

精彩评论

匿名用户

他们只能把你哄睡,而我能把你操醒

匿名用户

不逼自己一把怎么知道拼了也没用呢?

匿名用户

为什么你能像智障一样活着,而我却不可以。

匿名用户

“你在笑什么?”“没什么,就是刚才突然想到了你所以觉得很开心。”

匿名用户

是虚荣、骄傲、嫉妒与报复,支撑你到今天。你的成长是依赖这些负的能量,而非天生的善良