Block数据解析

  • 时间:
  • 来源: 网络
  • 分类: 百科
  • 53条评论
  • 101浏览

  本文将以比特[bǐ tè]创世[chuàng shì]块为例介绍比特币块的数据[shù jù]结构,阅读本文需要对比特币原理有一定的理解。

  一、Block[Block] 预览

  使用编辑器比如Sublime打开blk00000.dat(如果您不知道.dat文件在哪,可以参考比特币数据目录)。

  .dat文件以Little-Endian格式存储Block数据,比如下面的就是创世块的数据:

  

  二、Block结构

  Block由5个部分[bù fèn]组成[zǔ chéng],以magic数据开始:

  三、魔法数

  每个[měi gè]块总是以魔法数开始,正式网络是0xD9B5BEF9,测试网络是0x0709110B。

  四、块头部

  版本号

  目前的块版本号有1和2,在227836及之后的块的版本号都是2,在之前的块有的是2有的是1。

  目标值[mù biāo zhí]

  目标值0x1D00FFFF由两个部分组成:指数0x1D(=29)和尾数0x00FFFF,真实的目标值的大小计算方式是:

  目标值=尾数*256指数

  所以这里的目标值为:

  0xFFFF0000000000000000000000000000000000000000000000000000。

  随机数

  随机数用于挖矿时生成符合要求的块哈希。

  五、交易[jiāo yì]个数

  描述交易个数字节[zì jié]的长度和大小如下表:

  如果随机数之后的第一个字节比0xfd小,那么该字节就是交易大小的字节,比如创世块的随机数后的第一个字节是0x01,那么创世块里的交易个数为1。

  如果第一个字节是0xfd那么0xfd后面的两个字节就是交易大小的字节,以此类推。

  六、交易

  每个交易都由6个部分组成

  每个交易输入由5个部分组成

  上一个交易哈希值

  对于coinbase交易不存在上一个交易,所以示例中的值是

  0x0000000000000000000000000000000000000000000000000000000000000000

  上一个交易的输出[shū chū]位置

  对于coinbase它的值总是0xFFFFFFFF

  每个交易输出由3个部分组成

  输出值

  示例中的输出值0x12A05F200转换成十进制大小是5000000000。

  输出脚本

  输出脚本定义了该交易输出再次被花费的方式。

  总结

  本文对比特币块数据进行了初步分析,后续的文章将为深入分析块中各个组成部分是如何工作的。

  参考(打开需要翻墙)

  https://en.bitcoin.it/wiki/Category:Technical

  http://coinlogic.wordpress.com/2014/02/18/the-protocol-1-block/comment-page-1/

精彩评论

匿名用户

背后日,叫后日

匿名用户

很羡慕你们能和你们喜欢的人在一起 不像我,周围都是喜欢我的人

匿名用户

只要你肯吃苦,肯努力,肯放下身段,去要饭,总会有人赶的

匿名用户

余生不想请你指教了,领教够了

匿名用户

打趴下就不要爬起来了,反正还是会被打到趴下