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

区块头哈希

区块的主标识符是它的加密哈希,或者称为数字指纹,通过对区块头运行两次SHA256计算得到。结果的32字节哈希值叫作区块哈希(block hash),但是称其为区块头哈希(block header hash)更准确,因为只有区块头被用于哈希计算。举例来说,000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f是第一个比特币区块的区块头哈希。区块哈希只唯一标识一个区块,没有歧义,任何节点通过对区块头进行简单哈希计算就可以独立得到标识。

需要注意的是,区块哈希并没有包含在区块的数据结构中,既不会在区块传输时存在,也不会作为区块链的一部分保存到节点的持久化存储设备中。实际上,区块哈希只在节点从网络上接收到区块时才自行计算生成。区块哈希可以保存在一个独立的数据库表中,作为区块元数据的一部分,以便索引和从磁盘上快速存取区块。

区块高度

标识区块的另一种方式是它在区块链中的位置,被称为区块高度(block height)。第一个被创建的区块高度为0,它与前面提到的区块哈希为000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f的区块是一样的。因此,一个区块可以通过两种方式标识:引用区块哈希或者引用区块高度。在区块链中,每个被加到上一区块顶部的后续区块,都要比前一区块“高”一个位置,就像堆叠到其他盒子上面的盒子。2014年1月1日的区块高度大约是278000,意味着总共有278000个区块叠加到了2009年1月创建的第一个区块之上。

不像区块哈希,区块高度并不是唯一的标识符。虽然单一的区块总有个特定的不变高度,但是反之则不然——区块高度不总是能标识一个单一区块。有可能有多个区块同时拥有相同高度,共同参与竞争区块链中的同一位置。这种情形将在“区块链分叉”中讨论。区块高度也不是区块数据结构的一部分,它也没有存储在区块上。每个节点从网络上接收到区块时,在区块链中动态标识区块的位置(高度)。区块高度也可以作为元数据存储在一个索引数据库中,以提高存取速度。

区块头哈希和区块高度

一个区块的区块哈希总能唯一标识一个区块。一个区块也总是具有一个特定的区块高度。但是特定的区块高度却不一定能唯一标识一个区块。实际上,可能两个或多个区块会参与竞争区块链中的同一个位置。

868区块链学习网为您整理《区块标识符:区块头哈希和区块高度》仅供参考。