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

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html算法

区块链的数据结构是由包含交易信息的区块按照从远及近的顺序有序连接起来的。区块被从远及近有序地连接在这个链条里,每一个区块都指向前一个区块。数据库

区块链常常被视为一个垂直的栈,第一个区块做为栈底的首区块,随后每一个区块都被放置在以前的区块之上。用栈来形象化表示区块依次堆叠这一律念后,咱们即可以使用 一些术语, 例如:“高度”来表示区块与首区块之间的距离;以及“顶部”或“顶端”来表示最新添加的区块。网络

区块主标识符是它的加密哈希值,一个经过SHA256算法对区块头进行二次哈希 计算而获得的数字指纹。产生的32字节哈希值被称为区块哈希值,可是更准确的名称是:区块头哈希值,由于只有区块头被用于计算。数据结构

例如:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 是第一个比特币区块的区块哈希值。区块哈希值能够惟1、明确地标识一个区块,而且任何节点经过简单地对区块头进行哈希计算均可以独立地获取该区块哈希值区块链

区块哈希值实际上并不包含在区块的数据结构里(这里指本区块,而不是子区块,父区块的哈希值存在子区块的区块头中),无论是该区块在网络上传输时,抑或是它做为区块链的一部分被存储在某节点的永久性存储设备上时。加密

相反,区块哈希值是当该区块从网络被接收时由每一个节点计算出来的。区块的哈希值可能会做为区块元数据的一部分被存储在一个独立的数据库表中,以便于索引和更快地从磁盘检索区块.net

第二种识别区块的方式是经过该区块在区块链中的位置,即“区块高度(block height)”。第一个区块,其区块高度为 0,和以前哈希值 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 所引用的区块为同一个区块。blog

所以,区块能够经过两种方式被识别:区块哈希值或者区块高度。每个随后被存储在第一个区块之上的区块在区块链中都比前一区块 “高”出一个位置,就像箱子同样,一个接一个堆叠在其余箱子之上。2017年1月1日的区块高度大约是446,000,说明已经有 446,000 个区块被堆叠在 2009 年 1 月 建立的第一个区块之上。索引

和区块哈希值不一样的是,区块高度并非惟一的标识符。虽然一个单一的区块老是会有一个明确的、固定的区块高度, 但反过来却并不成立,一个区块高度并不老是识别一个单一的区块。get

两个或两个以上的区块可能有相同的区块高度,在区块链里争夺同一位置(这一现象就是区块链分叉)。区块高度也不是区块数据结构的一部分, 它并不被存储在区块里。当节点接收来自比特币网络的区块时,会动态地识别该区块在区块链里的位置(区块高度)。 区块高度也可做为元数据存储在一个索引数据库表中以便快速检索。

一个区块的区块哈希值老是能惟一地识别出一个特定区块。一个区块也老是有特定的区块高度。可是,一个特定的区块高度并不必定老是能惟一地识别出一个特定区块。更确切地说,两个或者更多数量的区块也许会为了区块链中的一个位置而竞争。