最長鏈規則的優勢與不足

買賣虛擬貨幣
我們系列專題的第一期,就來談談比特幣所採用的最長鏈規則,也即“中本聰共識演算法”。
由於 Conflux 採用的是不同於最長鏈規則的最重鏈規則,所以在以往的文章中我們比較經常解釋 Conflux 沒有選擇最長鏈規則的原因,而對最長鏈規則本身的優勢介紹得比較少。這次我們將從一個更全面的視角來討論最長鏈規則的優勢與劣勢。首先我們來談談最長鏈規則的優勢。從比特幣開始,無論是最初的只是改改引數的萊特幣,還是後來提出的 Bitcoin-NG [1], 以及採用了 DAG 結構的 OHIE [2],眾多公鏈共識演算法的核心理念都是最長鏈規則。能夠得到如此多公鏈專案的青睞,最長鏈規則的過人之處究竟在哪裡呢?
OHIE 的論文 [2] 提到了很重要的一點:對於一個區塊鏈系統,最重要的是一個“端到端”的安全性證明——只針對幾種特定的攻擊方式證明安全性是遠遠不夠的,因為永遠無法避免將來有更聰明的人設計出更巧妙的攻擊策略。在端到端的安全性證明這點上,最長鏈規則具有足夠的先發優勢。作為開加密貨幣之先河的比特幣的核心規則,最長鏈規則得到了最廣泛和深入的研究。實際上,即使是被研究最多的最長鏈規則,其安全性的完整證明也要晚至 2016 年 9 月才由康奈爾大學的密碼學教授 Rafael Pass 等人首次完成 [3] 。(中本聰在比特幣白皮書中的證明只考慮了特定的攻擊方式,其它一些更早的工作則只證明了最長鏈規則在特定條件下的安全性。)Rafael 的證明可以直接推廣到任何一個合理設計的基於最長鏈規則的公鏈系統。相比之下,其它的共識演算法包括最重鏈規則在 2019 年以前都沒有一個完整的安全性證明,甚至有些共識演算法連在限定條件下的安全性證明都沒有。我們將把有關最重鏈規則的問題以及 Conflux 的應對留在之後的幾期來講,此處不再展開。那麼 Conflux 為什麼沒有采用最長鏈規則呢?主要原因在於最長鏈規則對“孤塊”非常敏感。
“孤塊”是指那些形式上合法但是最終沒有進入主鏈(最長鏈)的區塊。在理想的情況下,誠實節點每次生成區塊都會將最長鏈的長度增加一。但是,如果兩個誠實節點近乎同時挖出了兩個區塊,互相都沒有引用對方作為父親區塊,那麼這兩個區塊就形成競爭關係。相互競爭的區塊最終至多隻有一個進入最長鏈中,其餘的都會成為不對最長鏈做出任何貢獻的“孤塊”。一旦系統中的“孤塊”過多,最長鏈的增長速率就會受到影響,進而給攻擊者可乘之機。例如在 50% 的誠實區塊成為“孤塊”的情況下,最長鏈的平均增長速度就只有誠實節點出塊速度的一半,此時攻擊者只需要 34% 的總算力(多於誠實算力的一半)就可以對任意早的交易發起雙花攻擊。“孤塊”的出現頻率與一個比值有關:平均生成一個區塊所需的時間 / 區塊在點對點網路中廣播需要的時間,我們暫且稱為安全性係數。這個比值越高,則孤塊出現的頻率越少,相應的也就更安全。根據文章 [3] 中的分析,在這個比值大於 7 時,雙花攻擊所需算力的理論閾值是 45% 左右;比值大於 60 時,雙花攻擊所需算力的理論閾值是 49.5% 左右。目前比特幣的比值在 60 左右。因此我們有以下四個式子:1. 安全性係數 = 平均生成一個區塊的時間 / 區塊廣播時間2. 網路頻寬係數 =區塊大小 / 區塊廣播時間 
3. 單筆交易負載 = 區塊大小 / 每個區塊交易數量4. TPS = 每個區塊交易數量 / 平均生成一個區塊的時間也就是說,安全性比值 * 單筆交易負載 * TPS  = 網路頻寬係數 上式中除了 TPS 之外的每項都對應了一個在最長鏈規則下提高 TPS 的切入點:1. 降低安全性係數:簡單地改比特幣的引數,犧牲一部分安全性以換取更高的效率。例如縮短出塊時間或者增大區塊尺寸(相當於增加區塊廣播時間)。
2. 降低單筆交易負載:使用緻密區塊(compact block)技術,把完整傳輸每筆交易(約數百 KB)變成傳輸交易的短 ID(4~6 B)。3. 提高網路頻寬係數:提高共識節點的加入門檻,犧牲去中心化程度以換取更高的效率。極端情況下可以只保留少量光纖直連的超級節點(比如說 21 個)。這幾個修改的方向都非常直接有效,但是可以帶來的效能提升是比較有限的,過度使用帶來的犧牲也非常大。例如將區塊的尺寸增加到上百 MB 或者將共識節點數量減少到 20 個都很可能是得不償失的做法。實際上,Bitcoin-NG 和 OHIE 利用一些特殊的設計繞過以上限制。另一方面,如果將樹圖結構與最長鏈規則結合,其實也可以很簡單地設計出高 TPS 的共識機制。關於這一點,我們將專門寫一篇文章詳細討論,此處先不展開。總而言之,在提高 TPS 這條路上,儘管最長鏈規則受到以上分析的制約,但透過合理的設計,這個天花板還是可以繞開的。最長鏈規則最大的弱點,是區塊的確認時間。
如果把安全性係數設為 10,則等待 6 個確認區塊的平均時間是 60 * 區塊廣播需要的時間;如果需要在兩分鐘內確認一筆交易,就需要把區塊廣播時間控制在 2 秒內。實際上,在區塊廣播中的每一跳,每個節點都需要進行驗證和執行等一系列操作之後才能向下一跳轉發。在節點數較多的時候,即使是不大的區塊想要在 2 秒內傳遍全網所有(或絕大多數)節點也是一件非常困難的事情。從目前的網路環境來看,3 到 5 分鐘的確認時間基本上已經是最長鏈規則的極限。Conflux 的原型版本(也即目前公開的版本,新版本的文章和技術規範尚未公開發布)中區塊的確認時間是 4 到 7 分鐘,看起來也沒有做得更好。實際上,隨著我們對最重鏈規則進行更深入的研究並進一步發掘其特有的潛力,在 PoW 鏈的確認時間這點上我們已經取得了驚人的突破,實現了遠超最長鏈規則的確認速度…… 最重鏈規則究竟魅力何在呢?且待下期分解。

免責聲明:

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

推荐阅读

;