第 22卷第 5期2023年 5月
Vol.22 No.5
May 2023
软件导刊
Software Guide
一种基于区块链技术的医疗众筹系统
檀钟盛
(福建工程学院互联网经贸学院,福建福州 350108)
摘要:医疗众筹作为一种新的互联网筹款募捐活动,已被广泛关注和应用,但传统医疗众筹组织存在资金挪用、资
金动向不明、用户隐私信息泄露等问题。引入区块链技术,基于智能合约机制与属性、系统结构和业务逻辑,搭建基
于区块链技术的医疗众筹系统,将区块链技术与非对称加密相结合,满足了用户隐私不被泄露、资金去向明朗等需
求。将医疗众筹平台与传统医疗众筹平台进行比较分析,证明该方案能够有效解决资金挪用、筹款退回难和用户隐
私泄露问题。
关键词:区块链;以太坊;智能合约;医疗众筹;非对称加密
DOI:10.11907/rjdk.221592开放科学(资源服务)标识码(OSID):
中图分类号:TP391  文献标识码:A文章编号:1672-7800(2023)005-0122-06
A Medical Crowdfunding Scheme Based on Blockchain Technology
TAN Zhong-sheng
(School of Internet Economics and Trade,FuJian University of Technology,Fuzhou 350108,China)
Abstract:As a new Internet fundraising and fundraising activity, medical crowdfunding has been widely concerned and applied, the current medical crowdfunding organizations have problems such as misappropriation of funds, unclear fund movements, and leakage of user privacy in‐formation. In order to solve the above problems,this paper proposes a medical crowdfunding scheme based on Ethereum smart contracts. Based on the smart contract mechanism and properties, the system structure and business logic are introduced in detail, and the specific sys‐tem implementation of the platform is given. This paper builds a medical crowdfunding platform based on blockchain technology, which com‐bines blockchain technology with asymmetric encryption to meet the needs of users' privacy not being leaked and the whereabouts of funds be‐ing clear. By comparing and analyzing the medical crowdfunding platform and the traditional medical crowdfunding platform, it is proved that the scheme can effectively solve the problems of fund misappropriation, difficulty in returning fundraising and leakage of user privacy.
Key Words:blockchain; Ethereum; smart contract; medical crowdfunding; asymmetric encryption
0 引言
近年来,区块链技术在非金融领域的应用日渐增加,如域名服务(DNS)、人工智能、医疗卫生、物联网、竞买合约等[1]。尤其在医疗领域,随着区块链技术的发展,其不断衍生出各类应用。医疗众筹领域也不例外,由于我国尚无法实现大规模的全民医疗保障,医疗的高昂费用往往导致患者家庭因病致贫和无钱现象,因此大量医疗众筹项目应运而生。然而,目前医疗众筹存在以下问题:(1)资金流动不明。在现行筹款体系下,由于人力和物力等一系列因素,很难对资金流向进行公开,捐助人往往自己都不清楚捐款动向,这导致捐款者对医疗众筹项目信心不足,降低了医疗众筹机构的公信力,削弱了民间资本进入众筹机构的热情。
(2)对用户隐私保护不足。随着互联网的兴起,越来越多的用户信息显示在互联网上,众筹机构将用户隐私泄露给第三方的问题也时有发生,这给一些不法分子可乘之机。例如,2022年2月北美众筹机构GiveSendGo就遭遇了黑客攻击,致使9万多人隐私泄露。
(3)筹款退回难。当前,众筹体系中后续退款非常困难,许多病患在疾病不治或治愈后,大量善款占为己有拒不归还,这严重影响了民众参与医疗众筹的积极性。
针对上述痛点,本文将区块链和非对称加密相结合,提出基于以太坊智能合约的医疗众筹方案。该方案可有
收稿日期:2022-05-30
基金项目:福建省科技创新战略研究项目(2019R0086)
作者简介:檀钟盛(1997-),男,CCF会员,福建工程学院互联网经贸学院硕士研究生,研究方向为区块链技术。
第 5 期檀钟盛:一种基于区块链技术的医疗众筹系统效解决用户隐私泄露、资金挪用、善后筹款等医疗众筹问题。
1 相关工作
1.1 以太坊
2009年,随着比特币的推出,区块链应运而生。区块
链由数据层、网络层、共识层、合约层、激励层和应用层组成,具体如图1所示。区块链具有去中心化、时序数据、集体维护、可编程和安全可信等特点[2]。比特币为区块链1.0版本,比特币是专门为而生,某些程度上限制了其发展[3]。随着区块链技术的不断发展,迎来了区块链2.0版本,该版本增加了智能合约这一重要项。目前,以太坊是极具代表性的智能合约开发平台之一,它使用以太虚
拟机(Ethereum Virtual Machine )处理智能合约。具体而言,以太坊是基于一套图灵完备的脚本语言加以实现,开发者可以通过以太坊官方推荐语言Solidity 创建应用。
1.2 智能合约
智能合约这个概念最早由美国计算机科学家尼克·萨博(Nick Szabo )提出,智能合约是一种用算法和程序编制合同条款、部署在区块链上且可按照规则自动执行的数字化协议[4]。智能合约一旦部署就会严格按照合约内容进行自我执行和自我验证,执行过程中无法被人为干预,确保了智能合约的权威性。
与传统合约相似,智能合约周期包括合约生成、合约发布、合约执行3个方面,如图2所示。
合约生成,主要包含合约参与者协商、制定合约规范、进行合约验证、获得合约代码4个环节[5]。具体实现过程为:合约参与方进行协商,确认各方责任,经验证后获得标
准合约代码。其中,合约规范和合约验证尤其重要,合约编写不规范则会发生安全问题[6],例如2016年以太坊The Dao 事件。合约发布与交易发布相似,签名后的合约通过P2P 发送到每个节点,每个节点会通过共识协议确认合约,最终所有节点会对发布的合约达成共识,并将合约写入区块链中,合约执行过程完全由区块链内置的智能合约
自动处理,公开透明、不可篡改。
智能合约与区块链的结合使区块链的应用场景得到极大扩展,并引起多方关注。总体而言,智能合约具有以
下优点:①准确性:智能合约一旦部署,其内容与执行过程无法被外界因素干预,保证了智能合约的准确性;②高效性:智能合约是一种按照规则执行的数字协议,具备自我执行和自我验证功能,这极大降低了合约执行中的成本,提高了合约执行效率;③实时性:智能合约调用期间无需第三方参与,任何节点都可以调用智能合约。
1.3 相关研究
为了保证资金去向明朗、用户隐私不被泄露、资金不被挪用问题,非对称加密和区块链成为医疗众筹方案中不可忽视的重要环节。区块链作为一项新兴技术应用于多个不同的场景,例如人工智能[7]、金融[8]、医疗[9]、能源[10]等领域。
张巧良等[11]对英国Medicalchain 公司的众筹案例做了详细分析,总结其成功融资的因素之一在于项目基于区块链技术的必要性,但项目的财务信息却存在披露不足的问题。Zhang 等[12]指出在医疗众筹领域,许多人对参与众筹
Fig. 1 Blockchain structure
图1 区块链结构
Fig. 2 Smart contract lifecycle 图2 智能合约生命周期
·
·123
2023 年
软件导刊
信心有限,因为他们害怕或不知道谁的需求更为迫
切,这些信任问题导致许多医疗众筹项目资金不足。苏敏
等[13]指出国内众筹平台法律法规尚不完善,需要众筹平台
与医院合作。上述研究指出了当前医疗众筹项目的主要
问题,但并未给出具体方案。鉴于此,本文根据上述问题,
将相关工作的重点转向区块链方面。
李琪等[14]等将布比公司开发的区块链作为底层技术,
规定了众筹发起者只能在特定场所使用善款,在一定程度
上限制了善款被滥用,但是对善款挪用等问题还是没有好
的解决措施。陈志东等[15]提出众筹业务在私有链(Crowd‐
funding Private Block Chain,CPBC)上的架构应用,极大加
强了金融数据方面的安全和公信力。Nor等[16]提出基于
以太坊平台的灾区众筹系统,将区块链技术应用于灾情捐款,在灾难期间为受害者筹集资金和管理援助救济,解决了灾区的捐款问题。付利青等[17]利用区块链技术提出一个隐私性的以太币投票协议,解决了资金流向黑洞的问题。拜亚萌等[18]提出将区块链技术应用于电子健康记录,加强了电子健康记录的安全共享。Jayasinghe等[19]提出将比特币与慈善系统相结合,建立以区块链为核心的慈善系统。谭文安等[20]提出一种区块链的医疗捐款方案,解决了资金动向不明朗这一问题,方法具有普适性,但是没有解决被捐助人的隐私保护问题。上述研究给众筹系统实现带来了启示,但没有解决医疗众筹方面的用户隐私保护和筹款滥用等问题。
基于此,本文提出并实现一个基于区块链的医疗众筹系统,既保证筹款信息真实可靠,杜绝筹款滥用和筹款挪用,又满足用户隐私不被泄露、合约终止时筹款退回的需求。
2 系统架构模型
2.1 业务流程
为了防止医疗众筹资金挪用和资金动向不明问题,本文引入区块链技术搭建医疗众筹系统。系统功能包括筹款申请、捐款操作、申请支付、筹款退回等操作,具体流程如图3所示。系统还设置了支付申请机制,同时利用智能合约设置了指定医院地址并完成自动转账,避免了资金挪用问题。
众筹发起者填写必填信息生成合约,系统使用平台官方的公钥对用户隐私信息加密,并将生成的密文上传以太坊节点,平台工作人员从节点上获取用户上传的众筹信息,对其中加密部分使用平台官方的私钥进行解密从而得到明文。平台官方确认众筹真实无误后,将合约审核通过,确保之后该众筹合约可以进行筹款。众筹参与者可以支付合约规定的众筹金额参与众筹,众筹金额达到发起者设定的目标金额后合约将会宣布众筹成功。为了防止资金挪用,系统设置了申请支付功能,当发起者需要购买物品时需要先发起投票,然后等待参与者投票,参与者查看申请要求觉得合理便可投赞同票,赞同票过半则发起者可支付交易,其中转账地址必须为指定的医院地址,若填写地址和指定医院地址不同,则转账失败,确保筹款无法被挪用。若病人病愈则众筹参与者可拿回剩余筹款。
2.2 系统设计
系统可分为3部分:Web前端、智能合约、以太坊模块。系统具体架构如图4所示。
Web前端使用react框架,Web前端模块为用户提供了良好的可视化交互界面。通过与前端页面交互提交各类请求数据,通过智能合约提供的接口将数据提交到以太坊节点上。
中间部分为智能合约,本文智能合约使用Solidity语言开发。智能合约为众筹参与、支付申请、投票支付申请等函数提供了一个交互的接口,通过智能合约将数据存储到以太坊区块上,当进行众筹参与时会自动调用智能合约上的众筹参与函数完成交易操作。病人治愈后,当众筹参与者进行筹款退回时会自动调用智能合约上的筹款退回函数完成交易操作。
以太坊模块作为底层支撑提供了数据存储功能,负责存储智能合约代码和执行智能合约,对前端传来的请求通过执行智能合约中对应的算法生成结果,结果通过PoW
Fig. 3 System business flow chart
图3 系统业务流程图
Fig. 4 System architecture design
图4 系统架构设计
··124
第 5 期檀钟盛:一种基于区块链技术的医疗众筹系统
(Proof of Work工作量证明机制)共识协议写入以太坊账本中。
3 模块功能与合约设计
3.1 前端设计
Web前端页面主要有众筹发起、参加众筹、众筹发起人发起支付申请、众筹参与人同意支付申请等功能。Web 前端采用react为前端框架,通过web3.js(与以太坊兼容的JavaScript API)与以太坊节点进行连接从而调用智能合约方法。运行ganache(本地私链)在本地进行测试,通过Google浏览器中的MetaMask插件(以太坊钱包)与以太坊进行交互,生成的交易数据通过MetaMask发送到以太坊网络,并通过MetaMask支付gas手续费等付费操作。
MetaMask钱包是一个轻量级钱包,支持大多数以太坊网络,可以保管用户的私钥、交易记录、地址等。区块链钱包分为全节点钱包与轻节点钱包。全节点是完整拥有区块链上所有数据的节点,使用全节点钱包需要下载区块链上所有的数据以便与区块链上别的节点同步,对硬盘容量要求大,下载数据也比较费时。轻节点钱包依赖区块链上的其他全节点,只需要同步自身数据,不用下载庞大的区块链数据,使用户可以十分方便地管理自身数据。
3.2 智能合约模块
医疗众筹系统利用区块链技术完整地记录众筹发起人、众筹参与人、目标金额、众筹参与金额等信息。通过区块链数据追溯性和不可篡改性,从而构建可信第三方,同时为监管机构和司法仲裁机构监管提供有效的数据支持,有助于解决涉及医疗众筹的真实性等纠纷。众筹合约发起前必须向众筹平台进行身份
确认和病情确认,确认无误后审核方可通过,合约发起后任何人都可投注支持金额加入众筹合约。医疗众筹系统具有申请付款、同意付款和完成付款等功能。智能合约字段如表1所示。3.2.1 众筹申请
众筹申请为该系统中非常重要的的功能之一,众筹发起者首先使用平台公钥对其隐私信息进行加密,并将信息上传以太坊,之后众筹平台工作人员从以太坊节点上获取众筹发起者上传的信息,使用平台私钥对加密部分进行解密。工作人员对众筹合约真实性确认无误之后将合约审核通过,合约审核通过后,任何人都可以参与医疗众筹。算法1 众筹申请算法
Funding
(1)Input:diseaseName,userName,phone,supportMoney,goal‐Money
(2) //生成自身公私钥
(3) key = NodeRsa({b:指定密钥长度});
(4) pub = key.GenKey(public);
(5) pri = key.GenKey(private);
(6) myEncrypt = NodeRsa(pltform_pub);
(7) Encrypt = myEncrypt(pri_info, 'base64');
(8)function(){
(9) manage = msg.sender;
(10) name = username;
(11)……
(12) goalmoey = goalMoney;
(13)}
3.2.2 众筹参与
合约发起后,任何爱心众筹人都可参与众筹,众筹参与人投注合约的固定支持金额就可加入该合约。众筹参与人投注的合约、审核状态通过、众筹未完成,如果上述条件全部通过则跳出合约支付界面用于支付众筹金额,支付成功则表明加入该合约。
算法2 众筹参与算法
Supoort
(1)Input:Null
(2)functon(){
(3) If passed == True && flag == False then
(4) If msg.value == supportMoney then
(5) Successful betting;
(6) player.push(msg.sender);
(7) Else
(8) Betting failed;
(9) Else
(10) The current contract is not eligible for fund-raising;
(11)}
4 实验分析
4.1 测试环境
在Window10操作系统下实现医疗众筹系统,实现众筹系统必须安装 Node.js,Truffle框架、MeatMask钱包、Ga‐nache-cii、web3.js、remix(智能合约网页编译器)。智能合
Table 1 Crowdfunding contract fields 表1 众筹合约字段
属性类型address address string string string uint uint uint uint uint bool address[]bool Request[]Mapping Hopaddrss 智能合约字段
platform
manage
disName
id
name
phone
supportMoney
goalMoney
curMoney
remainMoney
passed
player
flag
request
playMap
address[]
含义
众筹平台地址
发起人地址
疾病名称
病人身份证
病人姓名
病人电话
目标金额
总共需要的钱
已经筹到的钱
退回金额
审核是否通过
众筹参与人
众筹是否成功
付款申请数组
对应的众筹人
医院地址
·
·125
2023 年软件导刊
约首先在remix上测试功能,之后使用ganache在本地测试智能合约。在本地测试完毕后部署到以太坊rinkeby网络上。
4.2 测试结果
针对该系统的众筹申请、众筹参与、退钱等重要功能进行一系列测试。众筹申请和众筹参与退钱等会对以太坊节点数据有修改的操作都会通过MeatMask被打包写入以太坊节点中。众筹筹款展示、众筹信息查询这些不会对以太坊节点有修改的数据则不用被打包写入以太坊节点中。
以太坊节点在以太坊虚拟机中运行交易触发代码,以太坊中发送、存储、执行计算等一系列改变区块状况的操作都需要消耗gas(EVM中每步操作都会消耗一个固定的消耗值)。gas price是单个gas的价格,实际操作中交易成本为gas × gas price。
该系统中,智能合约部署在以太坊rinkeby网络中,部署合约的账户地址为0xC2FC51c9eD99905bCB‐
DcB1d5fe9296E6E5977510,智能合约的部署地址为0xe6016458c06036c0e335ac3d52d0b8d4714e69a6。利用智能合约分析各函数消耗的花费。众筹发起者发起con‐structor需要花费0.0050030284ETH(以太币),众筹参与者发起support需要花费0.0002420076ETH,平台人员审核通过众筹合约需要花费0.000109710ETH,众筹发起者发起支付请求需要花费0.000325312ETH,众筹参与者对支付请求进行投票需要0.000178620ETH,众筹参与者拿回筹款需要花费0.00013872ETH。智能合约具体花费如表2所示。表2数据证明方案所消耗的成本是可接受的。
4.3 与传统平台比较分析
与传统众筹平台相比,该系统有较大优势,主要分析如下:
(1)众筹善款不能被挪用。智能合约规定了投票机制,任何支付申请都需要通过参与者的赞同投票,严格控制了资金使用,同时又对转账地址做了严格控制,资金只能转向指定医院,若转账地址和指定医院地址不符合,则无法支付,有效规避了资金挪用的风险。
(2)善款流向透明。系统将众筹申请、众筹参与等交易信息全部写入以太坊节点中,每个以太坊节点都完整保存了每笔交易的交易信息,任何人都可通过以太坊平台查询众筹合约细节及众筹善款流向。
(3)确保筹款真实性。该系统采用人工审核方式,众筹发起人填写信息发起合约后需要与众筹平台进行联系,当众筹平台工作人员对众筹发起人提交的信息核实确认无误后则将合约审核通过,有效确保了众筹的真实性。
(4)筹款可退还。对于传统众筹平台,当众筹完成之后,病人治愈后也不会退回剩余筹款。本文设计筹款退回算法,病人治愈众筹参与者则可领会剩余筹款。由于智能合约上链无法被修改,因而剩余筹款一定会退还到众筹参与者手中,有效增强了众筹参与者对众筹系统的信心。
(5)用户隐私得到保护。近来年,隐私泄露问题屡见不鲜,本文将非对称加密运用于医疗众筹中。众
筹发起者的隐私信息通过平台的公钥进行加密,并上传以太坊节点,此时即便信息被拦截,没有对应的私钥仍然无法解开,有效保护了用户隐私安全。
5 结语
传统的众筹平台存在诸多问题,众筹参与者普遍怀疑众筹真实性。本文探究如何将区块链用于医疗众筹,提出了一种新的方案,通过智能合约对资金挪用、资金去向不明、筹款退款难等问题进行处理,有效防范了上述风险,解决了传统众筹平台公信力问题。
下一步研究中,将重点考虑以下几点:①目前Pow共识算法对平台效率有一定影响,考虑是否换成Pos或者别的共识协议;②该系统在众筹申请时需要众筹发起者与众筹平台工作人员核实信息,是否可以通过智能合约考虑去掉第三方,真正实现众筹发起者和众筹参与者点对点交互;③该系统为了保护用户隐私,对用户隐私信息进行加密,但同时也让合约真实性受到一定质疑,下一步应该考虑是否按文献[9]所述将众筹系统与医院相结合,由医院担保众筹真实性,从而提高合约真实性;④由于在当下政策环境中可行性存疑,是否考虑用数字人民币与智能合约相结合,实现基于数字人民币的医疗众筹系统。
参考文献:
[1] LIU Z A, HUANG Y Y, MA J L,et al. Design and implementation of a monitoring platform for medical data abuse based on blockchain[J].Infor‐
mation Network Security, 2021,21(5):58-66.
刘子昂,黄缘缘,马佳利,等.基于区块链的医疗数据滥用监控平台设
计与实现[J].信息网络安全,2021,21(5):58-66.
[2] YUAN Y, WANG F Y. Current situation and prospect of blockchain tech‐nology development[J].Chinese Journal of Automation,2021,42(4):481-494.
袁勇,王飞跃.区块链技术发展现状与展望[J].自动化学报,2021,42
(4):481-494.
[3] XIE H,WANG J.Study on block chain technology and its applications[J].
Netinfo Security,2016(9):192-195.
[4] SHAO Q F,JIN C Q,ZHANG Z,et al. Blockchain technology: architec‐
Table 2 Smart contract spending test 表2 智能合约花费测试
函数Constructor support setpassed setHopaddrss updatePatientState CreateRequest approveRequest finalizeRequest moneyBack 消耗的gas
2 001 210
96 803
43 884
68 662
45 554
130 125
71 448
63 932
55 488
实际花费/ether
0.005 003 028 4
0.000 242 007 6
0.000 109 710
0.000 171 655
solidity
0.000 113 88
0.000 325 312
0.000 178 620
0.000 159 830
0.000 138 72
··126

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。