APP下载

基于智能合约的银行借贷方案设计与实现

2022-06-28朱福建张春海

软件导刊 2022年6期
关键词:标的借款合约

朱福建,张春海,郭 昊

(中国海洋大学信息科学与工程学部,山东青岛 266100)

0 引言

市场上的理财借贷平台能使一些个人投资者、小微企业等的资金流动更加灵活,在一定程度上满足其快速借款的需求,从而推动市场经济发展。然而,由于缺乏监管,相关平台涌现大量问题,如借款人恶意逃债、平台资金去向不明等[1]。据网贷天眼数据显示,仅2019 年出现问题的借贷平台就新增了763 家。现有的银行贷款多由银行独自放贷并承担风险,借款用户和储蓄投资用户没有直接的资金交易,用户将钱存进银行后,由银行决定存款的使用方式,银行放贷的资金来自于储蓄用户的存款,储户的收益普遍较低。银行贷款在每个时期有一定的倾向性,目前更倾向于向政府扶持发展的行业发放贷款,致使部分个人、小微企业借款困难[2],同样导致了市场资金流动缓慢。

区块链技术凭借其去中心化、可追溯、不可篡改等特点[3],不仅在房屋租赁[4]、产品溯源[5]、电子计票[6]、物流隐私保护[7]方面有所应用,还被广泛应用于医疗数据共享[8]、数字资产交易[9]以及众筹业务[10]等领域。在数字资产交易领域,许梦竹等[11]对多种理财借贷运行方式进行了比较,发现基于区块链的P2P 网贷商业模式具有更好的市场应用前景;琚春华等[12]认为区块链技术在借贷方面具有很好的应用前景,但未实现完整的借贷流程;Li 等[13]提出一种简单的个人借贷方案,通过担保人减少赖账、违约情况的发生,但在匿名性系统中并未指明担保人应如何偿还相关贷款,未对借款人员的还款能力进行评估,亦未指出借款方未按时还款的处理方法[14];柳晶婷[15]以定量的方式对基于区块链的借贷平台进行了风险评估。以上研究旨在通过完全去中心化的方式完成借贷关系,但均无法有效预防废债情况的发生,而且会受困于匿名性的影响,在有违约行为时无法追责到个人。

基于此,本文提出一种基于智能合约的理财借贷方案,首先设计EBBI(Ethereum-Borrower-Bank-Investor)借贷投资模型,使一个标的的发起、投资和还款等操作由银行、投资方和借款方三方参与,通过智能合约算法维护标的状态,实现逾期判定和代偿等功能,解决现有方案中的坏账追责[12-13]问题,同时借款方和投资方采用一对多关系,可以满足借款方快速筹款的需求;然后采用基于深度学习的智能评估预测算法对借款方进行评估,与人工审核相比,提高了贷款资质判断的客观性;最后,该方案中有多方参与主体的信任背书,与当前由银行直接向用户贷款相比,具有分散银行资金风险、提高闲散零户资金利用率的优点[16]。

1 研究背景

1.1 区块链

近年来,区块链由于比特币[17]的出现再次走进大众视野。从狭义理解,区块链就是包含有数据交易信息的区块按顺序组成的链,每个区块都含有父区块的Hash 值、时间戳,采用密码学技术保证数据的不可篡改和不可伪造性,是去中心化的分布式账本数据库[18]。如果想篡改区块链数据,需要拥有全网51%的算力,对于当前节点的算力来说很难达到,因此其数据不可非法篡改的特点受到人们青睐。以太坊区块链[19]被称为区块链2.0 时代,支持图灵完备的智能合约,增强了脚本功能。

1.2 智能合约

2004 年,Nick Sazbo 在IEEE 国际电子合同研讨会上发表智能合约的主题演讲并指出许多合同条款都可以嵌入到硬件和软件中,从而使违反合约的行为变得成本高昂[20]。在区块链技术背景下,智能合约能够在协议既定的条件下,保证借贷、抵押等协议的正常执行,降低合约欺诈、合约逃债风险,将参与者、法律协议、相关商业逻辑程序化,等同于代码中的法律,为基于区块链的应用提供了良好的安全保证,同时也促进了区块链技术在现实生活中的应用[21]。

1.3 去中心化与中心化

去中心化与中心化是一组对立的概念[22]。人们目前使用的很多APP、Web 应用都是中心化的,由某一公司或组织管理其服务,并掌握相关数据、信息。如果服务器出现问题,会面临不可用的问题,同时可能会有数据泄漏、信息违规操作的风险。

基于区块链技术,以太坊社区将基于智能合约的应用称为去中心化的应用程序(Decentralized App,DApp)。其数据不再由某一个中心化的公司或组织拥有,各节点均可以获取完整的数据,不会出现由于某一节点服务失效而造成整个应用宕机的现象。然而,去中心化的应用会面临各节点需要存储大量数据的问题,各节点存储重复的数据在某种意义上是对存储空间的浪费。

2 系统设计

本文基于智能合约的新型理财借贷系统设计出EBBI借贷投资模型。该模型以银行作为中间机构,采用基于神经网络的深度学习风控评估算法预测借款方的还款能力,银行在系统中心化与去中心化部分扮演双重角色。银行中存储借款方的个人信息、借贷记录和违约情况等,借款方向银行提交借款申请以及银行完成智能评估视为系统中心化部分;银行发布标的、借款方和投资方进行资金交易、代偿交易等视为系统去中心化部分。

2.1 系统业务模型

图1 展示了包含借款方借款、银行完成智能评估并发布标的、投资方投资、借款方还款、指定代偿人代偿的EBBI 系统业务模型。以下基于该模型进行具体分析:①借款方(Borrower)指有借款需求的个人或组织;②投资方(Investor)指拥有资金并且有投资理财意向的用户,其选择一些标的产品进行投资,赚取一定的收益;③银行(Bank)既是用户信息的存储中心,完成风险智能评估,扮演着借款方资质复审、追查坏账的重要角色,又是区块链网络中标的的唯一合法发起方,完成标的的新增;④指定熟人指某一标的借款方指定的代偿人,在借款方未能按时还款时,投资方可以启动代偿程序,由该指定熟人完成代偿;⑤监管部门对整体运作模式进行监管,同时也是区块链网络中的一个节点,可以获取交易数据的备份,对资金转移和交易进行跟踪管理。

在使用过程中,一方面为了查验借款用户的还账能力,减小赖帐风险,保护投资用户的合法权益;另一方面,由于区块链数据公开可读,为了保护用户隐私,避免借款方个人隐私信息泄漏,借款方不直接发布标的,而是先向银行提交借款申请,经由银行智能评估后发布标的。投资方可以在平台中浏览查看,选择愿意投资的产品项目,投资资金经由合约账户,再由借款方提取至个人账户,不再是由银行单独放贷,分散了其资金风险。在还款日期截止之前,借款方将资金转至合约账户,然后投资方将相应的本息提取至个人账户,借款方和投资方直接完成一次借贷投资关系。

Fig.1 EBBI system business model图1 EBBI系统业务模型

图1 中数字标注的流程展示了一个最简单的线性借贷投资场景。基于智能合约的理财借贷系统具有以下特点:①去中心化与中心化相结合。在该平台系统中,银行保存用户信息,降低了区块链由于数据的公开可读性而对借款方隐私信息造成泄露的风险,也有助于坏账发生时银行和监管部门介入追查;而基于智能合约的资金交易过程具有去中心化的特点;②标的信息、交易数据等重要信息上链保存。标的信息、抵押资产记录都是借款方的借款证明,因此要确保这些数据不被恶意篡改并且可追溯。将标的信息、用户投资、还款等信息保存在区块链后,监管部门也可以获取相关数据并掌握资金流向。若用户有造假违约行为发生,将会被永久记录且无法消除,对其造成恶劣影响,因此能从主观层面降低参与双方作假的意图;③基于深度学习的风控评估算法完成智能评估。结合深度学习思想完成贷款前的智能评估提高了资质审核的客观性,有利于帮助小微企业、个人实现贷款需求。

2.2 系统架构

该系统包含中心化与去中心化两部分,基于智能合约的理财借贷系统架构如图2所示。

2.2.1 应用视图模块

Fig.2 System structure图2 系统架构

该模块旨在为用户提供简洁的互动和可视化操作界面,满足基本使用需求。在系统的中心化部分,借款用户可以向银行申请注册,发送个人借款申请。该部分采用Vue 前端框架实现,可以通过易用的API(Application Pro⁃gram Interface)实现数据响应和视图组合。

系统的去中心化部分给使用者提供了新增标的、浏览标的、投资和还款等操作的入口。该模块基于以太坊中最受欢迎的Truffle 框架开发,页面采用React+Bootstrap 编写完成,借助通用的Web3.js 库[23]与以太坊的RPC(Remote Protocol Call)接口连接,以完成智能合约的调用、编译和部署操作。

2.2.2 后端逻辑模块

该模块负责接收应用视图模块的请求,进行相应的逻辑处理,并给予视图层相应反馈。系统的中心化部分主要完成用户信息新增和查询、借贷申请新增和查询以及借贷历史查询等逻辑;同时,引入智能风控评估模型,完成对用户借贷申请的智能评估。该模块采用DJango 框架完成,在Python 中,借助通用的Web3 库也可以与智能合约进行交互。系统的去中心化部分主要完成智能合约逻辑的编写,其核心业务功能为标的创建、投资方投资、借款方还款和代偿等,采用Solidity 语言[24]编写智能合约。

2.2.3 数据存储模块

该模块用于持久化数据,保存与用户和交易相关的数据。系统的中心化部分主要存储借款用户提交的相关数据和借贷记录,不上链公开存储的信息。

该模块数据采用MySQL 数据库存储,其可提供安全、保密的数据操作。系统的去中心化部分主要负责存储标的信息和交易记录,基于开源的区块链系统以太坊进行搭建。

2.3 数据库表

用户在向银行申请注册时需要提交自己的基本信息,系统需要对此信息进行保存,并明确用户公钥与身份证号的映射关系,达到降低系统匿名性的目的,保证人员可追溯。因此可建立一张个人信息表,如表1 所示。由于篇幅限制,其他数据库表不再赘述。

Table 1 Personal information table表1 个人信息表

3 系统业务功能与智能合约设计

3.1 系统需求分析

基于智能合约的银行理财借贷系统主要包含借款方、投资方、银行三部分参与者。首先,借款方与银行组成中心化部分,借款方向银行提起借款请求,银行完成智能评估;然后,借款方、投资方和银行三者组成去中心化部分,银行统一发布标的,投资方进行投资,借款方获取借款资金并按时还款。

基于智能合约的银行理财借贷系统包含的主要需求为:①申请借款。借款方向银行发出借款申请,提交相关证明资料,由银行负责审核借贷资质和还款能力;②发布标的。标的只能由银行发布,个人用户私自发布标的不会被智能合约接受;③查看标的。用户可以浏览已发布的标的,选择合适的产品进行投资;④用户投资。当用户有喜欢的标的并且满足投资条件时可以进行投资,投资后,该标的产品会出现在用户的投资列表中;⑤用户提取资金。在合理的标的状态下,借款方仅可提取一次资金,提取后标的状态会被更改为已提取,不再支持投资;⑥用户还款。在标的规定的还款时间之前,借款方将本息转至智能合约账户,完成还款操作;⑦用户收回本息。在借款方完成还款操作后,投资方主动收回本息。

3.2 系统流程

基于系统需求分析,设计基于智能合约的银行理财借贷系统流程,包含申请借贷、发布标的、投资、还款和代偿等核心功能,具体如图3所示。

Fig.3 System flow chart图3 系统流程图

3.3 系统智能合约

3.3.1 新增标的

新增标的是系统的主要功能之一,银行根据借款方提交的借款申请创建标的,标的结构体见表2,枚举类型Sub⁃jectState 表示标的状态,包括Borrowing、PendingExtract、Ex⁃tracted、Overdue 和Completed 5 种状态。如果标的不是由银行发布,则该标的不成立,不会被智能合约通过,如此可以避免由个人虚假借贷而造成的逾期和恶意赖账等不良后果。

Table 2 Subject structure表2 标的结构体

银行通过调用发布标的接口将新的标的信息存储在区块链上,为了确保标的的合法性,程序会对创建者地址进行二次确认,确保是由银行发起的标的。如果借款方有指定熟人,则可在发起标的后添加熟人记录,存储在credit⁃People(mapping(uint=>address)类型)变量中。该信息不随标的信息公开,能够保护熟人的隐私。借款方可以设定可接受的借贷利息loanInterest,如果想尽快借款成功,可在法律允许范围内适当提高借贷利息,这样投资方收益会升高,投资意愿也会增强。在区块链中增加标的的算法ad⁃dLoan步骤为:

3.3.2 投资标的

投资方可以浏览所有标的产品信息页面,查看借款说明和利息等信息,当有中意的产品时,可以自由投资。投资会调用产品投资合约算法,完成相关条件的判断,记录此次交易详情。借款方和投资方可以是一对多的关系,在程序中,通过subjectAndInvestor(mapping(uint=>Investors)类型)变量存储,保证一个标的对应一个投资人集。通过标的ID 可以快速定位到投资人集合,进而查询投资人及对应投资金额,在查询时,时间复杂度为O(1),标的和投资人集合结构如图4所示。

Fig.4 Subject and investor structure图4 标的投资人结构

标的投资方的资金会存放在智能合约账户中,在超过贷款截止时间后,借款方可以提取已借到的总金额。完成标的投资的前置条件为:标的状态为借款中、当前时间早于贷款截止时间和此次所投金额不超过标的目前所需金额。若某用户完成投资后,标的中的amount 和loanAmount相等,则会将标的状态置为PendingExtracted。产品投资的算法subjectInvest 步骤为:

3.3.3 还款

在预计还款日期前,借款方需要将资金提前转移至智能合约账户中。若借款方未能按时将资金转至智能合约账户,则视为未能及时还款,投资方可以将标的设置为逾期,逾期的标的将执行资产抵押或代偿程序。还款的前置条件为:标的状态为Extracted 或者Overdue、发送金额等于本息之和、还款账户与借款账户为同一账户。还款的算法repay步骤为:

3.3.4 代偿

在标的还款日期后,借款方未能按时还款,投资方任一用户可以将标的设为逾期。随后,智能合约程序会判断该标的有无抵押资产,若有,则由银行执行抵押资产清算;若没有,则判断有无指定的代偿人,如有代偿人,该标的将会出现在熟人代偿清单中,由其偿还本息,完成代偿请求。完成代偿的前置条件为:标的状态为Overdue、标的已启用代偿、代偿人账户与当前调用账户一致、还款金额与实际应还金额一致。熟人代偿的还款算法substituteCompensa⁃tion 步骤为:

4 智能风控评估模型

4.1 数据集

本文使用自拍拍贷公开的风控数据集,共有30 000 条记录,其中每条记录包括用户信息、网页信息、教育背景、社交平台信息和第三方平台信息5 个类别共225 个属性;数据集的标签为0 和1,分别表示违约和未违约。从数据集中随机取出24 000 条作为训练集,剩余6 000 条作为测试集用于评价模型性能。

4.2 模型描述

本文搭建的深度学习模型结构如图5 所示,整体思路为先对各个类别的特征单独进行学习和降维,由模型综合考量所有完成降维的特征后作出预测。模型具体实现步骤为:①对各个类别的数据进行初步处理,处理方式包括缺失值补全、归一化和标准化等;②将处理后的数据按类别输入到对应的网络分支中进行特征学习和降维。每个网络分支中包含两个隐藏层,其中第一层为在非线性关系建模的工作中表现良好的长短期记忆网络(Long Short-Term Memory,LSTM),该网络用于对输入的非线性特征进行学习;第二层为全连接层(Fully Connected Layers,FC),该层的主要作用为对特征进行压缩和降维,以减少神经网络的计算量;③将所有降维后的特征连接到一起,经过两层全连接层的学习后得到预测结果。

Fig.5 Deep learning model structure图5 深度学习模型结构

4.3 模型结果评估

在贷款风控的智能评估预测领域,逻辑回归(Logistics Regression,LR)和梯度提升树(Gradient Boosting Decision Tree,GBDT)等机器学习方法[25-26]已经得到广泛应用,但很少有研究者利用基于神经网络的深度学习思想解决这一预测问题。将本文模型与以上两种机器学习算法进行比较,其中本文模型使用Adam 作为优化器,学习率设置为0.01,选择交叉熵作为损失函数,batch size 设置为100,训练150轮后得到最终模型。

表3 为本文模型与LR 和GBDT 的预测结果比较情况,评价指标为准确率(ACC),可以看出本文模型的预测效果能够达到当前主流水平。

Table 3 Comparison of prediction results表3 预测结果比较

5 实验方法与结果分析

5.1 测试环境

在Mac OS Big Sur 11.1 操作系统,2.6 GHz 六核CPU,16GB 内存环境下设计验证实验。基于Node.js 配置Truffle框架及相关依赖,采用Ganache 个人以太坊区块链。同时,采用MetaMask 轻钱包,其无需安装,是谷歌浏览器的一个插件,使用方便易操作。

5.2 测试结果

针对基于智能合约的银行理财借贷系统的借款申请、借贷申请历史查询、标的发布、标的浏览、投资、还款和代偿等重要功能进行了测试。部分功能的实验运行效果如图6、图7 所示。图6 展示了一位投资用户完成投资的过程。图7 以序号151 号标的为例,展示了在借款截止时间后用户的提取资金、还款操作。系统中的其他功能经测试均可正常运行,达到了预期效果。

5.3 系统安全性与可用性分析

本文提出的理财借贷模型和使用的底层技术共同保证了系统及相关数据的安全性,与现有金融借贷投资场景相比,能更好地保护用户资金安全。

在系统业务模型设计和实现过程中,对参与的用户角色和权限作出了明确规定,在执行相关请求前会进行权限判定和条件判断。在智能合约中,调用新增标的的业务逻辑时会对发起方身份进行判定,需要标的发起者地址满足要求才可以新增一项标的。以上权限限制和身份验证操作保证了标的信息的可靠性,同时也保障了系统业务流程的严谨性和安全性。在智能合约的实现中,通过ABDK⁃Math64x64 库完成小数部分的精确计算,保证代码执行阶段数据的真实性,达到保护系统安全的目的。

Fig.6 Subject invest图6 标的投资

以太坊系统拥有活跃的开发者社区,可以保证以太坊平台的平稳运行与升级迭代。基于以太坊区块链的分布式应用将相关数据信息上链存储,确保其不会被恶意篡改,提高了数据安全性。由银行负责处理借贷申请可以保护用户隐私,若借贷者有违约行为,还可以追责到个人,降低了去中心化匿名性带来的风险;同时避免了由单点故障造成的交易数据损失,可以对恶意赖账和逃债情况进行追溯,保障参与者利益,增强系统可用性。

Fig.7 Borrower transaction diagram图7 借款方交易图

与现有的中心化金融借贷投资场景相比,本文模型实现了点对点交易,不影响现有的银行资金流,银行可通过手续费等获取一定收益。在一次完整的借贷还款业务中,借款方和投资方直接完成转账交易;在借款方无法按时还款时,通过抵押资产和熟人代偿程序保证了参与用户资金的安全性。用户在借款时可以有多个投资方,增加了一次借贷顺利完成的可能性,保证了系统的可用性。

5.4 系统性能测试分析

为考察基于智能合约的银行理财借贷系统的性能,本文对新增标的、标的投资人及金额查询等算法的执行效率和吞吐量进行了测试分析。

为了测试新增标的的时间延迟与Gas 费用,实验以每5 个标的数据为一组,求出每组的平均时延,随机选取10组数据,测试效果如图8所示。

Fig.8 Analysis diagram of add subject图8 新增标的分析图

新增标的算法复杂度为O(1),由于所有数据需要上链存储,每一个标的中的数据量大小会影响Gas 费用,时延主要受操作时网络性能的影响,当Gas 费用为20GWei时,测试结果中的最低时延为3s,最高为4s,最高平均Gas费用为0.005 553ETH,最低平均Gas 费用为0.004 197ETH,达到了预期效果。

当投资方执行取回本息等操作时,需要查询标的投资人及对应的投资金额。如图9 所示,当有多个投资人时,查询时间延迟最高为0.39s,在用户可接受的范围内。

Fig.9 Query efficiency of different investors图9 不同投资人数查询效率

图10 展示了不同交易数量时系统查询标的的执行效率,其中横坐标代表当下交易数量,纵坐标表示查询所用平均时间。可以看出,在有500 笔交易时,系统的平均查询时间为0.23s;在有1 000 笔交易时,系统平均查询时间为0.5s左右,表明查询速度较快。

Fig.10 Query efficiency of different transaction quantities图10 不同交易数量查询效率

针对函数写入数据的吞吐量变化如图11 所示。写入数据会重复验证条件、节点打包交易和将新的区块加入区块链的过程。本文还款算法流程较为简洁,因此写入数据吞吐量最高,在开始有一个峰值,随着访问次数的增加,吞吐量有少许下降,但整体趋于平稳,可满足用户需求。

Fig.11 Throughput of write data图11 写入数据吞吐量

6 案例分析

结合“3 000 t茶叶被泡,老板痛哭”事件进行案例分析,对基于智能合约的银行借贷理财系统的有效性进行验证。

6.1 案例简介

2020 年7 月,一场洪水淹了安徽省郑老板茶企厂房3 000 t 茶叶,导致其资金周转困难。作为小微企业,该茶企在抵御资金风险的能力上相对薄弱,在传统银行眼中并不属于还款能力强的优质客户,但在民间仍是一个成功的企业组织,如何快速筹集流动资金成为当务之急。

6.2 改进效果

在茶企申请借贷时,小微企业虽不属于银行优质客户,但本文设计的智能评估模型结合多维度参数计算,认定其属于信用较高客户,给予其借款机会。

在银行发出标的后,当下有闲散资金的用户愿意投资,当参与人员增多时,可以达到快速筹款的目的。标的信息在区块链中永久存储,茶企为了更好地维护企业信用,会更加认真地挽救损失。如此以来,茶企和投资用户完成了点对点的资金交易。于茶企而言,解决了急需资金的问题;于银行而言,分散了资金风险,不影响原本的信贷业务;于其他投资用户而言,将手中闲置资金投入社会,并获取了一定收益。

综上所述,在银行借贷投资方面,应用区块链技术和智能合约能有效改善小微企业贷款难的问题,激励参与者信守承诺,提高了银行的社会影响力,促进了市场健康发展。

7 结语

本文根据区块链中心化与去中心化的特点,设计了一个基于智能合约的银行理财借贷系统。系统中基于神经网络的深度学习智能风控评估模型算法准确率达到94.33%,为后续区块链与深度学习技术的结合提供了一个可行方向;设计的相关智能合约算法能够保证交易高效执行,为小微企业和个人快速筹款提供帮助。随着区块链技术的进一步发展,其与借贷金融场景的结合将会更加紧密。后续将继续完善智能合约的逻辑处理流程,在违约和抵押资产方面避免一刀切的情况,以适应更加复杂的理财借贷场景,造福更多个人和小微企业用户。

猜你喜欢

标的借款合约
借款捆绑婚姻关系致诉讼
不一样的借款保证人
具有两个P’维非线性不可约特征标的非可解群
中东铁路与三喇嘛借款
红周刊绩优指数100只标的股一览
红周刊绩优指数100只标的股一览
红周刊绩优指数100只标的股一览
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望