兩名礦工同時挖到區塊,會發生什麼事?

兩名礦工同時挖到區塊,會發生什麼事?的文章封面插畫

比特幣的挖礦在世界各地同時進行。新區塊沒有預約時段,兩名礦工或兩個礦池因此可能在相隔極短的時間裡,各自找到一個符合規則的結果。

可是,網路沒有中央裁判能在同一瞬間通知所有人哪個區塊先到。傳播需要時間,不同全節點可能先收到不同版本,於是區塊鏈會短暫分成兩條末端。這種情況屬於正常的傳播競賽,與修改規則造成的長期分裂不同。

同一個高度,可以暫時有兩個有效區塊

假設目前所有人都接受區塊 A,接著兩名礦工分別找到 B1 與 B2。兩者都接在 A 後面,也都通過交易、格式與工作量證明檢查,因此它們的高度相同,內容卻未必一樣。

靠近第一名礦工的節點可能先看到 B1,另一側的節點可能先看到 B2。在兩條分支累積的工作量相同時,節點通常先保留自己率先接受的版本,並把它當作目前帳本的頂端。此刻各地畫面尚未完全一致,但雙方仍在執行相同規則,沒有任何一方僅因較晚抵達就立刻變成無效資料。

這也說明了「全網同時更新」為何只是方便理解的簡化說法。訊息在實際網路中有先後延遲,短時間的不一致無法完全消除;系統需要一套方法,讓這些局部視角重新收斂。

下一個區塊會拉開差距

礦工會在自己目前選定的有效鏈頂端繼續工作。若下一個合格區塊 C 接在 B1 後面,B1 這一側便累積了更多工作量。原先採用 B2 的節點收到並驗證 B1、C 後,會把自己的最佳鏈切換到這一側。

這個過程常被稱為鏈重組。判斷關鍵在累積工作量,單看區塊數量可能失真;比特幣節點會選擇自己所知、有效且累積工作量最多的鏈。當新區塊持續在同一側增加,多數參與者便逐步回到共同歷史,形成可運作的共識

整個收斂過程不需要礦工開會,也沒有管理員指定勝負。規則讓每個節點能根據收到的資料自行驗證,再得到相容的選擇。不過,在下一個區塊出現前,兩條同工作量分支仍可能各自被不同節點視為最佳鏈。

沒被延伸的區塊去了哪裡

B2 即使原本完全有效,失去競賽後也不再屬於目前最佳鏈,通常稱為陳舊區塊。它不會改寫成無效內容,只是沒有成為大家繼續延伸的那段歷史。該區塊原本宣告的補貼與手續費收入,也不會成為最佳鏈上的可用收入,這是礦工遇到短暫分岔時承擔的成本。

陳舊區塊裡的普通交易則要分情況看。若同一筆交易也被勝出分支收錄,它的狀態不受影響;若尚未被收錄、也沒有和勝出歷史衝突,節點通常可讓它回到待處理交易中,等待之後再被打包。若勝出分支已收錄花費同一筆資產的衝突交易,落敗版本就不能在這條歷史上成立。

所以,區塊落敗不等於裡面每筆交易都永久消失。真正改變的是它們在最佳鏈上的位置,以及當下是否仍符合可被收錄的條件。

為什麼一次確認仍有小幅回頭空間

如果一筆交易只出現在 B2,它曾經顯示的第一次交易確認可能因重組而消失,直到後來重新進入勝出分支。這就是確認數需要逐步累積的原因:交易所在區塊後面接上的有效工作量愈多,一次普通的同步競賽就愈難把它移出目前歷史。

正常傳播造成的分岔通常很淺,常在後續區塊出現後迅速收斂。然而,「通常」不構成絕對保證。大規模斷網可能讓兩側分開延伸更久,蓄意的多數算力攻擊也可能製造更深重組;這些情況的持續時間、成本與風險,都高於兩名誠實礦工碰巧同時成功。

因此,兩個同高度區塊同時出現,不代表比特幣忽然產生兩套永久帳本。它反映的是分散式網路無法要求所有人同時看見同一則訊息,而累積工作量提供了後續收斂的依據。理解這段短暫分岔,也就能看懂交易確認為何是一種逐漸增強的穩定性訊號,而非瞬間完成、永不回頭的印章。