Conflux CTO伍鳴:讓公鏈的“不可能三角”成為可能

11月8日,由巴比特主辦的“2019年世界區塊鏈大會•烏鎮”正式開幕,大會聚集了百餘位全球區塊鏈、數字資產、AI、5G領域的專家學者、技術大咖、意見領袖、熱門項目創始人,以“應用無界”為主題,圍繞區塊鏈的應用落地、技術前沿、行業趨勢和熱點問題進行探討,推動區塊鏈技術和產業創新發展。

Conflux聯合創始人兼CTO伍鳴發表《讓去中心化的公鏈系統接近最優的性能》主題演講。

精彩要點提煉:

  1. 理想的公鏈系統應該具備三個特點:A.足夠的魯棒性(Robustness);B.高性能;C.去中心化。
  2. 比特幣和以太坊等公鏈採用“中本聰共識”,出塊慢、吞吐量低。
  3. GHOST協議採用最重子樹規則,可以克服分叉帶來的安全性問題。
  4. GHOST協議可以提高出塊速率,同時不用擔心雙花攻擊。
  5. 結構化的GHOST方法不會讓所有區塊影響主鏈的選擇,只讓很小部分的區塊影響主鏈選擇。
  6. PAST集合和Epoch概念分別實現自動的模式切換和確定區塊出塊順序,讓所有的區塊能夠貢獻系統的吞吐率。
Conflux CTO伍鳴:讓公鏈的“不可能三角”成為可能

大家好,很高興今天有機會在這裡分享一下Conflux的技術進展。

Conflux是一個高性能的公鏈項目,我們去打造一個高性能的公鏈系統。所謂高性能,我們能夠獲得上千TPS吞吐率,大概在3千-6千左右。並且我們的系統能夠在半分鐘之內確認一筆交易,而Conflux取得這樣的性能不會犧牲任何去中心化和安全性。

先來看一下問題的背景,隨著比特幣的出現和發展,區塊鏈已經被越來越多的人所熟知。區塊鏈最具代表性的一個特點是它的分佈式賬本,它非常強大,可以提供互聯網級別的交易記錄,這使得在現在應用領域都有很多技術創新,比如說金融系統、供應鏈還有醫療健康等等。

但現有的公鏈系統裡,它仍然很大程度上受到性能問題的干擾,使得它在實際場景落地時受到一些阻礙。比如說比特幣,它每秒處理7筆交易,確認一筆比特幣交易需要1個小時。以太坊是30筆交易/秒,確認的話要10分鐘。但是像中心化的系統VISA,它可以很輕鬆提供3千TPS吞吐率,並且在秒級確認。

我們知道一個公鏈系統裡有很多組件,不同的組件有不同的性能特點。比如說存儲,我們需要存儲來存區塊鏈賬本。網絡,需要網絡交換區塊和交易。我們需要計算資源執行這個交易。但公鏈裡還有一個很重要的一環:共識。

現在的公鏈系統共識是一個最主要的。我們認識到這個問題,並且找到了一些解決方法,於是就有了這樣一個團隊。我們的團隊是以姚期智院士作為首席科學家,他也是唯一一個獲得圖靈獎的華人科學家。另外兩個創始人龍凡和周冬,海外留學回國來創業做這個項目,他們也是國際奧林匹克信息競賽金牌得主。

我們認為一個理想的公鏈系統應該具備以下三個特點:

1.足夠的魯棒性(Robustness)。也就是說,它能夠抵抗雙發攻擊以及存活性攻擊,存活性攻擊就是說你的系統應該在任何時候都能持續的有進展。

2.高性能。所謂高性能,就是這個系統應該同時有很高的吞吐率和很短的交易確認延遲。

3.去中心化。這個系統能夠承接成千上萬節點,這些節點不經過允許可以加入和離開這個網絡。去中心化的好處可以不依賴於對每一箇中心實體的信任。

Conflux CTO伍鳴:讓公鏈的“不可能三角”成為可能

據我們所知,現有所有系統,沒有任何一個公鏈系統在這三個方面同時取得很好的效果。比如比特幣和以太坊這類系統,它有很好的魯棒性、很好的去中心化,但它的性能非常糟糕。還有一類系統是基於拜占庭協議來做的,這樣的系統魯棒性可以,性能也OK,但是犧牲了去中心化,因為它的共識機制是靠選出一個很小的委員會完成的,Conflux是唯一一個可以在這三方面都可以做得非常好的系統。

為什麼Conflux系統比現有其它系統更加優秀呢,先看一下比特幣和以太坊是怎麼工作的。

比特幣、以太坊這類去中心化公鏈,它們要部署在一個P2P gossip network,區塊和區塊之間形成一條鏈,鏈實際上就是存儲交易記錄的賬本,這個賬本也會被複制到所有的節點上。雖然去中心化有信任的好處,但去中心化也會遭到攻擊。

任何節點都可以加入到這個網絡,也就是壞人可以隨意構造很多節點操控成本,於是在比特幣和以太坊裡使用了工作量證明的機制,你要去對賬本產生影響,就要去付出算力。如果你想做的話,就要付出成本。

在比特幣和以太坊網絡裡採用“中本聰共識”,一個很重要的原則就是最長鏈規則。在“最長鏈”規則裡說的是,所有的好人節點,他們都只會是認為最長的鏈作為有效的交易記錄。這裡一個安全假設,只要好人擁有超過50%的算力,最長鏈就應該是好人節點所產生的。

Conflux CTO伍鳴:讓公鏈的“不可能三角”成為可能

這樣的系統通常會採用非常慢的出塊速度,比特幣是每10分鐘出1MB大小的塊,以太坊是出一個塊是15秒,吞吐率非常低。

為什麼不能直接把區塊大小增加,就可以讓系統吞吐率變高了?

但簡單地這麼做是不行的,因為如果這麼做的話,賬本的結構就會看起來如圖中所示,會有很多分叉。原因是出塊是並行的,所有節點都是併發的出塊。

當出來一個塊之後,這個塊在網絡上傳播需要時間延遲。也就是說,當出了一個塊再往上廣播,其它的節點並不能馬上看到這個塊,他們還會跟著老的區塊去挖,這樣就會產生分叉。

如果區塊大小越大,在網絡上延遲越長,所以產生的併發區塊就會更多,分叉也會越多。如果出塊率變高,效果也是一樣的。

分叉很多賬本會帶來什麼問題,首先根據“最長鏈”規則,只有最長鏈裡區塊才會被認為有效,其它分叉上的區塊就會被丟掉,這樣就會造成網絡和處理上資源的浪費。

另外一個很重要的點,它也犧牲了安全性。具體來說,假設固定數目的區塊,如果分叉越多的話,最長鏈越短。假設最長鏈的區塊只佔所有區塊10%,那就意味著壞人可以只用10%的算力,就可以隨意篡改你的賬戶。

後來有些研究人員發明了GHOST協議,克服分叉帶來的安全性問題。在GHOST裡面,所有的節點仍然要選擇一條主鏈,它選擇的規則不是根據最長鏈規則,而是根據最重子樹規則。

我們選擇主鏈也是從創世塊開始,把創世塊選擇主鏈。會迭代去看它的子區塊,比如創始區塊有兩個子區塊A和B,A的子樹有6個區塊,B有5個,因為A的子樹比B重,我們會把A加入主鏈裡。

根據相同規則依次做這樣的事情,可以把CEH選到主鏈。當產生一個新的區塊時,跟著主鏈裡最後一個區塊產生就好了。

最重子樹規則和最長鏈規則區別在於,我們對子樹的選擇不僅是最長鏈上子樹做出貢獻,包括分叉上區塊也會對主鏈選擇做出貢獻,這樣的話“壞人”必須需要50%的算力,才能影響主鏈的選擇。A假設是主鏈上的區塊,如果壞人想用A.上區塊,替換A在主鏈上的位置,需要產生A.指數,比A還要重。壞人需要超過50%的算力,才能夠篡改A在主鏈上的位置。

這樣的情況下我們想確認一筆交易,需要A的子樹比A.大很多。A.想替換A在主鏈上的位置,概率隨著時間是下降的。出塊量越高的話,確認的時間越短。

有了GHOST協議之後,可以以很高的出塊率出塊,同時不用擔心雙發攻擊。問題是不是解決了呢?

沒有,GHOST還會受到存活攻擊的影響。假如好人區塊會分成GroupA和B,假設Group內部區塊之間通信沒有延遲,好人和壞人之間通信沒有延遲。因為兩個Group之間有延遲,某一個時候有可能賬本會結構A和B兩個分叉。壞人可以暗自觀察賬本結構,偷偷在這兩個分叉上產生新的區塊,這些區塊不告訴好人。

當GroupA節點產生一些新的區塊時,它會把這個節點傳給B,但傳輸需要一段時間。在這個過程中壞人先發生這件事情,於是就把原來在B分叉上偷偷挖的區塊告訴B,B就會認為原來B的分叉是比A分叉更加重,它就會接著B的分叉去挖。

相反,壞人也會選擇適當的時機把它在A分叉上預先挖的塊再告訴A,會認為A的節點是更重的,這個過程可以持續下去,造成分叉一直保持,也就是交易沒有辦法確認。

解決這個問題的方法叫做結構化的GHOST方法,我們不應該讓所有區塊都能影響主鏈的選擇,只讓一個很小部分的區塊去影響主鏈的選擇。很小部分的區塊能夠影響主鏈的選擇,意味著這些區塊出現的概率是比較低的,它們併發出現的概率是比較低的。在這些影響主鏈選擇的區塊之間,它們不容易出現分叉。

Conflux CTO伍鳴:讓公鏈的“不可能三角”成為可能

比如上圖裡虛線區塊就是沒有權重的區塊,不影響主鏈。在某一時刻,比如A的分叉上出現一個有權重的區塊,這時候B可能不會馬上看,所以B仍然會在B的分叉上產生區塊。

但當過了一個延遲以後,B早晚會發現有權重的A區塊,這時候B就可以判斷出原來A的分叉是比B的分叉重,因為A上面有一個有權重的區塊,這時候B就可以在A的分叉上產生新的區塊,從而打破平衡。

那些沒有權重的區塊怎麼辦呢,我們仍然希望那些區塊的交易能夠貢獻系統的吞吐率,所以我們需要一個確定性的排序算法,能夠讓所有區塊交易順序被一致的決定出來,這樣的話系統的吞吐率就可以提高。

但是這樣的系統仍然有確認延遲問題,因為我們仍然需要等待足夠多的有權重區塊出現以後,才能去確認這個區塊,時間仍然是很長的。

回顧一下剛才說的兩個情況,一個是原始的GHOST方法,它可以在沒有攻擊情況下迅速的確認交易。但有攻擊的情況下沒有progress(進展)。

有沒有一種方法,讓這兩個系統在有攻擊的情況下,沒有攻擊的情況也能保證progress。

有的,我們的一個方法是GHAST,讓所有節點選一個主鏈,最重子樹規則。我們的主鏈叫做數軸鏈,我們還發明一個確定的排序算法,使得所有節點根據主鏈就能對所有區塊做一個一致排序,可以讓所有區塊交易貢獻系統的吞吐率,從而提高系統的效率。系統操作在原有GHOST模式上,從而取得最有的效率。

我們的系統會去attack攻擊發生,如果攻擊發生會給一部分區塊很小的權重,從而保證系統的progress。

Conflux CTO伍鳴:讓公鏈的“不可能三角”成為可能

如何自動的做模式切換,區塊組成樹突的結構,這裡一個重要概念是PAST集合,根據這個集合,如果follow所有的邊(Edges)可以編輯到一個區塊的集合,這個區塊都是發生在這個區塊之前,這個叫做PAST集合。比如這個圖顯示的是E的區塊PAST集合,這個顯示的是A區的PAST集合。怎麼自適應給區塊權重呢,看一個區塊Past樹突長什麼樣子。如果發現Past集合不夠穩定,我們以很小的概率,1/H,把區塊賦為H,把其它區塊賦為0。

一個賬本每個Past是固定的,所有節點能夠一致決定一個區塊的權重。一個正常的情況,對於一個區塊,比如區塊A來講,系統運行一段時間之後,賬本結構,賬本的子樹會聚集在某一個孩子下,比如A.下,A.的子樹應該在A所有的後繼區塊裡佔絕大部分。對於每個區塊Past集合裡,判斷有沒有違反,如果違反了就切換到GHOST結構下。

Conflux CTO伍鳴:讓公鏈的“不可能三角”成為可能

如何確定區塊的順序,讓所有的區塊能夠貢獻系統的吞吐率?

我們的想法是引入一個Epoch概念,每個樹軸鏈上區塊都定義Epoch,其它分叉區塊可以根據規則散到相應的Epoch裡。

這樣的話根據Epoch給區塊做排序,在Epoch內部根據圖的拓撲序做排序。這樣的方法可以抵禦雙發攻擊,主要原理是這樣的,因為區塊的排序是由樹軸鏈決定的,樹軸鏈如果不變的話,區塊排序不會被改變。另外,我們樹軸鏈的選擇,因為是應用了最重子樹規則,只有超過50%算力的人才能夠去改變樹軸鏈的選擇。基於這兩點假設,系統能夠和比特幣一樣假設條件下,取得對雙發攻擊防範。

確認規則是說對於任何一筆交易,我們會先發現交易在哪個Epoch裡,找到Epoch對應的樹軸鏈區塊,可以理論去估計這個區塊被篡改了一個概率是不是小於用戶所能承擔的風險,如果小於用戶所能承擔的風險,我們就能確認這筆交易。

正常情況下,確認時間是非常短的。我們上層執行環境是兼容以太坊智能合約,測試網已經發布,主網計劃在明年Q1上線,也就是3月份時上線。

再說一下應用場景的事情,我們認為在Conflux最關注的應用場景,一個是跨境的支付,跨境的匯款。另一個是如何去支持更加高效的去中心化交易所。還有關注一個場景,如何支持toC端存證應用,讓用戶可以在互聯網數據中享受到具有信用價值的數據。

我們相信有了Conflux這樣高性能的公鏈後,這些場景的落地都是有可能實現的。

另外,我們最近在上海市政府的支持下落地了樹突區塊鏈研究中心,以此不斷推動區塊鏈技術進步,使我國的區塊鏈技術能夠在世界上保持領先的地位。


分享到:


相關文章: