在上一篇文章数据区块结构解析(一)中,编者讲述了数据区块的基本结构,数据区块结构包括:神奇数、区块大小、数据区块头部信息、交易计数、交易记录这六个部分。其中,数据区块头部信息决定了该数据区块的生成难度,而交易记录则包括了该区块中所记录的所有比特币地址交易信息。
不知道何为比特币?点这里!
交易记录
交易记录就像一个记账本一样,记录了所有比特币的交易信息,每一个比特币玩家的比特币收支情况都被永久的嵌入了数据区块中以供别人查询,这也就是为什么每一比比特币交易都是可以查询到的。这个这些数据区块中的交易数据存放在每一个比特币玩家的客户端节点中,所有的这些节点则组成了比特币那及其坚韧的分布式数据库系统。任何一个节点的数据被破坏都不会影响整个数据库的正常运转,因为其它的健康节点中都保存了完整的数据库。
在本文中,编者将详细解析数据区块中交易记录的结构。
交易记录结构
数据区块的交易记录中,详细记载了比特币的交易记录和相关细节。其中在比特币收支详情里面,记录了收支的比特币地址和merkle节点值等情况,因此收支详情是交易记录中最重要的部分。
完整的交易记录结构如下表格:
[size=1em]子结构名称
| 作用说明
| 大小
| 版本 | 该比特币协议的版本号 | 4字节 | 支出交易数量统计 | 记录了当前区块中所记录的支出交易数量 | 大于1字节 | 比特币支出地址详情 | 记录了当前区块中比特币支出地址的信息 | 大于40字节 | 比特币接收地址详情 | 记录了当前区块中比特币接收地址的信息 | 大于40字节 | 接收交易数量统计 | 记录了当前区块中所记录的接收的交易数量 | 大于1字节比特 | 交易时间戳 | 以UNIX时间格式记录了当前区块中所记录交易被P2P网络确认的时间 | 4字节 |
比特币支出和接收交易的结构
在数据块中,比特币支出和接收交易是写在一起的,整个收支记录包括很多比记录。每一比记录都有自己的索引编号以供查询。
[size=1em]收支记录表
| 收支记录一 | 收支记录二 | 收支记录三 | 收支记录四 | …… | 收支记录N |
每一比记录中包括了生成时间、引用交易的哈希值、交易记录索引编号、比特币支出地址、支出地址数量等细节。每一比收支交易记录都有一个Merkle节点值,这个hash节点值是整个Merkle树的一部分,决定了每一个地址都不能重复交易和被伪造。
收支交易结构图如下:
[size=1em]子结构名称
| 作用说明
| 大小
| 生成时间 | 本次交易嵌入到区块中的时间 | 4字节 | 引用交易的哈希值 | 本次交易的merkle节点hash值,用来确认交易没有被伪造和重复 | 32字节 | 交易记录索引编号 | 本次交易的索引编号,该编号作为交易地址查询的入口 | 4字节 | 比特币支出地址 | 记录了本次交易中比特币支出地址的信息 | 16字节 | 支出地址数量 | 本次交易中比特币支出地址的数量 | 4字节 | 版本 | 该比特币协议的版本号 | 4字节 | 本次交易的数字签名 | 记录了本次交易的数字签名信息 | 不确定 | 比特币接受地址 | 记录了本次交易中比特币接收地址的信息 | 16字节 | 接收地址数量 | 本次交易中比特币接收地址的数量 | 4字节 | 该条记录的大小 | 记录了本条记录的大小 | 大于2字节 |
|