Doublespend

當兩個礦工同時發現有衝突的區塊時,如何解決雙花問題?

  • June 15, 2020

我試圖了解比特幣及其流動。實際上,我被困在解決雙花問題的控制流程中。

例如。如果 T a和 T b是同一筆交易具有不同輸出的雙花。這兩個交易可以在網路中流經不同的路徑,並假設在完全相反的路徑中流動。因此,T a到達了創建區塊的礦工 M a ,而 T b到達了另一個礦工 M b。現在,M a可以用 T a和 M b用 T b解塊。兩者都開始廣播各自的區塊,其中 Ta 和 T b是區塊鏈的一部分。

在中繼一段時間後,某些節點可能會同時獲得兩個交易並發現其無效,但這裡已經中繼了該塊。在這種情況下會發生什麼,雙花是如何解決的?

塊形成鏈;每個塊都包含一個prev欄位,該欄位包含“之前”它的塊的雜湊值。兩個區塊 Ma 和 Mb 是不兼容的(區塊鏈不允許包含兩個衝突的交易),所以不能先於另一個。因此它們必須是“叉子”;具有相同共同祖先的兩個不同塊。所有其他礦工都必須決定他們要在哪個分叉上開採;例如,他們是否想創建一個塊,其prev欄位指向 Ma 或 Mb 的塊。在這種情況下,這並不重要。

假設下一個塊被 Mc 找到並指向 Ma 塊。那麼以 Mc 結尾的鏈更長,下一個礦工會更喜歡在分叉的那一側進行挖礦。經過幾次迭代,應該清楚的是,包括 Ma(有交易 Ta)在內的鏈更長,從那時起將被礦工首選。這意味著事務 Tb 現在已經死了。(此外,Mb 無法獲得他們的 12.5 BTC 塊獎勵,因為獎勵它的塊只存在於已死的側鏈上。)

為了視覺化比特幣區塊和交易通過網路“流動”的方式,它們應該被視為通過 P2P 網路*傳播。*連接的對等點(節點)相互通知新的交易和區塊,然後對等點可以詢問所有交易或區塊數據(庫存)。

在您給出的雙花範例中,雙花 txns 轉到不同的礦工,首先確認的交易,即礦工首先包含在有效區塊中的交易被網路認為是有效的 - 只要交易和區塊是在所有其他方面有效。

根據網路的共識規則,剩餘的交易(即使它首先被廣播)將被視為雙花嘗試,因為它與已確認的交易花費相同的輸出(UTXO)。然而,由於它在競爭的有效塊中得到確認(根據您的範例),因此第二個(按時間順序排列的)塊很可能是孤立的。

在新開采的區塊的傳播過程中,它們需要經過對等方的驗證。對等點(因此,網路)將就兩個(或更多)競爭塊的有效性達成共識,並可能選擇一個——如前一段所述。在某些情況下,該鏈可能會暫時分叉,直到後續探勘的區塊允許共識收斂,在這種情況下,一條鏈將成為孤兒鏈,以支持共識分支。

以這種方式討論聽起來過於復雜,但不斷變化的共識狀態最終會導致收斂。這就是為什麼區塊鏈被描述為“緩慢”和“繁瑣”的原因,因為它就每筆交易和每一個區塊的有效性建立共識。

在這個相關的問題中有一個關於雙花的有用討論。

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