Protocol
為什麼 coinbase 需要區塊高度?
在閱讀比特幣來源時,我發現了這個簡短的評論:
// Height first in coinbase required for block.version=2
(來自<https://github.com/bitcoin/bitcoin/blob/master/src/miner.cpp#L338>)。
為什麼這是必需的?它是否可以防止一些誤用或攻擊?
我發現此更改是在BIP-0034中引入的。在相關的拉取請求中,以下幾點是合理的:
至少出於兩個原因,需要將高度放在硬幣底座中:
- 它保證每個後續塊和交易雜湊都是唯一的。
- 它可以用來更好地推斷尚未連接的塊的合理難度。
但對我來說,這並不能解釋什麼:我不明白增加高度如何保證唯一的塊雜湊,我不明白什麼是“尚未連接的塊的合理難度”。
@amaclin 在他們的評論中指出BIP-30為BIP-34提供了動力。
我仍然不明白什麼是“更好地解釋尚未連接的區塊的合理難度”,但 BIP-34 的唯一目的似乎是防止故意創建重複的 coinbase 交易。
根據 BIP-30,它們可用於多種攻擊:
最近,描述和展示了利用參考實現處理重複事務的攻擊。它允許將完全確認的交易恢復為單一確認,使它們容易變得完全不可消費。另一種攻擊是可能的,它允許為網路的一個子集分叉塊鏈。
Pieter Wuille 的這個回答更詳細地解釋了區塊鏈分叉。
與BIP-34 pull request中的解釋相反,將塊高度添加到 coinbase 並不能保證每個後續交易雜湊都是唯一的。故意創建具有相同雜湊的交易只會變得更加困難。部分非關聯交易仍有可能發生衝突。