区块标识符:区块头哈希和区块高度

一个区块的主要标识符是其加密哈希,这是通过SHA256算法对区块头进行两次哈希计算得到的。生成的32字节哈希称为区块哈希,但更准确地说是区块头哈希,因为只有区块头用于计算它。例如,比特币区块链上的第一个区块的区块哈希是000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f。区块哈希唯一而明确地标识一个区块,并且可以由任何节点独立地通过对区块头进行哈希计算来派生出来。

请注意,区块哈希实际上并未包含在区块的数据结构中。相反,每个节点在从网络接收到区块时计算区块哈希。为了便于索引和更快地从磁盘检索区块,区块哈希可能会存储在单独的数据库表中作为区块的元数据的一部分。

第二种识别区块的方式是通过其在区块链中的位置,称为区块高度。创世区块位于区块高度0(零),之前被以下区块哈希引用:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f。因此,一个区块可以通过引用区块哈希或引用区块高度来进行识别。每个添加到该创世区块“之上”的后续区块都在区块链中处于一个“更高”的位置,就像箱子一样一层叠一层堆叠。在撰写本书时,即2023年中期,区块高度已经达到了800,000,这意味着在2009年1月创建的第一个区块之上堆叠了800,000个区块。

与区块哈希不同,区块高度不是唯一的标识符。虽然单个区块始终具有特定且不变的区块高度,但反之并非如此——区块高度并不总是唯一地标识单个区块。两个或多个区块可能具有相同的区块高度,竞争同一位置在区块链中。这种情况在第282页的“组装和选择区块链”部分中有详细讨论。在早期的区块中,区块高度也不是区块的数据结构的一部分;它未存储在区块内。每个节点在从比特币网络接收到区块时会动态地确定区块在区块链中的位置(高度)。后来的协议更改(BIP34)开始将区块高度包含在coinbase交易中,尽管其目的是确保每个区块具有不同的coinbase交易。节点仍然需要动态地确定区块的高度以验证coinbase字段。区块高度也可能作为元数据存储在索引数据库表中,以便更快地检索。

一个区块的区块哈希始终唯一地标识一个区块。一个区块也总是具有特定的区块高度。然而,并不总是情况下特定的区块高度标识单个区块。相反,两个或多个区块可能竞争区块链中的一个位置。

Last updated