王方紅 黃文彪
(浙江工業大學之江學院 浙江 紹興 312030)
區塊鏈是一組不可變的帶時間戳的數據記錄,由不屬于任何單個實體的計算機集群管理的分布式數據庫[1]。這些塊中的每一個塊都是按時間順序連接成鏈,并使用加密算法來彼此保護并綁定。由于它是一個共享且不可變的分布式數據庫,因此其中的信息對任何參與方都可以看到。各個節點之間須要相互監督、協同工作,既沒有中心權威節點導致的權利集中,也能夠避免在去中心化情況下,個別節點的欺詐行為,從而保證數據的安全。也正因其去中心化、不可篡改、可追溯等屬性,區塊鏈技術被廣泛應用于相互協作、打通數據孤島等典型場景,在金融、物流、供應鏈、物聯網等產生了極大影響[2-3]。
目前國內外都在積極開展關于區塊鏈網絡的應用和研究,但其在精準扶貧方面的實踐和認識還比較少。在此將設計開發基于區塊鏈的金融精準扶貧系統,結合區塊鏈技術的優點來解決傳統金融扶貧系統中存在的問題,為“區塊鏈+精準扶貧”的發展和推廣打下堅實的基礎,并探索區塊鏈技術在我國金融精準扶貧領域的應用場景,以期為我國金融扶貧攻堅提供支持[4]。
智能合約是一段可以運行在區塊鏈平臺的分布式計算機程序代碼[5]。它能夠實現價值的存儲、傳遞、控制和管理,為基于區塊鏈的應用提供了創新性的解決方案[6]。如果說數據、網絡和共識三個層次作為區塊鏈底層“虛擬機”分別承擔數據表示、數據傳播和數據驗證功能的話,智能合約則是建立在區塊鏈虛擬機之上的商業邏輯和算法,是實現區塊鏈系統靈活編程和操作數據的基礎[7]。
Hyperchain平臺架構圖如圖1所示。

圖1 Hyperchain平臺架構工作流程
用戶模塊:本系統所涉及到多方協作參與,相關參與方與所能進行的操作如表1所示。

表1 系統角色和相關功能
權限模塊:該系統需要細粒度的權限控制,平臺管理員負責審核各個機構注冊的管理員,同時分配全量權限,機構內管理員擁有將當前擁有權限再次分配權,如此遞推。
扶貧貸款模塊:經辦網點在頁面上填寫申請信息,上傳相關附件,提交申請,并在頁面上查看小額貸款臺賬列表(列表的數據支持狀態篩選和分頁瀏覽),點擊單行數據,查看貸款申請詳細信息,并查看當前申請狀態(如果被拒絕,則顯示狀態和拒絕理由)。總行零售部登錄查看臺賬詳情時,進行對該申請的審核,如果拒絕,須要填寫拒絕理由。
扶貧貼息模塊:由經辦網點成功發起的貼息申請會以貼息人員匯總表的形式呈現給審核機構(總行零售部、脫貧辦、省農業廳和省財政廳、市財政局)。點擊列表單行,顯示貼息詳細信息和貼息審核流程。
邏輯結構:為了保證扶貧系統中數據的安全性和高效性,本扶貧系統結構主要分為四層,如圖2所示。

圖2 系統結構模型
物理結構:參與人員通過防火墻接入扶貧系統前置負載均衡器訪問應用系統,節點間形成P2P網絡進行節點間通信,如圖3所示。

圖3 物理架構圖
數據架構:Hyperchain有關于數據架構的設計圖如圖4所示。

圖4 數據架構圖
整個數據架構自底向上可以分為以下幾層:
(1) 最底層的存儲引擎支持海量存儲和數據災備。
(2) 存儲體系保證數據安全存儲和歷史數據歸檔。
(3) 強一致的算法保障數據一致性。
(4) 多角色的節點備份及部署支持多用戶大并發和數據實時備份和恢復。
(5) 全方面的參數驗證支持異常數據過濾。
智能合約設計是區塊鏈系統中非常重要的環節,須要確定哪些數據上鏈以及合約對外接口,并留下數據埋點,用于后續合約升級。類比于數據庫,智能合約提供的結構體相當于數據庫表,mapping映射關系相當于外鍵關聯,上鏈的時候,預留extra字段,用于后續的擴展[8]。
1) mapping設計:類似于Java中的Map,存儲的是鍵值對,表2是本系統合約涉及到的部分mapping。

表2 合約主要的映射關系
當需要雙方關聯且有數據的時候,我們采用兩重映射,如貼息狀態到趣鏈用戶地址到貼息人員匯總表主鍵數組映射,mapping(uint=>mapping(address=>uint[]))_loanState2hyperUserAddress2DiscountStaff;即表示該關系類型。
2) 合約方法調用:與合約部署類似,也需要使用公私鑰對交易進行簽名,然后調用相應的json-rpc接口,完成合約方法調用。合約部署和合約方法調用都屬于區塊鏈平臺上面的一筆交易,需要平臺各節點達成共識,才算調用成功。合約方法的調用流程如圖5所示。

圖5 合約方法調用流程
對要調用的合約方法名做一次SHA3- 256哈希,取哈希結果的前八個十六進制字符作為methodId。另外,合約方法的入參也需要經過特殊的處理,按照一定的規則編碼成二進制串,用十六進制表示。methodId和合約方法入參編碼而成的十六進制串組合在一起,就是交易信息中的payload。
3) 合約升級。合約升級分為以下兩種情況:
(1) 不須要修改原先已經定義好的數據結構,包括結構體、數組等,而是在已經定義好的成員變量后面新增成員變量,包括或者不包括修改了合約方法。
(2) 修改了合約數據結構。
不同角色對貸款申請表(或貼息)的每一步審核操作會記錄(操作時間、操作用戶、操作類型、操作結果)在區塊鏈中,每個用戶都能查看到該筆申請(或貼息)的整個操作流水,并在頁面上給出直觀的體現。
以政府和銀行分別為兩條主線,可對扶貧資金進行可追溯查詢,如圖6所示,根據每筆扶貧款項的上鏈Hash等數據,可以可視化地精準定位每一筆扶貧款項的具體流向。

圖6 資產的追溯流程
不同經辦網點上傳的數據是相互隔離的,上層機構能看到所有的記錄,但是不同經辦網點只能看到自己上傳的數據,無法看到其他網點的數據。
上一級審核未完成前,數據不會到達下一級。當上一級審核結束,數據同步到其他節點,下一級才有權限讀取。
當脫貧辦貼息審核通過進行確認的同時,相同界面展示多個參與方(省財政廳、省農業廳)的辦公電腦同時彈出審核通知,兩邊辦公人員同步進行審批。
省農業廳及省財政廳同時登錄查詢數據,展示數據詳情界面,以及當前審核狀態,所作更改流入區塊鏈,分發到其他節點。
傳統的辦公模式中,每個機構都是獨立不互聯的,通信通過紙質文件的形式在各個機構之間傳遞。
接入區塊鏈后,每個機構一個獨立節點,各個機構只需要在自己的節點上進行數據的讀取和存儲,節點之間通過區塊鏈自動進行數據同步和共識,打破了機構之間的通信屏障,既保證了數據一致性,又得到了數據讀取的高效性。
本項目是基于區塊鏈的Web應用系統,通過智能合約,改進現有流程和處理邏輯,與傳統的Web項目的測試流程不同,需要先進行需求分析、評審,確定需求后,開始做系統設計,包括智能合約設計和業務流程設計,同時評審測試用例。
基于測試用例的開發模式,有助于在編寫時的邏輯判斷,以及開發人員的自測,好的測試用例需要覆蓋各種邊界問題,便于檢測系統可能存在的問題。
圖7為系統部分測試用例的展示,以思維導圖的形式對外提供,方便測試流程和驗收。

圖7 區塊鏈精準扶貧平臺部分測試用例
合約測試和接口測試之后,須要對系統進行一輪壓測,檢測系統的吞吐量。壓測工具選擇的是jmeter,Apache的一個頂級開源項目,功能很強。下面展示的是錄入交易確認信息接口的壓測數據。應用服務采用4核8 GB配置,區塊鏈節點同樣采用4核8 GB配置。壓測時開啟200個線程,持續時間是2分鐘。圖8是報價信息錄入接口的壓測數據,可以看出,在這種情況下系統的TPS是73.3,吞吐量并不高。

圖8 區塊鏈精準扶貧平臺部分測試
壓測前,應用服務器內存使用率60.4%,CPU使用率1.1%。區塊鏈服務器內存使用率60.8%,CPU使用率1.5%。

圖9 壓測前服務器內存、CPU使用情況
壓測時,應用服務器內存使用率61.2%,CPU使用率38.8%。區塊鏈服務器內存使用率98.4%,CPU使用率47.1%。

圖10 壓測時服務器內存、CPU使用情況
所以,壓測使用的區塊鏈服務器的內存大小是主要瓶頸,如果使用16 GB大小的內存,壓測的TPS將有一定程度的提高。
將區塊鏈扶貧系統與同類型系統對比,如表3所示。

表3 區塊鏈扶貧系統與同類型系統對比
由表3可知,區塊鏈精準扶貧方式保證金融數據不易被修改、系統流程透明、扶貧用戶隱私難被泄露、扶貧資金全程監管、金融服務效能高等。尤其是在對貧困戶的隱私保護上,由于將對每個貧困戶的操作轉為對一個地址的操作,可以有效保證貧困戶隱私不被泄露。
本系統為了解決傳統扶貧系統中存在的數據風險和信息流動問題,創新地采用區塊鏈作為信息的載體。區塊鏈是近幾年流行起來的一種分布式數據存儲技術,具有可追溯、防篡改、隱私保護、數據透明且安全性高的特點。通過得到的數據分析結論以及與同類型系統對比,得出了本系統具有效率高、易監管、隱私保護強的特點。由于區塊鏈較高的金融屬性,金融行業逐步會加大對區塊鏈技術應用部署的投入,未來會看到區塊鏈與更多的金融場景結合落地。但區塊鏈始終只是技術,只有當技術應用到實地場景的時候,才能最大限度地發揮其價值。