海 沫 朱建明
(中央財(cái)經(jīng)大學(xué)信息學(xué)院 北京 100081)
區(qū)塊鏈?zhǔn)欠植际綌?shù)據(jù)存儲、點(diǎn)對點(diǎn)傳輸、共識機(jī)制、加密算法等計(jì)算機(jī)技術(shù)在互聯(lián)網(wǎng)時代的創(chuàng)新應(yīng)用模式.目前,區(qū)塊鏈的應(yīng)用已延伸到物聯(lián)網(wǎng)、智能制造、供應(yīng)鏈管理、數(shù)字資產(chǎn)交易等多個領(lǐng)域[1].區(qū)塊鏈源自于比特幣的底層技術(shù).2008年,化名為“中本聰”的學(xué)者提出了一種被稱為比特幣的數(shù)字貨幣.傳統(tǒng)的貨幣系統(tǒng)通常由一個統(tǒng)一機(jī)構(gòu)或者權(quán)威第三方作為中心節(jié)點(diǎn)來處理所有事務(wù),而比特幣顛覆了這種設(shè)計(jì),使得在沒有任何權(quán)威中介機(jī)構(gòu)統(tǒng)籌的情況下,互不信任的人可以直接用比特幣進(jìn)行支付,并采用共識和激勵機(jī)制在點(diǎn)對點(diǎn)網(wǎng)絡(luò)中維護(hù)了一個分布式公共賬簿,賬簿中的數(shù)據(jù)通過密碼學(xué)算法來保證安全性與合法性[2-5].
區(qū)塊是比特幣中用來記錄和確認(rèn)交易的數(shù)據(jù)結(jié)構(gòu),它是由區(qū)塊鏈網(wǎng)絡(luò)中一些稱為礦工的節(jié)點(diǎn)產(chǎn)生的,而礦工構(gòu)造區(qū)塊的過程被稱為挖礦.一筆交易被創(chuàng)建后會向全網(wǎng)廣播,而礦工們則會收集并驗(yàn)證這些交易,并將其中合法的交易數(shù)據(jù)存儲在本地交易池中.在交易達(dá)到一定數(shù)量后,礦工開始用這些交易數(shù)據(jù)構(gòu)造區(qū)塊.礦工挖礦成功后,會向全網(wǎng)廣播其構(gòu)建的區(qū)塊,收到區(qū)塊的節(jié)點(diǎn)會驗(yàn)證和確認(rèn)這個區(qū)塊,并將合法的區(qū)塊數(shù)據(jù)添加到區(qū)塊鏈頭部,并將它繼續(xù)向外傳播.區(qū)塊鏈由許多區(qū)塊首尾相連而成,每一個區(qū)塊都記錄著系統(tǒng)一段時間內(nèi)的交易數(shù)據(jù).當(dāng)一個區(qū)塊b還在傳播時另一個沖突的區(qū)塊b′發(fā)現(xiàn)并且被傳播時,會產(chǎn)生區(qū)塊鏈分叉[6].其中,區(qū)塊b′是由網(wǎng)絡(luò)中不知道區(qū)塊b的節(jié)點(diǎn)生成的.文獻(xiàn)[7-8]發(fā)現(xiàn):當(dāng)發(fā)生區(qū)塊鏈分叉時,在不同分支的區(qū)塊上可能會存在花費(fèi)相同比特幣的交易,這容易引起攻擊者進(jìn)行雙重支付攻擊.
文獻(xiàn)[9]給出了計(jì)算區(qū)塊鏈分叉概率P的公式:
(1)
其中,f(t)為區(qū)塊傳播時間t后接收到區(qū)塊的節(jié)點(diǎn)所占百分比;F為離散隨機(jī)變量,用來統(tǒng)計(jì)當(dāng)某個區(qū)塊正在傳播時其他沒有接收到該區(qū)塊的節(jié)點(diǎn)產(chǎn)生的和其沖突的區(qū)塊個數(shù);Pb為每秒挖出區(qū)塊的概率,其在所有節(jié)點(diǎn)上一致隨機(jī)分布,生成區(qū)塊的速度越快,Pb越大.
(2)
式(2)表明:分叉產(chǎn)生概率P和區(qū)塊產(chǎn)生概率Pb大約成正比.而生成區(qū)塊的速度越快,Pb越大,分叉產(chǎn)生概率P越大,分叉越容易出現(xiàn);同時,分叉產(chǎn)生概率P和區(qū)塊傳播速度大約成反比,區(qū)塊傳播速度越快,f(t)越大,分叉產(chǎn)生概率P越小,分叉越不容易出現(xiàn).由此可見,可通過降低區(qū)塊產(chǎn)生速度或提高區(qū)塊傳播速度以減少區(qū)塊鏈分叉發(fā)生的概率,但比特幣通過對難度目標(biāo)值的調(diào)整保持了區(qū)塊產(chǎn)生速度的穩(wěn)定,因而,找到加速區(qū)塊傳播的方法,對于區(qū)塊鏈分叉概率的減少變得尤其重要.
本文的主要貢獻(xiàn)有6個方面:
1) 對區(qū)塊鏈網(wǎng)絡(luò)中最優(yōu)傳播路徑問題進(jìn)行了形式化定義,以此為基礎(chǔ)提出了具有低時間復(fù)雜度和消息復(fù)雜度的最優(yōu)傳播路徑的生成算法,該算法使得交易和區(qū)塊從源節(jié)點(diǎn)沿著該路徑進(jìn)行傳播時具有最低的傳播延遲;
2) 提出了當(dāng)區(qū)塊鏈網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的改變導(dǎo)致需要在生成的最優(yōu)傳播路徑上刪除邊和節(jié)點(diǎn)、插入邊和節(jié)點(diǎn)時最優(yōu)傳播路徑的增量更新算法,該算法使得所需的時間復(fù)雜度和消息復(fù)雜度較?。?/p>
3) 分析了能夠激勵生成的最優(yōu)傳播路徑上的所有節(jié)點(diǎn)對交易和區(qū)塊進(jìn)行傳播的激勵函數(shù)需滿足的必要條件,并定義了滿足該條件的激勵函數(shù),即獎勵費(fèi)分享函數(shù),在位于傳播路徑上的所有節(jié)點(diǎn)之間合理分配獎勵費(fèi),從而激勵節(jié)點(diǎn)傳播交易和區(qū)塊,以確保交易和區(qū)塊最終能夠到達(dá)整個網(wǎng)絡(luò);
4) 提出了對傳播路徑進(jìn)行簽名的方式以保障傳播路徑的安全性;
5) 對最優(yōu)傳播路徑的生成和維護(hù)算法的時間復(fù)雜度和消息復(fù)雜度進(jìn)行了理論分析;
6) 對提出的區(qū)塊鏈傳播機(jī)制和已有的區(qū)塊鏈傳播機(jī)制在不同網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、節(jié)點(diǎn)規(guī)模和節(jié)點(diǎn)度數(shù)下的傳播延遲和傳播所產(chǎn)生的通信消息數(shù)進(jìn)行了比較.
目前對區(qū)塊鏈分叉問題的解決方法主要有3類:1)通過共識算法[11-19]使得在發(fā)生分叉后系統(tǒng)最終收斂成只有一個區(qū)塊鏈分支的穩(wěn)定狀態(tài),但該方法并沒有減少分叉發(fā)生的概率;2)通過指定特殊節(jié)點(diǎn)來負(fù)責(zé)交易及區(qū)塊驗(yàn)證和確認(rèn)的全過程[20-24],或加上同步限制以增加交易及區(qū)塊的驗(yàn)證和確認(rèn)操作的全局有序性[25],從而避免分叉的發(fā)生,但降低了區(qū)塊鏈網(wǎng)絡(luò)的去中心化特征,并且額外增加的同步限制將導(dǎo)致較大的同步開銷;3)通過優(yōu)化區(qū)塊鏈網(wǎng)絡(luò)中交易和區(qū)塊的傳播方法,以減少分叉發(fā)生的概率.其中,通過優(yōu)化區(qū)塊鏈網(wǎng)絡(luò)中區(qū)塊和交易的傳播方法以減少分叉概率的研究主要可分為3類:優(yōu)化區(qū)塊鏈網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、優(yōu)化單個節(jié)點(diǎn)的傳播行為、流水線化傳播過程.
區(qū)塊鏈網(wǎng)絡(luò)采用對等網(wǎng)絡(luò)組網(wǎng)方式將所有節(jié)點(diǎn)連接在一起,網(wǎng)絡(luò)中每個節(jié)點(diǎn)地位對等且以扁平式拓?fù)浣Y(jié)構(gòu)相互連通和交互,不存在任何中心特殊節(jié)點(diǎn)和層級結(jié)構(gòu),每個節(jié)點(diǎn)均會承擔(dān)網(wǎng)絡(luò)路由、驗(yàn)證交易和區(qū)塊、基于Gossip協(xié)議[26]傳播交易和區(qū)塊、發(fā)現(xiàn)新節(jié)點(diǎn)等工作[27].區(qū)塊鏈網(wǎng)絡(luò)中每個節(jié)點(diǎn)隨機(jī)選擇鄰居節(jié)點(diǎn)以建立連接,因而,相鄰節(jié)點(diǎn)之間的傳播延遲可能較長,由此導(dǎo)致交易和區(qū)塊的傳播延遲變長.目前有一些研究工作通過對區(qū)塊鏈網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)進(jìn)行優(yōu)化,以加快交易和區(qū)塊的傳播.
為了最小化任意2個節(jié)點(diǎn)之間的路由跳數(shù),文獻(xiàn)[9]通過構(gòu)建一個用作中心通信樞紐的星形子圖以連接網(wǎng)絡(luò)中的每個節(jié)點(diǎn),以減少發(fā)送交易及區(qū)塊的節(jié)點(diǎn)和其他節(jié)點(diǎn)之間的路由跳數(shù),從而加速交易和區(qū)塊的傳播.文獻(xiàn)[4]實(shí)現(xiàn)了一個保持有4 000個開放連接的連接池,該連接池能夠和每個被宣告地址的節(jié)點(diǎn)進(jìn)行連接,且每次可到達(dá)的節(jié)點(diǎn)少于4 000個.因而,任何2個連接到中心通信樞紐的節(jié)點(diǎn)間的路由跳數(shù)為2.文獻(xiàn)[28]提出了一種基于超級節(jié)點(diǎn)的區(qū)塊鏈網(wǎng)絡(luò)聚類協(xié)議——BCBSN(bitcoin clustering based on super node).該協(xié)議的目標(biāo)是在區(qū)塊鏈網(wǎng)絡(luò)中基于節(jié)點(diǎn)的局部性進(jìn)行聚類.在每個聚類中,指定一個節(jié)點(diǎn)為聚類頭節(jié)點(diǎn)以維護(hù)整個聚類.每個普通節(jié)點(diǎn)僅和一個聚類頭節(jié)點(diǎn)連接,每個聚類頭節(jié)點(diǎn)和其他聚類頭節(jié)點(diǎn)相連,這樣減少了傳播交易和區(qū)塊所經(jīng)過的路由跳數(shù).實(shí)驗(yàn)結(jié)果表明:BCBSN協(xié)議中交易和區(qū)塊傳播延遲的變化幅度隨著相連節(jié)點(diǎn)個數(shù)的增加而增加;隨著傳播交易和區(qū)塊所經(jīng)過的跳數(shù)的減少,BCBSN協(xié)議中交易和區(qū)塊傳播延遲的變化幅度也隨之減少;同一聚類中節(jié)點(diǎn)的局部性減少了交易和區(qū)塊在同一聚類中的傳播延遲.文獻(xiàn)[29]提出了一種基于地理位置的聚類協(xié)議——LBC(location based clustering).LBC協(xié)議的目標(biāo)是通過將區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)按照其地理位置進(jìn)行聚類以減少區(qū)塊鏈網(wǎng)絡(luò)相鄰節(jié)點(diǎn)間的距離,從而減少相鄰節(jié)點(diǎn)的傳播延遲.實(shí)驗(yàn)結(jié)果表明:基于節(jié)點(diǎn)地理位置的距離更好地定義了聚類結(jié)構(gòu),從而優(yōu)化了交易傳播的性能.和BCBSN協(xié)議相比,LBC協(xié)議能夠更有效地減少交易和區(qū)塊的傳播延遲,并且交易和區(qū)塊的傳播延遲的變化幅度比BCBSN協(xié)議更小.文獻(xiàn)[30]提出了一種基于Ping延遲的區(qū)塊鏈網(wǎng)絡(luò)聚類協(xié)議——BCBPT(bitcoin clustering based on ping time).BCBPT協(xié)議基于節(jié)點(diǎn)間的Ping延遲將節(jié)點(diǎn)進(jìn)行聚類,以減少區(qū)塊鏈網(wǎng)絡(luò)中相鄰節(jié)點(diǎn)的傳播延遲.實(shí)驗(yàn)結(jié)果表明:相比于基于地理位置的聚類協(xié)議——LBC,BCBPT協(xié)議中基于Ping延遲的節(jié)點(diǎn)間物理距離的度量方式更好地定義了聚類結(jié)構(gòu),使其能優(yōu)化交易和區(qū)塊傳播的性能.其性能改進(jìn)的根本原因在于:地理位置鄰近的節(jié)點(diǎn)在物理Internet網(wǎng)絡(luò)上的距離可能相距很遠(yuǎn),而采用Ping延遲能更準(zhǔn)確地度量節(jié)點(diǎn)間的物理距離,從而減少相鄰節(jié)點(diǎn)間的傳播延遲.實(shí)驗(yàn)結(jié)果表明:物理距離閾值設(shè)置得越小,BCBPT協(xié)議的交易和區(qū)塊的傳播延遲越小.和LBC協(xié)議相比,BCBPT協(xié)議能更有效地減少交易和區(qū)塊的傳播延遲,并且其交易和區(qū)塊的傳播延遲的變化幅度比LBC協(xié)議更小.
為了避免將交易和區(qū)塊發(fā)送給已經(jīng)從其他節(jié)點(diǎn)接收到該交易和區(qū)塊的節(jié)點(diǎn),在傳播過程中,節(jié)點(diǎn)不直接轉(zhuǎn)發(fā)其接收到的交易和區(qū)塊給鄰居節(jié)點(diǎn),而是當(dāng)完成對交易和區(qū)塊的驗(yàn)證后,先向鄰居節(jié)點(diǎn)發(fā)送目錄消息——inv(inventory),以通知該交易和區(qū)塊的可用性.交易和區(qū)塊在單個節(jié)點(diǎn)上的轉(zhuǎn)發(fā)過程如圖1所示[9].其中,inv消息包含了被發(fā)送節(jié)點(diǎn)A接收到并且可獲取的交易和區(qū)塊的散列值的集合,getdata消息為請求交易和區(qū)塊的消息.圖1表明:一旦節(jié)點(diǎn)A完成難度檢查以及對交易和區(qū)塊的驗(yàn)證,該節(jié)點(diǎn)通過向鄰居節(jié)點(diǎn)B發(fā)送inv消息以通知該交易和區(qū)塊的可用性;如果接收到inv消息的鄰居節(jié)點(diǎn)B發(fā)現(xiàn)本地沒有該交易和區(qū)塊,則向節(jié)點(diǎn)A發(fā)送getdata消息以請求交易和區(qū)塊;接著,節(jié)點(diǎn)A才向節(jié)點(diǎn)B發(fā)送交易和區(qū)塊.其中,難度檢查包括:節(jié)點(diǎn)對接收到的區(qū)塊進(jìn)行散列以驗(yàn)證工作量證明,并將計(jì)算得到的散列值和當(dāng)前的難度目標(biāo)值進(jìn)行比較.區(qū)塊鏈網(wǎng)絡(luò)中產(chǎn)生的每個交易和區(qū)塊都按照這樣的方式從源節(jié)點(diǎn)開始廣播到整個網(wǎng)絡(luò).交易和區(qū)塊在傳播過程中每經(jīng)過一個節(jié)點(diǎn)都會產(chǎn)生傳播延遲,傳播延遲由傳輸時間、難度檢查時間、交易和區(qū)塊的本地驗(yàn)證時間構(gòu)成.傳輸時間包括:inv消息、getdata消息、交易和區(qū)塊消息的傳輸時間.對區(qū)塊進(jìn)行驗(yàn)證時需要對區(qū)塊中的每個交易進(jìn)行驗(yàn)證.
Fig. 1 Spreading transaction or block from node A to node B圖1 從節(jié)點(diǎn)A傳播交易和區(qū)塊到節(jié)點(diǎn)B
Fig. 2 Optimization of propagation behavior of a single node圖2 單個節(jié)點(diǎn)傳播行為的優(yōu)化
由此可見,導(dǎo)致區(qū)塊鏈網(wǎng)絡(luò)中區(qū)塊傳播延遲的主要因素為:節(jié)點(diǎn)在將區(qū)塊廣播到網(wǎng)絡(luò)之前驗(yàn)證區(qū)塊所花費(fèi)的時間.區(qū)塊驗(yàn)證時間和區(qū)塊大小有密切關(guān)系.由于傳播過程中每一跳上的節(jié)點(diǎn)在將其轉(zhuǎn)發(fā)給鄰居節(jié)點(diǎn)之前都需要驗(yàn)證該區(qū)塊,因而,傳播延遲和傳播路徑的長度成正比.區(qū)塊驗(yàn)證過程可分為2個階段:難度檢查和區(qū)塊中交易的驗(yàn)證.難度檢查包括:節(jié)點(diǎn)對接收到的區(qū)塊進(jìn)行散列以驗(yàn)證工作量,并將計(jì)算得到的散列值和當(dāng)前的難度目標(biāo)值進(jìn)行比較.此外,節(jié)點(diǎn)還將檢查接收到的新區(qū)塊是否為最近接收到的舊區(qū)塊的副本,并且將最近接收到的舊區(qū)塊作為它的前繼節(jié)點(diǎn)以證明新區(qū)塊不是舊區(qū)塊的重新提交.區(qū)塊中的每個交易都需要驗(yàn)證.只要難度檢查已經(jīng)完成,在對區(qū)塊或交易進(jìn)行驗(yàn)證前,可將區(qū)塊或交易轉(zhuǎn)發(fā)到鄰居節(jié)點(diǎn).因而,文獻(xiàn)[9]提出:可將每個節(jié)點(diǎn)的傳播行為改變?yōu)椋阂坏╇y度檢查完成,節(jié)點(diǎn)就會發(fā)送一條inv消息,而不是等待更長時間的交易和區(qū)塊驗(yàn)證完成后才發(fā)送inv消息,并且在對區(qū)塊或交易進(jìn)行驗(yàn)證前,可將交易和區(qū)塊轉(zhuǎn)發(fā)到鄰居節(jié)點(diǎn),如圖2所示.然而,任何對網(wǎng)絡(luò)中節(jié)點(diǎn)傳播行為的改變都必須被審查以降低被攻擊者濫用從而損害網(wǎng)絡(luò)的可能性.特別是,轉(zhuǎn)發(fā)未經(jīng)驗(yàn)證的交易和區(qū)塊可能允許攻擊者發(fā)送任意數(shù)量的數(shù)據(jù),這些數(shù)據(jù)被立即轉(zhuǎn)發(fā)至網(wǎng)絡(luò)中的某些節(jié)點(diǎn),從而導(dǎo)致分布式拒絕服務(wù)攻擊.然而,由于生成一個能通過難度檢查的非法區(qū)塊和生成一個合法區(qū)塊具有同等難度,對節(jié)點(diǎn)傳播行為的這種改變并沒有增加拒絕服務(wù)攻擊的風(fēng)險(xiǎn).雖然該方法加速了傳播路徑上每跳的傳播,但如果僅在連接度不高的單個節(jié)點(diǎn)上實(shí)施,則對總傳播延遲減少的影響較小.
文獻(xiàn)[9]提出將區(qū)塊和交易傳播過程流水線化的方法,即:一旦節(jié)點(diǎn)接收到inv消息,將立即將該消息轉(zhuǎn)發(fā)給鄰居節(jié)點(diǎn),而無需先進(jìn)行難度檢查以及區(qū)塊或交易的驗(yàn)證.如圖3所示,節(jié)點(diǎn)A接收到inv消息后,立即轉(zhuǎn)發(fā)給鄰居節(jié)點(diǎn)B.該方法通過提早宣告區(qū)塊或交易的可用性,以減少鄰居節(jié)點(diǎn)之間的往返時間.所接收到的getdata消息將排隊(duì)一直到該區(qū)塊或交易被接收,并且已經(jīng)完成難度檢查后,區(qū)塊或交易將發(fā)送給請求它的鄰居節(jié)點(diǎn).攻擊者可能會宣告任意數(shù)量的區(qū)塊或交易但不能提供所請求的區(qū)塊或交易.接收這些垃圾宣告信息的節(jié)點(diǎn)會將它們轉(zhuǎn)發(fā)給鄰居節(jié)點(diǎn).一旦節(jié)點(diǎn)檢測到某個鄰居節(jié)點(diǎn)正在宣告一個它不能提供的區(qū)塊或交易,該節(jié)點(diǎn)會轉(zhuǎn)變成原來的行為:在宣告區(qū)塊或交易之前首先驗(yàn)證區(qū)塊或交易.即使該方法會導(dǎo)致節(jié)點(diǎn)轉(zhuǎn)發(fā)不能提供區(qū)塊或交易的inv消息,但是由于inv消息很小,所以其對傳播延遲的影響很小.雖然該方法加速了傳播路徑上每跳的傳播,但如果僅在連接度不高的單個節(jié)點(diǎn)上實(shí)施,則對總傳播延遲減少的影響較小.
Fig.3 Immediate forwarding of inv message圖3 inv消息的立即轉(zhuǎn)發(fā)
綜上所述,已有的通過優(yōu)化區(qū)塊鏈網(wǎng)絡(luò)中交易和區(qū)塊的傳播方法以減少分叉概率的研究采取優(yōu)化區(qū)塊鏈網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、優(yōu)化單個節(jié)點(diǎn)傳播行為、流水線化傳播過程3種方法,在一定程度上加快了區(qū)塊鏈網(wǎng)絡(luò)中交易和區(qū)塊的傳播,然而仍然存在3點(diǎn)不足:
1) 減少了相鄰節(jié)點(diǎn)間的傳播延遲或減少了傳播所需的路由跳數(shù),但不一定會減少總傳播延遲;
2) 采用的基于Gossip協(xié)議的傳播方式會導(dǎo)致環(huán)路,從而在網(wǎng)絡(luò)中產(chǎn)生大量的通信消息;
3) 基于傳播路徑上的節(jié)點(diǎn)都會繼續(xù)傳播所接收到的交易和區(qū)塊的假設(shè),但實(shí)際上某些節(jié)點(diǎn)會選擇不繼續(xù)傳播交易和區(qū)塊.
本文針對這3個問題,首先以較低的時間復(fù)雜度和消息復(fù)雜度生成和維護(hù)總傳播延遲最小的最優(yōu)傳播路徑,并定義激勵傳播路徑上的每個節(jié)點(diǎn)進(jìn)行傳播的激勵函數(shù),使得在產(chǎn)生的通信消息較少的情況下,交易和區(qū)塊能夠迅速地傳播到整個網(wǎng)絡(luò).
首先對區(qū)塊鏈網(wǎng)絡(luò)中的最優(yōu)傳播路徑問題進(jìn)行形式化定義,以此為基礎(chǔ)研究如何在較短的時間內(nèi)、在產(chǎn)生的通信消息數(shù)較少的情況下,生成最優(yōu)的傳播路徑,使得交易和區(qū)塊沿著該路徑傳播時具有最低的總傳播延遲;并研究當(dāng)區(qū)塊鏈網(wǎng)絡(luò)拓?fù)涓淖儠r,如何以增量方式更新最優(yōu)傳播路徑,使得所需的時間復(fù)雜度和消息復(fù)雜度較小;進(jìn)一步定義能夠激勵生成的最優(yōu)傳播路徑上的所有節(jié)點(diǎn)對交易和區(qū)塊進(jìn)行傳播的激勵函數(shù).
假定區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)之間的通信模型為分布式通信的同步擁塞模型.圖G=(V,E,W)中的每個節(jié)點(diǎn)v在單個處理器上運(yùn)行,這些處理器基于同步循環(huán)中的O(logn)條消息相互通信.假定所有邊的權(quán)重最多為n的多項(xiàng)式,或者將消息大小限制為邊權(quán)重的O(1)倍或節(jié)點(diǎn)標(biāo)識符大小.開始通信時,每個節(jié)點(diǎn)v知道它唯一的節(jié)點(diǎn)標(biāo)識符,用id(v)表示.
1) 為根節(jié)點(diǎn)為rt的圖G構(gòu)造1棵輔助的寬度優(yōu)先搜索(breadth first search, BFS)樹τ.每個基片段Fi∈F都有其指定的根節(jié)點(diǎn)rFi.樹τ中的每個節(jié)點(diǎn)v都能夠?qū)⑾臉洇拥母?jié)點(diǎn)rt路由到每個基片段Fi的根節(jié)點(diǎn)rFi.其中,每個基片段屬于根節(jié)點(diǎn)為v的樹τ的子樹τv.需為每個節(jié)點(diǎn)v∈V(τ)計(jì)算其區(qū)間,例如對于V中的每個節(jié)點(diǎn)對(u,v),如果它們分別屬于樹τ的不同分支,則它們的區(qū)間不相交;如果具有更長區(qū)間的節(jié)點(diǎn)在樹τ中是具有更短區(qū)間的節(jié)點(diǎn)的祖先節(jié)點(diǎn),則它們的區(qū)間嵌套.給定這些區(qū)間,當(dāng)節(jié)點(diǎn)v需要將消息路由到基片段Fi(其中的每個節(jié)點(diǎn)∈V(τV))的根節(jié)點(diǎn)rFi,它將找到節(jié)點(diǎn)v的孩子節(jié)點(diǎn)u,它的區(qū)間I(u)包含了I(rFi),并將消息發(fā)送給節(jié)點(diǎn)u.
3) 在附屬BFS樹τ上發(fā)送所有共O(nk)=條消息到樹τ的根節(jié)點(diǎn)rt上,這通過流水線化的收斂廣播過程完成.其中,樹τ的每個中間節(jié)點(diǎn)u向其父點(diǎn)πτ(u)轉(zhuǎn)發(fā)每個片段上權(quán)值最小的邊,這些邊初始時存儲在樹τ的根節(jié)點(diǎn)為u的子樹τu的節(jié)點(diǎn)集合z的某個節(jié)點(diǎn)上.
當(dāng)區(qū)塊鏈網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的改變導(dǎo)致需要在生成的最優(yōu)傳播路徑上刪除邊和節(jié)點(diǎn)時,可采用基于節(jié)點(diǎn)標(biāo)記的更新策略更新最優(yōu)傳播路徑[32].如圖4所示,當(dāng)刪除邊e(1,4)時,生成的最優(yōu)傳播路徑變成2個不同的連通分量.分別為節(jié)點(diǎn)1和節(jié)點(diǎn)4賦予標(biāo)記1和標(biāo)記2,然后,節(jié)點(diǎn)1將自己所屬的連通分量上的節(jié)點(diǎn)2,3,5都標(biāo)記為1,節(jié)點(diǎn)4將自己所屬的連通分量上的節(jié)點(diǎn)4和節(jié)點(diǎn)6都標(biāo)記為2.在產(chǎn)生的2個新的連通分量上運(yùn)行最優(yōu)傳播路徑生成算法,即可生成新的最優(yōu)傳播路徑.刪除多條邊時,為每條被刪除邊創(chuàng)建一個線程,分別運(yùn)行基于標(biāo)記的更新算法.當(dāng)被刪除節(jié)點(diǎn)v為葉子節(jié)點(diǎn)時,不需要更新;如果被刪除節(jié)點(diǎn)v為非葉子節(jié)點(diǎn)時,為其不同的鄰居節(jié)點(diǎn)賦予不同的標(biāo)識符,這些鄰居節(jié)點(diǎn)將各自發(fā)起標(biāo)記過程,用其標(biāo)識符標(biāo)記其所屬的連通分量中的所有節(jié)點(diǎn).如果刪除度為d的非葉子節(jié)點(diǎn)v,則會產(chǎn)生d個不同的連通分量,在這d個連通分量上運(yùn)行最優(yōu)傳播路徑生成算法,即可生成新的最優(yōu)傳播路徑.
Fig. 4 Marking process of nodes when deleting a single edge圖4 刪除邊時的節(jié)點(diǎn)標(biāo)記過程
Fig. 5 Updating process of optimal propagation path when inserting a single edge圖5 插入邊時的最優(yōu)傳播路徑更新過程
當(dāng)插入邊時,可通過新插入邊的2個節(jié)點(diǎn)找到它們的標(biāo)識符最小的共同祖先,進(jìn)而找到插入邊后所產(chǎn)生的環(huán)路,然后刪除環(huán)路中的最大權(quán)重邊即可得到新的最優(yōu)傳播路徑.如圖5所示,當(dāng)插入邊(2,3)時,首先找到節(jié)點(diǎn)2和節(jié)點(diǎn)3的具有最小標(biāo)識符的共同祖先——節(jié)點(diǎn)1,進(jìn)而發(fā)現(xiàn)了環(huán)路(1,2,3),由于邊(1,2)的權(quán)重最大,刪除該邊后,將得到新的最優(yōu)傳播路徑.當(dāng)插入新節(jié)點(diǎn)時,新的節(jié)點(diǎn)將和區(qū)塊鏈網(wǎng)絡(luò)中已有的某些節(jié)點(diǎn)相連,因而會產(chǎn)生一些新的邊.按照這些邊的權(quán)重從小到大的順序,依次執(zhí)行插入邊時的最優(yōu)傳播路徑更新算法即可完成插入新節(jié)點(diǎn)時最優(yōu)傳播路徑的更新.
考慮1連通網(wǎng)絡(luò)和其他類型網(wǎng)絡(luò)下的Sybil驗(yàn)證問題.其中,k連通網(wǎng)絡(luò)意味著移除k-1個節(jié)點(diǎn)不會使得網(wǎng)絡(luò)不連通.Sybil節(jié)點(diǎn)是和原始節(jié)點(diǎn)具有相同鄰居節(jié)點(diǎn)的偽造節(jié)點(diǎn),它不會增加網(wǎng)絡(luò)連通性,也沒有增加其成為區(qū)塊所有者的概率.為了使得在1連通網(wǎng)絡(luò)中不引入Sybil節(jié)點(diǎn),需要在第1個傳播節(jié)點(diǎn)和區(qū)塊所有者之間共享獎勵費(fèi),即:使得1連通網(wǎng)絡(luò)不可能存在Sybil驗(yàn)證激勵機(jī)制.在2連通網(wǎng)絡(luò)中,任意2個節(jié)點(diǎn)間存在包含客戶端節(jié)點(diǎn)和區(qū)塊所有者節(jié)點(diǎn)的多條路徑,節(jié)點(diǎn)通過遵循Sybil驗(yàn)證條件而對引入Sybil節(jié)點(diǎn)失去動力.Sybil驗(yàn)證條件可被形式化為
(3)
結(jié)論1.節(jié)點(diǎn)的傳播決定和其鄰居節(jié)點(diǎn)成為區(qū)塊擁有者的概率無關(guān),而和自己相對其他節(jié)點(diǎn)知道交易的相對概率相關(guān),并且,理性節(jié)點(diǎn)會將交易傳播給所有節(jié)點(diǎn)或者不傳播給任何節(jié)點(diǎn).
(4)
(5)
式(5)表明:長度為k+1的傳播路徑上的第k個節(jié)點(diǎn)所分享的獎勵費(fèi)為區(qū)塊所有者所分享獎勵費(fèi)的常數(shù)倍.
從結(jié)論1可知,鄰居節(jié)點(diǎn)成為區(qū)塊擁有者的概率對節(jié)點(diǎn)的傳播決定沒有任何影響.除非獲得的獎勵費(fèi)減少,這由以后諸如增加路徑長度之類的行動所導(dǎo)致,否則將滿足結(jié)論1.如果傳播節(jié)點(diǎn)所分享的獎勵費(fèi)沒有隨著路徑長度的增加而增加,那么傳播節(jié)點(diǎn)將不受任何以后行動的影響,這可被形式化為
(6)
基于以上分析,可得出一個理想的獎勵費(fèi)分享函數(shù)應(yīng)滿足的必要條件為
1) 將Sybil節(jié)點(diǎn)引入網(wǎng)絡(luò)不會對傳播路徑上的節(jié)點(diǎn)產(chǎn)生任何有利影響;
2) 對于理性節(jié)點(diǎn)應(yīng)該有足夠的激勵機(jī)制使其愿意傳播交易和區(qū)塊,并使得交易和區(qū)塊最終能夠到達(dá)整個網(wǎng)絡(luò).
基于這2個必要條件和式(3)(5)(6),可推出:在n連通(n≥2)網(wǎng)絡(luò)中,如果總獎勵費(fèi)F基于
(7)
可采用對最優(yōu)傳播路徑進(jìn)行簽名的方式以保障傳播路徑的安全性.用M表示被傳播的交易或區(qū)塊消息.當(dāng)節(jié)點(diǎn)u將消息M傳播給節(jié)點(diǎn)v后,節(jié)點(diǎn)u會得到相應(yīng)的獎勵費(fèi).首先必須確保節(jié)點(diǎn)v不能否認(rèn)它是從節(jié)點(diǎn)u接收到消息M的事實(shí).如果節(jié)點(diǎn)u僅對消息M進(jìn)行簽名,節(jié)點(diǎn)v一旦接收到消息,可以創(chuàng)建一個虛假節(jié)點(diǎn)w對消息M進(jìn)行簽名,并宣稱消息M是從節(jié)點(diǎn)w發(fā)送給節(jié)點(diǎn)v的.如果節(jié)點(diǎn)u對消息M加密,接收到消息M的節(jié)點(diǎn)v將不能驗(yàn)證其真實(shí)性.因而,在傳播路徑的每跳上,基于發(fā)送節(jié)點(diǎn)的私鑰對消息M、接收節(jié)點(diǎn)的公鑰和要求分享的獎勵費(fèi)x進(jìn)行簽名.用u.pk和u.sk分別表示節(jié)點(diǎn)u的公鑰和私鑰,對節(jié)點(diǎn)v和節(jié)點(diǎn)p的公鑰和私鑰的表示方式類似.
Fig. 6 The signature method of propagation path圖6 傳播路徑的簽名方式
當(dāng)且僅當(dāng)被傳播的消息M從生成它的源節(jié)點(diǎn)p開始傳播,并且傳播過程中每跳的發(fā)送節(jié)點(diǎn)均為上一跳的接收節(jié)點(diǎn)時,才稱傳播路徑是安全的.而以上對傳播路徑進(jìn)行簽名的方式確保了傳播過程中每跳的發(fā)送節(jié)點(diǎn)均為上一跳的接收節(jié)點(diǎn),因而保障了傳播路徑的安全性.
最優(yōu)路徑生成算法中,每個節(jié)點(diǎn)v用Fv的標(biāo)識符更新其鄰居節(jié)點(diǎn)過程的時間復(fù)雜度為O(1),在BFS樹τ上執(zhí)行基片段的|F0|≤nk個標(biāo)識符的向上轉(zhuǎn)型過程的時間復(fù)雜度為O(D+nk),在每個基片段Fi∈F0上并行地計(jì)算連接節(jié)點(diǎn)u∈V(F)和的具有最小權(quán)值的邊e(u,v)的過程的時間復(fù)雜度為O(k),在附屬BFS樹τ上發(fā)送所有共O(nk)條消息到樹τ的根節(jié)點(diǎn)rt上的流水線化廣播過程的時間復(fù)雜度為O(D+|Fj|),在本地計(jì)算片段圖過程的時間復(fù)雜度為O(D+|F|),每個基片段Fi∈F的根節(jié)點(diǎn)r(Fi)將新的第j+1層的片段的標(biāo)識符廣播給Fi中所有節(jié)點(diǎn)的過程的時間復(fù)雜度為O(k),每個節(jié)點(diǎn)v用它的新的第j+1層的片段的標(biāo)識符對其在G中的鄰居節(jié)點(diǎn)進(jìn)行更新的過程的時間復(fù)雜度為O(1).并且對于每個j=0,1,2,…,都有其中,F(xiàn)j+1和Fj為粗糙森林,階段數(shù)l=O(logn).因而,其時間復(fù)雜度為
O(D+nk)+O(k×log*n)+
O((D+k+|F|)×logn)=
O((D+k+nk)
(8)
構(gòu)建最小生成樹森林F的消息復(fù)雜度為O(|E|logn+nlogn×log*n),計(jì)算區(qū)間的消息復(fù)雜度為O(D×nk+n),每個后續(xù)階段的消息復(fù)雜度為O(D×nk+|E|+n).當(dāng)D≤k時,總消息復(fù)雜度為O(|E|logn+nlogn×log*n).對于當(dāng)參數(shù)k=D時,計(jì)算(nk,O(k))最小生成樹森林F=F0共需要的時間為O(D×log*n),共產(chǎn)生的消息數(shù)為O(|E|logn+nlogn×log*n).對于每個j=0,1,2,…,算法第j個階段所需時間為O(D+k+|F|)=O(D+k+nk)=O(D),即所有階段共需時間為O(Dlogn).因而,最優(yōu)路徑生成算法的時間復(fù)雜度為每個階段產(chǎn)生的消息數(shù)為O(|E|+n+D×|F|),即所有l(wèi)個階段共產(chǎn)生消息O((|E|+n)×logn),因而,最優(yōu)路徑生成算法的消息復(fù)雜度為O(|E|logn+nlogn×log*n).
插入邊時,插入邊的時間復(fù)雜度和消息復(fù)雜度均為O(1),找到插入邊后所產(chǎn)生的環(huán)路上權(quán)重最大邊的時間復(fù)雜度和消息復(fù)雜度均為O(logn),而刪除環(huán)路上權(quán)重最大邊的時間復(fù)雜度和消息復(fù)雜度均為O(1),因而,插入邊時最優(yōu)傳播路徑維護(hù)算法的時間復(fù)雜度和消息復(fù)雜度均為O(logn).插入節(jié)點(diǎn)的過程等價于插入多條邊的過程,因而,插入節(jié)點(diǎn)時維護(hù)算法的時間復(fù)雜度和消息復(fù)雜度均為O(logn).
采用Peersim-1.0.5[33]分別生成3種不同的區(qū)塊鏈網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu):隨機(jī)圖、基于Barabasi-Albert模型的無尺度網(wǎng)絡(luò)圖、基于Watts-Strogatz的小世界網(wǎng)絡(luò)圖.基于事件驅(qū)動的方式對區(qū)塊鏈網(wǎng)絡(luò)中基于Gossip協(xié)議的傳播機(jī)制、本文提出的最優(yōu)傳播路徑和激勵(OPPI)相結(jié)合的傳播機(jī)制進(jìn)行模擬.節(jié)點(diǎn)個數(shù)n分別設(shè)置為10,100,1 000,10 000;節(jié)點(diǎn)間的傳播延遲設(shè)置為區(qū)間[1,100]的符合一致隨機(jī)分布的整數(shù);節(jié)點(diǎn)度數(shù)k分別設(shè)置為2,4,8;小世界模型圖中節(jié)點(diǎn)重連線的概率β設(shè)置為0.8.用從源節(jié)點(diǎn)傳播交易和區(qū)塊到其他節(jié)點(diǎn)過程中產(chǎn)生的通信消息數(shù)測量傳播開銷,用所花費(fèi)的傳播延遲測量傳播效率.
為了使得實(shí)驗(yàn)結(jié)果看起來更直觀,分別對通信消息數(shù)和傳播延遲取10的對數(shù).每種實(shí)驗(yàn)分別執(zhí)行10次,實(shí)驗(yàn)結(jié)果取10次的平均值.
1) 通信消息數(shù)
為了觀察節(jié)點(diǎn)個數(shù)對消息數(shù)的影響,圖7~9分別對網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)為隨機(jī)圖、無尺度BA圖和小世界網(wǎng)絡(luò)圖時在不同節(jié)點(diǎn)個數(shù)下Gossip和OPPI的通信消息數(shù)進(jìn)行了比較.
Fig. 7 Comparison of number of messages of Gossip and OPPI (random graph)圖7 Gossip和OPPI的消息數(shù)比較(隨機(jī)圖)
Fig. 8 Comparison of number of messages of Gossip and OPPI (scale-free BA graph)圖8 Gossip和OPPI的消息數(shù)比較(無尺度BA圖)
Fig. 9 Comparison of number of messages of Gossip and OPPI (small-world graph)圖9 Gossip和OPPI的消息數(shù)比較(小世界網(wǎng)絡(luò)圖)
為了觀察節(jié)點(diǎn)度數(shù)k對消息數(shù)的影響,圖10對節(jié)點(diǎn)個數(shù)為1 000的情況下,在不同節(jié)點(diǎn)度數(shù)k下,Gossip和OPPI的消息數(shù)進(jìn)行了比較.為了觀察網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)對消息數(shù)的影響,圖11對節(jié)點(diǎn)個數(shù)為1 000的情況下,在不同網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)下,Gossip和OPPI的消息數(shù)進(jìn)行了比較.
Fig. 10 Comparison of number of messages of Gossip and OPPI when the number of nodes is 1 000 and k is set to a different value圖10 節(jié)點(diǎn)數(shù)為1 000且k取不同值時Gossip和OPPI的消息數(shù)對比
Fig. 11 Comparison of number of messages of Gossip and OPPI when the number of nodes is 1 000 and the topology is different圖11 節(jié)點(diǎn)數(shù)為1 000且在不同拓?fù)浣Y(jié)構(gòu)下Gossip和OPPI的消息數(shù)對比
實(shí)驗(yàn)結(jié)果表明:基于Gossip的傳播機(jī)制和基于OPPI的傳播機(jī)制所產(chǎn)生的消息數(shù)都隨著節(jié)點(diǎn)個數(shù)的增加而近似線性增長;節(jié)點(diǎn)度數(shù)k和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)改變對這2種傳播機(jī)制所產(chǎn)生的消息數(shù)幾乎沒有影響;在節(jié)點(diǎn)個數(shù)、節(jié)點(diǎn)度數(shù)k和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)都相同的情況下,相比于基于Gossip的傳播機(jī)制,OPPI傳播過程所產(chǎn)生的消息數(shù)減少了99%~99.1%.這是因?yàn)椋篏ossip協(xié)議中,節(jié)點(diǎn)會定期隨機(jī)選取鄰居節(jié)點(diǎn)轉(zhuǎn)發(fā)消息,而收到消息的節(jié)點(diǎn)也會重復(fù)該步驟,因此就不可避免地存在消息重復(fù)發(fā)送給同一節(jié)點(diǎn)的情況,造成了消息的冗余,而且,由于是定期發(fā)送,因此,即使收到了消息的節(jié)點(diǎn)還會反復(fù)收到重復(fù)消息,加重了消息的冗余.OPPI產(chǎn)生的消息數(shù)為O(n),而Gossip產(chǎn)生的消息數(shù)為O(n2),因而,相比于OPPI,基于Gossip的傳播機(jī)制在網(wǎng)絡(luò)中會產(chǎn)生大量的通信消息.
2) 傳播延遲
為了觀察節(jié)點(diǎn)個數(shù)對傳播延遲的影響,圖12~14對網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)分別為隨機(jī)圖、無尺度BA圖和小世界網(wǎng)絡(luò)圖時,在不同節(jié)點(diǎn)個數(shù)下,Gossip和OPPI的傳播延遲進(jìn)行了比較.
Fig. 12 Comparison of propagation delay of Gossip and OPPI (random graph)圖12 Gossip和OPPI的傳播延遲比較(隨機(jī)圖)
Fig. 13 Comparison of propagation delay of Gossip and OPPI (scale-free BA graph)圖13 Gossip和OPPI的傳播延遲比較(無尺度BA圖)
Fig. 14 Comparison of propagation delay of Gossip and OPPI (small-world graph)圖14 Gossip和OPPI的傳播延遲比較(小世界網(wǎng)絡(luò)圖)
為了觀察節(jié)點(diǎn)度數(shù)k對傳播延遲的影響,圖15對節(jié)點(diǎn)個數(shù)為1 000的情況下,在不同節(jié)點(diǎn)度數(shù)k下,Gossip和OPPI的消息數(shù)進(jìn)行了比較.為了觀察網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)對傳播延遲的影響,圖16對節(jié)點(diǎn)個數(shù)為1 000的情況下,在不同網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)下,Gossip和OPPI的傳播延遲進(jìn)行了比較.
Fig. 15 Comparison of propagation delay of Gossip and OPPI when the number of nodes is 1 000 and k is set to a different value圖15 節(jié)點(diǎn)數(shù)為1 000且k取不同值時Gossip和OPPI的傳播延遲對比
Fig. 16 Comparison of propagation delay of Gossip and OPPI when the number of nodes is 1 000 and the topology is different圖16 節(jié)點(diǎn)數(shù)為1 000且在不同拓?fù)浣Y(jié)構(gòu)下Gossip和OPPI的傳播延遲對比
實(shí)驗(yàn)結(jié)果表明:隨著節(jié)點(diǎn)個數(shù)的增加,Gossip和OPPI的傳播延遲近似線性增長;節(jié)點(diǎn)度數(shù)k和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的改變對Gossip和OPPI的傳播延遲幾乎沒有影響;在節(jié)點(diǎn)個數(shù)、節(jié)點(diǎn)度數(shù)k和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)相同的情況下,相比于基于Gossip的傳播機(jī)制,OPPI的傳播延遲減少了99.4%~99.98%.這是因?yàn)椋篏ossip和OPPI的傳播延遲只和節(jié)點(diǎn)個數(shù)相關(guān),并且OPPI中交易和區(qū)塊是沿著具有最小傳播延遲的傳播路徑傳播,而Gossip在傳播過程中隨機(jī)選取鄰居節(jié)點(diǎn)進(jìn)行轉(zhuǎn)發(fā)并產(chǎn)生環(huán)路,從而增加了傳播延遲.
以上實(shí)驗(yàn)結(jié)果表明:Gossip和OPPI的消息數(shù)及傳播延遲都和節(jié)點(diǎn)個數(shù)密切相關(guān);相比于Gossip,OPPI對通信消息數(shù)和傳播延遲減少的效果顯著,較好地解決了基于Gossip的傳播方式產(chǎn)生的通信消息數(shù)過多并且傳播延遲過長的問題,在傳播效率和傳播開銷之間達(dá)到了較好的平衡.
本文首先分析了區(qū)塊鏈中區(qū)塊的傳播速度和區(qū)塊鏈分叉概率的定量關(guān)系,并對已有的通過優(yōu)化區(qū)塊鏈網(wǎng)絡(luò)中交易和區(qū)塊的傳播方法以減少分叉概率的研究進(jìn)行了分析,總結(jié)了已有研究存在的3個問題:1)只減少相鄰節(jié)點(diǎn)間的傳播延遲或傳播的路由跳數(shù),并未減少總傳播延遲;2)傳播過程產(chǎn)生大量的通信消息;3)基于傳播路徑上的節(jié)點(diǎn)都會繼續(xù)傳播交易和區(qū)塊的假設(shè).針對這些問題,提出了區(qū)塊鏈網(wǎng)絡(luò)中最優(yōu)傳播路徑和激勵(OPPI)相結(jié)合的傳播機(jī)制.實(shí)驗(yàn)結(jié)果表明:和已有的基于Gossip的區(qū)塊鏈網(wǎng)絡(luò)傳播機(jī)制相比,OPPI大幅度減少了消息數(shù)和傳播延遲.其中,相比于Gossip,OPPI的消息數(shù)減少了99%~99.1%,OPPI的傳播延遲減少了99.4%~99.98%.下一步將對傳播路徑上的某些節(jié)點(diǎn)不愿意繼續(xù)傳播所接收到的交易和區(qū)塊的情況進(jìn)行模擬,比較該情況下Gossip和OPPI的傳播覆蓋率,并在真實(shí)區(qū)塊鏈網(wǎng)絡(luò)上對Gossip和OPPI的通信消息數(shù)、傳播延遲和傳播覆蓋率進(jìn)行比較實(shí)驗(yàn).