2019年9月6日,Fractal Platform CTO 範磊在Fractal社區,進行了主題爲《PoS能不能實現真正去中心化?》的在線直播。文章比較長,約5000字,但都是硬核乾貨,但願你們能看到最後。算法
如下是部分直播內容整理:chrome
你們好,這是咱們第一次在比較公開的環境下進行分享,今天會從六個方面來說,主要圍繞區塊鏈的一些基本原理設計、Fractal以前作的工做,以及咱們對行業的一些見解。瀏覽器
咱們先討論有關PoS集中化的話題,這能夠從兩個角度去理解,一是技術形成的集中化,當共識協議沒法容納大量節點時,開發者迫於無奈將節點數縮減到不多,這就產生了集中化現象,這塊具體內容咱們在後面PoS協議分析的時候會講到。性能優化
另外一個是經濟模型形成的集中化,PoS 系統的收益與持有的stake數量相關,這會形成stake持有量大的人會有更多的stake,而持有量少的人沒法參與挖礦。這種擔憂是很是合理的,不過即使是在最開放、最公平的系統中,財富的集中化在整我的類社會中也是不可避免的。網絡
那麼在經濟系統中產生了集中化後,咱們看看PoS會不會帶來一些負面影響?人類社會發展了這麼多年,雖然產生了不少資本家和金融大鱷,可是並無影響社會穩定,所以能夠說明這個事不可怕。咱們只要能保證財富的正常流通,以及再分配的機制就能夠了。有人認爲它有投資價值,天然會相對高價的購買stake,反之則會被拋售,在這之間天然會造成一個動態平衡,因此咱們認爲只要有一個正常的流通機制,那麼PoS的經濟集中化不是問題。架構
若是不用擔憂這個問題的話,其實PoS成爲大多數公鏈的選擇有必定的必然性,由於它的優勢是顯而易見的。除了節能以外,尤爲對於新公鏈來講,PoS系統會更加友好。oracle
PoW是徹底開放的,其算力也是標準化的,那麼對於惡意攻擊者來講,會較容易蒐集到足夠多的算力來對新公鏈發動攻擊。在PoS系統中算力跟stake相關, 若是要發動攻擊,你惟一能作的就是從二級市場去獲取,這個操做天然會推高stake的價格,那麼一方面就保護已有投資者的利益,另外一方面也提升了攻擊者的成本。因此對於新公鏈來講,被惡意攻擊的機率會更低一點。分佈式
因此咱們採用了PoS共識算法,咱們這個項目自己學術背景很是濃,咱們從16年就考慮設計純的PoS共識算法,直到17年,算法就大概成型了,因此咱們也天然地把PoS做爲咱們努力的方向。可是PoS的設計是很是困難的,咱們看到市面上有大量雷同的設計,我後面也會詳細講。性能
PoS共識協議設計難點
其實PoW的成功是有必定代價的,即能源消耗,但其帶來的好處是限制了攻擊者的能力。在這種分佈式系統裏面,咱們想要獲得一個有序的結果,有兩個須要面臨的挑戰,第一,誰是合法的參與者?在早期的分佈式系統裏是靠設備註冊,若是沒有註冊過程,誰均可以進去,那麼壞人就可能佔大多數。 也就是造成了所謂的女巫攻擊(sybil attack),二是發言的無序性。若是用戶在系統中發不少垃圾信息,會致使實現共識很是困難。而PoW巧妙地運用了硬件資源的限制,解決了這兩個攻擊的問題。區塊鏈
在PoS系統中,即使沒有硬件資源的約束,但stake至關於用戶的准入門檻,因此女巫攻擊的問題咱們不用擔憂。咱們將關注點放在第二個問題上,如何排除噪音最終造成肯定性的你們一致承認的結果?這裏面有個很重要的概念,也是是密碼學或分佈式算法中研究了不少年的協議,咱們叫交互式協議。交互式協議的過程就是把壞人篩除掉,最終造成一個結果,目前類PoS的協議基本上都是使用這種交互式協議來完成的。
但交互式協議有個問題,若是要達成一個結果,須要網絡上不少人蔘與交互,而且是多輪交互,這時候交互的過程很是耗時,即使帶寬很大都不行,由於網絡會有延遲,延遲和帶寬是兩個概念,因此交互式協議一般延遲比較大,網絡性能很差。尤爲是參與者增多以後,網絡的延遲或整個的協議複雜性,不是呈線性變化的,它至少是平方或者更高次方的變化。那麼在這種狀況下,PoS的設計就變得十分困難。
咱們必需要找到一個新的設計方法或者思路。在找到新思路前,咱們來看看古典的算法是怎麼作的?
PoS共識協議可能近兩年你們聽到的會比較多,但其實它的相關技術發展大概已有30多年了。比較普遍的是PBFT或者BFT這個名詞,就是拜占庭類協議。這裏有個學術研究的圖,總結了BFT類協議的發展歷程。
在80年代就開始有Dolve-Strong等人設計的一些協議,最上面一行的第二個圓圈中的Katz,就是Fractal的首席科學家Jonathan Katz,他在在早期的拜占庭協議裏作了很是多的貢獻,能夠說是教科書級的人物。
咱們重點看圖中最下面一行的右邊三塊,其中PBFT是兩個分佈式計算的學者在約20年前左右提出的,它改進了傳統的BFT,使得算法的複雜度下降了。但PBFT類協議是存在效率問題的,另外,它對網絡延遲條件的假設也很是高。
PBFT協議很是適合用在分佈式系統裏面,若是咱們從區塊鏈的角度看,它更適合私有鏈或者聯盟鏈,若是咱們硬要把它搬到公有鏈上,這是勉爲其難的。因此,咱們如今看到的大可能是折中方案,好比只限定幾十或一百的節點來參加共識,這也是爲何咱們會認爲PoS系統有很是強的中心化趨勢。以後咱們也會討論PoS中心化的趨勢是否是必定會存在?
爲了改善上述存在的問題,尤爲是下降通信的複雜度,近年來還出現了SBFT,它的想法很簡單,就是採用聚合簽名算法。有了聚合簽名以後,節點再發簽名,只須要發給一個leader或者叫collector,他把簽名聚合到一塊兒後再發給其餘人。從總量上來講,這確實下降了通信的複雜度,但這種設計把壓力都給了leader這個節點,若是這個節點壞了,整個系統就壞了,因此SBFT的中心化趨勢更加嚴重,它是一個有限的改進。
今年出現的項目Libra採用的是Hotstuff算法,Hotstuff是SBFT上更進一步的優化,其主要對上述所說的當leader節點變壞以後的問題作出了改進。其作法在每一輪中更換leader,把共識和更換leader的過程合二爲一,這裏面也存在代價,就是每一輪都依賴於時間同步,不然工做不能繼續,且集中化的趨勢並無下降。
除了BFT類協議以外,在PoS中還有更直接的共識協議,好比Algorand 。Algorand 用到的是另外一種解決爭議的交互式協議BA*,其擴展性本質上與PBFT相似。因此總體來說,目前大多數PoS協議都有這些特徵。
咱們不想在類BFT協議上繼續作小幅度的改進,包括Libra也在白皮書中明確說了,在當前基於Hotstuff的這個項目中,作的是許可鏈(Permissioned Blockchain),但Libra最終仍是會向非許可鏈的方向發展,不須要許可,誰均可以參加,這樣是咱們的共識協議所支持的方向。
iChing 是易經的音譯,這個協議最初的版本在2017年就有了,後面一直在作一些改進。回到PoS協議設計的初衷,咱們發現會面臨兩個問題,一個是准入機制,這個由stake來決定,另外一個是當發生不一樣意見是,如何裁決?
在去掉交互式協議後,咱們會面臨PoS中的Nothing at stake攻擊。由於持有stake就能挖礦,且不會浪費任何資源,你們會在多個地方進行挖礦,那麼必然會產生大量分叉。很顯然,分叉就會影響共識,咱們如今來說講怎樣不經過交互式協議去達成共識。
你們看下面這張圖片,這是咱們最核心的算法構造,這個哈希不等式將PoW的算力競爭轉化爲了PoS的stake的競爭。即使有了這個公式,系統中仍是會出現不少分叉。但咱們經過嚴格的數學分析,證實了這個分叉並不可怕,有興趣的朋友能夠點擊查看這篇論文,裏面會有詳細的分析。咱們得出的結論是,若是壞人嘗試在全部的地方挖礦,那麼他挖出的鏈會以2.7倍的速度往前漲,顯然這時系統不能容忍的49%的壞人和51%的好人,由於49*2.7倍則會超過好人。
針對這個問題,咱們有個greedy策略,也是iChing協議設計中最精妙的地方。咱們鼓勵好人也在分叉的地方挖礦,即時不是鏈最長的地方,從下圖中能夠看到,有1greedy,2 greedy或full greedy幾種策略,固然,對好人來講不會用full greedy,壞人有可能在全部地方嘗試。
咱們鼓勵好人作2或3 greedy,獲得的結果是好人能讓誠實鏈的增加速度達到原來的2.2倍左右,以此來抵抗壞人的鏈的增加速度,也就是說Nothing at stake攻擊帶來的影響並不可怕。咱們經過鼓勵好人使用greedy策略,來抵消壞人的優點,這樣咱們就不須要使用交互式協議來排除分叉。
因此基於以上分析,在咱們的iChing協議中,全部的礦工只須要像Bitcoin同樣,找最長的鏈產生區塊而後發出去,固然,咱們除了最長的還有次長的等等,這按照算法要求來作就能夠了。iChing能夠支持相似Bitcoin這種規模的參與者,咱們不要時間同步的假設,也不須要交互式協議。因此說iChing的系統可擴展性,或者說是去中心化特性跟Bitcoin是同樣的。
基於上述研究結果,咱們在18年上半年開始,籌劃作一個全新的公鏈系統——Fractal Platform,爲何叫Fractal?剛剛講到咱們的鏈會有不少分叉,Fractal就是分叉的意思。
我下面講一下,基於iChing咱們所作的Fractal公鏈。iChing本質上只是一個共識協議,若是咱們把它當作支持將來區塊鏈落地應用的架構來講,那麼還有不少問題要解決。咱們解決了PoS去中心化共識問題,還要提升性能或者說吞吐率。這涉及到Fractal另外一個重要的技術點。
咱們通過嚴謹的計算分析,得出了區塊鏈系統性能的瓶頸在哪,一個是共識,好比說交互式的共識,它自己就會把網絡卡住;另一個瓶頸就是網絡層,如今所謂的1萬甚至10萬TPS的項目,遠遠不是咱們家用或普通商用的網絡帶寬能承受的,而且在區塊鏈系統中還有額外的開銷,就是交易數據。交易數據一般是小包,大其在網絡中傳輸的效率很低。
舉個栗子, 好比船運貨,若是貨物都是散裝的,各類各樣的貨物,它的運輸效率會很低,而如今海運爲了提升效率,會採用集裝箱的方式。咱們在網絡層(Layer 0)上有一個創新的優化,叫做Backpacker。它的機制就是把小包經過packer打成一個標準的集裝箱,這樣咱們就能夠有效的提升網絡對於小包的處理的能力。咱們這裏數據的集裝箱,也就是 packer打出來的小包叫做 pseudo-block,而後將其傳給全部的共識節點。這裏利用了PoS一個自然的好處,就是將區塊打包放在共識區塊以後,節點產生共識塊後,咱們再把pseudo-block組成新的真正交易區塊。但這時候真正的交易區塊已經不用傳了,由於pseudo-block已經傳遍全網了,咱們只要傳輸很小的meta-block,也就是這個block頭部就能夠了。
因此Fractal會提供一個很是平穩的網絡流量,使得帶寬利用率很高,由於既沒有小交易數據包的消耗,又沒有大共識塊的衝擊,因此整個網絡的性能優化很是好。
Fractal基於iChing和Backpacker這兩點創新,就能夠在跨大洋跨洲的真實網絡環境下,實現超過3000TPS的徹底分佈式的去中心化PoS系統。
Fractal通過一年的開發,我剛纔講的全部的特色和協議都已經徹底實現,從核心網絡共識、錢包接口、智能合約已經DApp的demo,也已經所有具有。咱們的共識節點已經在跑了,目前主要節點部署在亞馬遜上,固然咱們也嘗試過在阿里雲等其餘多種不一樣的雲上同時部署節點。
下面是咱們配套的區塊鏈瀏覽器總覽圖,包括block數量、時間數量,當前的TPS等等,這是咱們跑的一個小的背景流量,大概一二百TPS。咱們在壓力測試的時候,會作到一兩千甚至三千的TPS。
下圖是block的交易信息,你們能夠看到裏面的區塊信息、交易信息以及地址信息等等,按地址查詢餘額、交易等等區塊鏈瀏覽器應該具備的功能,咱們也都已經開發完成。
下面的界面是有關錢包的,你們能夠看到,這是一個全功能錢包,從發交易到部署智能合約、調用智能合約以及等待交易確認等等功能都已實現。
咱們的錢包目前是以chrome插件的形式來提供的,由於它能夠很天然的和DApp的開發結合在一塊兒。同時,咱們也作了一個DApp的demo,從下圖能夠看到這是一個擲骰子的遊戲。咱們經過智能合約以及錢包接口,來實現了在瀏覽器中DApp開發。
這個DApp的特色是接受交易雙方的隨機數輸入來實現絕對的公平,整個的過程是徹底開源的,不是依賴於單獨一方產生隨機數,右上角的彩色小點都是鼠標移動的時候產生的隨機數種子。
因此你們能夠看到Fractal目前的完成度是很是高的,也很是歡迎對這個項目有興趣的各路英雄,以各類形式來參加咱們的項目。我下面就稍微說一下Fractal將來的規劃。固然,一方面是完善目前的系統,咱們還有很是多的細節須要去改進優化。另外一方面,也是跟社區關聯最大的,就是如何來參與這個系統。
咱們將Fractal定位成一個基礎的功能平臺,但願上面會承載不一樣的應用,咱們也會作一些技術上的儲備和支持來使得它真正成爲一個生態系統。好比內置的去中心化兌換機制,你們在上面作應用能夠發行本身的token,發行後,開發者不須要去考慮用交易所來兌換,咱們內置的機制就能夠跟其它主流數字貨幣進行兌換,這樣一來就保證生態開發者的利益,平臺是不會侵犯和搶佔這部分利益的。另外,像隨機數的產生,以及鏈下信息上鍊的oracle(預言機)機制等,咱們都會提供內生的支持,因此也很是歡迎你們來參與Fractal整個生態的建設。 以上就是我今天的分享,謝謝你們。
Fractal Platform 官方渠道
微博:https://weibo.com/u/7236880516
Facebook:https://www.facebook.com/Frac...
Twitter:https://twitter.com/fractalblock
商務合做:Fractal@fractalblock.com