Blockchain-Fork

什麼是 SPV 挖礦,它是如何(不經意間)在 BIP66 啟動後導致分叉的?

  • March 10, 2016

我很想听聽硬分叉的深入解釋以及它是如何引起的;我聽過/讀過很多,但我缺乏連貫的解釋。

SPV 挖礦是“少於全節點驗證”挖礦的常用術語。這通常意味著礦工跳過對區塊和其中交易的驗證,並立即開始探勘引用剛剛解決的區塊頭的新區塊。但是,由於他們不知道最後一個區塊中有什麼,他們必須在沒有任何交易的情況下進行挖礦(除了 coinbase 交易),以確保他們不會挖出與前一個交易衝突的交易區塊堵塞。

在 BIP 66 強制執行後,大約 5% 的網路仍在解決版本 2 塊(BIP 66 強制塊使用版本號 >= 3)。這 5% 中的一名礦工用版本 2 解決了一個區塊,如果每個人都進行了全面驗證,那麼他們的區塊將被忽略並被版本 3 區塊取代。這就是應該發生的事情。

但是,不幸的是,一些礦池(我認為 F2Pool 是最大的一個)開始探勘一個新區塊,該區塊引用了無效的區塊頭而沒有驗證其中的交易,或者新頭使用的版本號為 3(就像剛剛成為強制執行)。礦工有時會直接連接他們的全節點或監控彼此的工作 API,以查看另一個礦池何時解決了一個塊,以便他們可以盡快開始處理新塊。在這種情況下,一些礦池聽說 BTC 掘金通過監聽他們的 Stratum API 解決了一個區塊,並開始對其進行探勘。他們甚至沒有區塊頭,只有區塊頭的雜湊。

<https://en.bitcoin.it/wiki/July_2015_Forks#Invalid_Block_Hashes>顯示無效塊:

  • 00000000000000000009cc829aa25b40b2cd4eb83dd498c12ad0d26d90c439d99 由 BTC Nuggets 開採(98 次非幣基交易)
  • 0000000000000000155f2519d35cd5d2869900bcc5093594b27763a0315390b4 由 F2Pool 開採(0 個非幣基交易)
  • 00000000000000000cb7a20ee4e199e347ad7369936abae53a1518efa531ec61 由 F2Pool 開採(0 個非幣基交易)
  • 00000000000000000966d65e0fd87d1d5a8f154a2c955816c28e2006e381aa18 由 AntPool 開採(0 個非幣基交易)
  • 由 F2Pool 開采的 00000000000000001301bfd6f566a421c7eeba103d09b312032ca065cb185de7 (0 個非幣基交易)
  • 由 F2Pool 開采的 000000000000000013fe26675faa8f7dccd55ce5485bb6d0373fa66345901436(0 個非幣基交易)

核心開發人員之一 Gregory Maxwell 也在此處發布了一個解釋,您可能會覺得這很有用。

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