区块链-构造区块链头

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html网络

为了构造区块头,挖矿节点须要填充六个字段。编码

版本号的字段值长度为4字节。.net

 接着,挖矿节点须要填充“前区块哈希”,这个值为节点从网络上接收到的区块头哈希值。3d

 为了向区块头填充merkle根字段,要将所有的交易组成一个merkle树。创币交易做为区块中的首个交易,后将余下的交易添至其后。在以前,咱们已经见到过“Merkle 树”,树中必须有偶数个叶子节 点,因此若是时奇数交易时须要复制最后一个交易叶子节点,每一个叶子节点是对应交易的哈希值。这些交易的哈希值逐层地、成对地组合,直到最终组合并成一个根节点。merkle 数的根节点将所有交易数据摘要为一个32字节长度的值,当前(2019-05-24 01:13:52)区块merkel根的值以下:code

b5f5e1d3a09a8a8470fe1c5963dfc7a52b5b89c149d6b2945a60f925c4a5de66

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

接下来,节点须要填充Target字段(难度目标值),为了使得该区块有效, 这个字段定义了所需知足的工做量证实的难度。难度在区块中以“尾数-指数”的格 式,编码并存储,这种格式称做 targetbits(难度位)。这种编码的首字节表示指 数,后面的 3 字节表示尾数(系 数)。get

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

区块头完成所有的字段填充后,挖矿就能够开始进行了。挖矿的目标是找到一个使区块头哈希值小于难度目标的nonceclass

挖矿节点一般须要尝试数十亿甚至数万亿个不一样的nonce 取值,直到找到一个知足条件的nonce值。im