亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        區(qū)塊鏈實(shí)用拜占庭容錯(cuò)共識(shí)算法的改進(jìn)

        2019-09-04 10:14:27甘俊李強(qiáng)陳子豪張超
        計(jì)算機(jī)應(yīng)用 2019年7期

        甘俊 李強(qiáng) 陳子豪 張超

        摘 要:針對(duì)應(yīng)用于聯(lián)盟鏈的實(shí)用拜占庭容錯(cuò)(PBFT)共識(shí)算法網(wǎng)絡(luò)結(jié)構(gòu)靜態(tài)、主節(jié)點(diǎn)選取隨意和通信開銷較大的問題,提出了一種改進(jìn)的實(shí)用拜占庭容錯(cuò)(EPBFT)共識(shí)算法。首先,給共識(shí)節(jié)點(diǎn)設(shè)置一系列活動(dòng)狀態(tài)使得節(jié)點(diǎn)通過狀態(tài)轉(zhuǎn)換在系統(tǒng)中擁有完整生命周期,由此節(jié)點(diǎn)可以動(dòng)態(tài)地加入和退出,系統(tǒng)擁有動(dòng)態(tài)的網(wǎng)絡(luò)結(jié)構(gòu)。其次,對(duì)PBFT的主節(jié)點(diǎn)選取方式加以改進(jìn),增加以最長(zhǎng)鏈為選舉原則的主節(jié)點(diǎn)選舉過程。在主節(jié)點(diǎn)選舉完成之后,通過數(shù)據(jù)同步和主節(jié)點(diǎn)驗(yàn)證過程進(jìn)一步保證主節(jié)點(diǎn)的可信性。最后,優(yōu)化PBFT算法的共識(shí)流程以提高共識(shí)效率,使得EPBFT算法的通信開銷在視圖變更較少發(fā)生的情況下降低為PBFT算法的1/2。實(shí)驗(yàn)結(jié)果表明,EPBFT算法具有較好的有效性和實(shí)用性。

        關(guān)鍵詞:實(shí)用拜占庭容錯(cuò);聯(lián)盟鏈;主節(jié)點(diǎn);選舉

        Abstract: Since Practical Byzantine Fault Tolerance (PBFT) consensus algorithm applied to the alliance chain has the problems of static network structure, random selection of master node and large communication overhead, an Evolution of Practical Byzantine Fault Tolerance (EPBFT) consensus algorithm was proposed. Firstly, a series of activity states were set for consensus nodes, making the nodes have complete life cycle in the system through state transition, so that the nodes were able to dynamically join and exit while the system has a dynamic network structure. Secondly, the selection method of master node of PBFT was improved with adding the election process of master node with the longest chain as the election principle. After the election of master node, the reliability of master node was further ensured through data synchronization and master node verification process. Finally, the consensus process of PBFT algorithm was optimized to improve the consensus efficiency, thus the communication overhead of EPBFT algorithm was reduced to 1/2 of that of PBFT algorithm with little view changes. The experimental results show that EPBFT algorithm has good effectiveness and practicability.

        Key words: Practical Byzantine Fault Tolerance (PBFT); alliance chain; master node; election

        0 引言

        區(qū)塊鏈?zhǔn)且环N新型的去中心化協(xié)議,它通過將數(shù)字加密[1]、共識(shí)算法、分布式存儲(chǔ)、時(shí)間戳[2]等技術(shù)結(jié)合構(gòu)建去中心化的分布式系統(tǒng),其中共識(shí)算法的作用是為了解決拜占庭將軍[3]問題。拜占庭將軍問題抽象于現(xiàn)實(shí)世界,在點(diǎn)對(duì)點(diǎn)(Peer to Peer, P2P)網(wǎng)絡(luò)[4]中,可能出現(xiàn)硬件故障、網(wǎng)絡(luò)擁堵甚至惡意攻擊等不可預(yù)知的問題。另外系統(tǒng)在任意時(shí)刻可能存在多個(gè)提案,因?yàn)樘岚傅某杀竞艿?。共識(shí)算法除了要處理這些失效之外,還要完成提案的最終一致性,在區(qū)塊鏈中有著非常重要的作用。

        關(guān)于共識(shí)算法的研究很早便已經(jīng)開始,最早由Pease等[5]和Lamport等[6]在20世紀(jì)80年代通過拜占庭將軍問題進(jìn)行描述和分析,提出了著名的拜占庭容錯(cuò)(Byzantine Fault Tolerance, BFT)算法。不同于比特幣系統(tǒng)“挖礦”的工作量證明(Proof of Work, PoW)[7]系列共識(shí)算法(達(dá)成共識(shí)的概率上的最終一致),BFT類協(xié)議依靠節(jié)點(diǎn)之間相互傳遞消息對(duì)提案達(dá)成確定性共識(shí)結(jié)果;然而也是由于這些特性造成節(jié)點(diǎn)間需要兩兩之間遞歸傳遞指數(shù)級(jí)復(fù)雜度的消息,不太具有可實(shí)際操作性,而且節(jié)點(diǎn)的加入和退出過程需要進(jìn)行特別處理。這些研究起初常被人們忽視。直到區(qū)塊鏈技術(shù)和比特幣的出現(xiàn),BFT算法重新引起關(guān)注,因?yàn)檫@一算法雖然存在很多缺點(diǎn),但它為解決拜占庭問題提供了一種不同于PoW那樣的需要耗費(fèi)巨大算力新思路,為以后的實(shí)用拜占庭容錯(cuò)(Practical Byzantine Fault Tolerance, PBFT)算法的出現(xiàn)作出了準(zhǔn)備。

        在1999年,Castro等[8]提出了實(shí)用拜占庭容錯(cuò)(Practical Byzantine Fault Tolerance, PBFT)共識(shí)算法,改進(jìn)于BFT算法,繼承了它的優(yōu)點(diǎn),同時(shí)將算法復(fù)雜度由指數(shù)級(jí)降為多項(xiàng)式級(jí)。由此實(shí)用拜占庭容錯(cuò)算法在實(shí)際系統(tǒng)應(yīng)用中變得可行。PBFT算法是基于狀態(tài)機(jī)副本復(fù)制的算法,每個(gè)狀態(tài)機(jī)副本保存服務(wù)狀態(tài),實(shí)現(xiàn)客戶合法請(qǐng)求,除了交易之外,還可以完成其他類型的操作,應(yīng)用范圍廣泛。在系統(tǒng)中存在(n-1)/3的數(shù)量的錯(cuò)誤節(jié)點(diǎn)的情況下,仍可保證系統(tǒng)安全性和活性,正確地達(dá)成分布式共識(shí)。

        然而現(xiàn)有的PBFT算法還存在一些不足。首先,其網(wǎng)絡(luò)結(jié)構(gòu)是靜態(tài)類型,如果動(dòng)態(tài)增加節(jié)點(diǎn),必須重啟應(yīng)用,造成不必要的損失,影響系統(tǒng)可用性,尤其在某些行業(yè),經(jīng)常性的重啟系統(tǒng)是不能忍受的。PBFT算法中主節(jié)點(diǎn)的選舉方式是按編號(hào)依次輪流作主節(jié)點(diǎn),這種主節(jié)點(diǎn)的選舉方式較為隨意,在選舉成功主節(jié)點(diǎn)后也沒有對(duì)主節(jié)點(diǎn)的真?zhèn)涡赃M(jìn)行驗(yàn)證,使得選舉出來的主節(jié)點(diǎn)很有可能是惡意節(jié)點(diǎn),具有一定的安全隱患,盡管在后續(xù)的共識(shí)過程中主節(jié)點(diǎn)的惡意性有可能被從屬節(jié)點(diǎn)識(shí)破并通過視圖變更將其推翻,但是仍然會(huì)造成一定的損失,頻繁的視圖變更也會(huì)增加系統(tǒng)開銷,降低系統(tǒng)效率。三階段廣播過程,需要比較大的網(wǎng)絡(luò)傳輸和通信開銷,要進(jìn)一步優(yōu)化。在主節(jié)點(diǎn)選舉成功后也沒有完善的數(shù)據(jù)同步過程,在每一個(gè)視圖變更后,集群中的節(jié)點(diǎn)可能出現(xiàn)保存的副本數(shù)據(jù)有多有少的情況,因?yàn)橛捎诰W(wǎng)絡(luò)等原因會(huì)導(dǎo)致各個(gè)節(jié)點(diǎn)的進(jìn)度不一致,從而導(dǎo)致狀態(tài)不一致[9],所謂狀態(tài)一致,即是指交易編號(hào)、區(qū)塊高度、視圖號(hào)等信息都保持一致,所以在新的主節(jié)點(diǎn)選舉出來以后,需要進(jìn)行集群中節(jié)點(diǎn)的數(shù)據(jù)同步。

        本文針對(duì)現(xiàn)有的PBFT算法網(wǎng)絡(luò)結(jié)構(gòu)類型靜態(tài)、主節(jié)點(diǎn)選舉方式隨意、不能保證主節(jié)點(diǎn)可信性、網(wǎng)絡(luò)開銷比較大、缺少完善的數(shù)據(jù)同步過程等問題,提出一種改進(jìn)實(shí)用拜占庭容錯(cuò)(Evolution of Practical Byzantine Fault Tolerance, EPBFT)共識(shí)算法模型。參考原子消息廣播算法ZAB(ZooKeeper Atomic Broadcast)[10],針對(duì)PBFT算法特點(diǎn),將集群中的節(jié)點(diǎn)分為領(lǐng)導(dǎo)者與跟隨者兩種角色,依情況使節(jié)點(diǎn)處于不同的狀態(tài),同時(shí)依據(jù)節(jié)點(diǎn)狀態(tài)的不同決定節(jié)點(diǎn)是否能夠進(jìn)行共識(shí)過程,從而使得集群中可以動(dòng)態(tài)加入和退出節(jié)點(diǎn);設(shè)計(jì)一種新的選舉方式,在原有的PBFT算法基礎(chǔ)上改變主節(jié)點(diǎn)的選舉方式,不再按照編號(hào)選擇主節(jié)點(diǎn),而是選舉出擁有處理過最大視圖號(hào)以及最大編號(hào)的請(qǐng)求的節(jié)點(diǎn)作為主節(jié)點(diǎn),在數(shù)據(jù)同步階段,可以方便進(jìn)行數(shù)據(jù)同步;在主節(jié)點(diǎn)選舉完成之后增加一個(gè)數(shù)據(jù)同步及驗(yàn)證階段,在進(jìn)行數(shù)據(jù)同步的同時(shí)對(duì)所同步的數(shù)據(jù)進(jìn)行驗(yàn)證,若驗(yàn)證的數(shù)據(jù)通過,則可以確定新的主節(jié)點(diǎn)為可信節(jié)點(diǎn),正式承認(rèn)選舉出的新的主節(jié)點(diǎn),開始新一輪的共識(shí)過程。確認(rèn)階段是對(duì)準(zhǔn)備階段的再確認(rèn),防止視圖變更發(fā)生于準(zhǔn)備階段后產(chǎn)生的不一致。在聯(lián)盟鏈的環(huán)境中,節(jié)點(diǎn)有監(jiān)督,網(wǎng)絡(luò)較穩(wěn)定,視圖變更情況并不會(huì)頻繁發(fā)生,且在視圖變更后增加了數(shù)據(jù)同步及驗(yàn)證過程,保證了狀態(tài)一致性,所以可以省略三階段中的最后的確認(rèn)階段。本文貢獻(xiàn)如下:

        1)改進(jìn)PBFT算法中主節(jié)點(diǎn)選舉方式,改原來的依據(jù)節(jié)點(diǎn)編號(hào)選舉為擁有處理過最大視圖號(hào)以及最大編號(hào)的請(qǐng)求的節(jié)點(diǎn)選舉,也就是最長(zhǎng)鏈選舉。使得主節(jié)點(diǎn)的選舉方式更加合理,選舉出的主節(jié)點(diǎn)更加可信。

        2)增加數(shù)據(jù)同步及驗(yàn)證階段,在主節(jié)點(diǎn)選舉完成之后增加數(shù)據(jù)同步及驗(yàn)證階段,進(jìn)一步驗(yàn)證新主節(jié)點(diǎn)的可信性,在完成數(shù)據(jù)同步的同時(shí)完成對(duì)新選舉出的主節(jié)點(diǎn)的真?zhèn)涡赃M(jìn)行驗(yàn)證,若新的主節(jié)點(diǎn)可信,則開始新一輪的共識(shí);反之,重新進(jìn)行選舉過程。

        3)在前兩點(diǎn)基礎(chǔ)上省去原來的PBFT算法中的確認(rèn)階段,由此可以減少網(wǎng)絡(luò)和時(shí)間開銷,使算法更加高效。

        4)改進(jìn)原PBFT靜態(tài)結(jié)構(gòu)為動(dòng)態(tài)結(jié)構(gòu),設(shè)計(jì)一套節(jié)點(diǎn)加入和退出集群以及工作的完整周期,通過給節(jié)點(diǎn)賦予領(lǐng)導(dǎo)者與跟隨者兩種角色,以及不同狀態(tài),使得集群中節(jié)點(diǎn)可以動(dòng)態(tài)地加入和退出,無需重啟整個(gè)集群,提升整個(gè)集群的穩(wěn)定性和可用性。

        5)實(shí)現(xiàn)本文所寫的改進(jìn)的算法模型,并通過實(shí)驗(yàn)驗(yàn)證,新的改進(jìn)的PBFT算法模型在保證數(shù)據(jù)可信性和安全性的前提下,有效地降低了共識(shí)需要花費(fèi)的時(shí)延,提高了交易吞吐量。

        1 相關(guān)工作

        拜占庭容錯(cuò)算法的研究很早就已開始,但近年隨著區(qū)塊鏈技術(shù)的落地才在計(jì)算機(jī)領(lǐng)域流行起來。特別是由于PBFT的提出使得拜占庭容錯(cuò)算法擁有較高的效率和安全性,得以應(yīng)用于實(shí)際系統(tǒng)中實(shí)現(xiàn),針對(duì)PBFT算法的改進(jìn)研究明顯增多。對(duì)已有的BFT類共識(shí)進(jìn)行研究,按照改進(jìn)思路的不同分類,主要可以歸納為3大類方向[11-12]:1)針對(duì)非拜占庭錯(cuò)誤場(chǎng)景優(yōu)化;2)針對(duì)拜占庭錯(cuò)誤場(chǎng)景優(yōu)化;3)為公鏈應(yīng)用優(yōu)化。

        首先是針對(duì)假設(shè)系統(tǒng)無拜占庭節(jié)點(diǎn)的場(chǎng)景進(jìn)行優(yōu)化,即假設(shè)系統(tǒng)中基本不存在惡意節(jié)點(diǎn),允許節(jié)點(diǎn)存在宕機(jī)行為,在這種情況下對(duì)BFT算法進(jìn)行簡(jiǎn)化或優(yōu)化。最出名便是以Paxos[13]、Raft[14]為代表的傳統(tǒng)分布式一致性算法。Raft算法由Paxos算法簡(jiǎn)化而來,經(jīng)過改進(jìn)簡(jiǎn)化Raft算法易于實(shí)現(xiàn)。HQ(Hybrid Quorum)協(xié)議[15]參考并優(yōu)化了PBFT協(xié)議,針對(duì)無競(jìng)爭(zhēng)的情況簡(jiǎn)化通信。如果有競(jìng)爭(zhēng),性能也退化為和PBFT類似。應(yīng)用于ZooKeeper中的ZAB算法改進(jìn)自Paxos,共識(shí)過程簡(jiǎn)單有效,已被廣泛用于分布式協(xié)調(diào)一致性過程,擁有較高的吞吐量和較低的時(shí)延;但由于此類算法面向的是分布式系統(tǒng)數(shù)據(jù)庫(kù)和日志等存儲(chǔ)領(lǐng)域,不能解決拜占庭容錯(cuò)問題,所以不適合于區(qū)塊鏈環(huán)境。

        然后是針對(duì)拜占庭錯(cuò)誤場(chǎng)景進(jìn)行優(yōu)化,這類優(yōu)化基本在PBFT的基礎(chǔ)上進(jìn)行改進(jìn),由于要處理拜占庭錯(cuò)誤節(jié)點(diǎn),必然要增加相互之間確認(rèn)的通信,出現(xiàn)明顯的性能下降。Tangaroa算法[16]具有Raft簡(jiǎn)單易理解的優(yōu)點(diǎn),同時(shí)兼具拜占庭容錯(cuò)性。由Tangaroa演變出另一種稱為可擴(kuò)展拜占庭容錯(cuò)協(xié)議——ScalableBFT[17],能夠?qū)崿F(xiàn)比Tangaroa更好的性能。對(duì)PBFT改進(jìn)的系列算法多用于聯(lián)盟鏈中。

        在為公鏈應(yīng)用優(yōu)化方面,Tendermint[18]出現(xiàn)于加密貨幣之后,內(nèi)置了簡(jiǎn)單的數(shù)字貨幣,以此為基礎(chǔ)實(shí)現(xiàn)了股權(quán)證明(Proof of Stake, PoS)與PBFT的結(jié)合,節(jié)點(diǎn)需要繳納保證金,如果作惡保證金就會(huì)被沒收。相似地在2016年,小蟻提出的代理拜占庭容錯(cuò)(delegated Byzantine Fault Tolerant, dBFT)算法,該算法同樣在PBFT的基礎(chǔ)上借鑒了PoS算法,共識(shí)節(jié)點(diǎn)按照節(jié)點(diǎn)的權(quán)益來選出,該算法一定程度改進(jìn)了PoS缺乏最終一致性的問題,使其能夠更適合金融場(chǎng)景;但這一方式也受到共識(shí)節(jié)點(diǎn)數(shù)量有限、中心化程度高的質(zhì)疑。2016年,Micali等[19]提出了一種快速拜占庭容錯(cuò)共識(shí)算法——AlgoRand,在該算法中,共識(shí)的驗(yàn)證者和領(lǐng)導(dǎo)者通過密碼抽簽技術(shù)選出,同時(shí)還構(gòu)想出一個(gè)新協(xié)議完成區(qū)塊的共識(shí)。

        此外,以比特幣為應(yīng)用的PoW算法不能適應(yīng)一般應(yīng)用的高吞吐量和及時(shí)處理的需要。為應(yīng)對(duì)PoW要求的高算力帶來的巨大的資源浪費(fèi)問題,提出權(quán)益證明為代表的共識(shí)算法PoS[20],集群由可信度較高的節(jié)點(diǎn)組成,共識(shí)節(jié)點(diǎn)的選取標(biāo)準(zhǔn)依情況而定,但都是為了最大限度保證節(jié)點(diǎn)的可信度,但可能導(dǎo)致權(quán)益集中的問題,對(duì)交易吞吐量、延遲、區(qū)塊大小等方面也較少關(guān)注。

        可以看出,出現(xiàn)了較多PoW系列算法與PBFT結(jié)合的方式提高共識(shí)節(jié)點(diǎn)可信度,但是通過授權(quán)投票產(chǎn)生“超級(jí)節(jié)點(diǎn)”的方式會(huì)加大系統(tǒng)中心化程度,這顯然和區(qū)塊鏈初衷是相違背的。另外以Paxos、Raft為代表的傳統(tǒng)分布式一致性算法無法應(yīng)對(duì)拜占庭容錯(cuò)問題,但由于其共識(shí)效率高的特點(diǎn),越來越多地被拿來與PBFT相結(jié)合,這給共識(shí)算法改進(jìn)帶來新的啟發(fā)。本文提出的改進(jìn)算法同樣是基于聯(lián)盟鏈的前提下,具體的共識(shí)節(jié)點(diǎn)的選取可以依照不同的應(yīng)用場(chǎng)景而定。共識(shí)節(jié)點(diǎn)的準(zhǔn)入設(shè)置一定程度保證了可信度,同時(shí)增加的對(duì)主節(jié)點(diǎn)的選舉和驗(yàn)證過程在不提高系統(tǒng)中心化程度的基礎(chǔ)上保證主節(jié)點(diǎn)的可信度,同時(shí)也保證了共識(shí)速度不受影響。賦予節(jié)點(diǎn)生命周期使節(jié)點(diǎn)能動(dòng)態(tài)加入和退出,改進(jìn)三階段廣播流程,縮短交易確認(rèn)時(shí)延,提高了區(qū)塊吞吐量。

        2 PBFT算法分析

        2.1 BFT算法及流程

        正PBFT是一種狀態(tài)機(jī)副本復(fù)制算法,也就是將服務(wù)作為狀態(tài)機(jī)來建模,在分布式系統(tǒng)中,狀態(tài)機(jī)在不同的節(jié)點(diǎn)復(fù)制副本,所以,最初PBFT算法是用在分布式系統(tǒng)領(lǐng)域,并不是用在區(qū)塊鏈領(lǐng)域的。在PBFT算法中,一個(gè)主節(jié)點(diǎn)領(lǐng)導(dǎo)的共識(shí)過程處于一個(gè)視圖v之中,視圖是連續(xù)編號(hào)的整數(shù),在各個(gè)視圖之中,都存在三種角色,分別是客戶端、主節(jié)點(diǎn)、從節(jié)點(diǎn)。主節(jié)點(diǎn)和從節(jié)點(diǎn)都是備份節(jié)點(diǎn),因?yàn)樗鼈兌歼M(jìn)行數(shù)據(jù)備份,它們各自的功能如下。

        1)客戶端??蛻舳薱是請(qǐng)求的發(fā)送方,發(fā)送的請(qǐng)求格式為〈REQUEST,o,t,c〉,其中o是請(qǐng)求執(zhí)行的操作,t是時(shí)間戳,用來保證請(qǐng)求的唯一性,只會(huì)被執(zhí)行一次,同時(shí)還使得客戶端發(fā)送的請(qǐng)求是全排序的,后發(fā)送的請(qǐng)求的時(shí)間戳一定比之前發(fā)送的請(qǐng)求的時(shí)間戳更高。

        2)主節(jié)點(diǎn)。主節(jié)點(diǎn)主要負(fù)責(zé)接收客戶端發(fā)來的請(qǐng)求,同時(shí)對(duì)這些請(qǐng)求進(jìn)行排序,分配編號(hào),再向集群中的從節(jié)點(diǎn)廣播請(qǐng)求。

        3)從節(jié)點(diǎn)。從節(jié)點(diǎn)主要負(fù)責(zé)接送收此處是否應(yīng)為接收主節(jié)點(diǎn)和其他從節(jié)點(diǎn)發(fā)來的消息,進(jìn)行相應(yīng)的驗(yàn)證,只會(huì)之后是否應(yīng)為之后再執(zhí)行對(duì)應(yīng)的操作,最后將共識(shí)結(jié)果發(fā)回客戶端。

        所有節(jié)點(diǎn)組成的集合用大寫字母R表示,那么集合中的每一個(gè)副本可以用0到|R|-1的整數(shù)表示,集合的理想節(jié)點(diǎn)數(shù)為:

        其中: f是失效節(jié)點(diǎn)的最大個(gè)數(shù);|R|是節(jié)點(diǎn)數(shù),雖然可以部署多于此數(shù)的節(jié)點(diǎn),但是這樣只會(huì)降低系統(tǒng)性能,并不能對(duì)共識(shí)過程有幫助。

        主節(jié)點(diǎn)的選取由如下公式確定:

        其中:p是副本編號(hào),v是視圖號(hào),當(dāng)主節(jié)點(diǎn)失效或者被從節(jié)點(diǎn)推翻時(shí),啟動(dòng)視圖變更,依照此公式選取新的主節(jié)點(diǎn)。

        接下來介紹PBFT算法的流程,總共包括五個(gè)階段,分別是請(qǐng)求、預(yù)準(zhǔn)備、準(zhǔn)備、確認(rèn)、回復(fù)。其中主要的階段是中間三個(gè),即預(yù)準(zhǔn)備、準(zhǔn)備、確認(rèn)。下面介紹這五個(gè)階段:

        1)請(qǐng)求階段。當(dāng)客戶端c向主節(jié)點(diǎn)p發(fā)送請(qǐng)求消息m。

        2)預(yù)準(zhǔn)備階段。主節(jié)點(diǎn)P接收到客戶端c發(fā)來的請(qǐng)求m時(shí),主節(jié)點(diǎn)為消息m分配一個(gè)編號(hào)n,然后向所有的從節(jié)點(diǎn)廣播預(yù)準(zhǔn)備消息,預(yù)準(zhǔn)備消息的格式為〈〈PRE-PREPARE,v,n,d〉,m〉,其中,v是視圖編號(hào),d是請(qǐng)求消息m的摘要。

        3)準(zhǔn)備階段。節(jié)點(diǎn)在接收到預(yù)準(zhǔn)備消息時(shí)會(huì)對(duì)其進(jìn)行檢驗(yàn),如果同意預(yù)準(zhǔn)備消息,則進(jìn)入準(zhǔn)備階段;如果不同意,則什么也不做。節(jié)點(diǎn)在進(jìn)入準(zhǔn)備階段后向除自己以外的其他節(jié)點(diǎn)廣播準(zhǔn)備消息,同時(shí)將預(yù)準(zhǔn)備和準(zhǔn)備消息寫入消息日志。準(zhǔn)備消息格式為〈PREPARE,v,n,d,i〉,其中i是節(jié)點(diǎn)自身編號(hào)。準(zhǔn)備階段完成的標(biāo)志為收到2f+1個(gè)從不同副本節(jié)點(diǎn)收到的與預(yù)準(zhǔn)備消息一致的準(zhǔn)備消息。對(duì)副本節(jié)點(diǎn)驗(yàn)證預(yù)準(zhǔn)備和準(zhǔn)備消息主要檢查有:視圖編號(hào)v、消息序號(hào)n和摘要d,以及水線,水線作用是防止一個(gè)失效節(jié)點(diǎn)使用一個(gè)很大的序號(hào)消耗序號(hào)空間。

        4)確認(rèn)階段。當(dāng)節(jié)點(diǎn)完成準(zhǔn)備階段后,進(jìn)入確認(rèn)階段,此時(shí)節(jié)點(diǎn)向除自己以外的所有節(jié)點(diǎn)發(fā)送確認(rèn)消息,確認(rèn)消息格式為〈COMMIT,v,n,D(m),i〉,每個(gè)節(jié)點(diǎn)接收確認(rèn)消息進(jìn)行的檢查有:簽名正確,消息的視圖號(hào)與當(dāng)前視圖號(hào)相同,消息的序號(hào)滿足水線的條件。定義確認(rèn)階段完成的條件為節(jié)點(diǎn)i已經(jīng)接收了包括自身在內(nèi)2f+1個(gè)確認(rèn)消息且與預(yù)準(zhǔn)備消息一致。

        5)回復(fù)階段。當(dāng)節(jié)點(diǎn)完成確認(rèn)階段后,向客戶端發(fā)送回復(fù)消息〈REPLY,v,t,c,i,r〉,其中r是請(qǐng)求最后的執(zhí)行結(jié)果??蛻舳酥挥惺盏絝+1個(gè)不同節(jié)點(diǎn)發(fā)來的同樣響應(yīng)時(shí)才認(rèn)為請(qǐng)求正確執(zhí)行成功。

        PBFT完整流程如圖1所示。

        2.2 PBFT算法不足點(diǎn)分析

        從對(duì)PBFT流程的詳細(xì)分析可以看出,現(xiàn)有的PBFT算法具有以下幾點(diǎn)不足。

        1)客戶端只能向主節(jié)點(diǎn)發(fā)送請(qǐng)求,若請(qǐng)求消息過多,可能造成主節(jié)點(diǎn)過載,可用性降低,不適合區(qū)塊鏈的P2P網(wǎng)絡(luò)環(huán)境。

        2)主節(jié)點(diǎn)選取方式較為隨意,不保證主節(jié)點(diǎn)正確性,若出現(xiàn)連續(xù)選舉出的主節(jié)點(diǎn)為惡意節(jié)點(diǎn),則將極大浪費(fèi)系統(tǒng)資源,降低系統(tǒng)可靠性和安全性;沒有較為完善的備份數(shù)據(jù)的同步過程,隨著時(shí)間的推移,不同節(jié)點(diǎn)之間的數(shù)據(jù)差異越來越大。

        3)沒有靈活的共識(shí)節(jié)點(diǎn)加入和退出機(jī)制,使得節(jié)點(diǎn)在加入或退出集群時(shí)很不靈活,特別是在集群中節(jié)點(diǎn)較多或者節(jié)點(diǎn)變更比較頻繁的情況下,系統(tǒng)將更加難以應(yīng)對(duì),大幅度降低了系統(tǒng)可用性。

        4)三階段廣播,包括一次單節(jié)點(diǎn)廣播,加兩次全節(jié)點(diǎn)全網(wǎng)廣播,特別是后兩次全節(jié)點(diǎn)廣播,非常消耗網(wǎng)絡(luò)帶寬,在區(qū)塊鏈這樣的P2P環(huán)境下,若請(qǐng)求過頻,容易造成網(wǎng)絡(luò)擁堵。假設(shè)全網(wǎng)節(jié)點(diǎn)數(shù)為N,則完成一次三階段共識(shí)過程,總共需要進(jìn)行消息傳遞的次數(shù)Z為:

        顯然,當(dāng)集群中節(jié)點(diǎn)較多時(shí),消息傳遞次數(shù)將急劇增加。

        3 EPBFT算法設(shè)計(jì)與實(shí)現(xiàn)

        3.1 整體思想

        經(jīng)典的PBFT算法基于狀態(tài)機(jī)復(fù)制原理,最初用于分布式文件系統(tǒng)協(xié)調(diào)一致,除了關(guān)注解決拜占庭容錯(cuò)問題之外,還著重解決所有副本節(jié)點(diǎn)在全局都執(zhí)行相同順序的請(qǐng)求操作序列,所以在將PBFT算法應(yīng)用于區(qū)塊鏈系統(tǒng)中時(shí)有諸多地方需要改進(jìn)以適應(yīng)區(qū)塊鏈系統(tǒng)。在聯(lián)盟鏈系統(tǒng)中節(jié)點(diǎn)的進(jìn)入經(jīng)歷了相應(yīng)的身份認(rèn)證機(jī)制,如基于第三方的身份認(rèn)證、純分布式的身份認(rèn)證等結(jié)合密碼學(xué)技術(shù)可以有效防止女巫攻擊問題。根據(jù)第2章對(duì)PBFT算法的分析,結(jié)合區(qū)塊鏈系統(tǒng)實(shí)際應(yīng)用情況,提出以下幾點(diǎn)主要改進(jìn)方案:

        1)改變客戶端單點(diǎn)提交請(qǐng)求到主節(jié)點(diǎn)方案,而是向全網(wǎng)廣播附上簽名的交易數(shù)據(jù)。這樣的方式更適合P2P環(huán)境。

        2)增加主節(jié)點(diǎn)選舉過程,在主節(jié)點(diǎn)宕機(jī)或者被從節(jié)點(diǎn)“推翻之后”,進(jìn)行主節(jié)點(diǎn)選舉,選舉標(biāo)準(zhǔn)按照最長(zhǎng)鏈原則,選取擁有處理過最大視圖號(hào)與最大編號(hào)請(qǐng)求的節(jié)點(diǎn)為新的主節(jié)點(diǎn)。

        3)增加數(shù)據(jù)同步及驗(yàn)證過程,在主節(jié)點(diǎn)選舉完成后進(jìn)行數(shù)據(jù)同步,同步時(shí)從節(jié)點(diǎn)對(duì)同步數(shù)據(jù)進(jìn)行驗(yàn)證,若驗(yàn)證通過,才正式承認(rèn)新的主節(jié)點(diǎn),開始下一輪共識(shí)過程。

        4)通過給節(jié)點(diǎn)設(shè)置一系列狀態(tài),在不同的狀態(tài)節(jié)點(diǎn)擁有不同的行為,共識(shí)節(jié)點(diǎn)通過在不同狀態(tài)之間的轉(zhuǎn)換從而在集群中擁有完整生命周期,從節(jié)點(diǎn)與主節(jié)點(diǎn)通過心跳保持聯(lián)系,從而使集群中的節(jié)點(diǎn)可以動(dòng)態(tài)地加入和退出,使得在節(jié)點(diǎn)變動(dòng)時(shí)不必重啟系統(tǒng),增加系統(tǒng)可用性。節(jié)點(diǎn)的狀態(tài)轉(zhuǎn)換過程如圖2所示。

        5)去掉三階段中的確認(rèn)階段,PBFT的確認(rèn)階段作用是確保其他節(jié)點(diǎn)都已經(jīng)收到足夠多的信息來達(dá)成共識(shí)。這一階段發(fā)送的COMMIT消息沒有同意或者不同意的信息,只是起一個(gè)統(tǒng)計(jì)票數(shù)的作用,在PBFT三階段共識(shí)過程中那些處于預(yù)準(zhǔn)備和準(zhǔn)備階段的消息在視圖變更發(fā)生后將被丟棄。一個(gè)消息完成了確認(rèn)階段說明已經(jīng)有足夠多的節(jié)點(diǎn)都完成了準(zhǔn)備階段,因此確認(rèn)階段保證了PBFT在更換主節(jié)點(diǎn)后減少數(shù)據(jù)同步操作直接可以進(jìn)入下一個(gè)視圖狀態(tài)執(zhí)行新的共識(shí)過程(這并不能完全消除不一致,因?yàn)镃OMMIT消息同樣可能延遲甚至丟失)。PBFT算法是解決傳統(tǒng)分布式系統(tǒng)容錯(cuò),確認(rèn)階段其實(shí)是對(duì)準(zhǔn)備階段的一種“確認(rèn)”。當(dāng)消息完成準(zhǔn)備階段之后即說明該消息已經(jīng)被合法數(shù)量的節(jié)點(diǎn)驗(yàn)證通過,即為系統(tǒng)所共識(shí),但是由于存在網(wǎng)絡(luò)延遲等不確定因素,可能存在某些節(jié)點(diǎn)不能同時(shí)完成準(zhǔn)備階段,如果在準(zhǔn)備階段之后發(fā)生視圖變更,將會(huì)導(dǎo)致不一致性。在聯(lián)盟鏈區(qū)塊鏈環(huán)境,需要保證的是節(jié)點(diǎn)具有相同的初始狀態(tài),也就是具有相同區(qū)塊高度和視圖號(hào),這兩者可以通過區(qū)塊同步和視圖變更保證。另外在聯(lián)盟式區(qū)塊鏈在有監(jiān)督且較穩(wěn)定的環(huán)境中,視圖變更不會(huì)也不應(yīng)是常態(tài),為確認(rèn)階段所花費(fèi)的數(shù)據(jù)傳輸開銷應(yīng)該設(shè)法避免。

        在省略確認(rèn)階段的情況下,消息在完成準(zhǔn)備階段后提交,需要保證在準(zhǔn)備階段之后發(fā)生視圖變更后系統(tǒng)的一致性。本文設(shè)計(jì)利用視圖變更過程來保證一致性,在視圖變更時(shí)加入了選舉過程與同步驗(yàn)證過程。選舉過程的作用是選出系統(tǒng)共識(shí)節(jié)點(diǎn)中區(qū)塊鏈結(jié)構(gòu)最長(zhǎng)的節(jié)點(diǎn)作為待定主節(jié)點(diǎn),待定主節(jié)點(diǎn)選舉出來后進(jìn)行同步驗(yàn)證過程,以此消除由于網(wǎng)絡(luò)原因造成的狀態(tài)不一致性。另外待定主節(jié)點(diǎn)在同步過程中可能同步非法區(qū)塊,而利用區(qū)塊鏈的特性可以容易地檢驗(yàn)區(qū)塊合法性,所以設(shè)計(jì)出同步驗(yàn)證過程,監(jiān)督待定主節(jié)點(diǎn)在同步過程中行為的合法性。如果待定主節(jié)點(diǎn)在同步過程中出現(xiàn)惡意行為,那么將再次選舉新的待定主節(jié)點(diǎn)。基于以上分析,EPBFT所設(shè)計(jì)的改進(jìn)的共識(shí)流程可以在不影響系統(tǒng)容錯(cuò)性的情況下降低共識(shí)過程的數(shù)據(jù)傳輸量與通信開銷,提升了共識(shí)效率。具體情況下的通信開銷在實(shí)驗(yàn)部分論述。一般情況下假設(shè)全網(wǎng)節(jié)點(diǎn)數(shù)為N,此時(shí)完成一次共識(shí)過程需要進(jìn)行的消息傳遞次數(shù)Z為:

        當(dāng)節(jié)點(diǎn)數(shù)較多時(shí),可以節(jié)省對(duì)網(wǎng)絡(luò)帶寬的消耗,縮短共識(shí)過程。

        3.2 算法設(shè)計(jì)

        3.2.1 算法符號(hào)表示

        1)集群中節(jié)點(diǎn)分為兩種,一種是主節(jié)點(diǎn)(master),一種是從節(jié)點(diǎn)(slave),所有節(jié)點(diǎn)集合用集合R表示,兩種節(jié)點(diǎn)都稱為備份節(jié)點(diǎn),用編號(hào){0,1,…,i,…,|R|-1i的前后兩邊都有點(diǎn)號(hào),書寫正確嗎?請(qǐng)明確?;貜?fù):點(diǎn)號(hào)表示省略了編號(hào)從1到i和i到R-1的其他節(jié)點(diǎn)編號(hào)}表示。

        2)令集合R中最大能容忍的惡意節(jié)點(diǎn)數(shù)為f,則集合R大小必須滿足公式:

        R≥3f+1(5)

        一般情況下,集合數(shù)取3f+1,因?yàn)楦嗟墓沧R(shí)節(jié)點(diǎn)不會(huì)對(duì)共識(shí)過程有幫助,反而會(huì)降低整體性能。

        3)集合中節(jié)點(diǎn)具有四種狀態(tài),分別命名為:尋找(searching)、待領(lǐng)導(dǎo)(undetermined)、領(lǐng)導(dǎo)(mastering)、服從(slaving)。

        4)視圖編號(hào)用整數(shù)v表示,請(qǐng)求編號(hào)用整數(shù)n表示,視圖變更或遇到新請(qǐng)求時(shí),v和n加1。在一個(gè)視圖中,n必須在水線之間:

        H≥n≥h(6)

        5)兩階段分別命名為快提案階段(fast-proposal)和快確認(rèn)階段(fast-confirm)。

        3.2.2 算法流程

        初始化系統(tǒng)時(shí),先經(jīng)過主節(jié)點(diǎn)選舉過程選舉出主節(jié)點(diǎn),接下來進(jìn)行數(shù)據(jù)備份與驗(yàn)證階段,因?yàn)樵谌ブ行幕膮^(qū)塊鏈共識(shí)系統(tǒng)中,如果要達(dá)到共識(shí)的目的,各共識(shí)節(jié)點(diǎn)需要開始于相同的狀態(tài)。所謂達(dá)到相同的狀態(tài)就是各個(gè)備份節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)一致,視圖號(hào)和請(qǐng)求編號(hào)即區(qū)塊高度、上一塊區(qū)塊哈希值等信息一致。完成數(shù)據(jù)備份與驗(yàn)證階段后,系統(tǒng)開始預(yù)準(zhǔn)備和準(zhǔn)備兩階段共識(shí)過程。在消息傳遞過程中,使用密碼學(xué)技術(shù)保證消息的完整性和真實(shí)性,定義Si為消息簽名,Di為消息摘要。

        具體的算法流程如下:

        若系統(tǒng)有主節(jié)點(diǎn),直接從第三步開始進(jìn)行。直接進(jìn)入快提案階段。此處指代不明確,指哪一步?請(qǐng)調(diào)整語句當(dāng)系統(tǒng)沒有主節(jié)點(diǎn)時(shí),進(jìn)行主節(jié)點(diǎn)選舉過程,所有節(jié)點(diǎn)處于searching狀態(tài),先經(jīng)過主節(jié)點(diǎn)選舉過程選舉出主節(jié)點(diǎn),此時(shí)當(dāng)選的節(jié)點(diǎn)變?yōu)閡ndetermined狀態(tài)。

        接著進(jìn)行數(shù)據(jù)備份與驗(yàn)證階段,各個(gè)從節(jié)點(diǎn)需要從擁有最長(zhǎng)鏈的待定主節(jié)點(diǎn)處備份數(shù)據(jù),從節(jié)點(diǎn)在得到備份數(shù)據(jù)后需要對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,驗(yàn)證通過后保存。只有超過2f+1的從節(jié)點(diǎn)驗(yàn)證通過,才算是正式承認(rèn)主節(jié)點(diǎn),主節(jié)點(diǎn)從undetermined狀態(tài)轉(zhuǎn)變?yōu)閙astering狀態(tài),其余節(jié)點(diǎn)從searching狀態(tài)轉(zhuǎn)變?yōu)閟laving狀態(tài),成為從節(jié)點(diǎn),視圖號(hào)v加1。若主節(jié)點(diǎn)備份數(shù)據(jù)驗(yàn)證失敗,說明待定主節(jié)點(diǎn)不可信,將該節(jié)點(diǎn)排除出系統(tǒng),重新選舉主節(jié)點(diǎn)。

        交易發(fā)起者c向集群中節(jié)點(diǎn)發(fā)送一個(gè)已簽名交易,若接收節(jié)點(diǎn)向全網(wǎng)廣播交易,各共識(shí)節(jié)點(diǎn)(包括主節(jié)點(diǎn))收到交易后驗(yàn)證交易的合法性,若合法,則緩存起來。主節(jié)點(diǎn)待收到足夠的交易或者到一段時(shí)間間隔以后,生成一個(gè)區(qū)塊。

        快提案階段 主節(jié)點(diǎn)為產(chǎn)生的區(qū)塊生成快提案消息,分配一個(gè)編號(hào)n,然后向所有的從節(jié)點(diǎn)廣播快提案消息,快提案消息的格式為〈〈FAST-PROPOSAL,v,n,Si,Di〉,block〉,其中:v是視圖編號(hào),block是需要共識(shí)的區(qū)塊。從節(jié)點(diǎn)i∈{0,1,…,|R|-1}在接收到快提案消息是會(huì)對(duì)其進(jìn)行檢驗(yàn),如果同意快提案消息,則進(jìn)入快確認(rèn)階段,如果不同意,則對(duì)主節(jié)點(diǎn)表示懷疑,廣播視圖變更消息。副本節(jié)點(diǎn)驗(yàn)證快提案消息主要檢查有:視圖編號(hào)v、消息序號(hào)n、簽名和摘要、水線、區(qū)塊交易驗(yàn)證。

        快確認(rèn)階段 節(jié)點(diǎn)在進(jìn)入快確認(rèn)階段后向除自己以外的其他節(jié)點(diǎn)廣播快確認(rèn)消息,同時(shí)將快提案和快確認(rèn)消息寫入消息日志??齑_認(rèn)消息格式為〈FAST-CONFIRM,v,n,Si,Di,i〉,其中i是節(jié)點(diǎn)自身編號(hào)??齑_認(rèn)階段完成的標(biāo)志為收到2f+1個(gè)從其他不同副本節(jié)點(diǎn)收到的與快提案消息一致的快確認(rèn)消息,若到時(shí)間超時(shí)為止未收到足夠快確認(rèn)消息,將區(qū)塊丟棄。副本節(jié)點(diǎn)驗(yàn)證快確認(rèn)消息主要檢查有:視圖編號(hào)v、消息序號(hào)n、簽名和摘要以及水線。

        當(dāng)共識(shí)節(jié)點(diǎn)完成快確認(rèn)階段后,提交請(qǐng)求,保存區(qū)塊,表明該區(qū)塊加入?yún)^(qū)塊鏈尾部。

        算法主要流程如圖3所示。

        3.2.3 主節(jié)點(diǎn)選舉

        主節(jié)點(diǎn)選舉依據(jù)最長(zhǎng)鏈原則,選出集群服務(wù)器中最后一個(gè)共識(shí)完成的擁有最大視圖號(hào)的編號(hào)最大的服務(wù)器作為主節(jié)點(diǎn)。視圖號(hào)與編號(hào)合起來用一個(gè)long型數(shù)據(jù)存儲(chǔ),分別占據(jù)高32位和低32位,用vnid(view-number id)表示選舉過程主要分為以下幾種情況(圖34~5此處指代圖4、5吧?請(qǐng)明確括號(hào)中三個(gè)數(shù)依次為:節(jié)點(diǎn)編號(hào),目標(biāo)節(jié)點(diǎn)編號(hào),目標(biāo)vnid)。

        1)集群初始化主節(jié)點(diǎn)選舉。

        各服務(wù)器初始化后,各共識(shí)節(jié)點(diǎn)都處于searching狀態(tài),都投票給自己,并將自己的一票存入自己的票箱,服務(wù)器收到所有外部投票后,進(jìn)行選票PK,相應(yīng)更新自己的選票并廣播出去,并將合適的選票存入自己的票箱。選票PK有三種情況,分別是:

        a)若收到的選票中最大vnid小于自己當(dāng)前主張的vnid,忽略。

        b)若收到的選票中最大vnid等于自己當(dāng)前主張的vnid,若此時(shí)節(jié)點(diǎn)編號(hào)也相同,將選票存入自己的票箱。否則比較節(jié)點(diǎn)編號(hào),若當(dāng)前主張節(jié)點(diǎn)編號(hào)較高,忽略消息;否則清空票箱,相應(yīng)更新自己的選票存入票箱并廣播出去。

        c)若收到的選票中最大vnid大于自己當(dāng)前主張的vnid,清空票箱,更新當(dāng)前主張的vnid,相應(yīng)更新自己的選票存入票箱并廣播出去。

        當(dāng)票箱中有來自不同節(jié)點(diǎn)的2f+1個(gè)目標(biāo)一致的選票時(shí),選舉完成,清空票箱,向其目標(biāo)主節(jié)點(diǎn)發(fā)送確認(rèn)消息。被其他節(jié)點(diǎn)認(rèn)同且收到至少2f+1個(gè)來自不同節(jié)點(diǎn)的確認(rèn)消息的節(jié)點(diǎn)成為待定主節(jié)點(diǎn)的節(jié)點(diǎn)進(jìn)入undetermined狀態(tài)。選舉過程如圖4~5所示。

        2)slave進(jìn)入集群投票給自己。

        slave進(jìn)入集群,或者發(fā)生網(wǎng)絡(luò)分區(qū)后找不到master,會(huì)進(jìn)入searching狀態(tài)并發(fā)起新的一輪投票。集群中其他節(jié)點(diǎn)將告知其當(dāng)前主節(jié)點(diǎn)信息,收到超過來自不同節(jié)點(diǎn)的2f+1個(gè)節(jié)點(diǎn)一致信息后,該節(jié)點(diǎn)與當(dāng)前主節(jié)點(diǎn)建立心跳聯(lián)系,進(jìn)入slaving狀態(tài),成為從節(jié)點(diǎn)。如圖65所示。

        master宕機(jī)后,或者在被slave發(fā)起的視圖變更推翻后,將當(dāng)前master排除出集群,進(jìn)入searching狀態(tài)并發(fā)起新的一輪投票,并且都將票投給自己,投票過程與第一種情況相同,此處不再贅述。

        為節(jié)點(diǎn)定義一個(gè)完整的生命周期為選舉階段提供基礎(chǔ)的同時(shí),實(shí)現(xiàn)了集群中節(jié)點(diǎn)的動(dòng)態(tài)變更,極大地提高了系統(tǒng)靈活性和可用性。

        3.2.4 數(shù)據(jù)備份與驗(yàn)證

        當(dāng)選出待定主節(jié)點(diǎn)之后進(jìn)行的數(shù)據(jù)備份與驗(yàn)證階段,是為了使各節(jié)點(diǎn)狀態(tài)達(dá)到一致,這在前面已有解釋,同時(shí)還可以進(jìn)一步驗(yàn)證待定主節(jié)點(diǎn)是否為惡意節(jié)點(diǎn)。過程如下。

        數(shù)據(jù)同步階段 選舉過程完成后,從節(jié)點(diǎn)向待定主節(jié)點(diǎn)發(fā)送同步請(qǐng)求消息,消息格式為〈SYN-REQUEST,v,vnid,Si,此處有兩個(gè)逗號(hào),且均為下標(biāo),是否應(yīng)該為一個(gè)逗號(hào),且逗號(hào)不應(yīng)該為下標(biāo),請(qǐng)明確。后面仍有此類書寫,請(qǐng)一并核對(duì)。i〉,如前所述,v為視圖號(hào),vnid為各自提交的最大事務(wù)號(hào),待定主節(jié)點(diǎn)接收到該消息后首先檢查視圖號(hào)是否合法,若是則查看對(duì)比自己的末尾區(qū)塊編號(hào)與消息中的vnid是否一致,若一致直接發(fā)送同步成功消息〈SYN-SUCCESS,v,Si,i〉給該從節(jié)點(diǎn);否則根據(jù)其他節(jié)點(diǎn)所擁有的數(shù)據(jù)區(qū)塊的不同,向集群中其他節(jié)點(diǎn)分別發(fā)送同步消息和相應(yīng)的備份數(shù)據(jù)區(qū)塊,消息格式為〈〈SYN-DATA,v,Si,i〉,blocks〉,blocks為相應(yīng)的備份數(shù)據(jù)區(qū)塊。

        數(shù)據(jù)驗(yàn)證階段 其他的節(jié)點(diǎn)收到待定主節(jié)點(diǎn)的備份數(shù)據(jù)區(qū)塊后,驗(yàn)證其合法性。如果合法,則保存起來,廣播驗(yàn)證通過消息,消息格式為〈SYN-ACK,v,Si,i,d〉,d為收到的備份數(shù)據(jù)區(qū)塊中最后一個(gè)區(qū)塊的摘要;否則將其丟棄。同時(shí)保存收到的來自其他節(jié)點(diǎn)的驗(yàn)證結(jié)果消息。因?yàn)檫@一過程驗(yàn)證目標(biāo)明確,所以只需要一次消息廣播過程即可確定待定主節(jié)點(diǎn)的合法性。當(dāng)從節(jié)點(diǎn)收到來自其他不同節(jié)點(diǎn)的2f+1個(gè)通過消息且消息中d一致后,驗(yàn)證成功,這樣可以保證待定主節(jié)點(diǎn)發(fā)送給每個(gè)從節(jié)點(diǎn)的備份數(shù)據(jù)區(qū)塊都是一致的。此時(shí)從節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送〈SYN-ACHIEVE,v,Si,i〉消息。節(jié)點(diǎn)進(jìn)入slaving狀態(tài),成為從節(jié)點(diǎn);反之,認(rèn)為待定主節(jié)點(diǎn)是惡意節(jié)點(diǎn),排除該節(jié)點(diǎn),重新進(jìn)行選舉。

        驗(yàn)證確認(rèn)階段 當(dāng)待定主節(jié)點(diǎn)收到2f+1的同步完成消息后,表示有足夠的從節(jié)點(diǎn)正式同意自己,且系統(tǒng)中有足夠的共識(shí)節(jié)點(diǎn)。這時(shí)待定主節(jié)點(diǎn)進(jìn)入mastering狀態(tài),正式成為主節(jié)點(diǎn)。

        該過程如圖76所示。

        3.2.5 切換視圖

        在原算法的基礎(chǔ)上更進(jìn)一步,不止在主節(jié)點(diǎn)失效時(shí)觸發(fā)視圖變更,當(dāng)從節(jié)點(diǎn)懷疑主節(jié)點(diǎn)時(shí)同樣廣播視圖變更消息,從而可能觸發(fā)視圖變更,推翻主節(jié)點(diǎn)。具體流程如下:

        1)當(dāng)從節(jié)點(diǎn)發(fā)現(xiàn)主節(jié)點(diǎn)失效或者懷疑主節(jié)點(diǎn)是惡意節(jié)點(diǎn)時(shí),向集群中其他節(jié)點(diǎn)廣播視圖變更消息,前文已闡明懷疑過程,此處不再贅述。視圖變更消息格式為(VIEWCHANGE,vnew,vold,Si,i),vnew為新的視圖號(hào),vold為舊的視圖號(hào),i為節(jié)點(diǎn)編號(hào),vnew=vold+1。

        2)其他從節(jié)點(diǎn)在收到視圖變更消息后,驗(yàn)證消息中的vold是否與當(dāng)前一致,且vnew=vold+1,同時(shí)檢查主節(jié)點(diǎn)是否失效:若主節(jié)點(diǎn)未失效且不認(rèn)為主節(jié)點(diǎn)發(fā)來的提案有問題,則忽略該消息;若驗(yàn)證通過后,廣播視圖變更確認(rèn)消息,消息格式為(VIEWCHANGE-CONFIRM,vnew,vold,Si,i)。

        3)當(dāng)從節(jié)點(diǎn)收到2f+1個(gè)來自不同節(jié)點(diǎn)的視圖變更確認(rèn)消息后,切換為searching狀態(tài),進(jìn)入主節(jié)點(diǎn)選舉階段,開始重新選舉主節(jié)點(diǎn)。

        4 實(shí)驗(yàn)分析

        本章從通信開銷、時(shí)延、吞吐量和安全性方面對(duì)EPBFT進(jìn)行測(cè)試,同時(shí)與原來的PBFT算法進(jìn)行比較對(duì)照,以此驗(yàn)證改進(jìn)算法的有效性和可用性。實(shí)驗(yàn)網(wǎng)絡(luò)環(huán)境采用實(shí)驗(yàn)室局域網(wǎng)通信,使用6臺(tái)配置相同的Windows系統(tǒng)臺(tái)式機(jī)作為共識(shí)節(jié)點(diǎn)。

        4.1 系統(tǒng)設(shè)計(jì)

        為了測(cè)試改進(jìn)的算法的有效性和可用性,實(shí)現(xiàn)了以改進(jìn)算法為核心的區(qū)塊鏈系統(tǒng)。系統(tǒng)底層為一般區(qū)塊鏈技術(shù)架構(gòu),采用鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),使用P2P網(wǎng)絡(luò)架構(gòu),加密方法采用橢圓曲線非對(duì)稱加密,整個(gè)系統(tǒng)是去中心化的。整個(gè)系統(tǒng)分為數(shù)據(jù)上傳、選舉與同步、共識(shí)、數(shù)據(jù)存儲(chǔ)四三此處書寫有誤,“選舉與同步”模塊是“共識(shí)”模塊的子模塊,在共識(shí)模塊中已有說明。原文“整個(gè)系統(tǒng)分為:數(shù)據(jù)上傳,選舉與同步,共識(shí),數(shù)據(jù)存儲(chǔ)四個(gè)模塊?!毙薷臑椤罢麄€(gè)系統(tǒng)分為:數(shù)據(jù)上傳,共識(shí),數(shù)據(jù)存儲(chǔ)三個(gè)模塊?!眰€(gè)模塊。

        數(shù)據(jù)上傳模塊 此模塊負(fù)責(zé)產(chǎn)生模擬交易數(shù)據(jù),并持續(xù)向共識(shí)模塊傳遞交易數(shù)據(jù),這些交易將被存入?yún)^(qū)塊并被共識(shí)模塊共識(shí),以此測(cè)出時(shí)延和吞吐量等數(shù)據(jù)。

        共識(shí)模塊 此模塊將數(shù)據(jù)上傳模塊傳遞來的交易后,產(chǎn)生區(qū)塊進(jìn)行共識(shí),是整個(gè)系統(tǒng)的關(guān)鍵模塊,共識(shí)流程采用本文提出的EPBFT算法。其中共識(shí)模塊又分為主節(jié)點(diǎn)選舉、數(shù)據(jù)同步及驗(yàn)證和區(qū)塊共識(shí)三個(gè)子模塊。主節(jié)點(diǎn)選舉模塊負(fù)責(zé)主節(jié)點(diǎn)的選舉以及所有節(jié)點(diǎn)加入和退出以及狀態(tài)的轉(zhuǎn)換邏輯;數(shù)據(jù)同步及驗(yàn)證負(fù)責(zé)在選舉出新的主節(jié)點(diǎn)后向其他節(jié)點(diǎn)同步數(shù)據(jù)以及對(duì)同步的數(shù)據(jù)進(jìn)行驗(yàn)證;區(qū)塊共識(shí)則是進(jìn)行改進(jìn)后的區(qū)塊共識(shí)過程。

        數(shù)據(jù)存儲(chǔ)模塊 此模塊負(fù)責(zé)將完成共識(shí)的區(qū)塊進(jìn)行存儲(chǔ),數(shù)據(jù)同步驗(yàn)證過程將保證每個(gè)節(jié)點(diǎn)在視圖變更后存儲(chǔ)當(dāng)前完整區(qū)塊鏈數(shù)據(jù)。存儲(chǔ)的數(shù)據(jù)可以被查詢顯示,不可被修改。

        整個(gè)系統(tǒng)架構(gòu)如圖87所示。

        4.2 性能測(cè)試

        理論上在減去了原PBFT共識(shí)過程中的確認(rèn)階段的改進(jìn)算法在共識(shí)速度上將獲得提升。現(xiàn)通過基于改進(jìn)算法構(gòu)建的實(shí)驗(yàn)系統(tǒng)對(duì)通信開銷、吞吐量、時(shí)延和安全性四方面進(jìn)行測(cè)試,并與原PBFT算法進(jìn)行比較,從而驗(yàn)證改進(jìn)算法的有效性和可用性。在測(cè)試過程中保證實(shí)驗(yàn)機(jī)器中可能的故障節(jié)點(diǎn)和惡意節(jié)點(diǎn)都是相同的節(jié)點(diǎn)f個(gè),在這里的實(shí)驗(yàn)中采用f=1。因?yàn)榧汗?jié)點(diǎn)數(shù)至少為3f+1,所以選擇3組對(duì)比實(shí)驗(yàn),分別使用4個(gè)節(jié)點(diǎn),5個(gè)節(jié)點(diǎn)與6個(gè)節(jié)點(diǎn)作為共識(shí)節(jié)點(diǎn)。

        4.2.1 通信開銷分析

        設(shè)現(xiàn)在平臺(tái)共識(shí)節(jié)點(diǎn)數(shù)為n(n>3),可以利用共識(shí)算法流程計(jì)算出一次完整的PBFT共識(shí)需要的通信次數(shù),計(jì)算范圍只包括預(yù)準(zhǔn)備階段、準(zhǔn)備階段和確認(rèn)階段三個(gè)主要階段。同時(shí)設(shè)視圖變更概率p,p=1/q(平均每q次共識(shí)發(fā)生1次視圖變更)。

        1)PBFT通信開銷。

        首先由前文對(duì)PBFT共識(shí)過程分析知三階段總通信次數(shù)為2n(n-1)。

        對(duì)于視圖變更過程,視圖變更階段每個(gè)從節(jié)點(diǎn)廣播視圖變更消息,本階段共識(shí)網(wǎng)絡(luò)中的通信次數(shù)為(n-1)2。視圖變更確認(rèn)階段新視圖的主節(jié)點(diǎn)收到來自其他從節(jié)點(diǎn)的視圖變更后發(fā)送視圖變更確認(rèn)消息給所有從節(jié)點(diǎn),本階段共識(shí)網(wǎng)絡(luò)中發(fā)生的通信次數(shù)為(n-1),那么系統(tǒng)在p概率下發(fā)生視圖變更時(shí)通信總次數(shù)為:

        2)EPBFT通信開銷。

        由前文對(duì)EPBFT共識(shí)過程分析知二階段總通信次數(shù)為n(n-1)。

        在主節(jié)點(diǎn)選舉過程中,投票第一輪各個(gè)從節(jié)點(diǎn)發(fā)送自己的投票給除了自己之外的從節(jié)點(diǎn)。本階段共識(shí)網(wǎng)絡(luò)中的通信次數(shù)為(n-1)2。投票第二輪各個(gè)從節(jié)點(diǎn)通過選票PK更改投票對(duì)象,更改后將投票發(fā)送至除了自己之外的從節(jié)點(diǎn),該過程通信次數(shù)為(n-1)2。完成選舉的從節(jié)點(diǎn)發(fā)送確認(rèn)消息給待定主節(jié)點(diǎn),該過程通信次數(shù)為(n-1)。

        在數(shù)據(jù)同步驗(yàn)證階段中,數(shù)據(jù)同步過程中待定主節(jié)點(diǎn)給每一個(gè)從節(jié)點(diǎn)發(fā)送其對(duì)應(yīng)的同步消息,該過程次數(shù)為(n-1)。同步驗(yàn)證過程中所有從節(jié)點(diǎn)發(fā)送驗(yàn)證通過消息給除了待定主節(jié)點(diǎn)和自己之外的所有從節(jié)點(diǎn),該過程通信次數(shù)為(n-1)(n-2)。驗(yàn)證確認(rèn)過程中所有從節(jié)點(diǎn)在同步完成后發(fā)送同步完成消息給待定主節(jié)點(diǎn),該過程通信次數(shù)為(n-1)。

        所以選舉過程與同步過程總通信次數(shù)為3n2-4n+1。根據(jù)假設(shè),若系統(tǒng)在概率p下發(fā)生視圖變更,則總共的通信次數(shù)為:

        3)通信開銷對(duì)比。

        令兩種算法通信開銷比值為I,則在沒有出現(xiàn)視圖變更情況的共識(shí)過程中,兩種算法通信次數(shù)比值I1為:

        由式(9)可知I1恒等于2,所以如果系統(tǒng)沒有發(fā)生視圖變更,那么EPBFT算法是PBFT通信次數(shù)的一半,有效降低了共識(shí)過程中的網(wǎng)絡(luò)通信次數(shù)。

        而在視圖變更發(fā)生的情況下,兩種算法通信次數(shù)比值I2為:

        經(jīng)過系統(tǒng)實(shí)驗(yàn)驗(yàn)證,將發(fā)生視圖變更概率P作為自變量,兩種共識(shí)算法在節(jié)點(diǎn)數(shù)固定的情況下參與共識(shí)下的通信次數(shù)比I。當(dāng)P=0.5時(shí)I趨近于1,此時(shí)兩種算法的網(wǎng)絡(luò)通信次數(shù)基本相等。當(dāng)P<0.5,也就是每當(dāng)大于兩次共識(shí)過程后才可能發(fā)生一次視圖變更時(shí)PBFT的網(wǎng)絡(luò)通信次數(shù)大于EPBFT,當(dāng)P越小,I越趨近于2,也就是說視圖變更情況出現(xiàn)概率越小,EPBFT的通信次數(shù)越接近PBFT的一半,因?yàn)橄到y(tǒng)需要為選舉和同步驗(yàn)證過程所花費(fèi)通信開銷的情況越少。在聯(lián)盟鏈系統(tǒng)環(huán)境和節(jié)點(diǎn)比較穩(wěn)定的情況下,系統(tǒng)發(fā)生視圖變更的概率是很小的,通信開銷接近為PBFT的一半。如果區(qū)塊鏈平臺(tái)每?jī)纱喂沧R(shí)就會(huì)發(fā)生一次視圖變更,這樣的情況對(duì)系統(tǒng)來說是不可接受的,因此,EPBFT算法可以有效減少系統(tǒng)在共識(shí)過程中的通信開銷。

        4.2.2 吞吐量測(cè)試

        吞吐量一般指單位時(shí)間內(nèi)系統(tǒng)處理的事務(wù)數(shù),吞吐量的高低顯示了系統(tǒng)承受負(fù)載,處理事務(wù)或者請(qǐng)求交易的能力。在區(qū)塊鏈領(lǐng)域中,一般用每秒交易數(shù)(Transaction Per Second, TPS)來表示,即:

        其中:TransactionsΔt為出塊時(shí)間內(nèi)系統(tǒng)處理交易數(shù),Δt為出塊時(shí)間。吞吐量隨著每個(gè)區(qū)塊的容量增大相應(yīng)地也會(huì)變大,但隨著區(qū)塊容量的增大,共識(shí)時(shí)間和網(wǎng)絡(luò)負(fù)載也會(huì)增大,所以當(dāng)大到一定程度時(shí)吞吐量會(huì)有所下降。為了便于對(duì)照,控制變量,將一個(gè)塊中包含的交易數(shù)固定為10個(gè)。測(cè)試了在4、5、6個(gè)共識(shí)節(jié)點(diǎn)下的三組對(duì)照實(shí)驗(yàn)。多次測(cè)試取平均值,得出統(tǒng)計(jì)結(jié)果。

        兩種算法在相同條件下吞吐量對(duì)比如圖98所示。

        可以看出兩種情況下隨著節(jié)點(diǎn)數(shù)增加,吞吐量都略微減少,但是改進(jìn)的EPBFT算法吞吐量更高,幾乎比原PBFT算法高出一倍,并且隨著交易量的加大,吞吐量提升得更加明顯。

        4.2.3 時(shí)延測(cè)試

        共識(shí)時(shí)延(DelayTime)是衡量共識(shí)算法運(yùn)行速度的重要指標(biāo),較低的共識(shí)時(shí)延使得交易可以快速得到確認(rèn),區(qū)塊鏈安全性更高,同時(shí)也能變得更為實(shí)用。在本文中測(cè)試的共識(shí)時(shí)延為區(qū)塊完成一次共識(shí)過程的時(shí)間,即:

        其中:Tconfirm為區(qū)塊完成確認(rèn)時(shí)間,Ttransmit為快提案階段開始時(shí)間。多次測(cè)試取平均值,得出統(tǒng)計(jì)結(jié)果。

        兩種算法在相同條件下共識(shí)時(shí)延對(duì)比如圖109所示。

        4.2.4 算法安全性

        為驗(yàn)證EPBFT的安全性,從兩個(gè)方面考慮:一方面是對(duì)集群中惡意節(jié)點(diǎn)數(shù)量的控制,二是測(cè)試在主節(jié)點(diǎn)為惡意節(jié)點(diǎn)或者失效時(shí)系統(tǒng)的反應(yīng)。

        首先在共識(shí)節(jié)點(diǎn)中設(shè)置一個(gè)惡意節(jié)點(diǎn)的情況下,可以完成共識(shí),當(dāng)在總節(jié)點(diǎn)數(shù)不變,惡意節(jié)點(diǎn)增加以后超出系統(tǒng)所能承受的最大惡意節(jié)點(diǎn)數(shù)量,無法完成共識(shí)。

        然后再讓主節(jié)點(diǎn)傳播惡意請(qǐng)求(如將請(qǐng)求序號(hào)設(shè)置的很大),系統(tǒng)無法完成共識(shí),發(fā)生視圖變更將存在惡意行為的主節(jié)點(diǎn)“推翻”,重新選舉新主節(jié)點(diǎn)。再驗(yàn)證新共識(shí)算法在主節(jié)點(diǎn)宕機(jī)行為下的安全性與容錯(cuò)性,設(shè)置主節(jié)點(diǎn)在一次共識(shí)過程中宕機(jī)。PBFT算法中從節(jié)點(diǎn)檢測(cè)主節(jié)點(diǎn)宕機(jī)后執(zhí)行視圖變更過程的兩個(gè)階段,隨后更新視圖號(hào),保證上一輪中完成快確認(rèn)階段的消息全部處理結(jié)束,其他未完成快確認(rèn)階段的請(qǐng)求全部丟棄,之后開始新的共識(shí);EPBFT在檢測(cè)到主節(jié)點(diǎn)失效后開始前文所述主節(jié)點(diǎn)選舉過程。選出新主節(jié)點(diǎn)后,主節(jié)點(diǎn)與所有從節(jié)點(diǎn)進(jìn)行同步與驗(yàn)證階段,保證了在新視圖開始時(shí)全局?jǐn)?shù)據(jù)的一致性。同步結(jié)束后開始下一輪共識(shí)。

        實(shí)驗(yàn)表明EPBFT共識(shí)算法在提高了共識(shí)速度并減少共識(shí)時(shí)延的基礎(chǔ)上與原PBFT共識(shí)算法一樣能夠保證分布式系統(tǒng)一致性和安全性,提供f=(n-1)/3的容錯(cuò)性,證明了改進(jìn)的算法是有效和可靠的。

        5 結(jié)語

        本文提出了一種基于PBFT改進(jìn)的算法模型EPBFT,給集群中節(jié)點(diǎn)定義一個(gè)完整的生命周期,使得節(jié)點(diǎn)可以動(dòng)態(tài)加入和退出;對(duì)原PBFT的主節(jié)點(diǎn)選舉方式加以改進(jìn),選舉出的主節(jié)點(diǎn)更為可信;在主節(jié)點(diǎn)選舉完成之后,共識(shí)過程執(zhí)行之前增加一個(gè)對(duì)主節(jié)點(diǎn)是否所拜占庭節(jié)點(diǎn)的主節(jié)點(diǎn)驗(yàn)證及數(shù)據(jù)過程,增加一個(gè)主節(jié)點(diǎn)驗(yàn)證及數(shù)據(jù)同步過程,判斷主節(jié)點(diǎn)是否為拜占庭節(jié)點(diǎn),此處語句不通順,需調(diào)整?;貜?fù):增加一個(gè)對(duì)主節(jié)點(diǎn)是否所拜占庭節(jié)點(diǎn)的主節(jié)點(diǎn)驗(yàn)證及數(shù)據(jù)過程”調(diào)整為“增加一個(gè)主節(jié)點(diǎn)驗(yàn)證及數(shù)據(jù)同步過程,判斷主節(jié)點(diǎn)是否為拜占庭節(jié)點(diǎn),進(jìn)一步保證主節(jié)點(diǎn)的可信性使全節(jié)點(diǎn)在共識(shí)開始時(shí)狀態(tài)一致。依據(jù)區(qū)塊鏈環(huán)境優(yōu)化共識(shí)過程,加快共識(shí)過程。未來工作將繼續(xù)優(yōu)化算法細(xì)節(jié),進(jìn)一步降低網(wǎng)絡(luò)通信量??梢栽谝院笠牍?jié)點(diǎn)評(píng)分機(jī)制,綜合選取最優(yōu)節(jié)點(diǎn)。將算法應(yīng)用于某一實(shí)際領(lǐng)域的區(qū)塊鏈系統(tǒng)中,為區(qū)塊鏈的應(yīng)用及普及作出貢獻(xiàn)。

        參考文獻(xiàn) (References)

        [1] BONNEAU J, MILLER A, CLARK J, et al. SoK: research perspectives and challenges for bitcoin and cryptocurrencies [C]// Proceedings of the 2015 IEEE Symposium on Security and Privacy. Washington, DC: IEEE Computer Society, 2015: 104-121.

        [2] 蔡維德,郁蓮,王榮,等.基于區(qū)塊鏈的應(yīng)用系統(tǒng)開發(fā)方法研究[J].軟件學(xué)報(bào),2017,28(6):1474-1487.(CAI W D, YU L, WANG R, et al. Blockchain application development techniques[J]. Journal of Software, 2017, 28(6): 1474-1487.)

        [3] EYAL I, CENCER A E, SIRER E G, et al. Bitcoin-NG: a scalable blockchain protocol[C]// Proceedings of the 13th USENIX Symposium on Networked Systems Design and Implementation. Berkeley, CA: USENIX Association, 2016: 45-59.

        [4] AMALARETHINAM D I G, BALAKRISHNAN C, CHARLES A. An improved methodology for fragment re-allocation in peer-to-peer distributed databases[C]// Proceedings of the 4th International Conference on Advances in Recent Technologies in Communication and Computing. Piscataway, NJ: IEEE, 2012: 78-81.

        [5] PEASE M, SHOSTAK R, LAMPORT L. Reaching agreement in the presence of faults[J]. Journal of the ACM, 1980, 27(2): 228-234.

        [6] LAMPORT L, SHOSTAK R, PEASE M. The Byzantine generals problem[J]. ACM Transactions on Programming Languages and Systems, 1982, 4(3): 382-401.

        [7] LI J R, WOLF T. A one-way proof-of-work protocol to protect controllers in software-defined networks[C]// Proceedings of the 2016 Symposium on Architectures for Networking and Communications Systems. New York: ACM, 2016: 123-124.

        [8] CASTRO M, LISKOV B. Practical Byzantine fault tolerance[C]// Proceedings of the 3rd Symposium on Operating Systems Design and Implementation. Berkeley, CA: USENIX Association, 1999: 173-186.

        [9] REITER M K. A secure group membership protocol[J]. IEEE Transactions on Software Engineering, 1996, 22(1): 31-42.

        [10] JUNQUEIRA F, REED B. ZooKeeper分布式過程協(xié)同技術(shù)詳解[M].謝超,周貴卿,譯.北京:機(jī)械工業(yè)出版社,2016:188-193.(JUNQUEIRA F, REED B. Detailed Explanation of Zookeeper Distributed Process Collaboration Technology[M]. XIE C, ZHOU G Q, translated. Beijing: China Machine Press, 2016: 188-193.)

        [11] 袁勇,王飛躍.區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J].自動(dòng)化學(xué)報(bào),2016,42(4):481-494.(YUAN Y, WANG F Y. Blockchain: the state of the art and future trends[J]. Acta Automatica Sinica, 2016, 42(4): 481-494.)

        [12] 韓璇,劉亞敏.區(qū)塊鏈技術(shù)中的共識(shí)機(jī)制研究[J].信息網(wǎng)絡(luò)安全,2017(9):147-152.(HAN X, LIU Y M. Research on the consensus mechanisms of blockchain technology[J]. Netinfo Security, 2017(9): 147-152.)

        [13] LAMPORT L. The part-time parliament[J]. ACM Transactions on Computer Systems, 1998, 16(2): 133-169.

        [14] ONGARO D, OUSTERHOUT J. In search of an understandable consensus algorithm[C]// Proceedings of the 2014 USENIX Annual Technical Conference. Berkeley, CA: USENIX Association, 2014: 305-319.

        [15] COWLING J, MYERS D, LISKOV B, et al. HQ replication: a hybrid quorum protocol for Byzantine fault tolerance[C]// Proceedings of the 7th Symposium on Operating Systems Design and Implementation. Berkeley, CA: USENIX Association, 2006: 177-190.

        [16] COPELAND C, ZHONG H. Tangaroa: a Byzantine fault tolerant raft [EB/OL].[2018-10-25]. http://www.scs.stanford.edu/14aucs244b/labs/projects/copeland zhong.pdf.

        [17] MARTINO W. KADENA: the first scalable, high performance private blockchain [EB/OL].[2018-10-25]. http://kadena.io/docs/Kadena ConsensusWhitePaperAug2016.pdf.

        [18] KWON J. Tendermint: consensus without mining[EB/OL]. [ 2018-10-25].https://tendermint.com/static/docs/tendermint.pdf.

        [19] GILAD Y, HEMO R, MICALI S, et al. Scaling Byzantine agreements for cryptocurrencies [EB/OL].[2018-10-25]. http://eprint.iacr.org/2017/454.

        [20] QUANTUM M. Proof of stake [EB/OL].[2018-10-25]. https://en.bitcoin.it/wiki/Proof of Stake.

        欧洲乱码伦视频免费| 性无码专区无码| 无码人妻一区二区三区在线视频| 最新国产三级| 少妇av免费在线播放| 91偷自国产一区二区三区| 国产黄大片在线观看画质优化 | 国产中文字幕乱码在线| 日韩亚洲在线一区二区| 99久久精品费精品国产一区二| 巨茎中出肉欲人妻在线视频| 91制服丝袜| 亚洲高清国产拍精品熟女| 亚洲国产丝袜久久久精品一区二区| 免费在线观看视频专区| 风韵犹存丰满熟妇大屁股啪啪| 影音先锋男人av鲁色资源网 | 国产艳妇av在线出轨| 亚洲国产精品成人一区二区三区| 欧美黑人巨大videos精品| 亚洲av成人无码网站大全| 国产精品无码久久久久免费AV | 亚洲va视频一区二区三区| 国产伦理一区二区| 欧美人妻日韩精品| 午夜av福利亚洲写真集| 国产精品一区二区三久久不卡| 国产麻豆剧传媒精品国产av| 国产亚洲精品日韩综合网| 中文字幕亚洲永久精品| 日本真人边吃奶边做爽电影| 亚洲国产精品sss在线观看av| 91精品国产闺蜜国产在线| 放荡成熟人妻中文字幕| 国产又色又爽又黄的| 欧美在线不卡视频| 日韩中文字幕乱码在线| 强开小婷嫩苞又嫩又紧视频| 免费无码午夜福利片69| 无码免费午夜福利片在线| 国产一区二区三区成人|