区块头包含3个区块元数据集合

第一个是到前序区块哈希的引用,在区块链中将本区块与前面的区块相连;第二个是元数据集,即难度(difficulty)、时间戳(什么是时间戳)(timestamp)、随机数(nonce),它们与挖矿竞争相关,;第三个元数据集是默克尔树(merkle tree)的根,一个高效概括区块中所有交易的数据结构。

创建区块头

区块头结构图

区块头是什么?区块头的意思介绍

在区块277316被开采出来时,描述区块结构的版本号是2,以小字节序格式编码的4字节数字是0x02000000。

接着,挖矿节点需要添加“前序区块哈希”。即区块277315的区块头哈希,区块277315是景的节点从网络上接收到的最新区块,景已接受,并将其选定为候选区块277316的父区块。区块277315区块头的哈希是:

区块头是什么?区块头的意思介绍

下一个步骤是将所有交易汇总成一棵默克尔树,以便计算并将默克尔根添加至区块头中。铸币交易将成为区块中的第一笔交易。然后,418笔其他交易添加在其后,最终总共有419笔交易被添加到区块中。正如我们在“默克尔树”中看到的,树的叶子节点数量必须为偶数,所以需要将最后一笔交易复制一遍,形成420个叶子节点,每个节点均对应一笔交易的哈希值。交易哈希按对组合,继续进行哈希计算,从而生成树的不同层次,直到所有交易被汇总到位于树“根”的节点。默克尔树的根将所有交易摘要汇总成一个32字节的数值,如例8-3所示的“默克尔根”。

区块头是什么?区块头的意思介绍

接下来,挖矿节点添加上一个4字节的时间戳,以Unix“纪元(Epoch)”时间戳格式编码,它是以1970年1月1日零点(UTC/GMT时区)为起点,到目前经历的时间秒数的计时方式。时间1388185914与“2013年12月27日星期五23:11:54 UTC/GMT”对等。

再下一步,节点填充难度目标值,这个值定义了保证本区块有效的工作量证明难度的要求值。难度值在区块中以“难度位”度量标准进行存储,难度位是以“尾数-指数”格式编码的。这种编码格式含1字节的指数,紧跟3字节的尾数(系数)。举例来说,在区块277316中,难度位的值为0x1903a30c,第一部分0x19是十六进制的指数,第二部分0x03a30c为系数。难度目标的概念在“难度目标和目标调整”中有所描述,“难度位”的表示在本章“难度的表示法”中可以看到解释。

最后一个字段是随机数(nonce),初始化为0。

填充完所有字段后,区块头就完成了,而区块的挖矿过程也就可以开始进行了。现在的目标是找到一个随机数,使区块头的哈希小于难度目标。挖矿节点需要测试成千上万亿个随机数,直到找到一个满足要求的随机数值。

查看“区块标识符:区块头哈希和区块高度”有助于您详解“区块头是什么”的概念

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注