崔蘭清,石磊,崔文靜
(1.太極計算機股份有限公司,北京 100083;2.山東信息職業(yè)技術(shù)學院,山東 濰坊 261061)
產(chǎn)業(yè)園區(qū)建設(shè)是我國目前很多地區(qū)經(jīng)濟發(fā)展的核心抓手,園區(qū)服務(wù)面向的對象包括園區(qū)管理者、運營商、政府部門、企業(yè)和業(yè)主[1]。園區(qū)服務(wù)內(nèi)容一般包括物流服務(wù)與追溯服務(wù)、園區(qū)金融服務(wù)、推廣活動與跟蹤、商業(yè)綜合服務(wù)、桌面云服務(wù)、虛擬資源租用服務(wù)和中小企業(yè)軟件云服務(wù)等。多元的服務(wù)對象、種類繁多的園區(qū)服務(wù),對園區(qū)信息化提出很大挑戰(zhàn)。
智慧園區(qū)是指通過各類信息化技術(shù)的使用,為園區(qū)提供統(tǒng)一管理,應(yīng)急部署,互動展示等方面的有效管理和集成,并為園區(qū)內(nèi)各類服務(wù)對象提供各種信息化服務(wù),從而合理利用園區(qū)資源,提高園區(qū)成熟度,使園區(qū)運營者,環(huán)境和人形成有機的整體,促進園區(qū)可持續(xù)發(fā)展。
智慧園區(qū)面臨的普遍問題是存在大量孤立的煙囪式系統(tǒng),數(shù)據(jù)不互通,業(yè)務(wù)難融合。各類園區(qū)系統(tǒng)數(shù)據(jù)很多來自園區(qū)服務(wù)對象,這些數(shù)據(jù)有的涉及園區(qū)服務(wù)對象的業(yè)務(wù)運行數(shù)據(jù),具有隱私保護的需要;有的關(guān)注數(shù)據(jù)來源和流轉(zhuǎn)過程中的真實性、可靠性。
區(qū)塊鏈技術(shù)在一些園區(qū)業(yè)務(wù)系統(tǒng)建設(shè)中得到應(yīng)用,產(chǎn)生了很多區(qū)塊鏈系統(tǒng),這些系統(tǒng)底層協(xié)議各不相同,正在形成一個個新的數(shù)據(jù)孤島。無論這些孤島是基于相同的底層系統(tǒng)還是不同的底層系統(tǒng),其數(shù)據(jù)互通都非常困困難,因此,迫切需要解決多鏈之間融合的問題,從而實現(xiàn)不同鏈園區(qū)系統(tǒng)之間的數(shù)據(jù)共享互通。本文采用跨鏈技術(shù)解決這一問題。
區(qū)塊鏈數(shù)據(jù)互通,就是實現(xiàn)相對獨立的不同區(qū)塊鏈系統(tǒng)之間數(shù)據(jù)互通。目前,主要挑戰(zhàn)有[2]:
生效的原子性。對兩個網(wǎng)絡(luò)分別發(fā)起不同交易,如何保證要么都不生效,要么都生效的問題。一般通過經(jīng)典的兩階段提交來完成,兩個交易互為錨點。如果超過一段時間錨點仍然無效,則進行交易回滾。
錨點有效性校驗。由于所有區(qū)塊鏈節(jié)點對錨點的有效性達成沒有分歧的判斷,因此不能依賴遠程訪問證明,這樣可能會造成驗證難的問題。
合約驗證的不確定性。區(qū)塊鏈系統(tǒng)一般會在每個節(jié)點驗證交易,但如果一個合約嵌入了外部鏈的合約調(diào)用,則在驗證階段,需要確保各個節(jié)點驗證的結(jié)果的一致性,外鏈的穩(wěn)定性也會對此產(chǎn)生影響。
目前跨鏈技術(shù)主要有公證人模式、側(cè)鏈/中繼模式和哈希鎖定模式。一般通過哈希時間鎖可以保證跨鏈交易的原子性。
根據(jù)不同鏈的交易是異步生效還是同步生效,可以分為異步模式和同步模式。
公證人模式由一個或者一組節(jié)點作為公證人參與到兩個區(qū)塊鏈,進行雙方交易的收集和驗證。優(yōu)點是簡單,缺點是弱中心化。
側(cè)鏈/中繼鏈模式是BlockStream于2014年提出的一種方案。與公證人模式主要的區(qū)別是其驗證是在目標鏈中進行,通過雙向錨定方式實現(xiàn)資產(chǎn)在不同鏈之間轉(zhuǎn)移。目標鏈的驗證方式一般各不相同。
異步模式是指發(fā)起調(diào)用的是一個函數(shù),處理調(diào)用結(jié)果的是另一個回調(diào)函數(shù)。以太坊上很多預(yù)言機類DApp就采用此模式。異步調(diào)用模式下,一個完整流程需要3筆交易,其缺點是業(yè)務(wù)邏輯被迫拆成很多碎片,交互次數(shù)多[3]。
同步模式下,一般區(qū)塊鏈的上的合約在每個節(jié)點都會重復(fù)執(zhí)行,很多區(qū)塊鏈系統(tǒng),例如Fabric采取的是預(yù)執(zhí)行再提交的方式,如何保證重復(fù)執(zhí)行的結(jié)果確定性,且具備冪等性是一個重要問題。
根據(jù)智慧園區(qū)業(yè)務(wù)應(yīng)用類型多樣、應(yīng)用規(guī)模差異大、應(yīng)用變動較頻繁等特點,采用輕量級易于編程的跨鏈框架,便于適用于不同的智慧園區(qū)跨鏈應(yīng)用場景。智慧園區(qū)跨鏈數(shù)據(jù)共享場景主要包括只讀事務(wù)場景跨鏈、非事務(wù)場景跨鏈。
互通框架包括3層:基礎(chǔ)庫層、賬本層和合約層。基礎(chǔ)庫層和賬本層是內(nèi)核層,提供跨區(qū)塊鏈域名解析協(xié)議、Markle Proof校驗、異構(gòu)區(qū)塊頭解析協(xié)議、事務(wù)預(yù)鎖定等基礎(chǔ)能力。合約層包括區(qū)塊頭管理合約、鏈名解析合約、去中心化身份管理等。賬本層包括事務(wù)預(yù)鎖定、解鎖生效機制和超級回滾機制等實現(xiàn)跨鏈賬本操作的原子性[4]。
跨鏈涉及到不同鏈資源的互操作,由于不同的鏈的協(xié)議互不相同,通過定義跨鏈尋址協(xié)議,實現(xiàn)對不同鏈的資源進行統(tǒng)一定義,結(jié)合鏈名解析合約,可以實現(xiàn)對任何協(xié)議鏈的統(tǒng)一資源尋址。
跨鏈尋址協(xié)議定義如下:
chain_scheme:跨鏈鏈類型標識符,用于標識鏈的具體類型;
chain_name:所跨鏈的鏈名,定位某一個具體的鏈,同一Scheme下鏈名是唯一的;
path:不同Scheme的鏈類型擴展字段;
query:用于定位某個鏈內(nèi)的某項資源,比如對于超級鏈,聲明調(diào)用的合約名、方法名和參數(shù)等信息。
為了實現(xiàn)跨鏈請求,需要在鏈名跨鏈尋址協(xié)議基礎(chǔ)上,在跨鏈發(fā)起的原鏈上部署鏈名解析合約,對鏈名進行解析。解析合約主要包括如下內(nèi)容:
注冊一個網(wǎng)絡(luò),同時包含網(wǎng)絡(luò)初始meta信息;
定義目標網(wǎng)絡(luò)meta信息、背書信息和目標網(wǎng)絡(luò)CrossQuery完整信息;
更新網(wǎng)絡(luò)的meta信息,例如修改網(wǎng)絡(luò)的背書策略;
根據(jù)網(wǎng)絡(luò)名解析所有背書節(jié)點;
插入一個背書節(jié)點;
更新背書節(jié)點信息;
刪除背書節(jié)點。
只讀事務(wù)場景是從一個園區(qū)應(yīng)用鏈能夠查詢到另一個鏈的數(shù)據(jù),并且能夠滿足穩(wěn)定性、冪等性和安全性。典型場景如園區(qū)人員身份認證、園區(qū)企業(yè)資質(zhì)認證等。采用目標鏈背書的方式,包括預(yù)執(zhí)行再提交的二階段處理過程。
預(yù)執(zhí)行階段,原鏈節(jié)點遠程訪問目標鏈背書服務(wù),背書服務(wù)預(yù)執(zhí)行該合約,并且對合約結(jié)果進行簽名背書,原鏈會將該合約的結(jié)果和背書信息寫進寫集中一個特殊的bucket中。
在提交階段,不需要再進行遠程調(diào)用,原鏈節(jié)點在驗證合約時,先解析出該特殊的寫集中的跨鏈結(jié)果和背書簽名信息,以填充合約執(zhí)行的上下文環(huán)境,當執(zhí)行到只讀跨鏈原語時,原鏈節(jié)點不再進行遠程調(diào)用,而是驗證預(yù)執(zhí)行的背書簽名,當簽名滿足背書策略的要求后,就直接使用寫集中的跨鏈合約結(jié)果繼續(xù)后續(xù)的合約邏輯,否則驗證失敗[5]。
非事務(wù)場景跨鏈是指跨鏈行為并不是要求不同鏈上的交易具備事務(wù)性,即不要求不同鏈上的跨鏈交易同時生效或同時失敗,跨鏈交易只對當時被跨鏈的交易狀態(tài)進行確認,并根據(jù)目標交易狀態(tài)執(zhí)行交易后續(xù)操作。
非事務(wù)跨鏈的典型園區(qū)應(yīng)用場景,例如園區(qū)不同企業(yè)資產(chǎn)跨鏈轉(zhuǎn)移等,主要強調(diào)跨鏈交易的存在性證明,不要求跨鏈交易的原子性。
非事務(wù)跨鏈通過中繼機制實現(xiàn),通過對目標鏈的區(qū)塊頭同步,以及Markle驗證技術(shù),可以做到在原鏈上直接驗證目標鏈的交易是否存在。
中繼機制主要包括鏈上中繼合約和中繼同步進程。鏈上中繼合約是部署在原鏈上的一個智能合約,保存目標鏈的所有塊頭信息,并提供基于Markle證明的目標鏈交易存在性驗證。在目標鏈和原鏈之間,有一個或多個中繼進程,持續(xù)監(jiān)聽目標鏈的最新出塊信息,并抽取出塊頭信息寫入。
鏈上中繼合約是跨鏈存在性證明的核心,提供對目標鏈中的區(qū)塊頭同步存儲,并通過Markle驗證技術(shù)提供交易查詢接口。鏈上中繼合約主要解決三個問題,交易的真實性、及時性證明、區(qū)塊頭分叉管理。真實性證明證明交易確實存在,主要通過Merkle Proof證明交易是否真的存在于鏈中以及是否在主干上。及時性證明即證明交易是否確認,跟目標鏈采用的共識算法相關(guān)。對于同步Byzantine類共識算法,及時性是內(nèi)置的,只要交易在區(qū)塊頭中,那么交易必定在原鏈處于上鏈狀態(tài)。對于Pow類共識算法,一般要求交易所在塊距主干最新高度相差6個塊以上。區(qū)塊頭分叉管理即對同步的區(qū)塊頭按照樹形結(jié)構(gòu)維護依賴關(guān)系,并根據(jù)目標鏈的主干選擇算法即使調(diào)整目標鏈的主干區(qū)塊狀態(tài)。
智慧園區(qū)應(yīng)用場景多樣,不同區(qū)塊鏈系統(tǒng)底層協(xié)議和框架也在不斷發(fā)展。智慧園區(qū)跨鏈數(shù)據(jù)共享需要增強不同區(qū)塊鏈協(xié)議的兼容能力,并進一步輕量化框架,便于跨鏈數(shù)據(jù)互通和共享的快速實施和靈活運維,這也是未來工作的重要方向。