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