王方紅 黃文彪
(浙江工業(yè)大學(xué)之江學(xué)院 浙江 紹興 312030)
區(qū)塊鏈?zhǔn)且唤M不可變的帶時間戳的數(shù)據(jù)記錄,由不屬于任何單個實(shí)體的計(jì)算機(jī)集群管理的分布式數(shù)據(jù)庫[1]。這些塊中的每一個塊都是按時間順序連接成鏈,并使用加密算法來彼此保護(hù)并綁定。由于它是一個共享且不可變的分布式數(shù)據(jù)庫,因此其中的信息對任何參與方都可以看到。各個節(jié)點(diǎn)之間須要相互監(jiān)督、協(xié)同工作,既沒有中心權(quán)威節(jié)點(diǎn)導(dǎo)致的權(quán)利集中,也能夠避免在去中心化情況下,個別節(jié)點(diǎn)的欺詐行為,從而保證數(shù)據(jù)的安全。也正因其去中心化、不可篡改、可追溯等屬性,區(qū)塊鏈技術(shù)被廣泛應(yīng)用于相互協(xié)作、打通數(shù)據(jù)孤島等典型場景,在金融、物流、供應(yīng)鏈、物聯(lián)網(wǎng)等產(chǎn)生了極大影響[2-3]。
目前國內(nèi)外都在積極開展關(guān)于區(qū)塊鏈網(wǎng)絡(luò)的應(yīng)用和研究,但其在精準(zhǔn)扶貧方面的實(shí)踐和認(rèn)識還比較少。在此將設(shè)計(jì)開發(fā)基于區(qū)塊鏈的金融精準(zhǔn)扶貧系統(tǒng),結(jié)合區(qū)塊鏈技術(shù)的優(yōu)點(diǎn)來解決傳統(tǒng)金融扶貧系統(tǒng)中存在的問題,為“區(qū)塊鏈+精準(zhǔn)扶貧”的發(fā)展和推廣打下堅(jiān)實(shí)的基礎(chǔ),并探索區(qū)塊鏈技術(shù)在我國金融精準(zhǔn)扶貧領(lǐng)域的應(yīng)用場景,以期為我國金融扶貧攻堅(jiān)提供支持[4]。
智能合約是一段可以運(yùn)行在區(qū)塊鏈平臺的分布式計(jì)算機(jī)程序代碼[5]。它能夠?qū)崿F(xiàn)價值的存儲、傳遞、控制和管理,為基于區(qū)塊鏈的應(yīng)用提供了創(chuàng)新性的解決方案[6]。如果說數(shù)據(jù)、網(wǎng)絡(luò)和共識三個層次作為區(qū)塊鏈底層“虛擬機(jī)”分別承擔(dān)數(shù)據(jù)表示、數(shù)據(jù)傳播和數(shù)據(jù)驗(yàn)證功能的話,智能合約則是建立在區(qū)塊鏈虛擬機(jī)之上的商業(yè)邏輯和算法,是實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)靈活編程和操作數(shù)據(jù)的基礎(chǔ)[7]。
Hyperchain平臺架構(gòu)圖如圖1所示。
圖1 Hyperchain平臺架構(gòu)工作流程
用戶模塊:本系統(tǒng)所涉及到多方協(xié)作參與,相關(guān)參與方與所能進(jìn)行的操作如表1所示。
表1 系統(tǒng)角色和相關(guān)功能
權(quán)限模塊:該系統(tǒng)需要細(xì)粒度的權(quán)限控制,平臺管理員負(fù)責(zé)審核各個機(jī)構(gòu)注冊的管理員,同時分配全量權(quán)限,機(jī)構(gòu)內(nèi)管理員擁有將當(dāng)前擁有權(quán)限再次分配權(quán),如此遞推。
扶貧貸款模塊:經(jīng)辦網(wǎng)點(diǎn)在頁面上填寫申請信息,上傳相關(guān)附件,提交申請,并在頁面上查看小額貸款臺賬列表(列表的數(shù)據(jù)支持狀態(tài)篩選和分頁瀏覽),點(diǎn)擊單行數(shù)據(jù),查看貸款申請?jiān)敿?xì)信息,并查看當(dāng)前申請狀態(tài)(如果被拒絕,則顯示狀態(tài)和拒絕理由)。總行零售部登錄查看臺賬詳情時,進(jìn)行對該申請的審核,如果拒絕,須要填寫拒絕理由。
扶貧貼息模塊:由經(jīng)辦網(wǎng)點(diǎn)成功發(fā)起的貼息申請會以貼息人員匯總表的形式呈現(xiàn)給審核機(jī)構(gòu)(總行零售部、脫貧辦、省農(nóng)業(yè)廳和省財(cái)政廳、市財(cái)政局)。點(diǎn)擊列表單行,顯示貼息詳細(xì)信息和貼息審核流程。
邏輯結(jié)構(gòu):為了保證扶貧系統(tǒng)中數(shù)據(jù)的安全性和高效性,本扶貧系統(tǒng)結(jié)構(gòu)主要分為四層,如圖2所示。
圖2 系統(tǒng)結(jié)構(gòu)模型
物理結(jié)構(gòu):參與人員通過防火墻接入扶貧系統(tǒng)前置負(fù)載均衡器訪問應(yīng)用系統(tǒng),節(jié)點(diǎn)間形成P2P網(wǎng)絡(luò)進(jìn)行節(jié)點(diǎn)間通信,如圖3所示。
圖3 物理架構(gòu)圖
數(shù)據(jù)架構(gòu):Hyperchain有關(guān)于數(shù)據(jù)架構(gòu)的設(shè)計(jì)圖如圖4所示。
圖4 數(shù)據(jù)架構(gòu)圖
整個數(shù)據(jù)架構(gòu)自底向上可以分為以下幾層:
(1) 最底層的存儲引擎支持海量存儲和數(shù)據(jù)災(zāi)備。
(2) 存儲體系保證數(shù)據(jù)安全存儲和歷史數(shù)據(jù)歸檔。
(3) 強(qiáng)一致的算法保障數(shù)據(jù)一致性。
(4) 多角色的節(jié)點(diǎn)備份及部署支持多用戶大并發(fā)和數(shù)據(jù)實(shí)時備份和恢復(fù)。
(5) 全方面的參數(shù)驗(yàn)證支持異常數(shù)據(jù)過濾。
智能合約設(shè)計(jì)是區(qū)塊鏈系統(tǒng)中非常重要的環(huán)節(jié),須要確定哪些數(shù)據(jù)上鏈以及合約對外接口,并留下數(shù)據(jù)埋點(diǎn),用于后續(xù)合約升級。類比于數(shù)據(jù)庫,智能合約提供的結(jié)構(gòu)體相當(dāng)于數(shù)據(jù)庫表,mapping映射關(guān)系相當(dāng)于外鍵關(guān)聯(lián),上鏈的時候,預(yù)留extra字段,用于后續(xù)的擴(kuò)展[8]。
1) mapping設(shè)計(jì):類似于Java中的Map,存儲的是鍵值對,表2是本系統(tǒng)合約涉及到的部分mapping。
表2 合約主要的映射關(guān)系
當(dāng)需要雙方關(guān)聯(lián)且有數(shù)據(jù)的時候,我們采用兩重映射,如貼息狀態(tài)到趣鏈用戶地址到貼息人員匯總表主鍵數(shù)組映射,mapping(uint=>mapping(address=>uint[]))_loanState2hyperUserAddress2DiscountStaff;即表示該關(guān)系類型。
2) 合約方法調(diào)用:與合約部署類似,也需要使用公私鑰對交易進(jìn)行簽名,然后調(diào)用相應(yīng)的json-rpc接口,完成合約方法調(diào)用。合約部署和合約方法調(diào)用都屬于區(qū)塊鏈平臺上面的一筆交易,需要平臺各節(jié)點(diǎn)達(dá)成共識,才算調(diào)用成功。合約方法的調(diào)用流程如圖5所示。
圖5 合約方法調(diào)用流程
對要調(diào)用的合約方法名做一次SHA3- 256哈希,取哈希結(jié)果的前八個十六進(jìn)制字符作為methodId。另外,合約方法的入?yún)⒁残枰?jīng)過特殊的處理,按照一定的規(guī)則編碼成二進(jìn)制串,用十六進(jìn)制表示。methodId和合約方法入?yún)⒕幋a而成的十六進(jìn)制串組合在一起,就是交易信息中的payload。
3) 合約升級。合約升級分為以下兩種情況:
(1) 不須要修改原先已經(jīng)定義好的數(shù)據(jù)結(jié)構(gòu),包括結(jié)構(gòu)體、數(shù)組等,而是在已經(jīng)定義好的成員變量后面新增成員變量,包括或者不包括修改了合約方法。
(2) 修改了合約數(shù)據(jù)結(jié)構(gòu)。
不同角色對貸款申請表(或貼息)的每一步審核操作會記錄(操作時間、操作用戶、操作類型、操作結(jié)果)在區(qū)塊鏈中,每個用戶都能查看到該筆申請(或貼息)的整個操作流水,并在頁面上給出直觀的體現(xiàn)。
以政府和銀行分別為兩條主線,可對扶貧資金進(jìn)行可追溯查詢,如圖6所示,根據(jù)每筆扶貧款項(xiàng)的上鏈Hash等數(shù)據(jù),可以可視化地精準(zhǔn)定位每一筆扶貧款項(xiàng)的具體流向。
圖6 資產(chǎn)的追溯流程
不同經(jīng)辦網(wǎng)點(diǎn)上傳的數(shù)據(jù)是相互隔離的,上層機(jī)構(gòu)能看到所有的記錄,但是不同經(jīng)辦網(wǎng)點(diǎn)只能看到自己上傳的數(shù)據(jù),無法看到其他網(wǎng)點(diǎn)的數(shù)據(jù)。
上一級審核未完成前,數(shù)據(jù)不會到達(dá)下一級。當(dāng)上一級審核結(jié)束,數(shù)據(jù)同步到其他節(jié)點(diǎn),下一級才有權(quán)限讀取。
當(dāng)脫貧辦貼息審核通過進(jìn)行確認(rèn)的同時,相同界面展示多個參與方(省財(cái)政廳、省農(nóng)業(yè)廳)的辦公電腦同時彈出審核通知,兩邊辦公人員同步進(jìn)行審批。
省農(nóng)業(yè)廳及省財(cái)政廳同時登錄查詢數(shù)據(jù),展示數(shù)據(jù)詳情界面,以及當(dāng)前審核狀態(tài),所作更改流入?yún)^(qū)塊鏈,分發(fā)到其他節(jié)點(diǎn)。
傳統(tǒng)的辦公模式中,每個機(jī)構(gòu)都是獨(dú)立不互聯(lián)的,通信通過紙質(zhì)文件的形式在各個機(jī)構(gòu)之間傳遞。
接入?yún)^(qū)塊鏈后,每個機(jī)構(gòu)一個獨(dú)立節(jié)點(diǎn),各個機(jī)構(gòu)只需要在自己的節(jié)點(diǎn)上進(jìn)行數(shù)據(jù)的讀取和存儲,節(jié)點(diǎn)之間通過區(qū)塊鏈自動進(jìn)行數(shù)據(jù)同步和共識,打破了機(jī)構(gòu)之間的通信屏障,既保證了數(shù)據(jù)一致性,又得到了數(shù)據(jù)讀取的高效性。
本項(xiàng)目是基于區(qū)塊鏈的Web應(yīng)用系統(tǒng),通過智能合約,改進(jìn)現(xiàn)有流程和處理邏輯,與傳統(tǒng)的Web項(xiàng)目的測試流程不同,需要先進(jìn)行需求分析、評審,確定需求后,開始做系統(tǒng)設(shè)計(jì),包括智能合約設(shè)計(jì)和業(yè)務(wù)流程設(shè)計(jì),同時評審測試用例。
基于測試用例的開發(fā)模式,有助于在編寫時的邏輯判斷,以及開發(fā)人員的自測,好的測試用例需要覆蓋各種邊界問題,便于檢測系統(tǒng)可能存在的問題。
圖7為系統(tǒng)部分測試用例的展示,以思維導(dǎo)圖的形式對外提供,方便測試流程和驗(yàn)收。
圖7 區(qū)塊鏈精準(zhǔn)扶貧平臺部分測試用例
合約測試和接口測試之后,須要對系統(tǒng)進(jìn)行一輪壓測,檢測系統(tǒng)的吞吐量。壓測工具選擇的是jmeter,Apache的一個頂級開源項(xiàng)目,功能很強(qiáng)。下面展示的是錄入交易確認(rèn)信息接口的壓測數(shù)據(jù)。應(yīng)用服務(wù)采用4核8 GB配置,區(qū)塊鏈節(jié)點(diǎn)同樣采用4核8 GB配置。壓測時開啟200個線程,持續(xù)時間是2分鐘。圖8是報(bào)價信息錄入接口的壓測數(shù)據(jù),可以看出,在這種情況下系統(tǒng)的TPS是73.3,吞吐量并不高。
圖8 區(qū)塊鏈精準(zhǔn)扶貧平臺部分測試
壓測前,應(yīng)用服務(wù)器內(nèi)存使用率60.4%,CPU使用率1.1%。區(qū)塊鏈服務(wù)器內(nèi)存使用率60.8%,CPU使用率1.5%。
圖9 壓測前服務(wù)器內(nèi)存、CPU使用情況
壓測時,應(yīng)用服務(wù)器內(nèi)存使用率61.2%,CPU使用率38.8%。區(qū)塊鏈服務(wù)器內(nèi)存使用率98.4%,CPU使用率47.1%。
圖10 壓測時服務(wù)器內(nèi)存、CPU使用情況
所以,壓測使用的區(qū)塊鏈服務(wù)器的內(nèi)存大小是主要瓶頸,如果使用16 GB大小的內(nèi)存,壓測的TPS將有一定程度的提高。
將區(qū)塊鏈扶貧系統(tǒng)與同類型系統(tǒng)對比,如表3所示。
表3 區(qū)塊鏈扶貧系統(tǒng)與同類型系統(tǒng)對比
由表3可知,區(qū)塊鏈精準(zhǔn)扶貧方式保證金融數(shù)據(jù)不易被修改、系統(tǒng)流程透明、扶貧用戶隱私難被泄露、扶貧資金全程監(jiān)管、金融服務(wù)效能高等。尤其是在對貧困戶的隱私保護(hù)上,由于將對每個貧困戶的操作轉(zhuǎn)為對一個地址的操作,可以有效保證貧困戶隱私不被泄露。
本系統(tǒng)為了解決傳統(tǒng)扶貧系統(tǒng)中存在的數(shù)據(jù)風(fēng)險和信息流動問題,創(chuàng)新地采用區(qū)塊鏈作為信息的載體。區(qū)塊鏈?zhǔn)墙鼛啄炅餍衅饋淼囊环N分布式數(shù)據(jù)存儲技術(shù),具有可追溯、防篡改、隱私保護(hù)、數(shù)據(jù)透明且安全性高的特點(diǎn)。通過得到的數(shù)據(jù)分析結(jié)論以及與同類型系統(tǒng)對比,得出了本系統(tǒng)具有效率高、易監(jiān)管、隱私保護(hù)強(qiáng)的特點(diǎn)。由于區(qū)塊鏈較高的金融屬性,金融行業(yè)逐步會加大對區(qū)塊鏈技術(shù)應(yīng)用部署的投入,未來會看到區(qū)塊鏈與更多的金融場景結(jié)合落地。但區(qū)塊鏈?zhǔn)冀K只是技術(shù),只有當(dāng)技術(shù)應(yīng)用到實(shí)地場景的時候,才能最大限度地發(fā)揮其價值。