孤塊

孤塊

在比特幣協定中,最長的鏈被認為是絕對的正確。如果一個塊不是最長鏈的一部分,那么它被稱為是“孤塊”。一個孤立的塊是一個塊,它也是合法的,但是發現的稍晚,或者是網路傳輸稍慢,而沒有能成為最長的鏈的一部分。在比特幣中,孤塊沒有意義,隨後將被拋棄,發現這個孤塊的礦工也拿不到採礦相關的獎勵。

基本介紹

  • 中文名:孤塊
  • 外文名:orphan block
  • 領域:區塊鏈
  • 定義:未找到它的父區塊的區塊
  • 有關術語:區塊
  • 發生:兩個區塊在很短的時間間被挖出來
簡介,最重的鏈,區塊,

簡介

如果節點收到了一個有效的區塊,而在現有的區塊鏈中卻未找到它的父區塊,那么這個區塊被認為是“孤塊”。孤塊會被保存在孤塊池中,直到它們的父區塊被節點收到。一旦收到了父區塊並且將其連線到現有區塊鏈上,節點就會將孤塊從孤塊池中取出,並且連線到它的父區塊,讓它作為區塊鏈的一部分。當兩個區塊在很短的時間間隔內被挖出來,節點有可能會以相反的順序接收到它們,這個時候孤塊現象就會出現。選擇了最大難度的區塊鏈後,所有的節點最終在全網範圍內達成共識。隨著更多的工作量證明被添加到鏈中,鏈的暫時性差異最終會得到解決。挖礦節點通過“投票”來選擇它們想要延長的區塊鏈,當它們挖出一個新塊並且延長了一個鏈,新塊本身就代表它們的投票。當然,試圖扭轉交易數據的算力攻擊(需要足夠的哈希算力)也能引發孤塊。

最重的鏈

Ethereum的GHOST協定,不認為孤塊沒有價值,而是會給與發現孤塊的礦工以回報。在以太坊中,孤塊被稱為“叔塊”(uncle block),它們可以為主鏈的安全作出貢獻。相對來說,比特幣有很長的塊間隔時間。在比特幣區塊中,平均約10分鐘可以得到一個確認(也就是發現一個新的後續區塊)。但是自從比特幣成立以來,大量關於塊鏈技術的研究已經發展起來。這些研究表明,更短的塊間隔確實是可能的,而且在很多套用場景下是需要的。然而,隨著擁有更快的出塊速度,孤塊的增加而帶來的昂貴的成本和浪費也隨之增加。GHOST協定支付報酬給叔塊,這激勵了礦工在新發現的塊中去引用叔塊。引用叔塊使主鏈更重。在比特幣,最長的鏈是主鏈。在以太坊中,主鏈是指最重的鏈。叔塊的好處,解決了兩個問題:
1. 以太坊十幾秒的出塊間隔,大大增加了孤塊的產生,並且降低了安全性。通過鼓勵引用叔塊,使引用主鏈獲得更多的安全保證(因為孤塊本身也是合法的)
2. 比特幣中,採礦中心化(大量的集中礦池)成為一個問題。給與叔塊報酬,可以一定程度上緩解這個問題。

區塊

區塊是比特幣中用來記錄和確認交易信息的數據結構。它是由比特幣系統中一些稱為礦工的節點產生的,而礦工構造區塊的過程被稱為挖礦。主要可以分為區塊頭部和交易數據兩大部分。在一筆交易被創建後,用戶會通過點對點網路向全網廣播這筆交易,而礦工們則會收集並驗證這些交易數據,並將其中合法的交易信息存儲在本地交易池中。在交易數目達到一定量後,礦工開始用這些交易數據構造區塊。礦工首先會確定要產生的區塊應該包含哪些交易數據,並計算交易數據的 Merkle值作為區塊交易數據的校驗。一般來說,礦工會儘可能多地優先選擇交易費較高的交易,因為一旦礦工挖礦成功, 這些交易費都將由他獲得。 隨後,
礦工會根據自己的挖礦協定以及前一個區塊數據,填充區塊頭部的版本、前驅區塊哈希值以及區塊時間。隨後,礦工會獲取系統當前的難度值,填入 nBits 欄位。這一數值是由系統設定用於調整挖礦難度的數值。一個合法區塊的哈希必須符合難度值的要求,在後面介紹影響分叉產生因素時將詳細解釋這一數值。最後,礦工開始遍歷隨機數Nonce,試圖獲得哈希符合當前系統難度值的區塊。這一步是挖礦環節最主要的工作。比特幣挖礦採用 sha256 算法作為區塊的哈希算法,這一算法沒有明顯的攻擊策略和漏洞,礦工們只有通過暴力搜尋來尋找符合系統難度值的區塊哈希值,這要求礦工具有非常強大的計算能力。而在某些難度值較大的情況下,礦工甚至不得不去調整一些交易數據的組合,以獲得更大的哈希搜尋範圍。
礦工挖礦成功後, 會向全網廣播其構建的區塊。系統中的節點會驗證和確認這個區塊,並將合法的區塊添加到區塊鏈的尾部,並把它繼續向外傳播。挖礦成功的礦工除了獲得區塊中所有包含的交易費外,還會額外獲得一個系統設定的獎勵費,用作挖礦工作的回報。獎勵費是通過一個沒有輸入的特殊交易來實現的,這種交易也被稱為 Coinbase 交易。在交易費和獎勵費的激勵下,礦工會不斷投入計算力量爭取成功挖礦,區塊鏈也得以不斷延伸,從而記錄下更多的交易信息。假設比特幣的網路是同步的,且不存在多個礦工同時挖出一個合法區塊的情況,那么系統中的區塊會依次不斷產生並添加到區塊鏈尾部。在這種狀態下,系統中的所有節點所存儲的區塊鏈數據一致。在驗證一筆交易的時候,節點可以通過遍歷搜尋區塊鏈的數據來確認交易中的 UTXO 是確實存在且沒有被重複使用,而攻擊者幾乎沒有方法能夠修改或是偽造數據。然而,比特幣是基於點對點網路建立的系統,區塊的傳播必然存在延時,且礦工之間的挖礦工作相互獨立,存在同時挖礦成功的可能。在這種情況下,系統將不再處於理想狀態。分叉是區塊鏈必須解決的問題,因為如果任由分叉不斷延伸,那么攻擊者可以分別在 chain a和 chain b 上同時使用 b 區塊以及之前區塊交易中的UTXO 進行重複消費。不僅如此,分叉狀況下,只有少數中間節點能夠察覺到分叉的存在,大部分不知情的節點會繼續在各自的鏈上挖礦。對於全網而言,節點的計算能力實際上被割裂,這將直接降低區塊的產生速率,影響系統性能。比特幣處理區塊鏈分叉方法是先讓節點繼續在兩條鏈上繼續挖礦,一旦有一條鏈的高度超過了其他支鏈,那么這條鏈就會勝出成為主鏈,而其他支鏈將會被拋棄。這些被拋棄鏈上的區塊不再有任何意義,被稱為孤塊。這種處理分叉的方法實際上就是比特幣的共識,即所有節點都遵循的一個公開規範。共識也是去中心化系統解決競爭問題的主要方式之一。由於分叉的存在,區塊鏈中尾部的一些區塊並不是絕對安全的,因為它們存在著被新的分支超越的可能。但是,隨著後續新區塊的不斷追加,它們被新的分叉超越的可能性會呈指數式下降。基於這一情況,比特幣中一筆交易的確認往往需要等待該交易所在區塊能夠有一定數量的後續區塊,這導致了比特幣中的交易確認並不是實時的,其過程通常需要幾個區塊產生的時間。

相關詞條

熱門詞條

聯絡我們