比特币区块头的分解

拇指1

比特币区块头包含区块内的重要信息。它们分为6个字段,提供了块摘要的详细信息。除了区块头之外,还有交易和币库字段是区块的独立部分。每个块头都是唯一的,并通过密码保护,这就是赋予它不变性的原因。

块头被序列化,总长度为80个字节。然后将其作为工作量证明(PoW)共识算法的一部分进行哈希处理,该算法用于比特币的挖矿。在此过程中,序列化的标头成为共识规则的一部分,矿工必须遵循该共识规则作为共识机制的一部分。矿工是参与共识协议的完整节点,在该协议中,对区块进行了验证,作为回报,验证区块的矿工获得了比特币的奖励。

块标题“ width =” 350“ height =” 394“ data-recalc-dims =” 1比特币区块头包含6个字段。

以下是对块标题字段的描述。

版本号

这个4字节的字段提供了块中使用的版本号。有不同的块版本构成了比特币发展历史的一部分。

  • 版本1是在创世区块(2009年1月)中引入的,创世区块是在比特币网络的区块链上生成的第一个区块。
  • 版本2作为用户激活的软分叉(UASF)在Bitcoin Core 0.7.0(2012年9月)中引入。如BIP34中所述,有效的版本2块需要币库中的块高度参数。 BIP34还描述了拒绝某些阻止的规则。比特币核心0.7.0和更高版本开始拒绝版本2的区块,而硬币库中的区块高度从区块高度224,412开始(2013年3月),三周后开始拒绝新版本1区块,区块高度为227,930。
  • 版本3区块作为UASF在Bitcoin Core 0.10.0(2015年2月)中引入。当分叉达到全面执行(2015年7月)时,它要求在新块中对ECDSA签名进行严格的DER编码,如BIP66中所述。自从Bitcoin Core 0.8.0(2012年2月)以来,以前不使用严格DER编码的交易就已经成为非标准交易。
  • UASF于2015年12月在BIP65中指定并在Bitcoin Core 0.11.2(2015年11月)中引入了第4版块。这些块现在支持新的 OP_CHECKLOCKTIMEVERIFY 该BIP中描述的操作码。

(来源Bitcoin.org)

版本指的是该块遵循哪个块验证规则。这些规则构成了上述部分中有关每个版本的协议的一部分。如果区块版本号与其他区块不同,则它们不能成为同一区块链的一部分。在这种情况下,它将在不同的链上运行,并可能导致硬分叉。

上一个区块哈希

前一个块的哈希是一个32字节的字段,其中包含前一个块头的哈希。它包含指向上一个块的指针,这是区块链中非常重要的功能。无需修改前面的块就不能修改此信息。因此,如果您有200,000个块并尝试更改前一个块的哈希值,则会发生Avalanche效应,这意味着需要更改其他先前的哈希值。

这将需要大量的计算能力哈希率,这将太困难了。链接散列的这一功能可以提供安全性和防篡改功能。它仍然可以更改,但是会影响整个区块链,从理论上讲,这需要进行所谓的51%攻击。由于区块头的散列,因此在区块链上很难进行所有交易的逆转。

块头使用SHA256哈希算法。它使用以下功能:

SHA256(SHA256())SHA256(SHA256(Prev_Block_Header))

这样可确保在不更改块头的情况下,无法更改前一个块。此功能提供了防篡改措施。因此,由于需要更改块头的哈希值,因此尝试撤消交易会变得更加昂贵。这利用了能源密集型计算资源来重新计算哈希。在现实世界中,矿工可以通过分叉区块链来抵制这种攻击。从理论上讲,它可以阻止攻击者,但是再次达成共识是维护有效区块链信息的关键。

默克尔根

Merkle Root字段的长度也是32个字节,其中包含区块链的Merkle Root的哈希值。它使用与以前的块头哈希相同的功能。默克尔根源于此区块中所有交易的哈希值。散列可确保在不修改整个标头的情况下,不能修改这些事务。这再次是一种防篡改措施,可为该区块提供安全性,这是公共,去中心化和不信任系统的重要功能。

Merkle根由区块中所有交易的TXID(交易ID)组成。 TXID按照共识规则要求的顺序放置:

  • 币库交易的TXID放在第一位。
  • 区块中的任何输入都可以花费输出,如果这是有效支出,则该输出也将出现在该区块中。它必须是与输出相对应的TXID,它位于与输入相对应的TXID之前的某个位置。这遵循UTXO(未用交易输出)规则,即交易输入必须是先前的交易输出。

32字节的总长度是SHA256哈希函数的结果。输入从可变长度值转换为长度为256位的固定值。 Merkle根始终可以追溯到数据树结构的最根本的根(即Merkle树),是一种快速有效的数据验证方法。

这是一个默克尔树的例子。树的根是g(12345678),它是从t(1)到t(8)的所有事务的哈希值。根的哈希g()是区块链中所有交易的串联。

时间戳是一个4字节的字段,以Unix纪元时间来度量。这是自1970年1月以来经过的秒数。时间戳从矿工开始对标头进行哈希处理开始。必须严格大于前11个块的中值时间。完整节点将不接受其时钟根据其时钟在未来超过2小时的块。

Unix时间不是UTC的真实表示。它忽略leap秒,每天总共包含86,400秒(60秒/分钟x 60分钟/小时x 24小时)。根据比特币协议,块传播时间必须平均为10分钟,因此时间戳必须在此范围内的允许时间内。然而,可变性是由于困难,将在下面讨论。

困难目标

难度目标是一个4字节的文件,也称为位。目标的编码版本是阈值,该阈值是该块的标头哈希值必须小于或等于。这些位指定包含前导零的值或目标阈值。这是难度目标的基础,与目标不同。比特币网络上每2016个区块调整一次难度目标。该信息对矿工尤其重要。

难度目标被编码为比特币协议。这决定了根据网络的总哈希率计算哈希值的难度。当矿工太多时,为了控制比特币的供应,哈希难度增加。如果难度太容易,则块传播时间平均会低于10分钟。这可能会很快耗尽给定的BTC的供应,并且随着向网络中添加功能更强大的挖矿设备,哈希率确实会增加。当块传播时间超过10分钟时,难度过高,因此协议代码确保必须降低难度。

随机数

随机数是一个4字节的字段,该字段是任意数量的矿工更改以修改标头哈希,以产生小于或等于目标阈值的哈希。随机数就像“幻数”,因为首先发现它的人将成为块验证者。然后将奖励放入币库字段,并将奖励提供给首先发现随机数的矿工。随机数必须等于或小于难度目标。

发现随机数是矿工在验证区块的共识机制期间从事的主要活动。矿工通过试图解决必须低于难度目标的密码难题而相互竞争。它在协议中编码非常困难,因此不仅是未经许可的系统中的任何人都无法发现随机数。因此,指定了一个难度目标,可以根据网络的总哈希率调整该值。

资料类型

大小以字节为单位(1字节= 8位)

int32_t是有符号整数值

uint32_t是无符号整数值

char(32)是包含十六进制值的字符值

块标题示例

使用对比特币区块链的API调用获取数据,以检索区块头信息。这是一个例子:

“位”是难度目标,已被编码为数值。难度目标的值越低,生成块的难度就越大。难度值具有十六进制形式,已转换为419486617。

“mrkl_root''是块内所有事务的哈希值。使用SHA256算法对此进行了哈希处理。

“nonce''是验证区块的矿工使用的发现值。这是用于生成添加到区块链的区块的编号。

“ prev_block”是前一个块头的哈希。这就是将区块链接到其余区块链的原因。

当矿工开始在区块上散列时,指示“时间''。该示例使用了不同的时间格式,但最初是基于Unix纪元时间的秒数。

“ ver”字段是遵循该协议版本的共识规则的块的版本号。

概要

块标题汇总了该块。块标题中的字段提供了该块的唯一详细信息。数据被序列化为80字节的字符串,然后将其哈希以用于后续块。这提供了在比特币网络上形成区块链的区块之间的链接。

资讯来源:由0x资讯编译自DATADRIVENINVESTOR,版权归作者Vincent Tabora所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢