一种基于移动自组网的区块链系统的制作方法

文档序号:17428919发布日期:2019-04-17 03:13阅读:694来源:国知局
一种基于移动自组网的区块链系统的制作方法

本发明涉及区块链领域,特别是一种基于移动自组网的区块链系统。



背景技术:

区块链技术是由多种已存在的技术(p2p网络、密码学等)组合形成的具有去中心化的记录技术。目前区块链没有统一的定义,维基百科上对区块链的定义是:区块链(bolckchain)是利用分布式的数据库对信息进行甄别、传播和记录的对等网络,简言之,区块链在本质上就是一个具有去中心化特征的分布式数据库,区块链技术从本质来说是一个分布式的数据库技术,网络内的节点利用密码学、共识算法、点对点通信等技术,共同维护全网数据的一致性和完整性。

区块链的去中心化和数据不可篡改,使得其在银行、医疗、征信等有着广阔的应用前景,目前的区块链应用几乎都只能在pc端或者服务器端运行,并没有在移动端实现区块链应用的例子。

目前落地的区块链应用几乎都运行在pc端和服务器端,移动设备无法成为区块链中参与共识的节点,有以下原因:移动设备的续航能力受电池技术的限制同时在存储容量和cpu处理能力方面,移动设备与传统的pc相比性能上也存在着差距。

移动自组网是一种基于移动设备的对等网络,网内的节点是服务的提供者,也是服务的消费者,移动自组网的去中心化思想与区块链不谋而合,移动自组网作为区块链的底层网络是可行的,但目前现有的区块链共识算法并不适合移动自组网,网内的节点都是资源受限的移动设备,与pc机或者服务器相比,在算力、存储和电量等方面都有一定的差距,因此在移动设备上实现区块链的应用基本难以实现。



技术实现要素:

鉴于上述问题,本发明提供一种基于移动自组网的区块链系统,解决了现有技术中区块链应用几乎只能在pc端或者服务器端运行的问题。

本发明实施例提供了一种基于移动自组网的区块链系统,所述系统包括多个移动设备,所述多个移动设备中每一个移动设备安装有区块链组建程序,所述多个移动设备中每一个移动设备为所述区块链系统中的一个节点,所述多个移动设备与所述区块链系统中的多个节点一一对应;

所述区块链组建程序包括区块链模型,所述区块链模型包括:网络层、数据层、共识层以及交互层;

所述网络层用于所述多个移动设备的网络组建和数据传输,所述网络层为区块链模型的网络基础;

所述数据层用于所述区块链系统中数据的处理和存储,还用于根据改进型拜占庭容错算法对所述多个节点进行节点评分,并建立节点信息评分表,所述改进型拜占庭容错算法为根据移动设备特性,对拜占庭容错算法改进之后的算法;

所述共识层用于根据改进型拜占庭容错算法以及所述节点信息评分表,在所述多个节点中选取所述区块链系统的主节点以及共识节点,实现所述多个节点的共识机制;

所述交互层用于提供所述区块链系统的功能界面,实现用户对所述区块链系统的交互与控制。

可选地,所述数据层包括:数据处理模块、数据存储模块以及节点评分模块;

所述数据处理模块用于对所述区块链系统中的数据进行加密,以及对数据的完整性和一致性进行验证,还用于实现区块链上区块的链式结构,以及维护区块链上区块的链式结构;

所述数据存储模块用于将所述区块链系统中的数据以区块的形式进行存储;

所述节点评分模块用于根据改进型拜占庭容错算法对所述多个移动设备性能参数进行运算,得到所述多个移动设备各自的节点评分,并建立所述节点信息评分表。

可选地,所述共识层包括主节点选取更换模块、共识节点选取模块以及共识执行模块;

所述主节点选取更换模块,用于根据改进型拜占庭容错算法以及所述节点信息评分表,在所述多个节点中选取所述区块链系统中的主节点,还用于当所选取的主节点不可用或者退出所述区块链系统时,更换主节点;

所述共识节点选取模块,用于当所述主节点已经选出后,在所述多个节点中除所述主节点外的节点中选取共识节点;

所述共识执行模块,用于根据改进型拜占庭容错算法执行节点共识,并将共识结果写入区块链中。

可选地,所述网络层采用自组网技术,实现在有网络或者无网络情况下所述多个移动设备之间的实时通信,在所述多个移动设备实现实时通信后,所述多个移动设备通过会话的代理方法进行所述区块链系统数据的传输,所述会话用于移动设备之间数据的传输。

可选地,所述数据处理模块采用非对称加密对所述区块链系统中的数据进行加密,以及进行数字签名验证,所述数字签名验证用于验证所述区块链系统中数据的一致性;

所述数据处理模块采用哈希函数对所述区块链系统中的数据进行完整性验证;

所述数据处理模块采用时间戳技术标识数据产生的时间,对区块进行排序,形成区块与区块的链接,使得区块产生的时间无法被篡改。

可选地,所述数据存储模块采用直接存储方式,将所述区块链系统中的数据以区块的形式直接存储;

或者,所述数据存储模块采用间接存储方式,对于超过预设大小的文件、图片通过摘要运算,得到文件、图片的摘要,将摘要以区块的形式存储,同时对原文件、图片进行对称加密,将对称加密的文件、图片存储在服务器中,再将对称加密的密钥通过公钥加密后,以区块的形式存储,所述服务器为区块链中专用的存储大容量文件、图片的设备。

可选地,所述节点评分模块采集所述多个移动设备中每一个移动设备的节点信息,根据节点信息进行运算,得出节点评分,并建立节点信息评分表,所述移动设备的节点信息包括:节点名、电量、存储容量以及cpu性能。

可选地,所述主节点选取更换模块根据改进型拜占庭容错算法以及所述节点评分表,在所述多个节点中选取所述区块链系统中的主节点的步骤包括:

所述多个节点中的任意一个节点向其余节点广播自身节点信息,所述任意一个节点为请求节点,节点信息的内容包括:节点名、电池容量、存储容量、cpu性能;

除请求节点以外的其他节点收到请求节点的节点信息后,验证本节点内存储的节点信息评分表中是否存储请求节点的节点信息,若已存储,则更新节点信息评分表,若没有存储,则将请求节点的节点信息加入节点信息评分表,并发送自身节点信息给请求节点;

所述多个节点中的每个节点,根据节点信息评分表,将所有节点信息通过改进型拜占庭容错算法进行运算,得出评分最高的节点,作为本节点认可的候补主节点,通过广播将候补主节点信息发送给所述多个节点中的每个节点;

所述多个节点中的每个节点接收到候补主节点信息之后,验证接收的候补主节点和每个节点自身计算出的候补主节点是否相同,若不同,则不做任何响应,若相同,则发送响应消息给所述多个节点中的每个节点;

所述请求节点收到响应消息之后,将响应消息数量与所述多个节点数量进行比较,若响应消息数量大于第一预设值,表示所述多个节点中大部分节点认可候补主节点为所述多个节点中的主节点,则将候补主节点设置为主节点,若响应消息数量小于第一预设值,则表示主节点选取失败,重复上述过程,直到选出主节点为止;

当所述主节点退出所述区块链系统,或者所述主节点失效长时间没有反应时,所述多个节点中的其余节点发起主节点更换请求,更换主节点的方法与选择主节点的方法相同。

可选地,所述共识节点选取模块,在所述多个节点中除所述主节点外的节点中选取共识节点的步骤包括:

在选取出所述主节点后,由所述主节点根据自身的节点信息评分表,选取出多个候补共识节点,将多个候补共识节点广播到所述多个节点中除所述主节点以外的每个节点;

所述多个节点中每个节点收到所述多个候补共识节点后,将自身选出的多个候补共识节点与主节点发送的多个候补共识节点进行对比,若完全一致,则向所述主节点发送确认响应消息,若不一致,则将多个候补共识节点中不一致节点的信息发送给所述主节点;

所述主节点接收到确认响应消息后,根据确认响应消息数量,采用改进型拜占庭容错算法进行运算,得到确认响应消息比值,若比值大于1,则将多个候补共识节点更改为正式共识节点;

若确认响应消息比值小于1,则所述主节点对接收的所述不一致节点数量,采用改进型拜占庭容错算法进行运算,得到不一致节点比值,若比值大于第二预设值,则所述主节点将所述不一致节点从多个候补共识节点中删除,将其余多个候补共识节点更改为正式共识节点,若不一致节点比值小于第二预设值,则所述主节点保留所述不一致节点,并将多个候补共识节点更改为正式共识节点。

与现有技术相比,本发明提供的一种基于移动自组网的区块链系统,通过区块链模型完成移动设备区块链的组建,并针对移动设备的特点,优化了区块链共识算法,通过网络层实现移动设备自组网连接,通过数据层完成区块链数据的处理和存储,并根据改进型拜占庭容错算法完成节点评分,通过共识层完成所述多个节点中主节点以及共识节点的选取,实现节点共识,通过交互层实现与用户的交互和控制,最终完成了在移动设备上实现区块链的功能。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是本发明一种基于移动自组网的区块链系统的示意图;

图2是本发明区块链模型的程序目录;

图3是本发明区块链模型的结构示意图;

图4是本发明实施例建立的区块链系统在每个移动设备上显示的功能选项界面;

图5是本发明实施例中两台移动设备从发现对方到建立接连的实现效果图;

图6是本发明实施例中会话代理方法表;

图7是本发明实施例中节点发送方的工作流程图;

图8是本发明实施例中iphonea与iphoneb之间组网后的通信界面;

图9是本发明实施例中网络层对主节点选取的流程图;

图10是本发明实施例中节点信息评分表的存储内容以及分类;

图11是本发明实施例中主节点选取的画面;

图12是本发明实施例中网络层对共识节点选取的流程图;

图13是本发明实施例中共识节点的选取画面;

图14是本发明实施例中共识执行的效果画面;

图15是本发明实施例中共识后病人基本信息以及就诊信息;

图16是本发明实施例中所使用到的实验设备的具体配置信息表;

图17是本发明实施例中4台实验设备所组建的移动自组网网络拓扑图;

图18是本发明实施例中iphonea与iphoneb和iphoned进行连接以及建立的画面;

图19是本发明实施例中iphonec与iphoneb和iphoned进行连接以及建立的画面;

图20是本发明实施例中iphoneb接收iphonec和iphonea的请求画面;

图21是本发明实施例中iphonea与iphonec多跳通信实验截图;

图22是本发明实施例中主节点选取与更换验证实验中各设备的具体性能数据表;

图23是本发明实施例中主节点选取与更换验证实验中各设备的评分表;

图24是本发明实施例中主节点选取与更换验证实验中各设备的得分情况图表;

图25是本发明实施例中移动设备自组网实际选取的主节点画面;

图26是本发明实施例中主节点选取与更换在3个节点数情况下所需的时间;

图27是本发明实施例中主节点选取与更换在4个节点数情况下所需的时间;

图28是本发明实施例中主节点选取与更换在5个节点数情况下所需的时间;

图29是本发明实施例中共识节点选取实验中,每台设备的性能参数表;

图30是本发明实施例中共识节点选取实验中,每台设备的得分表;

图31是本发明实施例中移动设备自组网实际的主节点与共识节点的选取结果;

图32是本发明实施例中不同主节点选取情况下共识出块耗时的时间;

图33是本发明实施例中不同共识节点选取情况下共识出块耗时的时间;

图34是本发明实施例中共识节点个数分别为3个、4个、5个的情况下,共识出块耗时的时间;

图35是本发明实施例中拜占庭容错算法以及改进型拜占庭容错算法达成共识所需的时间;

图36是本发明实施例中拜占庭容错算法以及改进型拜占庭容错算法达成共识所消耗的电量;

图37是本发明实施例中医疗数据处理前和处理后所占存储空间大小表。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。应当理解,此处所描述的具体实施例仅用以解释本发明,仅仅是本发明一部分实施例,而不是全部的实施例,并不用于限定本发明。

参照图1,示出了本发明一种基于移动自组网的区块链系统的示意图,图中虚线以内包括a~h共8个移动设备,这8个移动设备中都安装有区块链组建程序,文件存储服务器为专门用来存储加密过的大型文件、图片的服务器。其中b~h共7个移动设备已经组成了移动自组网络,并通过区块链模型组建了一个小型区块链,a移动设备请求加入该小型区块链,假设b移动设备为该小型区块链的主节点,则由b接收a发送的共识请求,根据区块链的工作原理,若共识请求验证通过,则a加入该区块链,若验证不通过,则a无法加入区块链,以下对区块链的组建过程进行详细举例说明。

本发明实施例采用的移动设备a~h均为基于ios系统的移动设备,ios系统运行流畅度高且具有良好的安全性。移动设备a~h的区块链系统组建通过区块链组建程序实现,区块链组建程序的核心是区块链模型,本发明实施例中区块链模型开发全部由集成开发工具xcode完成,采用的编程语言是objective-c。图2示出了本发明区块链模型的程序目录,即blockchain程序目录,该目录主体分为六大部分,其中blockchaintests、blockchainuitests和products是系统自带的,用于测试和生成执行文件;frameworks中是程序所需的苹果公司自带的框架;从base64到mjextension是程序使用的第三方框架;blockchain为系统的源代码,以下将具体介绍blockchain中的代码:

security:包含对称加密、非对称加密、数字签名等数据安全相关的类;

mcframework:该类为核心类主要负责节点连接和状态更新、以及节点间消息和数据传输;

merkletree:验证数据;

medicalrecord:该类的主要作用是对医疗数据进行相应处理,并将处理过的数据存储在本地;

block:区块数据类,存储区块数据;

blockmanager:区块操作类,负责区块的生成和添加;

coredatamanager:本地数据的读取与写入;

pbft:共识算法模块;

bchome:负责节点的发现和连接,并显示已连接的节点;

bcme:个人信息和医疗数据的查看与添加;

bcsyndata:同步区块和节点信息;

bcchat:网内通信模块;

category:对系统类的扩充。

上述各个模块相互依赖和调用,完成区块链系统的各个功能。

图3是区块链模型的结构示意图,该区块链模型包括四层架构,分别为交互层、共识层、网络层以及数据层,其中交互层提供区块链系统的功能界面,即区块链系统的界面,该层为区块链模型的顶层,提供给用户直观的系统界面,用户可以根据界面上的选项,实现区块链的组建,交互层提供的功能界面,可以使得用户通过功能选项完成建立连接、网内通信、同步数据以及数据共识。共识层用于根据改进型拜占庭容错算法以及数据层建立的节点信息评分表,在多个节点中选取区块链系统的主节点以及共识节点,并且实现多个节点的共识机制。网络层用于多个节点的网络组建和数据传输,其通过宣传设备、发现设备、连接设备以及会话管理实现多个节点自组网,网络层为区块链模型的网络基础。数据层用于区块链系统中数据的处理和存储,还用于根据改进型拜占庭容错算法对多个节点进行节点评分,并建立节点信息评分表。

如图4所示,本发明实施例建立的区块链系统在每个移动设备上显示的功能选项界面,该功能选项界面由storyboard和代码组成,storyboard用于界面基础的搭建,它的本质是xml,由多个viewcontroller组成,在每个viewcontroller上利用代码进行组件、窗体的实现,在本发明实施例中storyboard由uitabbarcontroller、uinavigationcontroller和viewcontroller组成,第一层为uitabbarcontroller,同时也是程序界面的入口;uitabbarcontroller之下管理着4个uinavigationcontroller,界面的主体实现在viewcontroller上。图4中,“连接节点”选项用于网络层将多个节点之间建立连接,完成自组网络,“网内通信”选项用于网络层通过会话的代理方式实现节点数据传输,“同步数据”选项用于数据层计算节点评分,建立节点信息评分表,还用于共识层选取主节点以及共识节点,“共识”选项用于共识层进行数据共识,区块链中所有数据的任何变动,都需要进行共识,共识之后再将数据存储至区块链上。

本发明实施例中移动设备a~h通过网络层实现自组网,网络层是基于苹果公司推出的multipeerconnectivity框架实现网络通信,在程序启动时,会在appdelegate类中调用multipeerconnectivitymanger(mcmanager)类,该类是设备进行网内通信时必须调用的基类,在mcmanager类中必须要定义框架提供的变量和代理方法,才能实现连接和通信功能。首先,节点设置bc_peerid通过bc_advertiser使得自身可以被其他节点发现,利用bc_browser可以连接附近的节点,建立连接之后,通过bc_session进行通信。在设备连接之前需要对bc_peerid和bc_session对象进行初始化操作,bc_peerid是一个节点的唯一标识,本发明实施例中将移动设备的名称设置为节点的bc_peerid,bc_session需要设置会话标识,只有标识相同的节点才能进行连接和通信。点击“连接节点”选项后,移动节点通过mcadvertiserassistant类创建一个广播类的对象bc_advertiser,在对象bc_advertiser初始化的时候调用初始化方法initbc_advertiser:(bool)advertiser,设置广播的“频率”为:“scu-blockchain”,只有在同一“频率”的节点才能互相发现、连接和通信,同时将设备的名称设置为节点的名称,通过设置初始化方法中的布尔值advertiser,可以使得节点随时的隐藏自己,在初始化广播对象的同时,每个广播实例都会成为bc_session的代理。当节点想要搜索附近节点时,节点可以通过initbc_browser方法初始化搜索对象bc_browser,与bc_advertise一样,bc_browser需要设置“频率”,通过调用initwithservicetype方法将bc_browser的“频率”设置为“scu-blockchain”,同时,bc_browser也需要设置关联的bc_session,至此,节点间可以互相发现对方。

节点连接的功能由bchomeviewcontroller、mcmanage和mcbrowserviewcontroller这三个类共同完成,bchomeviewcontroller类显示已连接的节点,在bchomeviewcontroller初始化的时候通过在通知中心注册“mcpeerstatechangenotification”可以随时了解节点的状态变化,更新本节点已连接节点的状态,mcbrowserviewcontroller是多点连接框架自带的界面,通过mcbrowserviewcontroller类,可以发现附近可以连接的节点,mcmanager类主要的作用是传递消息,当在mcbrowserviewcontroller类中选择节点建立连接后,节点的信息通过mcmanager类传递给bchomeviewcontrolle类,bchomeviewcontrolle类更新已连接的节点信息,节点与节点之间的连接状态有三种:mcsessionstateconnected、mcsessionstateconnecting和mcsessionstatedeclined,节点的连接状态通过获取“mcpeerstatechangenotification”通知消息得到,其中mcsessionstateconnected:说明与该节点建立连接成功,将已连接节点的peerid,存放在connectedpeersarray数组中,然后更新已连接节点的信息,mcsessionstateconnecting:表明正在等待被连接节点的回复,mcsessionstatenotconnected:表明该节点已失去连接,将peerid从connectedpeersarray数组移除,并更新节点信息。

图5(a)、(b)、(c)、(d)、(e)、(f)示出了两台移动设备从发现对方到建立接连的实现效果图,本发明实施例中将两台移动设备分别设定为iphonea与iphoneb,区块链应用场景设定为区块链医疗系统,图5(a)为该系统程序首页在iphoneb的界面,点击“连接节点”后,跳转到节点发现界面如图(b)所示,图(c)为iphoneb附近可以连接节点的信息,出现了iphonea的名称,图(d)中,在iphoneb上点击选择iphonea建立连接,此时图(e)所示iphonea状态为收到来自iphoneb的连接请求并询问,点击“accept”后,iphonea的连接状态更新为“connecting”,之后在图(f)中,展示了iphoneb当前已连接的节点,节点为iphonea。

在节点建立连接时,节点之间的会话mcsession也随之建立,multipeerconnectivitymanger需要实现mcsession相应的代理方法才可以进行节点间的数据传输,代理方法的具体内容如图6会话代理方法表所示,通过此会话的代理方式,多个节点可以实现数据传输。在节点建立连接的基础上,本发明实施例在bcchatviewcontroller中实现了节点间的实时通信,在通信的过程中,节点被分为发送方和接收方,发送方和接收方的工作流程如图7所示,其中发送方的流程:

初始化通信界面,包括对话框以及消息列表;

对话框实时监听用户的输入,并记录输入的信息;

点击发送按钮时,将用户输入的信息、发送者、发送时间封装在消息类型为“message”消息类中,将消息类转化成二进制通过会话的代理方法发送给对应的节点,将发送的信息加入消息数组中,并更新消息列表显示的视图。

接收方的工作流程:

初始化通信界面,包括对话框以及消息列表;

利用会话注册“mcdidreceivedatanotification”通知,判断消息的类型,如果类型是“message”,则说明该消息属于网内通信模块,将接受到的数据进行解析,取得消息内容后加上当前的时间,和消息发送者一起封装在消息类中,然后将其存入到消息数组中,并更新消息视图列表。如图8示出了iphonea与iphoneb之间组网后的通信界面,经过上述方式就可以实现移动设备b~h之间的移动自组网,即完成了区块链的节点连接预计节点之间的实时通信和数据传输,之后就需要进行主节点、共识节点的选取。

主节点、共识节点的选取通过共识层以及数据层共同作用完成,在点击“同步数据”选项后,数据层的节点评分模块采集节点自身的性能参数的同时,接收其他节点的性能参数,再结合性能参数,利用改进型拜占庭容错算法进行节点评分,并建立各个节点的节点信息评分表,改进型拜占庭容错算法根据移动设备自身的特性,选择移动设备的电池电量、存储容量以及cpu性能来作为参数,通过公式计算出节点评分,为网络层选取主节点以及共识节点提供依据,节点计算公式如下:

假设网络中共有n个移动节点,各种性能参数m在全网的总分为100,任意一个节点i在参数m的得分g(i)通过公式(1-1)计算得到:

上述公式中mi为任意一个节点i的性能参数得分,m0为第一个节点0的性能参数得分,mn为第n个节点的性能参数得分。

将设备按照公式(1-1)计算出电量得分g(i)b,存储容量得分g(i)s以及cpu性能得分g(i)c,则设备总得分a(i)的计算公式如(1-2)所示

a(i)=g(i)b+g(i)s+g(i)c(1-2)

上述公式中g(i)b为任意一个节点i的电量参数得分,g(i)s为任意一个节点i的存储容量参数得分,g(i)c为任意一个节点i的cpu性能参数得分。

当移动自组网刚组建时,网内没有主节点,各个节点需要依据自身节点的电量、cpu、存储容量等参数对节点进行评分,并且需要将自身的性能参数广播,让其他节点接收到以上信息。网络层对主节点选取的流程见图9所示,以下为主节点选取的详细步骤:

步骤1:多个节点中任意一个节点为请求节点,请求节点广播自身的节点信息,节点信息的内容有:节点名、电池容量、存储容量、cpu性能,同时请求节点设置定时器;

步骤2:网内其他节点收到节点信息后,会验证本地评分表中是否存储该节点信息。如果已存储,则更新节点评分表,如果没有存储,则将节点信息加入节点评分表中,并发送自身节点信息给请求节点,每个节点都储存着网内所有节点的节点信息评分表,如图10所示为节点信息评分表的存储内容以及分类;

步骤3:每个节点经过步骤2之后,本地存储网内所有节点的信息,将所有节点信息通过公式(1-1)和公式(1-2)计算,得出评分最高的节点,作为本地认可的主节点候补,通过广播将候补主节点信息发送给自组网中的各个节点;

步骤4:网内其他节点收到候补主节点信息之后,验证接收到候补主节点和本节点计算出的主节点是否相同,如果不同,节点不做任何响应,如果相同,则发送响应消息;

步骤5:请求节点收到响应消息之后,将响应消息数与网内节点总数的67%做比较,若消息响应数大于节点数的67%,代表网内大部分节点都认可候补主节点为网内主节点,则将候补主节点设置为主节点,若消息响应数小于节点数的67%,则表示主节点选取失败。

上述步骤重复进行,直到选取出主节点。

举例说明,例如iphonea、iphoneb、iphonec与iphoned,以iphoneb作为请求节点,在iphoneb内点击“同步数据”选项,之后出现界面有三个选项,分别为“同步区块链”、“同步主节点”以及“同步共识节点”,点击“同步主节点”,之后请求节点的流程是:

步骤1:网内节点信息的采集:请求节点通过senddictionarymessage:topeers方法将节点自身的信息nodeinformation发送给网内的其他节点,并接收其他节点的信息,存入nodeinformation类型的数组中。

步骤2:计算节点得分选出本地主节点:在nodescore类中实现了计算节点得分的方法,分为calculatescorewithelectricity、cpu、storage、worktime。

步骤3:将本地候补主节点信息发广播到全网,并等待网内节点响应,并根据其他节点的响应消息做出处理,通过senddictionarymessagetopeers广播到全网,对响应消息的处理在validatemainpeerwitharray中进行,该处理返回值是布尔类型。

网内其他节点的流程是:

步骤1:将收到候补主节点信息与本地主节点进行对比,节点接收到请求节点发送的候补节点信息后,利用calculatescorewithelectricity、cpu、storage、worktime计算候补节点评分,利用isequaltostring对节点信息进行比较,返回值是布尔类型。

步骤2:返回响应信息给请求节点,通过设置senddictionarymessage:topeers:中的peer参数可以实现对单个节点或者全网节点发送数据。

在主节点选定后,若主节点故障不可用或者退出区块链系统时,就需要进行主节点更换,主节点更换相比主节点选取少了收集网内节点信息的步骤,因为每个节点自身已经存储网内节点的信息,同时网内其他节点在接收到主节点更换请求时,需要向原主节点进行确认是否要进行更换主节点。图11(a)、(b)、(c)示出了主节点选取的画面,图11(a)iphoneb在点击“连接节点”后,界面显示出连接的节点为iphonea、iphonec和iphoned,之后再点击“同步数据”后,界面显示出“同步区块链”、“同步主节点”以及“同步共识节点”三个选项,其中“同步区块链”选项是用于在已经组建好区块链之后,若是有新的节点需要加入已经组建好的区块链,彼此经过网络层将新的节点加入到区块链,点击“同步区块链”后,区块链中所有内容会同步到新加入的节点中。主节点选取的过程是,点击“同步主节点”后界面会显示“正在同步主节点信息”,如图11(b)所示,等待一段时间后,主节点选取结束,界面显示“主节点同步完成,主节点为iphoneb”,如图11(c)所示,至此主节点选取完成。

网络层对共识节点选取的流程见图12所示,以下为共识节点选取的详细步骤:

步骤1:网内选取出主节点后,由主节点根据本地的节点评分表,选取出多个候补共识节点,将多个候补共识节点广播到自组网内,同时设置定时器。

步骤2:假设网中总共有n(n≥3)个节点,ni(1≤i≤n)表示第i个节点。ni收到主节点的广播消息之后,将自身选出的多个共识节点与主节点发送的多个候补共识节点,进行对比,节点发送确认响应消息的条件是,两者候补共识节点完全一致,在验证过程中,出现节点不一致的情况,则记录不一致节点信息,在验证完成之后,将不一致的节点信息作为响应消息内容,发送给主节点。

步骤3:主节点收到网内其他节点的响应消息后,对其进行分类,一类是确认响应消息,一类是不一致节点信息响应消息,假设主节点接收到k(k≤n-1)个节点确认响应,自组网内的节点数为n,根据公式(1-3)得到比值p,若p≥1,则收到的确认响应消息数大于等于节点数的67%,

表明网内多数节点认可选出的共识节点,将候补共识节点更改为正选共识节点。

上述公式中p为确认响应消息数与区块链内的节点总数之比,k为确认响应消息数,n为区块链内的节点总数。

步骤4:处理节点验证不通过响应信息,若p<1,表明候补共识节点中,有部分候选共识节点不被网内节点所认可,在这种情况下,主节点对节点不通过的响应消息进行处理,假设多个候补共识节点中的某个节点,有m个节点验证不通过响应消息,且m≥n×0.67,这表明自组网内大部分节点都不认可该节点作为共识节点,那么将该节点从共识节点集中删除,该节点也失去了参与共识的资格。

举例说明,例如iphonea、iphoneb、iphonec与iphoned,在已选出iphoneb为主节点后,共识节点的选取流程是:

步骤1:主节点依据节点评分表中的信息,选取候补共识节点集:利用calculatescorewithelectricity:cpu:storage:worktime四者计算每个节点的得分,利用sortpeerwithscore对节点进行排序,选取80%的节点作为候补共识节点集。

步骤2:将候补共识节点集广播至网内,并等待网内节点响应:通过senddictionarymessage:topeers:发送。

步骤3:主节点对响应消息进行处理:将响应消息进行分类,如果是验证通过响应消息,则用handleallpassresponsemessage:方法处理;如果是节点验证不通过响应消息,则调用handleerrornoderesponsemessage:方法处理。

图13(a)、(b)、(c)示出了共识节点的选取画面,在iphoneb为主节点后,点击“同步共识节点”选项,界面显示如图13(b)所示,经过一段时间后,共识节点选项完成,共识节点为iphoneb、iphonec与iphoned,iphonea则没有通过共识节点验证,至此共识节点选取完成。

上述对主节点和共识节点的选取方法以及计算公式,是针对移动设备而对拜占庭容错算法的一种改进优化,其满足一般情况下以移动设备作为节点组建区块链的要求,本发明实施例对此不作具体限定。

本发明实施例中的共识执行过程与实用的拜占庭容错算法共识过程一样,分为四个阶段:预准备、准备、确认、提交,具体实现过程如下:

预准消息阶段:主节点接收到消息类型为“request”共识请求消息之后,为共识请求消息分配一个序号,然后封装成消息,消息类型为“preprepapre”,通过senddictionarymessage:topeers:发送,进入准备阶段。

准备阶段:共识节点收到预准备消息后,调用getprepreparecontent:来处理预准备消息,该方法会对预准备消息内容的摘要、数字签名和序号进行验证,方法返回的类型为布尔型,如果验证通过,则节点生成准备消息,消息的类型为“prepare”,进入确认阶段。

确认阶段:共识节点收到准备消息后,调用getpreparecontent:withpeer来验证准备消息,如果收到相同准备消息超过网内总节点数的67%,则节点生成确认消息,进入提交阶段。

提交阶段:共识节点收到确认消息后,调用getcommitcontent:withpeer:对确认消息进行处理,如果验证通过,则节点会生成回复消息给发出共识请求的节点,消息类型为“replay”,提出共识请求的节点对回复消息进行处理,如果超过一半以上的节点回复了消息,那么代表该请求得到网内节点认可,可以将请求写入区块链中,整个共识执行过程结束。

图14(a)、(b)、(c)示出了共识执行的效果画面,例如将本发明实施例应用在医疗系统中,需要进行区块链数据共识时,点击功能界面的“共识”选项,进入界面如图14(a)所示,之后在界面中点击“提交”选项,已组网的区块链系统首先将确定网内主节点身份,随后提交请求数据至主节点,然后主节点打包请求数据成为一个区块,再广播区块至所有共识节点进行拜占庭容错算法的分阶段共识,共识中的状态如图14(b)所示,最后区块链网内完成共识,并在所有共识节点上进行存储,完成界面如图14(c)所示,至此整个数据共识完成,数据以区块形式存储在区块链上。

本发明实施例中区块链模型的数据层分为数据处理模块、数据存储模块以及节点评分模块,其中节点评分模块用于主节点和共识节点的选取,建立节点信息评分表,数据处理模块用于对区块链系统中的数据进行加密,以及对数据的完整性和一致性进行验证,还用于对区块进行排序,数据存储模块用于将区块链系统中的数据以区块的形式进行存储。

数据处理模块采用非对称加密对区块链系统中的数据进行加密其中所使用到的公钥加密是椭圆曲线加密(ecc),哈希函数为hash256,通过hash256对将要提交到区块链的数据处理,得到摘要信息作为数据完整性的依据,数据签名则是通过hash256与ecc相结合方式生成,签名的内容为主节点、消息内容、时间戳和请求节点的组合,将组合数据先通过hash256计算的得到哈希值,之后将哈希值通过ecc加密生成数字签名,以便区块链进行数字签名验证。数据处理模块还采用时间戳技术标识数据产生的时间,对根据数据生成的区块进行排序,形成区块与区块的链接,使得区块产生的时间无法被篡改。

共识通过的数据会生成区块,本发明实施例利用block类来存放区块数据,区块与区块之间形成区块链,利用coredatamanager类将区块链写入本地数据库,本地的数据库被设置为只能查看和添加。由于移动设备的存储空间容量比较有限,对于容量较大的数据,例如医疗数据中的文件、图片并不直接生成区块进行存储,而是通过md5消息摘要算法,生成文件摘要,将摘数据要生成区块,将文件、图片利用高级加密标准(advancedencryptionstandard,aes)进行加密存储在专门存储大容量数据的服务器中,最后将aes的公钥利用椭园曲线(ecc)加密之后生成区块。

通过以上描述,本发明实施例的实现过程为,用户在多个移动设备上,通过区块链组建程序启用区块链模型后,移动设备利用区块链模型结构中交互层提供功能界面的功能完成区块链各项功能,通过网络层完成多个移动设备的自组网连接,形成节点的网络连接以及数据传输,通过数据层完成多个节点的数据处理和储存,以及根据改进型拜占庭容错算法完成节点评分,建立节点信息评分表,通过共识层完成多个节点中主节点以及共识节点的选取,实现节点共识机制,最终组建区块链网络,使得多个移动设备实现区块链系统的组建。

以下将上述移动区块链系统应用到医疗系统中,进行各项实际测试来验证本发明实施例组建移动区块链的可行性。可以将组建的移动区块链系统称为移动医疗数据区块链系统,该区块链系统属于联盟链和私有链的范畴,系统服务于多个科室的医疗数据存储和查询,医院的每个科室相当于自组网内的一个节点,每个科室内的医生节点通过向该节点提交信息进行共识,每个来科室看病的病人为请求节点,需要说明的是请求节点无权参与共识,即病人只提供信息,由医生诊断,并将诊断信息通过网内共识存入区块链中。

假设病人a去五官科看病,医生b的移动节点就会有病人a的基本信息,医生b对病人a进行诊断,并填写相应的诊断信息(包括检查记录、用药记录和手术记录),填写完成后,将诊断信息提交给科室内在自组网中的节点,在自组网主节点的推动下,网内节点完成对该诊断信息的共识,网内共识完成之后,科室内的自组网节点会通知医生b,表明该诊断信息已经通过共识并写入区块链中,医生b接收到通知后,将诊断的信息发送给病人a,病人a可以随时的查看自己就诊的记录,而科室的自组网节点内存储着全部病人的就诊记录,以上是医疗数据共识的全部过程。如图15(a)、(b)所示,图15(a)为共识后病人基本信息,图15(b)为共识后病人就诊信息。

本发明实施例提出了基于移动自组网的区块链模型,并将该模型应用于医疗数据管理,实现了移动医疗数据区块链系统。该系统可以使得采用ios系统的设备实现互相连接,并进行通信,同时结合设备资源受限的特点,在拜占庭容错共识算法基础上,设计了改进型拜占庭容错算法,提高共识的速度,减少主节点的能耗,为测试和验证移动医疗数据区块链系统的性能和功能的实现,进行了如下实际实验测试:

多跳通信测试:节点与自身最长通信距离之外的节点通信时,需要通过中间节点转发,验证系统是否可以进行多跳通信。

主节点选取测试:收集当前实验移动设备的信息包括:电量、cpu性能以及存储容量,根据公式(1-1)计算出主节点,然后与实验测试选取出的主节点进行对比,验证主节点选取模块的准确性,同时针对在不同节点情况下,设计了主节点更换耗时实验,验证节点个数对更换节点的影响,同等条件下,节点个数越多,耗时越大。

共识节点选取测试:共识节点选取验证实验与主节点选取验证实验相类似,根据实验设备的电量、cpu性能以及存储容量,计算每台实验设备的得分,根据得分的高低排序,选取前80%的节点作为共识节点集,然后与实验选取出的共识节点集进行对比,验证共识节点选取模块的准确性。

共识执行测试:将改进型拜占庭容错算法和现有技术拜占庭容错算法,在达成共识的速度和主节点能耗上进行比较,验证改进后拜占庭容错算法的有效性,同时,针对改进型拜占庭容错算法在不同节点个数参与共识以及相同节点个数,不同设备参与共识的两种情况下,测试共识出块的耗时,验证算法的性能。

医疗数据处理实验测试:将原本的医疗数据和已处理过的医疗数据,在存储空间在进行比较,验证数据处理的有效性。

本发明实施例所使用到的实验设备为6台ios设备,分别为4台iphone和2台ipad,4台iphone的型号分别为:iphone5、iphone5s、iphone6s以及iphone6splus;2台ipad的型号为ipad5th以及ipadair2,设备的具体配置信息如图16所示。

在多跳通信测试中,所选用的实验设备为4台iphone,每台实验设备都预装的本发明实施例的应用程序,本应用程序的使用需要wi-fi信号的支持,这4台实验设备所组建的移动自组网网络拓扑如图17所示,为了更好的描述,将4台设备分别叫做:iphonea、iphoneb、iphonec以及iphoned,多跳通信是指两个通信节点不在各自的通信距离之内,需要其他节点协助进行通信。如图17所示,iphoneb和iphoned在iphonea的通信范围之内,iphonea可与iphoneb、iphoned直接相连;同样,iphonec可与iphoneb、iphoned直接相连并通信,但是iphonea与iphonec在彼此的通信范围之外,无法直接通信,需要依靠iphoneb和iphonec转发消息。该实验的测试环境为室内且没有明显的遮挡物下进行,具体的实验设计流程和实验效果如下:

如图18(a)、(b)、(c)所示,图18(a)示出了对于iphonea发现通信范内的iphoneb和iphoned,图18(b)示出了iphonea正在对iphoneb和iphoned进行连接的画面,图18(c)示出了iphonea与iphoneb和iphoned建立连接之后的画面。同样的,图19(a)、(b)、(c)示出了iphonec与iphoneb和iphoned进行连接以及建立的画面。而对于iphoneb来说,会接收到来自iphonea和iphonec的请求,如图20(a)所示为iphoneb接收iphonec的请求画面,图20(b)所示为iphoneb接收iphonea的请求画面,分别点击“accept”之后,如图20(c)所示,iphoneb会显示已连接设备iphonea和iphonec,iphoned与iphoneb一样的连接过程,在此省略。此时网络组建完成,开始进行多跳通信测试,实验的步骤如下:

步骤1:iphonea在网内通信界面发送消息,发送方式为广播的形式。

步骤2:查看iphonec是否收到iphonea发送的消息。

图21为iphonea与iphonec多跳通信实验截图,截图的设备为iphonea,图中,用节点名称对网内通信的设备进行标识,证实了iphonea和iphonec可以互相进行通信,根据以上的实验结果,证实了本发明区块链系统是可以进行多跳通信,对于无法直接相连的节点,可以通过中间节点实现通信。

在主节点选取与更换验证实验中,所选用的实验设备为5台ios设备,设备分别为:iphonea、iphoneb、iphonec、ipada以及ipadb,每台实验设备都装有本发明的区块链组建程序,在实验开始之前还需要对每台设备的剩余电量(mah)、存储容量(gb)、cpu性能进行测量得到数据,对于电量的测试本发明实施例使用的是腾讯的测试工具gt,gt可以集成到区块链组建程序中,该测试工具可以实时的监测电量的变化,对于设备cpu的衡量,本发明实施例采用的cpu数据来自geekbench4(移动设备跑分软件),利用geekbench4可以测量设备的cpu和计算性能,图22示出了设备的具体性能数据,其中的cpu评分为多核的评分,每台设备的评分可由公式(1-1)和(1-2)计算得出,计算的结果如图23所示。图24示出了各设备的得分情况,可以看出得分最高的为ipada,即网内预选的主节点为ipada,将预选的主节点与实际选取的主节点进行比较,图25(a)、(b)示出了自组网实际选取的主节点,实验结果证实了主节点选取功能的正常实现。之后再对主节点选取与更换在不同节点数情况下所需的时间进行对比,实验分别测试了在3个节点、4个节点、5个节点的情况下,主节点的选取与更换所需要的时间,图26示出的记录数据为节点数3时,主节点选取与更换的时间,其中图表中序号“1”、“2”、“3”、“4”、“5”表示分别进行了五次实验的数据结果,进行五次实验的意图是为了更加准确的反应出实验的结果,消除各种原因导致的误差或者错误,以下所述所有图表中的序号“1”、“2”、“3”、“4”、“5”皆为同等含义。图27示出的记录数据为节点数4时,主节点选取与更换的时间,图28示出的记录数据为节点数5时,主节点选取与更换的时间,从以上的实验数据可以得出,主节点更换的时间要比主节点选取的时间短,主要原因在于,在主机节点更换的时候,网内个节点已经存储了网内节点的信息,无需向网内请求其他节点信息,同时对比主节点选取与更换在不同节点数下所需的时间,可以得出随着节点数的增加,主节点选取与更换的时间也随之增加。

主节点选取完成后,需要进行共识节点的选取,共识节点的选取在评分环节与主节点的相同,图29示出了共识节点选取实验中,每台设备的性能参数表,图30示出了根据公式(1-1)、(1-2)计算出的设备得分表,从图中可以看出ipadb为自组网中得分最高的设备,ipadb即为当前网内预选取的主节点,同时,从图中可以看出排名前四的分别是ipada、ipadb、iphoneb、iphonec,这四个节点为网内预选取的共识节点。图31(a)、(b)示出了自组网实际的主节点与共识节点的选取结果,从实验结果可以看出,预选取的主节点和共识节点与实际测试选取的相同,证实了共识节点选取功能的正常实现。

本发明实施例的实际测试还针对不同主节点选取,不同共识节点选取对共识出块耗时的影响,共识出块是指一个请求数据被打包成为一笔交易单然后封装进一个区块后,经过拜占庭容错算法的共识流程,最后在所有共识节点的数据账本上存储成功的总耗时,本发明实施例的网络环境为20m电信网络,首先进行不同主节点选取与共识出块耗时的测试:

假设参与共识的节点有ipada、ipadb、iphoneb,如图32所示,分别记录下ipada为主节点、ipadb为主节点、iphoneb为主节点时的出块耗时,由图表可以看出当主节点为ipada时,共识出块的耗时最少,即节点评分更高的节点做主节点,共识出块耗时更短,这说明主节点选取是否正确的必要性。

不同共识节点选取对共识出块耗时的测试,假设a组参与共识的节点为ipada、ipadb、iphoneb和iphonec,b组参与共识的节点为ipada、ipadb、iphoneb和iphonea;分别记录这两组共识出块的耗时,实验的具体数据如图33所示,根据结果可以看出,不同的移动设备对出块耗时是有影响的,节点评分更高的移动设备参与共识,共识出块的耗时越短,这也说明了共识节点选取是否正确的重要性。

本发明实施例的实际测试还针对不同节点个数与共识出块耗时进行验证,实验测试分别在3个节点、4个节点、5个节点的情况下,共识出块的耗时,如图34示出了共识节点个数分别为3个、4个、5个的情况下,共识出块耗时,当参与共识的节点数为3时,节点分别为:ipada、ipadb、iphoneb;当参与共识的节点数为4时,节点分别为ipada、ipadb、iphoneb、iphonec;当参与共识的节点数为5时,节点分别为ipada、ipadb、iphoneb、iphonec、iphonea,从图中可以看出,随着共识节点的增加,共识出块的耗时也会随之增加,从3个节点增加到4个节点,出块的耗时增加了2401.6毫秒,但是从4个节点增加到5个节点,出块的耗时就增加了7199.6毫秒,即参与共识的节点越多,共识出块的耗时就越长。

本发明实施例的实际测试还针对现有技术的拜占庭容错算法和改进型拜占庭容错算法,对共识出块耗时和能耗的对比,主要记录的实验数据是,在移动自组网下,拜占庭容错算法和改进型拜占庭容错算法的出块耗时和能耗,为了更加精确的测量共识出块的耗时,本实验设计一个请求为一个区块数据,实验的网络环境为12m光纤网络。在移动自组网下,拜占庭容错算法以及改进型拜占庭容错算法达成共识所需的时间如图35所示。从图中可以看出,在移动设备以及网络状态一样情况下,改进型拜占庭容错算法的出块耗时明显比拜占庭容错算法的出块耗时少。除此之外,实验还记录2种算法所消耗的电量(mah),测量的对象为网内的主节点,通过gt(腾讯性能测试工具)对应用所消耗的电量进行测算,获得实验数据,在移动自组网下,拜占庭容错算法以及改进型拜占庭容错算法达成共识所消耗的电量如图36所示,从图中可以得出,在移动设备以及网络状态一样情况下,改进型拜占庭容错算法主节点的能耗明显优于拜占庭容错算法的主节点能耗。结合上述的实验测试结果可以得出结论:改进型拜占庭容错算法相比于拜占庭容错算法,在出块耗时少的同时又降低了主节点的能耗。

本发明实施例还针对医疗数据处理前和处理后所占存储空间的大小进行对比,来验证数据处理的有效性。医疗数据分为文字数据和图片数据,利用md5消息摘要算法对文字数据和图片数据进行摘要运算得到存储数据,具体的数据信息如图37所示,从图中可以看出,数据处理之后所占的空间远远低于处理前所占的空间,仅仅只有2kb。由此也可以说明,处理过后的数据存储在移动端是完全可行的。

综上所述,本发明实施例测试和验证移动医疗数据区块链系统的性能和功能的结果如下:

多跳通信实验结果:当移动设备因通讯距离的限制无法直接通信时,可以通过其他节点的转发,实现多跳通信。

主节点选取与更换实验结果:验证主节点选取与更换功能的正常实现,通过对主节点选取与更换在不同节点情况下所需要的时间进行测试和对比,实测得到的结果与理论的结果完全一致。

共识节点选取实验结果:验证共识节点选取功能的正常实现,通过对不同性能节点的对比,得到的结果与理论的结果完全一致。

节点选取与共识出块耗时实验结果:通过主节点和共识节点的选取,可以使得共识出块的耗时大大减少,提高共识出块的速度。

共识节点数与出块耗时实验结果:利用该实验说明,共识出块的耗时是随着共识节点数的增加而增加的,且出块时间的增量随着节点个数的增加,增量越大,这也说明了主节点选取和共识节点选取在移动端的重要性。

两种拜占庭容错算法的共识出块耗时与能耗对比实验结果:将拜占庭容错与改进型拜占庭容错算法在出块时间与能耗上进行对比,改进型拜占庭容错算法在减少共识出块时间的同时降低了主节点共识所需的能耗。

医疗数据处理存储对比实验结果:将医疗数据处理前后所占的存储空间大小进行对比,数据处理之后所占的空间大大降低,这也表明将医疗数据存储在移动节点区块链中是可行的。

本发明根据目前的区块链应用都运行在pc端以及服务器端的情况,提出了基于移动自组网的区块链模型,以及根据移动端的存储容量、电池容量以及cpu计算能力提出了适用移动端的共识算法——改进型拜占庭容错算法,优化了拜占庭容错算法在移动自组网的场景下的使用性能。本发明将模型和算法应用到医疗数据管理中,在ios移动设备平台上实现了移动医疗数据区块链系统,并验证了系统功能的正常实现以及性能的测试,实验结果表明本发明提出的移动自组网区块链模型和改进型拜占庭容错算法达到了预期,具有实际应用的意义。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种非易失存储器编程状态处理方法以及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1