簡單來說:本文基于現(xiàn)有BFT類共識(shí)算法,提出了改進(jìn)BFT協(xié)議Gosig,基于gossip協(xié)議設(shè)計(jì)并改進(jìn)了共識(shí)協(xié)議流程,利用傳輸流水線進(jìn)行帶寬優(yōu)化,利用聚合簽名gossip減少消息數(shù)量。增強(qiáng)了BFT類協(xié)議的安全性,提升了性能。
1、簡介
目前BFT類協(xié)議普遍面臨三個(gè)挑戰(zhàn):
1、目標(biāo)單點(diǎn)故障在只有少數(shù)數(shù)據(jù)中心的云中很常見。
2、帶寬有限、時(shí)延長。
3、受最慢節(jié)點(diǎn)的限制。
2、概述
提了一些其他的改進(jìn)項(xiàng)目的優(yōu)缺點(diǎn),然后引入本文設(shè)計(jì)的理由與優(yōu)勢(shì),可見原文。
注意:OmniLedger 和RapidChain 為每個(gè)分片選擇一個(gè)小型委員會(huì)來提高可伸縮性,由于重新配置的開銷,它只能緩慢地(幾天)更改,因此仍然容易受到自適應(yīng)攻擊。
聯(lián)想下開題怎么解決重新配置分片的開銷。

系統(tǒng)模型和一些假設(shè)說明在文中已給出,改進(jìn)BFT類共識(shí)應(yīng)該具有BFT協(xié)議中常用的標(biāo)準(zhǔn)系統(tǒng)模型和安全性假設(shè)。
3、Gosig協(xié)議設(shè)計(jì)
第一階段:區(qū)塊提議
通過隨機(jī)性算法進(jìn)行領(lǐng)導(dǎo)節(jié)點(diǎn)的隨機(jī)選取,然后通過密碼學(xué)保密性算法告知需要提議的節(jié)點(diǎn)。然后打包區(qū)塊進(jìn)行g(shù)ossip傳播全網(wǎng)。
第二階段:簽名收集
節(jié)點(diǎn)驗(yàn)證第一階段的區(qū)塊,如無誤則進(jìn)行數(shù)字簽名,簽名集合中簽名數(shù)量超過閥值則進(jìn)行區(qū)塊提交。具體分為準(zhǔn)備與提交兩個(gè)子步驟。最后區(qū)塊上鏈。
4、性能優(yōu)化
1)、傳輸流水線
Gosig將每個(gè)塊分為以下三個(gè)部分:1)標(biāo)頭,包括協(xié)議中使用的所有元數(shù)據(jù),例如憑據(jù)和提議證書; 2)包含交易哈希的有序列表的主體; 3)交易中的原始交易塊。這種設(shè)計(jì)背后的直覺是BFT協(xié)議在不同階段需要不同種類的信息。采用這種塊結(jié)構(gòu)使Gosig可以盡可能多地流水線協(xié)議的不同階段,從而獨(dú)立地優(yōu)化對(duì)延遲敏感的元數(shù)據(jù)和帶寬受限的數(shù)據(jù)傳輸。它還使Gosig通過異步處理原始事務(wù)和投票消息來充分利用計(jì)算和數(shù)據(jù)傳輸之間的獨(dú)立性。
Gosig進(jìn)一步將主體分為幾部分,從而使節(jié)點(diǎn)可以在接收整個(gè)塊主體之前開始發(fā)送數(shù)據(jù),就像BitTorrent傳輸文件的方式一樣。與BitTorrent不同,生成塊的提議者在將每個(gè)段細(xì)分給不同的對(duì)等方之前對(duì)其進(jìn)行簽名。請(qǐng)注意,提議者在每個(gè)網(wǎng)段的簽名至關(guān)重要,因?yàn)榉駝t,對(duì)手可能會(huì)生成大量垃圾網(wǎng)段,從而使整個(gè)網(wǎng)絡(luò)變得擁塞。
在不同階段中的流水線傳輸:
在Gosig的八卦網(wǎng)絡(luò)中先傳播一個(gè)塊的標(biāo)頭,然后再傳播主體及其原始交易。這使得兩個(gè)階段(用于塊傳播的階段I和用于簽名傳播的階段II)可以相互重疊?;叵胍幌?,第一階段的結(jié)束時(shí)間實(shí)際上是一個(gè)超時(shí),我們可以假設(shè)所有節(jié)點(diǎn)都收到了具有最低提議者分?jǐn)?shù)的塊,因此他們可以決定將哪個(gè)塊分配給P。實(shí)際上,一個(gè)節(jié)點(diǎn)只需要塊頭即可算法2中的決策(第4行)。因此,一旦所有節(jié)點(diǎn)都收到了報(bào)頭,首先傳播報(bào)頭并進(jìn)入階段II是安全的。由于報(bào)頭通常很?。?0,000個(gè)參加者大約為41 KB,如果我們應(yīng)用第5.2節(jié)中討論的壓縮,則為21 KB),因此此優(yōu)化極大地縮短了階段I的時(shí)間。另外,當(dāng)節(jié)點(diǎn)較早看到標(biāo)頭時(shí),它們可以及早確定分?jǐn)?shù)最低的提議者,而不會(huì)浪費(fèi)帶寬來進(jìn)一步傳播其他提議者的“丟失”塊。
然后,Gosig的gossip網(wǎng)絡(luò)僅傳播帶有交易哈希的塊體。對(duì)于body,我們采用比特幣核心]的緊湊塊的想法。除非有沖突,否則我們僅包括6個(gè)字節(jié)的短哈希而不是完整的32個(gè)字節(jié)的SHA256哈希。因此,主體也遠(yuǎn)小于所有原始交易的總和。
概括一下:就是將區(qū)塊結(jié)構(gòu)進(jìn)行分片,在不同的階段gossip不同的數(shù)據(jù),同時(shí)對(duì)數(shù)據(jù)大小進(jìn)行優(yōu)化,優(yōu)化通信時(shí)間。還可重疊兩階段,實(shí)現(xiàn)異步。
在不同輪次中的流水線傳輸:
在普通協(xié)議中,僅當(dāng)前一輪r-1的第二階段結(jié)束時(shí),才開始回合r,而潛在的提議者要等到該回合開始提議一個(gè)區(qū)塊為止。我們意識(shí)到,只要節(jié)點(diǎn)在回合r ? 1中提交了一個(gè)塊(即,看到具有足夠簽名的消息),節(jié)點(diǎn)就可以通過提議一個(gè)新的塊安全地開始回合r,仍在回合r-1中的節(jié)點(diǎn)將臨時(shí)緩沖這些接收到的塊,并在它們進(jìn)入回合r-1中或在回合r的開始時(shí)間到來時(shí)對(duì)其進(jìn)行處理。即使節(jié)點(diǎn)在回合r-1結(jié)束之前進(jìn)入回合r,該節(jié)點(diǎn)也將繼續(xù)執(zhí)行回合r-1的階段II的任務(wù),例如轉(zhuǎn)發(fā)/簽名P消息,直到回合結(jié)束。這樣,我們可以為回合r ? 1保留較高的簽名傳播速率。
2)、任意順序聚合簽名gossip
Gosig使用聚集的簽名八卦來優(yōu)化香草BFT協(xié)議第二階段中的簽名傳輸,從而減少了每個(gè)節(jié)點(diǎn)的數(shù)據(jù)傳輸,從而避免了單個(gè)節(jié)點(diǎn)的過載。請(qǐng)注意,每個(gè)節(jié)點(diǎn)都需要從所有其他節(jié)點(diǎn)的2/3收集票或簽名。如果天真地執(zhí)行Stage II,簽名消息的數(shù)量將隨著節(jié)點(diǎn)數(shù)量的增加而線性增長。為了解決這一可擴(kuò)展性挑戰(zhàn),Gosig使用技術(shù)在gossip期間將多個(gè)接收到的簽名聚集到一個(gè)緊湊的多重簽名中。具體來說,Gosig通過將節(jié)點(diǎn)在P消息中看到的所有簽名包括在內(nèi),來收集簽名以及gossip過程。這樣,節(jié)點(diǎn)在接收到P消息后,便可以了解多個(gè)新簽名,可以將其與之前看到的簽名進(jìn)行合并。這使Gosig能夠轉(zhuǎn)發(fā)一個(gè)緊湊的多重簽名,而不是許多單獨(dú)的簽名,以節(jié)省網(wǎng)絡(luò)資源。同樣,在消息中而不是在節(jié)點(diǎn)上累積簽名對(duì)于節(jié)點(diǎn)故障更具彈性。由于每個(gè)節(jié)點(diǎn)可以發(fā)送和接收的數(shù)據(jù)更少,因此我們可以緩解挑戰(zhàn)3中表達(dá)的單節(jié)點(diǎn)容量問題。
如果簽名到達(dá)的速度太快而無法及時(shí)處理,則節(jié)點(diǎn)會(huì)將這些消息放入后進(jìn)先出(LIFO)堆棧中。 Gosig選擇LIFO堆棧而不是FIFO隊(duì)列,因?yàn)橐院蟮竭_(dá)的消息可能包含更多簽名。
3)、特殊情況處理
1、參與者加入/離開。我們支持授權(quán)節(jié)點(diǎn)加入或離開的任何非交互式證明,無論是來自可信機(jī)構(gòu)的簽名還是來自組的多重簽名。為了加入/離開組,節(jié)點(diǎn)提交包含證明的特殊交易。現(xiàn)有節(jié)點(diǎn)將在提交事務(wù)時(shí)更新其自己的參與者列表。
2、處理臨時(shí)故障。如果節(jié)點(diǎn)從崩潰或數(shù)據(jù)丟失中恢復(fù),則應(yīng)檢索丟失的塊和證明?;謴?fù)整個(gè)歷史記錄后,它才能繼續(xù)參與。由于只能在提交前一個(gè)塊后才能對(duì)塊進(jìn)行任何表決,因此所有誠實(shí)節(jié)點(diǎn)在計(jì)算表決數(shù)時(shí)將看到相同的成員身份。如果節(jié)點(diǎn)檢測(cè)到與對(duì)等方的明顯通信問題(連接失敗,超時(shí)等),則它將在對(duì)等期間To(通常是循環(huán)時(shí)間的一半)內(nèi)將對(duì)等方“黑名單”(即停止向其發(fā)送消息)。在同一個(gè)對(duì)等方發(fā)生后續(xù)故障時(shí),它將累加To,直到收到來自該對(duì)等方的消息或成功重試為止。這種退避機(jī)制有效地限制了連接失敗節(jié)點(diǎn)的浪費(fèi)嘗試。
5、實(shí)驗(yàn)評(píng)估
主要對(duì)吞吐量、時(shí)延、帶寬等指標(biāo)進(jìn)行實(shí)驗(yàn)測(cè)試。針對(duì)多組不同數(shù)量的節(jié)點(diǎn)進(jìn)行測(cè)試,節(jié)點(diǎn)數(shù)從幾百到1萬不等。
6、總結(jié)
雖然BFT協(xié)議是構(gòu)建聯(lián)盟區(qū)塊鏈的有前途的工具,但當(dāng)將其應(yīng)用于公共Internet上的云服務(wù)時(shí),它們面臨著巨大的挑戰(zhàn)。我們?yōu)槁?lián)盟區(qū)塊鏈提出了一種新的BFT協(xié)議Gosig。在Gosig中,每個(gè)新區(qū)塊的提議者都是隨機(jī)秘密選擇的,以防止自適應(yīng)攻擊。我們共同優(yōu)化了BFT協(xié)議層和八卦層,流水線化了所有通信以盡可能地最大化網(wǎng)絡(luò)利用率。使用聚合的簽名八卦,我們可以將部分投票結(jié)果打包成一條短消息,從而允許每個(gè)節(jié)點(diǎn)傳輸更少的數(shù)據(jù)。這些優(yōu)化可幫助Gosig支持具有數(shù)千個(gè)甚至更多節(jié)點(diǎn)的單個(gè)共識(shí)組,并在廣域網(wǎng)中實(shí)現(xiàn)更高的性能,同時(shí)保持與傳統(tǒng)BFT相同的安全級(jí)別(例如,容忍異步網(wǎng)絡(luò)和自適應(yīng)攻擊)。在未來的工作中,我們希望設(shè)計(jì)一種激勵(lì)機(jī)制來鼓勵(lì)玩家遵循協(xié)議,例如,盡其所能轉(zhuǎn)發(fā)消息。此外,Gosig既是一個(gè)完整的系統(tǒng),又是高級(jí)區(qū)塊鏈的基礎(chǔ)。例如,我們希望使用Gosig作為每個(gè)分片的共識(shí)協(xié)議來提供分片/脫鏈設(shè)計(jì)。