融资业务中,信用可靠性是极为关键的问题,人行中征平台的接入部分保证了企业(包括自然人)征信的可靠性,但政府采购预算、中标金额、合同实际金额、企业抵押物(包括应收账款、不动产权证、债权等)等信息源自多个部门的多个系统,大量数据需要从线上落地、人工处理后再到线上,信息处理链条较长、中途存在数据被恶意篡改的风险,银行和财政如果无法及时发现,将导致巨大的金融风险[13]。如果采用通常的方法进行核实查证,又会出现交易周期长、审核环节多、融资成本高等问题,不符合中央及监管部门的政策性要求[14-15]。在这种融资模式中,每个参与方都有自己的账本,在交易发生时各自更改;协同各方会导致额外的工作即中介等附加成本[16-17]。业务交易中,“合同”重复分散在各个参与方,造成整体业务流程的低有效性;整个业务网络依赖于1个或几个中心系统,整个商务网络十分脆弱[18-19]。
针对此问题,引入区块链的供应链技术,使用分布式账本,使参与方节点各自持有相同的账本,在业务发生时,通过工作量证明(proof of work,POW)共识算法确定记账节点,该节点将生成的区块数据进行广播,由各参与节点验证后进行记账。保障流程中的区块链分布式数据存储和存证,可提了高供应链金融过程中数据的真实性。
1 系统设计
1.1 系统总体设计
系统分为2个模块:后台管理模块和交易记账模块。系统结构图如图1所示。
1.2 融资平台后台设计
后台管理模块采用SpringBoot+SpringSecurity+Mybatis + Layui搭建,系统采用 MVC 模式构架,实现前后端分离。图2为政府采购融资平台系统后台页面,系统支持用户管理、角色管理、供应商信息管理、中标信息查询、合同信息推送、合同支付申请、合同融资信息查询以及模块查询。
1.3 区块节点设计
交易记账模块采用SpringBoot+WebSocket+ P2P 搭建分布式账本,引入哈希算法、数字签名、工作量证明、排序机制以及智能合约实现业务背书,实现全局状态数据库的更新到达共同记账的目的,每笔业务交易(实际上还包括政府采购合同、融资合同签署、政府采购黑名单信息、合同履行评价报告等)拥有不可篡改性,使系统的可维护性、安全性、重用性和可拓展性都大大的得到提高。超级账本支持多账本,每个正本数据是分开储存的。每个账本拥有自己的LevelID,确保账本的唯一性,交易数据通过channel 机制实现不同业务交易数据的隔离,保证了交易数据的安全性和一致性,数据通过公私密钥加密,保障各节点数据隐私。系统保障财政、融资企业、银行三方节点业务数据、以及中标公告、采购合同、融资合同、抵押信息等信息真实可信,使融资业务安全高效,能及早发现避免融资风险、法律风险和虚开增值税发票风险。
每一个区块block基本信息单元做如下描述:
(1)Index:区块的索引值,一般从0开始。
(2)TimeStamp:时间戳,创建区块的时间,决定区块的顺序。
(3)Hash:数字指纹,唯一标识数据的值,有固定长度,系统采用 SHA-256加密算法,长度为64位。加密数据的微小改动会导致 Hash 值的巨大变动,由于其不可逆特性保障了数据的安全。
(4)Previous Hash:前置Hash,前一个区块的Hash 值,通过 Hash 值的衔接将每个单独的区块串联为一个交易区块链。创世区块的前置Hash 为0。
(5)Data:存储交易数据。Hash 值依赖Data 数据产生,改变 Data 中的数据新生成的 Hash 值也会改变,导致从该区块后的所有区块将无法通过其余节点校验而级联失效,也就导致了该节点记账失效,保障了区块中的数据的不可篡改。
(6)Nonce:有效散列数。节点通过“挖矿”寻找一个数值N,N满足N + Index + PreviousHash + Timestamp + Data 经加密算法生成的新的Hash 值满足规定条件。这个N 就是“矿”值,最先计算出该值的节点将获取该次交易的记账权。N值有“难计算、易验证”的特性。
区块中一般会设置 Hash 的计算难度,规定满足某一特定条件的 Hash 才会被其他节点承认从而记账。一般用设置“前导0”(Hash 散列的前n位为0就称前导0为n,n<64)个数的方式来设置“挖矿”难度,前导0个数越多,挖矿难度越大,那么要强行篡改区块记录的难度就越大。节点生成的Hash值只有满足系统预先设置的前导0个数才能算一个有效Hash,被其他节点验证承认。
图3是将政府采购融资平台数据库的供应商信息和融资业务数据后台业务逻辑利用区块链技术进行改造,利用分布式数据存储、加密算法、工作量证明以及排序机制等技术的基础上,对融资过程所涉及到的各个环节、各个企业的各类信息进行收集与存储,银行对企业征信信息验证以及共识算法使得众多数据信息能够不易篡改,也有助于企业融资。
1.3.1 供应商信息区块
(1)供应商身份信息
当供应商通过平台注册时,系统首先会根据供应商提供的信息核查供应商信息,校验通过后,供应商身份信息封装在区块的 Data 中,相关字段如表1所示。
(2)供应商历史违规信息
银行节点和业务会计可通过供应商表现对供应商进行评价,如有违规会影响供应商信用等级,违规信息和评价信息也会封装在区块中。主要的字段如表2所示。
1.3.2 融资业务区块
(1)中标公告信息
企业通过政府渠道采购招标后会生成中标信息,中标信息会在区块中存证。在区块中的存储参数包含信息如表3所示。
表3 中标公告信息
Tab. 3 Bid winning announcement information
[类型 名称 字段描述 String ANNCODE 中标公告编号 int STATUS 有效标识 Date CTIEM 中标日期 int TYPE 采购方式,值同采购计划信息的PTYPE long TEL 企业办公电话 int CRELEVEL 信用等级,-3~+3共7个等级,初始值为0 int PLANNUM 采购计划编号 ]
(2)融资成交单信息
融资成功会生成融资成交单,成交单会在区块中存证,成交单信息包含的参数如表4所示。
表4 融资成交单信息
Tab. 4 Financing transaction order information
[类型 名称 字段描述 String BCODE 成交单编号 String DEPNA 采购单位名称 String SID 供应商ID String SNAME 供应商名称 String BANKOC 银行组织机构代码 String BNAME 银行名称 Date TDATE 合同成交日期 String ANNCODE 中标公告编号 String CODE 合同编号 Double TOTALM 订单金额 ]
1.4 信息区块存储
对于政府采购融资平台的供应商身份、供应商历史违规、采购计划、中标公告、合同和融资成交单等重要信息进行存储在每个区块中,将这些数据定义为交易信息tradeData,同时系统给定一个难度值D。当对数据进行区块存储时,需要寻找满足条件的随机数值Nonce,使得通过哈希计算得到区块的哈希值blockHash低于目标难度值D,Pow共识算法表述为:
blockHash=Hash(tradeData,Nonce)<<D
由于哈希算法的输入敏感和抗碰撞性,供应商和系统用户对数据进行写入节点时需要不断的调整随机数值Nonce,通过这种计算资源的方式达到写入节点数据的工作量证明(身份验证)。写入数据称为“工作者”,验证节点信息称为“验证者”,其中,工作者需要进行一定难度的哈希计算得到一个结果,而验证者通过简单的计算就可以判断工作者是否做了对应难度的计算,从而达到了数据的不可篡改性和该机制有效的抵御了分布式系统中的女巫攻击问题。
1.5 交易模块实现
业务数据将会封装在区块中,通过SHA-256算法生成满足前导0条件的Hash散列值和随机数Nonce值。Nonce 值挖取采用POW工作证明机制,通过大量的迭代计算得出工作量证明值。图4为创建节点的算法流程,通过判断nextHash值是否满足前导0条件进行“挖矿”产生节点信息。
计算出满足条件的Hash散列值后,系统调用背书策略验证,判断生成的Hash值是否正确,生成新的交易区块,当新生成的满足条件:①区块索引大于最新区块索引;②业务交易流水号不重复时,通过广播机制实现区块上链账本更新。特定的业务会触发智能合约机制,强制执行特殊操作。
节点永远认为最长链才是有效的区块链并将此链作为主链,区块上链必须满足最长链机制。当有两个节点同时计算出工作量证明值并同时将生成的区块向全网广播时,两个区块都作为链的延伸,会导致区块链分叉,分叉后,继续记账会产生链条竞争子链。竞争子链中谁的工作量更多,谁就能成为新的主链,另外一条链会作为备用链存储。备用链和主链会因为后续业务改变工作量而交换。节点中的最长链会替换短链。图5为系统背书流程图,当所有的节点达成共识并更新分布式共享账本。
2 系统测试
系统运行在Windows环境下,JDK版本使用Java1.8,政采融资平台系统运行端口为8080,Socket端口为8081,数据库使用Mysql5.7版本,数据区块的信息以JSON格式前后台交互,并存储在分布式数据库中,系统通过外网访问。在对供应商信息和融资业务数据加入区块链技术进行改造后,数据库中供应商身份信息、供应商历史违规信息、采购计划信息、中标公告信息、合同信息、融资成交单信息等,使用哈希算法和数字签名对数据加密,将数据存储在分布式账本上,利用工作量证明机制防止信息被篡改,通过P2P广播新增区块信息至每个节点保证信息同步。在企业中标政府采购项目后,利用人行的中征平台企业征信报告和存储在区块链的以往信息,各大银行可以放心对企业贷款,简化了中小企业融资流程、降低了融资难度和成本。
图6为后台广播新增供应商区块信息,添加新的区块信息后,系统后台会向各个节点广播新区块信息。
<G:\武汉工程大学\2022\第4期\沈 斌-6.tif>
图6 广播新增供应商区块信息
Fig. 6 Broadcasting new supplier block information
系统运行后对供应商信息进行上链测试,各节点分别生成3个不同的账本信息。生成的供应商信息链区块数据包括时间、前置Hash、块Hash和Nonce。
通过对改造前后系统供应商历史违规比较,在较长时间使用下,利用区块链技术的政府采购融资平台大大降低了供应商违规次数,侧面说明了数据的不可篡改和安全性,图7表示改造前后系统供应商历史违规比较结果。
<G:\武汉工程大学\2022\第4期\沈 斌-7.tif>[1 2 3 4 5 6 7 8
使用时长 / h][24
22
20
18
16
14
12
10
8
6
4
2
0][供应商历史违规数][传统系统
本文区块链改造后系统]
图7 供应商违规次数比较
Fig. 7 Quantitative comparison of suppliers violations
就融资业务而言,对比了区块链改造前后系统采购计划因信息不一致而遭驳回的数量(见图8)。可以看到由于流转中的数据一旦被篡改即被发现,不再需要等到流程终末期,因此供应商违规判定的总量明显减少、相应的业务流程回退(作废)次数也随之降低,由此显著提升了融资业务办理效率。
<G:\武汉工程大学\2022\第4期\沈 斌-8.tif>[48
40
32
24
16
8
0][返回数量][1 2 3 4 5 6 7 8 9 10 11 12
使用月份][传统系统
本文区块链改造后系统]
图8 采购计划被驳回次数比较
Fig. 8 Quantitative comparison of purchase plan rejections
3 结 论
本文对中小企业传统融资方式进行改进, 提出以区块链技术为依托的政府采购融资平台,交易参与者基于共识机制来保证交易数据是共同验证,交易数据不可篡改、可溯源,满足了财政、采购办和供应商业务需求以及政府监管和审计。系统鲁棒性良好,支持高并发。
在政府采购环节中为企业做了数据依托,缓解了中小微企业融资难和信息不对称等问题。研究了联盟链在融资平台的应用,并且加密算法仅仅使用了Hash算法,后续将研究在公有链上对信息的存储加密,使用更加安全的加密算法,保证除了在融资平台上的企业征信数据的局部共享外,在其他系统也可以保证信息的安全性和准确性。