Protocol

為什麼 coinbase 需要區塊高度?

  • February 17, 2022

在閱讀比特幣來源時,我發現了這個簡短的評論:

// Height first in coinbase required for block.version=2

(來自<https://github.com/bitcoin/bitcoin/blob/master/src/miner.cpp#L338>)。

為什麼這是必需的?它是否可以防止一些誤用或攻擊?

我發現此更改是在BIP-0034中引入的。在相關的拉取請求中,以下幾點是合理的:

至少出於兩個原因,需要將高度放在硬幣底座中:

  1. 它保證每個後續塊和交易雜湊都是唯一的。
  2. 它可以用來更好地推斷尚未連接的塊的合理難度。

但對我來說,這並不能解釋什麼:我不明白增加高度如何保證唯一的塊雜湊,我不明白什麼是“尚未連接的塊的合理難度”。

@amaclin 在他們的評論中指出BIP-30BIP-34提供了動力。

我仍然不明白什麼是“更好地解釋尚未連接的區塊的合理難度”,但 BIP-34 的唯一目的似乎是防止故意創建重複的 coinbase 交易。

根據 BIP-30,它們可用於多種攻擊:

最近,描述和展示了利用參考實現處理重複事務的攻擊。它允許將完全確認的交易恢復為單一確認,使它們容易變得完全不可消費。另一種攻擊是可能的,它允許為網路的一個子集分叉塊鏈。

Pieter Wuille 的這個回答更詳細地解釋了區塊鏈分叉。


與BIP-34 pull request中的解釋相反,將塊高度添加到 coinbase 並不能保證每個後續交易雜湊都是唯一的。故意創建具有相同雜湊的交易只會變得更加困難。部分非關聯交易仍有可能發生衝突。

引用自:https://bitcoin.stackexchange.com/questions/30764