與區塊鏈1.0 、 2.0 、 3.0不同, A valanche 1.0 、 2.0 、 3.0可以看作是三種本質上不同的方式來實現共識。
6月30日, A valanche首席架構師、 Facebook Libra項目共識 HotStuff論文作者Ted做客幣乎直播,區塊鏈不同共識協議的優劣勢,並從技術角度簡單介紹Avalanche的共識機制。 PANews作為媒體觀察團參與了本次直播分享,以下是分享實錄。
一、第一代,中本聰時代
首先進入我們視野的是需要挖礦的,Proof of Work(POW)工作量證明。這個協議的優勢和劣勢都相對比較明顯。
從上圖可以看出,這種協議結構非常清晰。嚴格意義不能只算一條鏈,而是樹形的結構。樹的根是創世的塊,每個節點或者叫區塊都是延續前面某一個區塊作為前任節點,不斷生長。
它的規則是,每個塊會包含難以被偽造,而且容易驗證的事情,是工作量證明。其實是大家去猜一個讓區塊滿意哈希數學上要求的數。比如這個哈希要小於某個特定值。前面有多少個前導0。
1、優點
(1)可以在完成共識的同時做為准入機制
國外最早討論公鏈還是聯盟鏈的區別,就是因為中本聰算法本身除了能實現共識,還額外有附加作用,可以同時控制有效參與共識的人數,是通過控制算力來控制系統。
(2)可以比較優雅的進行安全性退化
系統中“壞人”所佔的百分比增加時,肯定係統會越來越不安全。在中本聰的共識中,不安全不是“壞人”到達一定程度系統就崩潰了,沒有安全的保證了。而是一直是概率的安全保證。系統有一個相對平滑的過度過程。
(3)鬆散成員信息
因為系統基於工作量,每個人各自悶頭挖礦就好,就是最後向全網散佈新挖的礦時進行通訊就好。它對成員信息的要求不是那麼強。
2、問題
這些問題其中有一些是大家知道的。
(1)工作量證明極其浪費資源
無論是否有新的交易被提交,區塊鍊是必須不停向前運轉,無法停下。運轉的速度是需要所有機器同時做猜測,一刻不停歇來保證的。
我這有個比較老的數據,18年比特幣全網的耗電總量大概是一個奧地利兩個丹麥三個愛爾蘭全國當年的裝機總量。現在的數據可能會更糟糕。
(2)極低的負載能力
耗了這麼多電,用了這麼多能量。最後能做的事情沒有那麼多,負載能力並不強。吞吐量平均每秒只有幾筆交易這個數量級。
(3)很長的確認時間
如果單位時間只能在全球做幾筆交易,又有大量交易被提交,平均每筆交易的確認時間就會很長。現在比特幣確認時間差不多要40分鐘到1小時左右。
(4)安全效率不是很高
我花了這麼多精力、電能,不考慮實際性能,我們只討論到底有多安全。比如在全網百分之多少算力是“壞”的情況下,一筆交易被“雙花”的百分比大概有多少。
對於中本聰協議而言,相比第二類協議,假設網絡中參與者都是三分之一是“壞人”的情況下,中本聰的協議六個區塊要等一個小時,能帶來的安全性沒有我們想像的那麼高。不是99.999%都是安全的,其實只有90%甚至不到是安全的。
而另一類協議可以做到永遠是安全的。只要參與網絡決策過程的“壞人”數量是低於一定閾值,比如三分之一。
二、第二代協議,PBFT
比較有意思的是,第二代協議誕生的時間並不是晚於中本聰的協議。只是當時沒有區塊鍊和炒作的概念,所以沒有進入大家的視野。
它嘗試做的東西(和中本聰協議)是非常類似的。根據我的印象,可能在上世界70年代就有了不錯的研究,80年代就登上舞台。在2000年之前就達到了研究的頂峰。有大量的論文討論這件事。
最後沒有在當時跑出來的原因是當年工業界對“去中心化”、“去信任”、透明的平台之類的概念並不是很在意。那時候矽谷的互聯網前浪還在創業中。沒有更多人去考慮更“烏托邦”的世界。
在第二代協議中,一個代表性作品,比較實際可以被作用到系統的就是實用拜占庭容錯共識,簡稱PBFT。
1、優勢
(1)網絡規模小時非常快
和它類似的協議,CFT,就是容宕機,機器壞掉的錯的協議。這種協議應用很廣泛,是在谷歌、百度、阿里都大量使用的基礎架構。對於提供雲服務的系統,需要保證系統24小時乘7天不間斷的對外表現出工作的狀態。為了實現,就需要一定程度的容錯。這類算法已經在大規模應用了。可以認為是支撐起現在雲平台的應用之一。
和雲平台可以容宕機錯誤的協議類似,PBFT也很快,不需要挖礦,而且安全是確定性的。只要“壞人”是有閾值的,比如小於三分之一,就可以保證系統一旦做決議就不會被反悔。
(2)是永遠安全而不是概率性安全
(3)相對久的科研歷史
2、劣勢
(1)難以擴容
系統有一個尷尬性的問題,系統中會有“領袖”或者“協調者”。對於這樣的特殊節點,會成為整個系統的瓶頸。
有人會說有些協議不需要具體的某個人主導,而是所有人完全民主的方式去投票決議。但其實在那種情況下,網絡通信還不如一個人去協調。因為每個人都想去做領袖,每個人都去做和領袖一樣多的事情,在消息複雜度上,效率沒有改善反而變得更差了。
(2)基於Quorum
Quorum確實找不到中文更好的翻譯。大家可以理解成以前議會中達到法律效力的人閾值,就是少數服從多數中多數的量,或者達成多數的群體就被稱為一個Quorum。
基於Quorum的算法,比如知道系統中有100個人,我希望超過66個人容易,才是絕大多數票。這個算法需要100%準確知道現在參與投票的有哪些人。我們不需要具體知道哪一個人有什麼特性,而需要確定知道系統中有多少參與者,對參與者的信息要求是非常準確的。
(3)對“壞人”的硬性假設
前面舉例中,一旦系統中有超過33個“壞人”,比如34個、40個,而係統只能容到33個的情況,則係統的安全性沒有任何保證。
(4)很多核心協議極為複雜
作為很底層的協議,按理應該較為容易實現,但這類協議,就像不是拜占庭而是孿生容錯的協議一樣,都很難高效實現,很難理解。
但近幾年這個問題也有所改善。我另外做的研究項目HotStuff,Libra用的協議對協議本身的複雜度進行了優化。當然本身也有協議本身的局限性。
上圖是我經常用的一張圖。會給大家直觀的感受,這類協議的執行過程往往是作為客服端提交一個交易,交易在全網範圍得到多次廣播,最後才神奇地達到共識。
2013年就有人說這類協議完全看不懂,為什麼多投幾輪票莫名其妙就達成共識了。這個漫畫也是諷刺,就是能不能把協議弄簡單點。
這張圖是解釋協議在網絡上信息量或者性能上的瓶頸。以PBFT為例,會有一個一到多和多到多的消息發送過程。對於這種網絡,隨著參與節點的增加,它的代價其實是平方數量級增加的。在HotStuff中可以做到線性數量級,但問題是還是會有一個節點給所有節點發送消息,這是是目前無法避免的。
前面我們介紹了兩大類共識。目前我所知道的幾乎所有協議都是脫胎於這兩個標準的範式。只要不是瞎掰的,都是基於這兩個其中某一個,再去做性能上的優化,或者加一些添頭,核心基本是沒有變。
這就可以引出我們今天重點要提到的第三代共識。
三、第三代,雪之協議Avalanche
原來論文裡是Avalanche,翻譯成中文是雪崩。很多人會覺得名字起得晦氣。我一開始就知道,但可能一開始是在美國做的項目,(除了我)沒人懂中文,沒有太多同感;另一方面我覺得也無所謂,畢竟咱們都是新一代的人,不是很在意名字諧音的問題。反而名字諧音,未必是壞事。上來就說自己很厲害,姿態太高了反而不太好。我們就沿用了這個名稱。
Avalanche是在18年5月我們投到IPFS上的初稿,大家可以看到,經過一年時間修改,主體內容沒有太大的變化,現在也基本定型了。
比較不幸的巧合是,當年我們做這個協議用的模式是傳染病的模型。在這個特殊時期,我們可以換個方式理解,類似流言傳播的模型。
為什麼聽上去八桿子打不到的東西會和共識、區塊鏈有關係呢?一會會舉例說明。
1、 優勢
其實兼具了前兩類共識的優點。
(1)安全性退化優雅
和中本聰共識類似,不會因為“壞人”達到闕值之後就完全不能用了。
(2)對成員信息要求相對鬆散
我看到的世界和你看到的世界在個別參與人之間有有些出入,但總體差不多就可以了。
(3)無視網絡大小,快就完事了
這是最大的優點或者吸引我的地方。協議沒有一個節點需要和其他所有節點通信,而是每個節點都是對等的,從網絡中只能和常數的,或者很小規模的節點通信。
就像現實社會中謠言的傳播一樣,不是用大喇叭廣播說這件事是真的,而是我和幾個或者十幾個狐朋狗友聊八卦,不知道為什麼全村就都知道了。
(4)綠色環保
整個協議過程不需要挖礦,類似第二類協議只需要投票,不需要挖礦。這就意味著對於交易而言不需要很長的等待時間。
(5)協議直覺上符合現實
當然數學證明上很複雜。這個論文中有提到,當然大家也沒必要把它弄懂。
接下來我會嘗試從直覺的角度,非常粗略地講一講一個共識是怎麼運行的。
我們想像有一群人,比如一百或一千人在討論娛樂圈某個瓜是真還是假。換一種不是大家能聽懂的話,我們考慮一個網絡有N個節點參與一個二元共識,就是真或假。
在這個假定下,我們讓每個人獨立且自由隨機地選擇K個人。比如我們在100人設定中,假設每個人每次隨機和十個人進行採樣。採樣就是指某個人張三要去問這十個人,傳言是否實錘了?這就是一種詢問或者一次採樣。通過檢查K個採樣的結果,是否大部分人都認為實錘了來更新張三對事實的傾向,我更傾向於是真還是假。
這個過程相比其他基於投票的協議有巨大的、本質上的變化是,它不需要和全網中每個人(節點)進行通訊,只需要從N個人中取K的近似。而K可以很小。
比如我對100人的網絡是問十個人,對1000人的網絡還是問10個人。
k的選擇和你需要的安全程度是有關的,而基本與網絡大小是無關的。對於我需要的安全度,一千人參與的網絡和一億人參與的網絡,問出來的近似程度是差不太多的。因為我們發現在統計學上,採樣可以很好地逼近整體,所以在很大程度上可以讓詢問的規模和網絡規模做到一定程度的解耦,不需要再去問所有人。
我看到彈幕有人問採樣成本高嗎。成本就是網絡通訊的成本,比如我給十個節點發消息,這個成本和挖礦、投票等需要給所有人發消息的成本比是低很多的。節省了大部分向全網發消息的代價。
我們再舉個更具體的例子。如下圖。
比如張三是最上面的節點。一開始他認為這件事是假的,我們用橙色表示。他詢問了五個人,發現大部分人告訴他這件事是真的。這時張三發現好像主流意見和自己目前傾向是向左的,可以會去調整。
而李四也在問自己採樣的人,這是同步發生的。對於李四可能一開始傾向於是真的,隨機問了五個人,發現大部分人告訴他是假的。
這種情況說明網絡還處於爭論階段。就像上了熱搜的話題,除了吃瓜群眾,還有粉絲和當事人還在辯論,沒有一邊倒的情況。
無論如何,張三、李四各自做了詢問之後,可能會調整自己的傾向性。會根據目前主流意見調整自己的看法。下圖中就是這個過程。
這個過程是個動態的過程。
這個鏈接是我去年抽空寫的小程序,把這個過程做成了動畫,上面可以模擬這個過程。大家可以設置網絡規模,可以看到二元共識是如何形成的。
雖然下面的曲線大家會看著似曾相識,因為是基於傳染病模型的靈感。但大家不要想像成是基於感染還是沒感染的情況。更多是類似兩種觀點彼此競爭。
總結一下Avalanche。它是利用了採樣的方法,可以視為大幅度泛化的,基於少數服從多數的表決系統。不需要任何工作量證明。所以Avalanche兼具前兩種共識的優點。網絡有多快,理論上就能跑多快。本身也能輕鬆擴容大量節點。對成員沒有嚴格限制。
大家習慣性的把只要不是中本聰的協議都稱為PoS協議。主要原因還是准入機制。嚴格意義來講,對於共識,准入並不是要解決的事情。大家提到共識算法是PoW還是PoS,這種說法本質是錯誤的。應該是這個系統本身是基於PoW還是PoS,或者是什麼樣的准入機制。
共識機制和准入機制並不天然具有相關性。只是中本聰恰巧將兩者耦合起來了。對任何不基於中本聰的挖礦的協議,都需要一個額外的准入機制。
在這點上我們和其他不需要挖礦的協議是類似的。也就是說可以嘗試引入任意的准入機制,比如用PoS來做機制。
因為時間有限,今天就差不多到這裡。下面是提問環節。
四、互動問答
1、關於有向無環圖
大家可以發現我講了半天根本沒有講DAG有向無環圖這回事。這是對這類協議誤會最深的事情。
DAG本身並不能達成共識,只是一種優化的手段。你如果看到任何項目用DAG來做共識的話,我覺得這個說法本身就是錯誤的。
其他DAG的案例,相對靠譜的Confiux用有向無環圖加上中本聰共識,嘗試用DAG提高中本聰共識的吞吐量。本身DAG本身不是讓共識變得更好,要么是增加吞吐量,不能改變延遲;要么是通過DAG解耦需求,原來需要線性的交易所有交易要拍成一根鏈。現在可以讓不相關的交易並發發生,時間前後不要么重要。
我們在Avalanche中採用的DAG是後者。如果絕大部分工作都是交易和資產轉移的話,交易不需要嚴格的前後順序,用DAG可以極大提高系統的並發度。
Q1來自幣圈小小白白菜:
Avalanche是如何解決塊傳播和零確認存在的問題的?對於其他技術有什麼優勢?核心技術點在哪裡?
我不太理解塊傳播和零確認指什麼問題。我就比較廣泛的就區塊鏈做塊的通信做一些探討。
Avalanche算法在通信中不是全網廣播,因為沒有任何一個節點做這個事情。它會有優勢,不需要同時給每個人發消息。可能大家沒有感覺這有什麼區別?就是和一小撮人發消息和給所有人發消息。但在技術和工程上影響的差別還是很大的。
我們可以想像如果一個節點成為眾矢之的,大家都給它發消息,這個節點的負荷能力會承受不住。因為我們假定參與的節點都相對對等。不會存在特殊節點是超級計算機,其他都是手機。如果在對等情況情況下, 那個(向全網廣播)的節點就會成為瓶頸。
不過如果你問的是區塊本身如何散佈出去的話,我們這方面更像比特幣一些。我們也是通過類似謠言網絡去傳播的。和剛才的共識幾乎是類似的。在設計上,傳播、共識、通信的模式是一樣的。
Q2來自幣諸葛:
Avalanche有Slush、Snowflake、Snowball和Avalanche四個子協議,能簡單說下他們之間的區別與聯繫嗎?
這位用戶顯然是看了一眼我們論文的。我們論文中提到的四個協議,還是為了方便大家理解。
簡要的說,真正可以被使用的拜占庭容錯的協議是Snowball雪球協議。 Slush雪水協議不是拜占庭容錯,而是基於以前的流言網絡總結出來的,看是否可以做一致性的事情。 Snowflake雪花可以做拜占庭,但會有一些活性上的問題。 “壞人”可以不斷拉扯系統,讓系統無法朝一邊倒,使一種音浪佔大多數,短時間就能席捲整個網絡。它可以維持這種平衡。
Snowball是增加了一點雪球效應的成分在其中。也就是說這個網絡並非完全沒有記憶,每個人對自己確認的狀態有一個信心度。這個信心度短時間確認後無法強行改到另一個觀點。我如果已經承認這件事實錘了,不會因為我某一次的採樣而突然跳到另一邊,就是站邊很穩定。
最後Avalanche是基於Snowball優化出來的一個支持純交易的系統。後來我們也基於Snowball做了另一個系統Snowone打算用來做智能合約的鍊和區塊鏈治理的鏈。
Q3來自比特貓:
以下幾個問題請教一下: 1. 協議算法是否參考了粒子群算法?算法的一致性和收斂性是否有驗證? 2.節點不保存全區塊數據?全區塊數據如何溯源?
這個問題問得非常好。這個算法有物理、化學背景的人會想起粒子群算法,或者物理學中的異星模型。
我並不是對其他領域特別熟悉。你所說的粒子群算法可能是指一類,如果把協議運作模式中的每個節點視作一個基本粒子。協議視為基本粒子按照基本物理法則和周圍的粒子進行交互的話,可以認為是粒子群算法中的一種。我們的一致性和收斂性是有理論上的論證的。
第二個問題,我們目前節點如果參與子網A,那麼子網A中的所有數據還是會保存的。目前用的和其他項目,主流算法相同的,要去保存整個鏈上的數據。當然因為有子網的存在,不需要保存整條鏈,但對你感興趣的鏈的數據是要保存的。
將來我們也考慮過要不要不用讓每個人保存整個數據,做一些靈活度上的優化。但是需要注意,不去保存整個數據,其實是對容錯度的妥協。放棄一定的容錯度,來減少網絡冗餘的信息量或者每個節點維護自身的數據量。
Q4來自MOM:
我們看到AVA 測試網得到參數tps 大約3400,確認延遲1.35 秒。有些項目動不動就號稱百萬tps,這個成績看上去沒有那麼突出,這個性能所在的瓶頸是什麼?主網上線的時候性能表現如何?
這是個老生常談的問題。 TPS只是一個指標,用來衡量網絡能承載多少量的交易的指標。如果只看TPS,我們可以想像,如果我用順豐或中國郵政,用快遞貨車拉一車硬盤或者SD卡,從上海拉到北京,就算兩三天才到,但因為承載的信息量很大,平均吞吐量會高於任何區塊鏈項目。但你用快遞能做區塊鏈麼?我覺得未必。
除了看吞吐量以外,還需要看延遲。對於普通用戶而言,其實並不是很在意整個系統能夠容納多少。用支付寶也不會在意阿里巴巴的吞吐量有多強,而是(更關注)一筆交易從提交到確認平均要多長時間。所以需要一分為二看事情。
Q5來自無來無去:
每一個子網絡都是由AVA 網絡維護安全性的嗎?還是他們和側鏈的設計類似,安全性和主網絡是獨立開來的?
是否想說,側鍊和主鏈的地位不太對等?所以側鏈基本沒有共識?
其實在我們的設計中,都沒有提過側鏈。我們希望解決的問題不是把主要矛盾轉嫁到側鍊或者非主鏈上來完成所謂的性能提升。
我們提出子網,主要是可用性,或者對用戶而言使用體驗上的提升。我們意識到,系統得有一個主網,去做核心的、重要的決議。同樣大家也想去運行自己的子鏈,屬於自己的鏈。按理說我們可以要求每個人自己去運行,但實際上沒人會這麼多,沒有必要。
第一是可能大家不願意去做,可能子鏈本身就是做著玩的,憑什麼要幫你去提升鏈的安全性?另一方面,假設我去做了,可能會去收費,做經濟上的要求。那對於只想玩一玩,不需要所有人參加的子鏈就會很虧(沒動力做)。
所以我們就增加了子網,讓系統更靈活。你可以想像成,無論如何所有小朋友都要去上學,學校的班級就是主網,而子網就是興趣班。你家孩子只有一個,但你可以讓他參加不同的興趣班。子網和主網都在各自發揮各自的目的,算法是一個算法,並沒有安全性上的問題。可能參與人數不同,如果子網參與人數過少,容錯的程度會確實不如主網,但也僅僅因為參與的節點數不夠造成的。
Q6來自媒體觀察團:
Avalanche在跨鏈的設計上和Cosmos以及波卡有哪些異同?當有項目希望接入Avalanche的跨鏈,會需要先去構建一個基於AVA底層架構的fork網絡,這種設計是否反而會增加使用門檻?
我就不講其他項目了。講一下我們是怎麼去做跨鏈的。我們也是用了現在研究比較火熱的“原子交換”來實現跨鏈。我們也是進行了系統化的設計和論證。
目前系統上已經有了跨鏈。我們有一個鏈來控制參與的人,因為參與需要交押金,就是staking,我們有專門做staking的鏈,這個鏈同時也是做治理的鏈,本身也有自己的共識,是有順序的共識。
對於Avalanche而言,沒有要求所有交易都要有線性的結構,而是只要之間沒有衝突,可以天馬行空的同時進行。跨鏈就是使用了範用的辦法。我不太清楚具體cosmos和波卡使用了什麼辦法,但至少我們的辦法能滿足系統內部鏈與鏈之間的需求。
我們這裡提到的跨鏈不是ava和別的項目之間的跨鏈。這點上我們和主打跨鏈服務的創業公司和項目是有本質區別的。我們內部的跨鍊是內部周轉的系統,因為所用的共識是同類的,所以沒有太多問題。
7、Avalanche不能稱之為鏈吧?
這是個非常好的哲學問題,是靈魂的拷問。這取決於你對區塊鏈的定義。什麼是區塊鏈呢?如果把這個問題定義清楚,稱它是鏈也罷,不是鏈也罷,做得事情,提供的服務是類似的,這有什麼區別呢?
8、Avalanche和showone有什麼區別?
你可以理解成,Showone更像你理解的那種鏈,是一步一個腳印的完成共識的,Avalanche更像隨意的結構,大家放飛自我,只是通過共識算法解決雙花問題。 Avalanche顯然會比Showone更快,或者更容易擴容。但局限性就是無法直接支持智能合約。所以當時我們才覺得可以把兩個同源的協議進行混搭,會非常完美解決目前的需求。
9、可以把Avalanche共識和挖礦結合起來麼?
一年多、兩年前我記得其實有人提過這個想法。他們基於我們的協議做了“預共識”,他們希望先用我們的共識加速交易確認,再用慢的pow進行最後的確認。
關於募資的問題:由於私募實在太多人希望認購,所以我們傾聽了社區的意見給出了不同的方案,我們在保障代幣分配的公平性的同時盡量希望和項目共同成長,確保代幣分配的公平性、開放性
因此我們有三個選項:選項A1:0.5美元/幣,鎖倉一年,最多買25k usd。選項A2:0.5美元/幣,鎖倉1.5 年,無上限。選項B:0.85美元/幣,不鎖倉,每人最多5k
時間是7.8 北京時間晚上10 點開始,Avalanche token sale 信息以及購買渠道大家可以查看(右下角選擇中文):https://info.avax.network/
關於交易所,我們已經聯繫了業內一線的交易所,希望在上線的時候能夠觸達足夠多的、質量高的用戶群體,因此請大家期待我們未來的進度,我們會在今年夏季發布主網,盡請大家期待一下。