沈 斌,焦玉良,何洪濤,陳業(yè)青
武漢工程大學電氣信息學院,湖北 武漢 430205
政府采購融資,是指以政府采購作為平臺幫助中小企業(yè)融資,政府采購項目中標、成交的中小企業(yè)供應(yīng)商[1-3],以中標、成交通知書和政府采購合同作為憑據(jù)向銀行貸款,銀行向通過授信審查的供應(yīng)商提供資金支持,解決在政府采購履行合同過程中的資金困難[4-5]。中小企業(yè)普遍資產(chǎn)規(guī)模小、有效抵押物少、抗經(jīng)營風險能力相對薄弱,其融資難問題一直十分突出[6-7]。近年來,財政部相繼出臺了《政府采購支持中小企業(yè)發(fā)展暫行辦法》《關(guān)于開展政府采購信用擔保試點工作的通知》等政策措施[8-9],工信部、人民銀行等相關(guān)部門也紛紛出臺支持中小企業(yè)融資的政策措施,多策并舉解決中小企業(yè)融資難問題[10-12]。
融資業(yè)務(wù)中,信用可靠性是極為關(guān)鍵的問題,人行中征平臺的接入部分保證了企業(yè)(包括自然人)征信的可靠性,但政府采購預(yù)算、中標金額、合同實際金額、企業(yè)抵押物(包括應(yīng)收賬款、不動產(chǎn)權(quán)證、債權(quán)等)等信息源自多個部門的多個系統(tǒng),大量數(shù)據(jù)需要從線上落地、人工處理后再到線上,信息處理鏈條較長、中途存在數(shù)據(jù)被惡意篡改的風險,銀行和財政如果無法及時發(fā)現(xiàn),將導致巨大的金融風險[13]。如果采用通常的方法進行核實查證,又會出現(xiàn)交易周期長、審核環(huán)節(jié)多、融資成本高等問題,不符合中央及監(jiān)管部門的政策性要求[14-15]。在這種融資模式中,每個參與方都有自己的賬本,在交易發(fā)生時各自更改;協(xié)同各方會導致額外的工作即中介等附加成本[16-17]。業(yè)務(wù)交易中,“合同”重復分散在各個參與方,造成整體業(yè)務(wù)流程的低有效性;整個業(yè)務(wù)網(wǎng)絡(luò)依賴于1 個或幾個中心系統(tǒng),整個商務(wù)網(wǎng)絡(luò)十分脆弱[18-19]。
針對此問題,引入?yún)^(qū)塊鏈的供應(yīng)鏈技術(shù),使用分布式賬本,使參與方節(jié)點各自持有相同的賬本,在業(yè)務(wù)發(fā)生時,通過工作量證明(proof of work,POW)共識算法確定記賬節(jié)點,該節(jié)點將生成的區(qū)塊數(shù)據(jù)進行廣播,由各參與節(jié)點驗證后進行記賬。保障流程中的區(qū)塊鏈分布式數(shù)據(jù)存儲和存證,可提了高供應(yīng)鏈金融過程中數(shù)據(jù)的真實性。
系統(tǒng)分為2 個模塊:后臺管理模塊和交易記賬模塊。系統(tǒng)結(jié)構(gòu)圖如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)圖Fig.1 System structure diagram
后臺管理模塊采用SpringBoot+SpringSecurity+Mybatis + Layui 搭建,系統(tǒng)采用MVC 模式構(gòu)架,實現(xiàn)前后端分離。圖2 為政府采購融資平臺系統(tǒng)后臺頁面,系統(tǒng)支持用戶管理、角色管理、供應(yīng)商信息管理、中標信息查詢、合同信息推送、合同支付申請、合同融資信息查詢以及模塊查詢。
圖2 系統(tǒng)后臺頁面Fig.2 System background page
交易記賬模塊采用SpringBoot+WebSocket+P2P 搭建分布式賬本,引入哈希算法、數(shù)字簽名、工作量證明、排序機制以及智能合約實現(xiàn)業(yè)務(wù)背書,實現(xiàn)全局狀態(tài)數(shù)據(jù)庫的更新到達共同記賬的目的,每筆業(yè)務(wù)交易(實際上還包括政府采購合同、融資合同簽署、政府采購黑名單信息、合同履行評價報告等)擁有不可篡改性,使系統(tǒng)的可維護性、安全性、重用性和可拓展性都大大的得到提高。超級賬本支持多賬本,每個正本數(shù)據(jù)是分開儲存的。每個賬本擁有自己的LevelID,確保賬本的唯一性,交易數(shù)據(jù)通過channel 機制實現(xiàn)不同業(yè)務(wù)交易數(shù)據(jù)的隔離,保證了交易數(shù)據(jù)的安全性和一致性,數(shù)據(jù)通過公私密鑰加密,保障各節(jié)點數(shù)據(jù)隱私。系統(tǒng)保障財政、融資企業(yè)、銀行三方節(jié)點業(yè)務(wù)數(shù)據(jù)、以及中標公告、采購合同、融資合同、抵押信息等信息真實可信,使融資業(yè)務(wù)安全高效,能及早發(fā)現(xiàn)避免融資風險、法律風險和虛開增值稅發(fā)票風險。
每一個區(qū)塊block 基本信息單元做如下描述:
(1)Index:區(qū)塊的索引值,一般從0 開始。
(2)TimeStamp:時間戳,創(chuàng)建區(qū)塊的時間,決定區(qū)塊的順序。
(3)Hash:數(shù)字指紋,唯一標識數(shù)據(jù)的值,有固定長度,系統(tǒng)采用SHA-256加密算法,長度為64位。加密數(shù)據(jù)的微小改動會導致Hash 值的巨大變動,由于其不可逆特性保障了數(shù)據(jù)的安全。
(4)Previous Hash:前置Hash,前一個區(qū)塊的Hash 值,通過Hash 值的銜接將每個單獨的區(qū)塊串聯(lián)為一個交易區(qū)塊鏈。創(chuàng)世區(qū)塊的前置Hash 為0。
(5)Data:存儲交易數(shù)據(jù)。Hash 值依賴Data數(shù)據(jù)產(chǎn)生,改變Data 中的數(shù)據(jù)新生成的Hash 值也會改變,導致從該區(qū)塊后的所有區(qū)塊將無法通過其余節(jié)點校驗而級聯(lián)失效,也就導致了該節(jié)點記賬失效,保障了區(qū)塊中的數(shù)據(jù)的不可篡改。
(6)Nonce:有效散列數(shù)。節(jié)點通過“挖礦”尋找一個數(shù)值N,N滿足N+ Index + PreviousHash +Timestamp + Data 經(jīng)加密算法生成的新的Hash 值滿足規(guī)定條件。這個N就是“礦”值,最先計算出該值的節(jié)點將獲取該次交易的記賬權(quán)。N值有“難計算、易驗證”的特性。
區(qū)塊中一般會設(shè)置Hash 的計算難度,規(guī)定滿足某一特定條件的Hash 才會被其他節(jié)點承認從而記賬。一般用設(shè)置“前導0”(Hash 散列的前n位為0 就稱前導0 為n,n<64)個數(shù)的方式來設(shè)置“挖礦”難度,前導0 個數(shù)越多,挖礦難度越大,那么要強行篡改區(qū)塊記錄的難度就越大。節(jié)點生成的Hash 值只有滿足系統(tǒng)預(yù)先設(shè)置的前導0 個數(shù)才能算一個有效Hash,被其他節(jié)點驗證承認。
圖3是將政府采購融資平臺數(shù)據(jù)庫的供應(yīng)商信息和融資業(yè)務(wù)數(shù)據(jù)后臺業(yè)務(wù)邏輯利用區(qū)塊鏈技術(shù)進行改造,利用分布式數(shù)據(jù)存儲、加密算法、工作量證明以及排序機制等技術(shù)的基礎(chǔ)上,對融資過程所涉及到的各個環(huán)節(jié)、各個企業(yè)的各類信息進行收集與存儲,銀行對企業(yè)征信信息驗證以及共識算法使得眾多數(shù)據(jù)信息能夠不易篡改,也有助于企業(yè)融資。
圖3 區(qū)塊鏈設(shè)計結(jié)構(gòu)圖Fig.3 Blockchain design structure diagram
1.3.1 供應(yīng)商信息區(qū)塊
(1)供應(yīng)商身份信息
當供應(yīng)商通過平臺注冊時,系統(tǒng)首先會根據(jù)供應(yīng)商提供的信息核查供應(yīng)商信息,校驗通過后,供應(yīng)商身份信息封裝在區(qū)塊的Data 中,相關(guān)字段如表1 所示。
表1 供應(yīng)商身份信息Tab.1 Supplier identity information
(2)供應(yīng)商歷史違規(guī)信息
銀行節(jié)點和業(yè)務(wù)會計可通過供應(yīng)商表現(xiàn)對供應(yīng)商進行評價,如有違規(guī)會影響供應(yīng)商信用等級,違規(guī)信息和評價信息也會封裝在區(qū)塊中。主要的字段如表2 所示。
表2 供應(yīng)商違規(guī)信息Tab. 2 Supplier violation information
1.3.2 融資業(yè)務(wù)區(qū)塊
(1)中標公告信息
企業(yè)通過政府渠道采購招標后會生成中標信息,中標信息會在區(qū)塊中存證。在區(qū)塊中的存儲參數(shù)包含信息如表3 所示。
表3 中標公告信息Tab.3 Bid winning announcement information
(2)融資成交單信息
融資成功會生成融資成交單,成交單會在區(qū)塊中存證,成交單信息包含的參數(shù)如表4 所示。
表4 融資成交單信息Tab.4 Financing transaction order information
對于政府采購融資平臺的供應(yīng)商身份、供應(yīng)商歷史違規(guī)、采購計劃、中標公告、合同和融資成交單等重要信息進行存儲在每個區(qū)塊中,將這些數(shù)據(jù)定義為交易信息tradeData,同時系統(tǒng)給定一個難度值D。當對數(shù)據(jù)進行區(qū)塊存儲時,需要尋找滿足條件的隨機數(shù)值Nonce,使得通過哈希計算得到區(qū)塊的哈希值blockHash 低于目標難度值D,Pow 共識算法表述為:
blockHash=Hash(tradeData,Nonce)<<D
由于哈希算法的輸入敏感和抗碰撞性,供應(yīng)商和系統(tǒng)用戶對數(shù)據(jù)進行寫入節(jié)點時需要不斷的調(diào)整隨機數(shù)值Nonce,通過這種計算資源的方式達到寫入節(jié)點數(shù)據(jù)的工作量證明(身份驗證)。寫入數(shù)據(jù)稱為“工作者”,驗證節(jié)點信息稱為“驗證者”,其中,工作者需要進行一定難度的哈希計算得到一個結(jié)果,而驗證者通過簡單的計算就可以判斷工作者是否做了對應(yīng)難度的計算,從而達到了數(shù)據(jù)的不可篡改性和該機制有效的抵御了分布式系統(tǒng)中的女巫攻擊問題。
業(yè)務(wù)數(shù)據(jù)將會封裝在區(qū)塊中,通過SHA-256算法生成滿足前導0 條件的Hash 散列值和隨機數(shù)Nonce 值。Nonce 值挖取采用POW 工作證明機制,通過大量的迭代計算得出工作量證明值。圖4為創(chuàng)建節(jié)點的算法流程,通過判斷nextHash 值是否滿足前導0 條件進行“挖礦”產(chǎn)生節(jié)點信息。
圖4 節(jié)點算法流程圖Fig.4 Node algorithm flowchart
計算出滿足條件的Hash 散列值后,系統(tǒng)調(diào)用背書策略驗證,判斷生成的Hash 值是否正確,生成新的交易區(qū)塊,當新生成的滿足條件:①區(qū)塊索引大于最新區(qū)塊索引;②業(yè)務(wù)交易流水號不重復時,通過廣播機制實現(xiàn)區(qū)塊上鏈賬本更新。特定的業(yè)務(wù)會觸發(fā)智能合約機制,強制執(zhí)行特殊操作。
節(jié)點永遠認為最長鏈才是有效的區(qū)塊鏈并將此鏈作為主鏈,區(qū)塊上鏈必須滿足最長鏈機制。當有兩個節(jié)點同時計算出工作量證明值并同時將生成的區(qū)塊向全網(wǎng)廣播時,兩個區(qū)塊都作為鏈的延伸,會導致區(qū)塊鏈分叉,分叉后,繼續(xù)記賬會產(chǎn)生鏈條競爭子鏈。競爭子鏈中誰的工作量更多,誰就能成為新的主鏈,另外一條鏈會作為備用鏈存儲。備用鏈和主鏈會因為后續(xù)業(yè)務(wù)改變工作量而交換。節(jié)點中的最長鏈會替換短鏈。圖5 為系統(tǒng)背書流程圖,當所有的節(jié)點達成共識并更新分布式共享賬本。
圖5 系統(tǒng)背書流程圖Fig.5 System endorsement flow chart
系統(tǒng)運行在Windows 環(huán)境下,JDK 版本使用Java1.8,政采融資平臺系統(tǒng)運行端口為8080,Socket 端口為8081,數(shù)據(jù)庫使用Mysql5.7 版本,數(shù)據(jù)區(qū)塊的信息以JSON 格式前后臺交互,并存儲在分布式數(shù)據(jù)庫中,系統(tǒng)通過外網(wǎng)訪問。在對供應(yīng)商信息和融資業(yè)務(wù)數(shù)據(jù)加入?yún)^(qū)塊鏈技術(shù)進行改造后,數(shù)據(jù)庫中供應(yīng)商身份信息、供應(yīng)商歷史違規(guī)信息、采購計劃信息、中標公告信息、合同信息、融資成交單信息等,使用哈希算法和數(shù)字簽名對數(shù)據(jù)加密,將數(shù)據(jù)存儲在分布式賬本上,利用工作量證明機制防止信息被篡改,通過P2P 廣播新增區(qū)塊信息至每個節(jié)點保證信息同步。在企業(yè)中標政府采購項目后,利用人行的中征平臺企業(yè)征信報告和存儲在區(qū)塊鏈的以往信息,各大銀行可以放心對企業(yè)貸款,簡化了中小企業(yè)融資流程、降低了融資難度和成本。
圖6為后臺廣播新增供應(yīng)商區(qū)塊信息,添加新的區(qū)塊信息后,系統(tǒng)后臺會向各個節(jié)點廣播新區(qū)塊信息。
圖6 廣播新增供應(yīng)商區(qū)塊信息Fig.6 Broadcasting new supplier block information
系統(tǒng)運行后對供應(yīng)商信息進行上鏈測試,各節(jié)點分別生成3 個不同的賬本信息。生成的供應(yīng)商信息鏈區(qū)塊數(shù)據(jù)包括時間、前置Hash、塊Hash和Nonce。
通過對改造前后系統(tǒng)供應(yīng)商歷史違規(guī)比較,在較長時間使用下,利用區(qū)塊鏈技術(shù)的政府采購融資平臺大大降低了供應(yīng)商違規(guī)次數(shù),側(cè)面說明了數(shù)據(jù)的不可篡改和安全性,圖7 表示改造前后系統(tǒng)供應(yīng)商歷史違規(guī)比較結(jié)果。
圖7 供應(yīng)商違規(guī)次數(shù)比較Fig.7 Quantitative comparison of suppliers violations
表5 供應(yīng)商信息鏈Tab.5 Chain of suppliers information
就融資業(yè)務(wù)而言,對比了區(qū)塊鏈改造前后系統(tǒng)采購計劃因信息不一致而遭駁回的數(shù)量(見圖8)??梢钥吹接捎诹鬓D(zhuǎn)中的數(shù)據(jù)一旦被篡改即被發(fā)現(xiàn),不再需要等到流程終末期,因此供應(yīng)商違規(guī)判定的總量明顯減少、相應(yīng)的業(yè)務(wù)流程回退(作廢)次數(shù)也隨之降低,由此顯著提升了融資業(yè)務(wù)辦理效率。
圖8 采購計劃被駁回次數(shù)比較Fig.8 Quantitative comparison of purchase plan rejections
本文對中小企業(yè)傳統(tǒng)融資方式進行改進,提出以區(qū)塊鏈技術(shù)為依托的政府采購融資平臺,交易參與者基于共識機制來保證交易數(shù)據(jù)是共同驗證,交易數(shù)據(jù)不可篡改、可溯源,滿足了財政、采購辦和供應(yīng)商業(yè)務(wù)需求以及政府監(jiān)管和審計。系統(tǒng)魯棒性良好,支持高并發(fā)。
在政府采購環(huán)節(jié)中為企業(yè)做了數(shù)據(jù)依托,緩解了中小微企業(yè)融資難和信息不對稱等問題。研究了聯(lián)盟鏈在融資平臺的應(yīng)用,并且加密算法僅僅使用了Hash 算法,后續(xù)將研究在公有鏈上對信息的存儲加密,使用更加安全的加密算法,保證除了在融資平臺上的企業(yè)征信數(shù)據(jù)的局部共享外,在其他系統(tǒng)也可以保證信息的安全性和準確性。