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