Skip to content

Previous block

Loading Tool

Diagram showing the location of the previous block field inside the block header and how it connects the current block to the block below it in the blockchain.

区块头中的 previous block 字段包含了该区块所构建于其上的前一个区块的哈希

每个区块都链接到前一个区块,这便创建了一个区块的链条。或者,正如它更广为人知的名称:区块链

示例

下面是区块链中最高的 5 个区块。如果您查看它们,就会发现它们各自的区块头中都包含其下方区块的哈希。

高度 区块哈希
956,479 000000000000000000000af753580e7b7bd555102cfbe9c72b4b625dbd3f48d8
956,478 000000000000000000002c0a4bbbd933f15946021264162b74ce5c45b49a2100
956,477 000000000000000000000be1b133d433b3e0b0bf69f9368c20715ccf22ce85ce
956,476 000000000000000000000aad5f4e9a1b745a856f53e4c613253b8275284221e9
956,475 000000000000000000001075120ee6594b359a02eda683e7c1ec3830838e281a

您可以通过从区块顶端开始并一路跟随 previous block 字段,访问区块链中的每一个区块,直至最底部。

用途

当构建候选区块时,矿工会在 previous block 字段中放入当前区块链尖端的区块哈希。

Diagram showing how a candidate block referencing the tip of the blockchain through the previous block field in the block header.

所有的矿工都希望延长当前已知最长的区块链接,因为最长链是所有节点采用的区块链的权威 (canonical)版本,并且矿工只有在区块成功进入最长链达 100 个区块深之后,才能收回其区块奖励

canonical – 经授权的;公认的;被接受的

collinsdictionary.com

您可以通过运行 bitcoin-cli getbestblockhash 来查找当前区块链尖端的区块。

所有区块都必须构建在现有的前一个区块之上。 如果您在区块的 previous block 字段中放入一个不存在的哈希值,该区块将是无效的,并会被网络上的节点拒绝。

目的

为什么区块要包含前一个区块的哈希值?

previous block 字段的作用是将区块连接在一起构成区块链。

区块哈希是区块的唯一引用,并由区块的内容决定。因此,通过在区块头中包含前一个区块的哈希值,您可以创建一个可靠的数据链,其中每个数据块(即交易区块)都链接到它前面的那个区块。

Diagram showing how block hashes are used to create a chain of blocks.

区块链只是通过区块哈希连接起来的区块链接。

因此,如果您试图修改较旧区块的内容(例如替换或删除某笔交易),这将更改该区块的哈希值,并且它将不再是同一区块链接的一部分,因为构建于其上的区块将不再引用它。

Diagram showing how changing the contents of a block will change its hash, and will therefore break the link in the blockchain.

如果您更改了其中一个区块哈希,您就将其从链条中移除了。

所以基本上,这条区块哈希链条就是防止任何人回到过去更改区块链的机制。因为如果您这样做,节点将忽略修改后的区块,因为它不会成为已知最长链的一部分。

这就是人们将区块链称为“不可篡改账本 (immutable ledger)”的意思。

immutable – 不可改变的;某物是不可改变的,将永远不会改变或无法改变。

collinsdictionary.com

创世区块

创世区块的独特之处在于其 previous block 字段全为零。这是因为它是区块链中的第一个区块,因此没有“前一个区块”可供其构建于其上。

这就是我关于区块头中 previous block 字段仅有的有趣事实。

资源