楊坤橋,王煜翔,郭 兵,李 強
四川大學 計算機(軟件)學院,成都610065
自2008年中本聰[1]發(fā)布比特幣白皮書以來,區(qū)塊鏈技術的發(fā)展就受到了公眾廣泛的關注。因區(qū)塊鏈具備去中心化、不可篡改、數(shù)據(jù)透明、集體維護等特性,使得區(qū)塊鏈在許多領域具有廣泛的實用價值。區(qū)塊鏈已經(jīng)從最初單一的數(shù)字貨幣,逐漸應用到了物流、版權保護、鑒證證明、金融[2]等多個領域。共識算法是構建區(qū)塊鏈應用的信任基礎[3],它是為了解決獨立節(jié)點如何達成一致性的方案。當下存在多種共識算法,例如,比特幣依賴于工作量證明(Proof of Work,PoW)算法,該算法主要思想是讓系統(tǒng)中的所有節(jié)點共同計算一道復雜的Hash難題[4],其中最先計算出答案的節(jié)點會獲得系統(tǒng)的記賬權。PoW算法的主要缺點在于爭奪記賬權的過程中,大量節(jié)點參與而最終只有一個節(jié)點勝出,這就會造成大量能源的浪費[5]。為了解決Pow算法存在的問題,King等人提出了一種權益證明(Proof of Stake,PoS)[6]的共識機制,該算法無需消耗大量算力就能保障系統(tǒng)的正常運行。PoS算法首先提出了幣齡的概念,幣齡是指幣的數(shù)量與持有幣的時間的乘積。在PoS中各節(jié)點再也無需像PoW那些消耗大量算力來爭奪記賬權,而是由系統(tǒng)選擇擁有幣齡最高的節(jié)點獲得系統(tǒng)的記賬權。某種程度上這大大提高了系統(tǒng)的共識效率和系統(tǒng)吞吐量,但存在著大節(jié)點獲得記賬權的概率遠遠大于其他節(jié)點的概率,這就加劇系統(tǒng)的中心化趨勢[7]。為了解決PoS與Pow算法存在的缺點,委托股權證明算法(Delegated Proof of Stake,DPoS)[8]隨后被提出。在DPoS算法中不再需要統(tǒng)計每個節(jié)點的幣齡做排序操作,而是每個節(jié)點將它擁有的幣齡作為選票投給它自己信任的受托節(jié)點,由系統(tǒng)從這些受托節(jié)點中選擇排名靠前的節(jié)點輪流完成記賬,比特股(BitSHares)是第一個采用這種算法的區(qū)塊鏈。DPoS算法通過每輪投票選擇多個節(jié)點輪流記賬,大幅提高了系統(tǒng)的共識效率。但它也存在著一些問題:系統(tǒng)節(jié)點參與度不高,因為參與投票共識需要一些資源的消耗。其次由于依據(jù)幣齡作為選票,當發(fā)現(xiàn)錯誤節(jié)點時,不能快速地將它們剔除。還有DPoS算法在完成記賬發(fā)放激勵時只對那些受托節(jié)點發(fā)放,而不對那些投票節(jié)點激勵,長期來看會加劇系統(tǒng)的中心化趨勢。
本文針對DPoS算法存在節(jié)點投票積極性不高、錯誤節(jié)點剔除不及時、節(jié)點收益分配不合理等問題做出了改進,提出了一種改進算法模型。首先對計票方式做出了改進,提出了一種綜合計票的選舉方式,將幣齡、節(jié)點繳納的保證金、節(jié)點參與的歷史共識信息等多個維度的信息納入計票范圍,能夠更綜合性地評價選舉節(jié)點的情況。此外本文投票激勵機制和記賬激勵機制對算法激勵機制進行改進。因此本文貢獻如下:
(1)改進原始算法的計票機制,將節(jié)點更多信息納入計票范疇,使得選票更全面地反映節(jié)點的信譽度,此外根據(jù)節(jié)點的投票記錄,動態(tài)調(diào)整節(jié)點的權重,加快了錯誤節(jié)點的剔除。
(2)改進了算法的激勵機制,通過投票激勵和記賬激勵,對節(jié)點的收益進行合理分配,有助于減小節(jié)點的中心化趨勢。
(3)通過實驗驗證了改進方案的可行性。
共識算法是保障區(qū)塊鏈系統(tǒng)穩(wěn)定運行的核心技術,主要為了解決區(qū)塊鏈系統(tǒng)中各節(jié)點的一致性問題。近年隨著對區(qū)塊鏈技術的不斷深入,共識算法研究成為了區(qū)塊鏈研究的熱點問題。針對共識算法的改進大致分為四個方面:(1)提高算法的共識效率。(2)加快錯誤節(jié)點的剔除。(3)優(yōu)化節(jié)點激勵機制和收益分配方案。(4)提高共識算法安全性。
例如:在EOS項目中為了提高DPoS的共識效率,它將DPoS算法與拜占庭容錯算法(Byzantine Fault Tolerance,BFT)進行了結(jié)合[9]。在原始的DPoS算法中,區(qū)塊的確認需輪到自己生成區(qū)塊時進行集中確認,而BFT算法的特點是生成區(qū)塊向全網(wǎng)廣播,各節(jié)點接收新區(qū)塊立即對區(qū)塊進行驗證。因此引入BFT算法加快了原始算法的確認速度,提升了算法的效率。Eischer等人[10]首先將協(xié)議并行化為多個組,然后由各組按確定的順序處理相應的請求。其次通過動態(tài)調(diào)整需要在組之間排序的請求數(shù)量,能夠最大化地利用節(jié)點的服務資源,提高了算法的伸縮性和共識效率。
對于共識機制加快錯誤節(jié)點的剔除,黃嘉成等人[11]提出了一種由選民節(jié)點投反對票來加快剔除速度的方案。該方案當節(jié)點的反對票達到一定閾值后觸發(fā)系統(tǒng)熔斷,系統(tǒng)會將這些節(jié)點的信用降級。此外高迎等人[12]提出了在系統(tǒng)中設立審查節(jié)點與信用機制來解決這一問題,該方案下若在規(guī)定時間沒有產(chǎn)生有效區(qū)塊,則降低其信用系數(shù)。
針對優(yōu)化收益分配的研究,Eyal[13]提出可以將PoW共識機制中的挖礦行為看做一種博弈過程,并用博弈論的相關知識進行了定性分析,但并未給出相應的策略。隨后唐長兵等人[14]在這基礎之上對其進行了拓展和進一步分析。對于PoS算法的研究劉怡然等人[15]提出了計算參與共識節(jié)點的夏普利值來實現(xiàn)收益的二次分配,這一改進能夠提高小節(jié)點獲得收益的概率。由于Banzhaf值更適合于衡量聯(lián)盟中的各成員權利大小[16]。為此本文的記賬激勵部分在這些前人研究的基礎之上利用Banzhaf值進行了改進。
針對安全性問題,Pungila等人[17]提出了一種利用異構計算增強區(qū)塊鏈的事務處理和安全驗證的模型,該模型減小了系統(tǒng)的復雜度并提高了系統(tǒng)的安全性。在文獻中為了提升系統(tǒng)的安全性,提出了一種安全協(xié)議,該協(xié)議在完成共識后,通過快速確認來保障系統(tǒng)的安全運行。Berrang等人[18]提出了一種基于事務強確認的改進模型,該模型在共識完成后通過及時確認來保障系統(tǒng)的安全性和可靠性。
本文主要改進了原始共識算法的計票機制和激勵機制。原始的計票制度單一地統(tǒng)計受托人節(jié)點的幣齡作為選票依據(jù),不能夠準確地反應節(jié)點的真實情況,而改進的計票制度將更多的因素納入了計票范圍,能反映節(jié)點的更多信息。同時為了預防系統(tǒng)節(jié)點共謀破壞系統(tǒng)共識,可通過動態(tài)調(diào)整這些參數(shù)來剔除錯誤節(jié)點。此外針對當前激勵機制只對受托節(jié)點進行激勵對投票節(jié)點不激勵,在系統(tǒng)長時間運行后易加劇系統(tǒng)中的“貧富差距”的問題,本文提出了兩種激勵方式來抑制這種情況的發(fā)生。具體方案如下。
計票機制的改進是為了讓選票更具有公信力,同時加快對系統(tǒng)作惡節(jié)點的剔除。原始的DPoS算法將系統(tǒng)中的節(jié)點分為見證人節(jié)點和受托人節(jié)點,見證人節(jié)點負責投票給受托人,見證人節(jié)點的選票是其持有的幣齡。當受托人節(jié)點的選票達到一定標準,這些受托人會被選為“董事會成員”負責生成區(qū)塊。因此受托人節(jié)點的選票數(shù)為投票給它的所有節(jié)點的見證人節(jié)點的幣齡之和,計算公式如下:
這種計票方式只對節(jié)點的幣齡進行統(tǒng)計,意味著節(jié)點擁有的幣齡越多,那么就擁有更高的投票權。即使檢測到作惡節(jié)點的存在,由于節(jié)點的幣齡較高,它也擁有較高的投票權,因此無法對作惡節(jié)點快速地剔除。為此本文提出了一種改進的方案,改進方案不光對節(jié)點的幣齡進行統(tǒng)計,在投票前還需繳納一定的保證金作為選票的背書,增加選票的可信度同時也增加了節(jié)點的作惡成本。此外還將記錄節(jié)點投票的共識信息納入統(tǒng)計,歷史共識信息包括節(jié)點參與成功的共識次數(shù)和失敗的次數(shù),節(jié)點參與的正確共識越多說明節(jié)點本次的投票越可信。因此將投票節(jié)點的這些信息納入到綜合計票的統(tǒng)計范疇中,有利于提高節(jié)點選票的可信度。為此綜合投票的計算公式如下:
Ticket*為最后統(tǒng)計的得票數(shù)。其中ωi為需要統(tǒng)計各因素的權重,φi為各節(jié)點幣齡、保證金、共識記錄的值。將多種因素納入計票范疇,并分配不同的權重是為了降低選票對幣齡的單一因素依賴。權重系數(shù)的和等于1。在設置各權重大小時,首先為了避免文獻[19]所指出的部分節(jié)點通過共謀串票的方式來破壞選舉,因此在設置參數(shù)時不能過度依賴于單一權重,各個權重應盡量保持均衡。其次通常系統(tǒng)中的大節(jié)點擁有更多的保證金,若保證金的權重設置過大不利于小節(jié)點成為受托節(jié)點。此外在DPoS機制中系統(tǒng)節(jié)點存在不積極參加共識的問題,因此將投票記錄的權重設置相對大有利于激勵節(jié)點積極參與共識。最后綜合考慮設置各權重為ωi=[0.4,0.2,0.4]。在參與共識的過程中,為了加快作惡節(jié)點的剔除,就需要能及時地降低這些節(jié)點的權重,但又要防止節(jié)點受這些失敗記錄的影響造成長期的投票權重過低。因此本文在統(tǒng)計歷史共識信息時設置為2次成功的共識記錄可以抵消一次失敗的共識記錄。當正確共識次數(shù)小于錯誤次數(shù)兩倍時,統(tǒng)計結(jié)果為負值且呈指數(shù)減小,大于兩倍時線性增長。通過動態(tài)調(diào)整節(jié)點的權重,能夠快速降低作惡節(jié)點選票對整體投票結(jié)果的影響,也能鼓勵節(jié)點參加正確的共識來提高它的選票投票權重。為此公式如下:
其中能夠看出隨著節(jié)點參與的正確共識增加,其投票的權重也會相應的增加。當節(jié)點參與的錯誤共識越多時,其投票權重呈指數(shù)級下降,這樣能快速地降低錯誤節(jié)點的投票權重,從而將它們快速地剔除掉。為此投票算法的偽代碼如下所示:
原始的DPoS算法將系統(tǒng)中的節(jié)點分為受托節(jié)點和見證人節(jié)點,受托節(jié)點代表見證人節(jié)點參與共識。當前存在部分節(jié)點不及時投票,以及惡意串聯(lián)投票等方式來破壞選舉。針對這些問題,文獻[11]提出一種信用機制來加快惡意節(jié)點的剔除,該方案為每個節(jié)點設置信用分數(shù)和信用等級,信用總分為100分,每25分劃分為一個等級共4個等級。在一個投票周期內(nèi)根據(jù)各節(jié)點的投票情況調(diào)整節(jié)點的信用分數(shù),分數(shù)下降至25分以下的節(jié)點不會參與后續(xù)的共識。文獻[12]對于上述問題提出了一種基于信任機制的投票模型,一個節(jié)點的信用值分為直接信任和間接信任。直接信任值是指與該能夠直接建立聯(lián)系的節(jié)點,該方案認為這些節(jié)點的信譽值較高賦予了較高的信譽權重。間接信任值是指當前節(jié)點通過直接節(jié)點作為中間人,能夠間接建立聯(lián)系的節(jié)點的信譽值。該方案認為間接信任節(jié)點具有一定的信譽度,但存在著一定的風險,賦予這類節(jié)點相對較低的信譽權重。投票節(jié)點根據(jù)節(jié)點的直接信任值和間接信任值,加權得到節(jié)點的綜合信任值,投票節(jié)點根據(jù)節(jié)點的信用等級進行投票。本文的改進方案為了防止節(jié)點共謀串票的發(fā)生,增加節(jié)點的作惡成本,讓節(jié)點在投票時繳納一定的保證金作為擔保,越高的保證金增加了節(jié)點的作惡成本,因此節(jié)點的信譽度應該越高。此外節(jié)點的共識記錄作為節(jié)點過去履約的記錄,可以看做節(jié)點信用的背書,將節(jié)點的共識記錄作為節(jié)點的信用評級也是合理的。
針對原有算法投票節(jié)點積極性不高的問題,本文設計了兩種激勵機制:(1)投票激勵機制,用來激勵那些積極參與投票的節(jié)點。(2)記賬激勵機制,當見證人節(jié)點完成記賬獲得激勵時,通過對記賬激勵再分配來減小系統(tǒng)中各節(jié)點的“貧富”差距。具體方案如下所示。
(1)投票激勵機制
為了激勵系統(tǒng)節(jié)點積極參與投票,因?qū)τ趨⑴c投票的所有節(jié)點都進行激勵。節(jié)點的激勵收益由節(jié)點繳納的保證金,以及節(jié)點的歷史共識情況決定。投票激勵的計算如式(4)所示:表示所有節(jié)點繳納的
其中,ρ表示保證金的多少數(shù)目,Cs表示參與正確共識的次數(shù),Ce表示錯誤次數(shù)。從公式能夠看出節(jié)點繳納的保證金占比越多,節(jié)點的投票收益越高。這樣有利于鼓勵節(jié)點多繳納保證金,增加節(jié)點的作惡成本。其次也能看出,節(jié)點參與正常共識的次數(shù)越多也能夠增加其投票收益。針對投票激勵算法如下:
(2)記賬激勵機制
投票激勵一定程度上能夠解決系統(tǒng)節(jié)點積極性不高的問題,但在原始算法中還存在著分配機制不合理的問題。在原始算法中節(jié)點投票后選出受托節(jié)點代為完成記賬,系統(tǒng)會給予相應激勵,這些激勵由受托節(jié)點獨享,由于這些受托節(jié)點的投票權通常較大,而這些激勵長期只分給這些節(jié)點就會拉大系統(tǒng)節(jié)點的“貧富差距”,加大系統(tǒng)的中心化。為了解決這一問題本文引入博弈論相關知識進行解決。
博弈論是指研究多個決策主體之間行為具有相互作用時,各主體根據(jù)所掌握的信息作出有利于自己決策的理論。博弈的基本要素有行動順序、局中人、效用、均衡。在DPoS共識算法中,每個投票節(jié)點視作局中人,投票獲得的收益可以看做為效用,每個節(jié)點采取的不同投票策略做為行動順序,以上能夠看出整個共識過程符合博弈論的特征。此外投票節(jié)點將自己選票投給受托節(jié)點與其他節(jié)點競爭記賬權的行為可以看做是一種合作博弈[15]。為此本文根據(jù)合作博弈中的Banzhaf權利指數(shù)對記賬激勵進行了再次分配。
Banzhaf權利指數(shù)是用來定量分析投票者在一次投票中的重要程度的指數(shù),投票者在聯(lián)盟中越重要,其權利指數(shù)越大。在聯(lián)盟博弈中,若某個投票者在加入一個聯(lián)盟后能使原本沒有獲勝機率的聯(lián)盟獲勝,或它在退出聯(lián)盟后能使原本獲勝的聯(lián)盟無法取勝,那么這些聯(lián)盟可以看做這個投票者的有效聯(lián)盟[16]。對于每個投票者而言,其有效聯(lián)盟越多,它擁有的投票權也就越大。對于一個聯(lián)盟博弈(N,V)來說,若局中人投票權重可用向量β={β1,β2,…,βn}表示,權利指數(shù)計算公式[16]如下:
其中N={1,2,…,n}表示投票節(jié)點集合,V:2N→R為效用函數(shù),并且K∈N,v(K)表示聯(lián)盟收益。其范圍為0到1,βi越接近1權利越大。每個投票節(jié)點的記賬激勵由各節(jié)點的權利指數(shù)確定。偽代碼如下所示:
在激勵方案中,節(jié)點的收益分為投票收益和記賬收益。對于投票激勵而言,節(jié)點取得的收益由節(jié)點的保證金占比和節(jié)點的共識記錄共同決定的。若假設系統(tǒng)中有a、b兩個節(jié)點,若二者的保證金占比都相同的情況下。節(jié)點若想取得更多的收益,就必須積極參與共識,積累更多次數(shù)的正確共識。對于記賬激勵而言,運用博弈論知識來解決這類問題已經(jīng)成為一種必然方式[20]。如文獻[21]在對算法進行改進時建立了獎勵機制,其機制應用了沙普利值對節(jié)點取得的收益進行二次分配。由于DPoS的選舉方式更接近于議會選舉,Banzhaf值更能體現(xiàn)個體理性的特征[16]。本文為此在改進時采用了Banzhaf權利指數(shù)對節(jié)點的收益進行二次分配,為了證明方案的有效性在第4章實驗部分與文獻[21]進行了比較實驗,證明方案的有效性。
改進后的DPoS算法大致流程如圖1所示,流程主要包含兩個階段:選舉階段、記賬同步階段。
圖1 共識算法流程圖Fig.1 Flow chart of consensus algorithm
在選舉階段中,系統(tǒng)中節(jié)點主要分為投票節(jié)點、候選節(jié)點和受托節(jié)點。投票節(jié)點將自己的選票投給候選節(jié)點,系統(tǒng)按得票數(shù)對其進行排序,最后選出受托節(jié)點負責一輪記賬。大致過程如下:
(1)首先各節(jié)點向系統(tǒng)中廣播<Init_Msg:msgid,clock,ticket,nodetype,secretkey>初始化消息,消息內(nèi)容包含節(jié)點的id編號、時鐘信息、選票信息、節(jié)點的公鑰信息等,各節(jié)點將接收到的初始化消息緩存至本地,用于后續(xù)校驗數(shù)據(jù)。
(2)在各節(jié)點的元數(shù)據(jù)完成同步后,投票節(jié)點開始發(fā)出投票消息<Vote_Msg:msgid,voteid,receiverid,signature,ticket>內(nèi)容包括消息編號、投票人id、受票節(jié)點id、消息簽名,以及節(jié)點的選票數(shù)。其中消息編號每次遞增,用于區(qū)分選票的輪次。為了加快共識速度,節(jié)點需在規(guī)定的時間內(nèi)完成投票,否則產(chǎn)生超時異常,認定投票無效將罰沒節(jié)點的保證金。
(3)在節(jié)點在投票之后,還要對選票進行校驗。主要校驗選票的簽名是否正確,以及選票的id是否大于等于本地緩存的id號。若選票無效也將罰沒節(jié)點的保證金,同時記錄節(jié)點的投票的失敗信息。有效則選出受托節(jié)點,將這些節(jié)點添加到一個隊列里面,這些節(jié)點將輪流完成下一輪區(qū)塊的生成。在成功選出受托節(jié)點后,對那些受托節(jié)點的投票節(jié)點發(fā)放投票激勵。
在這個階段,為了將受托節(jié)點的選舉次數(shù)控制在合理范圍,在受托列表的每個節(jié)點,都要生成五個區(qū)塊,才進行新的一輪選舉。在節(jié)點生成區(qū)塊后,廣播區(qū)塊信息。其他節(jié)點接收到廣播消息,對區(qū)塊的簽名、區(qū)塊的高度等信息進行校驗。在數(shù)據(jù)同步過程中主要分有兩個過程,push階段和pull階段。push階段是當前生成區(qū)塊的受托節(jié)點,在生成區(qū)塊后主動地向其他節(jié)點發(fā)出同步信息的過程。pull階段是其他節(jié)點存放的數(shù)據(jù)可能滯后于最新數(shù)據(jù)時,主動向其他節(jié)點拉取最新數(shù)據(jù)的過程。
(1)push階段:當前的受托節(jié)點在生成區(qū)塊后,主動廣播相應信息,其中頭部包含這些信息<Block_Msg:nodeid,previoushash,blockheight,blocktime,signature>。各 個節(jié)點在接收到消息之后,驗證生成區(qū)塊的節(jié)點id是否在受托節(jié)點列表中,區(qū)塊的時間戳是否小于當前節(jié)點的本地時間,區(qū)塊頭中的blockheight必須大于當前節(jié)點緩存的高度,此外還要對父節(jié)點的Hash值等信息進行校驗。若區(qū)塊校驗正確則將區(qū)塊存放到本地,并廣播成功信息,發(fā)放記賬激勵。若校驗失敗則廣播失敗消息,記錄到失敗日志,更新節(jié)點信息。
(2)pull階段:這個過程是節(jié)點才啟動,或一些節(jié)點可能因某些原因在規(guī)定時間內(nèi)沒有收到來自受托節(jié)點push的區(qū)塊數(shù)據(jù)時,主動向其他節(jié)點請求同步的過程。節(jié)點首先會發(fā)出請求同步消息<Syn_Msg:synid,nodeid,blockheight,timestamp>請求同步。其他節(jié)點在收到同步請求后,檢查自己本地緩存最大的blockheight是否大于請求的blockheight當如果大于當前節(jié)點的區(qū)塊鏈長度大于請求節(jié)點的長度,被請求節(jié)點則會把最新數(shù)據(jù)同步給請求節(jié)點,從而完成區(qū)塊數(shù)據(jù)的同步。
為了驗證改進算法的有效性,本文共模擬了150個共識節(jié)點,通過實驗從多個維度對原始算法和改進算法進行了比較。實驗環(huán)境如表1所示。
表1 實驗環(huán)境Table 1 Experimental environment
綜合計票機制主要是增加了節(jié)點選票的可信度,有利于降低錯誤節(jié)點選票權重,進而影響其成為見證人節(jié)點的概率。因此實驗目的是為了檢驗綜合計票機制在系統(tǒng)中存在30%的錯誤節(jié)點時,經(jīng)過多輪共識能否將這些節(jié)點的權重盡量降低。實驗條件如下:開始時各節(jié)點擁有相同的幣齡,在實驗開始后逐漸使一部分節(jié)點參與無效投票或產(chǎn)生錯誤區(qū)塊,通過這種方式來模擬系統(tǒng)中的作惡節(jié)點。在經(jīng)過多輪共識后,系統(tǒng)中的各節(jié)點的狀態(tài)會不盡相同,從而各投票節(jié)點的選票權重產(chǎn)生差異。如圖2所示為經(jīng)過50輪投票的結(jié)果。
圖2 正常節(jié)點的選票權重Fig.2 Vote weights for normal nodes
從圖2中能夠看出在實驗輪數(shù)較少時,改進算法和原始算法錯誤節(jié)點的比例相差不大。當實驗進行到20輪時改進算法中的選票權重比例已經(jīng)保持較為穩(wěn)定,并與原始算法產(chǎn)生了較大差距。分析原因可知當一些節(jié)點參與了錯誤共識后,系統(tǒng)會記錄下它的共識記錄,改進算法在計票時會根據(jù)這些記錄對這些節(jié)點的投票權重進行調(diào)整,錯誤節(jié)點的選票權重就被降低了。而原始算法由于只對節(jié)點的幣齡信息進行統(tǒng)計,并不能很好地減小錯誤節(jié)點的投票權重。因此能夠得出結(jié)論改進的算法能夠加快系統(tǒng)對異常節(jié)點的篩選,降低異常節(jié)點成為受托節(jié)點的概率。
共識算法的時延是指從開始投票到生成區(qū)塊的時間消耗。因此算法的時延能夠直接反應出算法的真實性能,時間消耗越少,算法性能越高。本文在相同條件下進行了50輪實驗,得到了兩種算法的時延對比圖,如圖3所示。
圖3 兩種算法共識時間消耗對比Fig.3 Comparison time consumption of two algorithms
從圖3中能夠看出,隨著實驗次數(shù)的增加,兩種算法的時間消耗都呈增長趨勢,但總體而言原始算法時間消耗的增長率高于改進算法。因此隨著共識次數(shù)的增多,改進算法的時間消耗的優(yōu)勢體現(xiàn)得越明顯。
原始算法存在投票節(jié)點積極性不高的問題,為了驗證激勵機制能否增加系統(tǒng)節(jié)點的活躍度。本實驗在各投票節(jié)點初始幣齡一致的情況下進行了50輪共識,并統(tǒng)計了各輪次參與投票的節(jié)點的比例,實驗結(jié)果如圖4所示。
圖4 參與共識投票的節(jié)點比例Fig.4 Proportion diagram of number of voting nodes
從圖4中能夠看出,改進算法相較于原始算法具有明顯的優(yōu)勢,原始算法在多輪共識后,節(jié)點的參與度接近于70%,改進算法的節(jié)點活躍度接近于80%左右。分析原因可知改進算法對參與投票的節(jié)點有相應的投票激勵,在投票后它的委托節(jié)點成功完成共識后,會有相應的記賬激勵。在兩種激勵機制的作用下改進算法的節(jié)點參與度要顯著高于原始算法,說明兩種激勵機制能夠提高系統(tǒng)節(jié)點的參與度。
對于DPoS共識算法的改進研究,已經(jīng)有了很多相關研究。如文獻[12]針對節(jié)點的投票積極性不高和系統(tǒng)沒有快速對錯誤節(jié)點進行剔除等問題,提出通過建立節(jié)點的信任等級來加快錯誤節(jié)點的剔除。文獻[20]提出了通過激勵機制來解決原始算法存在的問題,在投票時根據(jù)投票的次數(shù)以及耗時發(fā)放相應激勵,其次利用舉報激勵來減小系統(tǒng)的串票發(fā)生。文獻[21]在改進算法時,利用夏普利值對節(jié)點的收益進行了二次分配。為了證明本文方案的有效性,進行了如下的比較。
共識算法共識的時間耗時越少,共識的效率越高。本實驗旨在對比本方案與文獻[12]提出的算法在完成50輪共識后的時間消耗情況。對比實驗的數(shù)據(jù)來自于文獻[12]中所給出的實驗數(shù)據(jù)。對比結(jié)果如圖5所示。
圖5 本文方案與文獻方案耗時比較Fig.5 Time consumption between two schemes
從圖中可以看出文獻[12]的時間消耗呈線性增長,每輪時間消耗相對穩(wěn)定。但本文的方案時間消耗雖略有波動,穩(wěn)定性不及文獻[12]的方案,但進行50輪實驗的總體耗時要好于文獻[12]所提出的方法。
為了比較本方案與文獻[20]所提方案在投票節(jié)點參與度方面的表現(xiàn)。本實驗環(huán)境設置了和文獻[20]相同的實驗條件,即仿真100個節(jié)點參與投票共識,并進行了20組實驗。本實驗的對比數(shù)據(jù)來自于文獻[20]中所提供的在其投票激勵生效時的數(shù)據(jù),對比結(jié)果如圖6所示。
圖6 兩種方案參與共識投票的節(jié)點比例Fig.6 Node ratio of consensus voting in two schemes
從圖中能夠看出文獻[20]提出的投票激勵改進方案的投票節(jié)點數(shù)維持在65%~70%。而本文提出的方案參與投票的節(jié)點總體上要高0.1左右。因此本文所提的方案在節(jié)點投票比例方面優(yōu)于文獻[20]所給方案。
為了驗證本文改進方案在收益分配方面的有效性,本實驗與文獻[21]進行了對比。當系統(tǒng)中節(jié)點情況和文獻[21]保持一致的情況下,增加系統(tǒng)中的節(jié)點數(shù)目,進行多輪共識,觀察節(jié)點的收益變化。隨著節(jié)點數(shù)目的增多,最后收益的分布占比如圖7所示。
圖7 兩種方案收益對比Fig.7 Comparison of benefits between two schemes
從圖7中可以看出,在條件相同的情況下。雖然本文方案收益分配方式的最終效果比文獻[21]略差,但隨著節(jié)點數(shù)目的增多,二者的收益都呈現(xiàn)下降的趨勢,總體上與文獻[21]呈現(xiàn)趨勢大致相同,能夠說明本文的激勵方案具有有效性。
本文針對現(xiàn)有的DPoS算法存在著錯誤節(jié)點剔除不及時和收益分配不合理等問題進行了研究,并對算法的計票機制和激勵機制進行了改進。改進后的計票機制將節(jié)點的更多維信息納入了計票范疇,使得選票能更準確地反映出節(jié)點的真實信譽度,這有助于加快錯誤節(jié)點的剔除。激勵機制的改進分為投票激勵和記賬激勵兩個部分。投票激勵會對參與投票的所有節(jié)點進行激勵,記賬激勵對完成記賬的聯(lián)盟,根據(jù)博弈論中的權利指數(shù)對記賬收益進行二次分配,讓節(jié)點之間的收益更為均衡。未來的工作會對算法的吞吐量、安全性等方面進行研究,進一步提升算法的性能,為區(qū)塊鏈技術的發(fā)展做出自己的貢獻。