付瑤瑤,李盛恩
山東建筑大學 計算機科學與技術學院,濟南250100
區(qū)塊鏈因比特幣[1]而生,最初作為比特幣的底層技術解決比特幣系統(tǒng)中各方之間的信任問題。區(qū)塊鏈的本質(zhì)就是一種分布式數(shù)據(jù)庫,具有去中心化、不可篡改、可追溯和集體維護的特點[2]。作為數(shù)字加密貨幣領域的核心支撐技術,區(qū)塊鏈通過集成P2P協(xié)議、非對稱加密、共識機制、塊鏈結構等多種技術,解決了數(shù)據(jù)的可信問題。通過應用區(qū)塊鏈技術,可以在互不信任的多方間無需任何第三方機構實現(xiàn)可信、對等的價值傳輸[3]。區(qū)塊鏈技術作為一種普適性的底層框架,其應用范圍已經(jīng)超出了數(shù)字貨幣領域的范疇。在醫(yī)療領域,文獻[4-6]針對醫(yī)療數(shù)據(jù)容易發(fā)生隱私泄露及不同醫(yī)療機構間共享醫(yī)療數(shù)據(jù)困難的問題,提出利用區(qū)塊鏈技術實現(xiàn)了醫(yī)療數(shù)據(jù)的安全存儲與共享。在數(shù)據(jù)溯源方面,Liang等人[7]將用戶對數(shù)據(jù)的操作轉化成一定格式的源數(shù)據(jù),將這些源數(shù)據(jù)存儲在區(qū)塊的交易字段中實現(xiàn)日志的功能。分布式數(shù)據(jù)庫中首先面臨的就是如何解決數(shù)據(jù)的分布式一致性問題[8]。區(qū)塊鏈的共識層中封裝了共識算法,共識算法作為區(qū)塊鏈的工作引擎,能夠使系統(tǒng)中的各參與方在沒有中心機構的控制下進行大規(guī)模的協(xié)同工作,實現(xiàn)數(shù)據(jù)的分布式一致性[9]。傳統(tǒng)的分布式數(shù)據(jù)只需支持崩潰容錯,而區(qū)塊鏈系統(tǒng)具有去中心化的特點,部分節(jié)點可能并不可信,所以算法需要支持更為復雜的拜占庭容錯[10]。隨著區(qū)塊鏈技術在不同領域的應用,共識機制的研究也成為分布式系統(tǒng)中的一個研究熱點,相繼出現(xiàn)了多種主流共識機制。
工作量證明(Proof of Work,PoW)機制[11]源于Dwork等人對防范垃圾郵件問題進行的研究,比特幣采用PoW 機制解決了系統(tǒng)中存在女巫攻擊問題[12]。PoW要求礦工貢獻計算資源求解工作量證明問題(俗稱“挖礦”),最先挖礦成功的礦工將會獲得區(qū)塊記賬權及系統(tǒng)發(fā)放的比特幣獎勵。這種機制的特點是利用節(jié)點算力保證系統(tǒng)安全,并能夠有效避免區(qū)塊鏈分叉問題。但PoW過程會使部分礦工大量浪費算力,并且一些算力低的節(jié)點會將彼此的算力聯(lián)合組成礦池,礦池算力的擴張也會導致系統(tǒng)中算力中心化的現(xiàn)象。2012 年,King 等人[13]在點點幣中首次實現(xiàn)權益證明(Proof of Stake,PoS)機制。PoS 中的節(jié)點把持有貨幣的數(shù)量和天數(shù)作為權益(幣齡)競爭區(qū)塊記賬權,權益越大越容易獲得記賬權,一定程度上縮短了共識達成的時間,提高了共識效率。但是隨著幣齡的累計,系統(tǒng)長期運行PoS機制可能導致權益集中化的現(xiàn)象[14]。比特股(Bitshares)項目采用了股份授權證明(Delegated Proof of Stake,DPoS)機制,在這種機制中,每個擁有權益的節(jié)點都作為一個股東節(jié)點具有投票的權利,每個股東節(jié)點將票投給自己認為可信的節(jié)點,得票數(shù)最多且愿意成為代表的前N個節(jié)點進入“董事會”成為授權代表節(jié)點,代表節(jié)點的職責是生產(chǎn)區(qū)塊并進行區(qū)塊的驗證。節(jié)點進入“董事會”之前必須先交納一定數(shù)量的保證金,每一輪選舉結束之后,這N 個代表節(jié)點會輪流生產(chǎn)區(qū)塊,并且區(qū)塊的驗證只在代表節(jié)點內(nèi)部進行。如果一個節(jié)點錯過生產(chǎn)相對應的區(qū)塊或者惡意篡改區(qū)塊,股東會收回對該節(jié)點的投票從而將該節(jié)點“投出”董事會,同時該節(jié)點也面臨保證金被罰的風險[15]。DPoS 機制可以認為是一種“民主集中式”的記賬方式[16],整個共識過程不依靠任何算力,很好地解決PoW 機制中浪費計算資源和PoS 機制中可能出現(xiàn)的權益集中化的現(xiàn)象。這種機制大幅減少了參與區(qū)塊生成和驗證區(qū)塊的節(jié)點的數(shù)量,可以實現(xiàn)秒級的共識驗證。
但是目前的DPoS 機制仍然存在一些缺陷,不少研究者也對其進行了改進。針對機制中股東節(jié)點投票的積極性不高的問題,文獻[17]采用一種投票激勵方案激勵股東節(jié)點投票的積極性。在這種方案中,每個股東節(jié)點可以根據(jù)代表節(jié)點的信用分數(shù)投反對票,如果一個信用分數(shù)低的節(jié)點在下一輪的選舉中未能成為代表節(jié)點,系統(tǒng)將給予對該節(jié)點投反對票的節(jié)點信用系數(shù)獎勵。若選民節(jié)點在某輪投票選舉中未進行投票操作,則會扣除一定信用分數(shù)。選民節(jié)點通過正確行使投票權為自己贏得信用分數(shù),增大自身日后成為代表節(jié)點的可能性。但是這種方案并不能很好地解決節(jié)點之間的信任問題,節(jié)點可以通過合理生產(chǎn)區(qū)塊和正確投票兩種方式提高自身的信用分數(shù),因而信用分數(shù)高的節(jié)點并不代表該節(jié)點被信任的概率大。EOS 項目為了更好地解決對代表節(jié)點的監(jiān)督問題對DPoS 機制進行了改進,在改進后的機制中每輪只選出21 位代表節(jié)點[18]。雖然這種方式可以提高出塊速率,但是代表節(jié)點數(shù)量的減少會導致系統(tǒng)中心化程度加強。像PoW 機制以及PoS 機制中都是挖礦成功的節(jié)點獲得交易費用和系統(tǒng)發(fā)放的貨幣獎勵,而其余付出過工作量或者幣齡的節(jié)點一無所得。而在DPoS機制中,每次共識過程結束,只有“董事會”中的授權代表節(jié)點會獲得獎勵,最終會導致幣的流動性大大減少,加劇系統(tǒng)中“窮者越窮,富者越富”的局面。另外,在DPoS 機制的每次共識過程中,部分節(jié)點可能會篡改區(qū)塊信息、持續(xù)生成無效區(qū)塊等其他作惡行為,由此會給系統(tǒng)的安全性造成一定的威脅。
因此,本文針對以上DPoS 機制中存在的問題提出了一種該機制的改進方案,改進后的機制能夠很好地解決以上問題并進行了實驗加以驗證。
獎勵機制是為解決節(jié)點投票積極性不高而采取的一種方案。在DPoS 機制中,普通節(jié)點投票時需要耗費時間精力等,而且一個節(jié)點投票與否對自身來說沒有任何的影響。改進后的方案中加入了獎勵機制,每次投票選出N 個節(jié)點負責出塊,并獲得一定的獎勵,而這其中每一個節(jié)點的投票者本身也會從中獲得一定的回報。具體來說,每一次共識過程結束之后,成功生產(chǎn)區(qū)塊的某個代表節(jié)點要將獲得的獎勵按照相應的比例分給為它投票的所有節(jié)點。
3.1.1 獎勵分配方案
DPoS機制中的每個擁有數(shù)字貨幣的節(jié)點都具有投票的權利,且投票時遵循“一幣一票”的原則。舉個例子,假設Alice 擁有100 個幣,那么她每票就擁有100 單位的票權,Bob擁有50個幣,那么他每票就擁有50單位的票權。假設Alice 和Bob 同時投票給了節(jié)點候選人John,那么John獲得的票數(shù)就為150票。
獎勵機制規(guī)定每次代表節(jié)點成功出塊所得的收益由它本身和為它投票的節(jié)點共享,通常會按照投票節(jié)點的票權占比分配它們各自的收益,因此票權占比大的節(jié)點(大節(jié)點)所得的收益相對會多一些。文獻[19]提出了如何計算PoS 機制中每個參與區(qū)塊生成的節(jié)點的收益,算法的主要思想是將所有參與區(qū)塊生成的節(jié)點看作一個聯(lián)盟博弈(N 代表局中人集合,v 稱為價值函數(shù))[20],中的每個節(jié)點i 稱為局中人,聯(lián)盟博弈中要解決的關鍵問題就是如何分配每個局中人的權益。中每個局中人所得的收益稱為沙普利值,記為。記節(jié)點Ni在一次共識過程結束后所得的收益為E,則每個局中人i 所得的收益為:
在這種收益分配算法中,大節(jié)點(票權占比大的節(jié)點)對應的沙普利值不一定與它們的票權占比成正比。比如,當大節(jié)點的票權占比不變而小節(jié)點的個數(shù)增加時,小節(jié)點所得的總體收益會增加,大節(jié)點的總體收益會減少。這種分配算法旨在通過增加小節(jié)點的收益改善系統(tǒng)中貧富不均的現(xiàn)狀,但算法未能考慮大節(jié)點會有分散投票權(比如一個節(jié)點有1 000 個幣,將這1 000 個幣分成10份分別投給不同的節(jié)點)的行為,大節(jié)點可以通過分散投票權將自身的幣投給多個節(jié)點,這樣大節(jié)點就變成了多個( )N,v 中的小節(jié)點,以此增加大節(jié)點自身的總體收益。因此,算法有必要限制節(jié)點的投票次數(shù),防止一個投票者通過向多個節(jié)點投票獲得更大的收益。同時考慮到系統(tǒng)運行DPoS機制時每經(jīng)過一個時間間隔(目前為1天)代表節(jié)點的名單會被更新一次,當系統(tǒng)發(fā)起投票時,每個節(jié)點投票的時間也是不一樣的。為了給積極投票的節(jié)點更多的獎勵(即如果節(jié)點能夠保持時時在線,及時響應系統(tǒng)發(fā)起的投票任務,則會獲得較多的收益),可以在收益分配算法中加入時間因素,節(jié)點投票的時間與系統(tǒng)發(fā)起投票日期的時間間隔越小,節(jié)點所得的收益就越多。因此,對于系統(tǒng)中的所有節(jié)點來說,要獲得收益不僅要向其他節(jié)點投票,還應該在系統(tǒng)發(fā)起投票指令后及時投票,這樣才有可能獲得較多的收益。
本文在文獻[19]中的收益分配算法基礎上進行了改進,改進后的算法規(guī)定每個投票者只能對一個節(jié)點進行投票,并在計算節(jié)點沙普利值后又加入了時間因素對節(jié)點所得收益進行再分配,改進后的收益分配算法如算法1所示。
3.1.2 合理性分析
在獎勵分配方案中,每個投票者所得的最終收益不僅取決于它們在整個聯(lián)盟博弈中的沙普利值,還取決于它們投票的時間與系統(tǒng)發(fā)起投票日期的時間間隔。假設系統(tǒng)中存在兩個節(jié)點a 和b,且兩節(jié)點對應的沙普利值均為1/3,按計算沙普利值的方式兩節(jié)點所得的收益都為33%。如果a 節(jié)點與發(fā)起投票的時間間隔Ta=1,b 節(jié)點對應的時間間隔Tb=6,根據(jù)算法a 節(jié)點所得最終收益仍然為33%,而b 節(jié)點的最終收益僅為33%×1/6≈5.5%。由此,可以看出雖然兩節(jié)點在( )N,v 中的沙普利值相同,但a 節(jié)點的投票時間要早于b 節(jié)點,所以a節(jié)點的最終收益要高于b 節(jié)點。因此,節(jié)點要想獲得較多的收益,應該保持時時在線,及時進行投票。
3.1.3 懲罰措施
針對成功出塊的代表節(jié)點沒有遵守協(xié)議獨吞收益的情況,系統(tǒng)可以設置懲罰措施約束代表節(jié)點的行為。區(qū)塊獎勵只有在代表節(jié)點成功生成塊時提供,因此投票者有責任跟蹤他們支持的代表節(jié)點的行為。假設在一次共識過程中由代表節(jié)點Ni負責生成區(qū)塊,當Ni成功生成區(qū)塊并得到相應的獎勵后并沒有將獎勵分配給它的支持者,那么投票給Ni的節(jié)點將收回它們的選票。系統(tǒng)監(jiān)測到一個代表節(jié)點的選票被它的大多數(shù)支持者收回時,就會認定此節(jié)點做出了違反系統(tǒng)規(guī)定的行為,此時系統(tǒng)就會將該節(jié)點的保證金沒收,以此來表示對該節(jié)點的懲罰。一個普通節(jié)點成為代表節(jié)點時需要繳納的保證金的金額相當于生產(chǎn)一個區(qū)塊收入的100倍,因此如果一個節(jié)點做出獨吞收益的行為,它將損失一筆數(shù)量不小的財產(chǎn),對該節(jié)點來說得不償失。獎勵機制流程如圖1所示。
圖1 獎勵機制流程圖
在DPoS 機制的選舉過程中,系統(tǒng)不希望出現(xiàn)過作惡行為的節(jié)點再次成為授權代表節(jié)點。因此,為了降低惡意節(jié)點成為代表節(jié)點的概率,系統(tǒng)有必要對代表節(jié)點的行為進行打分,根據(jù)它們的行為給予相應的分數(shù),分數(shù)高的節(jié)點被信任的概率就越大,在下一輪選舉中往往占有一定優(yōu)勢。
3.2.1 信譽值
在DPoS 機制中,每輪投票結束后,成功當選“董事會”成員的節(jié)點擁有驗證并生產(chǎn)區(qū)塊的權利。系統(tǒng)開始會為每個節(jié)點分配100分的信譽值。傳統(tǒng)DPoS機制中每個周期內(nèi)一個代表節(jié)點只生產(chǎn)一個新區(qū)塊,如果一個節(jié)點成功生產(chǎn)出一個區(qū)塊并且經(jīng)其他節(jié)點驗證此區(qū)塊確實有效,系統(tǒng)會給予此節(jié)點10分的信譽值獎勵;并且信譽值會在以后隨著節(jié)點的行為逐漸累加,閾值為200分。當一個節(jié)點存在作惡行為、未在規(guī)定時間段內(nèi)生產(chǎn)出有效的區(qū)塊時,此節(jié)點會被扣掉10分。
3.2.2 節(jié)點狀態(tài)
根據(jù)節(jié)點信譽值的大小,本文會給每個節(jié)點添加一個狀態(tài)標識,并設置三種不同的節(jié)點狀態(tài),每個節(jié)點的狀態(tài)都與它們的信譽值相關:
normal:代表信譽值在區(qū)間[100,150]內(nèi)的節(jié)點,此狀態(tài)的節(jié)點未當選過代表節(jié)點或在共識過程中表現(xiàn)一般;
good:代表信譽值在區(qū)間(150,200]內(nèi)的節(jié)點,此狀態(tài)的節(jié)點在共識過程中表現(xiàn)良好,無作惡行為出現(xiàn)。
bad:代表信譽值小于100分的節(jié)點,此節(jié)點在共識過程中表現(xiàn)不佳,有作惡或其他不良行為出現(xiàn);
3.2.3 信譽值重置
為了避免出現(xiàn)由于某些節(jié)點信譽值累計過高導致投票結果趨于中心化的現(xiàn)象,信用機制中增加了重置信譽值的功能。DPoS 機制中得票數(shù)最多的前N個節(jié)點在一個周期內(nèi)輪流生產(chǎn)區(qū)塊,當一個周期結束之后,系統(tǒng)又會重新選舉代表節(jié)點。每輪選舉開始時,節(jié)點都會保留它們當前的信譽值,只有當每個周期結束之后,節(jié)點的信譽值才會發(fā)生變化。信譽值重置是針對good狀態(tài)的節(jié)點而言的,一個節(jié)點的信譽值最高可以為200分,當一個狀態(tài)為good 的節(jié)點的信譽值達到200 分時,此時系統(tǒng)會將該節(jié)點的信譽值重置為100分(為了讓其他狀態(tài)的節(jié)點有更多的機會生產(chǎn)區(qū)塊及在一定程度上縮小貧富差距,綜合考慮,重置為100分最合適)。
3.2.4 節(jié)點狀態(tài)變更
狀態(tài)變更指的是代表節(jié)點的狀態(tài)變化,主要與節(jié)點產(chǎn)生的區(qū)塊數(shù)量及有效性相關。開始系統(tǒng)內(nèi)所有的節(jié)點均處于normal狀態(tài),當代表節(jié)點多次產(chǎn)生有效區(qū)塊并且產(chǎn)生區(qū)塊的次數(shù)大于累計值(累計值是一個節(jié)點狀態(tài)變更的常量)時可升級為good狀態(tài),處于good狀態(tài)的節(jié)點有較高的信譽值,在以后的競爭選舉中處于一定優(yōu)勢;當處于good 狀態(tài)的節(jié)點有產(chǎn)生無效區(qū)塊的記錄或信譽值達到閾值時,該節(jié)點可能又變?yōu)閚ormal 狀態(tài);而good狀態(tài)的節(jié)點產(chǎn)生無效區(qū)塊的次數(shù)超過累計值時,該節(jié)點可能被降級為bad 狀態(tài),bad 狀態(tài)的節(jié)點只有產(chǎn)生有效區(qū)塊才可能升級為normal 狀態(tài)。代表節(jié)點的狀態(tài)轉換圖如圖2所示。
圖2 節(jié)點狀態(tài)轉換圖
在DPOS中加入信用機制后,每個節(jié)點都擁有一個狀態(tài)標志,這樣在每一輪的投票選舉過程中投票節(jié)點可以根據(jù)其他節(jié)點的狀態(tài)選擇自身信任的節(jié)點,因此節(jié)點的狀態(tài)可以看作是節(jié)點的一個標記。Good狀態(tài)的節(jié)點說明在多次共識過程中都能產(chǎn)生有效區(qū)塊,其他節(jié)點出于對系統(tǒng)安全性的考慮,在投票時會優(yōu)先考慮這些節(jié)點,因此信譽值越高的節(jié)點在每輪選舉過程中往往占有一部分優(yōu)勢,再次被選為代表節(jié)點的可能性較大。整個信用機制的流程圖如圖3所示。
投票結果統(tǒng)計是選舉代表節(jié)點的最后一個流程,合理的計票方式能夠提升選舉結果的公平性及系統(tǒng)的安全性。本文針對DPOS機制的改進方案提出了一種新的投票結果的計算方式,某節(jié)點最終得票數(shù)的計算公式如下:
總得票數(shù)=α×支持票+β×信譽值 (2)
圖3 信用機制流程圖
在這種計算方式中引入了兩個參數(shù)α和β(α+β=1),節(jié)點處于不同狀態(tài)時對應的的α和β的值是不同的,所以α和β能夠在一定程度上影響節(jié)點的最終票數(shù)。本文引入信用機制的目的是降低惡意節(jié)點成為代表節(jié)點的概率,因此系統(tǒng)必須保證信譽值高的節(jié)點成為代表節(jié)點需要的票數(shù)比信譽值低的節(jié)點需要的票數(shù)要少?;谶@種原則,本文為三種狀態(tài)下的節(jié)點對應的α和β設置了不同的值。當一個節(jié)點處于normal狀態(tài)時,α和β的值都置為0.5;對good狀態(tài)的節(jié)點來說,它們的信譽值較高,成為代表節(jié)點需要的票數(shù)要少,所以β的值理論上要大于0.5,α的值要小于0.5;而bad狀態(tài)的節(jié)點成為代表節(jié)點需要的票數(shù)最多,所以α的值要大于0.5,而β的值要小于0.5。對處于同一狀態(tài)的節(jié)點來說,它們的信譽值相差無幾,得票數(shù)多的節(jié)點成為代表節(jié)點的概率大;對處于不同狀態(tài)的兩個節(jié)點來說,信譽值越高的節(jié)點對應的β的值越大,這也就意味著信譽值低的節(jié)點要成為代表節(jié)點需要更多的票數(shù)。因此,這種新的投票結果的計算方式保證了選舉結果的公平性,從而能夠提升系統(tǒng)的安全性。信用機制的具體算法如算法2所示。
基于提出的DPOS機制的改進方案,本文在配置為Intel i5-3320M CPU 2.60 GHz處理器,8 GB內(nèi)存,64位的Ubuntu 18.04 系統(tǒng)下,在以太坊客戶端Geth 上搭建測試用的本地區(qū)塊鏈進行實驗驗證。
假設對某一代表節(jié)點進行投票的a節(jié)點對應的沙普利值為1/3,即不考慮時間因素的情況下a節(jié)點可獲得33%的收益。當系統(tǒng)規(guī)定的投票周期為1天(即24小時)時,分析a節(jié)點與發(fā)起投票的時間間隔逐漸增大的情況下,a節(jié)點最終所得收益的情況。
從圖4中可以看出,當a節(jié)點與發(fā)起投票的時間間隔從1增大到24的過程中,a節(jié)點所得的收益由33%下降到不足1.5%。這說明當節(jié)點對應的沙普利值不變的情況下,利用算法對收益再分配時投票時間越早的節(jié)點所得的收益就越高,反之就越低。
圖4 a 節(jié)點收益情況
為了驗證在新的投票結果的計算方式中,對于不同狀態(tài)的節(jié)點來說,在獲得的投票數(shù)相同的情況下,信譽值低的節(jié)點要成為代表節(jié)點需要更多的票數(shù),本文實驗方案中選擇了三個信譽值不同的節(jié)點:a節(jié)點(信譽值為80分)、b節(jié)點(信譽值為125分)和c節(jié)點(信譽值為175分),分析這三個節(jié)點在得票數(shù)相同的情況下按投票結果計算方式所得的總得票數(shù)情況。實驗結果如圖5所示。
圖5 各節(jié)點得票數(shù)情況
由節(jié)點總得票數(shù)的對比圖可知,三種節(jié)點在得票數(shù)相同的情況下,c節(jié)點的總得票數(shù)明顯要高于b節(jié)點和a節(jié)點,這說明信譽值低的節(jié)點只有比信譽值高的節(jié)點獲得更多的票數(shù)才有可能成為代表節(jié)點;另外,當投票數(shù)超過200 后,a節(jié)點的總得票數(shù)很可能高于b節(jié)點。因此,為了降低信譽值低的節(jié)點成為代表節(jié)點的概率,可以動態(tài)調(diào)整α和β的值以保證系統(tǒng)的安全穩(wěn)定運行。
EOS項目在傳統(tǒng)DPOS機制上進行了改進,將代表節(jié)點的數(shù)量由101個減為21個,并且在共識過程中采用代表節(jié)點連續(xù)出塊的方式提高區(qū)塊的產(chǎn)成速率。雖然這種方式可在一定程度上縮短交易的確認時間,但仍未解決傳統(tǒng)DPOS機制中存在的問題。文獻[17]采用基于信用的獎懲方案解決節(jié)點投票積極性不高的問題,節(jié)點可以通過投反對票的方式獲取更多的信用分數(shù),當節(jié)點兩次投票的時間間隔超過T時,信用分數(shù)就會降低。在這種改進方案中,節(jié)點會通過投票的方式為自己贏得更多的信用分數(shù),雖然信用分數(shù)高的節(jié)點被選為代表節(jié)點的可能性大,但是節(jié)點的信用分數(shù)高并不代表被信任的概率大,而且對于那些作惡的節(jié)點并沒有相應的懲罰措施。
本文提出的改進方案中通過信用機制為節(jié)點設置了狀態(tài)和信譽值,系統(tǒng)根據(jù)節(jié)點在共識過程中的表現(xiàn)增加/減少它們的信譽值,信譽值的高低代表了不同的狀態(tài)。good 狀態(tài)的節(jié)點說明它在共識過程中幾乎無作惡行為,被信任的可能性較大;而bad 狀態(tài)的節(jié)點說明它在共識過程中有大量作惡行為,被信任的概率小。節(jié)點在投票時可根據(jù)其他節(jié)點的狀態(tài)判斷它們是否能被信任,從而可降低惡意節(jié)點成為代表節(jié)點的可能性。為提高投票節(jié)點的積極性,獎勵機制采用為投票節(jié)點分配收益的方式而非給予它們相應的信用分數(shù)。獎勵機制規(guī)定代表節(jié)點的收益要與為它投票的節(jié)點共享,由于每個節(jié)點都帶有一個狀態(tài),投票的節(jié)點為了盡可能的獲得收益,在投票時更傾向于投給good狀態(tài)的節(jié)點,可在一定程度上保證系統(tǒng)的安全性。
由于每個投票節(jié)點手中的權益是不一樣的,因此它們?yōu)橥粋€代表節(jié)點投票后的票權占比也是不同的。按照每個投票節(jié)點的票權占比分配收益的方式看似是一種合理的分配策略,但實際上會讓系統(tǒng)中權益越多的節(jié)點越有錢,加劇貧富差距。本文實驗主要分析在時間間隔T固定的情況下(為了簡單起見,可以令T=1),系統(tǒng)中存在兩個大節(jié)點(每個大節(jié)點擁有1/3 的票權且只能投票一次)時,隨著小節(jié)點的數(shù)目逐漸增多,按沙普利值再分配和按票權占比再分配兩種方式中小節(jié)點所得收益的情況。實驗結果如圖6 所示。從圖6 可以看出,在小節(jié)點個數(shù)相同的情況下,考慮時間因素進行收益再分配時,小節(jié)點按沙普利值再分配所得的收益都要高于按票權占比再分配得到的收益。這說明當所有節(jié)點的時間間隔T都相同時,改進的分配算法能夠讓小節(jié)點獲得較多的收益,這將有利于小節(jié)點的健康發(fā)展和縮小大小節(jié)點之間的貧富差距。
圖6 小節(jié)點最終收益情況
文獻[17]為降低惡意節(jié)點成為代表節(jié)點的可能性,提出了一種優(yōu)化投票結果的統(tǒng)計方案,具體計算公式為:
式中,A的值可根據(jù)系統(tǒng)的安全性進行設定,B、C的值是常量,通常取B和C的值是0.5。
為了將本文提出的對投票結果的優(yōu)化方案與文獻[17]中的方案進行對比,分析在考慮評分的情況下惡意節(jié)點成功被投票為代表節(jié)點的概率,本實驗在Geth搭建了一條測試鏈gttc,設置了20 個賬戶,并以go語言的方式將改進的DPOS 方案添加進Geth的創(chuàng)世文件genesis.j son中。由于文獻[17]中的投票節(jié)點可以投反對票,因此為gttc上的每個賬戶也都設置了投反對票的功能。當gttc啟動的時候,會從創(chuàng)世文件中讀取相關配置,系統(tǒng)將按照改進的共識機制進行投票、生成區(qū)塊。第一輪投票結束后各節(jié)點所得票數(shù)情況如表1所示。
表1 投票結果
開始所有節(jié)點都是處于同一狀態(tài),所以可直接根據(jù)投票結果選出得票數(shù)最多的前4 個節(jié)點作為代表節(jié)點進行第一輪的區(qū)塊生成及共識過程,并令賬戶名為“0x30d……51571”的節(jié)點在共識過程中產(chǎn)生無效區(qū)塊,則共識過程結束后此節(jié)點變?yōu)閎ad狀態(tài),其他節(jié)點仍為normal狀態(tài)。將bad狀態(tài)的節(jié)點命名為B節(jié)點,并以第一輪共識過程結束后各節(jié)點的狀態(tài)為基礎再次投票,重復進行50 次實驗,統(tǒng)計B節(jié)點在兩種投票結果計算方式中的得票數(shù)情況。根據(jù)實驗結果,繪制出B節(jié)點在兩種方案中的票數(shù)排名對比折線圖,如圖7所示(方案1是本文提出的投票結果的優(yōu)化方案,方案2 是文獻[17]中的方案)。
圖7 B 節(jié)點所得票數(shù)的排名情況
從B節(jié)點在50 次實驗中的票數(shù)排名情況可以看出,大約30 次實驗之后B節(jié)點在兩種方案中的排名情況逐漸穩(wěn)定(方案1 中排名17 左右,方案2 中排名11 左右),但從對比情況可得出總體上B節(jié)點在方案2 的票數(shù)排名要比方案1 中的排名靠后。這說明本文提出的方案能夠顯著降低B節(jié)點成為代表節(jié)點的可能性,從而為系統(tǒng)的安全性提供了一定的保障。
本文通過對DPOS共識機制的特點進行分析,針對其中存在的節(jié)點投票積極性不高及如何降低惡意節(jié)點成為代表節(jié)點的概率問題,提出了一種基于獎勵機制和信用機制的改進方案。獎勵機制中規(guī)定投票節(jié)點也會獲得相應的收益,并采用計算節(jié)點沙普利值的方式分配各自的收益,由此普通節(jié)點的投票積極性會提高并縮小了節(jié)點之間的貧富差距。信用機制為節(jié)點設置了信譽值和狀態(tài),提出了一種將信譽值考慮在內(nèi)的投票結果的計算方式。新的投票結果的計算方式能夠使信譽值高的節(jié)點獲得極少的票數(shù)便可成為代表節(jié)點,而信譽值低的節(jié)點要成為代表節(jié)點需要更多的票數(shù),從而能夠提高系統(tǒng)的安全性。改進后的方案通過在以太坊平臺上搭建測試鏈的方式進行實驗驗證,未來的工作將在共識機制的吞吐量及共識時延等方面進行探索,尋求共識機制更廣的應用領域。