林飛龍, 陳中育, 鄭忠龍, 馬永進, 潘日敏, 夏勝楠
(浙江師范大學 數(shù)學與計算機科學學院,浙江 金華 321004)
區(qū)塊鏈,最早是由Nakamoto[1]在其發(fā)表的比特幣白皮書中提出的.作為比特幣的底層技術,區(qū)塊鏈建立了可追溯、可說明的基礎架構,保障比特幣的數(shù)字貨幣屬性.區(qū)塊鏈本質上是一個按時間順序存儲的分布式賬本,其通過一系列技術實現(xiàn)賬本數(shù)據(jù)的良好屬性.基于工作量證明(PoW)的共識協(xié)議保證了分布式網(wǎng)絡環(huán)境下數(shù)據(jù)區(qū)塊的有序生成,并維護冗余存儲的區(qū)塊鏈賬本的一致性.哈希函數(shù)和公鑰密碼學技術解決了時間序列賬本的先后可驗證性,從而保證了交易記錄的不可抵賴性和不可篡改性.智能合約技術將業(yè)務轉化成為區(qū)塊鏈上的可執(zhí)行代碼,為實現(xiàn)各種應用提供了很大的自由度.區(qū)塊鏈技術的出現(xiàn),為數(shù)字經(jīng)濟環(huán)境下優(yōu)化資源配置,提升業(yè)務透明度和公正性,以及降低服務成本和信任成本提供了新的解決思路,引起了各行業(yè)廣泛的興趣[2-3].例如,在交通領域,文獻[4]提出了基于區(qū)塊鏈的智能交通體系架構,實現(xiàn)數(shù)據(jù)交互的安全性和可信性.在車聯(lián)網(wǎng)通信技術的可靠性設計中,區(qū)塊鏈的安全特性可用于實現(xiàn)網(wǎng)絡通信過程中密鑰的安全管理和分布式協(xié)商[5-6].隨著新能源汽車產(chǎn)業(yè)的興起,區(qū)塊鏈技術還廣泛應用于實現(xiàn)車與智能電網(wǎng)、車與車之間的電能定價與交換[7-8].文獻[9]設計了雙層區(qū)塊鏈架構的車輛網(wǎng)絡,信息層區(qū)塊鏈網(wǎng)絡用于實現(xiàn)車聯(lián)網(wǎng)信息發(fā)布與信息交互,能源層區(qū)塊鏈網(wǎng)絡用于記錄能源交換信息及交易支付,并且通過設計跨鏈技術實現(xiàn)雙層區(qū)塊鏈的可信交互.文獻[10]考慮了車聯(lián)網(wǎng)與微網(wǎng)可再生能源的電能交互,利用區(qū)塊鏈技術承載了分布式可再生能源與新能源汽車之間的價格博弈和電能交互合約.
筆者聚焦城市停車行業(yè).在日常的城市生活中,尋找車位常常是一種耗時耗力的糟糕經(jīng)歷;停車管理也已經(jīng)成為城市靜態(tài)交通的瓶頸問題.國家發(fā)展與改革委員會報告數(shù)據(jù)[11]顯示:當前城市小汽車與停車位的比例為1.0∶0.8,停車位缺口5 000萬個;且隨著汽車保有量的增長,這個缺口還在擴大.事實上,停車資源未必短缺,而是現(xiàn)有的資源沒有得到有效利用.一方面,沒有有效的方法讓司機及時獲取可用停車信息;另一方面,沒有平臺可以開放大量的私有停車資源.因此,如何有效地利用現(xiàn)有的停車資源也是十分重要的課題.
針對上述問題,本文提出了一種基于區(qū)塊鏈的停車資源共享網(wǎng)絡(簡稱停車鏈),其創(chuàng)新和貢獻如下:第一,給出了停車共享網(wǎng)絡架構,利用現(xiàn)有設備設施,包括聯(lián)網(wǎng)車輛、停車管理實體、智能手機等,構建停車鏈網(wǎng)絡基礎設施,從而節(jié)省區(qū)塊鏈基礎設施的建設成本.停車鏈是開放性網(wǎng)絡,私有停車資源(例如私人停車場和非開放的政府停車場)可以方便、靈活地加入?yún)^(qū)塊鏈實現(xiàn)共享服務并獲得一定的回報,這將極大地有利于緩解停車難的問題.第二,設計了基于信用的共識協(xié)議(PoC),PoC避免了工作量證明協(xié)議(PoW)中的巨大算力消耗,也改善了權益證明協(xié)議(PoS)的可靠性.第三,各種停車相關的服務通過智能合約設計來定義和執(zhí)行,保證服務的可信賴性、透明性和公平性,并且保證了各方權益,這將有效地減少在傳統(tǒng)方式中存在的爭議.最后,本文基于以太坊技術[12]構建了停車鏈的原型系統(tǒng),在停車鏈原型系統(tǒng)上進行了大量的實驗,驗證了所提出停車鏈的有效性和可行性,也揭示了停車鏈的服務性能及未來商業(yè)價值.
現(xiàn)有互聯(lián)網(wǎng)環(huán)境下,車載信息互聯(lián)系統(tǒng)、移動智能手機、停車場管理設施構成了分布式網(wǎng)絡,成為目標停車鏈的硬件基礎設施,如圖1所示.停車鏈即可在尚未形成體系的現(xiàn)有網(wǎng)絡上構建和開發(fā),從而降低了區(qū)塊鏈基礎設施的建設成本.
特別地,將現(xiàn)有的硬件實體分為3個角色來承載停車鏈,分別是輕節(jié)點、全功能節(jié)點和邊緣服務節(jié)點.車輛用戶的移動終端資源有限,通常承擔輕節(jié)點的角色.停車場管理計算機擁有強大的計算和存儲資源,并且可以連續(xù)工作,因此承擔全功能節(jié)點的角色.引入邊緣服務節(jié)點是為移動輕節(jié)點提供接入服務.這個角色既可以獨立部署,也可以由停車場管理計算機承擔.當然,作為一個開放的網(wǎng)絡,停車鏈上的節(jié)點和角色都不是嚴格指定的,每個節(jié)點都允許自由地加入或者退出網(wǎng)絡.
停車鏈的軟件設計從邏輯上分為2層,即區(qū)塊鏈層和服務層(如圖2所示).對于區(qū)塊鏈層,首先提出了一種新的共識協(xié)議,該協(xié)議利用區(qū)塊授權機制進行區(qū)塊生成管理.區(qū)塊授權者通過選舉產(chǎn)生,凡是在系統(tǒng)中積累一定信譽的用戶,均可以申請成為授權者.其次,根據(jù)停車行業(yè)的相關業(yè)務特點,開發(fā)了多種智能合約,如停車信息發(fā)布合約、停車預約合約、停車服務合約等.通過智能合約,這些服務可以以一種透明并且可信任的方式運行.在服務層上,通過開發(fā)分布式應用程序(DApps)來提供服務接口.如圖2所示,車主微信小程序是為車輛用戶提供停車服務而開發(fā)的.邊緣服務DApp為輕節(jié)點提供區(qū)塊鏈相關服務.停車共享管理DApp處理停車資源的發(fā)布、更新、停車服務等.
圖1 基于區(qū)塊鏈的停車共享網(wǎng)絡示意圖 圖2 停車鏈軟件系統(tǒng)架構
本文提出的基于信用的共識機制(PoC),一方面,采用區(qū)塊授權產(chǎn)生機制避免PoW算力消耗;另一方面,采用信用積分作為區(qū)塊授權節(jié)點選取的標準,有助于提高系統(tǒng)的可靠性.
圖3從區(qū)塊鏈交易流程的角度給出了一個PoC共識流程示意圖,具體描述如下.
圖3 PoC共識過程示意圖
1)交易提出.任何用戶通過調用智能合約提出一個服務交易.在填寫完智能合約要求的參數(shù)后,用戶簽署交易并將其發(fā)送到區(qū)塊鏈網(wǎng)絡.
2)交易驗證.接收到交易的其他節(jié)點將對交易進行驗證,包括檢查交易提出者的簽名和賬戶余額、智能合約使用的規(guī)范性、交易費用等.如果成功地驗證了交易,就將交易傳播給它的相鄰節(jié)點;否則,交易將被丟棄.
3)區(qū)塊生成.授權組中的節(jié)點會收集區(qū)塊鏈網(wǎng)絡中的交易信息.輪值授權節(jié)點會將未封裝的交易打包進一個區(qū)塊中.授權組的狀態(tài)更新和授權節(jié)點的信用評分也記錄到區(qū)塊中(授權組機制將在后面討論).然后,輪值授權節(jié)點簽署新的區(qū)塊并將其廣播到區(qū)塊鏈網(wǎng)絡.
4)區(qū)塊驗證.任何接收到新區(qū)塊的用戶都可以對其進行驗證,包括所涉及交易的有效性、授權組的更新、授權節(jié)點的信用評分和輪值授權節(jié)點的合法性.如果用戶成功地驗證了區(qū)塊,就將該區(qū)塊連接到區(qū)塊鏈賬本并存儲在本地.當大多數(shù)的網(wǎng)絡節(jié)點成功地驗證了區(qū)塊之后,交易的共識證明和新的區(qū)塊就完成了.
獲取信用分數(shù)的方法有2種:交易積分和區(qū)塊授權積分.在該子系統(tǒng)中,作為交易發(fā)起者的用戶在交易成功完成之后可以獲得一定的信用分數(shù).此外,作為授權人的用戶在成功生成一個區(qū)塊后,也可以獲得一個固定的信用分數(shù)作為報酬.信用評分子系統(tǒng)為評價長期留在區(qū)塊鏈網(wǎng)絡中的用戶的可靠性與可信度提供了有價值的參考.它還為授權組機制設計提供了參考標準.
授權組機制解決2個問題:如何確定一個用戶有資格成為授權節(jié)點,以及哪個授權節(jié)點負責當前區(qū)塊的生成.為了解決上述問題,筆者設計了一套授權組機制規(guī)則:
1)授權組初始化.在創(chuàng)世區(qū)塊(第一個區(qū)塊)中選定一組授權節(jié)點,并且所有的授權節(jié)點的地址都被記錄到創(chuàng)世區(qū)塊的“extra”字段中(在以太坊中,一個名為extra的數(shù)據(jù)字段被保留在區(qū)塊頭中,區(qū)塊生成節(jié)點可以寫入任意信息),初始化每個授權節(jié)點的信用評分為KCth,其中,K是一個正整數(shù),Cth是判斷一個節(jié)點是否有資格申請成為授權節(jié)點的信用門限.初始信用評分允許授權組在初始階段服務較長時間.此外,每個授權節(jié)點的任職時間tD也被記錄到extra字段中.
2)授權權限分配.當區(qū)塊鏈開始工作時,授權節(jié)點收集和驗證交易,并根據(jù)區(qū)塊打包規(guī)則將其中的一些交易封裝到一個區(qū)塊中.PoC協(xié)議設計一個簡單的算法來指定最新區(qū)塊的輪值(in-turn)授權節(jié)點.Nau表示授權組節(jié)點數(shù)量.所有授權組節(jié)點按照其地址的大小順序進行排序.指定排列順序等于h%Nau(其中,h表示當前區(qū)塊高度,%表示求余數(shù)運算)的節(jié)點為當前區(qū)塊的in-turn授權節(jié)點;其他的全為off-turn節(jié)點.這個算法保證了在每個區(qū)塊周期中只有一個in-turn授權節(jié)點.in-turn授權節(jié)點可以立即給區(qū)塊進行數(shù)字簽名,并將其廣播到區(qū)塊鏈網(wǎng)絡.考慮到in-turn授權節(jié)點可能離線,在延遲一個隨機時間后,off-turn節(jié)點也允許簽名和廣播它們各自的區(qū)塊.從而保障了in-turn授權節(jié)點的優(yōu)先權和區(qū)塊生成的健壯性.為了進一步保證授權權限分配的公正性,每個授權節(jié)點不能在Nau/2個區(qū)塊周期內(nèi)簽署超過1個區(qū)塊.
3)區(qū)塊簽名和驗證.一旦授權節(jié)點獲得產(chǎn)生新區(qū)塊的權利,便將更新授權組成員的信用積分ci和各成員的任職時間tD.然后,利用私鑰在新區(qū)塊上簽名.區(qū)塊的簽名也被記錄在區(qū)塊頭的extra字段中,用于區(qū)塊驗證.驗證過程如下:當一個節(jié)點接收到新的區(qū)塊時,提取簽名并使用spec256k1橢圓曲線密碼學反解計算公鑰;然后檢查來自公鑰的地址是否存在于區(qū)塊頭的extra數(shù)據(jù)中,并且對應的授權人是否具有區(qū)塊生成資格.如果有,那么新的區(qū)塊將會被接受成為有效區(qū)塊.
4)授權節(jié)點資格.一個節(jié)點通過向區(qū)塊鏈網(wǎng)絡發(fā)起提議,申請成為授權節(jié)點.收到提議的其他授權節(jié)點將會對新申請者的信用積分進行評估,如果申請者的信用積分超過了信用門限,那么它的提議就會被記錄并添加到本地提議池中.在每個區(qū)塊周期,如果提議池不是空的,那么當前in-turn節(jié)點就會隨機給提議池中的一個申請者進行投票,并在區(qū)塊頭中聲明這個申請者所獲得的投票結果.每個授權節(jié)點維護一個本地選票數(shù)據(jù)庫,用于統(tǒng)計申請節(jié)點的選票結果.當收到一個新的區(qū)塊時,每個授權節(jié)點會檢查投票結果并更新本地選票統(tǒng)計.一旦一個申請者獲得了超過Nau/2的票數(shù),這個申請者就成為一個新的授權節(jié)點.
在停車鏈中,服務主要由智能合約定義和執(zhí)行.智能合約很好地保證了交易的透明性和公平性.圖4給出了停車鏈的智能合約架構.Contract車輛用戶管理和Contract停車場用戶管理分別用于不同用戶類別的管理,提供用戶賬號管理和對應的實體管理.Contract停車服務、Contract停車預約和Contract停車信息發(fā)布分別處理停車共享相關業(yè)務.用戶可以通過DApp(分布式應用程序)調用智能合約,實現(xiàn)停車管理和服務.
圖4 停車鏈智能合約架構
本節(jié)對停車鏈的3個服務智能合約進行解析.
1)Contract停車信息發(fā)布.該合約是為了停車場用戶發(fā)布新的停車資源或者更新停車場狀態(tài)而設計的.該合約提供了2個函數(shù),分別進行停車場創(chuàng)建和停車狀態(tài)更新.利用停車場創(chuàng)建函數(shù),該合約允許用戶創(chuàng)建新的停車場,并自動指定該用戶為該新停車場的所有者.在停車狀態(tài)更新函數(shù)中,通過智能合約require函數(shù)成功檢查停車場用戶的身份后,可以更新指定停車場的狀態(tài),例如空位和費用.
2)Contract停車預約.該合約是為了車輛用戶預訂或者取消停車位置而設計的.該合約提供了2個函數(shù),分別進行停車預約和取消預約.在停車預約函數(shù)中,在成功檢查車輛用戶身份并驗證目標停車場的可預訂狀態(tài)之后,車輛用戶在指定時間預訂停車位置,并更新它的預訂狀態(tài).如果車輛用戶想要取消停車訂單,那么智能合約中的取消預約函數(shù)就將被調用,其中需要檢查車輛用戶的身份.在通過區(qū)塊鏈網(wǎng)絡達成車輛用戶提出的停車訂單交易的共識后,目標停車節(jié)點將會確認停車預訂服務.
3)Contract停車服務.該合約是為處理車輛用戶和停車場之間的停車服務設計的.該合約有2個函數(shù),車輛進入管理和車輛離開管理.如果檢測到準備進入停車場的車輛,停車場節(jié)點就將調用Contract停車服務.車輛進入管理函數(shù)負責檢查車輛用戶的余額,要求用戶在賬戶中有一定的余額.然后,如果發(fā)現(xiàn)該汽車有預約停車的訂單,那么就允許其進入停車場,并更新相應的屬性;如果沒有訂單記錄,但停車場有空位,車輛也會被允許進入停車場停車.否則,返回“停車場已滿”消息.當檢測到車輛準備離開停車場時,停車場節(jié)點會再次調用Contract停車服務并運行車輛離開管理函數(shù).在驗證停車相關屬性后,將會自動結算停車服務費,并將車輛屬性進行更新,公布此次服務交易中車輛用戶和停車授權節(jié)點的信用分數(shù).
停車鏈原型建立在不同的硬件組件之上,如表1所示.為了保證停車鏈的穩(wěn)定性,有10個全功能區(qū)塊鏈節(jié)點連續(xù)工作.它們由4臺普通計算機(每臺設置2個容器引擎運行2個區(qū)塊鏈節(jié)點)、1臺阿里巴巴云服務器、1臺帶有嵌入式控制器的道閘組成.計算機節(jié)點和云服務器同時也承載云邊緣服務器的角色,為移動用戶提供停車鏈服務接口.為了對服務請求提供及時的響應,區(qū)塊的生成周期設置為5 s.原型系統(tǒng)設置有4個位于浙江師范大學的校園停車場,分別為ZJNU001—ZJNU004.
表1 停車鏈原型的硬件組件
為了方便使用,本文為普通車輛用戶和停車場用戶開發(fā)了基于微信小程序的DApps.使用移動智能手機通過微信可以方便地裝載DApps.圖5展示了停車鏈用戶DApp的部分頁面.表2列出的所有服務都通過了本工作中的功能測試,驗證了停車鏈的可用性.
圖5 基于微信小程序的停車鏈DApp
分 類服 務測試結果車輛用戶錢包操作:充值和退款√車輛管理:添加或刪除一個車牌√停車預訂服務:預訂或取消預訂√停車服務√停車授權用戶停車管理:添加或刪除√停車預訂處理√停車服務管理√停車狀態(tài)更新√
本節(jié)對停車鏈原型進行了性能測試,主要考慮了3個標準:1)每個區(qū)塊中封裝的交易數(shù)量,代表停車鏈原型的服務能力;2)交易延遲,代表服務處理速度;3)交易成功率.考慮到測試強度,選擇8個節(jié)點同時發(fā)送周期為180 ms的交易.表3給出了4個服務獨立測試及多任務綜合測試的測試結果.從結果看出,由于交易數(shù)據(jù)的大小和計算步驟的不同,不同服務的性能表現(xiàn)略有不同.簡單的服務,例如錢包操作和車輛管理,每個區(qū)塊平均交易延遲更低.相對而言,停車訂單服務和停車服務的服務性能略低.交易成功率幾乎為100%,測試過程中沒有發(fā)生故障.
表3 停車鏈的性能測試結果
接下來,通過設置不同的交易發(fā)送周期來評估不同交易強度下的系統(tǒng)性能.在本測試中選擇了混合測試,結果如圖6所示.隨著交易發(fā)送周期從200 ms增加到500 ms,區(qū)塊鏈網(wǎng)絡負載下降.相應地,區(qū)塊封裝交易數(shù)量和交易延遲降低了.本文還在原型中測試了交易發(fā)送周期小于180 ms的情況,測試結果發(fā)現(xiàn):網(wǎng)絡在這種設置下被阻塞,并且每個授權節(jié)點的等待隊列增加到無窮大.由于區(qū)塊鏈需要共識過程實現(xiàn)賬本數(shù)據(jù)的可靠性,這事實上造成了區(qū)塊鏈的服務性能和服務體驗的不足.這也是區(qū)塊鏈發(fā)展研究的熱點問題.
本文提出了一個基于區(qū)塊鏈技術的新型停車資源共享方案——停車鏈.在停車鏈中,提出了一種新的共識協(xié)議PoC,利用信用子系統(tǒng)和授權組機制負責區(qū)塊生成.PoC避免了算力消耗,并且保證了停車鏈的可信任性和可靠性.設計了各種智能合約實現(xiàn)停車鏈的停車資源共享和停車服務.基于以上工作,開發(fā)了停車鏈原型,并通過在原型上的運行結果證明了停車鏈的可用性和良好的性能.我們有充分的理由相信,停車鏈在解決城市靜態(tài)交通問題上有很大的潛力,并且?guī)缀鯖]有任何開銷.今后將重點研究停車鏈的大規(guī)模測試和智能合約的安全問題.
圖6 不同交易發(fā)送周期下的區(qū)塊鏈網(wǎng)絡性能表現(xiàn)