div#pop_ad { opacity: 0; }
AD
首页 > 数字货币 > 正文

挖矿原理之比特币区块头(Blockheader)结构

[2021-01-29 21:06:30] 来源: 编辑:wangjia 点击量:
评论 点击收藏
导读: 挖矿原理,首先解析比特币区块头(Blockheader)结构,我们说挖矿本质是执行Hash函数的过程,而Hash函数是一个单输入单输出函数,输入数据就是这个区块头。比特币区块头共6个字段:int32
挖矿原理,首先解析比特币区块头(Blockheader)结构,我们说挖矿本质是执行Hash函数的过程,而Hash函数是一个单输入单输出函数,输入数据就是这个区块头。比特币区块头共6个字段:
int32_t nVersion; //版本号,4字节uint256 hashPrevBlock; //前一个区块的区块头hash值,32字节uint256 hashMerkleRoot; //包含进本区块的所有交易构造的Merkle树根,32字节uint32_t nTime; //Unix时间戳,4字节uint32_t nBits; //记录本区块难度,4字节uint32_t nNonce; //随机数,4字节
如上,比特币每一次挖矿就是对这80个字节连续进行两次SHA256运算(SHA256D),运算结果是固定的32字节(二进制256位)。以上6个字段情况又各不相同,
nVersion,区块版本号,只有在升级时候才会改变。hashPrevBlock,由前一个区块决定。nBits,由全网决定,每2016个区块重新调整,调整算法固定。因此以上3个字段可以理解为是固定的,对于每个矿工来说都一样。矿工可以自由调整的地方是剩下的3个字段,nNonce,提供2^32种可能取值
nTime,其实本字段能提供的值空间非常有限,因为合理的区块时间有一个范围,这个范围是根据前一个区块时间来定,比前一个区块时间太早或者太超前都会被其他节点拒绝。
值得一提的是,后一个区块的区块时间略早于前一个区块时间,这是允许的。一般来说,矿工会直接使用机器当前时间戳。hashMerkleRoot,理论上提供2^256种可能,本字段的变化来自于对包含进区块的交易进行增删,或改变顺序,或者修改Coinbase交易的输入字段。
根据Hash函数特性,这3个字段中哪怕其中任意1个位的变化,都会导致Hash运行结果巨大变化。在CPU挖矿时代,搜索空间主要由nNonce提供,进入矿机时代,nNonce提供的4个字节已经远远不够,搜索空间转向hashMerkleRoot。


添加新手交流群:币种分析、每日早晚盘分析

添加助理微信,一对一亲自指导:YoYo8abc

查看更多:

为您推荐