精通比特币(76):构造区块头

  • A+
为了构造区块头,挖矿节点需要填充六个字段。
区块头结构

精通比特币(76):构造区块头

区块结构中用来表示版本号的字段值为2,长度为4字节,以小端格式编码值为 0x20000000。

 

接着,挖矿节点需要填充“前区块哈希”
通过选择候选块头中的先前块哈希字段指定的特定父区块,挖矿节点正在通过确认挖矿能力来扩展区块链。 从本质上讲,这是用他的采矿权为最长难度的有效链进行的“投票”。

 

​为了向区块头填充merkle根字段,要将全部的交易组成一个merkle树。创币交易作为区块中的首个交易,后将余下的 418笔交易添至其后,这样区块中的交易一共有419笔。树中必须有偶数个叶子 节点,所以需要复制最后一个交易作为第420个叶子节点,每个叶子节点是对应交易的哈希值。这些交易的哈希值逐层地、成对地组合,直到最终组合并成一个根节点。merkle数的根节点将全部交易数据摘要为一个32字节长度的值。

 

挖矿节点会继续添加一个4字节的时间戳,以Unix纪元时间编码,即自1970年1月1日0点到当下总共流逝的秒数。

 

接下来,挖矿节点需要填充Target字段(难度目标值),为了使得该区块有效,这个字段定义了所需满足的工作量证明的难度。难度在区块中以“尾数-指数”的格式,编码并存储,这种格式称作target bits(难度位)。这种编码的首字节表示指数,后面的3字节表示尾数(系数)。以区块277316为例,难度位的值为0x1903a30c,0x19是指数的十六进制格式,后半部0x03a30c是系数。

 

​最后一个字段是nonce,初始值为0。

 

​区块头完成全部的字段填充后,挖矿就可以开始进行了。挖矿的目标是找到一个使区块头哈希值小于难度目标的 nonce。挖矿节点通常需要尝试数十亿甚至数万亿个不同的nonce取值,直到找到一个满足条件的nonce值。

发表评论

您必须才能发表评论!