Previous block
区块头中的 previous block 字段包含了该区块所构建于其上的前一个区块的哈希。
每个区块都链接到前一个区块,这便创建了一个区块的链条。或者,正如它更广为人知的名称:区块链。
示例¶
下面是区块链中最高的 5 个区块。如果您查看它们,就会发现它们各自的区块头中都包含其下方区块的哈希。
您可以通过从区块顶端开始并一路跟随 previous block 字段,访问区块链中的每一个区块,直至最底部。
用途¶
当构建候选区块时,矿工会在 previous block 字段中放入当前区块链尖端的区块哈希。
所有的矿工都希望延长当前已知最长的区块链接,因为最长链是所有节点采用的区块链的权威 (canonical)版本,并且矿工只有在区块成功进入最长链达 100 个区块深之后,才能收回其区块奖励。
canonical – 经授权的;公认的;被接受的
您可以通过运行 bitcoin-cli getbestblockhash 来查找当前区块链尖端的区块。
所有区块都必须构建在现有的前一个区块之上。 如果您在区块的 previous block 字段中放入一个不存在的哈希值,该区块将是无效的,并会被网络上的节点拒绝。
目的¶
为什么区块要包含前一个区块的哈希值?
previous block 字段的作用是将区块连接在一起构成区块链。
区块哈希是区块的唯一引用,并由区块的内容决定。因此,通过在区块头中包含前一个区块的哈希值,您可以创建一个可靠的数据链,其中每个数据块(即交易区块)都链接到它前面的那个区块。
区块链只是通过区块哈希连接起来的区块链接。
因此,如果您试图修改较旧区块的内容(例如替换或删除某笔交易),这将更改该区块的哈希值,并且它将不再是同一区块链接的一部分,因为构建于其上的区块将不再引用它。
如果您更改了其中一个区块哈希,您就将其从链条中移除了。
所以基本上,这条区块哈希链条就是防止任何人回到过去更改区块链的机制。因为如果您这样做,节点将忽略修改后的区块,因为它不会成为已知最长链的一部分。
这就是人们将区块链称为“不可篡改账本 (immutable ledger)”的意思。
immutable – 不可改变的;某物是不可改变的,将永远不会改变或无法改变。
创世区块¶
创世区块的独特之处在于其 previous block 字段全为零。这是因为它是区块链中的第一个区块,因此没有“前一个区块”可供其构建于其上。
这就是我关于区块头中 previous block 字段仅有的有趣事实。
资源¶
- https://en.wikipedia.org/wiki/Hash_chain
- Blockchain Demo - 酷炫的互动网站,展示了如何通过区块哈希将区块连接在区块链中。



