『壹』 GHOST,DAG,SPECTRE,PHANTOM和CONFLUX技術原理
DAG概念,當做繼比特幣,以太坊後新的一代區塊鏈技術(區塊鏈3.0),那麼DAG區塊鏈是什麼?DAG的由來是什麼?它的技術理念是怎麼樣的?運行在DAG區塊鏈上的協議有哪些?
要想解釋DAG,離不開Yonatan Sompolinsky 和 Aviv Zohar兩位以色列人,他們是DAG區塊鏈這一概念的提出者。在DAG之前,Aviv Zohar提出了一個GHOST協議(以太坊初期就採用了GHOST協議),該協議解決的是鏈分叉帶來的安全性問題,而分叉的區塊鏈 在GHOST協議下數據結構就從一條鏈變成了一個樹(Tree),而之後Aviv Zohar進一步提出了一個inclusive協議,在inclusive協議規則下,區塊的結構就變成了有向無環圖(DAG)。
接下來本文將:
1.介紹 GHOST協議,DAG由來 背後的 設計原理
2.介紹三種針對DAG型區塊鏈設計的協議,SPECTRE、PHANTOM和CONFLUX。
GHOST協議是為了解決 分叉 導致 鏈安全性降低 的一個協議。
下邊將通過解釋什麼是 分叉 ,為什麼 分叉會降低鏈的安全性 , 鏈上擴容 為什麼會導致更多分叉來詳細介紹GHOST協議。
一筆比特幣交易為什麼要等6個區塊的交易時長呢?
等待不是為了 防範51%攻擊 的。落後6個區塊,如果擁有超過51%的算力,只要足夠長的時間,一定能夠產生更長的鏈完成攻擊。它是為了防止 分叉 帶來的風險。
比特幣在 理想情況 下,不同節點之間有相同的一條區塊鏈,全部節點都是基於 同一個區塊 進行挖礦,但當兩個挖礦節點 幾乎同時 挖到一個新的區塊,當它們接收到對方產生的區塊時,不同的節點將選擇基於 其中一個 區塊挖礦, 分叉 產生了。之後節點會根據哪條 分叉更長 ,選擇哪條是主鏈進行挖礦,而不是主鏈的分叉區塊全部被 拋棄 。
比特幣每天都會發生 二分叉 ,但出現連續的 六次分叉 幾乎不可能,於是要等待6個區塊的確認時間。(這種分叉不是來自惡意攻擊,是 偶然性以及網路延遲 導致的。
分叉將『攻擊不超過51%算力,比特幣就是安全的』這一理論推翻。
在比特幣中,當鏈有 分叉 時,將選擇分叉 最長 的鏈作為主鏈,惡意攻擊就是產生一條比主鏈更長的鏈 代替主鏈。
下圖中藍色區塊代表誠實區塊,紅色代表攻擊區塊。2號、3號藍色區塊產生 分叉 ,此時攻擊節點產生5個攻擊區塊(紅色)就能產生一條 更長 的鏈完成攻擊。雖然藍色區塊總數更多(有6個), 但分叉的區塊沒有增加鏈的長度 ,這種情況下,紅色攻擊方在算力(假設每個區塊代表算力相同)沒有超過51%的情況下攻擊成功。
比特幣當前安全的原因在於10分鍾的區塊時間降低了分叉可能性,但其實際安全算力仍低於51%,也就是說,不需要51%的算力也能攻擊成功。
採用 大區塊 以及 小的產出時間 將導致鏈有 很多分叉。
比特幣當前處理交易量很低,改進這個缺陷一個可行方法就是 增大區塊的大小和減小區塊的產出時間 。大區塊需要更多的網路傳輸時間、單位時間更多的區塊數都會導致 更多的分叉 。
鏈上擴容的方案對比特幣處理交易能力提升是巨大的 ,假如每個區塊大小變為原來的八倍(8M),出塊時間縮短為原來的五分之一(2分鍾),理想情況下,比特幣的處理交易量將變為原來的 40倍 ,實際情況會產生分叉,交易量不會有這么高。
主鏈選擇中,採用計算最大子樹來代替比特幣中的最長鏈規則。
比特幣的最長鏈規則在有分叉情況下,將降低鏈的安全性,分叉越多,安全性越低。鏈上擴容將導致更多分叉,導致鏈不安全。
Yonatan Sompolinsky提出GHOST規則, 當有分叉時,通過計算最大子樹,也就是每條分叉擁有的所有區塊數來決定哪條鏈是主鏈 。圖0中,鏈在區塊0後分叉了,上邊分叉總計有6個藍色區塊,下邊分叉有5個紅色區塊,藍色區塊1是主鏈,所以 紅色攻擊失敗 。
在有大量分叉的情況下,GHOST規則將鏈安全性直接提到了51%,分叉對採用GHOST協議的鏈安全性沒有影響。
根據GHOST規則,上圖中雖然誠實節點產生了12個區塊,但加入主鏈的只有4個區塊,大量區塊 被丟棄 ,假定比特幣每個區塊大小變為原來的八倍(8M),出塊時間縮短為原來的十分之一(1分鍾),分叉率為0.33(產生的區塊加入主鏈的概率),比特幣的處理交易能力將變為原來的 26.6倍 。
GHOST協議解決了鏈上擴容導致分叉帶來的安全性問題。
區塊的結構類型就從一條鏈變為樹
在GHOST的提出後,Yonatan Sompolinsky提出一種新的設想,新產生的區塊指向所有已知的分叉末端區塊,即一個區塊有多個父親,此時 區塊鏈就從一條鏈變為多條分叉鏈共同組成的的結構,這樣的鏈結構就被叫做DAG(有向無環圖) 。
Yonatan Sompolinsky進而提出了在DAG上運行的 inclusive協議 ,原理如下:
遺憾的是, Yonatan Sompolinsky之後並沒有詳細介紹補充該協議 ,而是提出了一種新思路的DAG協議——SPECTRE。
看完上邊內容之後,你會發現, 最長鏈規則下,分叉的區塊對比特幣安全性和交易量沒有任何貢獻 ,白白的浪費了算力,而 GHOST通過計算分叉區塊個數來提升鏈的安全性 ,但分叉區塊除了納入區塊計數外,區塊內包含的交易信息卻全部 被丟棄 。
這種新的區塊結構帶來了新的特性,當然,比特幣的 最長鏈規則 也可以在DAG上實施,只不過安全性和處理交易能力不佳,而GHOST協議可以提高安全性和處理交易能力,為了 最大化 利用DAG區塊鏈特性,社區提出了不同的協議,接下來介紹Yonatan Sompolinsky 提出的 SPECTRE協議 ,以及 PHANTOM協議 ,以及國內某社區提出的 CONFLUX協議 。
丟棄主鏈概念,所有產生的區塊共同構成賬本,不丟棄任何一個區塊
只要是產生的區塊就不會被丟棄,所有的區塊都是有效的,所有區塊共同組成賬本,這樣進一步提高了區塊鏈的處理交易能力, 該設計的關鍵在於設計演算法來保證區塊鏈不會被惡意攻擊成功。
SPECTRE協議較為復雜,下邊將從其如何產生區塊、如何處理沖突交易以及產生可信交易集三個方面進行描述。
SPECTRE協議中,當產生區塊時,要指向之前所有分叉的末端區塊。
下圖中,左邊為比特幣產生區塊時,當有分叉出現,新區塊將選擇基於其中一個產生新的區塊,而SPECTRE中,將基於所有分叉末端區塊產生新的區塊。同時,當有新區塊產生時,節點要立刻將新區塊(包含基於哪些區塊產生這一信息)發送給與自己相連接的節點。
仔細觀察,GHOST協議中雖然有分叉,但每個區塊都只基於前邊某一個區塊產生,而SPECTRE協議中要基於當前節點知道的所有末端區塊產生下一個區塊。
SPECTRE協議將礦工維持交易不沖突的要求剝除
比特幣就像一本 權威 的賬本,只要是里邊記錄的,就一定是真的(不考慮分叉和惡意攻擊),而SPECTRE產生的DAG就像一本 不權威 賬本,里邊的交易信息可能沖突(上邊圖1中兩個1區塊中可能包含沖突交易信息)。
該協議下,挖礦節點只 負責迅速挖區塊 (能夠達到1秒一個區塊),而對分叉中可能包含的沖突交易在挖礦階段並 不做任何處理 ,將記錄交易速度最大化,讓DAG這種區塊鏈有著恐怖的處理交易能力。
是時候解決挖礦不解決的 沖突交易 問題了,SPECTRE的思路是設計一個計算投票的演算法,讓誠實區塊會投票給誠實的區塊,後邊的誠實區塊會給前邊的 堆疊算力 ,從而讓惡意攻擊失敗,其安全算力也是 51% 。
拿雙花舉例,下圖中,X和Y區塊中包含著兩條沖突交易會導致雙花,此時DAG中的區塊會對X和Y進行投票, 決定哪一個交易有效。
投票規則如下,投X的標藍,投Y的標紅,X<Y代表X先於Y:
根據投票結果,X中的那條交易信息 有效 ,Y中對應的那條交易信息 無效 。 Yonatan Sompolinsky也對 不指向前邊區塊 以及 產生區塊不發給鄰居節點的惡意攻擊 有進行分析,在投票規則中,低於50%算力的攻擊者會失敗。
投票聽起來像是一個主動地中心化行為,實際上不是,程序根據當前DAG區塊所處的狀態自發完成這一區塊投票計算過程,就相當於,給定一個DAG數據,輸入為兩條沖突信息,運行該規則演算法,將得出一對沖突交易的哪一個為有效。
SPECTRE可信交易集就相當於超過當前6個區塊的比特幣鏈里組成的交易集合。 區塊鏈從數字加密貨幣的角度來說,就是一個 賬本 ,從賬本上的交易信息中得出每個 賬戶 所擁有的貨幣,所以,得出 確定的、不可能更改 的交易信息就至關重要,SPECTRE可信交易集產生過程如下:
SPECTRE並不會對所有區塊進行排序,所有區塊沒有一個完整的線形順序,有的只是決定沖突信息先後的區塊順序對。
比特幣中的高度代表的就是 線形順序 ,高度低的區塊中交易信息先於高度高的區塊里的信息,高度高的區塊就不能 包含和高度低的區塊沖突的交易 ,而SPECTRE有大量的分叉,區塊高度不能代表線形順序,前邊的區塊交易信息不一定先於後邊的分叉區塊交易信息,交易信息的有效性要由投票演算法來決定,區塊投票演算法很快,再加上它將 所有分叉區塊 都包含進來,也就沒有了比特幣所面臨的 分叉風險 (等待6個區塊),交易確認時間可以達到10秒。
至此,和比特幣相比,SPECTRE對應的DAG區塊鏈有三個特點:
SPECTRE協議非常 適合DAG型數字加密貨幣 ,但當它用於智能合約時,它的缺陷就出來了,智能合約需要一個 嚴格的線性順序 ,對此Yonatan Sompolinsky新設計了 PHANTOM 協議來對DAG區塊形成一個 線性順序 ,下邊將詳細介紹PHANTOM協議。
SPECTRE和PHANTOM是兩個完整的獨立的協議,不是一個對另一個的補充。
PHANTOM的挖礦機制和SPECTRE一樣,會產生同樣類型的DAG,不同的是PHANTOM通過對 區塊連通度分析 ,判定區塊誠實還是惡意,按照分類對區塊排序,對DAG區塊產生一個嚴格的 線性順序 ,通過線性順序來判斷 沖突交易有效性 。
DAG中,攻擊者有兩種攻擊手段, 一產生的區塊不基於已知的末端區塊,二不立即發布自己產生的區塊 ,前者會讓自己區塊指向的區塊變少,後者讓其他節點產生的區塊不會指向自己的區塊,這兩種情況都會導致這些惡意區塊的與其它區塊的 連接度低 。
誠實區塊在考慮網路最大延遲下,經過一定時間一定會傳遍整個網路,一定會被後邊的區塊所指向,誠實節點在產生新區塊時也一定會指向自己所知道的末端區塊。
通過對 區塊指出去的邊和指向該區塊的邊 進行分析,也就是區塊的 連通度 ,當考慮最大的網路延遲,連通度會有一個 極限值K ,低於該值的區塊可以被認定為惡意區塊,在排序中要處於 劣勢 。
接下來,進行區塊 誠實和惡意 判定,判定分兩步,第一步最重要, 實現復雜也耗費時間 ,主要為通過對區塊連通度的判定,將強連通度的區塊標為藍色視為誠實區塊,弱的標為紅色視為惡意區塊。
第二步 先對藍色區塊集排序 ,拓撲排序,然後對 紅色區塊集排序 。紅色區塊的順序要處於弱勢,例如上圖中C,它處於A和I之間,那麼它的順序會排在I的前一個區塊,而D、H都會排在C前。 注意通過考慮最大延遲時間設定連通度的值,幾乎所有正常誠實節點產生的區塊都會被標記為藍色
至此,PHANTOM協議實現了對DAG的 線性排序 ,通過線性順序就可以提取 無沖突交易集 ,進而提取 可信交易集 ,雖然耗時較長,滿足智能合約的要求。
Yonatan Sompolinsky在PHANTOM協議論文結尾,提出一種將PHANTOM + SPECTRE結合起來的可能協議,沒有詳細展開介紹。下圖是幾種協議的對比:
至此,介紹了Yonatan Sompolinsky一開始從分叉導致不安全提出的GHOST,到後來將DAG引入區塊鏈,設計了SPECTRE協議,以及為智能合約考慮的PHANTOM協議。接下來,介紹國內某社區提出的CONFLUX協議。
GHOST有 主鏈但丟棄分叉區塊 ;SPECTRE 沒有主鏈,包含所有分叉,但沒有線性順序 ;PHANTOM 沒有主鏈,包含分叉且有線性順序 ,而CONFLUX 即有主鏈,又是DAG,利用主鏈讓DAG產生線性排序 ,下面將從挖礦機制和區塊排序兩方面來說明CONFLUX協議。
CONFLUX協議定義了根源邊和參考邊。 新區塊是基於前一個主鏈區塊產生的,新區塊用根源邊(實線)指向前一區塊,用參考邊(虛線)指向分叉的其他區塊末端 ,如下圖最後一個新區塊實線指向H,虛線指向分叉末端區塊K。 根源邊用於代表區塊基於哪個區塊產生,給哪個區塊堆疊算力,參考邊用於表示分叉的其它區塊產生在該區塊之前。
挖礦過程如下:
根源邊只能有一條,參考邊可多條(視情況而定)
以主鏈區塊為分割點,將DAG分段,段間段內設計簡單排序演算法
CONFLUX協議下產生的區塊鏈如上(圖2),接下來對其進行線性排序,排序演算法如下:
通過上述排序,DAG有了一個 線性順序 ,上圖DAG區塊順序為 Genesis, A, B, C, D, F, E, G, J, I, H, and K 。接下來對該線性順序的區塊里的交易信息進行交易排序, 單一區塊 里可能包含的沖突交易將直接按照該區塊內交易信息排列 先後順序 決定。
至此,CONFLUX對DAG所有區塊產生一個 線性順序 ,進而可以對區塊內交易信息排序,產生 無沖突交易集 ,超過一定時間的無沖突交易組成 可信交易集 。 主鏈只是排序的標尺,作為分割時段的標准,CONFLUX包含所有分叉區塊。
GHOST論文
Inclusive論文
SPECTRE論文
PHANTOM論文
CONFLUX論文
DAGlabs 相關講解視頻合集
『貳』 聽說幣安平台是全球交易排名第一的區塊鏈資產交易平台,是真的嗎
區塊鏈資產交易平台,現在還是挺早期的,不是說現在排第一,以後就排第一。比特幣中國(BTCC),這家數字貨幣交易所曾經如日中天——一度占國內數字貨幣交易量的80%,最終也是失敗退出了市場。
根據coinsmart顯示,目前有300多家交易所,幣安是排名前十的交易平台,但不是第一位。