2019年1月17日,北大軟微-八分量協同創(chuàng)新實驗室展開第9期學術沙龍討論活動。北京大學沈晴霓老師,楊雅輝老師、方躍堅老師以及多位北大的博士生,碩士生與Trias資深系統(tǒng)研發(fā)胡志琳就共識算法和容錯機制問題做了探討。
有一種說法是,共識算法就是區(qū)塊鏈網絡中的法律。它決定了誰有出塊的權力和誰獲得出塊的獎勵。然而,不同的共識算法,其效率速度,能耗高低,容錯機制都不盡相同,什么才是合理的共識算法呢?本周,資深系統(tǒng)研發(fā)胡志琳博士帶來了他的見解。
先簡要回顧一下共識算法相關。目前共識算法主要可以分為兩類:同步共識算法和異步共識算法。同步共識算法相對比較簡單,它指的是在一定時間內收集共識消息,只要“好”節(jié)點過半即可順利達成共識,如POW算法。而異步共識算法,(比如PBFT)不需要明確的時間同步,但對“壞”節(jié)點的容錯度較低,常規(guī)的拜占庭類共識算法的容錯能力通常不超過33%。
關于拜占庭容錯,在1981年Lamport提出了《The Byzantine Generals Problem》一文中,對拜占庭將軍問題的兩種解決辦法做出了解讀。
①口頭消息,即OM(m)協議。在弱同步的假設下實現了多項式級的復雜度PBFT,也就是所謂的最多有1/3容錯節(jié)點數量的理論上限。
②簽名消息,即SM(m)協議。與口頭協議相比,所有的消息都是有記錄的,這樣就解決了追根溯源的問題。已經證明這種協議下可對任意多個節(jié)點實現容錯,即容錯率逼近100%。此類算法的應用約束為同步網絡。
有了上述背景,我們再簡要介紹一下Trias超級節(jié)點的由來。Trias上的節(jié)點都要具備TEE環(huán)境,并通過一個叫做“上帝擲骰子”的游戲。這樣一來,每一個節(jié)點的可信度時時刻刻都處在動態(tài)的監(jiān)測中,通過一定周期頒發(fā)的天榜,選取出排名最高且安全的節(jié)點作為超級節(jié)點。
理論上說,超級節(jié)點的可信度是很高的,但并不排除超級節(jié)點臨時被惡意攻擊,或為牟利而說謊的可能。那如何進一步保證超級節(jié)點呢?這就要通過在超級節(jié)點集合上運行共識算法來做文章了。
根據Trias的優(yōu)化方案(稱之為KeepBFT方法),首先,在選擇超級節(jié)點集合時,冗余一定的節(jié)點數。當出現問題節(jié)點時,直接選取替補節(jié)點,以保持線上正常的可信超級節(jié)點數目。
此外,Trias在去中心化的簽名確認方案的基礎上,將一部分超級節(jié)點賦予了新的功能,被稱為觀察層,也可稱之為共識確認層,觀察層由多個Paxos狀態(tài)機觀察節(jié)點和一個AI決策模塊組成。所有觀察層節(jié)點始終保持在線,接受鏈上所有的提案信息。
正常情況下,共識確認層和其他超級節(jié)點一起進行日常工作。但是當部分節(jié)點遭到攻擊時,觀察層就可以分析出誰是“好”節(jié)點,并將他們選取出來達成共識。惡意節(jié)點的提案剔除,并在此輪有效期內發(fā)送給所有的超級節(jié)點。
即使惡意節(jié)點的數量非常多,整個系統(tǒng)仍然能夠可靠地實現共識的高容錯,即忠實節(jié)點仍然能夠取得有效的共識。基于TRIAS天榜所遴選的超級節(jié)點和確認層共同作出的保障,其共識容錯能力達到90%以上,乃至逼近100%。
