劉玉紅,楊亮,樸春慧,張志國(guó)
(1.石家莊鐵道大學(xué)信息科學(xué)與技術(shù)學(xué)院,河北 石家莊 050043 ;2.河北省電磁環(huán)境效應(yīng)與信息處理重點(diǎn)實(shí)驗(yàn)室,河北 石家莊 050043;3.石家莊鐵道大學(xué)土木工程學(xué)院,河北 石家莊 050043)
在鐵路工程施工過(guò)程中,大量帶有感知功能的物聯(lián)網(wǎng)設(shè)備被部署到施工項(xiàng)目?jī)?nèi)的不同結(jié)構(gòu)物上,這些設(shè)備產(chǎn)生的數(shù)據(jù)具有多源異構(gòu)、規(guī)模龐大、時(shí)空關(guān)聯(lián)、冗余度高、多維標(biāo)量等特征[1]。這些數(shù)據(jù)經(jīng)過(guò)整合、共享,可實(shí)現(xiàn)鐵路建設(shè)過(guò)程安全管理和事故后的責(zé)任追溯等。但由于傳統(tǒng)的信息化平臺(tái)采用了中心式的云存儲(chǔ)方式,該方式使數(shù)據(jù)脫離了施工參與方的物理控制,無(wú)法保證數(shù)據(jù)的安全性,存在篡改風(fēng)險(xiǎn),使鐵路施工各參與方無(wú)法對(duì)中心式存儲(chǔ)下的監(jiān)測(cè)數(shù)據(jù)達(dá)成共識(shí),且在該模式下無(wú)法確保共享過(guò)程中數(shù)據(jù)的有效性以及在不同系統(tǒng)傳輸過(guò)程中數(shù)據(jù)的一致性[2-4]。
區(qū)塊鏈技術(shù)起源于文獻(xiàn)[5],是一種由多方共同維護(hù),使用密碼學(xué)保證傳輸和訪問(wèn)安全,能夠?qū)崿F(xiàn)數(shù)據(jù)一致存儲(chǔ)、難以篡改、防止抵賴的記賬技術(shù),也稱為分布式賬本技術(shù),它構(gòu)建了數(shù)據(jù)安全保護(hù)機(jī)制,實(shí)現(xiàn)數(shù)據(jù)所有權(quán)與使用權(quán)的分離,按智能合約進(jìn)行數(shù)據(jù)存儲(chǔ)與查詢[6-7]。在鐵路建設(shè)領(lǐng)域內(nèi),有學(xué)者結(jié)合區(qū)塊鏈進(jìn)行研究,如代明睿[8]研究了基于區(qū)塊鏈的鐵路數(shù)據(jù)匯集共享過(guò)程中的關(guān)鍵技術(shù),分析了鐵路數(shù)據(jù)匯集共享體系架構(gòu)的安全特性,提出了基于區(qū)塊鏈的鐵路數(shù)據(jù)匯集共享體系架構(gòu)。在鐵路建設(shè)方面的區(qū)塊鏈技術(shù)的應(yīng)用也有一些實(shí)際案例,如2020 年,區(qū)塊鏈技術(shù)應(yīng)用于雄安新區(qū)工程質(zhì)量監(jiān)督管理[9]。綜上所述,將區(qū)塊鏈應(yīng)用于鐵路工程建設(shè)中,已有一些理論研究與實(shí)際應(yīng)用。
基于上述背景,針對(duì)鐵路工程施工中監(jiān)測(cè)數(shù)據(jù)的安全問(wèn)題以及保證監(jiān)測(cè)數(shù)據(jù)真實(shí)性,本文提出一種基于區(qū)塊鏈的鐵路工程施工安全監(jiān)測(cè)數(shù)據(jù)共享模型,主要貢獻(xiàn)如下。
1) 提出一種基于區(qū)塊鏈的鐵路工程施工安全監(jiān)測(cè)數(shù)據(jù)共享模型,利用智能合約自動(dòng)執(zhí)行的特點(diǎn)保證監(jiān)測(cè)數(shù)據(jù)上鏈過(guò)程的透明性,使業(yè)主單位、施工單位和監(jiān)管單位認(rèn)可鏈上數(shù)據(jù)的真實(shí)性。采用區(qū)塊鏈存儲(chǔ)監(jiān)測(cè)數(shù)據(jù)的關(guān)鍵索引信息、數(shù)據(jù)中心存儲(chǔ)原始監(jiān)測(cè)數(shù)據(jù)的方式實(shí)現(xiàn)監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)。
2) 設(shè)計(jì)了監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)與查詢智能合約,使施工單位通過(guò)智能合約將監(jiān)測(cè)數(shù)據(jù)的特征值、異常數(shù)據(jù)等上鏈存儲(chǔ),監(jiān)管單位和業(yè)主單位通過(guò)查詢智能合約查看鏈上數(shù)據(jù)。
3) 針對(duì)鐵路施工過(guò)程中監(jiān)測(cè)數(shù)據(jù)的流式特征導(dǎo)致的數(shù)據(jù)上鏈過(guò)程中產(chǎn)生的網(wǎng)絡(luò)擁塞問(wèn)題,提出了一種基于信譽(yù)積分的實(shí)用拜占庭容錯(cuò)(RPBFT,reputation-based practical Byzantine fault tolerance)算法。通過(guò)簡(jiǎn)化一致性協(xié)議的方式,將協(xié)議的時(shí)間復(fù)雜度由O(n2)降為O(n);通過(guò)加入基于節(jié)點(diǎn)行為的獎(jiǎng)勵(lì)機(jī)制,降低拜占庭節(jié)點(diǎn)作為主節(jié)點(diǎn)的概率。
4) 通過(guò)攻擊可能性和攻擊成功概率的量化分析,表明智能合約技術(shù)為鏈上監(jiān)測(cè)數(shù)據(jù)提供了防篡改性。利用Hyperledger Caliper 進(jìn)行對(duì)比實(shí)驗(yàn),證明RPBFT 算法在共識(shí)過(guò)程中的時(shí)延較PBFT 算法降低約30%,吞吐量提升約170%。與同類問(wèn)題的對(duì)比分析表明,本文模型在共識(shí)效率與共享速度方面優(yōu)勢(shì)明顯。
區(qū)塊鏈按照中心化程度可以分為公有鏈、聯(lián)盟鏈和私有鏈。公有鏈由所有參與成員維護(hù),具有完全去中心化的特點(diǎn);聯(lián)盟鏈由一些機(jī)構(gòu)發(fā)起,只允許該機(jī)構(gòu)組織內(nèi)部成員參加,具有部分中心化的特點(diǎn);私有鏈的寫(xiě)入權(quán)限只受一個(gè)實(shí)體組織控制,為了追求性能已漸漸演變成中心化的模式[10]??紤]到鐵路工程施工中的監(jiān)測(cè)數(shù)據(jù)共享區(qū)塊鏈參與節(jié)點(diǎn)是多個(gè)參建實(shí)體或其他機(jī)構(gòu)組成的組織或聯(lián)盟,并未面向大眾完全公開(kāi),且加入?yún)^(qū)塊鏈的參與者需要經(jīng)過(guò)主管部門(mén)的審核,故聯(lián)盟鏈?zhǔn)亲罴堰x擇。
基于區(qū)塊鏈的鐵路工程施工安全監(jiān)測(cè)數(shù)據(jù)共享模型如圖1 所示,模型中區(qū)塊鏈節(jié)點(diǎn)主要分為業(yè)主單位、施工單位和監(jiān)管單位。
圖1 基于區(qū)塊鏈的鐵路工程施工安全監(jiān)測(cè)數(shù)據(jù)共享模型
業(yè)主單位。業(yè)主單位是鐵路工程施工的投資主體,是鐵路工程施工的發(fā)起者,也是施工過(guò)程的管理者。
施工單位。在鐵路工程施工過(guò)程中施工單位廣義上包括現(xiàn)場(chǎng)負(fù)責(zé)施工的單位、監(jiān)測(cè)單位等與鐵路建設(shè)相關(guān)的單位,本文將上述單位統(tǒng)稱為施工單位。施工單位是鐵路項(xiàng)目的總承包單位,也是鐵路項(xiàng)目施工過(guò)程的主要負(fù)責(zé)單位。施工單位負(fù)責(zé)在項(xiàng)目中的結(jié)構(gòu)體不同部位安裝多種物聯(lián)網(wǎng)感知設(shè)備,物聯(lián)網(wǎng)感知設(shè)備的數(shù)量根據(jù)結(jié)構(gòu)體類型、體積等的不同而變化。
監(jiān)管單位。監(jiān)管單位包括負(fù)責(zé)鐵路施工項(xiàng)目建設(shè)監(jiān)管等工作的監(jiān)理單位、地區(qū)鐵路監(jiān)督管理局以及鐵路行業(yè)信息化工作的主管部門(mén)。本文提出的監(jiān)測(cè)數(shù)據(jù)共享聯(lián)盟鏈?zhǔn)怯杀O(jiān)管單位負(fù)責(zé)發(fā)起與維護(hù)的;當(dāng)鐵路項(xiàng)目施工過(guò)程中出現(xiàn)安全事故時(shí),監(jiān)管單位根據(jù)該項(xiàng)目施工監(jiān)測(cè)數(shù)據(jù)進(jìn)行責(zé)任追溯。
模型結(jié)構(gòu)主要包括智能合約、區(qū)塊鏈網(wǎng)絡(luò)、數(shù)據(jù)中心和物聯(lián)網(wǎng)設(shè)備。
智能合約保存在區(qū)塊鏈上,鏈內(nèi)各節(jié)點(diǎn)可以查看并執(zhí)行智能合約指令,還可以查看節(jié)點(diǎn)與智能合約交互日志[11]。通過(guò)智能合約,施工單位可以將數(shù)據(jù)存儲(chǔ)在去中心化的區(qū)塊鏈網(wǎng)絡(luò)中,監(jiān)管單位和業(yè)主單位可以監(jiān)測(cè)數(shù)據(jù)進(jìn)行查詢。
區(qū)塊鏈網(wǎng)絡(luò)主要包括節(jié)點(diǎn)網(wǎng)絡(luò)和共識(shí)機(jī)制,在節(jié)點(diǎn)網(wǎng)絡(luò)中的節(jié)點(diǎn)維護(hù)自己的分布式賬本。節(jié)點(diǎn)網(wǎng)絡(luò)主要包括共識(shí)節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn),共識(shí)節(jié)點(diǎn)負(fù)責(zé)驗(yàn)證數(shù)據(jù)存儲(chǔ)或查詢交易并執(zhí)行共識(shí)算法,還在自身分布式賬本中記錄存儲(chǔ)的數(shù)據(jù);驗(yàn)證節(jié)點(diǎn)負(fù)責(zé)驗(yàn)證數(shù)據(jù)存儲(chǔ)或查詢交易。
數(shù)據(jù)中心用于存儲(chǔ)鐵路施工現(xiàn)場(chǎng)傳輸?shù)脑急O(jiān)測(cè)數(shù)據(jù),對(duì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行轉(zhuǎn)換、處理、特征提取等操作,最后將特征值、異常值等構(gòu)成的監(jiān)測(cè)數(shù)據(jù)索引與摘要傳輸給監(jiān)管單位。
物聯(lián)網(wǎng)設(shè)備指鐵路施工現(xiàn)場(chǎng)的監(jiān)測(cè)數(shù)據(jù)收集與傳輸設(shè)備,由于傳感器本身不具備數(shù)據(jù)的遠(yuǎn)程傳輸能力,因此需要借助數(shù)據(jù)傳輸單元(DTU,data transfer unit)進(jìn)行數(shù)據(jù)的遠(yuǎn)程傳輸。
監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)流程如圖2 所示。在鐵路施工現(xiàn)場(chǎng),物聯(lián)網(wǎng)設(shè)備監(jiān)測(cè)到數(shù)據(jù)后傳輸至DTU,DTU通過(guò)運(yùn)營(yíng)商網(wǎng)絡(luò)將監(jiān)測(cè)數(shù)據(jù)以二進(jìn)制流的形式分別傳輸至數(shù)據(jù)中心和施工單位。1) 監(jiān)測(cè)數(shù)據(jù)傳輸至數(shù)據(jù)中心后,由于監(jiān)測(cè)數(shù)據(jù)是實(shí)時(shí)采集的,存在噪聲、異常值和缺失值等問(wèn)題,因此需要在數(shù)據(jù)中心進(jìn)行數(shù)據(jù)處理;處理完成后將監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)中心。2) 監(jiān)測(cè)數(shù)據(jù)傳輸至施工單位后,在施工單位的信息化平臺(tái)使用與數(shù)據(jù)中心相同的方法對(duì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行處理,由于區(qū)塊鏈的鏈上狀態(tài)數(shù)據(jù)庫(kù)不適合存儲(chǔ)大量數(shù)據(jù),故需生成監(jiān)測(cè)數(shù)據(jù)的索引與摘要,其中包括了監(jiān)測(cè)數(shù)據(jù)的特征值、異常值等信息;然后通過(guò)智能合約將數(shù)據(jù)索引與摘要存儲(chǔ)至區(qū)塊鏈平臺(tái)。施工單位出于成本考慮,不會(huì)在本地服務(wù)器中存儲(chǔ)大量監(jiān)測(cè)數(shù)據(jù),因此當(dāng)上傳數(shù)據(jù)完成后,便將數(shù)據(jù)刪除,繼續(xù)接收下一階段監(jiān)測(cè)數(shù)據(jù)。
圖2 監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)流程
監(jiān)測(cè)數(shù)據(jù)查詢流程如圖3 所示。當(dāng)鐵路項(xiàng)目在施工過(guò)程中出現(xiàn)安全事故時(shí),監(jiān)管單位可以使用存儲(chǔ)于數(shù)據(jù)中心的監(jiān)測(cè)數(shù)據(jù)作為責(zé)任追溯的依據(jù)之一。但由于數(shù)據(jù)中心數(shù)據(jù)存在被篡改的風(fēng)險(xiǎn),因此需要與區(qū)塊鏈中的監(jiān)測(cè)數(shù)據(jù)進(jìn)行驗(yàn)證,確定監(jiān)測(cè)數(shù)據(jù)的真實(shí)性。當(dāng)監(jiān)管單位提出查詢請(qǐng)求時(shí),判斷查詢請(qǐng)求是否需要調(diào)取區(qū)塊鏈中的數(shù)據(jù)。1) 當(dāng)請(qǐng)求消息發(fā)送至數(shù)據(jù)中心時(shí),數(shù)據(jù)中心根據(jù)請(qǐng)求信息中的項(xiàng)目編號(hào)提取相應(yīng)監(jiān)測(cè)數(shù)據(jù)傳輸至監(jiān)管單位;2) 當(dāng)請(qǐng)求消息發(fā)送至區(qū)塊鏈時(shí),智能合約根據(jù)請(qǐng)求信息中的項(xiàng)目編號(hào)將相應(yīng)的監(jiān)測(cè)數(shù)據(jù)索引提取并發(fā)送給監(jiān)管單位。
圖3 監(jiān)測(cè)數(shù)據(jù)查詢流程
在本文方案中,參與方將通過(guò)聯(lián)盟區(qū)塊鏈的遠(yuǎn)程過(guò)程調(diào)用(RPC,remote procedure call)接口實(shí)現(xiàn)監(jiān)測(cè)數(shù)據(jù)索引的存儲(chǔ)與查詢。據(jù)此本文設(shè)計(jì)了監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)合約和監(jiān)測(cè)數(shù)據(jù)查詢合約。
監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)合約用于將原始監(jiān)測(cè)數(shù)據(jù)索引存儲(chǔ)到區(qū)塊鏈中。當(dāng)上傳原始監(jiān)測(cè)數(shù)據(jù)索引時(shí),通過(guò)區(qū)塊鏈向外部提供的RPC 接口發(fā)送索引相關(guān)數(shù)據(jù);監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)合約監(jiān)測(cè)到有數(shù)據(jù)傳輸時(shí),先對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行檢查,通過(guò)后其方可進(jìn)入聯(lián)盟鏈中,作為新區(qū)塊的區(qū)塊體,并進(jìn)行下一步的共識(shí)過(guò)程。監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)合約設(shè)計(jì)如算法1 所示。
算法1監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)合約
輸入監(jiān)測(cè)數(shù)據(jù)索引MD
輸出存儲(chǔ)成功Req
監(jiān)測(cè)數(shù)據(jù)查詢合約為區(qū)塊鏈參與方提供查詢存儲(chǔ)在聯(lián)盟鏈的監(jiān)測(cè)數(shù)據(jù)索引功能。當(dāng)參與方向聯(lián)盟鏈提出查詢請(qǐng)求時(shí),區(qū)塊鏈系統(tǒng)構(gòu)造查詢請(qǐng)求信息R,如式(1)所示;將R發(fā)送至聯(lián)盟鏈節(jié)點(diǎn),等待查詢結(jié)果。被查詢的監(jiān)測(cè)數(shù)據(jù)索引會(huì)被參與方的公鑰加密,加密后的結(jié)果返回給參與方,參與方使用自己的私鑰解密即可得到真實(shí)監(jiān)測(cè)數(shù)據(jù)索引。
其中,SHARE 表示該命令的請(qǐng)求類型為查詢請(qǐng)求,proid 是全局不會(huì)重復(fù)的項(xiàng)目編號(hào),Pub(key)是參與方的公鑰。為了提升查詢效率,本文方案的監(jiān)管方所處的節(jié)點(diǎn)會(huì)維護(hù)一張哈希表LIST,LIST 用來(lái)記錄監(jiān)測(cè)數(shù)據(jù)索引在聯(lián)盟鏈中的位置,LIST 的結(jié)構(gòu)如式(2)所示。
其中,proid 是全局不會(huì)重復(fù)的項(xiàng)目編號(hào),TimeStamp是項(xiàng)目編號(hào)所對(duì)應(yīng)項(xiàng)目的最新監(jiān)測(cè)數(shù)據(jù)索引上傳時(shí)間,Blockid 是項(xiàng)目編號(hào)所對(duì)應(yīng)項(xiàng)目的監(jiān)測(cè)數(shù)據(jù)索引所處區(qū)塊編號(hào)。監(jiān)測(cè)數(shù)據(jù)查詢合約設(shè)計(jì)如算法2所示。
算法2監(jiān)測(cè)數(shù)據(jù)查詢合約
輸入查詢請(qǐng)求R
輸出查詢結(jié)果result
共識(shí)機(jī)制是區(qū)塊鏈的核心技術(shù),它確定新區(qū)塊是否經(jīng)過(guò)驗(yàn)證以及誰(shuí)保留記錄,影響著整個(gè)系統(tǒng)的安全性和可靠性[12]。本文方案采用聯(lián)盟鏈,因此選擇Hyperledger Fabric 作為區(qū)塊鏈底層框架,該框架采用了PBFT 算法作為共識(shí)算法,但PBFT 算法存在以下問(wèn)題。
1) 主節(jié)點(diǎn)選擇問(wèn)題。PBFT 算法的各節(jié)點(diǎn)成為主節(jié)點(diǎn)的概率是相同的,它們輪流成為主節(jié)點(diǎn),承擔(dān)出塊任務(wù)。按照上述方式來(lái)選擇主節(jié)點(diǎn),會(huì)讓一些性能較低或共識(shí)過(guò)程中表現(xiàn)較差的節(jié)點(diǎn)成為主節(jié)點(diǎn),這樣會(huì)影響系統(tǒng)中的出塊效率,降低系統(tǒng)性能。
2) 通信量問(wèn)題。在PBFT 算法的一致性協(xié)議準(zhǔn)備階段和提交階段,每個(gè)從節(jié)點(diǎn)都會(huì)向所有節(jié)點(diǎn)廣播信息,使共識(shí)過(guò)程的通信量達(dá)到O(n2)。造成節(jié)點(diǎn)通信次數(shù)隨節(jié)點(diǎn)數(shù)量增加而呈指數(shù)級(jí)增長(zhǎng),進(jìn)而導(dǎo)致共識(shí)效率下降,嚴(yán)重影響了系統(tǒng)擴(kuò)展性。
針對(duì)上述問(wèn)題,文獻(xiàn)[13]在共識(shí)策略方面改進(jìn)了PBFT 算法,通過(guò)劃分節(jié)點(diǎn)簇的方式保證算法的協(xié)調(diào)性和安全性。文獻(xiàn)[14]在節(jié)點(diǎn)選擇方面改進(jìn)了PBFT 算法,根據(jù)節(jié)點(diǎn)職責(zé)劃分多個(gè)節(jié)點(diǎn)集合,使其適用于節(jié)點(diǎn)數(shù)量不停變化的動(dòng)態(tài)區(qū)塊鏈網(wǎng)絡(luò)中。文獻(xiàn)[15]在方法創(chuàng)新方面改進(jìn)了PBFT 算法,利用K-medoids 對(duì)節(jié)點(diǎn)進(jìn)行聚類和層次劃分,使其適用于較大規(guī)模共識(shí)節(jié)點(diǎn)參與的共識(shí)過(guò)程。文獻(xiàn)[16]在區(qū)塊結(jié)構(gòu)方面改進(jìn)了PBFT 算法,通過(guò)設(shè)計(jì)多主節(jié)點(diǎn)的方式,一定程度上降低了惡意節(jié)點(diǎn)作為主節(jié)點(diǎn)時(shí)的高時(shí)延問(wèn)題。上述文獻(xiàn)從不同角度對(duì)PBFT 算法進(jìn)行了改進(jìn),以期降低算法復(fù)雜度和通信量,提高共識(shí)效率,但其針對(duì)的數(shù)據(jù)類型均屬于靜態(tài)數(shù)據(jù),對(duì)于鐵路施工項(xiàng)目安全監(jiān)測(cè)中的流式數(shù)據(jù)并不適用,且在改進(jìn)算法時(shí)均插入了節(jié)點(diǎn)選擇算法,在一定程度上增加了算法的復(fù)雜度,存在降低共識(shí)效率的潛在風(fēng)險(xiǎn)。
因此,本文結(jié)合鐵路工程施工安全監(jiān)測(cè)數(shù)據(jù)共享應(yīng)用場(chǎng)景,提出了RPBFT 算法,該算法從以下兩方面對(duì)PBFT 算法進(jìn)行了改進(jìn)。
1) 加入了基于節(jié)點(diǎn)行為的獎(jiǎng)勵(lì)機(jī)制,獎(jiǎng)勵(lì)或懲罰將通過(guò)節(jié)點(diǎn)得分體現(xiàn),RPBFT 根據(jù)得分來(lái)選擇更加值得信任的節(jié)點(diǎn)作為主節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn),以達(dá)到提升算法效率的目的。
2) 由于聯(lián)盟鏈中大部分節(jié)點(diǎn)都是誠(chéng)實(shí)節(jié)點(diǎn),因此在不存在拜占庭節(jié)點(diǎn)的情況下通過(guò)簡(jiǎn)化PBFT 一致性協(xié)議,以達(dá)到降低節(jié)點(diǎn)間的通信量,減少系統(tǒng)開(kāi)銷,減輕帶寬壓力的目的。
1) 節(jié)點(diǎn)信譽(yù)分?jǐn)?shù)計(jì)算在初始階段,各個(gè)節(jié)點(diǎn)的信譽(yù)分?jǐn)?shù)設(shè)置為100,分?jǐn)?shù)根據(jù)節(jié)點(diǎn)在共識(shí)過(guò)程中的行為改變,每完成一輪共識(shí),各個(gè)節(jié)點(diǎn)的分?jǐn)?shù)將根據(jù)該節(jié)點(diǎn)在此輪共識(shí)中的表現(xiàn)進(jìn)行加分或減分。成功參與本輪共識(shí)的節(jié)點(diǎn)加分;在本輪共識(shí)中作惡或者失效的節(jié)點(diǎn)減分。對(duì)節(jié)點(diǎn)行為懲罰嚴(yán)重程度上,方案允許節(jié)點(diǎn)偶發(fā)失效,即當(dāng)節(jié)點(diǎn)失效時(shí),減分較少;但對(duì)節(jié)點(diǎn)作惡的行為絕對(duì)不允許,若節(jié)點(diǎn)作惡則進(jìn)行嚴(yán)厲懲罰,扣除該節(jié)點(diǎn)大部分分?jǐn)?shù),使其短時(shí)間內(nèi)難以參與共識(shí)過(guò)程,杜絕其連續(xù)作惡情況發(fā)生。本文方案對(duì)獎(jiǎng)懲的相關(guān)系數(shù)按照2 的指數(shù)級(jí)別設(shè)置,分?jǐn)?shù)的計(jì)算如式(3)所示。
其中,Score 表示節(jié)點(diǎn)當(dāng)前的分?jǐn)?shù);S表示節(jié)點(diǎn)是否成功參與本輪共識(shí),若成功參與,則S=1,否則S=0;F表示節(jié)點(diǎn)在本輪共識(shí)中是否出現(xiàn)失效情況,若出現(xiàn),則F=1,否則F=0;E表示節(jié)點(diǎn)在本輪共識(shí)中是否出現(xiàn)作惡情況,若出現(xiàn),則E=1,否則E=0。
2) 基于信譽(yù)分?jǐn)?shù)的主節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)選取方案
主節(jié)點(diǎn)選取。本文方案的主節(jié)點(diǎn)選取方式采用基于信譽(yù)分?jǐn)?shù)的選取方式,選取分?jǐn)?shù)最高的節(jié)點(diǎn)為主節(jié)點(diǎn),當(dāng)主節(jié)點(diǎn)失效或作惡時(shí),根據(jù)視圖變更協(xié)議選擇分?jǐn)?shù)排名第二的節(jié)點(diǎn)作為主節(jié)點(diǎn),并開(kāi)始新一輪共識(shí)。
共識(shí)節(jié)點(diǎn)選取。本文選擇的區(qū)塊鏈類型為聯(lián)盟鏈,參與其中的節(jié)點(diǎn)已經(jīng)通過(guò)了身份驗(yàn)證,有力保證了節(jié)點(diǎn)的誠(chéng)實(shí)性。使用分?jǐn)?shù)的多少作為節(jié)點(diǎn)可靠性排名的依據(jù),進(jìn)一步確保了節(jié)點(diǎn)的可靠性。因此為提升共識(shí)效率,本文方案選取部分分?jǐn)?shù)較高的節(jié)點(diǎn)作為共識(shí)節(jié)點(diǎn),其他節(jié)點(diǎn)在共識(shí)結(jié)束后同步共識(shí)結(jié)果。
PBFT 算法要求所有節(jié)點(diǎn)處于同一種狀態(tài)下和行為一致性。達(dá)到此目的的方式是運(yùn)行3 類基本協(xié)議:一致性協(xié)議、視圖更換協(xié)議和檢查點(diǎn)協(xié)議。一致性協(xié)議通過(guò)預(yù)準(zhǔn)備、準(zhǔn)備、確認(rèn)3 個(gè)階段保證區(qū)塊鏈內(nèi)全部節(jié)點(diǎn)的數(shù)據(jù)一致性;在共識(shí)過(guò)程中主節(jié)點(diǎn)出現(xiàn)失效或作惡情況時(shí),會(huì)觸發(fā)視圖更換協(xié)議,選擇另一節(jié)點(diǎn)作為主節(jié)點(diǎn);檢查點(diǎn)協(xié)議將系統(tǒng)中的服務(wù)器同步到某一個(gè)相同狀態(tài),系統(tǒng)設(shè)置了checkpoint 時(shí)間點(diǎn),定期處理系統(tǒng)內(nèi)日志,節(jié)約網(wǎng)絡(luò)資源并糾正服務(wù)器狀態(tài)[17]。
1) 完整一致性協(xié)議分析
完整一致性協(xié)議定義了主節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)2 種節(jié)點(diǎn),在每一輪共識(shí)過(guò)程中,主節(jié)點(diǎn)只有一個(gè),共識(shí)節(jié)點(diǎn)有多個(gè)。主節(jié)點(diǎn)負(fù)責(zé)驗(yàn)證一段時(shí)間內(nèi)區(qū)塊鏈系統(tǒng)接收到準(zhǔn)備上鏈的數(shù)據(jù),驗(yàn)證通過(guò)后主節(jié)點(diǎn)將這些數(shù)據(jù)打包進(jìn)區(qū)塊并發(fā)起共識(shí)。完成一次完整的一致性協(xié)議需要3 個(gè)階段,其執(zhí)行過(guò)程如圖4 所示。
圖4 完整一致性協(xié)議執(zhí)行過(guò)程
圖4 中Client 表示客戶端,A0是主節(jié)點(diǎn),A1和A2是誠(chéng)實(shí)節(jié)點(diǎn),A3是拜占庭節(jié)點(diǎn),具體運(yùn)行過(guò)程如下。
預(yù)準(zhǔn)備階段(pre-prepare)。主節(jié)點(diǎn)將客戶端發(fā)來(lái)的請(qǐng)求生成預(yù)準(zhǔn)備消息,將其廣播給所有共識(shí)節(jié)點(diǎn)。消息格式為
準(zhǔn)備階段(prepare)。共識(shí)節(jié)點(diǎn)收到預(yù)準(zhǔn)備消息后,生成準(zhǔn)備消息并廣播,預(yù)準(zhǔn)備消息和準(zhǔn)備消息被同時(shí)寫(xiě)入自身日志文件,消息格式為
確認(rèn)階段(commit)。所有共識(shí)節(jié)點(diǎn)生成確認(rèn)消息,并廣播到網(wǎng)絡(luò)中的其他節(jié)點(diǎn),消息格式為
2) 簡(jiǎn)化一致性協(xié)議設(shè)計(jì)
在PBFT 一致性協(xié)議運(yùn)行過(guò)程中,完成了兩次復(fù)雜度為O(n2)的通信步驟,這是為了解決網(wǎng)絡(luò)中存在的拜占庭將軍問(wèn)題,使區(qū)塊鏈網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)能夠達(dá)成共識(shí)。RPBFT 中簡(jiǎn)化一致性協(xié)議將完整一致性協(xié)議的準(zhǔn)備階段進(jìn)行轉(zhuǎn)換,把共識(shí)節(jié)點(diǎn)“接收-發(fā)送-接收”的驗(yàn)證過(guò)程轉(zhuǎn)移至主節(jié)點(diǎn),由主節(jié)點(diǎn)判定所有共識(shí)節(jié)點(diǎn)的反饋信息是否正確,不需要共識(shí)節(jié)點(diǎn)再做判斷;另外,在選擇參與共識(shí)節(jié)點(diǎn)過(guò)程中,選擇節(jié)點(diǎn)數(shù)量超過(guò)全網(wǎng)節(jié)點(diǎn)數(shù)量的一半。簡(jiǎn)化一致性協(xié)議運(yùn)行的前提是當(dāng)前共識(shí)節(jié)點(diǎn)中不存在拜占庭節(jié)點(diǎn),使RPBFT 算法在完成復(fù)雜度為O(n)的共識(shí)操作后,區(qū)塊鏈網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)能夠達(dá)成共識(shí)。
簡(jiǎn)化一致性協(xié)議是基于文獻(xiàn)[18],并結(jié)合本文研究背景提出的一種一致性協(xié)議,其運(yùn)行過(guò)程如圖5 所示。
圖5 簡(jiǎn)化一致性協(xié)議運(yùn)行過(guò)程
圖5 中Client 為客戶端,A0為主節(jié)點(diǎn),A1、A2為共識(shí)節(jié)點(diǎn),A3為非共識(shí)節(jié)點(diǎn),簡(jiǎn)化一致性協(xié)議具體運(yùn)行過(guò)程如下。
預(yù)準(zhǔn)備階段(pre-prepare)。在此階段,主節(jié)點(diǎn)會(huì)為打包信息分配一個(gè)序列號(hào)n,然后將序列號(hào)與打包信息共同廣播至全網(wǎng),消息格式為
反饋階段(feedback)。主節(jié)點(diǎn)發(fā)送的預(yù)準(zhǔn)備消息被共識(shí)節(jié)點(diǎn)接收后,共識(shí)節(jié)點(diǎn)驗(yàn)證預(yù)準(zhǔn)備消息中的交易信息及其信譽(yù)積分與本地積分是否相同,若認(rèn)可該消息且相同,則生成反饋消息并向主節(jié)點(diǎn)發(fā)送;否則不發(fā)送反饋消息,反饋消息格式為
①查看預(yù)準(zhǔn)備消息的簽名是否正確。
②摘要內(nèi)容與d是否一致。
③查看視圖編號(hào),確定消息是否來(lái)自主節(jié)點(diǎn)。
④該節(jié)點(diǎn)是否接收過(guò)相同視圖編號(hào)v發(fā)送的相同信息編號(hào)n的消息。
⑤消息序號(hào)是否在一定區(qū)間中。此處設(shè)定一定區(qū)間一方面可以方便清除多余的日志信息,另一方面可以防止拜占庭主節(jié)點(diǎn)使用大量序列號(hào),消耗序列號(hào)空間。
驗(yàn)證階段(verify)。當(dāng)主節(jié)點(diǎn)接收到所有共識(shí)節(jié)點(diǎn)的反饋消息后,會(huì)驗(yàn)證接收到的所有反饋消息是否相同,若全部相同則生成驗(yàn)證消息并廣播,消息格式為
RPBFT 是為鐵路施工項(xiàng)目安全監(jiān)測(cè)數(shù)據(jù)共享聯(lián)盟鏈設(shè)計(jì)的共識(shí)算法,在此背景下,參與聯(lián)盟鏈的節(jié)點(diǎn)絕大多數(shù)都是誠(chéng)實(shí)節(jié)點(diǎn),因此RPBFT 在絕大部分時(shí)間內(nèi)都執(zhí)行簡(jiǎn)化一致性協(xié)議,縮短了共識(shí)時(shí)間,使其能夠適應(yīng)鐵路施工項(xiàng)目安全監(jiān)測(cè)的流式數(shù)據(jù)上鏈速度。通過(guò)引入獎(jiǎng)勵(lì)機(jī)制,選擇信譽(yù)分?jǐn)?shù)最高的節(jié)點(diǎn)作為主節(jié)點(diǎn),極大地降低了主節(jié)點(diǎn)失效或作惡的概率,保證了共識(shí)過(guò)程的穩(wěn)定;選擇部分節(jié)點(diǎn)參與共識(shí)的方法,減低了共識(shí)時(shí)間,提高了共識(shí)效率。
RPBFT 算法在PBFT 算法基礎(chǔ)上增加了基于節(jié)點(diǎn)行為的獎(jiǎng)勵(lì)機(jī)制,設(shè)計(jì)了以信譽(yù)分?jǐn)?shù)為指標(biāo)的主節(jié)點(diǎn)選擇方案,極大地降低了選擇拜占庭節(jié)點(diǎn)作為主節(jié)點(diǎn)的概率;并簡(jiǎn)化了一致性協(xié)議的運(yùn)行流程,減少了節(jié)點(diǎn)間的通信量,節(jié)省了通信開(kāi)銷。RPBFT 算法的流程如圖6 所示。RPBFT 算法的具體執(zhí)行過(guò)程如下。
圖6 RPBFT 算法流程
節(jié)點(diǎn)初始化。使用整數(shù)0~N-1 對(duì)節(jié)點(diǎn)進(jìn)行編號(hào)(N為節(jié)點(diǎn)總數(shù)),將各節(jié)點(diǎn)信譽(yù)值設(shè)為100。隨機(jī)選取一個(gè)節(jié)點(diǎn)作為主節(jié)點(diǎn)和個(gè)共識(shí)節(jié)點(diǎn)。
客戶端向主節(jié)點(diǎn)發(fā)送請(qǐng)求信息,主節(jié)點(diǎn)接收請(qǐng)求信息后,將請(qǐng)求消息編號(hào),生成預(yù)準(zhǔn)備消息,并執(zhí)行簡(jiǎn)化一致性協(xié)議。
所有共識(shí)節(jié)點(diǎn)執(zhí)行簡(jiǎn)化一致性協(xié)議,在簡(jiǎn)化一致性協(xié)議的執(zhí)行過(guò)程中,對(duì)所有參與共識(shí)的節(jié)點(diǎn)狀態(tài)進(jìn)行判斷,算法根據(jù)判斷結(jié)果進(jìn)行操作,具體如下。
1) 若判斷參與共識(shí)的節(jié)點(diǎn)中無(wú)拜占庭節(jié)點(diǎn),則主節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)會(huì)繼續(xù)執(zhí)行簡(jiǎn)化一致性協(xié)議,直到完成本次共識(shí)。
2) 若判斷共識(shí)節(jié)點(diǎn)中出現(xiàn)拜占庭節(jié)點(diǎn),則主節(jié)點(diǎn)終止本次簡(jiǎn)化一致性協(xié)議的運(yùn)行;全網(wǎng)節(jié)點(diǎn)執(zhí)行完整一致性協(xié)議,完成本次請(qǐng)求信息的共識(shí)過(guò)程。當(dāng)完整一致性協(xié)議完成后,系統(tǒng)扣除拜占庭節(jié)點(diǎn)的信譽(yù)值,并重新選擇主節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn),在下一次共識(shí)過(guò)程中繼續(xù)執(zhí)行簡(jiǎn)化一致性協(xié)議。
假設(shè)此時(shí)區(qū)塊鏈網(wǎng)絡(luò)中有n個(gè)節(jié)點(diǎn),在PBFT算法的一致性協(xié)議的預(yù)準(zhǔn)備階段中,主節(jié)點(diǎn)向所有共識(shí)節(jié)點(diǎn)廣播預(yù)準(zhǔn)備消息,通信次數(shù)為n-1 次;準(zhǔn)備階段中,所有共識(shí)節(jié)點(diǎn)分別向除自身之外的共識(shí)節(jié)點(diǎn)廣播準(zhǔn)備消息,通信次數(shù)為n(n-1)次;提交階段中,所有共識(shí)節(jié)點(diǎn)分別向除自身之外的共識(shí)節(jié)點(diǎn)廣播提交消息,通信次數(shù)為n(n-1)次。由此可知,PBFT 算法的一致性協(xié)議總通信次數(shù)為2n2-n-1 次。
在RPBFT 算法簡(jiǎn)化一致性協(xié)議的預(yù)準(zhǔn)備階段中,主節(jié)點(diǎn)向所有共識(shí)節(jié)點(diǎn)廣播預(yù)準(zhǔn)備消息,通信次數(shù)為n-1 次;反饋階段中,共識(shí)節(jié)點(diǎn)將反饋消息發(fā)送給主節(jié)點(diǎn),通信次數(shù)為(n-1)次;驗(yàn)證階段中,主節(jié)點(diǎn)將驗(yàn)證消息發(fā)送給所有共識(shí)節(jié)點(diǎn),通信次數(shù)為(n-1)次。由此可知,RPBFT 算法的簡(jiǎn)化一致性協(xié)議總通信次數(shù)為3n-3 次。
可以看出,RPBFT 算法的通信次數(shù)遠(yuǎn)小于PBFT 算法的通信次數(shù),減少了網(wǎng)絡(luò)帶寬的消耗,提高了共識(shí)算法的效率。值得注意的是,上述通信次數(shù)的計(jì)算是建立在區(qū)塊鏈網(wǎng)絡(luò)中不存在拜占庭節(jié)點(diǎn)情況下的。當(dāng)區(qū)塊鏈網(wǎng)絡(luò)中存在拜占庭節(jié)點(diǎn)時(shí),RPBFT 算法會(huì)執(zhí)行完整的一致性協(xié)議,其通信次數(shù)與PBFT 算法一致。
本文使用超級(jí)賬本的子項(xiàng)目Caliper 對(duì)RPBFT 算法進(jìn)行實(shí)驗(yàn)評(píng)估。Hyperledger Caliper 是華為公司參與設(shè)計(jì)和開(kāi)發(fā)的一個(gè)項(xiàng)目,它是一個(gè)區(qū)塊鏈基準(zhǔn)測(cè)試工具。為不失一般性,每次實(shí)驗(yàn)測(cè)試10 次,取平均值作為測(cè)試結(jié)果。
1) 共識(shí)時(shí)延測(cè)試
共識(shí)時(shí)延是指從交易提起到交易結(jié)束所消耗的時(shí)間,是衡量共識(shí)算法運(yùn)行速度的重要指標(biāo)[17]。為了對(duì)比RPBFT算法和PBFT算法在共識(shí)時(shí)延上的差別,在固定4 個(gè)共識(shí)節(jié)點(diǎn)和相同時(shí)間間隔的情況下,系統(tǒng)分別發(fā)送200 條、400 條、600 條、800 條、1 000 條交易的對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如圖7 所示。
圖7 中,當(dāng)區(qū)塊鏈內(nèi)不存在拜占庭節(jié)點(diǎn)時(shí),RPBFT 算法執(zhí)行簡(jiǎn)化一致性協(xié)議,其共識(shí)時(shí)延明顯低于PBFT 算法。當(dāng)交易量增加時(shí),PBFT 算法的交易時(shí)延增長(zhǎng)迅速,而RPBFT 算法與之相比增速較慢,在交易量為1 000 條時(shí),時(shí)延降低約30%。因此,當(dāng)交易量增多時(shí),RPBFT 算法的優(yōu)勢(shì)更為明顯,時(shí)延更低。
圖7 相同節(jié)點(diǎn)數(shù)量,不同交易量下共識(shí)時(shí)延的對(duì)比
2) 吞吐量測(cè)試
吞吐量(TPS,transaction per second)是單位時(shí)間內(nèi)打包的交易數(shù)量,是反映共識(shí)算法性能的關(guān)鍵指標(biāo)[13]。為了對(duì)比RPBFT 算法和PBFT 算法在TPS 上的差別,本文進(jìn)行如下實(shí)驗(yàn):固定4 個(gè)共識(shí)節(jié)點(diǎn)情況下,相同時(shí)間間隔內(nèi)分別發(fā)送1 000 條、1 500 條、2 000 條、2 500 條、3 000 條交易量,實(shí)驗(yàn)結(jié)果如圖8 所示。
圖8 相同節(jié)點(diǎn)數(shù)量,不同交易量下TPS 的對(duì)比
圖8 中,當(dāng)區(qū)塊鏈內(nèi)不存在拜占庭節(jié)點(diǎn)時(shí),RPBFT 算法會(huì)執(zhí)行簡(jiǎn)化一致性協(xié)議,其TPS 明顯大于PBFT 算法,在交易量為2 500 條時(shí),RPBFT的TPS 較PBFT 增長(zhǎng)了約250%。當(dāng)交易量過(guò)大,超出系統(tǒng)處理能力時(shí)會(huì)造成線程堵塞,使TPS 呈現(xiàn)下降態(tài)勢(shì),但從整體上看,RPBFT 算法的TPS 仍舊高于PBFT 算法。
在本文提出模型中,施工單位通過(guò)上傳監(jiān)測(cè)數(shù)據(jù)至區(qū)塊鏈的行為,將監(jiān)測(cè)數(shù)據(jù)訪問(wèn)控制權(quán)和數(shù)據(jù)安全性托付給了區(qū)塊鏈。在本文模型中施工單位可能成為攻擊者,攻擊目的是逃避事故后的責(zé)任追究,因此攻擊者想要成功逃避責(zé)任則必須篡改鏈上數(shù)據(jù)。本節(jié)根據(jù)參考文獻(xiàn)[19-20]中攻擊可能性和攻擊成功概率的量化分析方法,對(duì)本文模型進(jìn)行分析。攻擊者攻擊成功的概率函數(shù)表示為
其中,Δh為攻擊者想攻擊的區(qū)塊與最新區(qū)塊的高度差。為了比較高度差不同時(shí)的攻擊成功概率,本節(jié)實(shí)驗(yàn)對(duì)比了Δh分別為4、6、8、10 的Pt(h),如圖9 所示。圖9 中橫坐標(biāo)的單位M 表示未被攻擊節(jié)點(diǎn)生成一個(gè)區(qū)塊的平均時(shí)間。
圖9 攻擊成功概率對(duì)比
由圖9 可知,攻擊者攻擊成功的概率隨著高度差Δh的增大而減小。當(dāng)攻擊者的算力小于未被攻擊節(jié)點(diǎn)算力時(shí),攻擊者首先需要生成攻擊區(qū)塊與最新區(qū)塊之間的Δh個(gè)區(qū)塊,然后才可以與未被攻擊的節(jié)點(diǎn)競(jìng)爭(zhēng)產(chǎn)生新區(qū)塊,攻擊成功的概率先增大后減小,最終趨于0。當(dāng)攻擊者的算力與未被攻擊節(jié)點(diǎn)相同時(shí),攻擊成功的概率會(huì)逐漸變大,但變大幅度越來(lái)越小[20]。在本文場(chǎng)景中,攻擊者攻擊區(qū)塊的目的往往涉及事故后的追責(zé),此時(shí)距離區(qū)塊生成時(shí)間間隔較長(zhǎng),區(qū)塊高度差Δh的值至少達(dá)到103的數(shù)量級(jí),即使攻擊者算力與未被攻擊節(jié)點(diǎn)算力相同,完成攻擊的概率也是極低的。
傳統(tǒng)基于中心化云存儲(chǔ)的數(shù)據(jù)共享模型不可避免地存在數(shù)據(jù)被篡改的安全問(wèn)題,區(qū)塊鏈本身的防篡改特點(diǎn)對(duì)能夠有效避免該問(wèn)題,但區(qū)塊鏈自身數(shù)據(jù)庫(kù)并不支持海量流式鐵路施工項(xiàng)目監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ),因此需輔以其他存儲(chǔ)手段,且鐵路施工項(xiàng)目監(jiān)測(cè)產(chǎn)生的流式數(shù)據(jù)對(duì)區(qū)塊鏈的存儲(chǔ)與共享過(guò)程中的共識(shí)算法效率要求較高。本文將共識(shí)機(jī)制、共識(shí)效率、吞吐量、區(qū)塊生成速度和算力需求作為對(duì)比指標(biāo),將本文提出的模型與文獻(xiàn)[8,21-22]進(jìn)行對(duì)比分析,結(jié)果如表1 所示。
表1 對(duì)比分析結(jié)果
根據(jù)5.1 節(jié)的實(shí)驗(yàn)結(jié)果可以看出,RPBFT 算法在共識(shí)效率、吞吐量和區(qū)塊生成速度方面優(yōu)于PBFT 算法,且算力需求比PBFT 低。文獻(xiàn)[8]提出的鐵路數(shù)據(jù)匯集共享系統(tǒng)能將鐵路數(shù)據(jù)規(guī)范存儲(chǔ)、管理和應(yīng)用,但使用的PBFT 算法存在通信量大和主節(jié)點(diǎn)選擇隨機(jī)的問(wèn)題。文獻(xiàn)[21]使用混合共識(shí)的方式解決拜占庭節(jié)點(diǎn)問(wèn)題,導(dǎo)致共識(shí)過(guò)程復(fù)雜,共識(shí)效率和吞吐量較低,區(qū)塊生成速度緩慢,且節(jié)點(diǎn)中同時(shí)運(yùn)行2 種共識(shí)算法,對(duì)算力的需求較高。文獻(xiàn)[22]的DPCC(disease prevention and control algorithm)是基于DPoS(delegated proof of stake)算法的改進(jìn)方案,優(yōu)化了節(jié)點(diǎn)選舉方式,共識(shí)效率相對(duì)較高,但是其每次共識(shí)時(shí)都需要選擇一個(gè)出塊節(jié)點(diǎn)導(dǎo)致其吞吐量有所降低;在區(qū)塊生成速度方面,DPCC 繼承了DPoS的快速出塊特點(diǎn)[22]。由表1 可知,本文模型與其他模型相比,在共識(shí)效率、吞吐量和區(qū)塊生成速度方面表現(xiàn)較優(yōu)秀。
區(qū)塊鏈技術(shù)的去中心化、防篡改特點(diǎn)為鐵路工程施工安全監(jiān)測(cè)數(shù)據(jù)共享中的安全問(wèn)題以及保證監(jiān)測(cè)數(shù)據(jù)真實(shí)性提供了新的解決思路。本文首先提出了基于區(qū)塊鏈的鐵路工程施工安全監(jiān)測(cè)數(shù)據(jù)共享模型,并對(duì)該模型的框架、參與者和共享流程進(jìn)行了說(shuō)明;其次,通過(guò)智能合約實(shí)現(xiàn)了監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)與查詢功能,施工單位可以通過(guò)存儲(chǔ)合約實(shí)現(xiàn)監(jiān)測(cè)數(shù)據(jù)的上鏈存儲(chǔ),監(jiān)管單位和業(yè)主單位可以通過(guò)查詢合約查詢歷史監(jiān)測(cè)數(shù)據(jù);然后,針對(duì)PBFT算法的拜占庭節(jié)點(diǎn)與正常節(jié)點(diǎn)被選為主節(jié)點(diǎn)概率相同以及共識(shí)過(guò)程中通信量較大的問(wèn)題,結(jié)合鐵路施工項(xiàng)目監(jiān)測(cè)到的流式數(shù)據(jù)特點(diǎn),提出了RPBFT算法,降低了通信量和拜占庭節(jié)點(diǎn)作為主節(jié)點(diǎn)的概率;最后,在Hyperledger Caliper 中的對(duì)比實(shí)驗(yàn)證明,RPBFT 算法共識(shí)時(shí)延與吞吐量均優(yōu)于PBFT 算法,時(shí)間復(fù)雜度由O(n2)降為O(n);攻擊可能性和攻擊成功概率的量化分析結(jié)果表明,智能合約技術(shù)為鏈上監(jiān)測(cè)數(shù)據(jù)提供了防篡改性;與其他模型的對(duì)比分析表明,本文模型在共識(shí)效率、吞吐量和區(qū)塊生成速度方面表現(xiàn)較優(yōu)秀。