參考鏈接:
論文原文:
Baird L. The swirlds hashgraph consensus algorithm: Fair, fast, byzantine fault tolerance[J]. Swirlds, Inc. Technical Report SWIRLDS-TR-2016, 2016, 1.
學習文章來源: https://zhuanlan.zhihu.com/p/35640075 作者:BlockGeeks
外網資料:
https://www.slideshare.net/anupriti/hashgraph-an-over-view-with-example
https://www.slideshare.net/calvinchengx/hashgraph-as-code-83446758
Swirlds的JDK下載:
https://www.swirlds.com/download/
其他Demo:
https://github.com/GovTechSG/hashgraph_experiments
https://github.com/calvinchengx/SwirldsProject
https://github.com/dappcoder/hello-swirld
參考請注明出處!
一、背景介紹
1.1 Hashgraph
? Hashgraph狹義上來說是圖論領域的一種資料結構,廣義上來說是一種新型的共識演算法,Hashgraph是一種DAG圖,它不同于區塊鏈的鏈式結構,而是一種以Hash演算法為支撐的有向無環圖,嚴格地說Hashgraph也不單單是一種共識協議,Hashgraph更像是一個底層的出塊層而非一個完整的系統,Hashgraph的SDK中包含一個數字貨幣的Demo,但那僅僅用于演示證明Hashgraph可以用于構建數字貨幣,Hashgraph能為分布式APP提供高效、公平、安全的基礎設施,高吞吐量和異步拜占庭容錯(ABFT)的特點,使得Hashgraph在公鏈和私有鏈領域都有潛在的使用價值,并且,在保證去中心化的同時不需要繁重的作業量證明,
1.2 區塊鏈與去中心化網路
? 2008年,Nakamoto發表了《Bitcoin: a peer-to-peer electronic cash system》報告,該文獻中提出了一種去中心化、按時間順序排序的資料,資料由所有節點維護、可編程和密碼學上安全可信的分布式賬本技術構成,用于解決位元幣(BTC, bitcoin)在去中心化網路中的信任問題,
? 其核心區塊鏈技術,從狹義角度來講是一種按照時間順序將資料區塊以順序相連的方式進行組合的一種鏈式資料結構,并以密碼學方式保證資料不可篡改和不可偽造的分布式賬本,從廣義角度來講,區塊鏈技術是利用塊鏈式資料結構來驗證與存盤資料、利用分布式節點共識演算法來生成和更新賬本資料、利用密碼學方式保證資料傳輸和訪問安全、利用智能合約來編程和操作資料的一種全新的分布式基礎架構與計算范式,
? 區塊鏈網路是一種分布式網路,分布式的網路不一定去中心化,但是去中心化的網路一定是分布式的,去中心化顧名思義就是指在網路中沒有中心化的節點,去中心化網路的優點包括: 可構建在不信任網路下、P2P模式、安全性/容災性高等,但是其也面臨一系列挑戰,例如單點故障、節點基數大并且數量不確定(遞增)、惡意節點發布錯誤資訊、篡改資訊、不合作等,
1.3 共識協議
? 在分布式系統中,多個主機通過異步通信方式組成網路集群,在這樣的一個異步系統中,需要主機之間進行狀態復制,以保證每個主機達成一致的狀態共識,然而,異步系統中,可能出現無法通信的故障主機,而主機的性能可能下降,網路可能擁塞,這些可能導致錯誤資訊在系統內傳播,因此需要在默認不可靠的異步網路中定義容錯協議,以確保各主機達成安全可靠的狀態共識,
? 中心化的系統達成共識非常的簡單,因為一切資料都由中心化管理,而對于去中心化的區塊鏈系統來說,共識則很難達成,一切都要商量這來,不同的共識演算法就是不同的商量規則,通過設定不同的一組條件篩選出最具有代表性的節點來達成共識,
二、研究現狀
2.1 圖論研究歷程
? 圖論〔Graph Theory〕是數學的一個分支,它以圖為研究物件,圖論中的圖是由若干給定的點及連接兩點的線所構成的圖形,這種圖形通常用來描述某些事物之間的某種特定關系,用點代表事物,用連接兩點的線表示相應兩個事物間具有這種關系,
? 人們常稱1 736 年是圖論歷史元年,因為在這一年瑞士數學家歐拉發表了圖論的首篇論文《哥尼斯堡七橋問題無解》,所以人們普遍認為歐拉是圖論的創始人,從19世紀中葉到20 世紀中葉,圖論問題大量出現,如哈密頓圖問題、四色猜想等,這些問題的出現進一步促進了圖論的發展,1847 年,克希霍夫用圖論分析電網路,成為圖論最早應用千工程科學的一個例子,在很長一段時期內,圖論被當成是數學家的智力游戲,一些著名的難題,如迷宮問題、棋盤上馬的路線問題、四色問題和哈密頓環球旅行問題、任務分配問題和地圖著色問題等, 吸引了眾多的學者,圖論中許多的概念和定理的建立都與這些問題的解決有關,近幾十年來,隨著計算機科學的發展,圖論以更加驚人的速度向前發展,
2.2 區塊鏈共識演算法
? 目前區塊鏈的共識演算法大致可以分為四類:①作業量證明類的共識演算法②Po憑證類的共識演算法③拜占庭容錯類共識演算法④結合可執行環境的共識演算法,
? 作業量證明類的共識演算法最為代表性的就是位元幣使用的PoW演算法,PoW演算法是以每臺計算機的算力即CPU的計算能力作為共識競選的籌碼,每臺計算機需要解決一個數學難題,誰先解出這個數學計算上的難題就擁有了打包交易的權利,也就是記賬權,Pow演算法最為被詬病的是對資源的浪費問題,所以,后面出現了使用憑證類的PoS和DPoS等Po憑證類的共識演算法,PoS不采用“挖礦”計算來選擇交易的打包者,而是通過哦持有數字貨幣的量以及時間來權衡出塊者的選擇,整個程序類似于股票制,權益證明必須采用某種方法定義任意區塊鏈中的下一個合法區塊,依據賬戶結余來選擇將導致中心化,此后,又提出了DPoS的委任權益證明共識演算法,其通過權益投票選擇出一系列超級節點或者說代表節點去專門生成區塊,大大提高了出塊速度,但是其去中心化的程度上仍不及PoW,是一種多中心化的方案,
? 拜占庭類的共識演算法在聯盟鏈中大行其道,拜占庭將軍問題最先在Leslie Lamport描述分布式系統一致性問題中的論文中提出,拜占庭容錯能力是描述當前網路系統能夠容納錯誤節點和惡意節點并能夠達到正確的一致性共識的能力,拜占庭容錯系統是一個擁有n臺幾點的系統,整個系統對于每一個請求,滿足以下兩個條件:1.所有非拜占庭節點使用相同的輸入資訊,產生相同的結果;2.如果輸入的資訊正確,那么所有非拜占庭節點必須接受這個資訊,并計算相應的結果,目前實用拜占庭容錯演算法PBFT是各大聯盟鏈的主流共識演算法,PBFT要求共同維護一個狀態,所有節點采取的行動一致,因此需要運行三類基本協議,包括一致性協議,檢查點協議和視圖更換協議,這里不在詳細展開,
作業量證明共識演算法是最終一致性的共識演算法,屬于概率上的實作了拜占庭容錯,概率的大小取決于網路中誠實節點的個數,而PBFT則是強一致性的共識演算法,此外兩者的參考場景也不同,前者一般應用于公鏈,而拜占庭協議則一般應用于聯盟鏈,在出塊時間來看PoW需要平均大約10分鐘,而PBFT出塊時間非常迅速,
目前各類共識演算法層出不窮,不同的演算法都有不同的適用場景,總體上來看,目前的方向大多是在保證一定去中心化程度的條件下提高區塊鏈系統吞吐量,以此來滿足實際的業務需求,
三、Swirlds共識演算法的研究
? Hashgraph是Swirds公司抱有專利的一種分布式賬本共識,也沒有區塊概念,交易跟交易直接組成DAG,hashgraph通過gossip of gossip協議,讓每個節點都維護著所有節點跟其他節點的通信歷史,每個節點在完成拜占庭協議時,居然不需要經過網路多輪通訊,節點本地環境就可以直接模擬拜占庭決議,
3.1 Hashgraph資料結構
3.1.1 event事件資料結構
? Hashgraph協議中沒有區塊鏈中區塊的概念,而是產生了與之非常類似的Event(事件)的資料結構,圖3-1右圖展示了該資料結構的內容,其中包含了兩個Hash值,前一個Hash指標指向上一次最新的事件,后一個Hash指標指向其他節點傳遞的最新事件,結構的下方存盤了當前節點記錄的各個交易,最后對整個事件加上時間戳并且簽名,這樣就構成了整個事件的結構,

3.1.2 Hashgraph圖資料結構
? Hashgraph是一種有向無環圖,圖3-2展示了P、Q、R、S四個網路作業節點在執行演算法程序中構造出的Hashgraph結構,其中縱軸代表著時間,由底向上是時間的順序,縱向四條主軸線上的每個原點就代表著單個Event,圖中的箭頭就代表著Hash指標的方向,從圖中可以看出,除了初始的Event,每一個Event的入度都為2,從時間軸來看這些入度都是由下指向上方,每一個Event的出度大小都是不確定的,這由Gossip協議與網路的隨機性決定,由于這樣特殊的資料結構也就構成了Hashgraph有向無環的特性,

3.2 基礎概念
3.2.1 Gossip協議
? Gossip protocol也叫 Epidemic Protocol(流行病協議),實際上它還有很多別名,比如:“謠言演算法”、“疫情傳播演算法”等,Gossip protocol 最早是在 1987 年發表在 ACM 上的論文 《Epidemic Algorithms for Replicated Database Maintenance》中被提出,主要用在分布式資料庫系統中各個副本節點同步資料之用,這種場景的一個最大特點就是組成的網路的節點都是對等節點,是非結構化網路,
? 他的作業原理非常的簡單,類似于辦公室談論八卦,當一個節點知道一項新訊息,而其他節點卻不知道時,就向其他節點分享自己知道的資訊,收到新訊息的節點再向外發送資訊,這樣一步一步的傳遞下去,直到這個訊息在整個網路收斂,

3.2.2 絕對多數(supermajority)
? 對于一個需要達成共識的網路來說,當一個新的提案提出時,需要絕對多數的人同意才可通過,這個絕對多數的量化就是指網路中同意的節點數要超過2/3以上的數量,DPoS、RAFT共識演算法中也用到了這個概念,
3.2.3 可見(see)與強可見(strongly seeing)
? 每一個Event都有兩個Hash指標,分別計算自自己的上次最新事件與接收到他人的最新事件,那么通過這兩個Hash指標的Hash值就可以溯源到上兩次子事件,這個方向是與取Hash的方向相反的,舉例來說,設有兩個事件A與B,當事件B可以沿著哈希指標找到事件A,那么事件B就可見(see)事件A,當事件B能找到事件A的所有路徑中跨越了絕對多數(2/3)的節點,那么事件B強可見(strongly seeing)事件A,在Hashgraph的白皮書中提到經過數學論證可以保證兩個強可見的節點在虛擬投票時能獲得一致的結果
3.2.4 見證人(witness)與知名見證人(famous witness)
? 這兩個概念都是對Hashgraph中事件身份的表示,每個節點在每個輪次(round)中創建的第一個事件就是見證人事件,即該輪次的祖先事件,節點可能在某個輪次中沒有見證人事件,如果R輪的見證人能被絕對多數(2/3)的R+1輪見證人可見,則它就是知名見證人,具體的計算方法詳見后文,如果既不是見證人事件也不是知名見證人事件,那么其就是一個普通事件,
3.2.5 創建輪次(round created)與接收輪次(round received)
? 一個事件的創建輪次是R或者R+1,其中R是該事件父節點的最大輪次,當且僅當事件能強可見絕對多數的R輪見證人,則該事件的創建輪次為R+1,如果R輪(創建輪次)中的所有知名見證人可見某一普通事件,則該事件的接受輪次就是R輪,如果某普通事件沒有被R輪所有知名見證人可見,則它的接受輪次一定晚于R輪,
3.3 演算法核心
3.3.2 謠言的謠言(Gossip about Gossip)

? 以舉例的方式描述演算法的流程,目前假設網路中共有四個節點,分別為P、Q、R、S,并且他們都有了自己的初始事件,如圖3-4(1),
? 下一步,Q節點需要分享自己事件以此來讓其他節點知道,此時隨機選擇一個節點傳播,選擇了S節點傳播訊息,Q節點發送所有他自己知道而S不知道的資訊給S,S確認訊息后創建一個新事件,其中的Hash指標同時指向S和Q的最新事件,如圖3-4(2),
? 同樣的,謠言演算法會使節點間繼續傳播訊息,從而生成新的事件,如圖3-4(3)
? 現在,Q節點收到了包含三個事件的訊息,其中包含了Q的初始訊息、S的初始訊息、以及上一步的S最新訊息,隨著訊息在節點間不斷傳播,整個Hashgraph結構就慢慢顯現出來,因為是依靠Hash指標來連接每一個事件并且構成了一個圖,所以稱之為Hashgraph,如圖3-4(4),
? 對于每一個節點的最新事件來說,其通過Gossip about Gossip協議和Hash指標摘要了整個網路歷史事件,圖3-4(5)單獨畫出了P的最新事件的由來,圖中可以看出當前最新事件涵蓋了網路的事件歷史,個人理解于在圖中構建了類似區塊鏈的事件鏈結構,這個程序為后續的虛擬投票打下了基礎,
3.3.3 虛擬投票(visual voting)
? 通過上面的Gossip about Gossip 演算法解決了Hashgraph在節點之間通信,但這僅僅只是通信步驟,節點之間達成共識還需要虛擬投票機制,虛擬投票是因為通過執行謠言演算法后所有節點都是全節點,都存盤了完整的網路歷史,在需要對某一提案達成共識時并不需要大規模的訊息通信,每個節點獨立執行投票演算法,并且所有節點一定會得出相同的共識結果,
? 同樣的,通過描述示例來闡述整個流程,對于網路中的A、B、C、D四個節點,如圖3-5(1)所示,對于已經劃分好輪次的一個Hashgraph來說(具體劃分依據會在后面闡述),下面計算每個節點的創建輪次,

? 根據見證人的概念即每一輪的第一個事件就可以標記為見證人事件,將圖中的見證人事件標記出來,如圖3-5(2)所示,
? 下面判斷是否為每個見證人是否為知名見證人,下面以判斷B2是否為知名見證人為例,整個程序可以劃分為兩個部分:①投票②統計票數,根據知名見證人的定義,其上一輪次的A3、B3、C3、D3中必須絕大多數可見B2,這樣B2才會成為知名見證人,這個程序很類似于投票選舉,所以叫做虛擬投票,如圖3-5(3)所示,
? 當上一輪次的節點能夠可見B2時,就代表投票YES反之NO,那么投票的結果應該如下:(注意,尋找是否可見的路徑時,必須是從上往下找,因為Hash指標的鏈狀結構是不可以正向遍歷的)

? 經過投票后所有見證人都投YES,因此我們判斷B2事件將是知名見證人,但是此時的虛擬投票程序并沒有結束,計票必須由下一輪見證人完成,因此B4和D4將進行計票,雖然圖中沒有A4和C4,但是隨著時間推移它們一定會出現并且也將參與計票,
? 在計票階段,R+2輪(這里就是第四輪)見證人會從自己強可見的R+1(這里就是第三輪)見證人處收集投票結果,一旦某個投票結果的計票數量超過絕對多數即認為該結果有效,也就是達成共識,根據數學理論證明,任何一個R+2輪見證人如果對投票結果做出了決定,那么這個結果就是全網的結論,如果R+2這輪見證人無法做出決定,就由下一輪R+3見證人計票決定,直到得出確切結論,這個程序就是最終一致性特點的體現,具體來看個例子,B4到A3有三條可見路徑且跨越了3個節點,因此B4強可見A3事件,即B4從A3處收集到的投票結果是YES,同樣的B4強可見B3、C3、D3,所以都從他們那里收集到了YES的票據,最后,終于得出了結論:B2是一個知名見證人,如圖3-7(1)所示,
? 需要提出的是,什么時候計票會推遲到R+3輪(第五輪)或者更靠后呢?可能是以下這種情況,當B4計票時得到的結果是2:2,那么其就無法判斷B2是否為一個知名見證人了,這輪計票就延期,白皮書中提到,如果我們在每個十輪中增加一個隨機的輪次(coin round),那么計票就以1的概率收斂,也就是幾乎必然收斂,所以可以認為是會必然結束,在隨機輪中,收集到絕對多數結果的見證人僅投票而不做決定,而其他見證人則根據數字簽名的中間位進行隨機投票,

? 同樣的,下面對C2進行知名見證人投票,投票的結果如下,因為A3、B3、D3均沒有路徑可以到達C2,所以都不可見C2,投票結果為NO,所以,再經過計票可以知道C2不是一個知名見證人,如圖3-7(2)所示,
? 最終對第二輪的見證人判斷結果如下:知名見證人A2、B2、D2,普通見證人:C2,當某個輪次的所有事件都被確定了是否為知名見證人后,就可以為這一輪次中的其他普通事件確定接受輪次和共識時間戳(consensus timestamp),根據接受輪次的定義,必須這一輪次中的所有知名見證人可見,如圖3-7(3)所示,黑色標記的普通事件可以被第二輪的所有的知名見證人可見,那么其接收輪次就是2,
? 下面開始計算黑色事件的共識時間戳,確定時間戳的作用就是為后續確定共識順序,對于當前普通事件,尋找其共識成員,范圍是其接受輪次的所有知名見證人的節點,對于本例中的黑色事件就是A節點、B節點、D節點(C節點上的C2不是知名見證人,所以排除),條件是對于當前X節點尋找其最早的事件Y,它既是Y事件的祖先也是當前普通事件(本例中黑色事件)的兒子,這些節點選擇出來后,將他們的時間戳依次排序,其中位數就作為當前普通事件(黑色事件)的時間戳,簡單的來說就是尋找時間戳范圍在當前普通節點時間與知名見證人時間之內的所有節點,然后確定其共識時間戳,(當找不到該怎么辦?這個事件只限定于當前節點時間軸上嗎?)同樣的方法求出所有的普通事件以及其共識時間戳,圖3-7(4)展示了所有的普通事件,
? 現在我們確定了10個接受輪次為2的事件(圖中黑色事件以及A1~D1),我們將為其排序得到全網公認的順序,即共識順序,我們按照以下優先級進行排序:
- 接受輪次
- 共識時間戳
- 按事件簽名和某亂數異或的結果排序,這個亂數通過該輪所有知名見證人的數字簽名進行異或運算得到
這樣整個共識演算法的程序就結束了,得到了某個輪次或者說狀態機的某個狀態下的以時間序列的一系列共識結果,
3.4 結論
? Hashgraph是“互聯網和分散技術的未來”,被設計成一種可替代區塊鏈的高級一致性機制/資料結構,他的特點是①交易非常快速,根據官網的測驗資料,可以達到驚人的 250000 TPS,②公平,用數學通過一致的時間節點確保公平運用數學理論通過一致性時間戳證明得到的公平意味著任何人都不能操縱交易的秩序,③安全,銀行級安全(異步拜占庭容錯,Asynchronous Byzantine Fault Tolerant),排除了不良行為,防止其達成共識,④獨特性:Hashgraph使用虛擬投票和小道訊息而非POW或POS來達成分布式一致性,這是非常獨特的想法,Hashgraph的共識程序相比于其他演算法有很大的創新,有相當的安全理論證明,并且驗證簡單,同時其高并發低延遲的特性目前正在進行測驗中,
? Hashgraph實作了異步的BFT,因為在極小概率下共識演算法可能會無限執行,但是這一概率幾乎為0,具體來說就是在計票程序中出現延期,但是也有相應的機制去保證避免無線延期(隨機輪),Hashgraph的共識演算法是非確定性的,但是能保證最終確定性,也就是說我雖然無法保證在某個時間點下所有節點狀態保持一致,但能保證在最終某個時刻下所有節點對某個時間點之前的網路歷史達成一致,這與PoW是相似的,同時因為所有節點都是對等節點,避免了潛在的DDOS攻擊風險,這些都是這個演算法優點,
? 其次,Hashgraph也不是沒有缺點,Hashrgaph目前并沒有開源,整個共識系統由一家商業軟體公司所有(Swirlds),通過上文的分析,不過謠言演算法真的適用于大規模公鏈環境依然值得商榷,因為一旦大規模的節點加入與退出這個Hashgraph的遍歷時間以及安全性是否還有保障難以確定,而在私有鏈場景,Hashgraph已經成功應用于不少2B系統中,其次,在Hashgraph協議中所有節點必須保存全網資料,不知如何解決資料壓縮問題,
四、核心演算法
4.1 Swirlds演算法核心
4.1.1 核心演算法
? 每個成員重復呼叫隨機選擇的其他成員,并與它們同步,與傳出同步并行,每個成員接收傳入同步,當A節點同步到B節點時,她發送她知道B不知道的所有事件,B將這些事件添加到Hashgraph中,只接受具有有效簽名且包含他所擁有的父事件的有效哈希值的事件,然后,所有已知的事件都被分成若干輪,然后每個回合中每個成員(“目擊者”)的第一個事件,通過純粹的本地拜占庭協議和虛擬投票來決定是否出名即是否是知名見證人,然后在那些有足夠資訊的事件上找到總順序,如果兩名成員分別為某一事件分配歷史上的一個位置,即使有更多的資訊進來,他們保證分配相同的位置,并且保證永遠不會改變,此外,每個事件最終都被分配了這樣一個位置,概率為1,

? 演算法的核心架構是分為兩個回圈,這兩個回圈不是順序執行的,而是同步執行的,第一個回圈是實作Gossip演算法,將新的事件在網路中分享,第二個回圈就是執行打包生成新事件以及虛擬投票演算法,
4.1.2 DivideRounds分離輪次演算法

? 回圈遍歷事件,一旦知道事件X,就給它分配一個整數X.round,并計算布林值X.witness,指示它是否是一個“witness”(見證人),即成員在該輪中創建的第一個事件,演算法對于每一個事件(接收到的同步事件),首先設定當前R為事件X的最大/新輪次,然后判定當前事件X是否強可見R輪次的絕大多數見證者,如果是的話就將其歸為第R+1輪(產生新的一輪),如果不是的話就將其還是歸為當前的R輪,最后,設定其是否為見證人,這要滿足以下兩種條件之一就可以認為其為見證人:①當前事件X并沒有自己的父事件即當前事件X為當前節點的首個事件及初始事件②當前事件的輪次比它父事件輪次大即當前事件是當前輪次的首個事件,
4.1.3 DecideFame知名見證人演算法

? 對于每個見證事件(例如,一個事件X,其中X.witness為真),決定它是否著名(例如,給X.famous賦一個布林值),這個決定是通過一個基于虛擬投票的拜占庭協議協議來完成的,每個成員在自己的Hashgraph副本上本地運行它,不需要額外的通信,它將Hashgraph中的事件視為向彼此發送投票,盡管計算只在成員的計算機上進行,在幾輪投票中,成員將選票分配給每一輪的證人,直到超過2/3的人同意,要找到x的名氣,請在不斷增長的Hashgraph上重復運行此操作,直到X.famous接收到一個值,
? 首先將這些見證人事件是否為知名見證人即famous值都為不確定,然后再遍歷每一個輪次比事件X大的事件Y,D記錄兩者輪數之差,是為后續的收斂做準備,S是Y輪次-1中強可見的見證人事件集合(S就是投票人,T就是計票人),S進行投票, V保存著大多數人的投票結果(TRUE OR FALSE),投票的依據就是與當前事件X是否有連線(向下是否可達),T統計了S事件集合中與大多數投票結果(即V)相同的事件個數,如果D為1,那么就代表著這是第一輪選舉(被投票事件、投票事件、計票事件相鄰輪次),如果Y能夠可見X,那么Y就計票為TRUE,當D在常數C(之前舉例是10)輪次內(D mod C > 0),那么這就是一般輪次,在一般輪次中,如果T為絕大多數那么就可以做出決定了,這時,X設定為知名見證人,Y的投票結果為TRUE,退出關于事件Y的回圈,否則Y僅僅投票為V,而不對X做出決定,如果D到了常數C的輪次(D mod C== 0),那么就產生隨機輪次,同樣的如果T滿足絕大多數,那么Y就投票,否則Y就采用隨機取值的辦法,類似于拋硬幣,去Y簽名的一個中間Bit作為結果,因為已經經過了太多輪次需要一個結果來使其收斂,
(疑惑:y.vote的作用是什么?)
4.1.4 FindOrder排序演算法

? 一旦R輪中的所有證人都決定了他們的名聲,找到那輪中的知名見證人集合,然后從集合中洗掉與該集合中任何其他證人擁有相同創造者/父事件的任何知名見證人,剩下的知名見證人就是唯一的知名見證人(唯一是指一個節點一個,而不是總數一個),他們充當裁判,分配較早的事件的接收倫次和一致的時間戳,一個事件被稱為“收到”在第一輪,所有唯一的知名見證人都收到了它,如果所有之前的輪次都有所有證人的名聲決定,它的時間戳是每個成員首次收到它的那些事件的時間戳的中值,一旦這些被計算出來,事件都按接收倫次排序,所有的聯系都按照一致的時間戳進行排序,任何剩余的聯系都是由加白的簽名再排序,加白的簽名就是回合中所有唯一的知名見證人的簽名,
? 回圈遍歷事件,對于當前事件X,如果存在這樣一個輪次R,其當前輪次沒有事件Y或者之前輪次的Y事件只是見證人而不是知名見證人,并且X事件是R輪次每個唯一知名見證人的祖先,并且R輪次是最早的(這個程序其實就是找出普通事件),那么確定X的接收輪次為R,S集合保存了每個事件Z,使Z是輪次R的自祖先開始唯一見證人,X是Z的祖先,但不是Z的父事件(在X之前的都是祖先,在X上一代的是父事件),最后,回傳所有已有接收倫次但不著名的事件,按接收倫次排序,然后按共識時間戳排序,然后按白簽名排序,
4.1.5 JavaDemo測驗
區塊鏈網路結構

HelloDemo

謠言演算法
Hashgraph


GameDemo


HashgraphDemo

CryptocurrencyDemo

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/236654.html
標籤:區塊鏈
下一篇:Java中高級核心知識全面決議——HTTPS中的TLS(從密碼學的角度理解 HTTPS【TLS 作業流程、公鑰密碼】、TLS 總結)
