王纘,田有亮,李秋賢,楊新歡
?
基于信用模型的工作量證明算法
王纘1,2,3,田有亮1,2,3,李秋賢1,2,3,楊新歡1,2,3
(1. 貴州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550025;2. 貴州省公共大數(shù)據(jù)重點(diǎn)實(shí)驗(yàn)室(貴州大學(xué)),貴州 貴陽 550025; 3. 貴州大學(xué)密碼學(xué)與數(shù)據(jù)安全研究所,貴州 貴陽 550025)
提出了一種基于信用模型的共識(shí)協(xié)議。首先,該共識(shí)協(xié)議借鑒了個(gè)人信用風(fēng)險(xiǎn)評(píng)估的思想,設(shè)計(jì)了一種基于BP神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)信用度模型。其次,構(gòu)造了一種分片輪轉(zhuǎn)模型,它可以根據(jù)節(jié)點(diǎn)的信用度高低分割搜索空間產(chǎn)生新區(qū)塊,同時(shí)對(duì)協(xié)議所面臨的可能攻擊進(jìn)行分析,修復(fù)了協(xié)議存在的漏洞。最后,仿真實(shí)驗(yàn)表明共識(shí)協(xié)議既能有效地降低新區(qū)塊產(chǎn)生過程中重復(fù)計(jì)算的巨大資源消耗,也能抑制大型礦池的產(chǎn)生,使整個(gè)區(qū)塊鏈系統(tǒng)變得更加安全可靠。
PoW共識(shí);BP神經(jīng)網(wǎng)絡(luò);信用度模型;搜索空間;區(qū)塊鏈
文獻(xiàn)[1]是公認(rèn)最早的關(guān)于區(qū)塊鏈的描述性文章,但該文獻(xiàn)并沒有明確提出區(qū)塊鏈的定義和概念,只是提出了一種電子現(xiàn)金系統(tǒng)。在該文獻(xiàn)中,區(qū)塊鏈被描述為用于記錄虛擬貨幣交易的一種分布式賬本技術(shù)[2],它通過密碼學(xué)中的橢圓曲線數(shù)字簽名算法實(shí)現(xiàn)去中心化的P2P系統(tǒng)。但區(qū)塊鏈的應(yīng)用不只局限于虛擬貨幣等電子貨幣系統(tǒng),還涉及隱私保護(hù)[3]、金融服務(wù)、物聯(lián)網(wǎng)與供應(yīng)鏈等眾多領(lǐng)域。
區(qū)塊鏈技術(shù)原理來源于數(shù)學(xué)上的拜占庭將軍問題[4-7]。在互聯(lián)網(wǎng)活動(dòng)大背景下,拜占庭將軍問題是指當(dāng)與不熟悉的對(duì)方進(jìn)行價(jià)值交換時(shí),參與者如何才能不會(huì)因?yàn)閻阂夤粽叩钠垓_和迷惑而做出錯(cuò)誤的決策;從互聯(lián)網(wǎng)技術(shù)領(lǐng)域的角度看,拜占庭將軍問題是指當(dāng)不存在可信第三方(TTP, trusted third party)時(shí),分布在網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)應(yīng)如何達(dá)成共識(shí)[8]。從這些角度看,區(qū)塊鏈技術(shù)在不需要單個(gè)信任節(jié)點(diǎn)的情況下可以很好地解決拜占庭將軍問題。
區(qū)塊鏈具有可追溯、不可篡改、去中心化等優(yōu)勢(shì)。然而和基于傳統(tǒng)分布式一致性算法[5,9]的分布式系統(tǒng)一樣,區(qū)塊鏈系統(tǒng)也會(huì)存在傳輸消息延時(shí)、損壞、丟失、篡改等問題。此外,去中心化的特點(diǎn)決定系統(tǒng)不存在被信任節(jié)點(diǎn),甚至存在惡意節(jié)點(diǎn),以及各種原因?qū)е碌臄?shù)據(jù)不一致等問題。為了實(shí)現(xiàn)必要的容錯(cuò),區(qū)塊鏈系統(tǒng)需要一個(gè)高效的共識(shí)機(jī)制來確保每一個(gè)節(jié)點(diǎn)都有唯一公認(rèn)的全局賬本?;谶@種訴求,專家學(xué)者相繼提出了工作量證明(PoW, proof of work)、權(quán)益證明(PoS, proof of stake)、股份授權(quán)證明(DPoS, delegated proof of stake)、活動(dòng)證明(PoA, proof of activity)等在內(nèi)的多種共識(shí)機(jī)制。其中,權(quán)益證明機(jī)制是利用區(qū)塊生成難度與節(jié)點(diǎn)所占股權(quán)成反比來進(jìn)行“挖礦”[10];股份授權(quán)證明機(jī)制的是利用股東投票數(shù)最多的幾位代表按既定時(shí)間段輪流產(chǎn)生區(qū)塊[11]。Vitalik提出了類PoS共識(shí)Casper。Bentov等[12]提出了活動(dòng)證明,用來代替虛擬貨幣的激勵(lì)結(jié)構(gòu)。Sawtooth項(xiàng)目應(yīng)用了基于Intel SGX可信硬件的逝去時(shí)間證明(PoET, proof of elapsed time)機(jī)制。Burstcoin 加密貨幣是基于硬盤容量空間的能力證明(PoC, proof of capacity)。這些共識(shí)機(jī)制在資源消耗、安全性或共識(shí)時(shí)間等方面各有側(cè)重。作為區(qū)塊鏈技術(shù)最成功的應(yīng)用,虛擬貨幣系統(tǒng)就是采用工作量證明,非常巧妙地解決這些問題,實(shí)現(xiàn)交易的不可偽造性和不可篡改性,而該共識(shí)機(jī)制也是虛擬貨幣系統(tǒng)安全模型的基石,是虛擬貨幣正常運(yùn)行約10年的關(guān)鍵所在。
所謂的工作量證明,其核心思想就是各個(gè)節(jié)點(diǎn)通過算力競(jìng)爭(zhēng)來解決一個(gè)hash難題,以此來保證數(shù)據(jù)的一致性和共識(shí)的安全性。具體地,各個(gè)節(jié)點(diǎn)不斷猜測(cè)并驗(yàn)證隨機(jī)數(shù)值是否為一個(gè)SHA256數(shù)學(xué)難題的解,其中,最快解決該難題的節(jié)點(diǎn)將獲得區(qū)塊鏈記賬權(quán)和虛擬貨幣獎(jiǎng)勵(lì)。當(dāng)某個(gè)節(jié)點(diǎn)成功解決該難題并產(chǎn)生區(qū)塊,就會(huì)廣播這個(gè)合法區(qū)塊。同時(shí),收到的用戶會(huì)驗(yàn)證這個(gè)區(qū)塊,如果驗(yàn)證通過,就會(huì)將這個(gè)區(qū)塊接入?yún)^(qū)塊鏈上,并在此基礎(chǔ)上繼續(xù)嘗試解決新的hash難題。目前,除了暴力計(jì)算外,還沒有有效的算法來解決這些求解復(fù)雜但驗(yàn)證簡(jiǎn)單的hash難題。換而言之,如果成功解決了該hash難題,則說明在概率上該節(jié)點(diǎn)付出了對(duì)應(yīng)的算力。即PoW共識(shí)機(jī)制會(huì)導(dǎo)致算力越大,解決問題的概率就越大的問題。當(dāng)某個(gè)節(jié)點(diǎn)或礦池控制超過全網(wǎng)一半的算力時(shí),從概率上就能掌控區(qū)塊鏈的走向,這也是所謂的51%攻擊。很顯然,參與PoW共識(shí)的節(jié)點(diǎn)將付出很大的經(jīng)濟(jì)成本(硬件、電力、維護(hù)等)。當(dāng)沒有成為首個(gè)算出合理hash值的節(jié)點(diǎn)時(shí),這些成本都將是沒有回報(bào)的。
在虛擬貨幣系統(tǒng)中,產(chǎn)生區(qū)塊的過程稱為挖礦,從事挖礦活動(dòng)的參與者稱為礦工[13]。由于虛擬貨幣大約每10 min產(chǎn)生一個(gè)區(qū)塊,這就意味著大部分礦工在一定時(shí)間內(nèi)很難產(chǎn)生區(qū)塊并獲得獎(jiǎng)勵(lì)。因此,礦工們會(huì)選擇加入開放礦池進(jìn)行合作挖礦,以此來獲得穩(wěn)定的收益。礦池[14]一般分為2種,一種是托管礦池,另一種是P2P礦池。具體地,P2P礦池是一種去中心化的礦池服務(wù)器,其原理與區(qū)塊鏈系統(tǒng)類似,也被稱為份額鏈。份額鏈的工作量證明難度低于虛擬貨幣區(qū)塊鏈,其上記錄了貢獻(xiàn)工作量證明的礦工份額。當(dāng)一個(gè)份額區(qū)塊的難度達(dá)到了虛擬貨幣網(wǎng)絡(luò)的難度目標(biāo)時(shí),就會(huì)獎(jiǎng)勵(lì)所有已經(jīng)在份額鏈區(qū)塊中取得份額的礦工。P2P礦池雖然實(shí)現(xiàn)了去中心化,但其挖礦方式復(fù)雜,對(duì)節(jié)點(diǎn)性能要求非常高,效率遠(yuǎn)不如托管礦池,所以沒能吸引太多算力;托管礦池中的礦工需要消耗資源來不斷嘗試產(chǎn)生新的合法區(qū)塊,即發(fā)送完整工作量證明給礦池管理者。但是完整工作量很難產(chǎn)生,礦工可以選擇發(fā)送部分工作量證明獲得相應(yīng)收益。無論是哪個(gè)礦工產(chǎn)生區(qū)塊,獲得的收益將按貢獻(xiàn)比例分給每個(gè)礦工。這種集中式的礦池通過這樣的方式不斷聚集算力,已經(jīng)開始引起51%攻擊的擔(dān)憂。同時(shí),由于中心化控制的礦池存在礦池管理者,很容易出現(xiàn)管理者出于利益而實(shí)施攻擊的風(fēng)險(xiǎn)。
針對(duì)PoW共識(shí)計(jì)算過程中所有節(jié)點(diǎn)(包括無法獲得獎(jiǎng)勵(lì)的節(jié)點(diǎn))資源消耗大、達(dá)成共識(shí)周期較長(zhǎng)及礦池中心化等問題,本文提出了一種基于信用模型的工作量證明(CPoW, proof of work based on credit)算法。在這個(gè)新的共識(shí)機(jī)制中,本文利用BP神經(jīng)網(wǎng)絡(luò)[15-17]設(shè)計(jì)了一種基于節(jié)點(diǎn)信用評(píng)估體系的節(jié)點(diǎn)信用度評(píng)估模型,根據(jù)這個(gè)模型,可以定量地計(jì)算各個(gè)參與PoW共識(shí)節(jié)點(diǎn)的信用度并進(jìn)行信用度排名。然后,根據(jù)這個(gè)信用度排名按比例劃分SHA256數(shù)學(xué)難題的搜索空間給計(jì)算節(jié)點(diǎn),讓每個(gè)節(jié)點(diǎn)計(jì)算驗(yàn)證搜索空間是否滿足這個(gè)hash難題,直到有某個(gè)節(jié)點(diǎn)通過驗(yàn)證的方式成功解決hash難題,此時(shí)這個(gè)節(jié)點(diǎn)將獲得區(qū)塊鏈的記賬權(quán)并得到相應(yīng)獎(jiǎng)勵(lì)。如果某個(gè)節(jié)點(diǎn)已經(jīng)計(jì)算驗(yàn)證完劃分給自己的搜索空間,但是本輪計(jì)算還沒有解決hash難題,那么這個(gè)節(jié)點(diǎn)還可以繼續(xù)根據(jù)信用度排名來獲取新一輪的搜索空間。本文將這種劃分搜索空間的方案叫作分片輪轉(zhuǎn)模型。
CPoW算法通過分片輪轉(zhuǎn)模型,讓所有參與工作量證明的節(jié)點(diǎn)一起合作驗(yàn)證搜索空間來解決hash難題,實(shí)現(xiàn)了搜索空間分配的去中心化,大大提高了解決hash難題的效率,從而縮短了共識(shí)達(dá)成的周期,也避免了巨大資源消耗的重復(fù)。由于驗(yàn)證搜索空間存在概率性,在一定程度上抑制了大型礦池的產(chǎn)生。
2.1.1 節(jié)點(diǎn)信用度評(píng)估指標(biāo)體系
所謂節(jié)點(diǎn)“信用”是指節(jié)點(diǎn)在參與共識(shí)機(jī)制過程中的表現(xiàn),是對(duì)節(jié)點(diǎn)運(yùn)行狀況、節(jié)點(diǎn)賬戶財(cái)富水平和誠(chéng)信水平的全面考察。對(duì)于節(jié)點(diǎn)信用度評(píng)估,首先要建立評(píng)估指標(biāo)體系。根據(jù)節(jié)點(diǎn)在網(wǎng)絡(luò)中運(yùn)行的實(shí)際情況,本文提出了一種分層結(jié)構(gòu)指標(biāo)體系,如表1所示。其中,二級(jí)指標(biāo)10項(xiàng),為反映節(jié)點(diǎn)運(yùn)行情況、節(jié)點(diǎn)賬戶財(cái)富水平和誠(chéng)信水平的具體指標(biāo)信息;一級(jí)指標(biāo)3項(xiàng),為對(duì)二級(jí)指標(biāo)的歸納,反映了節(jié)點(diǎn)信用評(píng)估的3個(gè)方面。
表1 節(jié)點(diǎn)信用度評(píng)估指標(biāo)體系
2.1.2 數(shù)據(jù)的標(biāo)準(zhǔn)化處理
在節(jié)點(diǎn)信用度評(píng)估要素中,包含網(wǎng)絡(luò)延時(shí)時(shí)間段、節(jié)點(diǎn)離線次數(shù)段、節(jié)點(diǎn)離線時(shí)間段、節(jié)點(diǎn)獲取搜索空間次數(shù)段、節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí)間段、節(jié)點(diǎn)提供分叉區(qū)塊次數(shù)段、節(jié)點(diǎn)是否提供無效區(qū)塊這7項(xiàng)離散數(shù)據(jù),對(duì)于這些數(shù)據(jù),要進(jìn)行統(tǒng)一量化,即根據(jù)不同屬性值在共識(shí)過程中的重要性對(duì)其屬性值賦予不同的值。屬性值量化如表2所示。
按照表2統(tǒng)一量化后,可以通過最小—最大規(guī)范化方法按比例進(jìn)行縮放,使之落入[0,1]區(qū)間,再作為神經(jīng)網(wǎng)絡(luò)模型的輸入。具體方法為:設(shè)min和max分別為某一屬性的最小值和最大值,最小—最大規(guī)范方法是指通過計(jì)算
將屬性值映射到[0,1]中。例如,對(duì)節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí)間段,如果屬性值為28 h,則記分為8,該屬性的記分中最大值為11,最小值為1,根據(jù)式(1),新屬性值為
通過這種方法,可以處理所有給定的最大、最小的離散屬性的數(shù)據(jù)。
表2 節(jié)點(diǎn)信用度離散數(shù)據(jù)記分表
在節(jié)點(diǎn)信用評(píng)估的輸入要素中,有coin age、虛擬貨幣流動(dòng)比率、節(jié)點(diǎn)上一輪的信用度這3個(gè)屬性值數(shù)據(jù),其中,節(jié)點(diǎn)上一輪的信用度是標(biāo)準(zhǔn)化的數(shù)據(jù),其他2個(gè)近似于正態(tài)分布,這些要素的屬性值可以通過正態(tài)分布函數(shù)進(jìn)行轉(zhuǎn)化,將屬性值映射在(0,1)的數(shù)值。正態(tài)分布函數(shù)如圖1所示,其函數(shù)為
圖1 正態(tài)分布函數(shù)曲線
表3 和的取值對(duì)應(yīng)表
例如,某節(jié)點(diǎn)的虛擬貨幣流動(dòng)比率為0.6,根據(jù)式(3),得
其中,1為轉(zhuǎn)換后的屬性值。
通過這種方法,就可以將節(jié)點(diǎn)信用評(píng)估要素中的屬性值映射到[0,1]區(qū)間的值,便于信用度模型的處理。
2.1.3 節(jié)點(diǎn)信用度模型構(gòu)造
在這里,本文選擇的轉(zhuǎn)移函數(shù)為單極性sigmoid函數(shù),函數(shù)表達(dá)式為
該函數(shù)是一個(gè)實(shí)數(shù)域到[0,1]閉集的非減連續(xù)函數(shù),代表了狀態(tài)連續(xù)的神經(jīng)元模型。
對(duì)于隱層,有
對(duì)于輸出層,有
其中,()為轉(zhuǎn)移函數(shù)。節(jié)點(diǎn)的信用評(píng)估3層神經(jīng)網(wǎng)絡(luò)模型如圖2所示。
圖2 節(jié)點(diǎn)信用評(píng)估3層神經(jīng)網(wǎng)絡(luò)模型
神經(jīng)網(wǎng)絡(luò)通過不斷學(xué)習(xí),會(huì)對(duì)各個(gè)權(quán)值進(jìn)行調(diào)整,使誤差不斷減少。根據(jù)BP算法,得出模型的權(quán)值調(diào)整式為
當(dāng)和1的誤差達(dá)到要求的精度時(shí),算法停止,學(xué)習(xí)過程結(jié)束。
2.1.4 模型評(píng)價(jià)
基于BP神經(jīng)網(wǎng)絡(luò)的算法思想,通過對(duì)節(jié)點(diǎn)歷史數(shù)據(jù)的訓(xùn)練和學(xué)習(xí),調(diào)整模型神經(jīng)單元之間的連接權(quán)重,確定輸入和輸出的內(nèi)在聯(lián)系,建立了節(jié)點(diǎn)的信用度模型,使模型具備了對(duì)節(jié)點(diǎn)信用進(jìn)行評(píng)估的能力。通過該模型進(jìn)行節(jié)點(diǎn)信用的評(píng)估,挑選出了性能高的、網(wǎng)絡(luò)環(huán)境良好的非拜占庭節(jié)點(diǎn),淘汰那些拜占庭節(jié)點(diǎn),使參與共識(shí)的節(jié)點(diǎn)都能獲得一致的信用度。
所謂分片是指對(duì)hash難題的搜索空間進(jìn)行劃分,每個(gè)節(jié)點(diǎn)按照自己的信用度排名去獲取自己需要驗(yàn)證的搜索空間。所謂輪轉(zhuǎn)是指每個(gè)節(jié)點(diǎn)計(jì)算驗(yàn)證完成自己獲取到的搜索空間之后,如果hash難題仍未解決,它依舊可以再次獲取需要驗(yàn)證的一定范圍的搜索空間。如此不斷地獲取需要驗(yàn)證的搜索空間,直至hash難題得到解決。
2.2.1 搜索空間的問題
“挖礦”本質(zhì)是執(zhí)行hash函數(shù)的過程,而hash函數(shù)是一個(gè)單輸入單輸出函數(shù),輸入數(shù)據(jù)被稱為區(qū)塊頭(blockheader),所以本節(jié)首先解析區(qū)塊頭結(jié)構(gòu)。例如,虛擬貨幣區(qū)塊頭中共6個(gè)字段,介紹如下。
nVersion:區(qū)塊版本號(hào),存儲(chǔ)空間為4 B。
hashPrevBlock:上一個(gè)區(qū)塊的區(qū)塊頭的hash值,存儲(chǔ)空間為32 B。
hashMerkleRoot:包含進(jìn)本區(qū)塊的所有交易構(gòu)造的Merkle根,存儲(chǔ)空間為32 B。
nTime:Unix時(shí)間戳,存儲(chǔ)空間為4 B。
nBits:區(qū)塊的難度值,存儲(chǔ)空間為4 B。
nNonce:隨機(jī)數(shù),存儲(chǔ)空間為4 B。
對(duì)于虛擬貨幣系統(tǒng)中的PoW共識(shí)機(jī)制而言,礦工可以自由調(diào)整的字段就3個(gè),分別是nTime、nBits、nNonce。nTime合理的區(qū)塊時(shí)間是有一定范圍的,比前一個(gè)區(qū)塊時(shí)間太早會(huì)被其他節(jié)點(diǎn)拒絕;nNonce提供232種可能取值;hashMerkleRoot理論上提供2256種可能,對(duì)包含進(jìn)區(qū)塊的交易進(jìn)行增刪、調(diào)整順序或修改Coinbase交易的輸入字段都會(huì)導(dǎo)致本字段變化。
對(duì)于CPoW共識(shí)機(jī)制而言,礦工可以自由調(diào)整的字段就只有2個(gè),分別是nNonce和nTime字段。nNonce提供232種可能取值;nTime取值范圍是上一個(gè)區(qū)塊產(chǎn)生時(shí)間至產(chǎn)生后的2 min。hashMerkleRoot的值是固定的,并嚴(yán)格規(guī)定了交易格式的填充,這保證了同一筆交易填充的一致性。對(duì)于所有在2 min內(nèi)產(chǎn)生的交易全部按照時(shí)間順序納入?yún)^(qū)塊,并指定Coinbasse交易為這段時(shí)間中產(chǎn)生的第一筆交易。通過以上方法,即可保證hashMerkleRoot值的一致性。
2.2.2 分片輪轉(zhuǎn)模型構(gòu)造
在這里,劃分搜索空間是指劃分nNonce字段的搜索空間,而對(duì)于nTime字段,模型不做搜索空間的劃分,即每個(gè)節(jié)點(diǎn)都擁有完整的nTime字段搜索空間。
假設(shè)待驗(yàn)證的每一輪的nNonce搜索空間的一個(gè)標(biāo)準(zhǔn)范圍為,為輪轉(zhuǎn)次數(shù),總的節(jié)點(diǎn)數(shù)為,節(jié)點(diǎn)的信用度排名為a(a值越小,排名越低),則排名為a的節(jié)點(diǎn)對(duì)應(yīng)的第一輪的nNonce的搜索空間的范圍大小為
這樣做的目的是信用度排名較高的節(jié)點(diǎn)可以一次獲取更多的nNonce字段搜索空間,避免每次獲取搜索空間的計(jì)算消耗,本文根據(jù)信用度排名順序按照比例劃分搜索空間,則排名為a的節(jié)點(diǎn)對(duì)應(yīng)的第一輪nNonce的搜索空間的范圍為
如果某節(jié)點(diǎn)已經(jīng)驗(yàn)證完分配的nNonce的搜索空間和nTime字段搜索空間的組合后,但并沒有找到符合hash難題要求的nNonce值,該節(jié)點(diǎn)先會(huì)查看有沒有收到來自網(wǎng)絡(luò)的其他節(jié)點(diǎn)解決該難題的nNonce值。如果沒有,則它可以通過計(jì)算獲取輪(下一輪)的搜索空間的范圍為
2.2.3 模型評(píng)價(jià)
根據(jù)信用模型產(chǎn)生節(jié)點(diǎn)信用度,并進(jìn)行排名,通過排名的順序,節(jié)點(diǎn)按照分片輪轉(zhuǎn)模型來獲取自己的搜索空間,從而實(shí)現(xiàn)了搜索空間分配的去中心化。由于nTime字段的搜索空間非常有限,因此并沒有對(duì)其搜索空間進(jìn)行劃分,而是給每個(gè)節(jié)點(diǎn)都分配全部搜索空間。當(dāng)然,由于在分片輪轉(zhuǎn)模型中對(duì)區(qū)塊頭的規(guī)定限制了搜索空間的大小,這也是模型有待改進(jìn)之處。
參與共識(shí)的節(jié)點(diǎn)必須擁有一定的信用度排名。這個(gè)信用度排名不是每輪共識(shí)都要計(jì)算的,只有當(dāng)產(chǎn)生1 440個(gè)區(qū)塊后,系統(tǒng)才會(huì)提前更新排名順序,各個(gè)參與共識(shí)的節(jié)點(diǎn)根據(jù)新一輪的排名進(jìn)行搜索空間的驗(yàn)證。
每個(gè)參與共識(shí)的節(jié)點(diǎn)需要維護(hù)一個(gè)信用度排名數(shù)組和節(jié)點(diǎn)狀態(tài)記錄表。系統(tǒng)為每一個(gè)參與共識(shí)的節(jié)點(diǎn)分配一個(gè)序號(hào),從1開始,最后一個(gè)節(jié)點(diǎn)的編號(hào)為,數(shù)組的下標(biāo)即為節(jié)點(diǎn)的編號(hào),數(shù)組存儲(chǔ)的就是節(jié)點(diǎn)的信用度排名,而對(duì)于[0]存儲(chǔ)的是參與共識(shí)節(jié)點(diǎn)的個(gè)數(shù)。狀態(tài)記錄表記錄了所有參與共識(shí)節(jié)點(diǎn)的網(wǎng)絡(luò)延時(shí)情況、離線情況、節(jié)點(diǎn)提供分叉區(qū)塊的情況、節(jié)點(diǎn)是否提供違法區(qū)塊的情況、節(jié)點(diǎn)獲取搜索空間的次數(shù)、節(jié)點(diǎn)上一輪的信用度等。整個(gè)算法分為4個(gè)步驟:初始化階段、構(gòu)建區(qū)塊、校驗(yàn)新區(qū)塊和區(qū)塊鏈的組裝。
算法要求每次產(chǎn)生區(qū)塊的時(shí)間間隔大約為2 min,執(zhí)行的一般流程如下所示。
1) 初始化階段
該算法初始由主節(jié)點(diǎn)新建一個(gè)空的數(shù)組,由于信用度的范圍為(0,1),因此主節(jié)點(diǎn)設(shè)置一個(gè)初始值=0.5(范圍為[0.5,0.51))。
主節(jié)點(diǎn)將發(fā)給每個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)比較自己的信用度與發(fā)過來的,如果自己的信用度在的區(qū)間,則向主節(jié)點(diǎn)返回message=<,,,,>和對(duì)message的簽名,其中,是一個(gè)標(biāo)志碼,是時(shí)間戳,是節(jié)點(diǎn)編號(hào),是節(jié)點(diǎn)自己的信用度。主節(jié)點(diǎn)先驗(yàn)證簽名是否合法,然后查看狀態(tài)記錄表,核實(shí)此節(jié)點(diǎn)是否已經(jīng)“報(bào)到”,如果沒有就將這些“報(bào)到”的節(jié)點(diǎn)按照信用度從小到大進(jìn)行排名并寫入排名數(shù)組中,最后在狀態(tài)記錄表中標(biāo)記這個(gè)節(jié)點(diǎn)。
重復(fù)上一步,直到達(dá)到1時(shí),算法終止。
算法1 信用度排名算法
1)[]={0},=0.5
2) repeat
3) master廣播
4) ifC≥&&C<+0.01 then
5) slave發(fā)送message
6) end if
7) if 簽名合法&&未報(bào)到 then
8) 在中添加C
9) 標(biāo)記C
10) end if
11)0.01
12) until1
13)
算法2 信用度排名分發(fā)算法
1)為排名數(shù)組
2) for 從第1到第+1個(gè)階段 do
3) 執(zhí)行信用度排名算法進(jìn)行排名
4) 廣播()
5) if接收到至少num?次then
6) 廣播()
7) end if
8) if 接收()至少次then
9)
10) end if
11) 設(shè)節(jié)點(diǎn)v是第個(gè)階段的主節(jié)點(diǎn)
12) 主節(jié)點(diǎn)v廣播它當(dāng)前的值
13) if 接收()的次數(shù)嚴(yán)格少于?次then
14)
15) end if
16) end for
初始化階段,CPoW共識(shí)通過算法1實(shí)現(xiàn)了節(jié)點(diǎn)信用度的排名,通過算法2實(shí)現(xiàn)了節(jié)點(diǎn)排名的無差錯(cuò)分發(fā),從而使每個(gè)節(jié)點(diǎn)獲取自己的信用度排名,以便構(gòu)建區(qū)塊。
2) 構(gòu)建區(qū)塊
CPoW共識(shí)機(jī)制的第二步是構(gòu)建新的區(qū)塊。當(dāng)節(jié)點(diǎn)通過初始化階段獲取了自己的排名后,根據(jù)分片輪轉(zhuǎn)模型獲取自己的搜索空間,對(duì)區(qū)塊頭進(jìn)行重復(fù)SHA256散列函數(shù)運(yùn)算,根據(jù)搜索空間不斷修改參數(shù),直到散列運(yùn)算的結(jié)果小于某一難度值。當(dāng)某一節(jié)點(diǎn)驗(yàn)證出滿足問題難度的目標(biāo)值時(shí),該節(jié)點(diǎn)立刻將所構(gòu)成的區(qū)塊發(fā)給它的所有相鄰節(jié)點(diǎn)。這些相鄰節(jié)點(diǎn)成功驗(yàn)證并接收這個(gè)新區(qū)塊后,繼續(xù)向全網(wǎng)傳播此區(qū)塊。當(dāng)這個(gè)新區(qū)塊被驗(yàn)證通過,每個(gè)節(jié)點(diǎn)都會(huì)將它加到自身節(jié)點(diǎn)的區(qū)塊鏈副本中。當(dāng)節(jié)點(diǎn)收到并驗(yàn)證了新的區(qū)塊后,它們會(huì)放棄構(gòu)建相同高度區(qū)塊的計(jì)算,并立即轉(zhuǎn)向計(jì)算下一個(gè)區(qū)塊的工作。
3) 校驗(yàn)新區(qū)塊
當(dāng)新區(qū)塊在網(wǎng)絡(luò)中擴(kuò)散時(shí),每一個(gè)節(jié)點(diǎn)接收它之前,都需要進(jìn)行一系列的驗(yàn)證,確保只有有效的區(qū)塊才會(huì)在網(wǎng)絡(luò)中傳播。因?yàn)檫@些校驗(yàn)都是獨(dú)立進(jìn)行的,只有確保誠(chéng)實(shí)的節(jié)點(diǎn)生成的區(qū)塊才會(huì)被納入?yún)^(qū)塊鏈,從而獲得獎(jiǎng)勵(lì)。反之,由于區(qū)塊的無效性會(huì)導(dǎo)致節(jié)點(diǎn)失去獎(jiǎng)勵(lì),并會(huì)將這種“不誠(chéng)實(shí)行為”寫入節(jié)點(diǎn)狀態(tài)記錄表,影響節(jié)點(diǎn)信用度。
當(dāng)一個(gè)節(jié)點(diǎn)驗(yàn)證收到的新區(qū)塊時(shí),與標(biāo)準(zhǔn)驗(yàn)證流程清單一一核對(duì),若沒有通過驗(yàn)證,該區(qū)塊將被拒絕,其標(biāo)準(zhǔn)一般如下。
①驗(yàn)證提交新區(qū)塊節(jié)點(diǎn)信用度的真實(shí)性。
②區(qū)塊的數(shù)據(jù)結(jié)構(gòu)語法上有效。
③搜索空間屬于記賬節(jié)點(diǎn)需要驗(yàn)證的搜索空間。
④區(qū)塊頭的hash值小于目標(biāo)難度。
⑤區(qū)塊大小符合長(zhǎng)度限制。
4) 區(qū)塊鏈的組裝
共識(shí)機(jī)制的最后一步是將區(qū)塊裝配至區(qū)塊鏈的主鏈中。一旦某個(gè)節(jié)點(diǎn)驗(yàn)證通過了新的區(qū)塊,它會(huì)嘗試將新的區(qū)塊連接到現(xiàn)有的區(qū)塊鏈上,并將它們組裝起來。
節(jié)點(diǎn)進(jìn)行區(qū)塊組裝一般分為3種情況。第一種情況,由于區(qū)塊的hashPrevBlock字段是該區(qū)塊對(duì)其父區(qū)塊的引用,如果該父區(qū)塊是區(qū)塊鏈的“頂點(diǎn)”,那么該區(qū)塊就可以直接連接到區(qū)塊鏈的父區(qū)塊后。第二種情況,當(dāng)主鏈出現(xiàn)了分支,即所謂的備用鏈,在這種情況下,節(jié)點(diǎn)會(huì)將新的區(qū)塊添加到備用鏈,同時(shí),節(jié)點(diǎn)會(huì)比較備用連和主鏈的長(zhǎng)度,如果備用鏈長(zhǎng)度更長(zhǎng),那么節(jié)點(diǎn)將收斂于備用鏈,這就意味著備用鏈成為新的主鏈,原來的主鏈變成備用鏈。第三種情況,如果節(jié)點(diǎn)沒有在區(qū)塊鏈上找到該區(qū)塊的父區(qū)塊,那么這個(gè)區(qū)塊就是“孤塊”。孤塊會(huì)被保存到孤塊池中,當(dāng)其父區(qū)塊出現(xiàn)并成功連接到區(qū)塊鏈上,孤塊才會(huì)被連接到父區(qū)塊后,成為區(qū)塊鏈的一部分。
隨著越來越多的區(qū)塊被加入?yún)^(qū)塊鏈上,鏈上的工作量證明就更多,鏈的暫時(shí)性差異最終會(huì)得到解決。
由于CPoW共識(shí)機(jī)制的初始階段節(jié)點(diǎn)太少,所以獲得的節(jié)點(diǎn)狀態(tài)數(shù)據(jù)較少。在這種情況下,由于節(jié)點(diǎn)狀態(tài)數(shù)據(jù)缺乏,導(dǎo)致訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)效果不佳,因此在CPoW共識(shí)機(jī)制開始運(yùn)行前,會(huì)采集一些虛擬貨幣系統(tǒng)的節(jié)點(diǎn)狀態(tài)數(shù)據(jù)來訓(xùn)練信用模型,同時(shí),還要保證采集數(shù)據(jù)的全面性,以保障初始階段模型的準(zhǔn)確性,同時(shí),需要將學(xué)習(xí)好的權(quán)值保存下來,以節(jié)省再次訓(xùn)練的時(shí)間。
CPoW共識(shí)因?yàn)榻鉀Qhash難題的時(shí)間更短,所以比PoW算法更容易產(chǎn)生分叉,因此,本文在信用模型還考慮了區(qū)塊鏈分叉這一因素,在一定程度上抑制了區(qū)塊鏈的分叉。
當(dāng)出現(xiàn)分叉后,節(jié)點(diǎn)會(huì)依據(jù)2個(gè)準(zhǔn)則來判斷主鏈,且這2個(gè)準(zhǔn)則的優(yōu)先級(jí)由高到低。第一準(zhǔn)則:當(dāng)出現(xiàn)2個(gè)或多個(gè)鏈分叉時(shí),節(jié)點(diǎn)會(huì)優(yōu)先選擇在更長(zhǎng)的鏈上進(jìn)行“挖礦”,如圖3所示。其中,區(qū)塊B、D所在鏈等長(zhǎng),區(qū)塊E所在的鏈更長(zhǎng),所以節(jié)點(diǎn)會(huì)選擇以區(qū)塊E作為父區(qū)塊。第二準(zhǔn)則:當(dāng)出現(xiàn)等長(zhǎng)的2個(gè)或多個(gè)鏈出現(xiàn)分叉時(shí),節(jié)點(diǎn)會(huì)優(yōu)先選擇在信用度更高的節(jié)點(diǎn)產(chǎn)生的父區(qū)塊上進(jìn)行“挖礦”,如圖4所示。其中,區(qū)塊B、C、D等長(zhǎng),故節(jié)點(diǎn)會(huì)選擇在信用度更高的節(jié)點(diǎn)產(chǎn)生的區(qū)塊C上進(jìn)行挖礦。
圖3 在更長(zhǎng)鏈上進(jìn)行“挖礦”
圖4 在信用度更高的節(jié)點(diǎn)產(chǎn)生的區(qū)塊上進(jìn)行“挖礦”
為了防止惡意節(jié)點(diǎn)不斷進(jìn)行區(qū)塊分叉來實(shí)現(xiàn)“雙花”或擴(kuò)大區(qū)塊鏈的暫時(shí)差異性的時(shí)間,CPoW機(jī)制會(huì)將因產(chǎn)生新區(qū)塊導(dǎo)致區(qū)塊鏈分叉的節(jié)點(diǎn)記錄在節(jié)點(diǎn)狀態(tài)記錄表中,通過這樣的方法,使下一輪節(jié)點(diǎn)在信用度排名時(shí)降低其排名甚至是無法參與共識(shí)計(jì)算。由于區(qū)塊鏈的分叉會(huì)導(dǎo)致一定程度的資源浪費(fèi),CPoW機(jī)制還加入了全網(wǎng)心跳機(jī)制,通過不斷地詢問周圍節(jié)點(diǎn)是否收到待驗(yàn)證的新區(qū)塊,以此來降低產(chǎn)生區(qū)塊鏈分叉的風(fēng)險(xiǎn)。
當(dāng)節(jié)點(diǎn)獲得自己的排名,通過分片輪轉(zhuǎn)模型計(jì)算獲得自己的搜索空間。值得注意的是,這里會(huì)存在因?yàn)楣?jié)點(diǎn)故障、網(wǎng)絡(luò)分區(qū)等原因而沒有獲得信用度排名的節(jié)點(diǎn),或節(jié)點(diǎn)斷電離線導(dǎo)致無法進(jìn)行搜索空間的驗(yàn)證計(jì)算。對(duì)于以上這些情況,CPoW共識(shí)中出現(xiàn)的非常少,這是由于該共識(shí)機(jī)制中的信用度模型保證了更多的好節(jié)點(diǎn)會(huì)參與共識(shí)機(jī)制。
即使有這樣的保證,CPoW共識(shí)還提供了容錯(cuò)機(jī)制,即全網(wǎng)心跳機(jī)制,具體如下。排名為的節(jié)點(diǎn)每隔s向全網(wǎng)發(fā)送一個(gè)心跳消息(這種心跳消息可以是詢問是否收到新區(qū)塊),收到心跳消息的節(jié)點(diǎn)會(huì)回復(fù)心跳消息給節(jié)點(diǎn)。如果排名為+1的節(jié)點(diǎn)在s(>)內(nèi)都沒有收到節(jié)點(diǎn)的心跳消息,即心跳超時(shí),那么+1的節(jié)點(diǎn)會(huì)向全網(wǎng)發(fā)送詢問是否收到節(jié)點(diǎn)心跳消息,等收到?的答復(fù)(收到的不需要答復(fù),沒有收到的就會(huì)答復(fù))后,就會(huì)代替節(jié)點(diǎn)驗(yàn)證它的搜索空間,同時(shí)網(wǎng)絡(luò)上任何監(jiān)測(cè)到心跳超時(shí)的節(jié)點(diǎn)都會(huì)在狀態(tài)記錄表中進(jìn)行日志記錄。另外,+1節(jié)點(diǎn)還會(huì)檢查?1節(jié)點(diǎn)的心跳是否正常,如果不正常則進(jìn)行類似的操作,同時(shí)詢問?2節(jié)點(diǎn)心跳是否正常,直至檢查到心跳正常的節(jié)點(diǎn)為止。
共識(shí)機(jī)制依賴于這樣一個(gè)前提:絕大多數(shù)的礦工因?yàn)榭紤]自己利益的最大化,所以都會(huì)通過誠(chéng)實(shí)地挖礦來獲取獎(jiǎng)勵(lì),從而維持整個(gè)系統(tǒng)安全。單個(gè)礦工因自身算力的限制,理論上實(shí)施欺騙或破壞的難度很大。然而,當(dāng)一群擁有了整個(gè)系統(tǒng)51%算力的礦工們通過合作攻擊共識(shí)機(jī)制,這樣就會(huì)破壞系統(tǒng)的安全性和可靠性,產(chǎn)生51%攻擊。
當(dāng)?shù)V工們發(fā)動(dòng)51%攻擊,CPoW共識(shí)會(huì)比虛擬貨幣系統(tǒng)的PoW共識(shí)代價(jià)更高,在虛擬貨幣系統(tǒng)的PoW共識(shí)中,當(dāng)攻擊者的算力達(dá)到51%這個(gè)閾值時(shí),其發(fā)起的攻擊嘗試幾乎肯定會(huì)成功,而對(duì)于CPoW共識(shí),影響51%攻擊的因素不是算力而是信用度,因?yàn)锽P神經(jīng)網(wǎng)絡(luò)可以通過參數(shù)調(diào)整進(jìn)一步弱化算力的權(quán)重。無論對(duì)于PoW共識(shí)還是CPoW共識(shí)來說,所謂的51%攻擊只是來說明節(jié)點(diǎn)能夠驗(yàn)證的搜索空間的大小而已。對(duì)于PoW共識(shí)而言,51%攻擊意味著該礦工或礦池可以驗(yàn)證51%的搜索空間。對(duì)于CPoW共識(shí)算法,由于弱化算力的原因,其遠(yuǎn)不能達(dá)到能夠驗(yàn)證51%的搜索空間的程度。很顯然,攻擊者花費(fèi)更大的代價(jià)才能實(shí)現(xiàn)51%攻擊。
雖然由于全網(wǎng)算力的急劇增加使單個(gè)礦工已經(jīng)不可能占據(jù)全網(wǎng)1%的算力,但是托管礦池的引入導(dǎo)致算力大量集中,同時(shí)帶來了礦池操作者出于利益而施行攻擊的風(fēng)險(xiǎn)。對(duì)于虛擬貨幣系統(tǒng)中的PoW共識(shí)來說,礦池操作者不僅能夠控制候選塊的生成,也能控制交易的填充,即礦池操作者擁有剔除特定交易或雙重支付的權(quán)利。
但對(duì)于CPoW共識(shí)來說卻不是這樣。雖然礦池占據(jù)大量算力,但是其仍需要獲取待驗(yàn)證的搜索空間,這就意味著它獲取搜索空間本身也是需要花費(fèi)時(shí)間的,相對(duì)于同等算力的多個(gè)單礦工節(jié)點(diǎn),他們獲取搜索空間是并發(fā)執(zhí)行的,這無疑節(jié)省了時(shí)間成本。其次,占據(jù)大量算力的礦池由于信用模型的原因無法獲得算力所對(duì)應(yīng)的搜索空間,導(dǎo)致礦工會(huì)選擇逃離礦池。最后,因?yàn)楣?jié)點(diǎn)需要獲取待驗(yàn)證的搜索空間,而成功在某一搜索空間上解決hash難題具有概率性,這大大降低了大算力對(duì)解決hash難題的影響??傊?,一方面,CPoW算法抑制了大型礦池和中心化節(jié)點(diǎn)的出現(xiàn),避免了算力的集中化;另一方面,由于某一搜索空間恰好“命中”hash難題具有隨機(jī)性,這也降低了節(jié)點(diǎn)之間硬件惡性升級(jí)的可能性。
對(duì)于節(jié)點(diǎn)信用度的攻擊可以分為2種,一種是直接攻擊,另一種是間接攻擊。直接攻擊是指節(jié)點(diǎn)直接篡改自己的信用度,然后提交給主節(jié)點(diǎn)進(jìn)行排名,以此來獲得更高的信用度排名和更大的搜索空間。間接攻擊是指節(jié)點(diǎn)修改節(jié)點(diǎn)狀態(tài)記錄表,通過修改其他節(jié)點(diǎn)的記錄參數(shù)降低其他節(jié)點(diǎn)的信用度;通過修改自己的記錄參數(shù)提升自己的信用度。
對(duì)于直接攻擊,由于CPoW共識(shí)機(jī)制的維護(hù)有2張記錄表,一張是上一輪節(jié)點(diǎn)的狀態(tài)記錄表,另一張是本輪正在記錄的狀態(tài)記錄表。由于每個(gè)節(jié)點(diǎn)在進(jìn)行新區(qū)塊驗(yàn)證時(shí),會(huì)根據(jù)上一輪狀態(tài)記錄表和區(qū)塊鏈交易數(shù)據(jù)并通過信用度模型再次核算節(jié)點(diǎn)信用度,如果驗(yàn)證失敗,就會(huì)丟棄此區(qū)塊并在本輪狀態(tài)表中記錄提供無效區(qū)塊的節(jié)點(diǎn)。
對(duì)于間接攻擊,它主要修改的是本輪狀態(tài)記錄表。為了預(yù)防這種攻擊,CPoW共識(shí)機(jī)制要求每一個(gè)節(jié)點(diǎn)在向狀態(tài)記錄表中寫入記錄時(shí),必須經(jīng)過預(yù)寫入過程。這種預(yù)寫入過程是指節(jié)點(diǎn)先將數(shù)據(jù)寫入狀態(tài)記錄表,但標(biāo)記數(shù)據(jù)為預(yù)寫入數(shù)據(jù),同時(shí)向全網(wǎng)廣播本條記錄,收到此記錄的節(jié)點(diǎn)查看自己狀態(tài)記錄表是否有此條記錄,如果有則也廣播這條記錄,否則只是將此條記錄預(yù)寫入狀態(tài)記錄表,不做廣播操作。當(dāng)節(jié)點(diǎn)收到?條記錄,就會(huì)將預(yù)寫入標(biāo)志去掉。節(jié)點(diǎn)通過這種方式實(shí)現(xiàn)了狀態(tài)記錄表的一致性和不可篡改性。
CPoW共識(shí)機(jī)制利用BP神經(jīng)網(wǎng)絡(luò)構(gòu)建了節(jié)點(diǎn)信用模型來評(píng)估節(jié)點(diǎn)的信用度,然后利用信用度排名算法實(shí)現(xiàn)了各個(gè)節(jié)點(diǎn)的信用度排名,并利用算法2將排名結(jié)果分發(fā)至每一個(gè)參與共識(shí)的節(jié)點(diǎn)。CPoW機(jī)制產(chǎn)生的一次排名結(jié)果將用于產(chǎn)生1 440個(gè)區(qū)塊后,才會(huì)重新計(jì)算排名。由于評(píng)估信用度、計(jì)算排名和分發(fā)排名這3個(gè)過程與hash計(jì)算是并行進(jìn)行的(除了首次運(yùn)行共識(shí)協(xié)議需要等待排名結(jié)果,才能執(zhí)行hash計(jì)算)。這些都使CPoW共識(shí)機(jī)制的初始化階段的時(shí)間復(fù)雜度相對(duì)于產(chǎn)生1 440區(qū)塊的時(shí)間可以忽略不計(jì)。所以在初始化階段,本節(jié)主要關(guān)注BP神經(jīng)網(wǎng)絡(luò)是否能夠準(zhǔn)確地構(gòu)建信用模型。
選取110個(gè)節(jié)點(diǎn)指標(biāo)數(shù)據(jù)及其信用評(píng)估結(jié)果,根據(jù)信用評(píng)估模型的方法,對(duì)選取的指標(biāo)數(shù)據(jù)首先進(jìn)行標(biāo)準(zhǔn)化處理,將其轉(zhuǎn)化為[0,1]的數(shù)據(jù),以便于神經(jīng)網(wǎng)絡(luò)處理。每次用100個(gè)節(jié)點(diǎn)的數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),剩余10個(gè)節(jié)點(diǎn)的數(shù)據(jù)作為測(cè)試數(shù)據(jù),共進(jìn)行380次測(cè)試。實(shí)驗(yàn)時(shí)設(shè)定學(xué)習(xí)速率為0.001,誤差變化如圖5所示。
圖5 誤差變化曲線
模型輸出和目標(biāo)輸出之間的對(duì)比如圖6所示。
圖6 模型輸出和目標(biāo)輸出的對(duì)比
如圖5和圖6所示,BP神經(jīng)網(wǎng)絡(luò)構(gòu)建的信用度模型具有非常好的準(zhǔn)確性,但是其仍存在學(xué)習(xí)效率慢、網(wǎng)絡(luò)的學(xué)習(xí)和記憶具有不穩(wěn)定性等問題,有許多改進(jìn)之處。
對(duì)于PoW共識(shí)機(jī)制而言,隨著難度值(二進(jìn)制以0開頭位數(shù))的增加,hash難題解決時(shí)間會(huì)不斷增大。對(duì)于CPoW共識(shí)機(jī)制而言,同樣如此。但由于CPoW共識(shí)機(jī)制將搜索空間進(jìn)行了劃分,使“挖礦”行為由一種競(jìng)爭(zhēng)行為變成了一種合作行為,從而提高了“挖礦”效率,降低了資源消耗。所以本節(jié)主要對(duì)區(qū)塊生成階段進(jìn)行仿真實(shí)驗(yàn)。
5.2.1 實(shí)驗(yàn)準(zhǔn)備
此仿真實(shí)驗(yàn)主機(jī)有12臺(tái),CPU為Intel Core i5-7500U,內(nèi)存為8 GB,操作系統(tǒng)為Window 10 企業(yè)版。實(shí)驗(yàn)選用Python3.5為主要編程語言,并使用其Matplotlib-2.1.0rc1模塊實(shí)現(xiàn)數(shù)據(jù)的可視化。
5.2.2 仿真過程
通過Python語言模擬了一個(gè)簡(jiǎn)單的PoW算法,該算法通過不斷調(diào)整hash問題的難度然后統(tǒng)計(jì)“挖礦”成功的時(shí)間。因?yàn)镻oW算法是競(jìng)爭(zhēng)“挖礦”,實(shí)驗(yàn)只需要在一臺(tái)CPU為i7-7500U的主機(jī)上運(yùn)行。
而對(duì)于CPoW算法,因?yàn)樗且粋€(gè)劃分搜索空間的合作“挖礦”,所以除了核心的“挖礦”模塊,還需要有通信模塊和劃分搜索空間模塊。為了簡(jiǎn)化實(shí)驗(yàn),仿真實(shí)驗(yàn)指定了各個(gè)節(jié)點(diǎn)的信用度排名。實(shí)驗(yàn)主要比較CPoW與PoW的算法效率和隨機(jī)性,探索解決hash難題時(shí)間和難度值,節(jié)點(diǎn)個(gè)數(shù)的關(guān)系,以及節(jié)點(diǎn)解決hash難題個(gè)數(shù)的分布情況。
5.2.3 仿真結(jié)果
PoW共識(shí)與CPoW共識(shí)解決難題的時(shí)間對(duì)比如圖7所示。其中,橫軸代表hash難題的難度值,縱軸代表解決hash難題的時(shí)間。由圖7可知,在難度值相同時(shí),CPoW共識(shí)機(jī)制解決hash難題的時(shí)間明顯小于PoW共識(shí)機(jī)制。并且,3個(gè)節(jié)點(diǎn)合作“挖礦”的效率會(huì)好于2個(gè)節(jié)點(diǎn)“挖礦”的效率,即節(jié)點(diǎn)越多,“挖礦”效率越高,圖8和圖9更能夠說明這一點(diǎn)。但是,在圖7中仍出現(xiàn)了2個(gè)節(jié)點(diǎn)合作“挖礦”所用時(shí)間小于3個(gè)節(jié)點(diǎn)合作“挖礦”的情況,這種情況約占考察總數(shù)的14.3%,這是由于合理hash值的產(chǎn)生具有不確定性。
圖7 PoW共識(shí)與CPoW共識(shí)解決難題時(shí)間對(duì)比
圖8 節(jié)點(diǎn)個(gè)數(shù)為2、3、5時(shí)對(duì)CPoW共識(shí)解決hash難題的影響
圖9 節(jié)點(diǎn)個(gè)數(shù)為3、7、11時(shí)對(duì)CPoW共識(shí)解決hash難題的影響
圖10和圖11其難度值分別為29和30,通過增加節(jié)點(diǎn)數(shù)量,可以發(fā)現(xiàn)隨著節(jié)點(diǎn)數(shù)量的增加,hash難題的解決時(shí)間總體上呈遞減的趨勢(shì)。圖10和圖11中出現(xiàn)了與預(yù)期不符的波動(dòng)節(jié)點(diǎn),這是由于在尋找合理hash值的過程中,CPoW共識(shí)算法良好的隨機(jī)性,導(dǎo)致在尋找nNonce值時(shí)具有不確定性,致使在“挖礦”時(shí)間上出現(xiàn)了波動(dòng),但其整體呈下降趨勢(shì)。
圖10 CPoW共識(shí)解決hash難題的時(shí)間趨勢(shì)(1)
圖11 CPoW共識(shí)解決hash難題的時(shí)間趨勢(shì)(2)
實(shí)驗(yàn)還在難度值相同的情況下,通過改變區(qū)塊填充內(nèi)容,嘗試“挖礦”100次,分別統(tǒng)計(jì)了12個(gè)節(jié)點(diǎn)和11個(gè)節(jié)點(diǎn)解決hash難題的次數(shù)的分布情況,如表3所示和表4所示。從表3和表4可以發(fā)現(xiàn),尋找合理hash值是一種不確定事件,但是排名的高低(排名值越大,排名越高)對(duì)解決hash難題還是有影響的,如2個(gè)表中都出現(xiàn)了低排名解決hash難題個(gè)數(shù)偏少的情況。但這也不意味著最高的排名就一定能夠更多地解決hash難題,如表4所示。
表3 12個(gè)節(jié)點(diǎn)解決hash難題
表4 11個(gè)節(jié)點(diǎn)解決hash難題
圖12 尋找合理hash值的過程
綜上所述,CPoW共識(shí)機(jī)制大大提高了“挖礦”的效率,隨著參與共識(shí)的節(jié)點(diǎn)數(shù)的增加,其效率提高越明顯。同時(shí),新的CPoW共識(shí)機(jī)制在選擇記賬節(jié)點(diǎn)的問題上具有很好的隨機(jī)性,但仍存在信用度高低對(duì)“挖礦”成功的影響。仿真實(shí)驗(yàn)也從側(cè)面反映了解決相同難度的hash難題時(shí),由于時(shí)間的減少,其資源消耗會(huì)減少。
本節(jié)主要從尋找合理hash值時(shí)間和資源消耗這2個(gè)角度對(duì)CPoW共識(shí)機(jī)制進(jìn)行性能分析。
節(jié)點(diǎn)執(zhí)行CPoW共識(shí)尋找合理hash值的過程如圖12所示。其中,虛線框代表分片,實(shí)線框代表輪次,其中,五角星代表合理hash位置(忽略其具體位置,默認(rèn)其在這個(gè)搜索空間的最后),它位于第輪排名為a的節(jié)點(diǎn)的搜索空間中。
假設(shè)用節(jié)點(diǎn)的平均算力代替網(wǎng)絡(luò)中節(jié)點(diǎn)的算力,用表示獲取搜索空間的時(shí)間,由于節(jié)點(diǎn)信用度的排名和分發(fā)都是與CPoW共識(shí)的hash計(jì)算并發(fā)執(zhí)行的,因此時(shí)間可以忽略,則在CPoW共識(shí)下尋找到合理hash值的時(shí)間為
而對(duì)于PoW共識(shí)而言,尋找合理hash值的時(shí)間為
在資源消耗方面,假設(shè)進(jìn)行一次hash運(yùn)算需要消耗的資源為s,獲取一次搜索空間需要消耗的資源為s,進(jìn)行一次信用度排名和分發(fā)需要消耗的資源為s,則CPoW共識(shí)所消耗的資源為
而對(duì)于PoW共識(shí)而言,所消耗的資源為
在尋找一次合理hash值的情況下,1和2無法進(jìn)行大小的比較,因?yàn)闊o法確定s和s的大小。但是當(dāng)在成功尋找了1 440個(gè)合理hash值的情況下(產(chǎn)生1 440個(gè)區(qū)塊后,系統(tǒng)會(huì)提前更新信用度排名),并假設(shè)在這1 440次計(jì)算中合理hash值的位置不變,則CPoW共識(shí)下所消耗的資源為
而對(duì)于PoW共識(shí)而言,所消耗的資源為
目前,根據(jù)區(qū)塊鏈開放等級(jí)的不同,區(qū)塊鏈被分為3類:私有鏈、公有鏈、聯(lián)盟鏈。PoW共識(shí)機(jī)制就是經(jīng)典的公有鏈共識(shí)算法,它很好地適應(yīng)了公有鏈的發(fā)展,且設(shè)計(jì)精簡(jiǎn)。CPoW共識(shí)機(jī)制主要包含信用度評(píng)估、信用度排名(算法1)、排名分發(fā)(算法2)和共識(shí)計(jì)算這4個(gè)主要算法,其在算法設(shè)計(jì)上較為復(fù)雜,但是它同樣適用于公有鏈。但是,其區(qū)塊鏈網(wǎng)絡(luò)的規(guī)模(參與共識(shí)的節(jié)點(diǎn)數(shù)量)遠(yuǎn)少于PoW共識(shí)機(jī)制所適用的區(qū)塊鏈網(wǎng)絡(luò)規(guī)模。因?yàn)槔碚撋螾oW共識(shí)機(jī)制可以使參與共識(shí)節(jié)點(diǎn)的數(shù)量接近無窮大,而CPoW共識(shí)機(jī)制受限于信用度排名(算法1)和排名分發(fā)(算法2),雖然本文在算法流程設(shè)計(jì)上已經(jīng)進(jìn)行了優(yōu)化,但本質(zhì)上其算法執(zhí)行時(shí)間仍與參與共識(shí)節(jié)點(diǎn)的數(shù)量相關(guān)。
綜上所述,CPoW共識(shí)算法適用公有鏈。其算法性能決定了它能夠滿足大多數(shù)區(qū)塊鏈應(yīng)用場(chǎng)景的共識(shí)計(jì)算,不僅適用于虛擬貨幣等電子貨幣系統(tǒng),還適用于智能電網(wǎng)[19]、供應(yīng)鏈系統(tǒng)、數(shù)據(jù)存儲(chǔ)與溯源、食品安全等眾多領(lǐng)域。
對(duì)于虛擬貨幣的PoW共識(shí)機(jī)制而言,尋找合理hash值是一種概率事件,占有更多的算力會(huì)有更大的概率成功“挖礦”。對(duì)于點(diǎn)點(diǎn)幣的PoS共識(shí)機(jī)制而言,同樣是尋找合理的hash值,其過程也是一個(gè)概率事件,擁有coin age的多少會(huì)等比例地降低“挖礦”難度,從而增加“挖礦”成功的概率。而對(duì)于CPoW共識(shí)而言,尋找合理hash值還是一個(gè)概率事件,擁有更高的信用度會(huì)獲得更多的搜索空間,從而增加“挖礦”成功的概率。同時(shí),某一節(jié)點(diǎn)獲得的搜索空間恰好能夠產(chǎn)生新區(qū)塊,這也是一個(gè)概率事件,從而又給成功“挖礦”增加了隨機(jī)性。
一方面,CPoW共識(shí)機(jī)制降低了資源消耗,另一方面,信用排名的機(jī)制確保了節(jié)點(diǎn)們致力于獲得更高的信用排名,而不是進(jìn)行盲目的算力升級(jí)和惡意的區(qū)塊分叉??傊?,CPoW共識(shí)機(jī)制能夠消耗更少的計(jì)算資源產(chǎn)生一個(gè)區(qū)塊,同時(shí)也使記賬節(jié)點(diǎn)的產(chǎn)生更具隨機(jī)性,很好地適應(yīng)了公有鏈的發(fā)展。
此外,對(duì)于PoS共識(shí)機(jī)制而言,同樣可以設(shè)計(jì)基于信用模型的共識(shí)算法,讓其根據(jù)信用度的高低等比例地降低“挖礦”的難度,從而防止幣齡攻擊(save-up attack),提高共識(shí)機(jī)制的安全性。后續(xù)工作將對(duì)PoS共識(shí)機(jī)制及PoS共識(shí)的變種機(jī)制(如DPoS)進(jìn)行信用模型的構(gòu)造和分析,從而設(shè)計(jì)更加高效的共識(shí)機(jī)制。
[1] NAKAMOTO S. Bitcoin: a peer-to-peer electronic cash system[J]. Consulted, 2008.
[2] MCCONAGHY T, MARQUES R, MüLLER A, et al. BigchainDB: a scalable blockchain database[R]. White Paper, BigChainDB, 2016.
[3] ZYSKIND G, NATHAN O A. Decentralizing privacy: using blockchain to protect personal data[C]// IEEE Security and Privacy Workshops. 2015:180-184.
[4] STOLZ D, WATTENHOFER R. Byzantine agreement with median validity[C]//19th International Conference on Priniciples of Distributed Systems (OPODIS). 2015.
[5] CASTRO M, LISKOV B. Practical Byzantine fault tolerance and proactive recovery[J]. ACM Transactions on Computer Systems, 2002, 20(4): 398-461.
[6] CASTRO M, LISKOV B. Practical byzantine fault tolerance[C]//The Third Symposium on Operating Systems Design and Implementation. 1999: 173-186.
[7] 范捷, 易樂天, 舒繼武. 拜占庭系統(tǒng)技術(shù)研究綜述[J]. 軟件學(xué)報(bào), 2013, 24(6): 1346-1360. FAN J, YI L T, SHU J W. Research on the technologies of Byzantine system[J]. Journal of Software, 2013, 24(6): 1346-1360.
[8] 唐長(zhǎng)兵, 楊珍, 鄭忠龍, 等. PoW共識(shí)算法中的博弈困境分析與優(yōu)化[J]. 自動(dòng)化學(xué)報(bào), 2017, 43(9):1520-1531. TANG C B, YANG Z, ZHENG Z L, et al. Game dilemma analysis and optimization of PoW consensus algorithm[J]. Acta Automatica Sinica, 2017, 43(9):1520-1531.
[9] LAMPORT L. Paxos made simple[J]. ACM Sigact News, 2001, 32(4): 18-25.
[10] KING S, NADAL S. PPCoin: peer-to-peer crypto-currency with proof-of-stake[J]. 2012.
[11] LARIMER D. Delegated proof-of-stake[R]. White Paper, 2014.
[12] BENTOV I, LEE C, MIZRAHI A, et al. Proof of activity: extending bitcoin0s proof of work via proof of stake[J]. ACM Sigmetrics Performance Evaluation Review, 2014, 42(3): 34-37.
[13] ROSENFELD M. Analysis of bitcoin pooled mining reward systems[J]. Computer Science, 2011.
[14] ANDREAS M. Antonopoulos. mastering bitcoin [M]. O’Reilly Media, 2014.
[15] DING S F, JIA W K, SU C Y, et al. An improved BP neural network algorithm based on factor analysis[J]. Journal of Convergence Information Technology, 2010, 5(4):103-108.
[16] MA Y X, WANG S G. The application of artificial neural network in the forecasting on incidence of a disease[C]//International Conference on Biomedical Engineering and Informatics. 2010:1269-1272.
[17] JIN W, LI Z J, WEI L S, et al. The improvements of BP neural network learning algorithm[C]// International Conference on Signal Processing Proceedings. 2002:1647-1649.
[18] BERMAN P, GARAY J A, PERRY K J. Towards optimal distributed consensus[C]//Symposium on Foundations of Computer Science. 1989:410-415.
[19] RAHBARI A N, OJHA U, ZHANG Z, et al. Incremental welfare consensus algorithm for cooperative distributed generation/demand response in smart grid[J]. IEEE Transactions on Smart Grid, 2017, 5(6):2836-2845.
Proof of work algorithm based on credit model
WANG Zuan1,2,3,TIAN Youliang1,2,3, LI Qiuxian1,2,3, YANG Xinhuan1,2,3
1. College of Computer Science & Technology, Guizhou University, Guiyang 550025, China 2. Guizhou Provincial Key Labortory of Public Big Data (Guizhou University), Guiyang 550025, China 3. Institute of Cryptography & Data Security, Guizhou University, Guiyang 550025, China
A consensus protocol based on the credit model was proposed. Firstly, the consensus agreement drew on the idea of personal credit risk assessment and a node credit model based on BP neural network was designed. Secondly, a piecewise rotation model was also constructed to segment the search space according to the node’s credit level to generate new blocks. At the same time, the possible attack of the protocol was analyzed and the vulnerability of this protocol was fixed. Finally, the simulation experiments show that the protocol not only effectively reduces the huge resource consumption in the process of new block generation, but also suppresses the generation of the large mine pool, making the whole blockchain system more secure and reliable.
PoW consensus, BP neural network, credit model, search space, blockchain
TP302
A
10.11959/j.issn.1000?436x.2018138
王纘(1992–),男,安徽安慶人,貴州大學(xué)碩士生,主要研究方向?yàn)樾畔踩?、區(qū)塊鏈應(yīng)用與共識(shí)機(jī)制、機(jī)器學(xué)習(xí)。
田有亮(1982–),男,貴州盤縣人,博士,貴州大學(xué)教授、博士生導(dǎo)師,主要研究方向?yàn)樗惴ú┺恼?、密碼學(xué)與安全協(xié)議、大數(shù)據(jù)安全與隱私保護(hù)等。
李秋賢(1992–),女,河南焦作人,貴州大學(xué)碩士生,主要研究方向?yàn)槊艽a學(xué)與安全協(xié)議。
楊新歡(1993–),女,山西運(yùn)城人,貴州大學(xué)碩士生,主要研究方向?yàn)樾畔踩?shù)據(jù)通信安全。
2017?10?30;
2018?07?20
youliangtian@163.com
國(guó)家自然科學(xué)基金資助項(xiàng)目(No.61662009, No.61772008);貴州省教育廳科技拔尖人才基金資助項(xiàng)目(No.[2016] 060);貴州省科技重大專項(xiàng)計(jì)劃基金資助項(xiàng)目(No.20183001);貴州省科技計(jì)劃基金資助項(xiàng)目(No.[2017]5788);教育部—中國(guó)移動(dòng)科研基金研發(fā)資助項(xiàng)目(No.MCM20170401);貴州大學(xué)培育基金資助項(xiàng)目(No. [2017]5788);貴州省聯(lián)合基金資助項(xiàng)目(No. LH20147476)
The National Natural Science Foundation of China (No.61662009, No.61772008), Topnotch Talent in Science and Technology Support Program of Guizhou Province Education Department (No.[2016] 060), Science and Technology Major Support Program of Guizhou Province (No.20183001), Guizhou Provincial Science and Technology Plan Project (No.[2017]5788), Ministry of Educatio China Mobile Research Fund Project (No.MCM20170401), Guizhou University Cultivation Project (No. [2017]5788), The Joint Science and Technology Foundation of Guizhou Province (No.LH20147476)