Security

如果我發布早期區塊的修改版本會發生什麼?它會立即被對等節點拒絕嗎?

  • October 20, 2018

我正在閱讀《精通比特幣》這本書,已經讀完了第 2 章和第 10 章,但我仍然沒有找到答案。

假設目前主鏈有 5 個區塊:

B0 <- B1 <- B2 <- B3 <- B4

隨著新交易的湧入,誠實的礦工正在探勘B5第 6 個區塊。

如果我向比特幣網路發布一個修改過的B2,比如說B2',這個修改過的區塊被其他對等方接收到時會發生什麼?假設B2'包含所有交易,B2除了一筆交易的轉移比特幣金額稍作修改但仍然是有效金額。

  • B2'直接被拒嗎?看起來不是這樣,因為修改後的交易似乎仍然有效。據我所知,接收節點使用較早的塊,B0B1,來驗證B2',我認為驗證會成功。我對嗎?
  • 如果B2'不立即拒絕,對等節點是否會將其連結B1為輔助鏈?我實際上認為B2'應該被拒絕,但是在閱讀了掌握比特幣的第 10 章之後,​​我似乎沒有找到理由來證明為什麼應該拒絕它。
  • 此外,如果無論如何B2'都連結到B1,那麼當第 6 個區塊 ,B5現在被探勘和發佈時會發生什麼?根據第 10 章,“交易……被重新插入記憶體池以包含在下一個區塊中,因為它們所在的區塊不再位於主鏈中。” 所以我認為現在B2'將被刪除,其交易將被重新插入記憶體池。然後 in 中所有未修改的交易B2'將再次被刪除,因為它們已包含在B2主鏈中,而修改後的​​交易 inB2'將被拒絕,因為它與 in 中的對應物衝突B2

謝謝你的幫助!

節點會立即拒絕它。

如果您只是簡單地更改 B2 的數據並發送它,那麼根據定義,該塊將無效,因為工作證明和默克爾樹將不再有效。

如果您修改數據重建 merkle 樹並重工作證明以產生替代的、有效的B2'(請注意,此新塊中的所有其他內容也必須有效,包括交易),節點仍將在鏈上升時拒絕它到 B4 的工作量更大。

節點會將總工作量最大的鏈視為有效鏈。如果你想重寫歷史,你需要探勘一條新鏈,回到你想要開始重寫的區塊,並探勘到它的總工作量超過目前最佳鏈的點。如果您隨後廣播這條新的區塊鏈,它將導致節點執行重組,並丟棄前一條鏈。

至於返回記憶體池的交易,這確實發生在重組的情況下。來自已刪除塊的所有交易都將返回到記憶體池。通常,由於礦工通常會選擇相似的交易,替換舊塊的新塊將確認大部分相似的交易,因此記憶體池通常只會在它結束時略有不同。

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