一文帶你深入瞭解孤塊

買賣虛擬貨幣

雖然我鍾情於以太坊,以及圖靈完備的區塊鏈(比特幣不是),但以太坊也是建立在比特幣的眾多概念基礎之上,因此兩者有極大相似性。

本文,我們就來聊聊比特幣的“孤塊”。大多數情況下,所有PoW鏈都與下文描述相符合。

比特幣有一個“最長鏈制勝”的規則,也就是說,擁有最高算力的那條鏈將獲得認可,或被網路接受為“主鏈”。這是為了防止個人或某個集團掌控集體網路(除非該集團掌控網路50%以上的算力)。由於PoW演算法需要大量算力做支撐,因此對於作惡者而言,要保持最長鏈不僅困難,而且耗資高昂。

最常見的情況是,最長鏈是擁有最多區塊的鏈,如果區塊數量相同,則比拼總PoW(將難度相加)。但“最長鏈制勝”容易讓人誤解網路中可能存在多個競爭鏈(測試鏈除外,它們不參與競爭)。正確的理解是,一條鏈存在多條路徑,節點需要遵循PoW最多的那條路徑。

那路徑又是指什麼?也就是我們經常會碰到網路無意中出現的分歧或“分叉”。

在採用PoW演算法的區塊鏈中,當網路中兩位礦工幾乎同時算出PoW難題,會產生意外分叉。兩位礦工各自向剩餘網路廣播自己是“制勝”區塊所有者,這是由於網路延遲造成的(沒有瞬時出塊)。

讓所有節點都知道有一個新挖出的區塊,需要一定時間。

假設兩位礦工幾乎同時算出答案,我們將他們的區塊稱之為B與B’。兩位礦工都將自己的“成功“區塊廣播給周圍的節點,節點又廣播給對等節點,直到整個網路都知道這一新區塊。如果一個區塊達到整個網路需要10秒(並非真實的時間),兩個礦工分居網路兩端,傳播5秒後會出現網路分裂(假設整個網路的延遲時間一致)。

半數的人認為B區塊的鏈是主鏈,而另一半人認為B’區塊的鏈才是主鏈。


問題產生了

直到整個網路都知道了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版本之後,由於節點下載區塊的方式發生了變化,因此比特幣中不再有這型別的孤塊。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;