本發(fā)明涉及區(qū)塊鏈技術(shù)、智能合約、異步任務(wù)技術(shù)及并發(fā)部署技術(shù),尤其涉及一種面向區(qū)塊鏈的通用服務(wù)中間件系統(tǒng)。
背景技術(shù):
區(qū)塊鏈技術(shù),區(qū)塊鏈?zhǔn)且环N新型去中心化協(xié)議,能安全地存儲(chǔ)數(shù)字貨幣交易或其他數(shù)據(jù),信息不可偽造和篡改,區(qū)塊鏈上的交易確認(rèn)由區(qū)塊鏈上的所有節(jié)點(diǎn)共同完成,由共識(shí)算法保證其一致性,區(qū)塊鏈上維護(hù)一個(gè)公共的賬本,用于存儲(chǔ)區(qū)塊鏈網(wǎng)絡(luò)上所有用戶的余額,公共賬本位于存儲(chǔ)區(qū)塊上任何節(jié)點(diǎn)可見,從而保證其不可偽造和篡改。
智能合約,區(qū)塊鏈上的智能合約是指由solidity編寫和編譯并運(yùn)行于區(qū)塊鏈上的一串二進(jìn)制代碼,我們可以通過智能合約實(shí)現(xiàn)在區(qū)塊鏈上的數(shù)據(jù)存儲(chǔ)、讀寫以及一些邏輯操作,因此一些基于區(qū)塊鏈的應(yīng)用是利用智能合約完成的。
異步任務(wù)技術(shù),異步與同步是通信雙方的兩種交互方式,同步是指通信的發(fā)起方主動(dòng)等待或者輪詢通信的結(jié)果,異步是指通信的接收方負(fù)責(zé)通知通信的發(fā)起方任務(wù)的完成情況。異步任務(wù)技術(shù)適用于對(duì)實(shí)時(shí)響應(yīng)需求不高而且比較耗時(shí)的操作。
并發(fā)部署技術(shù),當(dāng)多個(gè)執(zhí)行體并發(fā)地部署一個(gè)智能合約的時(shí)候,可能會(huì)導(dǎo)致合約的重復(fù)部署;并發(fā)部署技術(shù)使用鎖控制部署線程,當(dāng)線程準(zhǔn)備部署一個(gè)智能合約的時(shí)候,先要求獲取一個(gè)部署鎖,獲取部署鎖成功的線程才能繼續(xù)部署合約的后續(xù)步驟,否則就需要阻塞等待。當(dāng)線程獲得部署鎖后,要檢查合約是否已經(jīng)被部署。
不同區(qū)塊鏈服務(wù)的供應(yīng)商提供的平臺(tái)服務(wù)風(fēng)格迥異,客戶方直接使用平臺(tái)服務(wù)需要通過平臺(tái)的sdk,客戶端等,在這種情況下要處理較多繁瑣的技術(shù)細(xì)節(jié),例如檢查網(wǎng)絡(luò)連接,連接失敗重試,配置信息的裝載,智能合約的編譯、部署,合約調(diào)用后等待交易確認(rèn)的輪詢等等,這些繁瑣的技術(shù)細(xì)節(jié)因?yàn)槠脚_(tái)的不同而不同,客戶方在這種情況下想構(gòu)建基于區(qū)塊鏈服務(wù)的跨平臺(tái)、可復(fù)用的軟件系統(tǒng)幾乎不可能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為上述難題提供解決方案,提供一種面向區(qū)塊鏈的通用服務(wù)中間件系統(tǒng),上面提到的技術(shù)細(xì)節(jié),如檢查網(wǎng)絡(luò)連接,連接失敗重試,配置信息裝載,智能合約的編譯、部署,合約調(diào)用后等待交易確認(rèn)的輪詢等操作,都被封裝為中間件系統(tǒng)中的模塊服務(wù),并且對(duì)區(qū)塊鏈服務(wù)調(diào)用方不可見。區(qū)塊鏈服務(wù)調(diào)用方只需要使用中間件系統(tǒng),并且加上適當(dāng)?shù)呐渲?,就能方便地把同一套業(yè)務(wù)代碼復(fù)用到不同的區(qū)塊鏈平臺(tái)上。
為了達(dá)到上述目的,本發(fā)明所采用的技術(shù)方案如下:一種面向區(qū)塊鏈的通用服務(wù)中間件系統(tǒng),包括:
接口封裝模塊,接口封裝模塊對(duì)外提供統(tǒng)一的平臺(tái)調(diào)用接口,接口封裝模塊通過區(qū)塊鏈平臺(tái)驅(qū)動(dòng)器來調(diào)用具體的平臺(tái)調(diào)用,其對(duì)應(yīng)的驅(qū)動(dòng)器通過接入配置化模塊進(jìn)行管理配置,并且由接入自動(dòng)化模塊在中間件系統(tǒng)啟動(dòng)時(shí)從外部導(dǎo)入;驅(qū)動(dòng)器中包含具體的平臺(tái)調(diào)用細(xì)節(jié),由區(qū)塊鏈平臺(tái)的服務(wù)提供商實(shí)現(xiàn)并發(fā)布;
接入配置化模塊,接入配置化模塊在通用服務(wù)中間件系統(tǒng)中以插件形式提供服務(wù),負(fù)責(zé)管理區(qū)塊鏈服務(wù)調(diào)用方調(diào)用區(qū)塊鏈平臺(tái)時(shí)使用的所有配置信息;接入配置化模塊在接入配置信息中指定接口封裝模塊中驅(qū)動(dòng)器的資源地址,自動(dòng)從遠(yuǎn)程資源服務(wù)器中下載資源并導(dǎo)入到中間件系統(tǒng);或者,接入配置模塊指定導(dǎo)入本地驅(qū)動(dòng)器;
接入自動(dòng)化模塊,接入自動(dòng)化模塊通過調(diào)用接入配置化模塊獲取接入配置信息,然后自動(dòng)進(jìn)行網(wǎng)絡(luò)環(huán)境檢查、網(wǎng)絡(luò)連接重試、平臺(tái)接入認(rèn)證,把接入流程完全自動(dòng)化;
智能合約自動(dòng)部署模塊,智能合約自動(dòng)部署模塊讀取接入配置化模塊中的配置信息,如果接入配置化模塊中查找不到智能合約源碼相關(guān)信息,智能合約自動(dòng)部署模塊將會(huì)從默認(rèn)路徑中讀取智能合約源碼,然后連接區(qū)塊鏈平臺(tái)進(jìn)行合約編譯;智能合約編譯后自動(dòng)生成部署合約所需的字節(jié)碼或者二進(jìn)制文件,智能合約自動(dòng)部署模塊將會(huì)自動(dòng)讀取生成的字節(jié)碼或二進(jìn)制文件并在區(qū)塊鏈平臺(tái)上部署智能合約,而后獲取平臺(tái)返回的合約地址;
交易消息推送模塊,服務(wù)調(diào)用方在發(fā)起交易或者查詢合約數(shù)據(jù)的時(shí)候,區(qū)塊鏈平臺(tái)需要經(jīng)過節(jié)點(diǎn)共識(shí)來確認(rèn)交易,交易消息推送模塊在交易等待時(shí)間內(nèi),負(fù)責(zé)輪詢區(qū)塊鏈平臺(tái),并且當(dāng)交易完成后主動(dòng)通知區(qū)塊鏈服務(wù)調(diào)用者。
進(jìn)一步的,所述的平臺(tái)調(diào)用接口包括服務(wù)調(diào)用接口、系統(tǒng)調(diào)用接口以及異常處理接口。
進(jìn)一步的,所述的交易消息推送模塊具備自動(dòng)輪詢的特性,會(huì)把輪詢的結(jié)果推動(dòng)到客戶端;另外,交易消息推送模塊可以結(jié)合定時(shí)任務(wù),定時(shí)向客戶端返回推送報(bào)表或進(jìn)行數(shù)據(jù)歸檔。
本發(fā)明的有益效果如下:中間件系統(tǒng)對(duì)外提供統(tǒng)一的標(biāo)準(zhǔn)的接口,這套接口可以使得區(qū)塊鏈平臺(tái)服務(wù)調(diào)用方可以無差別地使用不同的平臺(tái)。
所有的模塊以插件的形式在系統(tǒng)發(fā)揮作用,中間件系統(tǒng)提供默認(rèn)插件。可以通過中間件系統(tǒng)提供的接口定制插件。
智能合約的編譯部署全部自動(dòng)完成,并支持多個(gè)合約的編譯和部署。支持并發(fā)部署合約,在多個(gè)執(zhí)行體同時(shí)部署一個(gè)合約的情況下仍能保證不會(huì)重復(fù)部署。
附圖說明
圖1是通用服務(wù)中間件系統(tǒng)的整體架構(gòu)圖;
圖2是智能合約自動(dòng)部署模塊流程圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的說明。
如圖1所示,一種面向區(qū)塊鏈的通用服務(wù)中間件系統(tǒng),包括接口封裝模塊、接入配置化模塊、接入自動(dòng)化模塊、智能合約自動(dòng)部署模塊以及交易消息推送模塊,因此,構(gòu)建通用服務(wù)中間件系統(tǒng)的過程也就是依次構(gòu)建這些模塊的過程。
其中,接口封裝模塊對(duì)外提供統(tǒng)一的平臺(tái)調(diào)用接口,所述平臺(tái)調(diào)用接口包括服務(wù)調(diào)用接口、系統(tǒng)調(diào)用接口以及異常處理接口;接口封裝模塊通過區(qū)塊鏈平臺(tái)驅(qū)動(dòng)器來調(diào)用具體的平臺(tái)調(diào)用,其對(duì)應(yīng)的驅(qū)動(dòng)器通過接入配置化模塊進(jìn)行管理配置,并且由接入自動(dòng)化模塊在中間件系統(tǒng)啟動(dòng)時(shí)從外部導(dǎo)入;驅(qū)動(dòng)器中包含具體的平臺(tái)調(diào)用細(xì)節(jié),由區(qū)塊鏈平臺(tái)的服務(wù)提供商實(shí)現(xiàn)并發(fā)布;
接入配置化模塊在通用服務(wù)中間件系統(tǒng)中以插件形式提供服務(wù),負(fù)責(zé)管理區(qū)塊鏈服務(wù)調(diào)用方調(diào)用區(qū)塊鏈平臺(tái)時(shí)使用的所有配置信息;接入配置化模塊在接入配置信息中指定接口封裝模塊中驅(qū)動(dòng)器的資源地址,自動(dòng)從遠(yuǎn)程資源服務(wù)器中下載資源并導(dǎo)入到中間件系統(tǒng);或者,接入配置模塊指定導(dǎo)入本地驅(qū)動(dòng)器;
接入自動(dòng)化模塊通過調(diào)用接入配置化模塊獲取接入配置信息,然后自動(dòng)進(jìn)行網(wǎng)絡(luò)環(huán)境檢查、網(wǎng)絡(luò)連接重試、平臺(tái)接入認(rèn)證,把接入流程完全自動(dòng)化;
智能合約自動(dòng)部署模塊讀取接入配置化模塊中的配置信息,如果接入配置化模塊中查找不到智能合約源碼相關(guān)信息,智能合約自動(dòng)部署模塊將會(huì)從默認(rèn)路徑中讀取智能合約源碼,然后連接區(qū)塊鏈平臺(tái)進(jìn)行合約編譯;智能合約編譯后自動(dòng)生成部署合約所需的字節(jié)碼或者二進(jìn)制文件,智能合約自動(dòng)部署模塊將會(huì)自動(dòng)讀取生成的字節(jié)碼或二進(jìn)制文件并在區(qū)塊鏈平臺(tái)上部署智能合約,而后獲取平臺(tái)返回的合約地址;
交易消息推送模塊,服務(wù)調(diào)用方在發(fā)起交易或者查詢合約數(shù)據(jù)的時(shí)候,區(qū)塊鏈平臺(tái)需要經(jīng)過節(jié)點(diǎn)共識(shí)來確認(rèn)交易,交易消息推送模塊在交易等待時(shí)間內(nèi),負(fù)責(zé)輪詢區(qū)塊鏈平臺(tái),并且當(dāng)交易完成后主動(dòng)通知區(qū)塊鏈服務(wù)調(diào)用者。所述的交易消息推送模塊具備自動(dòng)輪詢的特性,會(huì)把輪詢的結(jié)果推動(dòng)到客戶端;另外,交易消息推送模塊可以結(jié)合定時(shí)任務(wù),定時(shí)向客戶端返回推送報(bào)表或進(jìn)行數(shù)據(jù)歸檔。
通用服務(wù)中間件系統(tǒng)的整體架構(gòu)如圖1所示:
接口封裝模塊分為兩部分,一部分是直接與區(qū)塊鏈服務(wù)調(diào)用方直接交互的接口封裝模塊,該服務(wù)提供一系列統(tǒng)一的接口,區(qū)塊鏈服務(wù)調(diào)用方調(diào)用這些接口,就像調(diào)用了真實(shí)的區(qū)塊鏈服務(wù)一樣,這部分接口代表一些抽象的功能,調(diào)用合約方法,合約的部署,向合約傳遞公私鑰、簽名信息等。在實(shí)施的時(shí)候只需要設(shè)計(jì)這些接口就可以了。另一部分是區(qū)塊鏈平臺(tái)驅(qū)動(dòng)器,該驅(qū)動(dòng)器負(fù)責(zé)實(shí)現(xiàn)區(qū)塊鏈平臺(tái)的調(diào)用細(xì)節(jié),然后向上與接口封裝模塊對(duì)接。平臺(tái)驅(qū)動(dòng)器負(fù)責(zé)把平臺(tái)相關(guān)的操作細(xì)節(jié)轉(zhuǎn)換為抽象的統(tǒng)一的接口,這需要設(shè)計(jì)一個(gè)適配器,對(duì)區(qū)塊鏈平臺(tái)的具體操作與抽象、統(tǒng)一的接口進(jìn)行對(duì)接。通過接口封裝模塊,用戶只需要更換區(qū)塊鏈平臺(tái)驅(qū)動(dòng)器,就能使用同一套業(yè)務(wù)代碼,調(diào)用不同的區(qū)塊鏈平臺(tái)。
接入配置模塊負(fù)責(zé)整個(gè)通用服務(wù)中間件與平臺(tái)的接入配置信息管理。區(qū)塊鏈平臺(tái)驅(qū)動(dòng)器通過接入配置模塊導(dǎo)入到通用服務(wù)中間件系統(tǒng)中,底層區(qū)塊鏈節(jié)點(diǎn)集群的地址信息,還有中間件系統(tǒng)的其他資源信息統(tǒng)一通過接入配置模塊進(jìn)行配置。接入配置模塊的優(yōu)勢(shì)在于能把所有配置信息統(tǒng)一管理、能從多種不同的輸入源中獲取配置信息以及可編程,易于擴(kuò)展。接入配置化模塊的設(shè)計(jì)關(guān)鍵點(diǎn)有兩個(gè),第一個(gè)是能兼容約定路徑以及配置路徑,兼容約定路徑需要先制定出一套約定的標(biāo)準(zhǔn),當(dāng)配置信息存在的時(shí)候,時(shí)候配置信息,當(dāng)配置信息不存在的時(shí)候,使用約定的配置信息。第二個(gè)是能從多種不同的途徑獲取配置信息,命令行,文件系統(tǒng),數(shù)據(jù)庫(kù)系統(tǒng)等,因此獲取配置的具體實(shí)現(xiàn)中建議使用策略設(shè)計(jì)模式,把獲取配置的行為封裝成一個(gè)對(duì)象,并提供多種獲取配置的策略類型。
接入自動(dòng)化模塊負(fù)責(zé)處理區(qū)塊鏈服務(wù)調(diào)用方與平臺(tái)連接相關(guān)的細(xì)節(jié)處理,包括載入接入配置模塊,與平臺(tái)的網(wǎng)絡(luò)連接,連接失敗重試等,接入自動(dòng)化模塊與接口封裝模塊交互,由接口封裝模塊發(fā)起。接入自動(dòng)化模塊的關(guān)鍵點(diǎn)在于需要讀取接入配置化模塊,然后根據(jù)接入配置信息發(fā)起與區(qū)塊鏈平臺(tái)的接入。在這個(gè)過程中需要考慮網(wǎng)絡(luò)異常的處理邏輯。
智能合約自動(dòng)部署模塊由接口封裝模塊調(diào)用,智能合約自動(dòng)部署過程分為合約編譯過程以及合約部署過程。自動(dòng)部署模塊通過接入配置模塊的信息,從網(wǎng)絡(luò)流、文件系統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)等途徑中獲取源碼,并對(duì)源碼進(jìn)行編譯,編譯后生成的字節(jié)碼或二進(jìn)制文件,由智能合約自動(dòng)部署模塊進(jìn)行管理。編譯后自動(dòng)進(jìn)行合約部署工作,合約部署支持并發(fā)安全部署。如圖2所示是智能合約自動(dòng)部署模塊流程圖,智能合約自動(dòng)部署模塊囊括了智能合約的編譯與部署過程。實(shí)現(xiàn)編譯過程需要注意生成的字節(jié)碼或二進(jìn)制平臺(tái)指令文件的存放路徑管理。在實(shí)現(xiàn)部署流程的時(shí)候需要考慮并發(fā)情況,避免智能合約重復(fù)部署的情況發(fā)生。
交易消息推送模塊結(jié)合異步任務(wù)和定時(shí)任務(wù),負(fù)責(zé)處理實(shí)時(shí)響應(yīng)要求較低但耗時(shí)較高的業(yè)務(wù),定時(shí)任務(wù)與推送系統(tǒng)相結(jié)合,定時(shí)推送數(shù)據(jù)監(jiān)控報(bào)表。交易消息推送模塊可以優(yōu)化區(qū)塊鏈平臺(tái)的調(diào)用效率,提高平臺(tái)對(duì)并發(fā)訪問的處理能力。設(shè)計(jì)交易消息推送模塊需要使用服務(wù)器推送的通信協(xié)議,然后用異步任務(wù)和定時(shí)任務(wù)實(shí)現(xiàn)平臺(tái)的異步調(diào)用以及向區(qū)塊鏈服務(wù)調(diào)用方的主動(dòng)數(shù)據(jù)推送功能。