申玉民,王金龍*,胡殿凱,劉星宇
(1.青島理工大學(xué)信息與控制工程學(xué)院,山東青島 266525;2.銘數(shù)科技(青島)有限公司,山東青島 266041)
建筑信息模型(Building Information Modeling,BIM)是一種管理整個(gè)建筑生命周期中的基本建筑設(shè)計(jì)和項(xiàng)目數(shù)據(jù)的方法[1]。在建筑物整個(gè)生命周期中,BIM提供統(tǒng)一的表示、數(shù)據(jù)框架和組織,可以與各種數(shù)據(jù)庫(kù)集成,簡(jiǎn)化文檔管理,可視化分析過程和結(jié)果以及提供可持續(xù)性分析和仿真[2]。當(dāng)前,BIM在大型建筑設(shè)計(jì)、施工、運(yùn)維的應(yīng)用越來越廣泛[3-5]。一些大型項(xiàng)目的BIM圖紙由于其復(fù)雜性,工作量巨大,往往涉及建筑、結(jié)構(gòu)、設(shè)備等多個(gè)專業(yè),為了提高效率,這些BIM圖紙的設(shè)計(jì)往往需要多人協(xié)同創(chuàng)作[6]。但是多人協(xié)同創(chuàng)作BIM圖紙通常會(huì)帶來BIM圖紙版本混亂、版權(quán)劃分無準(zhǔn)確依據(jù)的問題[6-8]。
傳統(tǒng)BIM圖紙的多人協(xié)同創(chuàng)作大多是依靠BIM設(shè)計(jì)軟件Revit中自帶的工作共享或模型鏈接模式實(shí)現(xiàn)的[9-10],但是該方法存在對(duì)計(jì)算機(jī)性能要求高、單向更新的缺點(diǎn)[9],并且無法記錄和追溯每次創(chuàng)作后的BIM圖紙信息。之后出現(xiàn)了基于Wiki[11]和云服務(wù)的多人協(xié)同創(chuàng)作系統(tǒng),但是由于Wiki僅適用于像知識(shí)共享[12]或協(xié)作學(xué)習(xí)[13-14]等場(chǎng)景下的文本信息多人協(xié)同創(chuàng)作過程,所以無法應(yīng)用到BIM圖紙的多人協(xié)同創(chuàng)作過程中來。云服務(wù)應(yīng)用范圍更加廣泛,可以緩解本地計(jì)算機(jī)性能對(duì)BIM圖紙多人協(xié)同創(chuàng)作過程效率的約束,因此研究者提出將云服務(wù)與BIM技術(shù)結(jié)合起來,開發(fā)了基于云服務(wù)的BIM協(xié)同系統(tǒng)[15],使用云服務(wù)器代替本地計(jì)算機(jī)完成BIM圖紙的計(jì)算和協(xié)作,同時(shí)將每次創(chuàng)作后的BIM圖紙信息存儲(chǔ)到服務(wù)器中,解決了傳統(tǒng)BIM圖紙多人協(xié)同創(chuàng)作方法存在的計(jì)算機(jī)性能要求高等問題,但是由于所有數(shù)據(jù)都存儲(chǔ)在云服務(wù)器中,如果被黑客侵入惡意刪除或修改數(shù)據(jù)會(huì)造成嚴(yán)重的數(shù)據(jù)安全問題[16],雖然可以通過加密、授權(quán)等方式避免一些相關(guān)問題,但是仍然存在一些安全漏洞未被解決,數(shù)據(jù)安全無法保證。針對(duì)基于云服務(wù)的BIM協(xié)同系統(tǒng)存在的問題,一些研究者開始嘗試?yán)脜^(qū)塊鏈解決建筑信息化應(yīng)用問題[17-20],區(qū)塊鏈具有的去中心化、可追溯以及防篡改等特性可以較好地解決上述BIM圖紙信息記錄、數(shù)據(jù)安全等問題。Zheng等[21]提出使用區(qū)塊鏈記錄單人創(chuàng)作過程中每次創(chuàng)作后的BIM圖紙信息,利用區(qū)塊鏈防篡改和可追溯的性質(zhì),完整記錄BIM圖紙整個(gè)創(chuàng)作過程并且保證了數(shù)據(jù)的安全性,實(shí)現(xiàn)了單人創(chuàng)作BIM圖紙信息的記錄,但是并未考慮多人協(xié)同創(chuàng)作BIM圖紙的信息記錄問題。因此,在多人協(xié)同創(chuàng)作BIM圖紙的情況下,如何準(zhǔn)確、安全地記錄BIM圖紙的創(chuàng)作過程就成為一個(gè)亟待解決的問題,這也是保障設(shè)計(jì)者們的責(zé)權(quán)利問題的關(guān)鍵。
基于上述研究背景和出現(xiàn)的問題,本文對(duì)基于區(qū)塊鏈的BIM圖紙多人協(xié)同創(chuàng)作系統(tǒng)進(jìn)行了研究,使用區(qū)塊鏈技術(shù)記錄BIM圖紙整個(gè)創(chuàng)作過程,解決了多人協(xié)同創(chuàng)作BIM圖紙版本混亂、不易溯源以及存在數(shù)據(jù)安全風(fēng)險(xiǎn)的問題。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)具有良好的性能,能夠滿足和解決BIM圖紙多人協(xié)同創(chuàng)作實(shí)際應(yīng)用中的需求和問題。
建筑信息模型(BIM)圖紙通常需要多名設(shè)計(jì)者同時(shí)在一張圖紙上創(chuàng)作,由于對(duì)數(shù)據(jù)泄露、利益沖突、信息濫用的擔(dān)憂,當(dāng)前往往需要嚴(yán)格的許可管理[17]。因此,使用聯(lián)盟鏈構(gòu)建基于區(qū)塊鏈的BIM圖紙多人協(xié)同創(chuàng)作系統(tǒng)。
如圖1所示,本文提出的BIM圖紙多人協(xié)同創(chuàng)作系統(tǒng)采用聯(lián)盟鏈技術(shù)實(shí)現(xiàn),構(gòu)建的系統(tǒng)模型主要由BIM圖紙?jiān)O(shè)計(jì)者和BIM圖紙負(fù)責(zé)人構(gòu)成的創(chuàng)作信息記錄鏈,以及BIM圖紙數(shù)據(jù)庫(kù)組成。BIM圖紙?jiān)O(shè)計(jì)者加入創(chuàng)作信息記錄鏈需要獲得BIM圖紙負(fù)責(zé)人的許可,入鏈后BIM圖紙?jiān)O(shè)計(jì)者可以通過遠(yuǎn)程過程調(diào)用(Remote Procedure Call,RPC)協(xié)議由已部署的智能合約向創(chuàng)作信息記錄鏈中發(fā)送通過解析BIM圖紙構(gòu)造的BIM圖紙信息并保存,然后將完整BIM圖紙保存到BIM圖紙數(shù)據(jù)庫(kù)中。同時(shí),其他BIM圖紙?jiān)O(shè)計(jì)者如果需要?jiǎng)?chuàng)作BIM圖紙,可以從創(chuàng)作信息記錄鏈中獲取圖紙最后一次創(chuàng)作后的唯一BIM圖紙信息并根據(jù)該信息在BIM圖紙數(shù)據(jù)庫(kù)中搜索獲取對(duì)應(yīng)的BIM圖紙進(jìn)行創(chuàng)作。
圖1 本文系統(tǒng)模型Fig.1 The proposed systemmodel
模型中主要包含如下實(shí)體。
1)BIM圖紙?jiān)O(shè)計(jì)者:各個(gè)BIM圖紙?jiān)O(shè)計(jì)者各自獨(dú)立,和BIM圖紙負(fù)責(zé)人共同組成創(chuàng)作信息記錄鏈,共同維護(hù)鏈上數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的分中心化維護(hù)。BIM圖紙?jiān)O(shè)計(jì)者加入到創(chuàng)作信息記錄鏈中需要獲取BIM圖紙負(fù)責(zé)人的許可。
2)BIM圖紙負(fù)責(zé)人:BIM圖紙負(fù)責(zé)人是BIM圖紙的發(fā)起者和所有者,主要負(fù)責(zé)授權(quán)BIM圖紙?jiān)O(shè)計(jì)者加入創(chuàng)作信息記錄鏈。
3)BIM圖紙數(shù)據(jù)庫(kù):用于存儲(chǔ)初始以及每次創(chuàng)作后的BIM圖紙,存儲(chǔ)格式={BIM圖紙實(shí)體實(shí)例信息hash,創(chuàng)作后完整BIM圖紙}。
本文系統(tǒng)使用聯(lián)盟鏈作為BIM圖紙信息的存儲(chǔ)媒介,利用區(qū)塊鏈技術(shù)保證各設(shè)計(jì)者用戶上傳的BIM圖紙信息的不可篡改和公開透明,為以后設(shè)計(jì)者用戶間可能發(fā)生的版權(quán)糾紛問題提供存證。同時(shí)使用設(shè)計(jì)者用戶私鑰對(duì)BIM圖紙信息簽名,進(jìn)一步降低了多人協(xié)同創(chuàng)作BIM圖紙潛在的安全風(fēng)險(xiǎn)。
基于區(qū)塊鏈的BIM圖紙多人創(chuàng)作系統(tǒng)架構(gòu)如圖2所示,包括以下六層結(jié)構(gòu)。
圖2 本文系統(tǒng)架構(gòu)Fig.2 The proposed system architecture
1)用戶層。包括BIM圖紙?jiān)O(shè)計(jì)者和BIM圖紙負(fù)責(zé)人兩類用戶,BIM圖紙?jiān)O(shè)計(jì)者用戶主要完成對(duì)BIM圖紙的創(chuàng)作,BIM圖紙負(fù)責(zé)人用戶是BIM圖紙的所有者和管理者,主要負(fù)責(zé)為BIM圖紙?jiān)O(shè)計(jì)者用戶授權(quán)。
2)應(yīng)用服務(wù)層。主要包括針對(duì)系統(tǒng)應(yīng)用場(chǎng)景設(shè)計(jì)的服務(wù)功能。針對(duì)用戶操作場(chǎng)景,設(shè)計(jì)了用戶注冊(cè)和初始BIM圖紙上傳功能;針對(duì)數(shù)字簽名提取驗(yàn)證場(chǎng)景,設(shè)計(jì)了BIM圖紙修改權(quán)設(shè)定和用戶數(shù)字簽名提取驗(yàn)證功能;針對(duì)BIM圖紙修改提交場(chǎng)景,設(shè)計(jì)了修改后BIM圖紙?zhí)峤灰约白钚翨IM圖紙獲取功能。
3)節(jié)點(diǎn)層。包括BIM圖紙?jiān)O(shè)計(jì)者用戶節(jié)點(diǎn)和BIM圖紙負(fù)責(zé)人用戶節(jié)點(diǎn)兩種類型,一個(gè)BIM圖紙?jiān)O(shè)計(jì)者用戶節(jié)點(diǎn)對(duì)應(yīng)一個(gè)BIM圖紙?jiān)O(shè)計(jì)者用戶,用戶的各種操作都由節(jié)點(diǎn)完成。
4)合約層。主要包括為區(qū)塊鏈節(jié)點(diǎn)提供相應(yīng)功能的智能合約。具體來說,用戶注冊(cè)合約對(duì)應(yīng)用戶注冊(cè)功能;BIM圖紙修改權(quán)設(shè)定合約對(duì)應(yīng)BIM圖紙修改權(quán)設(shè)定功能;BIM圖紙最新修改信息獲取合約對(duì)應(yīng)最新BIM圖紙獲取功能;BIM圖紙修改信息上傳合約對(duì)應(yīng)修改后BIM圖紙?zhí)峤还δ?;?shù)字簽名驗(yàn)證合約對(duì)應(yīng)用戶數(shù)字簽名提取驗(yàn)證功能。
5)共識(shí)層。采用Kafka共識(shí)機(jī)制,保證區(qū)塊鏈交易能夠快速地在所有區(qū)塊鏈節(jié)點(diǎn)之間達(dá)成一致性共識(shí)并上鏈存儲(chǔ)。
6)數(shù)據(jù)層。主要包括創(chuàng)作信息記錄鏈。創(chuàng)作信息記錄鏈由所有節(jié)點(diǎn)共同維護(hù),保證了BIM圖紙信息記錄的公開和透明。
為了方便系統(tǒng)調(diào)用,使用fabric-go-sdk封裝合約鏈碼并向系統(tǒng)和用戶暴露接口,具體接口名稱和屬性見表1。
表1 接口名稱和屬性Tab.1 Interfacenamesand attributes
下面將分別介紹系統(tǒng)各個(gè)模塊的功能和流程。
1.2.1 用戶操作模塊
本模塊主要實(shí)現(xiàn)用戶注冊(cè)和初始BIM圖紙上傳兩種功能,具體流程如圖3所示。
圖3 用戶操作模塊流程Fig.3 Flowchart of user operation module
1)用戶注冊(cè)。
如圖3虛線所示,BIM圖紙預(yù)設(shè)設(shè)計(jì)者用戶User2發(fā)起用戶注冊(cè)請(qǐng)求,將用戶注冊(cè)信息user發(fā)送到系統(tǒng)為之分配的用戶節(jié)點(diǎn)Pu,調(diào)用UserRegister()接口觸發(fā)用戶注冊(cè)合約使用橢圓曲線加密算法為用戶生成唯一的公私鑰對(duì),并將用戶注冊(cè)信息與公私鑰對(duì)綁定,即私鑰=Map[用戶名,用戶密碼]。最后,用戶節(jié)點(diǎn)Pu將公私鑰對(duì)返回給用戶。
其中,用戶注冊(cè)信息user定義如下:
user={name,pwd,id_encryption}
其中name、pwd、id_encryption分別代表用戶名、用戶密碼以及經(jīng)過SHA1()函數(shù)加密過的用戶身份證號(hào)。將身份證號(hào)加密是為了防止用戶節(jié)點(diǎn)被不法黑客入侵帶來的用戶真實(shí)身份信息泄露問題。
2)初始BIM圖紙上傳。
設(shè)定BIM圖紙的預(yù)設(shè)設(shè)計(jì)者用戶User2已經(jīng)在系統(tǒng)中進(jìn)行了用戶注冊(cè)。如圖3序號(hào)①所示,預(yù)設(shè)設(shè)計(jì)者用戶User2發(fā)起B(yǎng)IM圖紙初始信息上傳請(qǐng)求,將初始BIM圖紙上傳到對(duì)應(yīng)的用戶節(jié)點(diǎn)Pu。隨后用戶節(jié)點(diǎn)Pu使用ifcOpenShell解析BIM圖紙,獲取BIM圖紙實(shí)體實(shí)例信息BIM_main,然后調(diào)用PutChangeRecord()接口觸發(fā)BIM圖紙修改信息上傳合約生成BIM圖紙初始信息記錄BIM_init,同時(shí)將BIM圖紙初始信息記錄BIM_init打包成交易后共識(shí)上鏈,如圖3序號(hào)②和③所示。最后用戶節(jié)點(diǎn)Pu將初始BIM圖紙上傳到BIM圖紙數(shù)據(jù)庫(kù)中,如圖3序號(hào)④所示。
其中,BIM圖紙實(shí)體實(shí)例信息BIM_main定義如下:
BIM_main={GUID,app_name,per,org,action,T,mod_date,mod_user,mod_app}
其內(nèi)容依次為BIM圖紙全局唯一標(biāo)識(shí)符(Globally Unique Identifier,GUID)、BIM圖紙創(chuàng)建應(yīng)用名稱、創(chuàng)建人信息、創(chuàng)建人所屬組織信息、修改狀態(tài)、BIM圖紙創(chuàng)建時(shí)間戳、修改日期、修改用戶、修改應(yīng)用。由于某些項(xiàng)目在BIM圖紙創(chuàng)建時(shí)未設(shè)置等原因,上述某些內(nèi)容可能為空。
BIM圖紙初始信息記錄BIM_init定義如下:
BIM_init={GUID,uploader_name,version,main_hash,uploader_sign,root_hash,T,MRS_hash,uploader_pub}
具體包括BIM圖紙全局唯一標(biāo)識(shí)符GUID、上傳者用戶名uploader_name、BIM圖紙版本version、BIM圖紙實(shí)體實(shí)例信息哈希值main_hash、上傳者私鑰簽名uploader_sign、溯源哈希值root_hash、時(shí)間戳T、BIM圖紙修改權(quán)設(shè)定交易哈希值MRS_hash、上傳者公鑰uploader_pub。其中:由于是初始BIM圖紙,所以初始BIM圖紙版本設(shè)為1,之后每次上傳BIM圖紙版本默認(rèn)加1;BIM圖紙修改權(quán)設(shè)定交易哈希值由下文數(shù)字簽名提取驗(yàn)證模塊調(diào)用PutRightRecord()接口完成BIM圖紙修改權(quán)設(shè)定合約生成;root_hash表示當(dāng)前圖紙的上一次修改交易哈希值,該值可以通過交易自帶的GetTxID()函數(shù)獲取,由于這是BIM圖紙的初始信息,所以設(shè)定為BIM圖紙修改權(quán)設(shè)定交易哈希值。
具體實(shí)例如圖4所示。原始BIM為一個(gè)房屋模型,包括家具、門、窗、墻等組件。用戶User2首先解析初始BIM圖紙得到BIM圖紙實(shí)體實(shí)例信息BIM_main,然后將其和用戶名一同輸入初始BIM圖紙上傳界面,點(diǎn)擊界面中的上傳按鈕后調(diào)用PutChangeRecord()接口生成BIM圖紙初始信息記錄BIM_init,然后將BIM_init打包成交易后共識(shí)上鏈,同時(shí)將初始BIM圖紙上傳到BIM圖紙數(shù)據(jù)庫(kù)中。由于是初始圖紙,BIM圖紙實(shí)體實(shí)例信息中修改狀態(tài)action默認(rèn)為“NOCHANGE”,BIM圖紙初始信息記錄中將溯源哈希root_hash設(shè)置為和圖5中BIM圖紙修改權(quán)設(shè)定交易哈希值MRS_hash相同。
圖4 初始BIM圖紙上傳示意圖Fig.4 Schematic diagram of initial BIM drawing uploading
在本文系統(tǒng)中,修改后BIM圖紙信息被分別存儲(chǔ)在若干個(gè)區(qū)塊中,區(qū)塊包括區(qū)塊頭和區(qū)塊體兩個(gè)部分,區(qū)塊頭中包括頭哈希Hash_h、父哈希Hash_pre、時(shí)間戳T以及默克爾樹根MT_Root。其中,頭哈希由父哈希和本區(qū)塊頭中的其他信息進(jìn)行哈希運(yùn)算得到。區(qū)塊體中主要存儲(chǔ)BIM圖紙修改記錄BIM_change。
其中,BIM圖紙修改記錄BIM_change定義如下:
BIM_change={GUID,modifier_name,version,main_hash,modifier_sign,root_hash,T,MRS_hash,modifier_pub}
其內(nèi)容依次為BIM圖紙全局唯一標(biāo)識(shí)符、修改者用戶名、BIM圖紙版本、實(shí)體實(shí)例信息哈希值、修改者私鑰簽名、溯源哈希值、時(shí)間戳、BIM圖紙修改權(quán)設(shè)定交易哈希值以及修改者公鑰。其中,root_hash表示當(dāng)前圖紙的上一次修改記錄哈希值,如果這是當(dāng)前BIM圖紙的第一次修改,則該值設(shè)定為BIM圖紙初始信息上傳交易哈希值,該值可以通過交易自帶的GetTxID()函數(shù)獲取。
1.2.2 數(shù)字簽名提取驗(yàn)證模塊
本模塊主要實(shí)現(xiàn)用戶數(shù)字簽名提取驗(yàn)證以及BIM圖紙修改權(quán)設(shè)定兩個(gè)功能。系統(tǒng)中的所有用戶操作都需要進(jìn)行用戶數(shù)字簽名驗(yàn)證,驗(yàn)證用戶是不是BIM圖紙的預(yù)設(shè)設(shè)計(jì)者用戶,從而保證系統(tǒng)的安全性和魯棒性,因此本模塊在系統(tǒng)中非常重要。
1)用戶數(shù)字簽名提取驗(yàn)證。
用戶數(shù)字簽名提取驗(yàn)證功能在系統(tǒng)中是通過觸發(fā)數(shù)字簽名驗(yàn)證合約實(shí)現(xiàn)的,主要有如下步驟:首先獲取用戶簽名的原數(shù)據(jù)、用戶私鑰簽名以及用戶公鑰,然后將其傳入數(shù)字簽名驗(yàn)證合約中的verify()驗(yàn)證函數(shù)使用用戶公鑰解密用戶私鑰簽名得到解密后的明文,和用戶簽名的原數(shù)據(jù)做對(duì)比,如果相同則說明用戶有權(quán)利進(jìn)行操作或者原數(shù)據(jù)沒有被篡改。
用戶數(shù)字簽名提取驗(yàn)證功能步驟雖然比較簡(jiǎn)單,但是對(duì)于整個(gè)系統(tǒng)很重要,它進(jìn)一步保證了系統(tǒng)中用戶各類操作的合法性和安全性。
2)BIM圖紙修改權(quán)設(shè)定。
BIM圖紙預(yù)設(shè)設(shè)計(jì)者用戶對(duì)應(yīng)的用戶節(jié)點(diǎn)解析完初始BIM圖紙后,調(diào)用PutRightRecord()接口觸發(fā)BIM圖紙修改權(quán)設(shè)定合約根據(jù)預(yù)先設(shè)定的設(shè)計(jì)者列表,使用列表中設(shè)計(jì)者的私鑰對(duì)BIM圖紙初始信息記錄BIM_init中的全局唯一標(biāo)識(shí)符簽名,從而得到設(shè)計(jì)者數(shù)字簽名列表,然后繼續(xù)生成BIM圖紙修改權(quán)設(shè)定記錄MRS,最后將BIM圖紙修改權(quán)設(shè)定記錄MRS打包成交易后共識(shí)上鏈。
其中,BIM圖紙修改權(quán)設(shè)定記錄MRS定義如下:
MRS={BIM_desc,sign_list,GUID,main_hash,co_desc,T,MRS_hash}
其 中BIM_desc、sign_list、GUID、main_hash、co_desc、T、MRS_hash分別代表BIM圖紙描述、設(shè)計(jì)者私鑰簽名列表、BIM圖紙全局唯一標(biāo)識(shí)符、實(shí)體實(shí)例信息哈希值、設(shè)計(jì)者公司簡(jiǎn)介、時(shí)間戳以及此次BIM圖紙修改權(quán)設(shè)定交易哈希值。
圖5說明了BIM圖紙修改權(quán)設(shè)定的整個(gè)過程,設(shè)定圖4中初始BIM圖紙的預(yù)設(shè)設(shè)計(jì)者用戶為User1和User2。當(dāng)用戶User2對(duì)應(yīng)的用戶節(jié)點(diǎn)解析完初始BIM圖紙后,將解析得到的初始BIM圖紙實(shí)體實(shí)例信息和預(yù)設(shè)用戶名列表輸入BIM圖紙修改權(quán)設(shè)定界面,點(diǎn)擊界面中的設(shè)定按鈕后調(diào)用PutRightRecord()接口使用預(yù)設(shè)設(shè)計(jì)者用戶User1和User2的私鑰對(duì)BIM圖紙全局唯一標(biāo)識(shí)符簽名并生成設(shè)計(jì)者私鑰簽名列表sign_list,然后繼續(xù)生成BIM圖紙修改權(quán)設(shè)定記錄MRS,最后將記錄打包成交易共識(shí)上鏈存儲(chǔ)。圖4中BIM圖紙初始信息記錄的MRS_hash即為此次BIM圖紙修改權(quán)設(shè)定記錄中的MRS_hash。
圖5 BIM圖紙修改權(quán)設(shè)定示意圖Fig.5 Schematic diagram of setting BIM drawingmodification right
1.2.3 BIM圖紙修改提交模塊
為了滿足BIM圖紙頻繁修改的需求,避免BIM圖紙頻繁修改導(dǎo)致的BIM圖紙版本混亂和版權(quán)劃分無準(zhǔn)確依據(jù)等問題,本模塊使用智能合約技術(shù)自動(dòng)檢驗(yàn)用戶操作合法性,自動(dòng)記錄合法用戶的修改操作,利用智能合約規(guī)范鏈上交易者的行為,有效防止了上述問題的產(chǎn)生。
本模塊主要實(shí)現(xiàn)修改后BIM圖紙?zhí)峤灰约白钚翨IM圖紙獲取兩個(gè)功能。模塊完整流程如圖6所示。
圖6 BIM圖紙修改提交模塊流程Fig.6 Flowchart of BIM drawing modification and submission module
1)最新BIM圖紙獲取。
如圖6序號(hào)①和②所示,BIM圖紙預(yù)設(shè)設(shè)計(jì)者用戶User2發(fā)起最新BIM圖紙獲取請(qǐng)求,觸發(fā)數(shù)字簽名驗(yàn)證合約驗(yàn)證當(dāng)前用戶是否是BIM圖紙的預(yù)設(shè)修改用戶,如果驗(yàn)證通過,則繼續(xù)進(jìn)行后面操作,否則拒絕請(qǐng)求并退出。然后,調(diào)用QueryChangeRecord()接口觸發(fā)BIM圖紙最新修改信息獲取合約從創(chuàng)作信息記錄鏈上查詢最新BIM圖紙信息hash,即區(qū)塊鏈中BIM圖紙最后一次修改記錄中的實(shí)體實(shí)例信息哈希值,見圖6序號(hào)③。隨后,用戶節(jié)點(diǎn)Pu將查詢到的最新BIM圖紙信息hash返回給用戶,用戶根據(jù)該hash去BIM圖紙數(shù)據(jù)庫(kù)中查找最新BIM圖紙進(jìn)行創(chuàng)作,如圖6序號(hào)④~⑥所示。
2)修改后BIM圖紙?zhí)峤弧?/p>
BIM圖紙預(yù)設(shè)設(shè)計(jì)者用戶User2在修改完BIM圖紙后,發(fā)起B(yǎng)IM圖紙修改信息提交請(qǐng)求。隨后觸發(fā)數(shù)字簽名驗(yàn)證合約驗(yàn)證當(dāng)前用戶是否是圖紙預(yù)設(shè)修改用戶,如果驗(yàn)證通過,則繼續(xù)進(jìn)行后面操作,否則拒絕請(qǐng)求并退出,如圖6下半部分序號(hào)(1)和(2)所示。之后,調(diào)用PutChangeRecord()接口觸發(fā)BIM圖紙最新修改信息獲取合約查詢當(dāng)前鏈上最新BIM圖紙修改信息記錄中的BIM圖紙版本并和本地修改前BIM圖紙版本比較,根據(jù)比較結(jié)果和接口預(yù)設(shè)規(guī)則返回最新BIM圖紙修改信息記錄或NULL,見圖6序號(hào)(3)和(4)。如圖6序號(hào)(5)~(7)所示,如果返回最新BIM圖紙修改信息記錄則根據(jù)記錄從BIM圖紙數(shù)據(jù)庫(kù)中獲取完整BIM圖紙并與本地修改后BIM圖紙使用腳本通過Revit等建模軟件實(shí)現(xiàn)BIM圖紙融合,然后使用ifcOpenShell解析融合后BIM圖紙獲得BIM圖紙實(shí)體實(shí)例信息BIM_main,繼而生成BIM圖紙修改信息記錄BIM_change,之后將BIM_change打包成交易后共識(shí)上鏈。最后,用戶節(jié)點(diǎn)Pu將融合后的完整BIM圖紙上傳到BIM圖紙數(shù)據(jù)庫(kù)中存儲(chǔ)。
上述流程提到的PutChangeRecord()接口預(yù)設(shè)規(guī)則如下:
a)如果當(dāng)前鏈上BIM圖紙版本等于本地修改前BIM圖紙圖紙版本加1,說明本地修改前BIM圖紙圖紙被多位設(shè)計(jì)者修改,則返回當(dāng)前鏈上最新BIM圖紙修改信息記錄并獲取完整BIM圖紙與本地修改后BIM圖紙融合,融合后BIM圖紙版本設(shè)為本地修改前BIM圖紙版本加1;
b)如果當(dāng)前鏈上BIM圖紙版本為NULL或小于本地修改前BIM圖紙圖紙版本加1,說明本地修改后BIM圖紙為最新版,則返回NULL,本地修改后BIM圖紙版本設(shè)為本地修改前BIM圖紙版本加1;
c)如果當(dāng)前鏈上BIM圖紙版本大于本地修改前BIM圖紙版本加1,說明本地修改后BIM圖紙前已有多個(gè)版本,則返回當(dāng)前鏈上最新BIM圖紙修改信息記錄并獲取完整BIM圖紙與本地修改后BIM圖紙融合,融合后BIM圖紙版本設(shè)為當(dāng)前鏈上最新BIM圖紙版本加1。
當(dāng)上傳初始BIM圖紙時(shí),經(jīng)查詢鏈上最新BIM圖紙版本為NULL,應(yīng)用接口規(guī)則b返回NULL后直接將接口生成的BIM圖紙初始信息記錄和初始BIM圖紙上傳到區(qū)塊鏈和BIM圖紙數(shù)據(jù)庫(kù)中,初始BIM圖紙版本號(hào)為1。圖7以各版本BIM圖紙鏈上次序?yàn)槔f明多位BIM圖紙?jiān)O(shè)計(jì)者在同一初始版本BIM圖紙的基礎(chǔ)上進(jìn)行協(xié)作修改提交的流程,圖中數(shù)字代表BIM圖紙版本號(hào),大寫字母代表BIM圖紙?jiān)O(shè)計(jì)者。
圖7 多人協(xié)作修改提交示意圖Fig.7 Schematic diagram of multi-person collaborativemodification and submission
下面將對(duì)圖7中的多人協(xié)作修改提交流程做詳細(xì)解釋。
1)A、B、C、D四位設(shè)計(jì)者同時(shí)獲取版本1的初始BIM圖紙進(jìn)行修改。
2)設(shè)計(jì)者A首先創(chuàng)作完,首先查看當(dāng)前鏈中最新BIM圖紙版本號(hào),結(jié)果是1,比本地修改前BIM圖紙版本加1要小,根據(jù)PutChangeRecord()接口規(guī)則b,將本地修改后BIM圖紙版本設(shè)為本地修改前BIM圖紙版本加1后直接上傳到區(qū)塊鏈和BIM圖紙數(shù)據(jù)庫(kù)中,記為版本A2。
3)設(shè)計(jì)者B隨后創(chuàng)作完畢,首先查看當(dāng)前鏈中最新BIM圖紙版本號(hào),結(jié)果是2,和本地修改前BIM圖紙版本加1相同,根據(jù)PutChangeRecord()接口規(guī)則a,返回當(dāng)前鏈上最新BIM圖紙修改信息記錄并獲取完整BIM圖紙與本地修改后BIM圖紙融合,將融合后的BIM圖紙版本設(shè)為本地修改前BIM圖紙版本加1后上傳到區(qū)塊鏈和BIM圖紙數(shù)據(jù)庫(kù)中,記為版本AB2,此時(shí)設(shè)計(jì)者E獲取版本AB2的BIM圖紙進(jìn)行創(chuàng)作。
4)設(shè)計(jì)者E創(chuàng)作完畢,首先查看當(dāng)前鏈中最新BIM圖紙版本號(hào),結(jié)果是2,比本地修改前BIM圖紙版本加1要小,根據(jù)PutChangeRecord()接口規(guī)則b,將本地修改后BIM圖紙版本設(shè)為本地修改前BIM圖紙版本加1后直接上傳到區(qū)塊鏈和BIM圖紙數(shù)據(jù)庫(kù)中,記為版本E3。
5)此時(shí)設(shè)計(jì)者C創(chuàng)作完畢,首先查看當(dāng)前鏈中最新BIM圖紙版本號(hào),結(jié)果是3,比本地修改前BIM圖紙版本加1要大,根據(jù)PutChangeRecord()接口規(guī)則c,返回當(dāng)前鏈上最新BIM圖紙修改信息記錄并獲取完整BIM圖紙與本地修改后BIM圖紙融合,將融合后的BIM圖紙版本設(shè)為當(dāng)前鏈上最新BIM圖紙版本加1后上傳到區(qū)塊鏈和BIM圖紙數(shù)據(jù)庫(kù)中,記為版本C4。以上就是圖7中多人協(xié)作修改提交流程的詳細(xì)解釋,未說明設(shè)計(jì)者D的修改提交操作和設(shè)計(jì)者C同理,在此不再贅述,按照此方法上傳修改后BIM圖紙可以較好地解決多人協(xié)同創(chuàng)作同一BIM圖紙上傳時(shí)帶來的融合或版本控制問題。
BIM圖紙修改提交具體實(shí)例如圖8所示,圖中僅展示主要步驟。設(shè)定這是圖4中初始BIM圖紙的第一次修改,修改操作為刪除圖紙中的一個(gè)家具組件。用戶User2發(fā)起B(yǎng)IM圖紙最新信息獲取請(qǐng)求,通過最新BIM圖紙獲取界面調(diào)用QueryChangeRecord()接口從本地區(qū)塊鏈中搜索BIM圖紙最新實(shí)體實(shí)例信息hash,然后根據(jù)該hash從BIM圖紙數(shù)據(jù)庫(kù)獲取最新BIM圖紙進(jìn)行修改,如圖8中序號(hào)①和②所示。用戶User2修改完BIM圖紙之后,將修改狀態(tài)action設(shè)置為“DELETED”,然后發(fā)起B(yǎng)IM圖紙修改提交請(qǐng)求,將用戶名和修改后BIM圖紙實(shí)體實(shí)例信息輸入修改后BIM圖紙?zhí)峤唤缑?,點(diǎn)擊提交按鈕后調(diào)用PutChangeRecord()接口查詢鏈上最新BIM圖紙版本并和本地修改前BIM圖紙版本加1比較,發(fā)現(xiàn)鏈上最新BIM圖紙版本比本地修改前BIM圖紙版本加1要小,根據(jù)PutChangeRecord()接口規(guī)則b,將本地修改后的BIM圖紙版本設(shè)為本地修改前的BIM圖紙版本加1,然后解析修改后的BIM圖紙獲取BIM圖紙實(shí)體實(shí)例信息,生成BIM圖紙修改信息記錄BIM_change并打包成交易共識(shí)上鏈,如圖8中序號(hào)③~⑤所示,最后將修改后的BIM圖紙上傳到BIM圖紙數(shù)據(jù)庫(kù)中。
圖8 BIM圖紙修改提交示意圖Fig.8 Schematic diagram of BIM drawing modification and submission
本文系統(tǒng)基于Hyperledger Fabric1.4框架結(jié)合智能合約技術(shù)開發(fā)實(shí)現(xiàn)。本文系統(tǒng)安全機(jī)制依靠Fabric成熟的安全機(jī)制,選用的共識(shí)機(jī)制Kafka也是Fabric自帶的共識(shí)機(jī)制,因此系統(tǒng)安全性得到保障。
實(shí)驗(yàn)用設(shè)備為兩臺(tái)筆記本,兩臺(tái)筆記本均為8 GB內(nèi)存且都使用4核lntel Core i5處理器,每臺(tái)筆記本都運(yùn)行4核2 GB內(nèi)存的虛擬機(jī)兩臺(tái)。虛擬機(jī)中均搭載Ubuntu18.04系統(tǒng)。Kafka實(shí)驗(yàn)環(huán)境共有3個(gè)ZooKeeper服務(wù)、4個(gè)Kafka服務(wù)、3個(gè)排序節(jié)點(diǎn)服務(wù)、2個(gè)組織。每個(gè)組織一個(gè)證書頒發(fā)機(jī)構(gòu)(Certificate Authority,CA)服務(wù)、3個(gè)節(jié)點(diǎn),組織1兩個(gè)節(jié)點(diǎn),組織2一個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)CouchDB。背書策略設(shè)定為每個(gè)組織中至少一個(gè)背書節(jié)點(diǎn)參與背書。
圖9為實(shí)驗(yàn)BIM,包括家具、門、窗以及墻組件。預(yù)設(shè)修改用戶為User1、User2以及User3,每位用戶對(duì)應(yīng)一個(gè)節(jié)點(diǎn),User1和User2屬于組織1,User3屬于組織2。
圖9 實(shí)驗(yàn)BIMFig.9 Experimental BIM
系統(tǒng)性能測(cè)試相關(guān)指標(biāo)主要包括:節(jié)點(diǎn)提交交易到系統(tǒng)出塊的時(shí)間Btime、最長(zhǎng)出塊等待時(shí)間Btimeout、區(qū)塊最大交易數(shù)MMCount。其中,Btimeout與MMCount為系統(tǒng)的出塊條件,滿足其中之一的條件即可出塊。
2.2.1 出塊時(shí)間測(cè)試
針對(duì)同時(shí)間段內(nèi)多用戶節(jié)點(diǎn)并發(fā)交易的場(chǎng)景,進(jìn)行系統(tǒng)出塊時(shí)間測(cè)試,測(cè)試系統(tǒng)在處理多節(jié)點(diǎn)并發(fā)交易時(shí),出塊時(shí)間是否能夠滿足用戶日常應(yīng)用。測(cè)試環(huán)境設(shè)定如下:每個(gè)組織中的用戶節(jié)點(diǎn)都不停地發(fā)送1 000條BIM圖紙修改提交交易,測(cè)試系統(tǒng)的平均出塊時(shí)間是否滿足要求,即小于設(shè)定的最大出塊時(shí)間。本文按照Fabric聯(lián)盟鏈出塊常規(guī)設(shè)定Btimeout為2 s,本文系統(tǒng)共3個(gè)用戶節(jié)點(diǎn),故設(shè)定MMCount為3。
一共進(jìn)行20次測(cè)試,每次測(cè)試后計(jì)算平均出塊時(shí)間,結(jié)果如圖10所示。由圖10可知,出塊時(shí)間一開始呈現(xiàn)上升趨勢(shì),到第9次測(cè)試左右到達(dá)最大出塊時(shí)間,之后圍繞平均出塊時(shí)間上下波動(dòng),這種結(jié)果的原因是隨著測(cè)試次數(shù)的增加,大量的測(cè)試數(shù)據(jù)占用了較多的系統(tǒng)內(nèi)存,所以會(huì)對(duì)系統(tǒng)的性能產(chǎn)生一定影響。經(jīng)過20次測(cè)試,本文系統(tǒng)處理BIM圖紙修改提交交易的平均出塊時(shí)間為0.467 85 s,最大時(shí)間為0.55 s,遠(yuǎn)遠(yuǎn)小于設(shè)定的最大出塊時(shí)間2 s,故實(shí)驗(yàn)的出塊條件為達(dá)到區(qū)塊最大交易數(shù)。實(shí)驗(yàn)結(jié)果表明,本文系統(tǒng)能夠完善處理3個(gè)節(jié)點(diǎn)并發(fā)提交的3 000條交易請(qǐng)求,能夠滿足正常系統(tǒng)的應(yīng)用需求。
圖10 出塊時(shí)間Fig.10 Block generation time
2.2.2 系統(tǒng)處理速率測(cè)試
針對(duì)多用戶并發(fā)大量交易請(qǐng)求的場(chǎng)景,進(jìn)行系統(tǒng)處理速率測(cè)試,測(cè)試系統(tǒng)在處理多節(jié)點(diǎn)并發(fā)交易時(shí),系統(tǒng)在保證最大出塊時(shí)間內(nèi)穩(wěn)定出塊的條件下的處理速率。測(cè)試環(huán)境設(shè)定如下:每個(gè)組織中的節(jié)點(diǎn)同時(shí)發(fā)出400、800、1 200、1 600、2000、2400條交易請(qǐng)求,測(cè)試系統(tǒng)在保證最大出塊時(shí)間內(nèi)穩(wěn)定出塊的條件下的處理速率。
測(cè)試結(jié)果如圖11所示。由圖11可以看出,隨著用戶請(qǐng)求頻率的增加,系統(tǒng)處理速率最初是線性增加的,直到用戶請(qǐng)求頻率達(dá)到每秒1 600次交易時(shí),系統(tǒng)處理速率逐漸達(dá)到飽和,約為每秒1 568次交易。隨后系統(tǒng)處理速率由于數(shù)據(jù)量過大占用內(nèi)存等原因而開始下降。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)在保證最大出塊時(shí)間內(nèi)穩(wěn)定出塊的條件下的最大處理速率為每秒1 568次交易,完全可以滿足用戶日常的正常使用需求以及系統(tǒng)的使用標(biāo)準(zhǔn)。
圖11 系統(tǒng)處理速率Fig.11 System processing rate
區(qū)塊鏈?zhǔn)且环N通過去中心化和去信任化,依靠集體共同維護(hù)的數(shù)據(jù)庫(kù)技術(shù),作為近幾年的新興技術(shù)已經(jīng)在各行各業(yè)引起了廣泛的關(guān)注和研究熱潮。BIM通過數(shù)字化手段,將建筑的各種信息整合于一個(gè)三維模型信息數(shù)據(jù)庫(kù)中,與區(qū)塊鏈技術(shù)有很好的契合點(diǎn)。本文結(jié)合區(qū)塊鏈技術(shù),提出了基于區(qū)塊鏈的BIM圖紙多人協(xié)同創(chuàng)作系統(tǒng),將BIM圖紙整個(gè)創(chuàng)作過程中的所有創(chuàng)作后BIM圖紙信息上鏈存儲(chǔ),依靠區(qū)塊鏈可追溯、防篡改等特性,解決了BIM圖紙版本混亂、不易溯源以及存在數(shù)據(jù)安全風(fēng)險(xiǎn)等問題。最后,設(shè)計(jì)了相關(guān)實(shí)驗(yàn)對(duì)系統(tǒng)性能進(jìn)行了測(cè)試,測(cè)試結(jié)果表明系統(tǒng)具有良好的性能,能夠滿足用戶日常需求。本文提出的BIM圖紙多人創(chuàng)作系統(tǒng)可以為后續(xù)的版權(quán)劃分工作提供依據(jù),后續(xù)可以對(duì)此展開研究。