网赚论坛

 找回密码
 免费注册
查看: 693|回复: 0
打印 上一主题 下一主题

比特币基础教学之:数据区块结构解析(一)

[复制链接]

6

主题

6

帖子

28

积分

Ⅰ级财主

Rank: 1

积分
28
跳转到指定楼层
楼主
发表于 2017-10-22 00:00:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

BLOCK(数据区块、数据块、数据块链)作为比特币的核心概念,对于理解比特币结构起着至关重要的作用。在什么是数据区块?中,编者从数据区块分布式交易记录的角度简单的介绍了数据区块的概念。今天,编者从数据区块的程序结构上来详细的分析数据区块里面到底记录了什么信息。

不知道神马是比特币的童鞋点这里!

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

Windows:
%APPDATA%Bitcoin


Linux:
~/.bitcoin/



Mac OS:
~/Library/Application Support/Bitcoin/








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


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






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

大小

神奇数神奇数总是等于0xD9B4BEF9,作为区块之间的分隔符4字节
区块大小记录了当前区块的大小4字节
数据区块头部信息记录了当前区块的头部信息,其HASH值是下一个新区块的参数80字节
交易计数当前区块所记录的交易数1-9字节
交易详情记录了当前区块保存的所有交易细节无特定参考值



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

作用说明

大小

版本号数据区块的版本号4字节
前一个区块的记录记录了前一个数据区块的HASH值,当前区块的HASH值一定比它小32字节
Merkle树的根值记录了当前区块中所有交易Merkle树的根节点的HASH值32字节
时间戳记录了当前区块生成的时间,按照UNIX时间格式4字节
目标值当前区块生成所达成目标值的特征,用于矿工的工作量证明4字节
随机数当前区块工作量证明的参数4字节

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2024-11-15 01:44 , Processed in 0.499200 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表