問題產生了
直到整個網路都知道了B和B’區塊,先看到B區塊的會將B放到最前面,但同時會將父塊(B與B’區塊之前的區塊)連線B’區塊作為參考。
節點將B區塊放到自己主鏈的最前面,但又同時保持對B’區塊的引用。
之後,礦工又立即展開下一輪區塊挖礦競爭。取決於礦工,下一個區塊要麼新增到B鏈,要麼新增到B’鏈。假設在這個例子中,礦工在B區塊後面新增下一個區塊C(讓B鏈成為最長鏈),並將C區塊廣播到剩餘網路。除非再次出現分叉,否則一旦接收C區塊,B’鏈將自動接受B區塊路徑(頭部為C區塊),因為此時B鏈是最長鏈。無論節點是否將B或B’作為頭部,一旦區塊C新增在B區塊後面,B’區塊就會被拋棄。
B’區塊的交易將放回到mempool,B '被丟棄,成為一個孤塊,B '的礦工失敗了,他們失去了挖礦獎勵。因此,比特幣的出塊時間設定為10分鐘。中本聰認為,10分鐘是介於快速確認時間與低概率分叉的一個“中間地帶”,因此孤塊數量也會減少,這是一件好事。更新部分:最近我注意到,在孤塊和陳腐區塊之間存在很多混淆。這一節就用來闡明兩者的區別。1.陳腐區塊是在孤塊上挖出的塊。孤塊和陳腐區塊的礦工即使貢獻了有效算力,也不會因為挖礦而得到獎勵。
比特幣不會發生上述情況,因為一旦挖出D區塊並廣播,整個網路都會選擇跟隨D區塊。2.孤塊實際上是一個陳腐區塊。有些人會認為,我在這篇文章中使用的術語“孤塊”應該被引用為陳腐區塊。3.陳腐區塊是在找到有效PoW區塊後還在工作的塊。一個叫做“比特幣來源”(BitCoin Source)的網站已經很好地總結了這一點(我認為它現在已經不存在了),我在這裡應用它們的定義。“在任何一秒鐘,都可能算出一個區塊“答案”。這意味著,世界上所有在挖這個區塊的人都必須停止,並重新開始挖礦。在此之後還繼續挖礦的區塊被稱為“陳腐區塊”,因為它包含的是舊資料和舊交易。”4. 孤塊指沒有“父”塊的區塊。這是公認第二大原因。有些人認為,孤塊應該僅指“沒有父塊”的塊。因為比特幣是一個廣泛分佈的網路,一些節點知道其他節點不知道的塊。如果一個節點接收到一個塊,而不知道它的父塊,那麼節點就無法驗證,所以節點必須向網路中的對等節點請求父塊資訊。在接收到此資訊之前,該區塊將被視為孤塊。然而,在比特幣v0.10版本之後,由於節點下載區塊的方式發生了變化,因此比特幣中不再有這型別的孤塊。