去中心化共識方法及裝置的制造方法
【專利摘要】本發(fā)明涉及一種去中心化共識方法及裝置。該方法可以包括多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù)。第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在所述多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)。如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法。如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法。以及第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新。本發(fā)明還公開了一種中心化共識的裝置。
【專利說明】
去中心化共識方法及裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于互聯(lián)網(wǎng)技術(shù)領(lǐng)域,更具體地涉及一種去中心化共識方法及裝置。
【背景技術(shù)】
[0002]去中心化共識指的是在沒有中心控制節(jié)點(diǎn)的分布式系統(tǒng)中,所有參與節(jié)點(diǎn)對交易、數(shù)字記錄、電子證據(jù)等系統(tǒng)數(shù)據(jù)的正確性進(jìn)行驗(yàn)證并達(dá)成一致共識的機(jī)制。而區(qū)塊鏈由于自有的去中心化屬性,能夠讓節(jié)點(diǎn)與節(jié)點(diǎn)之間的交互比傳統(tǒng)中心化的方式更快、更經(jīng)濟(jì)的進(jìn)行。目前,主流的去中心化共識方法包括:工作量證明PoW(Proof of Work)、權(quán)益證明PoS(Proof of Stake)、瑞波共識協(xié)議RCP(Ripple Consensus Protocol)等。
【發(fā)明內(nèi)容】
[0003]PoW交易確認(rèn)時間長,區(qū)塊產(chǎn)生速度在10分鐘左右,交易確認(rèn)時間更是長達(dá)I小時;存在51 %的攻擊漏洞,即當(dāng)攻擊者掌握超過51 %計算能力時,可惡意更改區(qū)塊鏈信息;用戶需要下載整個區(qū)塊鏈信息,充當(dāng)?shù)V工進(jìn)行“挖礦”,浪費(fèi)計算資源。PoS易遭受“零成本”攻擊,即之前提供抵押之后兌換并花掉的各方可以回來重寫他們擁有權(quán)益那時開始的歷史。RCP方法中,用戶實(shí)踐中并不愿意編輯信任列表,于是巨大的權(quán)力最終集中到少數(shù)列表維護(hù)者手中,造成一定程度的中心化。
[0004]鑒于以上情況,有必要提供新的去中心化共識方法及裝置。
[0005]根據(jù)本發(fā)明的一方面,提供了一種用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的方法。該方法包括:多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù);第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn);如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法;如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法;以及第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新。
[0006]根據(jù)本發(fā)明的另一方面,提供了一種用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的裝置。該裝置包括:用于多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù)的模塊;用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)的模塊;用于如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法的模塊;用于如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法的模塊;以及用于第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新的模塊。
[0007]根據(jù)本發(fā)明的另一方面,提供了一種用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的方法。該方法包括:驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù);驗(yàn)證節(jié)點(diǎn)投票選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)同時產(chǎn)生跟隨者身份的驗(yàn)證節(jié)點(diǎn);領(lǐng)導(dǎo)者向跟隨者發(fā)送確認(rèn)消息,并等待確認(rèn)回復(fù)消息;領(lǐng)導(dǎo)者接收跟隨者返回的確認(rèn)消息,并將返回的確認(rèn)消息與設(shè)定的門限值進(jìn)行比較;以及收到返回的確認(rèn)消息達(dá)到門限值后,結(jié)束確認(rèn)階段,讓跟隨者更新自己的狀態(tài)。
[0008]本發(fā)明提供了基于投票的去中心化共識方法及裝置。利用投票的方式,選出系統(tǒng)驗(yàn)證過程中的領(lǐng)導(dǎo)者,經(jīng)過領(lǐng)導(dǎo)者確認(rèn)和接受階段后,由領(lǐng)導(dǎo)者發(fā)布并擴(kuò)散領(lǐng)導(dǎo)者自身的數(shù)據(jù)狀態(tài),系統(tǒng)中所有節(jié)點(diǎn)進(jìn)而完成數(shù)據(jù)狀態(tài)更新,達(dá)成全系統(tǒng)的一致共識。由于該方法中網(wǎng)絡(luò)節(jié)點(diǎn)達(dá)到共識之后,大部分網(wǎng)絡(luò)節(jié)點(diǎn)狀態(tài)會與某些驗(yàn)證節(jié)點(diǎn)的初始狀態(tài)一致,通過該方法提前將這樣的網(wǎng)絡(luò)節(jié)點(diǎn)選舉出來,由他們來擴(kuò)散自身的狀態(tài)到整個網(wǎng)絡(luò)中,可加速共識的進(jìn)行,利用該方法具有消息簡單、數(shù)據(jù)量少、靈活度高、數(shù)據(jù)傳輸快、低延遲等優(yōu)點(diǎn)。由于該方法在確認(rèn)階段需要全網(wǎng)驗(yàn)證節(jié)點(diǎn)對選舉出的領(lǐng)導(dǎo)者身份進(jìn)行驗(yàn)證,使得該去中心化共識方法及裝置具有抗攻擊的優(yōu)點(diǎn)。
【附圖說明】
[0009]通過參考附圖會更加清楚地理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理解為對本發(fā)明進(jìn)行任何限制,在附圖中:
[0010]圖1示出根據(jù)本發(fā)明的具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)的一個實(shí)施例的示意圖;
[0011]圖2示出根據(jù)本發(fā)明的用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的方法的一個實(shí)施例的流程圖;
[0012]圖3示出根據(jù)本發(fā)明的一個實(shí)施例的去中心化共識方法的流程圖;
[0013]圖4示出根據(jù)本發(fā)明的一個實(shí)施例的去中心化共識方法中選舉階段驗(yàn)證節(jié)點(diǎn)角色變換的不意圖;
[0014]圖5示出根據(jù)本發(fā)明的一個實(shí)施例的去中心化共識方法中投票發(fā)送者在選舉階段的流程圖;
[0015]圖6示出根據(jù)本發(fā)明的一個實(shí)施例的去中心化共識方法中投票接收者在選舉階段的流程圖;
[0016]圖7示出根據(jù)本發(fā)明的一個實(shí)施例的去中心化共識方法中確認(rèn)階段的流程圖;
[0017]圖8示出根據(jù)本發(fā)明的另一實(shí)施例的去中心化共識方法中確認(rèn)階段的流程圖;
[0018]圖9示出根據(jù)本發(fā)明的一個實(shí)施例的用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的裝置的結(jié)構(gòu)示意圖。
[0019]圖10示出根據(jù)本發(fā)明的另一個實(shí)施例的去中心化共識裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0020]下面將詳細(xì)描述本發(fā)明的各個方面的特征和示例性實(shí)施例。在下面的詳細(xì)描述中,提出了許多具體細(xì)節(jié),以便提供對本發(fā)明的全面理解。但是,對于本領(lǐng)域技術(shù)人員來說很明顯的是,本發(fā)明可以在不需要這些具體細(xì)節(jié)中的一些細(xì)節(jié)的情況下實(shí)施。下面對實(shí)施例的描述僅僅是為了通過示出本發(fā)明的示例來提供對本發(fā)明的更好的理解。本發(fā)明決不限于下面所提出的任何具體配置和方法,而是在不脫離本發(fā)明的精神的前提下覆蓋了元素、部件和算法的任何修改、替換和改進(jìn)。在附圖和下面的描述中,沒有示出公知的結(jié)構(gòu)和技術(shù),以便避免對本發(fā)明造成不必要的模糊。
[0021]下面結(jié)合附圖,詳細(xì)描述根據(jù)本發(fā)明實(shí)施例的去中心化共識方法、裝置。
[0022]圖1示出根據(jù)一種實(shí)施例,具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)的示意圖,該系統(tǒng)可以包括由多個驗(yàn)證節(jié)點(diǎn)組成的對等計算機(jī)網(wǎng)絡(luò)(P2P)。該系統(tǒng)可以是一種在對等者(Peer)之間分配任務(wù)和工作負(fù)載的分布式應(yīng)用架構(gòu),是對等計算模型在應(yīng)用層形成的一種組網(wǎng)或網(wǎng)絡(luò)形式?!癙eer”在英語里有“對等者、伙伴、對端”的意義。該系統(tǒng)也可以定義為:網(wǎng)絡(luò)的參與者共享他們所擁有的一部分硬件資源(處理能力、存儲能力、網(wǎng)絡(luò)連接能力、打印機(jī)等),這些共享資源通過網(wǎng)絡(luò)提供服務(wù)和內(nèi)容,能被其它對等節(jié)點(diǎn)(Peer)直接訪問而無需經(jīng)過中間實(shí)體。在此網(wǎng)絡(luò)中的參與者既是資源、服務(wù)和內(nèi)容的提供者(Server),又是資源、服務(wù)和內(nèi)容的獲取者(Client)。
[0023]在P2P網(wǎng)絡(luò)環(huán)境中,彼此連接的多臺計算機(jī)之間都處于對等的地位,各臺計算機(jī)有相同的功能,無主從之分,一臺計算機(jī)既可作為服務(wù)器,設(shè)定共享資源供網(wǎng)絡(luò)中其他計算機(jī)所使用,又可以作為工作站,整個網(wǎng)絡(luò)一般來說不依賴專用的集中服務(wù)器,也沒有專用的工作站。網(wǎng)絡(luò)中的每一臺計算機(jī)既能充當(dāng)網(wǎng)絡(luò)服務(wù)的請求者,又對其它計算機(jī)的請求做出響應(yīng),提供資源、服務(wù)和內(nèi)容。通常這些資源和服務(wù)包括:信息的共享和交換、計算資源(如CPU計算能力共孚)、存儲共孚(如緩存和磁盤空間的使用)、網(wǎng)絡(luò)共孚、打印機(jī)共孚等;以及本實(shí)施例示出的所有網(wǎng)絡(luò)參與節(jié)點(diǎn)可以對交易、數(shù)字記錄、電子證據(jù)等系統(tǒng)數(shù)據(jù)的正確性進(jìn)行驗(yàn)證并達(dá)成一致共識。
[0024]圖2示出根據(jù)一種實(shí)施例,用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的方法的流程圖,在步驟S100,多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù)。系統(tǒng)中還可以存在多個非驗(yàn)證節(jié)點(diǎn),非驗(yàn)證節(jié)點(diǎn)負(fù)責(zé)產(chǎn)生待共識數(shù)據(jù)。在步驟S200,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)。在步驟S300,如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法;如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法。在步驟S400,第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新。圖2示出根據(jù)一種實(shí)施例,去中心化共識方法的流程圖,在步驟SlOO中,驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù),這里需要確認(rèn)的待共識的數(shù)據(jù)可以是交易、電子證據(jù)、數(shù)字記錄等任何形式的電子數(shù)據(jù)。驗(yàn)證節(jié)點(diǎn)盡可能多地收集并存放本輪共識過程需要確認(rèn)的所有數(shù)據(jù),完成一些初始化操作,例如將身份初始為跟隨者等,準(zhǔn)備開始共識,在步驟SlOO中,系統(tǒng)將需要確認(rèn)的數(shù)據(jù)發(fā)送給驗(yàn)證節(jié)點(diǎn)的過程,可以包括在步驟SlOl中,第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù),根據(jù)既定規(guī)則對接收到的每條數(shù)據(jù)做校驗(yàn),如果通過校驗(yàn),則將數(shù)據(jù)存儲到本地,供之后共識用,否則丟棄該數(shù)據(jù)。在步驟S102中,第一驗(yàn)證節(jié)點(diǎn)在開始共識前,完成本地初始化工作,如身份初始化為跟隨者,時隙號重置為O等,并在準(zhǔn)備開始共識時,將所有待共識的數(shù)據(jù)鎖定,與共識過程中接到的新數(shù)據(jù)分開。
[0025]在步驟S200,進(jìn)入選舉階段,第一驗(yàn)證節(jié)點(diǎn)投票選舉具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)。在步驟S200中,第一驗(yàn)證節(jié)點(diǎn)被選舉為領(lǐng)導(dǎo)者后,將具有如分發(fā)擴(kuò)散自身數(shù)據(jù)等功能。這里如圖4示出的一個實(shí)施例,選舉階段驗(yàn)證節(jié)點(diǎn)角色變換的示意圖。選舉過程中節(jié)點(diǎn)身份分為三種:跟隨者,候選者和領(lǐng)導(dǎo)者。初始化時所有節(jié)點(diǎn)角色均為跟隨者,且時隙號設(shè)定為0,這里的時隙可以理解為虛擬時間,時隙號越大表示時間越靠后。共識開始后,第一驗(yàn)證節(jié)點(diǎn)轉(zhuǎn)為候選者,時隙號增加,比如加I,并投自己一票,同時向其他驗(yàn)證節(jié)點(diǎn)發(fā)起投票請求。系統(tǒng)中每個時隙獲得多數(shù)投票的候選者變成領(lǐng)導(dǎo)者,這里的多數(shù)可以是一個門限值,具體代表多大比例可通過例如配置文件等方式來指定,進(jìn)而增加系統(tǒng)的靈活性。領(lǐng)導(dǎo)者只可能有一個,一旦領(lǐng)導(dǎo)者選出,該選舉階段結(jié)束。如果當(dāng)前時隙系統(tǒng)沒有選出領(lǐng)導(dǎo)者,所有候選者進(jìn)入睡眠狀態(tài),隨機(jī)睡眠一段時間后將在新的時隙號重新發(fā)起投票。第一驗(yàn)證節(jié)點(diǎn)在接到來自其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)發(fā)來的投票請求之后,如果第一驗(yàn)證節(jié)點(diǎn)當(dāng)前時隙號沒有投票給其他節(jié)點(diǎn)或者小于請求者的時隙號,均需給作為請求者的第二驗(yàn)證節(jié)點(diǎn)投一票,并用第二驗(yàn)證節(jié)點(diǎn)的是洗好更新第一驗(yàn)證節(jié)點(diǎn)的時隙號,且第一驗(yàn)證節(jié)點(diǎn)轉(zhuǎn)化為跟隨者。在步驟S200中,驗(yàn)證節(jié)點(diǎn)角色轉(zhuǎn)換后不同身份進(jìn)入不同步驟,在步驟S210中,驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,進(jìn)入選舉階段,選舉領(lǐng)導(dǎo)者。在步驟S221中,領(lǐng)導(dǎo)者進(jìn)入確認(rèn)階段S300中的步驟S310,其他驗(yàn)證節(jié)點(diǎn)進(jìn)入步驟S220。在步驟S210中,驗(yàn)證節(jié)點(diǎn)將自己身份切換為領(lǐng)導(dǎo)者。在步驟S220中,驗(yàn)證節(jié)點(diǎn)將自己身份切換為跟隨者,等待領(lǐng)導(dǎo)者的確認(rèn)消息跟隨者驗(yàn)證節(jié)點(diǎn)可以初始化隨機(jī)定時器,并注冊超時事件一旦定時器超時,觸發(fā)該超時事件處理器,跟隨者向系統(tǒng)其它節(jié)點(diǎn)報告當(dāng)前領(lǐng)導(dǎo)者是惡意。在步驟S221中,判斷是否定時器超時未收到確認(rèn)消息,超時返回S210,否則進(jìn)入步驟S300中的步驟S320。在這里由于選舉階段的選舉是沒有校驗(yàn)的,選出來的領(lǐng)導(dǎo)者可能是惡意的,為了確保系統(tǒng)的安全,需要每個跟隨者對當(dāng)前領(lǐng)導(dǎo)者的合法性做出驗(yàn)證。當(dāng)多數(shù)跟隨者都認(rèn)為當(dāng)前領(lǐng)導(dǎo)者是惡意的時候,系統(tǒng)重新退回到選舉階段,避免由于領(lǐng)導(dǎo)者惡意不發(fā)確認(rèn)消息或者網(wǎng)絡(luò)環(huán)境惡劣等因素導(dǎo)致系統(tǒng)無法正常達(dá)成共識。在步驟S300中的步驟S310,領(lǐng)導(dǎo)者進(jìn)入領(lǐng)導(dǎo)者身份確認(rèn)階段,領(lǐng)導(dǎo)者將向其他驗(yàn)證節(jié)點(diǎn)發(fā)送確認(rèn)消息。在步驟S311中,如果領(lǐng)導(dǎo)者能夠接收到多數(shù)確認(rèn)回復(fù),則說明其身份被確認(rèn),否則其身份將被取消。這里的多數(shù)可以是一個門限值具體代表多大比例可通過例如配置文件等方式來指定。這里的確認(rèn)回復(fù)可以是一個確認(rèn)字符,例如可以是ACK(Acknowledgement)在數(shù)據(jù)通信中,接收站發(fā)給發(fā)送站的一種傳輸類控制字符。表示發(fā)來的數(shù)據(jù)已確認(rèn)接收無誤。該階段是保證大部分節(jié)點(diǎn)都對領(lǐng)導(dǎo)者的合法性做了驗(yàn)證且返回領(lǐng)導(dǎo)者合法,才去執(zhí)行狀態(tài)更新,從而確保系統(tǒng)中大部分的節(jié)點(diǎn)處于一致。在步驟S410中,領(lǐng)導(dǎo)者進(jìn)入領(lǐng)導(dǎo)者狀態(tài)接受階段,領(lǐng)導(dǎo)者擴(kuò)散自身待共識數(shù)據(jù)及狀態(tài),讓其他驗(yàn)證節(jié)點(diǎn)更新自己的狀態(tài),進(jìn)入步驟S500ο在步驟S300的S320中,跟隨者進(jìn)入領(lǐng)導(dǎo)者身份確認(rèn)階段。在步驟S321中,驗(yàn)證領(lǐng)導(dǎo)者身份是否合法,合法則進(jìn)入接收階段S400中的步驟S420,否則返回步驟S210。在收到領(lǐng)導(dǎo)者的確認(rèn)消息后,首先可以檢查是否之前已經(jīng)收到過該領(lǐng)導(dǎo)者的確認(rèn)消息,如果已經(jīng)收到過,則需要檢查兩次確認(rèn)消息是否一致,一致則丟棄該消息,不一致則向系統(tǒng)報告當(dāng)前領(lǐng)導(dǎo)者是惡意的;跟隨者可以根據(jù)本地已存儲的狀態(tài)信息校驗(yàn)領(lǐng)導(dǎo)者是否合法,如果合法,則給出確認(rèn)回復(fù),不合法則向系統(tǒng)報告當(dāng)前領(lǐng)導(dǎo)者是惡意的,當(dāng)多數(shù)跟隨者都認(rèn)為當(dāng)前領(lǐng)導(dǎo)者是惡意的時候,系統(tǒng)重新退回到選舉階段;在步驟S420中,跟隨者進(jìn)入領(lǐng)導(dǎo)者狀態(tài)接受階段,跟隨者根據(jù)領(lǐng)導(dǎo)者的狀態(tài)信息更新自己的狀態(tài),這里如果跟隨者本地沒有領(lǐng)導(dǎo)者的狀態(tài)信息,則需要先向領(lǐng)導(dǎo)者請求狀態(tài)信息,然后再更新自己的狀態(tài),并進(jìn)入步驟S500。在步驟S500,共識完成,所有驗(yàn)證節(jié)點(diǎn)根據(jù)更新后的狀態(tài)做本地執(zhí)行動作,例如執(zhí)行交易列表,持久化結(jié)果信息等。
[0026]圖3示出根據(jù)一種實(shí)施例,去中心化共識方法的流程圖。在步驟S31中,驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù);在步驟S32中,驗(yàn)證節(jié)點(diǎn)投票選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)同時產(chǎn)生跟隨者身份的驗(yàn)證節(jié)點(diǎn);在步驟S33中領(lǐng)導(dǎo)者向跟隨者發(fā)送確認(rèn)消息,并等待確認(rèn)回復(fù)消息;在步驟S34中,領(lǐng)導(dǎo)者接收跟隨者返回的確認(rèn)消息,并將返回的確認(rèn)消息與設(shè)定的門限值進(jìn)行比較;在步驟S35中,收到返回的確認(rèn)消息達(dá)到門限值后,結(jié)束確認(rèn)階段,讓跟隨者更新自己的狀態(tài)。
[0027]在步驟S200中,驗(yàn)證節(jié)點(diǎn)投票選舉領(lǐng)導(dǎo)者,處在選舉階段,每個驗(yàn)證節(jié)點(diǎn)會同時擔(dān)任這兩個角色,可以按照投票發(fā)送者和投票接收者兩個角色對該步驟進(jìn)行說明,圖5示出根據(jù)一種實(shí)施例,去中心化共識方法在選舉階段的流程圖。在步驟S2101,共識開始后,驗(yàn)證節(jié)點(diǎn)進(jìn)入選舉階段,清理上次的投票信息,如初始化投票榜,重置當(dāng)前領(lǐng)導(dǎo)者等。在步驟S21011中將自己的身份從跟隨者切換為候選者,準(zhǔn)備發(fā)起投票,所述的投票榜可以用來記錄誰給誰投過票。在步驟S2102中,驗(yàn)證節(jié)點(diǎn)將當(dāng)前時隙號遞增,可以往前遞增I,并給自己投一票,表示自己認(rèn)同自己成為當(dāng)前領(lǐng)導(dǎo)者。同時向其他節(jié)點(diǎn)發(fā)起投票請求,希望其他節(jié)點(diǎn)也認(rèn)可自己成為當(dāng)前領(lǐng)導(dǎo)者。為了避免無限制地等待其他節(jié)點(diǎn)的投票請求回復(fù)而導(dǎo)致系統(tǒng)停滯不前,可以在發(fā)起投票請求的同時設(shè)置一個隨機(jī)定時器,并注冊超時事件。這里時隙號可以是一個整數(shù)值,可以理解為虛擬時間,其值越大表明其所代表的時間越靠后,候選者每次重新發(fā)起一輪新的投票時本地時隙號都會遞增,例如每次可以加I,然后進(jìn)行后續(xù)投票請求發(fā)起動作,表示虛擬時間向前走了一步。在步驟S2103中,投票請求發(fā)出者等待其他驗(yàn)證節(jié)點(diǎn)的投票請求回復(fù),定時器超時進(jìn)入步驟S2104,接到其他驗(yàn)證節(jié)點(diǎn)投票請求回復(fù)進(jìn)入步驟S2105。在步驟S2104中,一旦定時器超時,觸發(fā)超時事件處理器,超時事件處理器可以處理包括檢查驗(yàn)證節(jié)點(diǎn)當(dāng)前身份是否為候選者及當(dāng)前階段是否處于選舉階段,如果兩者均為是,則驗(yàn)證節(jié)點(diǎn)轉(zhuǎn)向步驟S21011,其他情況下可以直接忽略本次超時事件。在步驟S2105中,接到其他驗(yàn)證節(jié)點(diǎn)的投票請求回復(fù),首先檢查投票對象是否為自己,如果是投票給其他驗(yàn)證節(jié)點(diǎn),則進(jìn)入步驟S2106在投票榜上記錄,返回步驟S2103 ;如果投票對象是自己,接著可以檢查驗(yàn)證節(jié)點(diǎn)當(dāng)前是否處于選舉階段,如果不是,則丟棄該投票請求回復(fù),直接跳過選舉階段的其他操作,此時如果自己是領(lǐng)導(dǎo)者,則還需向該為自己投票的驗(yàn)證節(jié)點(diǎn)發(fā)送確認(rèn)消息,讓該節(jié)點(diǎn)進(jìn)入確認(rèn)階段;如果投票對象是自己,且當(dāng)前處于選舉階段,則進(jìn)入步驟S2107。在步驟S2107中,檢測投票請求回復(fù)是否符合系統(tǒng)的業(yè)務(wù)規(guī)定,如果相符則進(jìn)入步驟S2108,如果不符,并做相應(yīng)處理。在一個示例中,檢測投票請求回復(fù)是否符合系統(tǒng)的業(yè)務(wù)規(guī)定,可以包括檢測應(yīng)用在分布式總賬時投票請求回復(fù)中的賬單號和本地賬單號是否相符??梢宰屬~單號落后的節(jié)點(diǎn)做同步操作。在步驟S2108中,檢查投票請求回復(fù)中是否為已授權(quán),也就是說其他驗(yàn)證節(jié)點(diǎn)回復(fù)投票請求的時候是否同意給自己投一票,如果是則進(jìn)入步驟S2110,否則進(jìn)入步驟S2109。在步驟S2109中,根據(jù)投票請求回復(fù)中的錯誤類型做相應(yīng)處理,例如回復(fù)中的時隙號大于本地的時隙號,則需要更新本地的時隙號,將自己的身份切換為跟隨者,同時給回復(fù)者發(fā)送一個投票回復(fù),表示愿意投他一票,原因是回復(fù)者比自己所處的時間更靠后,自己應(yīng)該以他為準(zhǔn)。在步驟S2110中,檢查投票請求回復(fù)中的時隙號與本地時隙號是否相符,如果不相符,則進(jìn)入步驟S2111,否則進(jìn)入步驟S2112,這里檢測時隙號是否相符的目的是過濾掉對舊的時隙號的投票,這些投票已經(jīng)過時了,是無效的,需要丟棄這樣的投票請求回復(fù)。在步驟S2111中,丟棄本次投票請求回復(fù),返回步驟S2103。在步驟S2012中,在投票榜上記錄自己獲得一票,并修改本地投票計數(shù)器。在步驟S2113中,檢測自己是否已經(jīng)獲得多數(shù)投票,如果是,則進(jìn)入步驟S2114,否則返回步驟S2103;這里的多數(shù)可以是一個門限值具體代表多大比例可通過例如配置文件等方式來指定,增加系統(tǒng)的靈活性。在步驟S2114中,將身份切換為領(lǐng)導(dǎo)者,所處階段切換為確認(rèn)階段,同時向其他驗(yàn)證節(jié)點(diǎn)發(fā)送確認(rèn)消息,表明選舉階段已經(jīng)結(jié)束。
[0028]圖6示出根據(jù)一種實(shí)施例,去中心化共識方法中在選舉階段的流程圖。在步驟S2201中,共識開始后,驗(yàn)證節(jié)點(diǎn)進(jìn)入選舉階段,清理上次的投票信息,例如初始化投票榜,重置當(dāng)前領(lǐng)導(dǎo)者等,并將自己的身份從跟隨者切換為候選者,準(zhǔn)備接收投票;這里的投票榜可以用來記錄誰給誰投過票。在步驟S2202中,驗(yàn)證節(jié)點(diǎn)等待投票請求的到來,接到投票請求之后進(jìn)入步驟S22021根據(jù)系統(tǒng)待共識的業(yè)務(wù)相關(guān)規(guī)定檢測不符情況,并做相應(yīng)處理。例如可以檢測應(yīng)用在分布式總賬時投票回復(fù)中的賬單號和本地賬單號是否相符,如果不符,則需要讓賬單號落后的節(jié)點(diǎn)做同步操作,并發(fā)送錯誤回復(fù),如果相符則進(jìn)入步驟S2203;在一個示例中,檢測投票請求是否符合系統(tǒng)的業(yè)務(wù)規(guī)定,可以包括檢測應(yīng)用在分布式總賬時投票請求中的賬單號和本地賬單號是否相符。在步驟S2203中,判斷節(jié)點(diǎn)當(dāng)前所處階段是否合適。首先判斷是否處于確認(rèn)階段,如果處于確認(rèn)階段,則看自身是否標(biāo)記了當(dāng)前領(lǐng)導(dǎo)者為惡意,主觀上是否認(rèn)為當(dāng)前領(lǐng)導(dǎo)者為惡意節(jié)點(diǎn),如果是,則將當(dāng)前領(lǐng)導(dǎo)者添加到黑名單,轉(zhuǎn)向步驟S22031,否則丟棄當(dāng)前投票請求。在步驟S22031中,檢測是否處于選舉階段,如果是選舉階段且待共識的數(shù)據(jù)已鎖定,則進(jìn)入步驟S2204,其他情況均丟棄當(dāng)前投票請求。在步驟S2204中,判斷本地當(dāng)前時隙號是否大于投票請求中所包含的時隙號,如果大于,則進(jìn)入步驟S2205,否則進(jìn)入步驟S2206。在步驟S2205中,構(gòu)造投票請求,發(fā)送給當(dāng)前處理的投票請求發(fā)送方,請求對方給自己投一票,理由是自己比對方的時隙號大,所處的時間更靠后。在步驟S2206中,如果投票請求者的時隙號大于本地時隙號,那么需要用投票請求者的時隙號更新本地時隙號,并重置已投票標(biāo)志,表示之前沒有投過票,其他情況不做處理,進(jìn)入步驟S2207。在步驟S2207中,判斷已投票標(biāo)志是否為已投票,如果是,表明自己不能再給其他驗(yàn)證節(jié)點(diǎn)投票了,進(jìn)入步驟S2208,否則進(jìn)入步驟S2209。在步驟S2208中,向投票請求者發(fā)送錯誤回復(fù),類型為已投票。在步驟S2209中,將自己身份切換為跟隨者,在投票榜上給投票請求者記上一票,將已投票標(biāo)志置為已投票,并初始化一個隨機(jī)定時器,并注冊超時事件,這里的超時事件處理器是為了防止驗(yàn)證節(jié)點(diǎn)在投票完后,一直得不到其他消息,停滯在選舉階段,轉(zhuǎn)向步驟S2210。在步驟S2210中,判斷當(dāng)前定時器是否超時,如果是,則轉(zhuǎn)向步驟S2211,否則返回步驟S2202。在步驟S2211中,觸發(fā)已經(jīng)注冊的定時器超時處理器,重新發(fā)起投票動作。
[0029]在步驟S300中,驗(yàn)證節(jié)點(diǎn)處在確認(rèn)階段,每個驗(yàn)證節(jié)點(diǎn)會同時擔(dān)任這兩個角色,可以按照跟隨者和領(lǐng)導(dǎo)者兩個角色對該步驟進(jìn)行說明,圖7示出根據(jù)一種實(shí)施例,去中心化共識方法中確認(rèn)階段的流程圖。在步驟S3101中,等待確認(rèn)的領(lǐng)導(dǎo)者驗(yàn)證節(jié)點(diǎn)可以根據(jù)本地所收集的待共識數(shù)據(jù)生成狀態(tài)信息,并發(fā)送給所有的跟隨者??梢愿鶕?jù)待共識數(shù)據(jù)生成哈希結(jié)果的集合,對哈希集合生成總體哈希值。一種示例中,可以為每條待共識的數(shù)據(jù)生成其對應(yīng)的哈希值,形成一個哈希值列表,然后列表整體做哈希,生成總體哈希值,并用該哈希值來表征本地數(shù)據(jù)的狀態(tài),構(gòu)造確認(rèn)消息發(fā)送給所有跟隨者。這里可以理解為,系統(tǒng)中大部分節(jié)點(diǎn)所收集到的待共識數(shù)據(jù)列表會是一致的,因此只需要檢查所有數(shù)據(jù)的整體哈希值是否一致即可知道兩個節(jié)點(diǎn)的原始數(shù)據(jù)是否一致,數(shù)據(jù)量小,效率高。在步驟S3102中,等待跟隨者的回復(fù)消息。在步驟S3103中,當(dāng)收到回復(fù)消息之后,查看消息中的類型,如果是對領(lǐng)導(dǎo)者身份的確認(rèn)消息,進(jìn)入步驟S3107,否則進(jìn)入步驟S3104。在步驟S3104中,查看消息中的類型,如果是請求所有待共識數(shù)據(jù)的哈希列表,進(jìn)入步驟S3106,否則進(jìn)入步驟S3105;所述的列表中可以包含每條待共識數(shù)據(jù)的哈希值。在步驟S3105中,發(fā)送跟隨者需要的待共識原始數(shù)據(jù);進(jìn)入這一步表明領(lǐng)導(dǎo)者收集到的某幾條待共識數(shù)據(jù)未被回復(fù)消息的跟隨者收集到,這是允許的,因?yàn)橄到y(tǒng)中擴(kuò)散的待共識數(shù)據(jù),某些節(jié)點(diǎn)會由于網(wǎng)絡(luò)等原因錯過了。因此需要根據(jù)跟隨者發(fā)過來的哈希值列表從領(lǐng)導(dǎo)者本地取出對應(yīng)的原始共識數(shù)據(jù),并發(fā)送給跟隨者。為了性能上的考慮,領(lǐng)導(dǎo)者可以將每一次待共識的原始數(shù)據(jù)按照一定格式存儲到內(nèi)存,例如使用每次共識的唯一標(biāo)號來標(biāo)識。在步驟S3106中,發(fā)送跟隨者需待共識數(shù)據(jù)的哈希列表,進(jìn)入步驟S3102。進(jìn)入這一步表明領(lǐng)導(dǎo)者和回復(fù)消息的跟隨者所收集的待共識數(shù)據(jù)列表不一致,跟隨者需要進(jìn)一步校驗(yàn)領(lǐng)導(dǎo)者的身份合法性。這里發(fā)送哈希值而不是原始數(shù)據(jù),同樣是出于性能的考慮,可以減小數(shù)據(jù)量,提高運(yùn)行速度。在步驟S3107中,可以將回復(fù)確認(rèn)計數(shù)器加1,進(jìn)入步驟S3108。在步驟S3108總,檢查回復(fù)確認(rèn)計數(shù)器是否滿足門限值,如果不滿足,返回步驟S3102,否則進(jìn)入步驟S3109。這里的門限值具體代表多大比例可通過例如配置文件等方式來指定,增加系統(tǒng)的靈活性。在步驟S3109,清理確認(rèn)階段的臨時數(shù)據(jù),例如回復(fù)確認(rèn)計數(shù)器等,結(jié)束確認(rèn)階段,并將自己的階段切換到接受階段。
[0030]圖8示出根據(jù)一種實(shí)施例,去中心化共識方法中確認(rèn)階段的流程圖。在步驟S3201中,跟隨者驗(yàn)證節(jié)點(diǎn)可以將本地所收集的每條待共識數(shù)據(jù)生成哈希結(jié)果,形成一個哈希集,等待領(lǐng)導(dǎo)者發(fā)送確認(rèn)消息。在步驟S3202中,進(jìn)行消息篩選,可以根據(jù)消息中的類型判斷是何種消息,例如如果是狀態(tài)信息,則轉(zhuǎn)向步驟S3203,如果是哈希列表信息,則轉(zhuǎn)向步驟S3207,如果是原始數(shù)據(jù)列表信息,則轉(zhuǎn)向步驟S3212。在步驟S3203中,判斷節(jié)點(diǎn)之前是否已收到過狀態(tài)確認(rèn)消息,如果收到過,則轉(zhuǎn)向步驟S3204,否則轉(zhuǎn)向步驟S3205。在步驟S3204中,檢測節(jié)點(diǎn)兩次收到的狀態(tài)確認(rèn)消息是否一致,如果一致則轉(zhuǎn)向步驟S3205,否則轉(zhuǎn)向步驟S3208,原因是當(dāng)前領(lǐng)導(dǎo)者發(fā)出的狀態(tài)消息不一致會導(dǎo)致系統(tǒng)無法最終達(dá)成相同的一致。同樣,在收到哈希列表信息和原始數(shù)據(jù)列表信息之后也需要檢查之前是否已經(jīng)收到過同一領(lǐng)導(dǎo)者相同類型的消息,如果收到過也是需要去檢測一致性,防止領(lǐng)導(dǎo)者向不同節(jié)點(diǎn)擴(kuò)散不同數(shù)據(jù)集信息,從而破壞系統(tǒng)的一致性。在步驟S3205中,可以比較接收到的領(lǐng)導(dǎo)者的狀態(tài)信息和本地是否一致,如果一致,則轉(zhuǎn)向步驟S3211,否則轉(zhuǎn)向步驟S3206。在步驟S506中,請求當(dāng)前領(lǐng)導(dǎo)者發(fā)送其本地所存儲的待共識數(shù)據(jù)的哈希值列表的集合,并轉(zhuǎn)向步驟S3201。進(jìn)入這一步的原因是領(lǐng)導(dǎo)者的狀態(tài)和本地狀態(tài)不一致,也就是說兩個節(jié)點(diǎn)所收集到的待共識數(shù)據(jù)集不相同,需要做進(jìn)一步驗(yàn)證。在步驟S3207,可以判斷所收到的數(shù)據(jù)哈希值列表長度是否滿足閾值,如果滿足則轉(zhuǎn)向步驟S3209,否則轉(zhuǎn)向步驟S3208。這里是為了防止惡意領(lǐng)導(dǎo)者只發(fā)送其本地的部分有效待共識數(shù)據(jù),拖慢整個系統(tǒng)的效率,需要根據(jù)業(yè)務(wù)經(jīng)驗(yàn),設(shè)定閾值,假定在系統(tǒng)中的所有節(jié)點(diǎn)在最壞情況下至少可以收集到多少待共識的數(shù)據(jù),一旦領(lǐng)導(dǎo)者發(fā)過來的數(shù)據(jù)量少于這個門限值,就認(rèn)定當(dāng)前領(lǐng)導(dǎo)者是惡意,需要重新選舉領(lǐng)導(dǎo)者。即使當(dāng)前領(lǐng)導(dǎo)者不是惡意的,少于閾值表明該節(jié)點(diǎn)的網(wǎng)絡(luò)狀況等不足以支撐系統(tǒng)正常運(yùn)行,同樣也是要認(rèn)為他是惡意的節(jié)點(diǎn)。在步驟S3208中,首先在本地將當(dāng)前領(lǐng)導(dǎo)者置為惡意,然后向系統(tǒng)中其他節(jié)點(diǎn)報告該消息。在步驟S3209中,可以檢查領(lǐng)導(dǎo)者發(fā)過來的哈希值列表集合中的所有哈希值是否都在本地哈希集中,如果都在,表明領(lǐng)導(dǎo)者所收集的數(shù)據(jù)本節(jié)點(diǎn)都有,應(yīng)該通過領(lǐng)導(dǎo)者的身份驗(yàn)證,轉(zhuǎn)向步驟S3211,否則指向步驟S3210。在步驟S3210中,請求當(dāng)前領(lǐng)導(dǎo)者發(fā)送其本地所存儲的待共識原始數(shù)據(jù)列表,并轉(zhuǎn)向步驟S3201。進(jìn)入這一步的原因是領(lǐng)導(dǎo)者發(fā)送的數(shù)據(jù)哈希值列表中有某些哈希值本節(jié)點(diǎn)沒有,也就是說某些數(shù)據(jù)本節(jié)點(diǎn)未收集到,需要向領(lǐng)導(dǎo)者請求原始數(shù)據(jù),做進(jìn)一步驗(yàn)證。在步驟S3211中,向當(dāng)前領(lǐng)導(dǎo)者回復(fù)身份驗(yàn)證通過消息,表示同意以當(dāng)前領(lǐng)導(dǎo)者的狀態(tài)信息作為系統(tǒng)一致性的結(jié)果。在步驟S3212,判斷所收到的原始數(shù)據(jù)列表中每條數(shù)據(jù)是否都合法,如果合法則轉(zhuǎn)向步驟S3211,否則轉(zhuǎn)向步驟S3208。
[0031]根據(jù)一種實(shí)施例,用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的裝置,可以包括用于多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù)。用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)。用于如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法。用于如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法。用于第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新。一種示例中,用于多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù)的部分可以設(shè)置在消息處理模塊中。用于如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法;用于如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法;以及用于第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新的部分可以設(shè)置在共識核心模塊中,所述的共識核心模塊可以包括選舉模塊、確認(rèn)模塊以及接受模塊,該選舉模塊,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn);確認(rèn)模塊,用于如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法。用于如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法。接受模塊,可以用于第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新。該共識核心模塊主要負(fù)責(zé)執(zhí)行驗(yàn)證節(jié)點(diǎn)內(nèi)的共識核心處理機(jī)制。消息處理模塊主要負(fù)責(zé)與其他驗(yàn)證節(jié)點(diǎn)進(jìn)行消息交互,可以包括消息發(fā)送,接收,過濾及分發(fā)三個子模塊。
[0032]消息發(fā)送子模塊可以負(fù)責(zé)將驗(yàn)證節(jié)點(diǎn)要發(fā)送給其他驗(yàn)證節(jié)點(diǎn)的消息按照既定格式封裝,在實(shí)現(xiàn)中可以參考HTTP協(xié)議,將消息分為消息頭和消息體,消息頭格式固定且與消息體分離,同時采用protobuf等工具對消息序列化,便于消息接收方底層知道如何解釋接收到的字節(jié)信息,封裝之后再通過P2P方式發(fā)送出去。
[0033]消息接收子模塊可以負(fù)責(zé)監(jiān)聽其他驗(yàn)證節(jié)點(diǎn)發(fā)過來的消息,并從中解析出消息內(nèi)容,在實(shí)現(xiàn)中可采用epoll來實(shí)現(xiàn)監(jiān)聽,當(dāng)有消息到來時,消息接收子模塊被喚醒,按照既定消息格式去處理消息接收和解釋已收到的字節(jié)信息,并將解釋后的內(nèi)容傳送給消息過濾及分發(fā)子模塊。
[0034]消息過濾及分發(fā)子模塊可以負(fù)責(zé)按照既定規(guī)則對消息做過濾處理,并將符合條件的消息封裝成事件,分發(fā)給特定的事件處理器處理。所述的既定規(guī)則例如可以是消息發(fā)送者是否是自己需要的、消息是否已經(jīng)接收過了等等。
[0035]圖9示出根據(jù)一個實(shí)施例的用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的裝置的結(jié)構(gòu)示意圖。該去中心化共識裝置還可以包括配置管理模塊,可以負(fù)責(zé)為驗(yàn)證節(jié)點(diǎn)的運(yùn)行提供配置信息,并在接收到配置更改消息后,做出更改處理,讓節(jié)點(diǎn)相關(guān)模塊重啟,保證節(jié)點(diǎn)的運(yùn)行按照既定配置進(jìn)行,例如:利用配置文件等方式來設(shè)置選舉階段和確認(rèn)階段的閾值,作為執(zhí)行條件,在返回結(jié)果大于或等于閾值后執(zhí)行相應(yīng)操作。還可以配置驗(yàn)證節(jié)點(diǎn)的標(biāo)識。在實(shí)現(xiàn)中可采用多種方式,例如web方式:通過瀏覽器展示節(jié)點(diǎn)當(dāng)前的配置信息,使用者可根據(jù)需要改變配置信息,并提交到外部通信模塊,由外部通信模塊轉(zhuǎn)給配置模塊進(jìn)行處理。
[0036]根據(jù)一個實(shí)施例,去中心化共識裝置還可以包括輔助處理模塊。該模塊主要包括一些各個模塊共用的組件和工具,如日志處理,加密解密,緩存處理等。其中日志處理負(fù)責(zé)按照既定格式記錄節(jié)點(diǎn)的運(yùn)行信息,可采用文件或者數(shù)據(jù)庫等形式存儲;加密解密負(fù)責(zé)消息的簽名及驗(yàn)證,節(jié)點(diǎn)身份驗(yàn)證等;緩存處理負(fù)責(zé)緩存節(jié)點(diǎn)的狀態(tài)等有關(guān)信息,可采用分布式存儲系統(tǒng)即key-value內(nèi)存數(shù)據(jù)庫實(shí)現(xiàn)。該系統(tǒng)查詢速度快、存放數(shù)據(jù)量大、支持高并發(fā),非常適合通過主鍵進(jìn)行查詢,但不能進(jìn)行復(fù)雜的條件查詢。
[0037]根據(jù)一個實(shí)施例,去中心化共識裝置還可以包括外部通信模塊,用于提供通信接口來與外部進(jìn)行通信,外部通信模塊可以是應(yīng)用程序編程接口模塊例如負(fù)責(zé)提供API接口,通過更新接口與瀏覽器相連接,供系統(tǒng)內(nèi)外交互,系統(tǒng)外操作者可通過該模塊與系統(tǒng)內(nèi)通信。實(shí)現(xiàn)時可采用多種方式,例如標(biāo)準(zhǔn)的web方式:設(shè)計RESTful API,操作者可在瀏覽器端獲取系統(tǒng)當(dāng)前狀態(tài)信息,也可向系統(tǒng)發(fā)送特定指令,讓系統(tǒng)執(zhí)行某些特定操作。
[0038]根據(jù)一種實(shí)施例,去中心化共識系統(tǒng)包括多個前述的去中心化共識裝置。在去中心化共識系統(tǒng)可以包括由多個中心化共識裝置組成的驗(yàn)證池,每個中心化共識裝置可以理解為一個驗(yàn)證節(jié)點(diǎn),這里的驗(yàn)證池可以理解為專門負(fù)責(zé)校驗(yàn)需確認(rèn)的數(shù)據(jù)并達(dá)成共識的驗(yàn)證節(jié)點(diǎn)構(gòu)成的驗(yàn)證池,去中心化共識系統(tǒng),將需要確認(rèn)的數(shù)據(jù)例如交易、電子證據(jù)、數(shù)字記錄等任何形式的電子數(shù)據(jù)發(fā)送給驗(yàn)證池中的所有驗(yàn)證節(jié)點(diǎn),驗(yàn)證節(jié)點(diǎn)盡可能多地收集并存放本輪共識過程需要確認(rèn)的所有數(shù)據(jù),然后開始執(zhí)行共識過程。
[0039]圖10示出根據(jù)本發(fā)明一個實(shí)施例的去中心化共識的裝置的結(jié)構(gòu)示意圖。處理設(shè)備可以采用通用計算機(jī)系統(tǒng)結(jié)構(gòu),計算機(jī)系統(tǒng)可具體是基于處理器的計算機(jī)。所述處理設(shè)備實(shí)體包括輸入輸出I/O接口 101、存儲器102、至少一個處理器103和至少一個通信接口 104。其中,輸入輸出I/O接口 101、存儲器102、至少一個處理器103和至少一個通信接口 104之間通過通信總線105連接。所述I/O接口 101,用于接收來自用戶設(shè)備的文本數(shù)據(jù),并將所述文本數(shù)據(jù)傳輸給所述處理器103,其中,所述文本數(shù)據(jù)使用結(jié)構(gòu)化查詢語言SQL形式表示。處理器103可以是一個通用中央處理器(CHJ),微處理器,特定應(yīng)用集成電路(applicat1n-specific integrated circuit,ASIC),或一個或多個用于控制本發(fā)明方案程序執(zhí)行的集成電路。其中,所述通信總線105可包括一通路,在上述組件之間傳送信息。所述通信接口104,使用任何收發(fā)器一類的裝置,用于與其他設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(Wireless Local Area Networks,WLAN)等。計算機(jī)系統(tǒng)包括一個或多個存儲器102,可以是只讀存儲器(read-only memory,ROM)或可存儲靜態(tài)信息和指令的其他類型的靜態(tài)存儲設(shè)備,隨機(jī)存取存儲器(random access memory,RAM)或者可存儲信息和指令的其他類型的動態(tài)存儲設(shè)備,也可以是電可擦可編程只讀存儲器(ElectricallyErasable Programmable Read-Only Memory,EEPR0M)、只讀光盤(Compact Disc Read-Only Memory,⑶-ROM)或其他光盤存儲、光碟存儲(包括壓縮光碟、激光碟、光碟、數(shù)字通用光碟、藍(lán)光光碟等)、磁盤存儲介質(zhì)或者其他磁存儲設(shè)備、或者能夠用于攜帶或存儲具有指令或數(shù)據(jù)結(jié)構(gòu)形式的期望的程序代碼并能夠由計算機(jī)存取的任何其他介質(zhì),但不限于此。這些存儲器102通過通信總線105與處理器103相連接。其中,所述存儲器102用于存儲執(zhí)行本發(fā)明方案的應(yīng)用程序代碼,執(zhí)行本發(fā)明方案的應(yīng)用程序代碼保存在存儲器中,并由處理器103來控制執(zhí)行。所述處理器103用于執(zhí)行所述存儲器102中存儲的應(yīng)用程序。
[0040]根據(jù)一種實(shí)施例,用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的方法,可以假設(shè)系統(tǒng)中有5個節(jié)點(diǎn)(A,B,C,D,E),其中C節(jié)點(diǎn)是惡意節(jié)點(diǎn),其構(gòu)造了一個惡意交易6。在共識開始前系統(tǒng)中提交了5個交易(1,2,3,4,5),每個節(jié)點(diǎn)都只收到了其中4個(A:l,2,3,43:1,2,3,4,(::1,2,4,6,0:2,3,4,54:1,2,4,5)。現(xiàn)在進(jìn)入選舉階段4,8,(:率先成為候選者,他們各自投自己一票,并向其他節(jié)點(diǎn)發(fā)起投票請求,A得到D的投票,C獲得E的投票,其中,D,E在未成為候選者之前已經(jīng)給其他節(jié)點(diǎn)投票了,所以不會再將自己身份切換為候選者。此輪選舉沒有節(jié)點(diǎn)勝出,所有候選者進(jìn)入隨機(jī)睡眠。由于C節(jié)點(diǎn)是惡意節(jié)點(diǎn),它會不按既定規(guī)則行動,提前從睡眠中醒來,并在新的時隙號向其他節(jié)點(diǎn)發(fā)起投票請求,其他節(jié)點(diǎn)接到投票請求后發(fā)現(xiàn)時隙號比本地時隙號大,則均給C節(jié)點(diǎn)投票,C節(jié)點(diǎn)成為領(lǐng)導(dǎo)者,進(jìn)入確認(rèn)階段。C節(jié)點(diǎn)將交易集整體做哈希運(yùn)算,并將哈希值發(fā)送給其他節(jié)點(diǎn),其他節(jié)點(diǎn)由于和C節(jié)點(diǎn)收集的交易集不一致,且其他節(jié)點(diǎn)均沒有收集交易6,所以其他節(jié)點(diǎn)將會向C節(jié)點(diǎn)請求交易原始數(shù)據(jù),那么惡意交易6將會被其他節(jié)點(diǎn)驗(yàn)證為非法,從而其他節(jié)點(diǎn)均會向系統(tǒng)發(fā)送當(dāng)前領(lǐng)導(dǎo)者惡意的報告,并且每個節(jié)點(diǎn)會去計數(shù),看有多少節(jié)點(diǎn)認(rèn)為當(dāng)前領(lǐng)導(dǎo)者是惡意的。假設(shè)A節(jié)點(diǎn)最先收到了除A、C以外的兩個節(jié)點(diǎn)的報告,滿足重新選舉的閾值條件,這里的閾值具體代表多大比例可通過例如配置文件等方式來指定,增加系統(tǒng)的靈活性。于是A節(jié)點(diǎn)退回到選舉階段,重新發(fā)起選舉,其他節(jié)點(diǎn)接到選舉投票請求時發(fā)現(xiàn)自己也認(rèn)為當(dāng)前領(lǐng)導(dǎo)者是惡意的,于是B,D,E會給A投票,A節(jié)點(diǎn)成為新的領(lǐng)導(dǎo)者,進(jìn)入確認(rèn)階段,并向其他節(jié)點(diǎn)發(fā)送其交易集的哈希運(yùn)算結(jié)果。B節(jié)點(diǎn)接到A發(fā)來的狀態(tài)信息,發(fā)現(xiàn)和自己本地狀態(tài)結(jié)果一樣,則直接回復(fù)身份驗(yàn)證通過,D和E會向A請求交易數(shù)據(jù)集中每條交易數(shù)據(jù)分別做哈希運(yùn)算得到的哈希列表,并最終會請求交易原始數(shù)據(jù)(D沒有交易I,E沒有交易3),然后做驗(yàn)證,并回復(fù)身份驗(yàn)證通過。當(dāng)A收到超過閾值的身份驗(yàn)證通過的回復(fù)之后,會進(jìn)入接受階段,向其他節(jié)點(diǎn)發(fā)送接受消息,并執(zhí)行交易集(1,2,3,4),其他節(jié)點(diǎn)接到接受消息后也會執(zhí)行交易集(1,2,3,4),從而使得系統(tǒng)中大部分節(jié)點(diǎn)的狀態(tài)達(dá)成一個正確的一致性結(jié)果。
[0041 ]應(yīng)當(dāng)注意,在權(quán)利要求中,單詞“包含”或“包括”并不排除存在未列在權(quán)利要求中的元件或組件。位于元件或組件之前的冠詞“一”或“一個”也并不排除存在多個這樣的元件或組件的情況。
[0042]此外,還應(yīng)當(dāng)注意,本說明書中使用的語言主要是為了可讀性和教導(dǎo)的目的而選擇的,而不是為了解釋或者限定本發(fā)明的主題而選擇的。因此,在不偏離所附權(quán)利要求書的范圍和精神的情況下,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說許多修改和變更都是顯而易見的。關(guān)于本發(fā)明的范圍,說明書中所做的描述都是說明性的,而非限制性的,本發(fā)明的范圍由所附權(quán)利要求書限定。
【主權(quán)項】
1.一種用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的方法,包括: 所述多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù); 第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在所述多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)占.V , 如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法; 如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法;以及 第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新。2.如權(quán)利要求1所述的方法,其中,每個驗(yàn)證節(jié)點(diǎn)被配置有時隙號。3.如權(quán)利要求2所述的方法,還包括:第一驗(yàn)證節(jié)點(diǎn)在投票之前執(zhí)行初始化操作, 其中,所述初始化操作包括以下至少一項:將第一驗(yàn)證節(jié)點(diǎn)的身份設(shè)置為跟隨者;將第一驗(yàn)證節(jié)點(diǎn)的時隙號設(shè)定為O;將所述待共識數(shù)據(jù)鎖定。4.如權(quán)利要求2所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的步驟包括: 將第一驗(yàn)證節(jié)點(diǎn)的身份設(shè)置為候選者; 將第一驗(yàn)證節(jié)點(diǎn)的時隙號遞增; 投自己一票; 向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)發(fā)起投票請求,該投票請求表明請求各個其他驗(yàn)證節(jié)點(diǎn)認(rèn)可將第一驗(yàn)證節(jié)點(diǎn)選舉為領(lǐng)導(dǎo)者; 接收其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)對所述投票請求的投票請求回復(fù); 如果投票請求回復(fù)表明第二驗(yàn)證節(jié)點(diǎn)認(rèn)可將第一驗(yàn)證節(jié)點(diǎn)選舉為領(lǐng)導(dǎo)者,則遞增本地投票計數(shù)器;以及 檢測本地投票計數(shù)器的計數(shù)值以確定第一驗(yàn)證節(jié)點(diǎn)是否被選舉為領(lǐng)導(dǎo)者。5.如權(quán)利要求4所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的步驟還包括以下至少一項操作: 在發(fā)起投票請求的同時設(shè)置定時器,用于監(jiān)視投票請求回復(fù)的超時; 檢測投票請求回復(fù)是否符合所述系統(tǒng)的業(yè)務(wù)規(guī)定; 如果第二驗(yàn)證節(jié)點(diǎn)的時隙號大于第一驗(yàn)證節(jié)點(diǎn)的時隙號,則丟棄該投票請求回復(fù),并向第二驗(yàn)證節(jié)點(diǎn)投一票; 如果投票請求回復(fù)針對的是較小時隙號的投票,則丟棄該投票請求回復(fù)。6.如權(quán)利要求2所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的步驟包括: 將第一驗(yàn)證節(jié)點(diǎn)的身份設(shè)置為候選者; 接收來自其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)的投票請求; 如果第一驗(yàn)證節(jié)點(diǎn)的時隙號大于第二驗(yàn)證節(jié)點(diǎn)的時隙號,則向第二驗(yàn)證節(jié)點(diǎn)發(fā)起投票請求,該投票請求表明請求第二驗(yàn)證節(jié)點(diǎn)認(rèn)可將第一驗(yàn)證節(jié)點(diǎn)選舉為領(lǐng)導(dǎo)者; 如果第一驗(yàn)證節(jié)點(diǎn)的時隙號不大于第二驗(yàn)證節(jié)點(diǎn)的時隙號,則用第二驗(yàn)證節(jié)點(diǎn)的時隙號更新第一驗(yàn)證節(jié)點(diǎn)的時隙號,并向第二驗(yàn)證節(jié)點(diǎn)投一票。7.如權(quán)利要求6所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)被配置有已投票標(biāo)志,以避免第一驗(yàn)證節(jié)點(diǎn)重復(fù)投票。8.如權(quán)利要求6所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的步驟還包括以下至少一項操作: 檢測所接收的投票請求是否符合所述系統(tǒng)的業(yè)務(wù)規(guī)定; 在投票的同時設(shè)置定時器,以監(jiān)視投票回復(fù)的超時。9.如權(quán)利要求6所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的步驟還包括: 在對第一驗(yàn)證節(jié)點(diǎn)的時隙號和第二驗(yàn)證節(jié)點(diǎn)的時隙號進(jìn)行比較之前,檢測當(dāng)前是否處于選舉階段以及所述待共識的數(shù)據(jù)是否處于鎖定狀態(tài)。10.如權(quán)利要求6所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的步驟還包括: 判斷第一驗(yàn)證節(jié)點(diǎn)是否將當(dāng)前領(lǐng)導(dǎo)者標(biāo)記為惡意節(jié)點(diǎn)。11.如權(quán)利要求1所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法的步驟包括: 根據(jù)所述待共識數(shù)據(jù)生成哈希結(jié)果的集合; 從領(lǐng)導(dǎo)者接收確認(rèn)消息; 確定所接收的確認(rèn)消息的類型; 根據(jù)所述類型判定所選舉的領(lǐng)導(dǎo)者是否合法。12.如權(quán)利要求11所述的方法,其中,如果所述類型是狀態(tài)信息,則第一驗(yàn)證節(jié)點(diǎn)執(zhí)行以下操作: 如果第一驗(yàn)證節(jié)點(diǎn)此前收到過狀態(tài)確認(rèn)消息,并且所述狀態(tài)信息與所述狀態(tài)確認(rèn)消息不一致,則報告所選舉的領(lǐng)導(dǎo)者為惡意節(jié)點(diǎn); 如果第一驗(yàn)證節(jié)點(diǎn)此前未收到過狀態(tài)確認(rèn)消息,并且所述狀態(tài)信息與第一驗(yàn)證節(jié)點(diǎn)本地的狀態(tài)信息不一致,則請求所選舉的領(lǐng)導(dǎo)者發(fā)送其存儲的待共識數(shù)據(jù)的哈希結(jié)果;否則判定所選舉的領(lǐng)導(dǎo)者合法。13.如權(quán)利要求11所述的方法,其中,如果所述類型是數(shù)據(jù)的哈希列表,則第一驗(yàn)證節(jié)點(diǎn)執(zhí)行以下操作: 如果哈希列表的長度不滿足閾值,則報告所選舉的領(lǐng)導(dǎo)者為惡意節(jié)點(diǎn); 如果哈希列表的長度滿足所述閾值,但包含不在所述哈希結(jié)果的集合中的元素,則請求所選舉的領(lǐng)導(dǎo)者發(fā)送其存儲的待共識數(shù)據(jù)的哈希結(jié)果;否則判定所選舉的領(lǐng)導(dǎo)者合法。14.如權(quán)利要求11所述的方法,其中,如果所述類型是數(shù)據(jù)列表,則第一驗(yàn)證節(jié)點(diǎn)執(zhí)行以下操作: 如果所述數(shù)據(jù)列表中的每條數(shù)據(jù)都合法,則判定所選舉的領(lǐng)導(dǎo)者合法;否則 報告所選舉的領(lǐng)導(dǎo)者為惡意節(jié)點(diǎn)。15.如權(quán)利要求1所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法的步驟包括: 根據(jù)所述待共識數(shù)據(jù)生成哈希結(jié)果的集合; 對所述集合生成總體哈希值; 向所述其他驗(yàn)證節(jié)點(diǎn)發(fā)送狀態(tài)信息,所述狀態(tài)信息包括所述總體哈希值; 接收所述其他驗(yàn)證節(jié)點(diǎn)各自的回復(fù)消息; 當(dāng)所述回復(fù)消息中對第一驗(yàn)證節(jié)點(diǎn)的確認(rèn)消息的數(shù)目滿足閾值時,判定為第一驗(yàn)證節(jié)點(diǎn)合法。16.如權(quán)利要求15所述的方法,還包括: 如果所述其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)的回復(fù)消息請求待共識數(shù)據(jù)的哈希列表,貝1J向第二驗(yàn)證節(jié)點(diǎn)發(fā)送所述哈希結(jié)果的集合。17.如權(quán)利要求15所述的方法,還包括: 如果所述其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)的回復(fù)消息請求待共識數(shù)據(jù)的原始數(shù)據(jù),則向第二驗(yàn)證節(jié)點(diǎn)發(fā)送所述待共識數(shù)據(jù)。18.如權(quán)利要求4所述的方法,其中,第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的步驟還包括: 如果某一時隙沒有選出領(lǐng)導(dǎo)者,則使第一驗(yàn)證節(jié)點(diǎn)進(jìn)入睡眠狀態(tài); 第一驗(yàn)證節(jié)點(diǎn)在新的時隙號重新發(fā)起投票。19.一種用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的裝置,包括: 用于由所述多個驗(yàn)證節(jié)點(diǎn)中的第一驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù)的模塊; 用于所述第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票,以在所述多個驗(yàn)證節(jié)點(diǎn)中選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)的模塊; 用于如果被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法的模塊; 用于如果未被選舉為領(lǐng)導(dǎo)者,則第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法的模塊;以及 用于第一驗(yàn)證節(jié)點(diǎn)執(zhí)行狀態(tài)更新的模塊。20.如權(quán)利要求19所述的裝置,還包括配置管理模塊,用于為每個驗(yàn)證節(jié)點(diǎn)配置時隙號。21.如權(quán)利要求20所述的裝置,其中,所述配置管理模塊還包括用于第一驗(yàn)證節(jié)點(diǎn)在投票之前執(zhí)行初始化操作的初始化模塊, 其中,所述初始化模塊包括以下至少一項:用于將第一驗(yàn)證節(jié)點(diǎn)的身份設(shè)置為跟隨者的模塊;用于將第一驗(yàn)證節(jié)點(diǎn)的時隙號設(shè)定為O的模塊;用于將所述待共識數(shù)據(jù)鎖定的模塊。22.如權(quán)利要求20所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊包括: 用于將第一驗(yàn)證節(jié)點(diǎn)的身份設(shè)置為候選者的模塊; 用于將第一驗(yàn)證節(jié)點(diǎn)的時隙號遞增的模塊; 用于投自己一票的模塊; 用于向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)發(fā)起投票請求的模塊,該投票請求表明請求各個其他驗(yàn)證節(jié)點(diǎn)認(rèn)可將第一驗(yàn)證節(jié)點(diǎn)選舉為領(lǐng)導(dǎo)者; 用于接收其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)對所述投票請求的投票請求回復(fù)的模塊;用于如果投票請求回復(fù)表明第二驗(yàn)證節(jié)點(diǎn)認(rèn)可將第一驗(yàn)證節(jié)點(diǎn)選舉為領(lǐng)導(dǎo)者,則遞增本地投票計數(shù)器的模塊;以及 用于檢測本地投票計數(shù)器的計數(shù)值以確定第一驗(yàn)證節(jié)點(diǎn)是否被選舉為領(lǐng)導(dǎo)者的模塊。23.如權(quán)利要求22所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊還包括以下至少一項: 用于在發(fā)起投票請求的同時設(shè)置定時器,用于監(jiān)視投票請求回復(fù)的超時的模塊; 用于檢測投票請求回復(fù)是否符合所述系統(tǒng)的業(yè)務(wù)規(guī)定的模塊; 用于如果第二驗(yàn)證節(jié)點(diǎn)的時隙號大于第一驗(yàn)證節(jié)點(diǎn)的時隙號,則丟棄該投票請求回復(fù),并向第二驗(yàn)證節(jié)點(diǎn)投一票的模塊; 用于如果投票請求回復(fù)針對的是較小時隙號的投票,則丟棄該投票請求回復(fù)的模塊。24.如權(quán)利要求20所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊包括: 用于將第一驗(yàn)證節(jié)點(diǎn)的身份設(shè)置為候選者的模塊; 用于接收來自其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)的投票請求的模塊; 用于如果第一驗(yàn)證節(jié)點(diǎn)的時隙號大于第二驗(yàn)證節(jié)點(diǎn)的時隙號,則向第二驗(yàn)證節(jié)點(diǎn)發(fā)起投票請求的模塊,該投票請求表明請求第二驗(yàn)證節(jié)點(diǎn)認(rèn)可將第一驗(yàn)證節(jié)點(diǎn)選舉為領(lǐng)導(dǎo)者;用于如果第一驗(yàn)證節(jié)點(diǎn)的時隙號不大于第二驗(yàn)證節(jié)點(diǎn)的時隙號,則用第二驗(yàn)證節(jié)點(diǎn)的時隙號更新第一驗(yàn)證節(jié)點(diǎn)的時隙號,并向第二驗(yàn)證節(jié)點(diǎn)投一票的模塊。25.如權(quán)利要求24所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊還包括:用于將第一驗(yàn)證節(jié)點(diǎn)配置有已投票標(biāo)志,以避免第一驗(yàn)證節(jié)點(diǎn)重復(fù)投票的模塊。26.如權(quán)利要求24所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊還包括以下至少一項: 用于檢測所接收的投票請求是否符合所述系統(tǒng)的業(yè)務(wù)規(guī)定的模塊; 用于在投票的同時設(shè)置定時器,以監(jiān)視投票回復(fù)的超時的模塊。27.如權(quán)利要求24所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊還包括: 用于在對第一驗(yàn)證節(jié)點(diǎn)的時隙號和第二驗(yàn)證節(jié)點(diǎn)的時隙號進(jìn)行比較之前,檢測當(dāng)前是否處于選舉階段以及所述待共識的數(shù)據(jù)是否處于鎖定狀態(tài)的模塊。28.如權(quán)利要求24所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊還包括: 用于判斷第一驗(yàn)證節(jié)點(diǎn)是否將當(dāng)前領(lǐng)導(dǎo)者標(biāo)記為惡意節(jié)點(diǎn)的模塊。29.如權(quán)利要求19所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)確認(rèn)所選舉的領(lǐng)導(dǎo)者是否合法的模塊包括: 用于根據(jù)所述待共識數(shù)據(jù)生成哈希結(jié)果的集合的模塊; 用于從領(lǐng)導(dǎo)者接收確認(rèn)消息的模塊; 用于確定所接收的確認(rèn)消息的類型的模塊; 用于根據(jù)所述類型判定所選舉的領(lǐng)導(dǎo)者是否合法的模塊。30.如權(quán)利要求29所述的裝置,其中,如果所述類型是狀態(tài)信息,則所述裝置還包括: 用于如果第一驗(yàn)證節(jié)點(diǎn)此前收到過狀態(tài)確認(rèn)消息,并且所述狀態(tài)信息與所述狀態(tài)確認(rèn)消息不一致,則報告所選舉的領(lǐng)導(dǎo)者為惡意節(jié)點(diǎn)的模塊; 用于如果第一驗(yàn)證節(jié)點(diǎn)此前未收到過狀態(tài)確認(rèn)消息,并且所述狀態(tài)信息與第一驗(yàn)證節(jié)點(diǎn)本地的狀態(tài)信息不一致,則請求所選舉的領(lǐng)導(dǎo)者發(fā)送其存儲的待共識數(shù)據(jù)的哈希結(jié)果的豐旲塊; 用于當(dāng)?shù)谝或?yàn)證節(jié)點(diǎn)此前收到過狀態(tài)確認(rèn)消息,并且所述狀態(tài)信息與所述狀態(tài)確認(rèn)消息不一致和第一驗(yàn)證節(jié)點(diǎn)此前未收到過狀態(tài)確認(rèn)消息,并且所述狀態(tài)信息與第一驗(yàn)證節(jié)點(diǎn)本地的狀態(tài)信息不一致的兩種情況均未發(fā)生時判定所選舉的領(lǐng)導(dǎo)者合法的模塊。31.如權(quán)利要求29所述的裝置,其中,如果所述類型是數(shù)據(jù)的哈希列表,則所述裝置還包括: 用于如果哈希列表的長度不滿足閾值,則報告所選舉的領(lǐng)導(dǎo)者為惡意節(jié)點(diǎn)的模塊; 用于如果哈希列表的長度滿足所述閾值,但包含不在所述哈希結(jié)果的集合中的元素,則請求所選舉的領(lǐng)導(dǎo)者發(fā)送其存儲的待共識數(shù)據(jù)的哈希結(jié)果的模塊; 用于否則判定所選舉的領(lǐng)導(dǎo)者合法的模塊。32.如權(quán)利要求29所述的裝置,其中,如果所述類型是數(shù)據(jù)列表,則所述裝置還包括: 用于如果所述數(shù)據(jù)列表中的每條數(shù)據(jù)都合法,則判定所選舉的領(lǐng)導(dǎo)者合法的模塊; 用于否則 報告所選舉的領(lǐng)導(dǎo)者為惡意節(jié)點(diǎn)的模塊。33.如權(quán)利要求19所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法的模塊包括: 用于根據(jù)所述待共識數(shù)據(jù)生成哈希結(jié)果的集合的模塊; 用于對所述集合生成總體哈希值的模塊; 用于向所述其他驗(yàn)證節(jié)點(diǎn)發(fā)送狀態(tài)信息的模塊,所述狀態(tài)信息包括所述總體哈希值; 用于接收所述其他驗(yàn)證節(jié)點(diǎn)各自的回復(fù)消息的模塊; 用于當(dāng)所述回復(fù)消息中對第一驗(yàn)證節(jié)點(diǎn)的確認(rèn)消息的數(shù)目滿足閾值時,判定為第一驗(yàn)證節(jié)點(diǎn)合法的模塊。34.如權(quán)利要求33所述的裝置,用于第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法的模塊還包括: 用于如果所述其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)的回復(fù)消息請求待共識數(shù)據(jù)的哈希列表,則向第二驗(yàn)證節(jié)點(diǎn)發(fā)送所述哈希結(jié)果的集合的模塊。35.如權(quán)利要求33所述的裝置,用于第一驗(yàn)證節(jié)點(diǎn)向系統(tǒng)中的其他驗(yàn)證節(jié)點(diǎn)要求確認(rèn)其合法的模塊還包括: 用于如果所述其他驗(yàn)證節(jié)點(diǎn)中的第二驗(yàn)證節(jié)點(diǎn)的回復(fù)消息請求待共識數(shù)據(jù)的原始數(shù)據(jù),則向第二驗(yàn)證節(jié)點(diǎn)發(fā)送所述待共識數(shù)據(jù)的模塊。36.如權(quán)利要求22所述的裝置,其中,用于第一驗(yàn)證節(jié)點(diǎn)進(jìn)行投票的模塊還包括: 用于如果某一時隙沒有選出領(lǐng)導(dǎo)者,則使第一驗(yàn)證節(jié)點(diǎn)進(jìn)入睡眠狀態(tài)的模塊; 用于第一驗(yàn)證節(jié)點(diǎn)在新的時隙號重新發(fā)起投票的模塊。37.—種用于在具有多個驗(yàn)證節(jié)點(diǎn)的系統(tǒng)中實(shí)現(xiàn)去中心化共識的方法,包括: 驗(yàn)證節(jié)點(diǎn)接收待共識的數(shù)據(jù); 驗(yàn)證節(jié)點(diǎn)投票選舉出具有領(lǐng)導(dǎo)者身份的驗(yàn)證節(jié)點(diǎn)同時產(chǎn)生跟隨者身份的驗(yàn)證節(jié)點(diǎn); 領(lǐng)導(dǎo)者向跟隨者發(fā)送確認(rèn)消息,并等待確認(rèn)回復(fù)消息; 領(lǐng)導(dǎo)者接收跟隨者返回的確認(rèn)回復(fù)消息,并將返回的確認(rèn)回復(fù)消息與設(shè)定的門限值進(jìn)行比較;以及 收到返回的確認(rèn)回復(fù)消息達(dá)到門限值后,結(jié)束確認(rèn)階段,讓跟隨者更新自己的狀態(tài)。
【文檔編號】H04L12/24GK106060036SQ201610363996
【公開日】2016年10月26日
【申請日】2016年5月26日
【發(fā)明人】蔣海, 鄧波, 翟海濱, 王璟, 趙正涌, 胡楠, 喬肖瑞
【申請人】布比(北京)網(wǎng)絡(luò)技術(shù)有限公司