本文将以比特币创世块为例介绍比特币块的数据结构,阅读本文需要对比特币原理有一定的理解。
一、Block 预览
使用编辑器比如Sublime打开blk00000.dat(如果您不知道.dat文件在哪,可以参考比特币数据目录)。
.dat文件以Little-Endian格式存储Block数据,比如下面的就是创世块的数据:
二、Block结构
Block由5个部分组成,以magic数据开始:
三、魔法数
每个块总是以魔法数开始,正式网络是0xD9B5BEF9,测试网络是0x0709110B。
四、块头部
版本号
目前的块版本号有1和2,在227836及之后的块的版本号都是2,在之前的块有的是2有的是1。
目标值
目标值0x1D00FFFF由两个部分组成:指数0x1D(=29)和尾数0x00FFFF,真实的目标值的大小计算方式是:
目标值=尾数*256指数
所以这里的目标值为:
0xFFFF0000000000000000000000000000000000000000000000000000。
随机数
随机数用于挖矿时生成符合要求的块哈希。
五、交易个数
描述交易个数字节的长度和大小如下表:
如果随机数之后的第一个字节比0xfd小,那么该字节就是交易大小的字节,比如创世块的随机数后的第一个字节是0x01,那么创世块里的交易个数为1。
如果第一个字节是0xfd那么0xfd后面的两个字节就是交易大小的字节,以此类推。
六、交易
每个交易都由6个部分组成
每个交易输入由5个部分组成
上一个交易哈希值
对于coinbase交易不存在上一个交易,所以示例中的值是
0x0000000000000000000000000000000000000000000000000000000000000000
上一个交易的输出位置
对于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/
一、Block 预览
使用编辑器比如Sublime打开blk00000.dat(如果您不知道.dat文件在哪,可以参考比特币数据目录)。
.dat文件以Little-Endian格式存储Block数据,比如下面的就是创世块的数据:
二、Block结构
Block由5个部分组成,以magic数据开始:
三、魔法数
每个块总是以魔法数开始,正式网络是0xD9B5BEF9,测试网络是0x0709110B。
四、块头部
版本号
目前的块版本号有1和2,在227836及之后的块的版本号都是2,在之前的块有的是2有的是1。
目标值
目标值0x1D00FFFF由两个部分组成:指数0x1D(=29)和尾数0x00FFFF,真实的目标值的大小计算方式是:
目标值=尾数*256指数
所以这里的目标值为:
0xFFFF0000000000000000000000000000000000000000000000000000。
随机数
随机数用于挖矿时生成符合要求的块哈希。
五、交易个数
描述交易个数字节的长度和大小如下表:
如果随机数之后的第一个字节比0xfd小,那么该字节就是交易大小的字节,比如创世块的随机数后的第一个字节是0x01,那么创世块里的交易个数为1。
如果第一个字节是0xfd那么0xfd后面的两个字节就是交易大小的字节,以此类推。
六、交易
每个交易都由6个部分组成
每个交易输入由5个部分组成
上一个交易哈希值
对于coinbase交易不存在上一个交易,所以示例中的值是
0x0000000000000000000000000000000000000000000000000000000000000000
上一个交易的输出位置
对于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/
声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们100@7234.cn