本發(fā)明涉及區(qū)塊鏈技術(shù),特別是涉及區(qū)塊鏈的共識實現(xiàn)方法區(qū)塊鏈中共識區(qū)塊的生成方法與計算設(shè)備。
背景技術(shù):
2014年開始,比特幣背后的區(qū)塊鏈(blockchain)技術(shù)受到大家關(guān)注,并正式引發(fā)了分布式記賬本(distributedledger)技術(shù)的革新浪潮。公認(rèn)的區(qū)塊鏈的原始文獻(xiàn)是中本聰所撰寫的《比特幣:一種點對點的電子現(xiàn)金系統(tǒng)》,論文的內(nèi)容主要是描述比特幣的實現(xiàn)技術(shù)。在該篇論文中其中,區(qū)塊鏈被描述為用于記錄比特幣交易的賬目歷史。現(xiàn)在看來,區(qū)塊鏈的基本概念包括:
交易(transaction):一次操作,導(dǎo)致賬本狀態(tài)的一次改變,如添加一條記錄;
區(qū)塊(block):記錄一段時間內(nèi)發(fā)生的交易和狀態(tài)結(jié)果,是對當(dāng)前賬本狀態(tài)的一次共識;
鏈(chain):由一個個區(qū)塊按照發(fā)生順序串聯(lián)而成,是整個狀態(tài)變化的日志記錄。如果把區(qū)塊鏈作為一個狀態(tài)機(jī),則每次交易就是試圖改變一次狀態(tài),而每次共識生成的區(qū)塊,就是參與者對于區(qū)塊中所有交易內(nèi)容導(dǎo)致狀態(tài)改變的結(jié)果進(jìn)行確認(rèn)。
和任何分布式系統(tǒng)一樣,區(qū)塊鏈系統(tǒng)會面臨網(wǎng)絡(luò)延遲、傳輸錯誤、軟件錯誤、安全漏洞、黑客入侵等問題,而且去中心化決定了系統(tǒng)中任何一個參與者都不能被完全信任,可能會出現(xiàn)惡意節(jié)點,以及數(shù)據(jù)分歧等問題。
為了防范這些潛在的錯誤,區(qū)塊鏈系統(tǒng)需要一個高效的共識機(jī)制來確保每一個節(jié)點都可以訪問被全網(wǎng)大多數(shù)節(jié)點公認(rèn)的賬本。這個賬本可以是存儲在節(jié)點本地的賬本,也可以是向其他在網(wǎng)節(jié)點發(fā)出請求后可以訪問的賬本。雖然分布式系統(tǒng)中各個節(jié)點如果都能保證以十分強(qiáng)大的性能(零延遲響應(yīng)、無限吞吐量)無故障的運行,則實現(xiàn)共識過程并不復(fù)雜,簡單通過多播過程投票即可。然而,現(xiàn)實中這樣“完美”的系統(tǒng)并不存在,如響應(yīng)請求往往存在時延、網(wǎng)絡(luò)會發(fā)生中斷、節(jié)點會發(fā)生故障、甚至存在惡意節(jié)點故意要破壞系統(tǒng)。一般地,把故障(不響應(yīng))的情況稱為“非拜占庭錯誤”,惡意響應(yīng)的情況稱為“拜占庭錯誤”(對應(yīng)節(jié)點為拜占庭節(jié)點)。
理論上,分布式系統(tǒng)的共識問題是沒有理想解的?,F(xiàn)有的區(qū)塊鏈共識機(jī)制主要包括:pos(proofofstake,權(quán)益證明機(jī)制)、pow(proofofwork,工作量證明)、dpos(delegateproofofstake,股份授權(quán)證明)和pbft(practicalbyzantinefaulttolerance,實用拜占庭容錯)。從概率角度,pbft系列算法是確定的,一旦達(dá)成共識就不可逆轉(zhuǎn);而pow系列算法則是不確定的,隨著時間推移,被推翻的概率越來越小。
pow通過計算來反復(fù)猜測一個數(shù)值(nonce),使得區(qū)塊鏈最后一個區(qū)塊為基礎(chǔ),加上新的交易數(shù)據(jù)hash(散列,或稱為哈希)后的結(jié)果滿足預(yù)設(shè)的條件。保證在一段時間內(nèi),系統(tǒng)中只能出現(xiàn)少數(shù)合法提案。這些少量的合法提案會在網(wǎng)絡(luò)中進(jìn)行廣播,收到的用戶進(jìn)行驗證后會基于它認(rèn)為的最長鏈上繼續(xù)用這個方法構(gòu)造新的區(qū)塊。因此,系統(tǒng)中總是存在分叉(fork)短鏈。所有參與延長區(qū)塊鏈的節(jié)點基于保護(hù)自己的利益只會選擇最長的鏈作為計算的輸入,因此只會有一條鏈成為被公認(rèn)的最長的鏈。
pos是節(jié)點記賬權(quán)的獲得難度與節(jié)點持有的權(quán)益成反比,相對于pow,一定程度上緩解算力競賽造成的資源消耗。這樣生成多個分叉的區(qū)塊是容易的,這樣就大幅降低了分叉攻擊的成本。攻擊者可以制造符合自己利益的支鏈,進(jìn)而在錯誤的支鏈上讓懲罰機(jī)制失效,并和原始的支鏈形成競爭。
dpos類似于董事會投票,每個股東可以將其投票權(quán)授予一名代表。獲票數(shù)最多的前100位代表按既定時間表輪流產(chǎn)生區(qū)塊。每名代表分配到一個時間段來生產(chǎn)區(qū)塊,代理他們進(jìn)行驗證和記賬。其合法性驗證性能、資源消耗和容錯性與pos相似。因為大幅縮小參與驗證和記賬節(jié)點的數(shù)量,共識驗證的時間就更短。dpos無法處理ddos(distributeddenialofservice,分布式拒絕服務(wù))和eclipse攻擊(路由表毒化)安全性問題。
pbft算法及其各種改進(jìn)假定攻擊者數(shù)量在容錯條件下,預(yù)設(shè)的大多數(shù)節(jié)點通過依賴一個選舉過程達(dá)成節(jié)點共識,然后由選舉的節(jié)點按照約定生成區(qū)塊。這個選舉過程會被ddos干擾,同時選舉結(jié)果構(gòu)成單點故障,形成在eclipse攻擊條件,會造成反復(fù)選舉,從而使網(wǎng)絡(luò)共識性能下降。
技術(shù)實現(xiàn)要素:
本發(fā)明的一個目的是去掉節(jié)點的選舉過程,要提供一種高效的拜占庭容錯的共識區(qū)塊的生成方法。
本發(fā)明一個進(jìn)一步的目的是要有效去除ddos和eclipse的攻擊條件。
本發(fā)明另一個進(jìn)一步的目的使得區(qū)塊鏈中不允許出現(xiàn)空塊,從而提高全網(wǎng)的存儲效率。特別地,本發(fā)明提供了一種區(qū)塊鏈中共識區(qū)塊的生成方法,其包括:點對點網(wǎng)絡(luò)中的節(jié)點自愿注冊成為候選節(jié)點,并在點對點網(wǎng)絡(luò)中廣播注冊成為候選節(jié)點的消息;從在網(wǎng)的候選節(jié)點中選出一個子集作為入選節(jié)點子集,并將入選節(jié)點子集隨機(jī)分為記賬節(jié)點子集和審計節(jié)點子集,記賬節(jié)點子集中節(jié)點作為記賬節(jié)點,審計節(jié)點子集中的節(jié)點作為審計節(jié)點;每個記賬節(jié)點分別將交易池中的交易記錄到新建的區(qū)塊中,并在滿足設(shè)定的審計條件后,分別將自身記錄的區(qū)塊打包為候選子塊,向?qū)徲嫻?jié)點子集廣播;每個審計節(jié)點分別根據(jù)預(yù)設(shè)的審計規(guī)則對所有收到的候選子塊進(jìn)行驗證,挑選出唯一的候選子塊,對挑選出的候選子塊添加自身審計戳后在審計節(jié)點子集內(nèi)廣播;每個審計節(jié)點在收到其他審計節(jié)點廣播的挑選結(jié)果后,將自身挑選的候選子塊與其他審計節(jié)點挑選的候選子塊進(jìn)行比較,在確定其他審計節(jié)點挑選的候選子塊更優(yōu)的情況下,重新對更優(yōu)的候選子塊添加自身的審計戳,并拋棄自身挑選的候選子塊,并重新在審計節(jié)點子集內(nèi)廣播;在任一審計節(jié)點確定出某一候選子塊的審計戳數(shù)量超過設(shè)定的審計閾值后,認(rèn)定該審計戳數(shù)量超過設(shè)定的審計閾值的候選子塊成為被收錄的入選區(qū)塊,從而完成一次共識過程。
可選地,從在網(wǎng)的候選節(jié)點中選出一個子集作為入選節(jié)點子集的步驟包括:在網(wǎng)的候選節(jié)點按性能進(jìn)行排序,將此前最近一次得到入選區(qū)塊作為篩選輸入?yún)?shù)從性能排序靠前的候選節(jié)點中隨機(jī)投票選出一個子集作為入選節(jié)點子集。
可選地,候選節(jié)點成為入選節(jié)點子集的入選條件包括以下任意一條或多條:節(jié)點的賬戶余額、節(jié)點的在網(wǎng)歷史記錄、網(wǎng)絡(luò)性能。
可選地,成為入選節(jié)點子集的候選節(jié)點還要求在最近設(shè)定次數(shù)的共識過程中沒有作為記賬節(jié)點。
可選地,設(shè)定的審計條件包括:新建的區(qū)塊的剩余容量不足以填充一條新的交易記錄;新建的區(qū)塊的大小符合區(qū)塊鏈系統(tǒng)預(yù)定義的大小,并且包括上一次達(dá)成共識的入選區(qū)塊的散列值。新建的區(qū)塊包括父塊的散列值;新建的區(qū)塊內(nèi)的交易包括交易發(fā)起者的數(shù)字簽名。
可選地,每個審計節(jié)點分別根據(jù)預(yù)設(shè)的審計規(guī)則對所有收到的候選子塊進(jìn)行驗證的步驟包括:每個審計節(jié)點分別對收到的候選子塊分別進(jìn)行散列運算,得到候選子塊的散列值;對所有收到的候選子塊的散列值進(jìn)行排序,將散列值最大的候選子塊或者散列值最小的候選子塊作為挑選出的候選子塊,并且每個審計節(jié)點將自身挑選的候選子塊與其他審計節(jié)點挑選的候選子塊進(jìn)行比較的步驟包括:將自身挑選的候選子塊的散列值與其他審計節(jié)點挑選的候選子塊的散列值進(jìn)行比較,在確定其他審計節(jié)點挑選的候選子塊的散列值更大或更小的情況下,確定其他審計節(jié)點挑選的候選子塊更優(yōu)。
可選地,在認(rèn)定出入選區(qū)塊之后還包括:廣播入選區(qū)塊,將此前一次的入選區(qū)塊作為父塊寫入?yún)^(qū)塊鏈。
可選地,在完成一次共識后還包括:從候選節(jié)點中重新隨機(jī)增加一定數(shù)量的入選節(jié)點,并從入選節(jié)點子集中剔除相同個數(shù)的入選節(jié)點。
可選地,審計戳包括審計節(jié)點的數(shù)字簽名和記入該審計節(jié)點的審計費;每個記賬節(jié)點構(gòu)造的候選子塊附加有該記賬節(jié)點的數(shù)字簽名和記入該記賬節(jié)點的記賬費;交易記錄中包括交易內(nèi)容和交易發(fā)起者的數(shù)字簽名;審計閾值根據(jù)審計節(jié)點總數(shù)以及容許的拜占庭節(jié)點的數(shù)量由系統(tǒng)的發(fā)起者進(jìn)行設(shè)定。
特別地,根據(jù)本發(fā)明的另一個方面,還提供了一種計算設(shè)備。該計算設(shè)備包括存儲裝置,存儲裝置上存儲有計算機(jī)程序,其中計算機(jī)程序被執(zhí)行時使計算設(shè)備完成上述任一種區(qū)塊鏈中共識區(qū)塊的生成方法。
進(jìn)一步地,本發(fā)明提供的區(qū)塊鏈中共識區(qū)塊的生成方法中,任何節(jié)點可以自愿聲明為候選節(jié)點,并廣播給網(wǎng)絡(luò)中其他的節(jié)點。聲明為候選節(jié)點后,該節(jié)點的入選條件可以包括賬戶余額。聲明為候選節(jié)點后,該節(jié)點的入選條件還可以包括該節(jié)點賬戶的在網(wǎng)歷史數(shù)據(jù)。
可選地,挑選入選節(jié)點子集的步驟還包括:對在網(wǎng)的候選節(jié)點的網(wǎng)絡(luò)性能進(jìn)行排隊后,得到排序靠前的性能優(yōu)秀的候選節(jié)點子集,用最新一次達(dá)成共識的入選區(qū)塊的散列值(hash)作為命中函數(shù)的輸入,對排序得到的候選節(jié)點子集中的候選節(jié)點進(jìn)行隨機(jī)投票,得到入選節(jié)點子集。
可選地,入選節(jié)點需要滿足沒有參與過最近一次或連續(xù)多次的共識過程的記賬工作。并且在增加新的入選記賬節(jié)點的同時,要從候選節(jié)點子集中隨機(jī)剔除相同個數(shù)的入選節(jié)點。
本發(fā)明的區(qū)塊鏈中共識區(qū)塊的生成方法由于自動選出記賬節(jié)點和審計節(jié)點,由小群體的記賬節(jié)點和審計節(jié)點負(fù)責(zé)生產(chǎn)區(qū)塊,共識過程收斂的時間復(fù)雜度為常數(shù),大大提高了效率,使得區(qū)塊鏈系統(tǒng)的性能顯著提升,避免了pow算力競賽造成的資源消耗。另外,通過自動選出的多個記賬節(jié)點同時集體出塊,最終達(dá)成共識的入選子塊無法事先預(yù)測,失去ddos和eclipse的攻擊條件。
進(jìn)一步地,本發(fā)明的區(qū)塊鏈中共識區(qū)塊的生成方法,按照容量生成候選子塊,在新建的塊的剩余容量不足以填充一條新的交易記錄時進(jìn)行打包,并不依賴于時間,避免出現(xiàn)空塊或者數(shù)據(jù)量較小的區(qū)塊,避免了如比特幣中出現(xiàn)大量空塊的現(xiàn)象,提高系統(tǒng)存儲效率,區(qū)塊達(dá)成共識的時間可以隨網(wǎng)絡(luò)條件自動得到調(diào)整無需代碼干預(yù)。相比于比特幣和其他定義了區(qū)塊生產(chǎn)時間間隔的共識機(jī)制,必須檢查歷史區(qū)塊的生成時間調(diào)整算法難度,本發(fā)明提供的區(qū)塊鏈中共識區(qū)塊的生成方法沒有這一限制,自然也不存相應(yīng)的計算負(fù)擔(dān)。
進(jìn)一步地,本發(fā)明的區(qū)塊鏈中共識區(qū)塊的生成方法,參與區(qū)塊生產(chǎn)的記賬節(jié)點和審計節(jié)點自動輪換,大幅提高女巫攻擊(sybilattack)的實施難度。記賬節(jié)點無法單獨得到合法的區(qū)塊,因為只要存在非拜占庭節(jié)點,拜占庭節(jié)點產(chǎn)生的區(qū)塊也無法通過審計點的多數(shù)命中機(jī)制。
根據(jù)下文結(jié)合附圖對本發(fā)明具體實施例的詳細(xì)描述,本領(lǐng)域技術(shù)人員將會更加明了本發(fā)明的上述以及其他目的、優(yōu)點和特征。
附圖說明
后文將參照附圖以示例性而非限制性的方式詳細(xì)描述本發(fā)明的一些具體實施例。附圖中相同的附圖標(biāo)記標(biāo)示了相同或類似的部件或部分。本領(lǐng)域技術(shù)人員應(yīng)該理解,這些附圖未必是按比例繪制的。附圖中:
圖1是根據(jù)本發(fā)明一個實施例的區(qū)塊鏈中共識區(qū)塊的生成方法適用的架構(gòu)示意圖;
圖2是根據(jù)本發(fā)明一個實施例的區(qū)塊鏈中共識區(qū)塊的生成方法的示意圖;以及
圖3是根據(jù)本發(fā)明一個實施例的計算設(shè)備的示意圖。
具體實施方式
圖1是根據(jù)本發(fā)明一個實施例的區(qū)塊鏈中共識區(qū)塊的生成方法適用的架構(gòu)示意圖。在該區(qū)塊鏈系統(tǒng)中,節(jié)點通過點對點網(wǎng)絡(luò)連接,所有消息都通過廣播形式來發(fā)送。節(jié)點的行為可以是任意的,可以隨時加入、退出網(wǎng)絡(luò),可以丟棄消息、偽造消息、停止工作等,并不禁止發(fā)生各種人為或非人為的故障,整個區(qū)塊鏈系統(tǒng)通過運行本實施例的區(qū)塊鏈中共識區(qū)塊的生成方法,提供一定的容錯能力,并保證安全性和可用性。區(qū)塊鏈系統(tǒng)的各節(jié)點并不依賴于某種特定架構(gòu),而是隨機(jī)形成鏈接,組織成某種特定的拓?fù)浣Y(jié)構(gòu),圖1就是這樣的網(wǎng)絡(luò)結(jié)構(gòu),任何節(jié)點都能高效地搜索網(wǎng)絡(luò)中的資源。區(qū)塊鏈系統(tǒng)中的節(jié)點需要具有良好的數(shù)據(jù)傳輸和數(shù)據(jù)計算能力,例如為各種服務(wù)器或其他計算機(jī)設(shè)備等。任何不屬于網(wǎng)絡(luò)成員的計算機(jī)也可以加入?yún)^(qū)塊鏈系統(tǒng),只需要能夠和任何一個在網(wǎng)節(jié)點正常收發(fā)數(shù)據(jù),就可以訪問區(qū)塊鏈賬本。因此對系統(tǒng)的節(jié)點數(shù)量沒有限制。加入系統(tǒng)的節(jié)點,既可以存儲完整的賬本也可以不存儲賬本。
圖2是根據(jù)本發(fā)明一個實施例的區(qū)塊鏈中共識區(qū)塊的生成方法的示意圖。該區(qū)塊鏈中共識區(qū)塊的生成方法一般性地可以包括步驟s202至步驟s210。
步驟s202,點對點網(wǎng)絡(luò)中的節(jié)點自愿注冊成為候選節(jié)點,并在點對點網(wǎng)絡(luò)中廣播注冊成為候選節(jié)點的消息。候選節(jié)點作為入選記賬和審計的候選,存在成為入選節(jié)點的機(jī)會。點對點網(wǎng)絡(luò)中的所有節(jié)點均可以自愿注冊,并在整個點對點網(wǎng)絡(luò)中廣播注冊成為候選節(jié)點的消息。網(wǎng)絡(luò)中的至少部分節(jié)點可以根據(jù)收聽到的注冊成為候選節(jié)點的消息建立候選節(jié)點的全局表,入選節(jié)點可以從所有全局表中的公共子集中選出。
步驟s204,從在網(wǎng)的候選節(jié)點中選出一個子集作為入選節(jié)點子集,并將入選節(jié)點子集隨機(jī)分為記賬節(jié)點子集和審計節(jié)點子集,記賬節(jié)點子集中的節(jié)點作為記賬節(jié)點,審計節(jié)點子集中的節(jié)點作為審計節(jié)點。
候選節(jié)點成為入選節(jié)點子集的入選條件包括以下任意一條或多條:節(jié)點的賬戶余額、節(jié)點的在網(wǎng)歷史記錄、網(wǎng)絡(luò)性能。例如可以根據(jù)節(jié)點賬戶余額、節(jié)點的在網(wǎng)歷史記錄、網(wǎng)絡(luò)性能等分別進(jìn)行排序,或者將節(jié)點賬戶余額、節(jié)點的在網(wǎng)歷史記錄、網(wǎng)絡(luò)性能等參數(shù)進(jìn)行綜合考慮,從排序靠前的子集中隨機(jī)投票選出入選接待子集。例如在網(wǎng)的候選節(jié)點按性能進(jìn)行排序,將此前最近一次得到入選區(qū)塊作為篩選輸入?yún)?shù)從性能排序靠前的候選節(jié)點中隨機(jī)投票選出一個子集作為入選節(jié)點子集。
例如在考慮網(wǎng)絡(luò)性能時,可以對在網(wǎng)的候選節(jié)點按網(wǎng)絡(luò)性能進(jìn)行排序,將此前最近一次得到入選區(qū)塊作為篩選輸入?yún)?shù)從網(wǎng)絡(luò)性能排序靠前的候選節(jié)點中隨機(jī)投票選出一個子集作為入選節(jié)點子集。上述網(wǎng)絡(luò)性能可以根據(jù)候選節(jié)點的在網(wǎng)概率進(jìn)行評判。篩選輸入?yún)?shù)可以為最新一次達(dá)成共識的入選區(qū)塊的散列值,從而將該散列值作為命中函數(shù)的輸入對排序得到的候選節(jié)點子集中的候選節(jié)點進(jìn)行隨機(jī)投票,得到入選節(jié)點子集,成為入選節(jié)點子集的候選節(jié)點還要求在最近設(shè)定次數(shù)的共識過程中沒有作為記賬節(jié)點。
上述隨機(jī)選舉過程可以對在網(wǎng)的候選節(jié)點的網(wǎng)絡(luò)性能進(jìn)行排隊,用最新區(qū)塊的hash值從網(wǎng)絡(luò)性能優(yōu)秀的候選節(jié)點中挑選。
記賬節(jié)點的功能可以包括收聽交易消息(可以為交易發(fā)起者主動群發(fā)給已知記賬節(jié)點的交易),收到交易后進(jìn)行確認(rèn),從而維護(hù)交易池。審計節(jié)點同步片內(nèi)區(qū)塊高度,接收待審的候選子塊,進(jìn)行審計運算,確定出唯一達(dá)成共識的候選子塊。一次共識過程需要多個記賬節(jié)點和多個審計節(jié)點同時完成,具體的數(shù)量可以根據(jù)區(qū)塊鏈系統(tǒng)的規(guī)模等進(jìn)行確定。一般審計節(jié)點的數(shù)量可以為奇數(shù),總數(shù)記為n的情況下,容錯能力可以表達(dá)為f=(n-1)/3,相應(yīng)地n=3f+1,f標(biāo)識系統(tǒng)所容許的錯誤節(jié)點的最大數(shù)量。在得到超過2f+1個審計節(jié)點的認(rèn)可的情況下,就可以認(rèn)為達(dá)成共識。系統(tǒng)中的賬本由記賬節(jié)點和審計節(jié)點來維護(hù),系統(tǒng)中其他節(jié)點不參與共識過程,但是可以看到共識過程中的傳遞的各種消息。
在本實施例中,自動選出記賬節(jié)點和審計節(jié)點,由小群體的記賬節(jié)點和審計節(jié)點負(fù)責(zé)生產(chǎn)區(qū)塊,共識過程收斂的時間復(fù)雜度為常數(shù),大大提高了效率,使得區(qū)塊鏈系統(tǒng)的性能顯著提升,避免了pow算力競賽造成的資源消耗。
步驟s206,每個記賬節(jié)點分別將交易池中的交易記錄到新建的區(qū)塊中,并在滿足設(shè)定的審計條件后,分別將自身記錄的區(qū)塊打包為候選子塊,向?qū)徲嫻?jié)點子集廣播。新建的區(qū)塊的大小符合區(qū)塊鏈系統(tǒng)預(yù)定義的大小(也即所有的新建的區(qū)塊具有相同的數(shù)據(jù)容量),并且包括上一次達(dá)成共識的入選區(qū)塊的散列值。新建的區(qū)塊包括父塊的散列值;新建的區(qū)塊內(nèi)的交易記錄包括交易內(nèi)容交易發(fā)起者的數(shù)字簽名。
上述設(shè)定的審計條件可以包括:新建的區(qū)塊的剩余容量不足以填充一條新的交易記錄。從而記賬節(jié)點在填滿一個區(qū)塊后,進(jìn)行候選子塊的打包,區(qū)塊達(dá)成共識的時間可以隨網(wǎng)絡(luò)條件自動得到調(diào)整無需代碼干預(yù)。相比于現(xiàn)有技術(shù)中比特幣和其他定義了區(qū)塊生產(chǎn)時間間隔的共識機(jī)制,必須檢查歷史區(qū)塊的生成時間調(diào)整算法難度,本實施例中的方法突破了這一限制,自然也不存相應(yīng)的計算負(fù)擔(dān)。
本實施例的方法中按照容量生成候選子塊,在新建的塊的剩余容量不足以填充一條新的交易記錄時進(jìn)行打包,并不依賴于時間,避免出現(xiàn)空塊或者數(shù)據(jù)量較小的區(qū)塊,避免了如比特幣中出現(xiàn)大量空塊的現(xiàn)象,大大提高了系統(tǒng)存儲效率。
步驟s208,每個審計節(jié)點分別根據(jù)預(yù)設(shè)的審計規(guī)則對所有收到的候選子塊進(jìn)行驗證,挑選出唯一的候選子塊,對挑選出的候選子塊添加自身審計戳后在審計節(jié)點子集內(nèi)廣播。在每個審計節(jié)點在收到其他審計節(jié)點廣播的挑選結(jié)果后,將自身挑選的候選子塊與其他審計節(jié)點挑選的候選子塊進(jìn)行比較,在確定其他審計節(jié)點挑選的候選子塊更優(yōu)的情況下,重新對更優(yōu)的候選子塊添加自身的審計戳,并拋棄自身挑選的候選子塊,并重新在審計節(jié)點子集內(nèi)廣播。從而可以得出所有記賬節(jié)點打包的候選子塊中最優(yōu)的候選子塊。
預(yù)設(shè)的審計規(guī)則可以為挑選散列值最大的候選子塊或者散列值最小的候選子塊。每個審計節(jié)點分別對收到的候選子塊分別進(jìn)行散列運算,得到候選子塊的散列值;對所有收到的候選子塊的散列值進(jìn)行排序,將散列值最大的候選子塊或者散列值最小的候選子塊作為挑選出的候選子塊。
在每個審計節(jié)點在收到其他審計節(jié)點廣播的挑選結(jié)果后,將自身挑選的候選子塊與其他審計節(jié)點挑選的候選子塊進(jìn)行比較的步驟可以為:將自身挑選的候選子塊的散列值與其他審計節(jié)點挑選的候選子塊的散列值進(jìn)行比較,在確定其他審計節(jié)點挑選的候選子塊的散列值更大或更小的情況下,確定其他審計節(jié)點挑選的候選子塊更優(yōu)。
例如在將最大散列值作為挑選條件時,如果存在其他審計節(jié)點挑選的候選子塊的散列值更大的情況下,則撤銷之前添加的審計戳,在散列值更大的候選子塊后添加審計戳,最終的審計結(jié)果為每個審計節(jié)點僅會對認(rèn)定的散列值最大的候選子塊添加審計戳。
相應(yīng)地,例如在將最小散列值作為挑選條件時,如果存在其他審計節(jié)點挑選的候選子塊的散列值更小的情況下,則撤銷之前添加的審計戳,在散列值更小的候選子塊后添加審計戳,最終的審計結(jié)果為每個審計節(jié)點僅會對認(rèn)定的散列值最小的候選子塊添加審計戳。
步驟s210,在任一審計節(jié)點確定出某一候選子塊的審計戳數(shù)量超過設(shè)定的審計閾值后,認(rèn)定該審計戳數(shù)量超過設(shè)定的審計閾值的候選子塊成為被收錄的入選區(qū)塊,從而完成一次共識過程。
審計閾值根據(jù)審計節(jié)點總數(shù)以及容許的拜占庭節(jié)點的數(shù)量由系統(tǒng)的發(fā)起者進(jìn)行設(shè)定。以審計節(jié)點總數(shù)為n,系統(tǒng)所容許的錯誤節(jié)點的最大數(shù)量為f,并且n=3f+1的情況下,若干某一候選子塊對應(yīng)的審計戳數(shù)量超過2f+1(也即超過三分之二的審計節(jié)點認(rèn)可該候選子塊時),認(rèn)定該候選子塊達(dá)成共識。
上述記賬和審計過程中,由自動生成的多個記賬節(jié)點同時出塊,由多個審計節(jié)點集體審計,大幅提高攻擊者共謀難度。記賬節(jié)點無法單獨得到合法的區(qū)塊,因為只要存在非拜占庭節(jié)點,拜占庭節(jié)點產(chǎn)生的區(qū)塊也無法通過審計點的多數(shù)命中機(jī)制。
審計戳可以包括審計節(jié)點的數(shù)字簽名和記入該審計節(jié)點的審計費;每個記賬節(jié)點構(gòu)造的候選子塊附加有該記賬節(jié)點的數(shù)字簽名和記入該記賬節(jié)點的記賬費;交易記錄中包括交易內(nèi)容和交易發(fā)起者的數(shù)字簽名,從而可以避免偽造的行為,提高安全性,并可以提供追溯手段。
在確定出入選區(qū)塊之后,在全網(wǎng)絡(luò)中廣播入選區(qū)塊,將此前一次的入選區(qū)塊作為父塊寫入?yún)^(qū)塊鏈,在完成本次共識之后,可以進(jìn)入下一輪入選子塊的選舉,由新任的記賬節(jié)點和審計節(jié)點進(jìn)行后續(xù)子塊的生產(chǎn)。
在完成一次記賬后,記賬節(jié)點和審計節(jié)點可以自動輪換,新產(chǎn)生的入選節(jié)點需要滿足此前設(shè)定次的共識實現(xiàn)過程中沒有參與過記賬或?qū)徲?,也就是同一?jié)點進(jìn)行記賬或者審計需要至少間隔設(shè)定個的區(qū)塊,從而提高女巫攻擊的實施難度。
輪換記賬節(jié)點和審計節(jié)點的方法可以包括:從候選節(jié)點中重新隨機(jī)增加一定數(shù)量的入選節(jié)點,并從入選節(jié)點子集中剔除相同個數(shù)的入選節(jié)點。參與區(qū)塊生產(chǎn)的記賬節(jié)點和審計節(jié)點自動輪換,大幅提高女巫攻擊(sybilattack)的實施難度。記賬節(jié)點無法單獨得到合法的區(qū)塊,因為只要存在非拜占庭節(jié)點,拜占庭節(jié)點產(chǎn)生的區(qū)塊也無法通過審計點的多數(shù)命中機(jī)制。
應(yīng)用本實施例的區(qū)塊鏈中共識區(qū)塊的生成方法產(chǎn)生的區(qū)塊鏈中,區(qū)塊鏈的首個區(qū)塊定義為創(chuàng)世區(qū)塊,創(chuàng)世區(qū)塊之后的每個區(qū)塊的都記錄有上一個區(qū)塊的指針(或者為id),以及上一個區(qū)塊的審計記錄(包括參與審計的審計節(jié)點的審計戳)。相鄰的兩個達(dá)成共識的入選區(qū)塊中,之前的入選區(qū)塊可稱為后一個入選區(qū)塊的父塊,相應(yīng)地,之后的入選區(qū)塊可稱為前一個入選區(qū)塊的子塊。在一個區(qū)塊在審計過程中得到了設(shè)定數(shù)量(例如上述介紹的2f+1個)的個審計戳后,之前的子塊升級為新的父塊,之前的父塊寫入?yún)^(qū)塊鏈中,成為根塊。一旦有新的區(qū)塊產(chǎn)生,刷新區(qū)塊鏈的高度,并開始新一輪的共識。
在正常狀態(tài)下,產(chǎn)生區(qū)塊的算法按照以下流程執(zhí)行:
系統(tǒng)內(nèi)任意節(jié)點向全網(wǎng)廣播交易數(shù)據(jù),并附有交易節(jié)點的簽名。
所有記賬節(jié)點分別獨立監(jiān)聽全網(wǎng)的交易數(shù)據(jù),并在寫入?yún)^(qū)塊中;
當(dāng)區(qū)塊中剩余的容量不足以寫入一條新的交易后,進(jìn)行數(shù)據(jù)打包得到候選子塊,并簽名,向?qū)徲嫻?jié)點廣播發(fā)送候選子塊的審計信息;
審計節(jié)點對審計信息對應(yīng)的候選子塊進(jìn)行審計,在審計合格的候選子塊后添加審計戳;
任意節(jié)點確定出某一候選子塊的得到了2f+1個審計戳(假定此時共有3f+1個審計節(jié)點)后,共識形成,得到新的子塊,之前的子塊變?yōu)楦笁K。
上述共識區(qū)塊的生成過程中的消息傳遞通過密碼學(xué)技術(shù)保證消息的完整性和真實性,其中審計戳包括審計節(jié)點的數(shù)字簽名和記入該審計節(jié)點的審計費;每個記賬節(jié)點構(gòu)造的候選子塊附加有該記賬節(jié)點的數(shù)字簽名和記入該記賬節(jié)點的記賬費;交易記錄中包括交易內(nèi)容和交易發(fā)起者的數(shù)字簽名。
本實施例的區(qū)塊鏈中共識區(qū)塊的生成方法可以具有以下優(yōu)點:
由于自動選出記賬節(jié)點和審計節(jié)點,由小群體的記賬節(jié)點和審計節(jié)點負(fù)責(zé)生產(chǎn)區(qū)塊,共識過程收斂的時間復(fù)雜度為常數(shù),大大提高了效率,使得區(qū)塊鏈系統(tǒng)的性能顯著提升,避免了pow算力競賽造成的資源消耗。另外,通過自動選出的多個記賬節(jié)點同時集體出塊,最終達(dá)成共識的入選子塊無法事先預(yù)測,失去ddos和eclipse的攻擊條件;
按照容量生成候選子塊,在新建的塊的剩余容量不足以填充一條新的交易記錄時進(jìn)行打包,并不依賴于時間,避免出現(xiàn)空塊或者數(shù)據(jù)量較小的區(qū)塊,避免了如比特幣中出現(xiàn)大量空塊的現(xiàn)象,提高系統(tǒng)存儲效率,區(qū)塊達(dá)成共識的時間可以隨網(wǎng)絡(luò)條件自動得到調(diào)整無需代碼干預(yù)。相比于比特幣和其他定義了區(qū)塊生產(chǎn)時間間隔的共識機(jī)制,必須檢查歷史區(qū)塊的生成時間調(diào)整算法難度,本發(fā)明提供的區(qū)塊鏈中共識區(qū)塊的生成方法沒有這一限制,自然也不存相應(yīng)的計算負(fù)擔(dān);
參與區(qū)塊生產(chǎn)的記賬節(jié)點和審計節(jié)點自動輪換,大幅提高女巫攻擊(sybilattack)的實施難度。記賬節(jié)點無法單獨得到合法的區(qū)塊,因為只要存在非拜占庭節(jié)點,拜占庭節(jié)點產(chǎn)生的區(qū)塊也無法通過審計點的多數(shù)命中機(jī)制。
根據(jù)本實施例的另一個方面,還提供了一種計算設(shè)備10。圖3是根據(jù)本發(fā)明一個實施例的計算設(shè)備10的示意圖,該計算設(shè)備10包括存儲裝置11,存儲裝置上存儲有計算機(jī)程序12,其中計算機(jī)程序12被執(zhí)行時使計算設(shè)備10完成上述任一實施例中的區(qū)塊鏈中共識區(qū)塊的生成方法。
本實施例的計算設(shè)備10可以為布置于網(wǎng)絡(luò)上的服務(wù)器或其他具備一定計算能力的設(shè)備,通過運行計算機(jī)程序12使得這些服務(wù)器或其他網(wǎng)絡(luò)設(shè)備成為區(qū)塊鏈系統(tǒng)中的節(jié)點。本實施例的存儲裝置11可以是諸如閃存、eeprom、eprom、硬盤或者rom之類的電子存儲器。存儲裝置11具有用于執(zhí)行上述方法中的任何方法步驟的計算機(jī)程序12的存儲空間。這些計算機(jī)程序12可以從一個或者多個計算機(jī)程序產(chǎn)品中讀出或者寫入到這一個或者多個計算設(shè)備10中。這些計算機(jī)程序產(chǎn)品包括諸如硬盤,緊致盤(cd)、存儲卡或者軟盤之類的程序代碼載體。計算設(shè)備10讀取并運行上述計算機(jī)程序12時,其處理器可以執(zhí)行上述描述的方法中的各個步驟。
在此提供的算法和顯示不與任何特定計算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
至此,本領(lǐng)域技術(shù)人員應(yīng)認(rèn)識到,雖然本文已詳盡示出和描述了本發(fā)明的多個示例性實施例,但是,在不脫離本發(fā)明精神和范圍的情況下,仍可根據(jù)本發(fā)明公開的內(nèi)容直接確定或推導(dǎo)出符合本發(fā)明原理的許多其他變型或修改。因此,本發(fā)明的范圍應(yīng)被理解和認(rèn)定為覆蓋了所有這些其他變型或修改。