萬向區塊鏈技術研究報告 | 雪崩協議 (Avalanche)技術調研

區塊鏈技術迅猛發展,新想法、新概念、新名詞層出不窮。萬向區塊鏈因此推出“技術研究報告”專欄,定期與大家分享在區塊鏈行業創新及熱門技術方面的研究成果,帶領大家第一時間研究學習新技術,緊跟技術發展趨勢,探索發掘技術的應用價值。

在《雪崩協議 Avalanche 技術調研》一文中,我們將共同探索Avalanche共識算法的工作原理、優缺點及其在聯盟鏈中的應用場景。

本文作者:萬向區塊鏈通用架構技術部 陳炫慧

導論

2015年5月,康奈爾大學發表了一篇《從“雪花”到“雪崩”:一種新型的亞穩態共識協議族》的論文。它的研究團隊是Team Rockets,共識算法取名叫 Avalanche,能非常形象地描述該協議的共識過程,就和雪崩一樣,開始是隨機崩塌(隨機樣本結果統計),最後大面積崩塌(即共識形成)。它的核心理念是通過不斷反覆對網絡中的節點進行抽樣並收集它們對某個提議的響應,最後可以把所有的誠實節點導向到同一個共識結果。

協議可以達到 1300 tps,交易也只需要 4 秒的確認延遲。

Demo: 

https://tedyin.com/archive/snow-bft-demo/#/snow

雪崩協議工作的主要原理:重複抽樣投票(Repeated sub-sampled voting)

 

直觀舉例爲:

房間裏有很多人,大家一起決策中午是喫披薩還是燒烤。某些人初始可能選擇披薩,另一些人初始選擇燒烤。最終,大家的目的是就中午喫什麼達成共識,即參考大多數人的意見。

雪崩協議的解決方案是:每個人隨機詢問房間內的一部分人午餐想喫什麼。若有多於一半的人選擇披薩,則其也選擇披薩——即採用其所詢問的大多數人的選擇。每個人都重複以上過程,每輪會有越來越多的人具有相同的選擇。  足夠輪數之後,可達成共識,每個人都選擇同一選項。

亞穩態 Metastable

所謂亞穩態,是指系統在某段時間內處於穩定狀態,但在另外一段時間內可能是不穩定的。穩態代表了系統的最低能量點,而亞穩態則是一個局部的而非全局的最低能量點。以下圖中的小球爲例,如果用比較小的力推小球,則會停留在位置1這個亞穩態上,而如果用比較大的力推,則會進入位置3這個真正的穩態上。

• 綠色(Green):消耗很少能源

• 安靜(Quiescent):沒有交易時不需要工作(出塊)

• 高效(Efficient):節點交互複雜度O(knlogn) ~ O(kn)

 

如何實現以上目標?主要依賴以下幾種措施:

• 並行共識模型:不使用單一複製狀態機(RSM)模型,每個節點維護自己的RSM(可以互相轉移所有權),系統對有關聯的交易只維護偏序(partial order)

• 反覆隨機採樣:引導誠實節點產生相同輸出

• 亞穩態決策:亞穩態決策可以使得一個大網絡快速推進到一個不可逆的狀態(雖然不能100%保證)

文中提出的算法可以提供強概率安全性保證,並且保證誠實節點的活性。所謂“強概率安全保證”,是指共識被逆轉的可能性小到可以被忽略(甚至小於哈希衝突的概率),實際上POW提供的也是強概率安全性保證。

Slush(雪泥)

爲了算法的通用性,這裏是以顏色衝突爲例:R表示紅色,B表示藍色,⊥表示沒有顏色(初始狀態)。

• 初始狀態:沒有顏色(⊥)。

• 收到交易:染成交易中指定的顏色,同時發起查詢。

• 查詢:在網絡中隨機選取k個節點,如果規定時間內沒有收到k個回覆,再多選一些節點,直到收到k個回覆爲止。

• 節點收到查詢:如果沒有染色,染成查詢中指定的顏色,並回復該顏色,同時自己也發起查詢。否則直接回復自己當前的顏色。

• 決策:收到k個回覆後,如果某種顏色所佔比例超過閾值α(0.5~1),則把自己染成那種顏色。然後繼續進入下一輪查詢,一共查詢m輪,決定最終結果。

特點:

• 無需記憶:節點每輪詢問時不需要保存其他節點狀態。

• 相對於傳統的共識協議需要詢問(後面稱爲採樣)每個節點,它的採樣很少。

• 在任何網絡環境下都能持續進行,這是由於重複採樣會放大樣本的不平衡。

• 如果詢問的輪次m足夠大,Slush能夠保證所有節點的有很大的概率達成狀態一致。

但是Slush的問題是,他沒有考慮拜占庭容錯,比如說某個接待你傾向於一種顏色,那麼惡意節點可以不斷的把這個節點變成另一種顏色,使得整個網絡達成不了共識。

那麼這個問題該如何解決呢?其實思路也比較的簡單,就是想辦法讓節點要改變的狀態置信度很高,即提高節點修改當前狀態的難度,這樣就不會來回變狀態了,研究團隊通過引入狀態存儲來進行解決。

note: 0.5:0.5 的時候會重置,但是隨着輪數的增加一定會有一個傾向,因爲0.5^n 的概率非常小。

 

Snowflake(雪花)

Slush算法是無狀態記憶的(memoryless),節點不保存和其他節點的交互歷史。

Snowflake算法在該基礎上,爲每個節點增加了一個查詢計數器,用於累積該節點對當前顏色的信任度。如果連續β輪都選擇該顏色,則接受該顏色。算法流程參見下圖:

具體修改的部分:

• 每個節點維護一個計數器。

• 每次顏色發生變化時,將該計數器清零。

• 每次查詢成功(收到αk個回覆),並且顏色不變時,計數器加一。

• 如果連續β輪都選擇該顏色,則接受該顏色。

當給定一個ε-guarantee的拜占庭環境,Snowflake可以保證Safety和Liveness。

 

Snowball(雪球)

Snowflake記憶的狀態是短暫的,每次顏色變化都會將計數器清零。爲了使得系統更加難以被攻擊,Snowball增加了一個置信度計數器,用於記錄每種顏色被選擇的次數。如果某種顏色被選次數超過另一種,則切換到該顏色,並等待查詢計數器超過閾值。算法流程參見下圖:

具體修改的部分:

• 對每個color都增加一個confidence counter,例如d[R]、d[B];

•  每當一輪Query返回的k個Responds某個color'滿足 ≥ αk,將該color'的d[col']+1,如果d[col’]最大,則將自身col更變爲該col’;  進一步地,如果col’和上次Respond通過閾值的lastcol不一樣,則更新lastcol爲col’,並且重置cnt; 

• 如果col’和上次Respond通過閾值的lastcol一樣,則cnt+1,當cnt大於β時,則最終確定該節點color

 

舉例:

如果某個節點每輪query 後拿到已經滿足大多數的結果分別是RRBRRRR,最後cnt 是多少?d[R] 和 d[B] 是多少?此時若取cnt閾值爲2,是否會有col 被敲定?敲定爲什麼顏色?

相關的推導過程已展示在上表中,相信大家可以通過推到獲得答案。

添加confidence 雖然會和snowflake 一樣可能會改變計數器cnt 的狀態,但並不會改變自身所選擇的顏色來影響別人的選擇,從分佈式的角度來看,添加confidence 之後,每個節點選擇了一個顏色之後都很難被改變,從結果可以看到,節點對外所選擇的顏色一直都是紅色。

Avalanche(雪崩)

Avalanche在Snowball的基礎上引入了有向無環圖(Directed Acyclic Graph,DAG)的存儲結構,即在衝突集中使用snowball 協議共識出一筆交易。這會帶來兩點好處:

• 更高效:對DAG某個頂點的投票隱含了對“從創世頂點到該頂點”這整條鏈的認可

• 更安全:DAG把各個交易的命運交織在了一起,因此共識更加難以被逆轉(需要更多誠實節點的認可)

首先解釋一下幾個術語:

• 祖先集(ancestor set):每個交易可能有一到多個父交易(parent),從它們的父交易一直追溯到創世頂點過程中的所有交易組成該交易的祖先集

• 子孫集(progeny):該交易的所有子孫後代交易的集合

• 衝突集(conflict set):如果兩筆或多筆交易發生了衝突(例如使用了同樣的UXTO input,即雙花),那麼它們組成一個衝突集

• 憑證(chit):如果某筆交易查詢成功(超過閾值),則稱該交易收到了一個憑證,否則憑證值爲0

Avalanche 會將每筆交易存儲在一個DAG 中,DAG中每個元素可能有多個父交易,並且需要注意的是父子關係(parent-child relationship)不代表在應用層面相互依賴。

爲了避免共識結果中包含衝突交易(conflicting transactions),在Avalanche中定義了衝突集,Avalanche中的每筆交易都屬於一個衝突集,衝突集中也只能有一筆交易,每個衝突集就是一個Snowball實例,但是置信度的計算方式略有不同,某筆交易的置信度是所有子孫交易的憑證值之和(c表示憑證,d表示置信度)。

每個節點需使用snowball 協議從衝突集中共識出一筆交易,當這筆交易的confidence 達到一個閾值時,即可認爲這筆交易被敲定了(作者在這方面給出了證明,詳情可去查看原文)。 

具體的算法如下:

那麼,什麼時候app可以認可(accept)或者提交(commit)一筆交易呢?文中提到可以設定兩種閾值,具體的數值由app來決定:

• 如果衝突集中只有一筆交易(即沒有衝突),置信度超過β1即可提交,稱爲“安全早期提交(safe early commit)”

• 否則,如果衝突集中有多筆交易,根據Snowball協議,需要收到超過β2個連續查詢回覆纔可以提交

 

Snowman(雪人)

可將以上雪崩共識協議(Avalanche consensus protocol)改爲線性鏈(linear chain),即要求每個頂點只有一個父頂點,這樣可確定頂點的全局排序,適用於如智能合約的背景——需要了解兩筆交易之間的先後順序。用於線性鏈的雪崩共識協議(Avalanche consensus protocol for linear chains)的實現,稱爲Snowman,即對應的爲C-Chain 和P-Chain採用的爲Snowman共識。

Avalanche中沒有主導節點(leader),任意節點都可提交交易,對每一筆交易進行投票,從而讓整個網絡更加牢固和去中心化。

 

Vertices (頂點)

頂點(vertex)類似於線性區塊鏈(linear blockchain)中的區塊,包含了父區塊中的哈希以及 交易列表,支持將多筆交易打包並以小組而非單個頂點的形式被投票。若節點收到對某個頂點的投票,則可認爲是對於該頂點中所有交易的投票。投票具有可向上傳遞性。

關於頂點的具體解釋如下:

當頂點中所有的交易被認可後,該頂點即被認可。如果頂點中的某筆交易被拒絕,那該節點及其子節點都會被拒絕。如果某個頂點被拒絕,頂點中的任意一筆有效交易可以被髮送到新的頂點中,新頂點不可以是被拒頂點的子頂點。隨後新頂點會被追加到已有頂點之後。

 

Finality (最終性)

Avalanche 共識在一定閾值內,在概率上是安全的。即,改變系統參數可以將節點間意見不同的概率調至最低。

常見的區塊鏈需很長時間來等待區塊固化,但Avalanche中的認可或拒絕是具有最終性且不可逆的。

 

通信複雜度

• Snowflake & Snowball: O(knlogn) (已被“Gossip“證明)

• Avalanche: 每個節點O(k), 總複雜度O(kn)

 

兩大創新

Avalanche中的2大創新分別是:

• 抽樣(subsampling):通信成本低。無論是20個節點還是2000個節點,某個節點發送的共識信息數量是恆定的。

• 傳遞性投票(transitive voting):即給某個頂點投票等同於給該頂點的所有祖先頂點投票,這樣有助於提升交易吞吐量。每個節點實際上集合了很多投票。

 

可能存在的問題

1. 隨機抽樣達到的是非確定性共識

隨機數對於區塊鏈技術來說很關鍵。本質上,分佈式賬本的核心問題就是隨機選擇出塊人的問題,這個隨機性要能被全網確認,並且不能被操控,也不能被預測,否則惡意節點可以通過操控這個隨機數從而達到操控整個鏈。在Avalanche中,隨機抽樣是非常關鍵的,但是對怎麼隨機抽樣卻沒有像 Algorand 那樣詳細地描述,隨機抽到樣本的整體代表性也沒有詳細的理論論證,因此其所達成的共識只是一種概率性的共識,並非確定性共識。

2.衝突交易不受保護

如果用戶不小心將一筆交易發送了兩次,Avalanche 是無法在這兩種交易之間做出選擇的,會直接導致這筆錢丟失,這點被Avalanche 當成能抵禦”雙花”攻擊來做宣傳,但是實際應用中,用戶無任何主觀惡意下,不小心將一筆交易點擊兩次發送的情況還是會經常發生,如果直接將用戶資金丟失的話,每次發送交易都得非常小心並等待系統回覆纔行,這將大大降低交易的速度。

3.需要大量參與者的支持

隨機抽樣所達到的共識必須依賴大量的節點支持才能算是有效,並且這些節點還得時刻保持在線,以便被隨機抽取到,這在現實的自由網絡下是不太現實的,如果採用雲服務器的方式,整個網絡運作成本將會非常高。

 

創新聯盟鏈使用場景

結合Avalanche 方案可以解決大部分聯盟鏈使用的共識通常需要所有節點驗證同一筆交易,當存在大量的分佈式節點時,冗餘的驗證及交易的轉發將極大影響交易的吞吐量及網絡中交易傳播性能的問題。使用雪崩協議中的Avalanche共識,結合聯盟鏈使用場景,可創新發明出一種基於Avalanche共識的聯盟鏈改進方案,該方案的特點是每次進行共識時只需要固定k個節點參與投票,k個節點達成共識即可傳播到全網達成共識,不需要網絡中的全部節點共同對某一筆交易達成共識。

 

參考資料

https://ipfs.io/ipfs/QmUy4jh5mGNZvLkjies1RWM4YuvJh5o2FYopNPVYwrRVGV

https://docs.avax.network/learn/platform-overview/avalanche-consensus

https://www.136.la/nginx/show-203738.html

https://zhuanlan.zhihu.com/p/162741817

https://www.pianshen.com/article/1627496811/

https://www.jianshu.com/p/d3a6b291880f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://zhuanlan.zhihu.com/p/52981124

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章