夏 棋,譚敏生,朱 濤,丁 琳
(南華大學(xué) 計(jì)算機(jī)學(xué)院/軟件學(xué)院,湖南 衡陽(yáng) 421001)
共識(shí)機(jī)制是區(qū)塊鏈的重要組成部分,它們負(fù)責(zé)維護(hù)區(qū)塊鏈[1]的完整性和安全性,使區(qū)塊鏈在一個(gè)互不信任的環(huán)境下各節(jié)點(diǎn)達(dá)到一致。DPoS共識(shí)機(jī)制利用權(quán)益持有者投票在平等和民主的基礎(chǔ)上解決共識(shí)問(wèn)題,為了提高性能,對(duì)去中心化做出了一定的妥協(xié),導(dǎo)致了系統(tǒng)活躍度的降低和“弱中心化”的形成。DPoS共識(shí)機(jī)制采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),導(dǎo)致系統(tǒng)同步出塊,降低了系統(tǒng)吞吐量?;贒AG圖式的分布式賬本[2]是不同于主流區(qū)塊鏈的一種分布式賬本技術(shù),DAG技術(shù)給高并發(fā)的交易提供了最具前景的解決方案,把區(qū)塊鏈二維的模式提升到三維,但其安全性和一致性的問(wèn)題也亟待解決。針對(duì)DPoS共識(shí)機(jī)制的弱中心化,低吞吐量的缺陷,本文提出了一種全民評(píng)分選舉、異步出塊的共識(shí)機(jī)制模型。
共識(shí)機(jī)制是區(qū)塊鏈的技術(shù)基石,解決了區(qū)塊鏈如何在分布式場(chǎng)景下達(dá)成一致性的問(wèn)題,實(shí)現(xiàn)了在非信任的環(huán)境下,傳輸可信信息和轉(zhuǎn)移有效價(jià)值?,F(xiàn)有區(qū)塊鏈[3]系統(tǒng)中的主要共識(shí)算法是工作量證明、權(quán)益證明和委托權(quán)益證明。共識(shí)機(jī)制[4]可分為單一共識(shí)機(jī)制和混合共識(shí)機(jī)制,文獻(xiàn)[5]對(duì)共識(shí)機(jī)制進(jìn)行全面分析,將共識(shí)機(jī)制細(xì)化為7類,從各共識(shí)機(jī)制的去中心化、可擴(kuò)展性、安全性、一致性、可用性、分區(qū)容忍性各方面建立了一套共識(shí)算法的評(píng)價(jià)指標(biāo)體系[6]。
對(duì)共識(shí)機(jī)制地改進(jìn),是區(qū)塊鏈技術(shù)研究的重點(diǎn)之一。Li等[7]提出了一種基于公平代表的基于委托的可擴(kuò)展協(xié)商一致協(xié)議(DSCP)。Lixiang等[8]提出了一種基于信用獎(jiǎng)懲的改進(jìn)投票方法。文獻(xiàn)[7,8]基于權(quán)益委托共識(shí)機(jī)制改進(jìn),但從根本上沒(méi)有動(dòng)搖權(quán)益在共識(shí)機(jī)制中的統(tǒng)治地位,權(quán)力依然被權(quán)益主導(dǎo)。文獻(xiàn)[9]根據(jù)其信任值分為記賬、驗(yàn)證和傳播節(jié)點(diǎn),動(dòng)搖了權(quán)益的地位,但仍然采用同步出塊。
DPoS共識(shí)機(jī)制[10]存在一定的局限性,Chen等[11]提出了一種基于概率語(yǔ)言術(shù)語(yǔ)集改進(jìn)的DPoS共識(shí)機(jī)制,降低了惡意節(jié)點(diǎn)成為代表的概率,但是投票類型過(guò)于單一,不能充分體現(xiàn)一個(gè)節(jié)點(diǎn)的被信任程度。文獻(xiàn)[12]提出了一種基于DPoS共識(shí)機(jī)制改進(jìn)的一致性算法委托賭注證明算法;文獻(xiàn)[13]采用元啟發(fā)式算法對(duì)基于準(zhǔn)則權(quán)重集的節(jié)點(diǎn)選擇去中心化程度進(jìn)行優(yōu)化;文獻(xiàn)[14]引入一個(gè)新的區(qū)塊擴(kuò)展方式,系統(tǒng)故障時(shí)提升了系統(tǒng)TPS,但系統(tǒng)正常運(yùn)行時(shí),TPS沒(méi)有得到提升。文獻(xiàn)[11-14]采用了同步出塊方式,繼續(xù)延用了原共識(shí)機(jī)制的記賬方式,系統(tǒng)TPS與原共識(shí)機(jī)制一致,沒(méi)有得到提升,文獻(xiàn)[12-14]采用股民選舉,權(quán)力被少數(shù)人享有,中心化程度過(guò)高。
文獻(xiàn)[2]從共識(shí)形態(tài)出發(fā)將現(xiàn)有基于DAG的分布式賬本分為3類:基于主干鏈的DAG賬本、基于平行鏈的DAG賬本、基于樸素DAG的賬本。基于主干鏈的DAG的特殊區(qū)塊鏈新模型SDAG[15],該模型使得交易數(shù)據(jù)的一致性和時(shí)序性優(yōu)于鏈?zhǔn)浇Y(jié)構(gòu),但是降低了系統(tǒng)的安全性,無(wú)法高效維持賬本的一致性?;谛抛u(yù)度的Hashgraph共識(shí)算法[16],設(shè)計(jì)了節(jié)點(diǎn)的信譽(yù)度模型,對(duì)節(jié)點(diǎn)的性能等進(jìn)行綜合評(píng)分。Q. Nguyen等[17]去除了信譽(yù)度模型,提出基于DAG的無(wú)信任系統(tǒng)達(dá)成PoS共識(shí)。文獻(xiàn)[16,17]中充分利用了DAG異步記賬的優(yōu)點(diǎn),但是DAG的無(wú)序性給系統(tǒng)帶來(lái)了威脅,使系統(tǒng)中的賬本無(wú)法獲得統(tǒng)一。改進(jìn)DAG的無(wú)序性,提升區(qū)塊鏈的吞吐量成為了一種主流,文獻(xiàn)[18]就提出了一種基于層的DAG結(jié)構(gòu),合理利用了DAG異步出塊的高效性。
本文研究了DPoS共識(shí)機(jī)制已有特性及缺點(diǎn),分析了DAG區(qū)塊鏈結(jié)構(gòu)的優(yōu)缺點(diǎn),比較了兩種算法之間的特性,優(yōu)化了區(qū)塊鏈的單鏈結(jié)構(gòu)。針對(duì)DPoS共識(shí)機(jī)制已有特性及缺點(diǎn),摒棄了DPoS共識(shí)機(jī)制的權(quán)益選舉以及同步出塊,提出了一種改進(jìn)共識(shí)機(jī)制,即評(píng)分權(quán)益證明(scored proof of stake,SPoS)共識(shí)機(jī)制。SPoS共識(shí)機(jī)制結(jié)合了DAG的優(yōu)點(diǎn),改進(jìn)了DAG圖式的無(wú)序性,采用了偽鏈的結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)。
SPoS共識(shí)機(jī)制是一種基于DPoS改進(jìn)的共識(shí)機(jī)制,是一種評(píng)分授權(quán)的共識(shí)機(jī)制,將股民參與制改為全民參與制,去除了基于權(quán)益運(yùn)作的方式,使每個(gè)合法節(jié)點(diǎn)都有權(quán)力參與投票,能夠降低節(jié)點(diǎn)的參與門(mén)檻,積極推動(dòng)節(jié)點(diǎn)的參與。系統(tǒng)節(jié)點(diǎn)分別為普通節(jié)點(diǎn)、候選節(jié)點(diǎn)以及超級(jí)節(jié)點(diǎn)。SPoS共識(shí)機(jī)制中每個(gè)普通節(jié)點(diǎn)對(duì)候選節(jié)點(diǎn)都有相同的評(píng)分權(quán)限,通過(guò)普通節(jié)點(diǎn)對(duì)候選節(jié)點(diǎn)打分,分?jǐn)?shù)將產(chǎn)生相應(yīng)的責(zé)任連坐,即責(zé)任雙方會(huì)被任意一方的行為影響,受到相應(yīng)的獎(jiǎng)勵(lì)或懲罰,然后計(jì)算評(píng)選出平均分加增益分高的節(jié)點(diǎn)成為超級(jí)節(jié)點(diǎn)。超級(jí)節(jié)點(diǎn)在出塊周期內(nèi)異步出塊,并且廣播、收集區(qū)塊,最后將周期內(nèi)所有普通區(qū)塊統(tǒng)計(jì)到收束區(qū)塊,周期結(jié)束時(shí)將系統(tǒng)數(shù)據(jù)達(dá)到共識(shí)。
SPoS共識(shí)機(jī)制可以分為4個(gè)階段,即為評(píng)分、統(tǒng)計(jì)、公示和記賬。評(píng)分階段,節(jié)點(diǎn)根據(jù)對(duì)候選節(jié)點(diǎn)的信任程度評(píng)分;統(tǒng)計(jì)階段,系統(tǒng)統(tǒng)計(jì)和計(jì)算候選節(jié)點(diǎn)的信任分;公示階段,候選節(jié)點(diǎn)公示節(jié)點(diǎn)評(píng)分以及節(jié)點(diǎn)總分;記賬階段,超級(jí)節(jié)點(diǎn)異步出塊達(dá)到共識(shí)。共識(shí)流程如圖1所示。在SPoS共識(shí)機(jī)制中,引入責(zé)任連坐的獎(jiǎng)懲機(jī)制,該機(jī)制貫穿系統(tǒng)的4個(gè)階段,在評(píng)分階段,對(duì)節(jié)點(diǎn)的行為進(jìn)行責(zé)任相關(guān)標(biāo)記,在后續(xù)階段,若責(zé)任相關(guān)雙方有作惡或誠(chéng)實(shí)行為,將使雙方受到相應(yīng)的懲罰或者獎(jiǎng)勵(lì)。
SPoS共識(shí)機(jī)制中,在該階段,每個(gè)擁有合法身份的節(jié)點(diǎn)對(duì)候選節(jié)點(diǎn)的信任程度進(jìn)行評(píng)分,分?jǐn)?shù)的高低決定責(zé)任連坐的輕重。SPoS共識(shí)機(jī)制中每個(gè)合法節(jié)點(diǎn)都享有相同的評(píng)分權(quán),不存在節(jié)點(diǎn)貧富程度帶來(lái)的權(quán)益差距,不需要代幣股權(quán)的支持。在評(píng)分過(guò)程中,節(jié)點(diǎn)對(duì)候選節(jié)點(diǎn)的信任程度進(jìn)行評(píng)分、簽名,產(chǎn)生一個(gè)包含了身份與分?jǐn)?shù)的Token,將Token發(fā)送給候選節(jié)點(diǎn),并要得到候選節(jié)點(diǎn)的反饋信息。若候選節(jié)點(diǎn)表示接受投票,系統(tǒng)將對(duì)雙方責(zé)任進(jìn)行關(guān)聯(lián)。SPoS共識(shí)機(jī)制對(duì)比DPoS共識(shí)機(jī)制將節(jié)省大量的股權(quán)證明開(kāi)具時(shí)間,只需要驗(yàn)證節(jié)點(diǎn)是否為合法節(jié)點(diǎn)。區(qū)塊鏈中合法公民都將享有公民投票評(píng)分權(quán)力,相對(duì)于改進(jìn)前的DPoS共識(shí)機(jī)制,SPoS共識(shí)機(jī)制降低了節(jié)點(diǎn)投票的準(zhǔn)入門(mén)檻,節(jié)點(diǎn)對(duì)候選節(jié)點(diǎn)的評(píng)分如算法1所示。
算法1:評(píng)分算法
輸入:(Scroe,PrivateKey)
輸出:null
(1)/*對(duì)候選節(jié)點(diǎn)評(píng)分*/
(2)初始化:Node /*評(píng)分節(jié)點(diǎn)*/;
(3)if Node is lawful:
(4)then token←rsa.Encrypt(Score,PrivateKey) /*私鑰加密分?jǐn)?shù)*/
(5)send token to candidate /*將token發(fā)送給被支持者*/
(6)wait result←callback(candidate)
(7)if result == true: /*判斷投票是否成功*/
(8)then voting success and mark /*投票成功,并且責(zé)任相關(guān)*/
(9)else:
(10)if candidate is illegal:/*候選節(jié)點(diǎn)非法行為時(shí)*/
(11)then decrease candiate weighted/*懲罰候選節(jié)點(diǎn)*/
(12)else:
(13)again voting(candidate)
(14)end if
(15)end if
(16)else://評(píng)分節(jié)點(diǎn)非法時(shí)
(17)decrease Node weighted//懲罰評(píng)分節(jié)點(diǎn)
(18) end if
(19)end
評(píng)分結(jié)束過(guò)后,將關(guān)閉評(píng)分通道,驗(yàn)證候選節(jié)點(diǎn)的分?jǐn)?shù)真實(shí)性,統(tǒng)計(jì)評(píng)分階段中選取的候選節(jié)點(diǎn)分?jǐn)?shù)。在該階段,每個(gè)候選節(jié)點(diǎn)都持有其它節(jié)點(diǎn)的Token,依次驗(yàn)證候選節(jié)點(diǎn)所持有的Token,無(wú)效Token將被刪除,并降低無(wú)效Token簽名者的權(quán)重值。如果公示階段候選節(jié)點(diǎn)仍持有無(wú)效的Token,該節(jié)點(diǎn)將被剔除候選節(jié)點(diǎn)隊(duì)伍,并根據(jù)責(zé)任連坐制度懲罰該候選節(jié)點(diǎn)及其支持者,剩下的可信節(jié)點(diǎn)將進(jìn)入到下一階段。
經(jīng)過(guò)驗(yàn)證的有效Token,將被統(tǒng)計(jì)計(jì)算,評(píng)選出平均分加增益分高的候選節(jié)點(diǎn)成為超級(jí)節(jié)點(diǎn)。平均分采用算術(shù)加權(quán)平均,該分值能顯示出選民對(duì)該節(jié)點(diǎn)的平均信任程度,但是惡意節(jié)點(diǎn)的非法評(píng)分,會(huì)對(duì)節(jié)點(diǎn)分值的可信度產(chǎn)生影響。為了防止惡意節(jié)點(diǎn)的非法行為影響分值的可信度,設(shè)計(jì)增益分weighted(x), 增益分是根據(jù)節(jié)點(diǎn)評(píng)分達(dá)優(yōu)的人數(shù)計(jì)算,當(dāng)某個(gè)節(jié)點(diǎn)的評(píng)分達(dá)優(yōu)人數(shù)過(guò)少時(shí),系統(tǒng)認(rèn)為其可信度低,此時(shí)增益分為負(fù)值,將降低節(jié)點(diǎn)的可信度。為了防止節(jié)點(diǎn)的支持者過(guò)少卻能獲得記賬權(quán)的情況,將節(jié)點(diǎn)評(píng)分與其權(quán)重相乘得到的加權(quán)分達(dá)優(yōu)的支持人數(shù)換算成相應(yīng)的增益分,該分?jǐn)?shù)極大地提升了節(jié)點(diǎn)的可信度。只有節(jié)點(diǎn)評(píng)分達(dá)優(yōu)的人數(shù)達(dá)到一定的數(shù)量,該分?jǐn)?shù)才會(huì)為正值并對(duì)其增益,反之對(duì)節(jié)點(diǎn)分?jǐn)?shù)進(jìn)行降低。增益分的存在減少了惡意節(jié)點(diǎn)行為對(duì)系統(tǒng)的影響,增加了節(jié)點(diǎn)分?jǐn)?shù)的可信度。經(jīng)過(guò)驗(yàn)證的評(píng)分將與節(jié)點(diǎn)自身權(quán)重weighted加權(quán)處理,得出該候選節(jié)點(diǎn)最終的分?jǐn)?shù)。分?jǐn)?shù)高的節(jié)點(diǎn),可以被認(rèn)為是優(yōu)質(zhì)的值得被信任的節(jié)點(diǎn),換算如式(1)所示
(1)
及格線以上總?cè)藬?shù)對(duì)應(yīng)的權(quán)重如式(2)所示
weighted(x)=MlogmAx
(2)
(3)
式(3)的推導(dǎo)如式(4)~式(6)所示
(4)
(5)
(6)
(7)
式(7)說(shuō)明weighted(x) 隨人數(shù)的增加,上升越來(lái)越平緩,weighted(x) 導(dǎo)函數(shù)如圖2所示。
圖2 weighted(x)導(dǎo)函數(shù)
由圖3所示,人數(shù)的增加對(duì)分?jǐn)?shù)的增益無(wú)限,但是人數(shù)的增加對(duì)節(jié)點(diǎn)信任分?jǐn)?shù)的增加會(huì)越來(lái)越平緩,人數(shù)高達(dá)一定值時(shí)對(duì)信任的增值微乎其微。 weighted(x) 對(duì)節(jié)點(diǎn)的分?jǐn)?shù)有所增益,人數(shù)達(dá)不到指定要求反而會(huì)降低節(jié)點(diǎn)的可信度,但是人數(shù)過(guò)多,人數(shù)增量只能增加越來(lái)越少的節(jié)點(diǎn)可信度,該公式表達(dá)的人數(shù)增益如圖3所示。
圖3 人數(shù)增益分趨勢(shì)
本文基于式(1)提出的新評(píng)分算法,能夠準(zhǔn)確反應(yīng)一個(gè)節(jié)點(diǎn)的可信度,將Tokens作為算法的參數(shù)輸入,算法將解密、統(tǒng)計(jì)Tokens,最后返回基于式(1)換算的候選節(jié)點(diǎn)分?jǐn)?shù),具體過(guò)程如算法2所示。
算法2:信任程度統(tǒng)計(jì)算法
輸入:(Tokens)
輸出:(TotalScore)
(1)/*統(tǒng)計(jì)候選節(jié)點(diǎn)的分?jǐn)?shù)*/
(2)初始化:K /*K為節(jié)點(diǎn)的tokens有效token總數(shù)*/;
(3)var temp /*記錄分?jǐn)?shù)總值*/
(4)var passedPersonNum /*及格人數(shù)權(quán)重*/
(5)for k←1 to K do /*統(tǒng)計(jì)所有節(jié)點(diǎn)評(píng)分總和*/
(6)do onceScore←decrypt(Tokens[k])
(7)temp += onceScore
(8)if onceScore is passed: /*分?jǐn)?shù)及格的將被統(tǒng)計(jì)到人數(shù)權(quán)重中*/
(9)do passedPersonNum ++
(10)end if
(11)end for
(12)score←(temp/Tokens.length+
MlogmA*passedNum)*weighted/*式(1)處理*/
(13)return score
(14)end
該階段被選舉出來(lái)的候選節(jié)點(diǎn)將持有的所有Token進(jìn)行公示,以防止惡意節(jié)點(diǎn)選擇性算分,過(guò)濾低分,選擇高分,從而增加平均分的權(quán)重。評(píng)分節(jié)點(diǎn)分為支持者與反對(duì)者,根據(jù)評(píng)分的大小,與其支持的候選節(jié)點(diǎn)將產(chǎn)生對(duì)應(yīng)的責(zé)任。被舉報(bào)成功的節(jié)點(diǎn)將失去記賬權(quán),下次共識(shí)選舉中降低該候選節(jié)點(diǎn)的權(quán)重,并將節(jié)點(diǎn)列為不可信節(jié)點(diǎn),其評(píng)分者也將根據(jù)對(duì)節(jié)點(diǎn)的評(píng)分大小受到相應(yīng)的處理,懲罰支持者,獎(jiǎng)勵(lì)反對(duì)者。反之,候選節(jié)點(diǎn)將成為超級(jí)節(jié)點(diǎn),并且在任職期誠(chéng)實(shí)工作,其評(píng)分者依然會(huì)根據(jù)分?jǐn)?shù)得到相應(yīng)的懲罰與獎(jiǎng)勵(lì),公示過(guò)程具體如算法3所示。
算法3:公示算法
輸入:null
輸出:null
(1)/*公示階段*/
(2)初始化:T, Node /*T為公示期的時(shí)長(zhǎng), Node為被公示的節(jié)點(diǎn)*/;
(3)listen←net.Listen()
(4)time.After(T,EndProgram()) /*T時(shí)間后, 結(jié)束程序。*/
(5)while true:
(6)do connNode←listen.Accept() /*監(jiān)聽(tīng)節(jié)點(diǎn)的舉報(bào)*/
(7)if connNode is doubted:
(8)then if connNode is honesty:
(9)then delete Node /*從候選節(jié)點(diǎn)隊(duì)列刪除該候選節(jié)點(diǎn)*/
(10)decrease Node weighted /*懲罰該節(jié)點(diǎn)*/
(11)decrease or reward Node Supporter/*獎(jiǎng)勵(lì)或者懲罰該節(jié)點(diǎn)的評(píng)分節(jié)點(diǎn)*/
(12)else:
(13)decrease connNode weighted /*降低舉報(bào)節(jié)點(diǎn)權(quán)重*/
(14)end if
(15)end
該階段,每個(gè)超級(jí)節(jié)點(diǎn)可生產(chǎn)兩種區(qū)塊,分別為普通區(qū)塊與收束區(qū)塊,普通區(qū)塊的作用是存儲(chǔ)系統(tǒng)數(shù)據(jù),而收束區(qū)塊的作用是將該周期內(nèi)生成的普通區(qū)塊收束為一點(diǎn)。兩種區(qū)塊的結(jié)構(gòu)與DPoS區(qū)塊結(jié)構(gòu)對(duì)比見(jiàn)表1。
表1 區(qū)塊結(jié)構(gòu)
針對(duì)DPos共識(shí)機(jī)制的單一隊(duì)列出塊,后續(xù)節(jié)點(diǎn)都在期待上一節(jié)點(diǎn)出塊,若節(jié)點(diǎn)宕機(jī)無(wú)法出塊,后一節(jié)點(diǎn)將處于期待狀態(tài),超時(shí)下才會(huì)解除該狀態(tài),并且使用上一成功出塊節(jié)點(diǎn)結(jié)果打包出塊。針對(duì)以上缺點(diǎn),本文提出全隊(duì)列出塊,在每個(gè)出塊階段,所有超級(jí)節(jié)點(diǎn)異步出塊,同時(shí)在該階段驗(yàn)證其它節(jié)點(diǎn)所出區(qū)塊,如果有節(jié)點(diǎn)宕機(jī)、超時(shí)未出塊,各節(jié)點(diǎn)將統(tǒng)一周期內(nèi)生產(chǎn)的普通區(qū)塊,以達(dá)到共識(shí)。階段結(jié)束時(shí),將生產(chǎn)一個(gè)收束區(qū)塊記錄該階段出塊的所有普通區(qū)塊。為滿足異步出塊的形式,本文棄用了區(qū)塊鏈的單鏈結(jié)構(gòu),采用基于DAG圖式改進(jìn)的有序偽鏈結(jié)構(gòu),將DAG的無(wú)序狀態(tài)轉(zhuǎn)換為有序狀態(tài),能夠延續(xù)單鏈結(jié)構(gòu)安全性的同時(shí)兼顧DAG圖式的高吞吐量,區(qū)塊鏈結(jié)構(gòu)如圖4所示。
圖4 SPoS鏈?zhǔn)浇Y(jié)構(gòu)
每個(gè)超級(jí)節(jié)點(diǎn)同時(shí)享有記賬權(quán)限,如果節(jié)點(diǎn)宕機(jī),超時(shí)未出塊,系統(tǒng)將自動(dòng)跳過(guò)該節(jié)點(diǎn),對(duì)節(jié)點(diǎn)的行為進(jìn)行評(píng)價(jià)、記憶,并且在下次選舉過(guò)程中懲罰該節(jié)點(diǎn)。SPoS共識(shí)機(jī)制采用周期制異步出塊,在周期內(nèi),超級(jí)節(jié)點(diǎn)打包、廣播普通區(qū)塊,監(jiān)聽(tīng)、接收其它超級(jí)節(jié)點(diǎn)廣播的普通區(qū)塊,并且統(tǒng)計(jì)普通區(qū)塊生成收束區(qū)塊,周期結(jié)束時(shí)廣播、統(tǒng)一收束區(qū)塊,SPoS共識(shí)機(jī)制的異步出塊如算法4所示。
算法4:異步出塊算法
輸入:null
輸出:null
(1)/*出塊階段*/
(2)初始化:T/*T為每個(gè)出塊周期的時(shí)長(zhǎng)*/;
(3)var sumBlock /*創(chuàng)建、 初始化收束區(qū)塊*/
(4)time.After(T.BroadcastAndUniteSumBlock()) /*周期結(jié)束時(shí)廣播、 統(tǒng)一收束區(qū)塊*/
(5)listen←net.Listen()
(6)block←PackAndBroadcastBlock() /*節(jié)點(diǎn)自己生成、 廣播普通區(qū)塊*/
(7)AddTo(block,SumBlock) /*將普通區(qū)塊記錄到收束區(qū)塊*/
(8)while true:
(9)block = listen.Accept()
(10)if block is legal:
(11)then AddTo(block,SumBlock)
(12)else:
(13)FeedbackToSystem(block) /*block不合法時(shí), 向系統(tǒng)舉報(bào)該區(qū)塊生產(chǎn)節(jié)點(diǎn)*/
(14)end if
(15)end
本文實(shí)驗(yàn)在處理器Intel Core i5-4200HCPU@2.80 GH的64位Windows10專業(yè)版與Intel Celeron CPU N3450@1.10 GHz的64位Windows企業(yè)版平臺(tái)進(jìn)行,采用golang語(yǔ)言進(jìn)行區(qū)塊鏈構(gòu)建,tcp協(xié)議進(jìn)行P2P網(wǎng)絡(luò)傳輸,RSA加密算法生成密鑰、簽名、驗(yàn)證數(shù)據(jù),電腦端口模擬節(jié)點(diǎn),實(shí)驗(yàn)共模擬100個(gè)節(jié)點(diǎn)。
(1)去中心化
SPoS共識(shí)機(jī)制中,每個(gè)節(jié)點(diǎn)都不需要提供代幣及股權(quán)證明,各節(jié)點(diǎn)享有平等的評(píng)分權(quán)限。SPoS共識(shí)機(jī)制比DPoS共識(shí)機(jī)制門(mén)檻更低、權(quán)力更平等、去中心化程度更高。DPoS的參與度理論上最高能達(dá)到系統(tǒng)擁有股權(quán)節(jié)點(diǎn)的百分比,SPoS共識(shí)機(jī)制的參與度理論能夠達(dá)到百分百。與原共識(shí)機(jī)制相比,本文提出的共識(shí)機(jī)制中全體合法公民享有更加平等的選舉權(quán),系統(tǒng)更加活躍與去中心化,共識(shí)機(jī)制性能指標(biāo)對(duì)比見(jiàn)表2。
表2 性能指標(biāo)對(duì)比
(2)資源消耗
DPoS共識(shí)機(jī)制需要代幣及股權(quán)的維持,持股節(jié)點(diǎn)的數(shù)量與代幣交易的總量越多,內(nèi)存的消耗越多,股權(quán)證明花費(fèi)的資源將大幅提升。改進(jìn)的SPoS共識(shí)機(jī)制本身是不需要代幣及股權(quán)的支撐,SPoS共識(shí)機(jī)制對(duì)比DPoS共識(shí)機(jī)制將節(jié)省更多的內(nèi)存資源以及查詢時(shí)間。SPoS共識(shí)機(jī)制的參與門(mén)檻低,系統(tǒng)節(jié)點(diǎn)活躍的數(shù)量急劇增加,使消耗的網(wǎng)絡(luò)資源大幅提升。系統(tǒng)模擬DPoS共識(shí)機(jī)制30%、40%、50%的節(jié)點(diǎn)擁有股權(quán),分別采用256 bit、512 bit、1024 bit、2048 bit、4096 bit的密鑰進(jìn)行網(wǎng)絡(luò)信息交互,實(shí)驗(yàn)結(jié)果如圖5所示,SPoS共識(shí)機(jī)制網(wǎng)絡(luò)資源比DPoS共識(shí)機(jī)制分別多消耗230%、150%、100%。DPoS共識(shí)機(jī)制中擁有股權(quán)的節(jié)點(diǎn)占比越高,去中心化程度越高,與SPoS共識(shí)機(jī)制消耗的資源差額越小。
圖5 網(wǎng)絡(luò)資源消耗
(3)共識(shí)時(shí)延
實(shí)驗(yàn)?zāi)M100個(gè)節(jié)點(diǎn),在區(qū)塊高度分別為10 000、5000、2000的SPoS共識(shí)機(jī)制和DPoS共識(shí)機(jī)制中共識(shí)選舉10個(gè)記賬節(jié)點(diǎn),每個(gè)區(qū)塊高度均實(shí)驗(yàn)了多次,最后對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行求平均值處理。實(shí)驗(yàn)結(jié)果表明,不同區(qū)塊高度中SPoS共識(shí)機(jī)制共識(shí)時(shí)延不變,區(qū)塊高度5000、2000時(shí),SPoS共識(shí)機(jī)制的共識(shí)時(shí)延是高于DPoS共識(shí)機(jī)制,隨著區(qū)塊高度的增加和交易的產(chǎn)生,SPoS共識(shí)機(jī)制的共識(shí)時(shí)延明顯短于DPoS共識(shí)機(jī)制。隨著系統(tǒng)冗余度的提升,DPoS共識(shí)機(jī)制開(kāi)具權(quán)益證明的時(shí)間越來(lái)越長(zhǎng),SPoS共識(shí)機(jī)制的優(yōu)勢(shì)會(huì)越來(lái)越明顯,數(shù)據(jù)高冗余時(shí),共識(shí)時(shí)延提升了45%左右,實(shí)驗(yàn)結(jié)果如圖6所示。
圖6 共識(shí)時(shí)延
(4)出塊時(shí)間對(duì)比
實(shí)驗(yàn)設(shè)定10個(gè)超級(jí)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)具有相同的出塊周期。DPoS共識(shí)機(jī)制在每個(gè)出塊周期隨機(jī)排序出塊隊(duì)列,隊(duì)列中的節(jié)點(diǎn)依次出塊。SPoS共識(shí)機(jī)制在出塊周期內(nèi),超級(jí)節(jié)點(diǎn)異步同時(shí)出塊。每次實(shí)驗(yàn)都采用相同初始環(huán)境,并且對(duì)最終結(jié)果進(jìn)行數(shù)據(jù)處理及分析。實(shí)驗(yàn)結(jié)果表明,在每個(gè)出塊周期內(nèi)兩種共識(shí)機(jī)制都能保持穩(wěn)定的吞吐量,SPoS共識(shí)機(jī)制隊(duì)列中超級(jí)節(jié)點(diǎn)異步出塊,每個(gè)出塊周期都能將區(qū)塊收束到收束區(qū)塊,相對(duì)于DPoS共識(shí)機(jī)制節(jié)省了隊(duì)列排序時(shí)間與等待其它節(jié)點(diǎn)出塊時(shí)間,SPoS共識(shí)機(jī)制的出塊時(shí)間明顯優(yōu)于DPoS共識(shí)機(jī)制,SPoS共識(shí)機(jī)制中平均每個(gè)區(qū)塊的出塊時(shí)間縮短40%左右,實(shí)驗(yàn)數(shù)據(jù)如圖7所示。
圖7 出塊時(shí)間
(5)容錯(cuò)性
為比較共識(shí)機(jī)制容錯(cuò)性,即區(qū)塊鏈系統(tǒng)部分節(jié)點(diǎn)宕機(jī)時(shí)單位時(shí)間出塊數(shù)量,實(shí)驗(yàn)?zāi)M10個(gè)超級(jí)節(jié)點(diǎn),在超級(jí)節(jié)點(diǎn)宕機(jī)概率保持不同的情況下,比較系統(tǒng)的吞吐量。在實(shí)驗(yàn)中節(jié)點(diǎn)的宕機(jī)概率依次提升,每個(gè)宕機(jī)率進(jìn)行多次實(shí)驗(yàn),最后對(duì)比節(jié)點(diǎn)出塊時(shí)間。實(shí)驗(yàn)結(jié)果表明,隨著宕機(jī)概率的提升,兩種共識(shí)機(jī)制的出塊時(shí)間成爆炸函數(shù)增長(zhǎng),但SPoS共識(shí)機(jī)制在系統(tǒng)宕機(jī)的情況下明顯比原共識(shí)機(jī)制更能保持系統(tǒng)吞吐量的穩(wěn)定,而且這種優(yōu)勢(shì)會(huì)隨著宕機(jī)率的提升越來(lái)越明顯,實(shí)驗(yàn)結(jié)果如圖8所示。
圖8 宕機(jī)穩(wěn)定性
為降低DPoS共識(shí)機(jī)制的中心化和提高系統(tǒng)吞吐量,本文提出了一種高并發(fā)、去中心化的共識(shí)機(jī)制。本文提出的SPoS共識(shí)機(jī)制中,合法節(jié)點(diǎn)均享有參與選舉的資格,選舉中根據(jù)節(jié)點(diǎn)身份進(jìn)行責(zé)任連坐,去除了權(quán)益的統(tǒng)治地位,提升了系統(tǒng)去中心化,規(guī)范了節(jié)點(diǎn)行為,能夠更好地服務(wù)于有身份認(rèn)證的區(qū)塊鏈系統(tǒng)?;贒AG圖式的偽鏈結(jié)構(gòu),創(chuàng)新了存儲(chǔ)結(jié)構(gòu),解決了DAG圖式結(jié)構(gòu)的安全性問(wèn)題,保證了系統(tǒng)高并發(fā)運(yùn)行。但是,SPoS共識(shí)機(jī)制消耗的網(wǎng)絡(luò)資源多于DPoS共識(shí)機(jī)制,對(duì)網(wǎng)絡(luò)的穩(wěn)定和帶寬有更高的要求。下一步,我們將研究降低該共識(shí)機(jī)制對(duì)網(wǎng)絡(luò)資源的消耗,并探索共識(shí)機(jī)制的實(shí)際應(yīng)用。