在深刻探索Hashgraph以前,咱們先聊聊關於共識協議的背景,衆所周知比特幣和以太坊目前都採用POW共識機制,若是暫不考慮大礦場聯合作些小動做,工做量證實機制確實是個很是安全的協議,簡單粗暴的算法設計從經濟收益層面杜絕了幾乎99%的潛在攻擊,比特幣網絡從2009年運行至今幾乎沒出過什麼嚴重的BUG,即便從軟件代碼上來看也稱得上是一個至關可靠的系統。然而隨着整個網絡資源規模飛速增加,POW機制帶來的資源消耗問題愈來愈難以忽視。摩根士丹利在2018年1月發佈的一份研究報告中指出,2017年比特幣挖礦業務共消耗了36太瓦時的能源,至關於卡塔爾一年的能源消耗量,預計2018年的電力需求將增至三倍以上,與阿根廷全國一年能源消耗量至關。POW機制引發的計算力消耗是否真的是毫無價值的能源浪費,對於這個問題社區存在不一樣的聲音(V神在不一樣場合都發表過對資源浪費問題的重視,以太坊也正在準備向POS機制切換),小編對此保留意見,畢竟我不是專業的經濟學家,可是對了達成全網共識是否真的須要消耗大量資源,我認爲未來必定會出現更有效率的解決方案。java
再來看另外一個應用頗多的POS系,包括BM在多個項目裏採用的DPOS機制,誠然在資源消耗方面有了至關多的改進,但DPOS機制在去中心化方面遠遠不如POW,雖然牛逼如BM的大神屢次提到必定數量的出塊節點足以保證全網去中心化同時大大提升交易處理能力,可是我相信有權力與利益集中的地方必定不會那麼風平浪靜,而且存在了相對中心化的節點後,至關因而給攻擊者框定了攻擊目標,DPOS可否抵禦各類系統性風險須要打個大大的問號。算法
要從根本上提升去中心化系統效率,共識協議必定是個繞不開的話題,不少團隊對此提出了不少不一樣的方案,Hashgraph就是其中之一,相比於其餘還只有天馬行空的想法,Hashgraph已經發布了可用的SDK。安全
根據白皮書定義,Hashgraph是一種數據結構和共識算法。Hashgraph不是數字貨幣,也不是區塊鏈(由於它實際上是DAG圖,並不是是鏈式結構),嚴格說也不僅僅是協議。Hashgraph更像是一個底層的出塊層而非一個完整的系統。Hashgraph的SDK中包含一個數字貨幣的Demo,但那僅僅用於演示證實Hashgraph能夠用於構建數字貨幣。Hashgraph能爲分佈式APP提供高效、公平、安全的基礎設施。高吞吐量和異步拜占庭容錯(ABFT)的特色,使得Hashgraph在公鏈和私有鏈領域都有潛在的使用價值,而且,在保證去中心化的同時不須要繁重的工做量證實。網絡
採用一致的時間戳,每個區塊(其實是事件,下文會談到)以及區塊裏的每一筆交易都有順序數據結構
Hashgraph是一個ABFT系統,沒有一個節點能夠阻止網絡達成共識或者在達成共識以後修改數據,號稱能達到銀行級別的安全性併發
根據官網的測試數據,能夠達到驚人的 250000 TPS異步
這裏咱們簡單講一下BFT算法,中文名拜占庭算法,不瞭解拜占庭將軍問題的能夠上網搜索下。咱們知道由於FLP不可能定理(在網絡可靠且存在節點失效的異步分佈式系統中,不存在一個能夠解決一致性問題的肯定性算法),BFT算法中的節點通訊基本都是同步的,而且雖然PBFT(實用拜占庭容錯)大大優化了消息傳播的複雜度,可是實際使用中差很少也就支持到100個節點就是極限了,所以BFT算法只適用於非公鏈場景,其次它自己對動態節點場景的處理也很是麻煩,而節點隨意加入或者退出在公鏈環境下是很是常見的。那麼Hashgraph到底是如何實現異步BFT的呢,白皮書中hashgraph對共識定義作了一些放寬(仍是得要適當的妥協啊~),在極小機率下共識算法可能會無限執行,可是這一律率幾乎爲0。Hashgraph的共識算法是非肯定性的,可是能保證最終肯定性,也就是說我雖然沒法保證在某個時間點下全部節點狀態保持一致,但我能保證在最終某個時刻下全部節點對某個時間點以前的網絡歷史達成一致。同時由於全部節點都是對等節點,避免了潛在的DDOS攻擊風險。分佈式
謠言算法也叫八卦算法,在分佈式系統中式很是常見的概念,這裏的謠言或者八卦之的是一段我知道可是另外一我的不知道的信息,顧名思義,算法運行原理和實際生活中辦公室八卦傳播相似,當一我的知道一個八卦後,通過有限時間傳播後,最後整個辦公室都會知道這一八卦。高併發
在Hashgraph中,每個節點都在傳播通過簽名的新交易已經從臨近節點接收到的交易信息。當某個節點收到包含新交易信息的數據後,會組合並可能添加本身所知道的交易成爲一個新的事件(event,相似於比特幣中的區塊Block,爲了便於理解,下文中的事件和區塊都是指同一個東西)傳播出去,而且這個事件包含兩個哈希,一個指向該節點上次最新的事件,另外一個指向該節點所收到的另外一個節點的最新事件,而後對整個事件加上時間戳並簽名,整個循環不斷進行直到全部節點都得到相同的信息。區塊鏈
假設網絡中有4個對等節點,P、Q、R、S,初始狀態下各自都有一個新的事件
Q節點隨機選擇S節點傳播消息,意思就是Q節點發送全部他本身知道而S不知道的信息給S,S確認消息後建立一個新事件,同時指向S和Q的最新事件。
S節點隨機選擇Q傳播消息,這個消息包含三個事件
如今,Q節點收到了包含三個事件的消息,隨着消息在節點間不斷傳播,整個Hashgraph結構可能會是如下樣子,這是一個經過加密哈希值鏈接的圖,所以叫作哈希圖(Hashgraph)
上面咱們看到了Hashgraph如何在節點之間通訊,但這僅僅只是通訊步驟,節點之間達成共識還須要虛擬投票機制,爲何說是虛擬投票,由於經過執行謠言算法後全部節點都是全節點,都存儲了完整的網絡歷史,在須要對某一提案達成共識時並不須要大規模的消息通訊,每一個節點獨立執行投票算法,而且全部節點必定會得出相同的共識結果。在討論具體的投票步驟前,有必要列下Hashgraph白皮書中描述的相關術語,否則真的會看得雲裏霧裏,我將盡量地說人話
在上面的謠言算法中咱們已經接觸到了這個概念,相似於比特幣中的區塊,事件是一個包含有兩個哈希指針的數據結構,而且能夠包括0個或若干交易信息,節點在建立事件的同時會加上時間戳而且對整個事件數字簽名
超過2/3以上節點的數量,在不少DPOS系算法上也有這個概念
當事件B能夠沿着哈希指針找到事件A,那麼事件B就可見事件A
當事件B能找到事件A的全部路徑中跨越了絕對多數的節點,那麼事件B強可見事件A。白皮書中提到通過數學論證能夠保證兩個強可見的節點在虛擬投票時能得到一致的結果
每一個節點在每一個輪次中建立的第一個事件就是見證人事件,即該輪次的祖先事件,節點可能在某個輪次中沒有見證人事件
若是R輪的見證人能被絕對多數的R+1輪見證人可見,則它就是知名見證人。具體的計算方法詳見後文。
一個事件的建立輪次是R或者R+1,其中R是該事件父節點的最大輪次。當且僅當事件能強可見絕對多數的R輪見證人,則該事件的建立輪次爲R+1。
若是R輪(建立輪次)中的全部知名見證人可見某一普通事件,則該事件的接受輪次就是R輪,若是某普通事件沒有被R輪全部知名見證人可見,則它的接受輪次必定晚於R輪
下圖已經劃分好了各個建立輪次,圖中的DAG圖自下而上增加,關於如何劃分建立輪次後面會詳細談到,每一個節點在同步到新事件後,能夠馬上開始計算建立輪次
而後,咱們按照見證人的定義標記每輪次的見證人事件,以下:
對於每個見證人,咱們須要判斷它是不是知名見證人,咱們以判斷B2事件是不是知名見證人爲例,根據知名見證人的定義咱們須要判斷A三、B三、C3和D3事件可以可見B2,這其實就是一個選舉過程,每個見證人都會對B2進行投票來決定B2是否知名。
A3事件可見B2,可見路徑以下黃線,咱們能夠說B2是A3的祖先事件,A3是B2的兒子事件或派生事件,A3可見B2,所以A3投票YES
同理其餘3個見證人,通過投票後全部見證人都投YES,所以咱們預判B2事件將是知名見證人,但須要注意的是選舉過程並無結束哦,還有一步計票階段,計票必須由下一輪見證人完成,所以B4和D4將進行計票,雖然這幅圖中沒有A4和C4,可是隨着時間推移它們必定會出現而且也將參與計票
在計票階段,R+2輪見證人會從本身強可見的R+1見證人處收集投票結果,一旦某個投票結果的計票數量超過絕對多數即認爲該結果有效,也就是達成共識。根據數學理論證實,任何一個R+2輪見證人若是對投票結果作出了決定,那麼這個結果就是全網的結論,若是這輪見證人沒法作出決定,就由下一輪見證人計票決定,直到得出確切結論。具體來看個例子,B4到A3有三條可見路徑且跨越了3個節點,所以B4強可見A3事件,即B4從A3處收集到的投票結果是YES
同理可得,B4強可見B三、C3和D3事件
經過合計,B4事件收集到了4個YES投票,顯然咱們能夠得出結論:B2是知名見證人!咱們將在圖中用綠色標記出這些知名見證人。而後咱們繼續對C2事件進行知名性判斷,因爲C2下一輪的見證人投票結果爲1YES,3NO,B4在計票後顯然會斷定不是知名見證人,咱們將C2標記爲藍色,同時白皮書有數學驗證能夠保證全部其餘見證人也作出一樣的決定。
值得一提的是,假如在下一輪沒法作出決定(例如2:2的投票結果),則將延續到下一輪,根據數學定理只要咱們在每十輪增長一個隨機輪次(coin round),則選舉過程最終必定會結束(以機率1收斂,通俗點說就是幾乎必然收斂,這是機率論中的概念)。在隨機輪中,收集到絕對多數結果的見證人僅投票而不作決定,而其餘見證人則根據數字簽名的中間位進行隨機投票。咱們繼續進行知名見證人的選舉,結果以下
一旦某個輪次肯定了全部的知名見證人,就能夠爲這一輪次中的其餘普通事件肯定接受輪次和共識時間戳(consensus timestamp)。咱們能夠看到黑色事件能夠被第二輪的全部知名見證人可見,所以它的接受輪次就是2
如今咱們開始肯定黑色事件的共識時間戳用於後續肯定共識順序,尋找A節點最先的事件X,它既是A2的祖先也是黑色事件的兒子,同理尋找B節點的Y和D節點的Z。而後將XYZ事件的時間戳依次排序並取中位數做爲黑色節點的共識時間戳。而後咱們繼續肯定其餘節點的接受輪次
如今咱們肯定了10個接受輪次爲2的事件,咱們將爲其排序獲得全網公認的順序,即共識順序。咱們按照如下優先級進行排序:
下面咱們看一張共識算法的可視化圖,來自HashgraphDemo 應用的運行結果,有興趣的同窗能夠下載官方的SDK包運行查看,SDK中包含若干個有趣的Demo(經過修改配置文件運行不一樣的demo)
$> java -jar swirlds.jar
前段時間我曾看到一篇文章說目前公鏈項目已經扎堆得人滿爲患了,是時候將目光聚焦到協議層上,至少這裏還不是那麼擁擠,那麼Hashgraph絕對是一個值得考慮的項目。須要注意的是,Hashrgaph目前並無開源,整個共識系統由一家商業軟件公司全部(Swirlds)。經過上文的分析,Hashgraph的共識過程相比於其餘算法有很大的創新,有至關的安全理論證實,而且驗證簡單,同時其高併發低延遲的特性目前正在進行測試中。不過謠言算法真的適用於大規模公鏈環境依然值得商榷,而在私有鏈場景,Hashgraph已經成功應用於很多2B系統中。其次,在Hashgraph協議中全部節點必須保存全網數據,不知如何解決數據壓縮問題。不過整體來講,Hashgraph項目很是值得期待,在目前的測試數據來看,在許多場景下效果吊打大部分共識協議,技術細節論證嚴謹,團隊組建2年多,團隊老大Leemon Baird關於Hashgraph有屢次精彩的公開演講,能夠網上搜索。
最近的商業信息:
社區熱度:
最後說一句,目前官方只容許合格投資者參與預售,這意味門檻很是高哦。開發人員和用戶能夠參與到社區建設得到代幣,具體信息關注官方渠道。