收稿日期:2020年6月13日,修回日期:2020年7月26日基金项目:科技部重点研发项目“现代服务可信交易理论与技术研究(面向服务可信交易的新型区块链分布式架构)”(编号:2018YFB1402701)资助。作者简介:雷志伟,男,工程师,研究方向:区块链、游戏引擎开发。李加福,男,高级工程师,研究方向:区块链、图像处理。张桂刚,男,博士,副研究员,研究方向:区块链和人工智能。赵旭,男,硕士,研究方向:区块链、机器翻译。张勇,男,博士,副研究员,研究方向:数据管理、云存储、海量信息处理。邢春晓,男,博士,研究员,研究方向:数据库和数据仓库,大数据和知识工程、人工智能,软件工程,区块链技术,智慧城市、智慧医疗、数字图书馆和电子政务关键技术等。
∗
1引言
在抗击新冠肺炎疫情初期,各地各部门企业纷
纷贡献己力,自主开发疫情防控信息系统。一方面
能加强政府部门的管理,另一方面简化现实中人力物力消耗[1]。在人员进出公共场所的跟踪管理方面,
相应有应用于广西地区的“扫码抗疫情”、云南地区的“云南抗疫情”等。它们都是基于小程
基于区块链的健康链系统设计与实现
雷志伟1
李加福1
张桂刚2
赵
旭3
张
勇3
邢春晓3
(1.清华大学行业可信区块链应用技术联合研究中心
北京
100084)(2.中国科学院自动化研究所
北京
100190)
(3.清华大学信息国家研究中心,计算机系,互联网产业研究院
北京
100084)
摘
要
新冠疫情在全球范围肆虐,公共场合中的体温测量和行踪登记是控制疫情蔓延的关键手段,目前的信息记录
主要依赖人工纸张录入的方式。纸张录入的方式不仅效率低下,而且还面临着易损易丢失的存档风险,同时难以对过往人员与行踪进行快速筛查。该系统基于小程序的开发框架,实现了扫码快速注册以及信息登记的功能,同时基于区块链技术来实现底层数据存储和优化,保证数据的不可篡改和快速溯源,最后通过Nginx 服务器进行数据通信。
关键词
比特币;区块链;小程序;健康链;Nginx
中图分类号
TP393
DOI :10.3969/j.issn.1672-9722.2020.12.016
Design and Implementation of Health Chain System Based on
Blockchain
LEI Zhiwei 1
LI Jiafu 1
ZHANG Guigang 2
ZHAO Xu 3
ZHANG Yong 3
XING Chunxiao 3
(1.Joint Research Center for Industry Trust Blockchain Application Technology ,Tsinghua University ,Beijing
100084)
(2.Institute of Automation ,Chinese Academy of Sciences ,Beijing
100190)
(3.Institute of Internet Industry ,Department of Computer Science and Technology ,Beijing National Research Center for
Information Science and Technology (BNRist ),Tsinghua University ,Beijing
100084)
Abstract
During the COVID-19,temperature measurement and whereabouts registration in public are the key to control the
spread of the virus.Current information recording mainly relies on manual paper entry which is not only inefficient ,but also fragile
and easy to lose ,and it is difficult to retrieve the past data.This system is based on the Wechat Mini Program ,the information re⁃cording is implemented easily by scanning QR codes to improve efficiency.Moreover ,managing the storage and optimization of the underlying data based on blockchain technology ensure the data security and fast traceability.Finally ,the data communication is performed through the Nginx server.
Key Words Bitcoin ,blockchain ,Wechat mini program ,health chain ,Nginx
Class Number
TP393
2020年第12期计算机与数字工程
序开发,其功能和使用方式大抵相同,众以个人身份注册,另一个则是公共场所的工作人员以公共场所的身份进入系统并生成二维码进行张贴,进出人员手动扫码实现数据上传,从而减免了手工登记流程。
区块链作为一个分布式数据库,记录着区块链从创世块到当前块的所有交易,具有去中心化、不可更改性、匿名性和可审计性这几个特点。鉴于小程序基于平台拥有庞大用户量,不需要下载安装反复登录与卸载,对用户而言,大大简化了使用程序。因此使用小程序展现基于区块链的进出登记系统是一个不错的选择。与别的出入登记系统不同,健康链系统将由公共场所工作人员对出入人员进行扫码,并保存当前测量的温度值,以加强疫情工作的防控。
2系统分析
2.1小程序分析
小程序本质上是一种由原生APP和HT⁃ML5混合开发的HyBird App技术方案。即是一种在原生App里内置浏览器,采用网页的形式来呈现功能的系统架构。它既解决了原生App下载安装和更新、应用商店
发布审核周期长的问题,又解决了纯Web App安全性相对较低,数据容易泄露或者被劫持的问题。
小程序的系统架构如图1,它以APP 作为宿主进程,通过云端下载动态的Web资源文件到本地并动态渲染Web界面。在纯Web App中,界面渲染跟JavaScript的脚本执行在一个单线程中,这就容易导致一些逻辑任务抢占渲染的资源。因此小程序采用双线程模型,打开一个小程序,相当于进程启动了两个线程。其中一个线程用来渲染View视图,另外一个App Service逻辑线程动态执行JavaScript脚本,用来处理逻辑、数据请求和接口调用。
在APP和Web模块之间有一个JSBridge 跨语言双向通讯机制,这个通信层协调Web模块的视图线程与逻辑线程的数据和事件交互,逻辑线程把数据变化通知到视图线程,触发视图页面更新,视图线程把触发的事件通知到逻辑线程进行业务处理。更为重要的是,它不但负责传递Web模块对系统权限的相关功能调用,还包括传递Web视图渲染和JavaScript脚本执行[2]。在安卓系统里,渲染和脚本引擎都是调用基于开源Webkit库优化和扩展的腾讯X5浏览器。在iOS系统里,苹果基于Web⁃Kit开发了WKWebView组件来渲染视图,并基于WebKit的C/C++实现和包装实现了JavaScriptCore 脚本执行框架。
JS-SDK就是对JSBridge的一个包装,它是一整套网页开发工具包,开放了拍摄、录音、语音识别、二维码、地图、支付、分享、卡券等几十个API。
最后,App Service线程运行在沙箱环境中,从而方便管控与安全,比如避免JavaScript脚本随意地跳转网页或者改变界面上的内容[3]
。
图1小程序架构
2.2区块链平台分析
Bitcoin(比特币)作为区块链技术的起源,是目前发展最成熟的开源区块链平台之一,拥有大量的开发人员和活跃的开发社区。Ethereum(以太坊)核心是支持智能合约的EVM(以太坊虚拟机),提供了大量方便接口便于开发者进行深度应用开发。Hyperledger Fabric(超级账本)使用诸如单节点共识、分布式队列共识等共识方式,并支持智能合约和外部组件扩展。但Ethereum和Fabric部署困难相对困难。EOS区块链采用DPOS共识机制,生成区块速度快、延迟低,能支持数百万级别用户。但EOS作为新兴的区块链平台发展还不成熟,同时开发社区及开发人员相对较少,进行开发研究较为困难[4]。
比特币作为一种以交易为模型的系统,其交易的数据结构如图2。交易由交易输入和
2889
第48卷
交易输出组成,交易输入和交易输出可以有多个,表示一次交易可以将先前多个账户中的比特币合并后
转给另外多个,每个输入主要由上笔交易的哈希PrevTxHash 、上笔交易的输出索引Index 和输入脚本ScriptSig 组成,其中ScriptSig 是持有者对当前交易的签名。通过对某个交易的输入可构成多条以交易为结点的链表,并一直向前追溯至源头的Coinbase 交易(即挖矿所得的比特币)。如果一笔交易的输出没有任何另一笔交易的输入与之对应,
则说明该输出中的比特币未被花费[5]
。
图2
比特币的交易数据结构
区块是区块链的一个数据单元,它由区块头和区块体组成。比特币的区块数据架构如图3,区块体包含所有的交易内容,区块头包含版本号、时间戳、随机值和难度值等基本信息,并包含上一个区块的哈希值和交易的默克尔树根哈希值。区块的哈希值通过对区块头进行两次SHA256哈希运算得到。通过指向上一个区块的哈希值所有的区块构成一个链条,同时,区块的哈希值和对区块内的
所有交易计算得到的默克尔树根哈希值都可以保证数据的不可篡改和完整[6]。
2.3
Web 服务器分析
Nginx 是一个跨平台的Web 服务器,相比
Apache 、Tomcat 和Jetty ,它具备高扩展、热部署、单机支持10万以上的并发连接、低内存消耗和高可
靠的特性。
Nginx 提供了异步的、非阻塞的Web 服务,它的
系统架构如图4,它主要由一个Master 主进程、多个
Worker 工作进程、一个可选的Cachemanager 缓存索引管理进程以及一个可选的Cacheloader 缓存索
引进程组成。
Master 主进程用来启动和管理Worker 工作进
程,使用管道机制与工作进程通信,并且通过信号机制与外界通信来实现重启、退出、停止等系统服务。Worker 进程是提供Web 服务的主体,它收到Web 请求通过代理转发给后端服务器,由后端服务器进行数据处理和页面组织后返回数据。其中FastCGI 是一个可伸缩地、高速地在Nginx 服务器和动态脚本语言间通信的应用层通信协议,PHP 作为
一种服务端、跨平台的HTML 嵌入式的脚本语言,它的PHP-FPM 模块实现了FastCGI 协议并负责处
理PHP 动态请求,从而分担了Nginx 前端的压力,使Nginx 专注处理静态请求[7]。
Cachemanager 进程和Cacheloader 进程主要是
将历史应答数据进行本地缓存,从而提高请求的响应效率,降低网络压力。Cacheloader 进程在Nginx 服务启动一段之后(默认是1min )由主进程生成,在缓存元数据重建完成后就自动退出。Cacheman⁃ager 进程存在于主进程的整个生命期,负责管理缓存索引,支持工作进程对缓存数据的快速查询。
图3
比特币的区块数据架构
雷志伟等:基于区块链的健康链系统设计与实现2890
2020年第12期
计算机与数字工程图4Nginx 架构
多个Worker 进程之间是对等的,它们同等竞争来自客户端的请求,通过互斥锁机制保证最终由一个Worker 进程进行处理,从而做到资源的负载均衡[8]。
3
系统设计
3.1
系统整体设计
系统架构如图5,系统将搭建SDK 接口服务器
作为程序和区块链的通讯中介。程序通过Https 协议与SDK 接口进行数据交互,SDK 接口与区块链系统通过JSON-RPC 协议进行数据交互。SDK 接口程序由进出人员的个人数据接口、公共场所的数据接口和进出人员记录的数据接口等等组成。系统配备传统数据库存储数据以避免区
块链数据查询效率低下问题。
图5
系统架构
由于区块链平台的共识机制,数据上链有时间延迟,接口程序通过将采用定时查询机制来得到数据上链等其他数据操作结果。SDK 接口与区块链系统的数据流程如图6。
在增强数据的隐私和安全方面,Https 协议在Http 协议的基础上加了一层SSL/TLS 加密层,SSL/TLS 通过将对称密码、公钥密码、单向散列函数、消息认证码,伪随机数生成器和数字签名等技术相结
合来实现安全通信。此外,SSL/TLS 还可以通过切换密码套件来使用强度更高的密码算法[9]
。
图6SDK 接口与区块链系统的数据流程
鉴于数据的隐私和安全需求,比特币系统将采用私有链的方式布置节点。
3.2
传统数据库设计
MySQL 作为一个关系型数据库管理系统,其体
积小、速度快、源码开放,且对PHP 有很好的支持。因此数据库基于MySQL 开发,主要包含三个表:个人信息表、公共场所表和进出记录表。
表1
个人信息表属性User ID Name Phone Number
Credentials Number
数据
类型string string string string 是否为主键是否否否
备注用户的openid 姓名电话号码证件类型
表2
公共场所表属性Public ID
Name
Requester Name Requester Phone Region
Address
数据类型string string string string string string
是否为
主键是否否否否否
备注
用户的openid 公共场所名称申请人姓名申请人电话号码行政区域详细地址
3.3小程序设计
代码主要通过开发者工具开发,开发者可以完成API 和页面的开发调试、代码查看和编辑、小程序预览和发布等等功能。小程序1个Page 页面对应本系统1个模块,1个page 页面主要
2891
第48卷
由4个文件构成,js脚本文件即是页面逻辑,wxml
是页面结构展示,wxss是纯前端的页面样式表,用
于辅助wxml展示,json则是页面配置文件[10]。
表3进出记录表
属性
ID Person ID Public ID Time Temperature Value 数据
类型
string
string
string
string
string
是否为
主键
是
否
否
否
否
备注
id
开源代码查询网站个人ID
公共场所ID
时间
温度值
小程序在使用HTTPS发起网络请求时只可以跟指定的域名与进行网络通信,因此需要在公众平台账号里对应的项目设置里面设置一个通讯域名,并将域名完成备案。
3.4区块链设计
比特币加入了OP_RETURN脚本命令,它后面可以紧跟一定容量的数据,专门用于存储和交易逻辑无关的数据。这个交易输出不会加入UTXO集合,从而避免了UTXO数据库的大小不断“膨胀”[11]。另外,由于比特币基于LibEvent开源库实现了一个
JSON-RPC的远程调用Server端,系统主要增加两个自定义的RPC API接口。一个是创建包含OPReturn数据的交易,一个是查询交易的OPRe⁃turn数据。
4系统实现
4.1SDK接口
SDK接口主要是基于PHP语言通过libcurl扩展库实现了基于Http的JSON-RPC客户端[12]。其主要函数代码如下。
//初始化一个CURL会话
$curl=curl_init("{$this->proto}://{$this->host}:{$this-> port}/{$this->url}"
$options=array(CURLOPT_HTTPAUTH=>CURL⁃AUTH_BASIC,
CURLOPT_USERPWD=>$this->username.':'.$this-> pwd,
CURLOPT_RETURNTRANSFER=>true, CURLOPT_FOLLOWLOCATION=>true, CURLOPT_MAXREDIRS=>10, CURLOPT_HTTPHEADER=>array('Content-type:appli⁃cation/json'),
CURLOPT_POST=>true,
CURLOPT_POSTFIELDS=>$request);
//设置选项
curl_setopt_array($curl,$options);
//执行并获取结果
$this->raw_response=curl_exec($curl);
//释放连接
curl_close($curl);
4.2小程序
系统主要包括首页还有其他模块。图7是个人注册页面,图8是公共场所扫码页面,图9是个人进出记录页面,图10
是公共场所进出记录页面。
图7个人注册页面图8
公共场所扫码页面
图9个人进出记录图10公共场所进出记录4.3区块链主要功能
添加OPReturn数据到交易的API函数主要包含创建交易、交易签名和发送交易三个过程,此处展示创建交易的部分代码。
static void createCustomTransaction(const CTxDestina⁃tion&dest,const CAmount&amount,const std::string&custom⁃data,CMutableTransaction&rawTx){
//创建输入
uint32_t nSeq=td::numeric_limits<uint32_t>::max();
雷志伟等:基于区块链的健康链系统设计与实现2892
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论