面向医疗样品跟踪系统的智能合约设计与部署

2022-08-26 01:52:18王越李国叶珉铨陈子鑫王译正
现代信息科技 2022年11期
关键词:本站合约站点

王越,李国,叶珉铨,陈子鑫,王译正

(1. 中国民航大学 理学院,天津 300300;2. 中国民航大学 计算机科学与技术学院,天津 300300;3. 中国民航大学 空中交通管理学院 天津 300300)

0 引 言

随着我国经济水平和科学技术的持续增长,我国人民的医疗水平也不断提高,医疗样品在整个医疗体系中的使用率也不断地提高。由于相关系统和制度规划的完整性不高,所以医疗样品在运输过程中的安全性和真实性存在一定的风险,保证医疗样品在整个运输过程中的安全性也变得越来越重要。

通过医疗样品的跟踪可以了解到不同型号、不同种类、不同标号的样品经过的医院或防疫站、检查站的详细路径信息以及单个样品的详细说明信息。但使用中心化数据库技术,很难保证医疗样品跟踪时信息不被篡改、能够溯源等方面的问题,所以针对医疗样品的跟踪时,使用有着去中心化、不可篡改、可溯源、增强信用等特征的区块链技术就显得十分重要。

1 系统分析

系统的需求分析是项目开发规范中软件定义的一个重要环节,同时也是该系统软件生存周期中的必要途径。该阶段首先站在用户角度来全面客观的了解该系统需要实现的功能,以及用户可能遇到的系统问题。通过需求分析把用户的要求理解的更加准确、清晰和完整。系统需求分析清楚之后,就能够更加快速、高效地实现系统的相应功能。

1.1 系统功能需求点

登录系统的账户为区块链私链所创建的账户,每个账户都可以进行以下操作:

(1)医疗样品入站操作管理:可以填入样品的相关信息,即可实现样品的入站操作。(2)主界面查看所有账户中未隐藏的样品信息:每一条在主界面的样品信息都能点击“查看详情”,了解其样品名称、发起地址、入站时间、当前状态、样品介绍。(3)本站样品分出已进站及已出站的样品信息:登录之后,可以点击“本站样品”,查看已进站及已出站的两栏信息。(4)本站样品执行出站、解除隐藏功能:在本站样品界面点击已入站的样品信息中的“查看详情”,对于状态为“已进站”的样品可以进行出站操作,对于隐藏状态为“true”的样品可以进行解除隐藏操作。(5)查询界面实现样品查询功能:可以通过样品 ID 或者账户地址进行查找相对应的样品信息。(6)查看本站个人信息:可以对本站信息有个大致预览,了解本站的相关信息。(7)查看本站入站/出站、隐藏/未隐藏的样品数量:可以在个人信息界面直观地了解到入站/出站、隐藏/未隐藏的样品数量。(8)修改本站相关信息的功能:通过填入需要修改的站点信息,完成对本站点信息的更改。

1.2 功能模块分析

系统功能主要分为:展示未隐藏样品信息、样品入站操作、本站样品显示、样品出站、解除隐藏、样品查询、站点信息展示、站点信息修改八个大功能模块,如图1所示。

图1 功能模块图

各个功能模块的描述:

(1)展示未隐藏样品信息模块。此功能模块位于主界面“所有样品”中,展示所有账户里未隐藏的部分站点信息,包括:样品名称、ID、入站出站时间、当前状态、查看详情按钮。点击“查看详情”可以跳转至该样品的详细信息界面。

(2)样品入站操作模块。此功能模块位于主界面“所有样品”中,通过点击“样品入站”按钮,填入相应信息即可完成入站操作,填入的样品信息包括样品名称、样品ID、样品介绍、是否隐藏(即是否允许入站的样品被所有人看到)、入站时间。

(3)本站样品显示模块。此功能模块分为两个栏目:1)已入站的样品信息;2)已出站的样品信息。每个栏目都包括部分样品信息:样品名称、ID、入站出站时间、当前状态、查看详情按钮。

(4)样品出站模块。此功能模块为针对已入站的医疗样品,点击已入站的样品最后的“查看详情”按钮,进入之后可以通过按钮实现该样品的出站操作,同时更改样品状态。

(5)解除隐藏模块。此功能模块为针对隐藏的医疗样品,点击隐藏的样品最后的“查看详情”按钮,进入之后可以通过按钮实现该样品的解除隐藏操作,同时更改样品状态。

(6)样品查询模块。此功能模块为通过输入需要查询的样品 ID 或账户地址,点击“查询按钮”,即可获得符合查询条件的样品信息。

(7)站点信息展示模块。此功能模块为展示本站的部分重要信息,其中包括:站点名称、站点地址、站点简介、站点等级、入站数量、出站数量、隐藏数量、未隐藏数量。其中站点名称、站点简介、站点等级可以通过下个功能来进行修改操作。

(8)站点信息修改模块。此功能模块为修改站点信息,点击“修改信息”按钮,填入需要修改的站点信息,点击确定即可实现站点信息修改功能。

2 系统实现

2.1 以太坊与solidity

目前公认的区块链公共平台主要有以太坊和超级账本两种,都是开源且具有智能合约功能。以太坊的概念在2013到2014年之间提出,并在2014年通过ico众筹后得到巨大的发展,在2018年后,成了市值第二高的加密货币,仅次于以太币。其设计原则为简洁、通用、模块化、无歧视,更好地解决初代货币扩展性不足的问题。医疗样品跟踪系统采用的是以太坊平台,使用其自身加密货币以太币提供的去中心化以太虚拟机来处理结点之间的合约。

Solidity是专门用来编写智能合约的高级程序语言,结合了 c++、 python、JavaScript等编程语言的优点,能够更好地适应以太坊虚拟机上运行。Solidity是一门静态语言,能够支持继承、库和复杂用户定义类型等特点,大大提高了区块链对复杂系统的处理能力。

2.2 智能合约设计

2.2.1 医疗样品信息智能合约设计

通过对系统的分析的出需要设计两种存储信息结构体,来满足医疗样品跟踪系统数据的完整性。医疗样品信息可以与流向信息公用,具体定义如表1所示。

表 1 医疗样品信息数据结构表

站点用户信息具有对该站点进行介绍的作用,在整个系统中也是必不可少的,具体定义如表2所示。

表2 站点信息数据结构表

在组织上需要将每个站点的所有医疗信息组织起来,这里使用了solidity中的特殊类型mapping(A≥B),具有从A映射到B的逻辑功能。所以在系统中,使用了一个mapping变量,使每一个样品信息都对应一个阿拉伯数字,类似于java中的hasmap的作用。在寻找信息时,我们就可以通过遍历的方式将所有的医疗样品信息查询出来。

所以还需要设计一个变量来记录医疗样品的数量,来保证我们可以统计到所有的医疗样品。

2.2.2 医疗样品操作信息智能合约设计

系统在实际使用中需要实现信息入库、出库、特殊信息隐藏、医疗样品信息查询以及站点信息维护等多种功能。智能合约功能主要通过solidity语言实现,包括接口定义和接口实现,以下各种接口都是由调用函数名称和调用函数参数组成,在进行操作时,调用对应函数为相关结构体的不同关键字段赋值,实现了信息上传到区块链的过程。

(1)医疗样品信息入库实现,在发布医疗样品相关信息时,前端通过web3调用该智能合约函数来实现信息入库,并为不同字段赋值,入库时需要进行时间检查,保证入库时间为当前时间,否则无法入库,保证了信息时间的真实性。如图2所示。

图2 医疗样品信息入站接口实现

(2)医疗样品信息出库功能,在信息入库时,有一个入库状态 的关键字,入库时设置为false,一键出库调用一个智能合约函数,将该样品在映射中的键值传入,寻找到该样品信息即可修改该关键字实现出库功能。如图3所示。

图3 医疗样品信息出库接口实现

(3)解除信息隐藏功能。在信息入库时可以选择是否隐藏该信息。隐藏信息后。结合实际应用情况,可能会出现隐藏信息公开的情况,所以增加了这个功能,修改对应关键字后,在前端使用Web3调用时即可对该信息进行隐藏如图4所示。

图4 样品信息取消隐藏接口实现

(4)样品信息查询功能,接口中的参数为样品id,查询时输入id号即可。该接口会将满足所有查询条件的医疗样品信息返回到Web端。接口参数包括样品id和账户地址如图5所示。

图5 医疗信息查询接口

(5)站点信息编辑功能,每个账户可以对信息进行编辑并上传到区块链中。Web调用智能合约将对应参数传入,并赋值给对应结构体。如图6所示。

图6 站点信息修改接口

2.2.3 智能合约测试开发环境

项目测试开发环境为以太坊,通过安装以太坊环境,可以通过Remix部署运行智能样品信息取消隐藏接口实现合约,并对该合约进行测试。

(1)安装从golang官网下载安装go环境,并配置环境变量。以太坊由go语言开发而成。

(2)安装geth环境,下载geth源码文件并解压,随后配置环境变量。

(3)创建创世块链并运行节点。在官网下载创世块文件源码文件,通过配置文件中的 不同参数来选择区块链的配置,挖矿的难易程度、网络节点id,以及时间戳等。

(4)创建账户并挖矿,运行该以太坊。通过网页版remix编译环境对写好的智能合约在该环境下进行编译测试。

2.2.4 智能合约部署

只有将智能合约部署到区块链上,才可以执行。本系统利用truffle框架将智能合约部署到ganache创建的本地私链上。创建项目文件夹进行操作。在控制台文件夹下执行truffle init初始化项目配置后开始部署操作。

首先在contract目录中新建sol文件,用来保存编写好的智能合约,随后进入到migrations目录下,新建一个js文件来配置项目,通过artifacts.require来确定哪些合约要部署到truffle框架中,并返回一个对象,为后面的操作使用。

第二步需要配置项目目录下的truffle-config.js文件,来确定配置部署网络和监听端口。配置后使用ganache打开该文件。

通过以上两步操作就完成了框架使用的条件。之后在项目文件下使用 truffle compile编译文件,可以检查智能合约中的错误,防止无法运行的智能合约部署到区块链上。

编译完成之后执行truffle migrate命令,就可以将智能合约部署到区块链上。使用框架将智能合约部署完成后,就可以使用ganache对链上的信息进行操作和观察。

3 系统展示

3.1 页面整体框架

所有页面都是设计成为上下两层样式,主要包括顶部的导航按钮及登录按钮,以及中间部分的页面展示详情页,如图7所示。导航按钮分为四项:“所有样品”“本站样品”“查询”“个人信息”:

图7 导航及登录界面

(1)“所有样品”:在页面中间部分展示所有区块链账户未隐藏的医疗样品信息,同时每条样品信息都能点击最后一项的“查看详情”获取更多的样品信息。

(2)“本站样品”:需在登录后,才能看到样品数据,页面分为两栏,一栏为“已入站的样品信息”,入站状态为已入站的样品显示在该栏目中;另一栏为“已出站的样品信息”,入站状态为已出站的样品显示在该栏目中。

(3)“查询”:点击查询按钮,输入需要查询样品的关键信息即可获取与之匹配的样品信息。

(4)“个人信息”:在页面中能够看到站点的详细信息,包括站点名称、站点地址、站点简介、站点等级、入站数量、出站数量、隐藏数量、未隐藏数量。

3.2 实现样品入站

前端界面先通过登录成功,在账户地址认证栏中显示当前区块链账户进入“所有样品”界面,点击“样品入站”按钮,弹出入站样品信息输入框,弹出框的名称为“入 站登记”,如图8所示。此弹框在输入所有样品信息后,点击“入站”确定按钮,将调用交互文件 中的新创建样品信息newFunding方法。需要填写的样品信息为发起地址(当前登录的账户地址,不可修改),样品名称,样品 ID,样品介绍,是否隐藏(为选择项, 包括“true”和“false”),入站时间(可点击日历控件按钮,选择日历上的时间作为医疗样品入站时间)。

图8 样品入站弹出框

3.3 本站样品界面

点击导航栏的“本站样品”链接,可以清晰地看到上下两栏样品界面,上一栏是本站已入站的样品信息,状态都是“已入站”;下一栏是本站已出站的样品信息,状态为“已出站”。在该界面代码的编写中,使用了通过样品入站/出站状态来划分道不同结果集的getMyFunding 函数方法。每条样品信息后都有“查看详情”按钮,可以进一步查看样品详细信息介绍,也可以对入站的样品进行出站操作,或对隐藏的样品进行解除隐藏操作。

4 结 论

通过对传统医疗样品信息系统进行分析,找出其中存在的关键性问题。医疗样品跟踪系统的主要功能是实现可追溯性,从而保证信息的安全可靠,医疗站点可以通过访问区块链上的信息来跟踪医疗样品的真实性。利用区块链不可篡改信息的特点,来解决系统中存在的不足。同时根据分析结果,设计了对应的智能合约,并将其部署到区块链上。系统部署到运行整个过程包括区块链搭建、智能合约编写、智能合约部署。具体工作为:

(1)基于医疗样品跟踪系统的发展现状。利用区块链的特殊优势,发展了以区块链技术为基础的跟踪系统。有效地解决了医疗样品跟踪系统中存在的信息共享难、中心化严重、信息追溯难等问题。

(2)具体分析了医疗样品跟踪系统架构,详细分析了该系统中数据结构、功能需求,并完成智能合约的编写,使用remix编译器基于以太坊平台对部署的智能合约进行多种测试。

(3)结合最新的环境,使用了truffle框架在ganache上搭建区块链运行环境, 简化了开发过程中重复进行环境搭建过程,系统试错成本低,方便数据测试。保证了整个开发过程高效、快捷。

猜你喜欢
本站合约站点
维斯塔潘卫冕F1总冠军
环球时报(2022-10-10)2022-10-10 13:49:24
SKY微型气象站对比观测数据分析
绿色科技(2021年2期)2021-03-11 00:37:38
基于Web站点的SQL注入分析与防范
电子制作(2019年14期)2019-08-20 05:43:42
2017~2018年冬季西北地区某站点流感流行特征分析
霜冻精细化预报模型
首届欧洲自行车共享站点协商会召开
中国自行车(2017年1期)2017-04-16 02:53:52
怕被人认出
故事会(2016年21期)2016-11-10 21:15:15
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望
利用地面测报软件制作气压简表
黑龙江气象(2010年4期)2010-12-25 09:38:22