新型共识算法在募捐系统的研究
2023-02-07谢兆贤邵长彬
谢兆贤,徐 娅,张 青,邵长彬
(曲阜师范大学,山东 济宁 273165)
0 引言
随着区块链技术的快速发展,互联网在公益领域的应用得到质的提升,然而,募捐事业却不时发生诈捐或贪污等情况[1]。针对这种情况,法律制裁治标不治本,可以从技术面杜绝。
系统多数以C/S架构的方式,存在低透明度、安全风险等缺点。去中心化、无法篡改、可溯源的区块链便是一种解决监管[2]和信任不足的方式[3]。
目前已有的应用,多半通过比特币或以太坊公有链作为底层区块链技术,使用PoW或PoS[4]共识算法进行公益账本的验证和同步。缺点是,PoW的耗能高并且交易容量不足,PoS存在安全的风险[5]。
此外,募捐过程之中可能存在想要谋取私利或者破坏募捐系统的恶意节点,传统共识算法对于恶意节点并不具备区分能力。因此,需要使用一种更高效的共识算法,改进传统募捐系统的不足,实现区块链技术在公益领域上的高效应用[6]。
本文的贡献有以下几点:
1)设计与实现以区块链技术为基础的募捐系统。
2)引用去中心化结构,解决单独机构控制系统产生的用户信任问题。系统底层使用区块链技术,由去中心化结构、多个对等节点共同协调控制,使得系统的数据无法被单一用户或机构篡改。
3)发展新型的共识算法对共识节点进行评选。此外,通过惩罚机制对共识节点进行解散,有效地弥补传统募捐系统的不足。
4)提高募捐系统的安全性。由于每一个节点都具有自己的记忆,除非同时对半数以上的节点进行修改,否则都无法实现记录的篡改,以此提高募捐系统的安全性。
1 相关问题
1.1 区块链技术研究现状
区块链的概念来自于Satoshi Nakamoto,本质上是一个分布式的账本[7],凭借其独有的信任建立机制而被应用于车联网[8]、物联网[9]、金融服务[10]等领域[11],正适合解决募捐系统所存在的问题。
1.2 网络募捐系统现状
在国内,2016年7月区块链被首次应用于公益领域。2016年12月《“十三五”国家信息化规划》首次将网络公益列入文件中[12]。
在国外,2016年12月BiGive慈善基金会推出基于区块链技术的募捐平台GiveTrack。
国内外一般都是集中心化的募捐系统,存在信息篡改的缺点[13],多半以建立多层次监管体制的方式解决该问题[14]。然而,监管体制并不能保证可靠,凸显了区块链的重要性。
1.3 传统共识算法的应用
共识算法是用来解决分布式系统问题的算法之一[15],是区块链中的核心技术,依据共识算法的核心公式,带来显著的效率提升[16]。
然而,传统的共识算法存在很多不足,比如PoC存在安全性和稳定性问题[5]。因此,本文提出一种更高效的共识算法,对传统共识算法进行优化。
1.4 问题定义及符号说明
本文中涉及到的符号及意义如表1所示。
表1 符号含义表
定义1哈希运算速度ρ,即参选人员完成哈希运算的速度。设第一个完成计算的人所需要的时间为CTHF,本用户完成哈希计算所需要的时间为CTHS,它们之间存在一种函数关系
定义2信任程度δ,即参选人员在众筹系统之中获得的信用度量程度。设对本用户表达信任的投票人员总数为PeopleS,被投票数最高人员的票数为PeopleF,它们之间存在一种函数关系
定义3捐款数量η。设最多的捐款数量为MoneyF,本用户的捐款数量为MoneyS,它们之间存在一种函数关系
2 募捐系统
2.1 系统架构
募捐系统的运行是一个体系,其用户角色主要分为四类:管理员、委员、提供者和消费者。系统架构如图1所示。
图1 系统架构图
2.2 系统序列图
系统序列图展示本系统的捐款、申请捐助、申请退款的基本流程,如图2所示。
图2 系统序列图
本系统通过系统序列充分保证信息的存储,增强系统的安全性,降低系统发生问题的可能性。
2.3 系统流程
2.3.1 系统总体设计流程
系统从软件结构方面可分为区块链数据层、网络层、拓展层和应用层,系统整体设计如图3所示。
图3 系统整体设计
区块链数据层:区块链中最底层的数据结构,Hyperledger Fabric是IBM发布的区块链平台[17],数据层的工作将由Hyperledger Fabric框架完成。
网络层:在P2P网络上运行区块链数据,重新设计共识算法,使系统稳定运行,网络层的一部分工作将由Hyperledger Fabric框架完成。
拓展层:主要功能是实现智能合约。
应用层:为用户提供登录、捐款、追踪等功能。
2.3.2 智能合约层设计流程
智能合约层设计图显示系统用户的角色及其职能,如图4所示。
图4 智能合约层设计图
3 系统功能模块与算法
3.1 系统功能模块
本系统包含身份管理、项目管理和后台管理等三个子模块,系统功能模块分类如图5所示。
图5 系统功能模块分类
3.2 新型共识算法
捐款领域是区块链应用的一个全新领域,影响共识节点的因素未知,所以使用传统共识算法选择出的共识节点质量可能存在问题。
因此要根据捐款领域的特性研究出一种新的共识算法。该算法需要对捐款系统的共识节点有选择与鉴别的能力,同时在选择的过程中会有一些对于捐款具有危害的恶意节点,还需要对恶意节点进行筛查,即随着选择次数的增多,恶意节点的数量应呈一种下降的趋势。
为满足契合捐款系统的特点,需要获取足够的数据判断哪些因素影响着共识节点的质量。同时,为了满足鉴别功能,设置一些合理的惩罚使其能够对恶意节点进行惩处,同时尽量减小对正常节点的伤害,从而将恶意节点踢除出去,保留正常的节点。
本系统在共识阶段将依据λ,ε,ϑ三项指标,将共识节点选择出来。
本文通过实验对捐款进行模拟,将实验数据进行记录。
式中:Cov(X,Y)为X与Y的协方差;Var[X]为X的方差;Var[Y]为Y的方差。
将众多的实验数据,按照式(1)计算各个参数与节点得分的相关系数,并选择出最高的三个δ,η和ρ。用户参加预选后,平台会向竞选者发送20个哈希值,由用户进行计算,哈希树构建过程只能由本地计算机独立进行。信任程度是该节点在参选过程中,使其通过的人数与总人数之比。捐款数量为当前节点捐款的数量与最高捐款数量的比值。
根据其图像,分数与上述三种变量之间的函数关系大致符合一次关系,为其建立函数模型:
再通过最小二乘法为式(2)求解,设:
再设:
根据式(3)、式(4)求ω1,ω2,ω3,使式(5)成立。
式中,因为一共有3个属性需要参数,所以1≤i≤3。
在式(5)中,Ri为随机数,为其保留一位小数,求得ω1=0.4,ω2=0.4,ω3=0.2,因此最优α,β,θ值为0.4,0.4,0.2。
依据式(5)所求值以及ρ,δ,η得出λ,如式(6)所示:
ε初始值为1,当参选节点担任共识节点一个周期以后,将由投票人员依据该节点的成果对其进行投票,投票通过票数的比例即为ε,ε第一次小于ϑ时,将取消该节点的参选名额,无法参选后每轮将增加0.05ε,当ε增长至大于ϑ时,该节点才可以再一次进行参选,在后续的过程中该节点的失信程度将由式(7)进行计算,其中n表示其小于信任阈值的次数,当节点连续两次担任共识节点时m为1,其余情况为0。
若该参选节点连续担任共识节点,则将φ减1(最小不会小于0),若再次失信则将失信次数按照2n×(1-ε)的指数形式增加,当φ>32时则将对该用户进行调查。采用指数的形式,将其惩罚程度与犯错次数挂钩,同时将ε融入到公式,避免因一次小失误造成巨大的影响。同时,设置禁止期限,也给予了参选节点整治时间。
算法1为新型共识算法,实现共识节点的选择功能与恶意节点的筛查功能。作为系统的核心算法,代码的前19行为选择功能的实现,将节点的各项属性代入式(6)进行计算,并根将合适的节点选择出来。19行以后的部分为筛查功能的具体实现,将节点的各项属性代入式(7)进行计算,并根据计算结果进行筛查。
算法1:新型共识算法
输入:参选人员群P,直接信任程度Direct,反馈信任程度Feedback,信任阈值Threshold,选择的个数n。
输出:选举出的人群p。
1.BEGIN
2.P2=P.copy
/*将增加的反馈信任程度传递下去,对参选人员进行复制*/
3.FOR each i in(0,P2.length)do /*遍历每一个人员*/
4. IF(P[i].Feedback<Threshold)then/*选出反馈信任程度小于信任阈值的人员*/
5. Delete(P[i],P2) /*将该人员从参选人员中删除*/
6. P[i].Feedback+=0.05 /*信任程度增加0.05*/
7. END IF
8.END FOR
9.IF(P2==null)then /*如果所有参选人员都被删除*/
10. Public_knowledge(Threshold,P,n) /*递归该方法*/
11. RETURN
12.END IF
13.CTHF=Min(P2.CTHS) /*选择出最小的运算时间*/
14.MoneyF=Max(P2.MoneyS)/*选择持有钱数最多的参选人员*/
15.FOR each i in(0,P2.length)do/*遍历筛选后剩余的人员*/
16. P2[i].direct=Direct(CTHF,MoneyF,Trust,P)/*计算直接的信任程度*/
17.END FOR
18.p=SelectByValue(P2,P2.direct,n)/*根据直接信任程度选择节点*/
19.RETURN p
20.CONSENSUS /*共识*/
21.FOR each i in(0,p.length)do /*遍历选择出的人员*/
22. p[i].SCORE /*计算所选人员的得分与失信程度*/
23. P[i].SCREENING/*对参选人员代入筛查公式进行筛查*/
24.END FOR
25.END
4 实验结果与分析
4.1 环境的搭建
硬件的配置为处理器IntelⓇCoreTMi7-8565U,内存为8.00 GB;软件的配置为Windows 10,64-bit X86系统,环境为Node.js v14.13.0,测试版本为Gannache v2.0.1,框架版本为Truffle v5.1.46,智能合约版本为Solidity v0.5.12。
4.2 应用界面设计测试结果
图6为募捐系统登记界面,图7为募捐系统项目登记图,图8为募捐系统项目查询图。
图6 募捐系统登记界面
图7 募捐系统项目登记图
图8 募捐系统项目查询图
4.3 系统效率测试结果
4.3.1 系统性能测试
1)测试环境。服务器为腾讯云服务器,其CPU为1核运行内存2 GB。操作系统为Centos7.6 64 bit。测试工具为Caliper。测试配置为Peer和Order,Peer数量为4,Order数量为1。
2)性能测试。因为Hyperledger Fabric中的节点运行在docker容器中,因此在单机上模拟测试分布式网络[18],分别对系统进行写入、查询测试操作。
记录docker容器测试中所测试出来的内存、CPU占用及其吞吐量,测试报告的结果如表2所示。
表2 系统性能测试表
4.3.2 网络吞吐量测试
对系统进行2 000次写入操作与3 000次查询操作,并记录实验过程中的成功次数、失败次数、发送速度、网络延迟、吞吐量,得到的结果如表3所示。
表3 网络吞吐量测试表
2 000次写入操作与3 000次查询操作全部成功,失败次数为0。由结果观察得写入操作平均时延为0.63 s,查看操作平均时延为0.01 s。因此用于募捐场景时本产品具有较好的性能。
4.3.3 共识节点优劣测试
测试数据是从100个报名节点之中选择21个共识节点。首先,建立10个恶意节点,C由程序按照从网络上爬取的比例随机生成,T在0.4以下用随机数,剩余的90个节点则直接按照程序从网络上爬取的数据比例随机生成,对于这100个共识节点分别采用上文中提及的共识机制,与随机采用的共识机制进行生成,产生21个共识节点,其各个方面的随机数据如图9、图10所示。
其中,图9为传统共识算法选出的共识节点的各个属性值,图10则为新型共识算法选出的共识节点的各个属性值(各个属性意义同上),图中的横坐标表示所选择出的21个共识节点,纵坐标为这21个节点的各个属性值。可以明显地看出,新型共识机制在速度、信任程度、共识节点所拥有的捐款数方面较传统的共识机制都具有很大的优势性。
图9 传统共识算法共识节点属性图
图10 新型共识算法共识节点属性图
为更好地模拟现实生活中的情况,本文采用一年的总数据再次进行测试,在每一个过程中采用随机浮动的方式,将共识节点各个方面的数据在0.1的范围之内进行浮动,并在每个月结束时将原先具有的共识节点中δ小于0.6的点提取出来,并在下一轮的选择中再次补充进新的节点。横坐标为一年的12个月份。假设每个月份选择一次,纵坐标为每月选择出的21个节点的数据之和。新型共识算法选择出的共识节点和传统共识算法选择出的共识节点在速度、信任度和所拥有的捐款数量的比较如图11~图13所示。
通过图11~图13可以得出,新型共识算法无论在一年的任何时期,选择出的共识节点明显优于传统的共识算法,并且本文所提出的共识算法在速度、信任程度和所拥有的捐款数量方面均浮动较小,并且总体保持着上升的姿态。这说明,每一次都会将满足共识算法公式的节点选择出来,淘汰掉不好的节点,因此本文的共识算法对于参选节点的整体也具有一定的优化功能,采用区块链技术的新型系统更加可信[19],即随着选择轮次的增多所选择出的节点也会有更优的趋势。
图11 速度对比图
图12 信任度对比图
图13 捐款数量对比图
5 结语
本文将区块链技术结合现实生活中的募捐需求,提出新型共识算法与共识节点的选择机制。该共识节点的算法结合目前捐款过程中的各种因素,对节点进行评估,对恶意节点进行筛选与排除。
本文对区块链的共识机制进行改善,并且开发了新的募捐系统。后续,可以对系统贡献大的节点进行奖励机制的研究,以此提升整体系统的稳定性。此外,对于共识节点的选择,未来可以发展机器学习的方式,对数据进行学习和辅助决策。