一种基于主副双层的联盟链动态共识方法与流程

文档序号:22324284发布日期:2020-09-25 17:51阅读:139来源:国知局
一种基于主副双层的联盟链动态共识方法与流程

本发明属于区块链技术领域,具体涉及一种基于主副双层的联盟链动态共识方法。



背景技术:

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。

共识算法作为区块链中的关键技术,直接影响着区块链的交易处理能力、可扩展性和安全性,因此成为区块链技术研究的热点。现有联盟链多将整个区块链网络划分为不同的共识群组,通过将交易分流到不同区块链的方式实现交易吞吐量的扩展,但由于不同群组之间相互独立,难以实现全局交易的一致性,同时相对固定的共识成员致使共识过程的公平性下降制约着技术的应用和业务的推广。



技术实现要素:

本发明的目的是克服上述现有技术的缺陷,提供一种基于主副双层的联盟链动态共识方法,通过主副双层的区块链结构相互耦合,实现交易的可扩展性以及一致性保障,通过共识节点的动态选取防止节点相互勾结篡改数据。

本发明所提出的技术问题是这样解决的:

一种基于主副双层的联盟链动态共识方法,基于双层联盟链架构,双层联盟链包括主层区块链和副层区块链;在主层-副层的双层联盟链架构中,主体为联盟链的不同参与方(中心或组织),每个主体具有唯一的身份标识;各个主体借助自身的区块链(副层区块链)存储并维护自身的局部业务数据,所有主体在主层区块链上共同存储并维护全局业务数据。

由于分布式网络通信时延的影响,区块链系统中存在着各节点信息不对称的可能,这种可能性甚至会产生双花攻击。为了避免这种情况的发生,需要对发生在各个主体的交易进行全局一致性验证。同时,为了减少通信及存储开销,主层区块链仅存储满足全局一致性的交易id,发生在各主体交易的具体信息则由各主体维护并存储在自身的副层区块链中。

副层区块链的区块结构为{header:sbn,sid,ssign,shpre,st,elist,tlist|body:tdetail},其中sbn为当前副层区块序号,sid为所属主体的身份标识,ssign为主体签名,shpre为前一副层区块的哈希值,st为当前副层区块的时间戳,elist为合法的实体列表,tlist为当前区块打包的交易列表,tdetail为所打包交易的详细信息;

主层区块链的区块结构为{header:pbn,gnsign,phpre,pt|body:gtlist},其中pbn为当前主层区块序号,gnsign为构造当前块的构造节点签名,phpre为前一主层区块的哈希值,pt为当前主层区块的时间戳,gtlist为满足全局一致性的可信交易列表;

全局一致性交易列表gtlist结构为{tid,tsid,tbn},其中tid为交易的标识,tsid为该交易所属的主体身份标识,tbn为该交易对应的副层区块序号。

整个联盟链中有三类区块链节点,分别是普通节点、验证节点与构造节点。普通节点负责发起交易、数据传输以及根据本主体的共识算法维护本主体的副层区块链;验证节点负责对发生在主体的交易进行全局一致性验证;构造节点负责对通过验证节点一致性验证的交易进行打包上链,构造主层区块链。

本发明所述方法具体包括以下步骤:

根据联盟链业务量的大小,将系统时间分为多个时间片,每个时间片为一轮;每一轮开始时,根据共识算法在每个主体的节点集群中选举出一个代表节点,该节点代表本主体与其他主体进行通信;主体的代表节点负责从全网中选取验证节点群组,构造节点群组从各个主体的验证节点群组选出。

步骤1.选取验证节点群组与构造节点群组:

情形a.初始轮次,节点群组选取流程为:

步骤1-a-1.每个主体随机选举出一个代表节点,记主体i的代表节点为dni,1≤i≤n,n为主体的个数;

步骤1-a-2.dni从全网中随机选举m个主体,m个主体中每个主体的代表节点组成群组rnsi,其中m>2n/3;

步骤1-a-3.群组rnsi中的每个节点在n个主体中随机选择一个节点投票,并将投票结果发送给其他的m-1个主体及主体i的代表节点;

步骤1-a-4.主体i和m个主体的代表节点选取票数最多的m个节点作为主体i的初始验证节点群组cnsi,其中票数最多的节点为本轮验证节点群组的主节点pcni,并将初始验证节点群组cnsi与主节点pcni广播给每个主体的代表节点;

步骤1-a-5.每个主体的代表节点将初始验证节点群组cnsi与主节点pcni广播给主体内的节点,使初始验证节点群组cnsi中的各个节点建立连接,进行通信;

步骤1-a-6.各个主体验证节点群组的主节点pcni组成构造节点群组gns,用以将满足全局一致性的交易打包,构造主层区块。

情形b.初始轮次后的轮次,节点群组选取流程为:

步骤1-b-1.每个主体随机选举出一个代表节点dni’,1≤i≤n,本轮次的代表节点与上轮次的代表节点不同,即dni’≠dni;

步骤1-b-2.上一轮的验证节点群组cnsi从全网中随机选举m个主体,m个主体中每个主体的代表节点组成群组rnsi’,其中m>2n/3;

步骤1-b-3.群组rnsi’中的每个节点在n个主体中随机选择一个节点投票,并将投票结果发送给其他的m-1个主体及主体i的代表节点;

步骤1-b-4.主体i和m个主体的代表节点选取票数最多的m个节点作为主体i的验证节点群组cnsi’,其中票数最多的节点为本轮验证节点群组的主节点pcni’,并将验证节点群组cnsi’与主节点pcni’广播给每个主体的代表节点;

步骤1-b-5.每个主体的代表节点将验证节点群组cnsi’与主节点pcni’广播给主体内的节点,使验证节点群组cnsi’中的各个节点建立连接,进行通信;

步骤1-b-6.各个主体验证节点群组的主节点pcni组成构造节点群组gns,用以将满足全局一致性的交易打包,构造主层区块。

步骤2.构造主层区块链

步骤2-1.主体i识别发起交易的实体身份,检查交易发起用户对数据的访问权限,若通过,则将交易请求标识为合法,执行步骤2-2;否则,拒绝交易进行共识验证;

步骤2-2.主体i的普通节点收到多个合法的交易请求后,根据主体i的共识算法对交易进行共识验证,打包成副层区块连接至主体i所在的副层区块链,并将打包的副层区块转发至主体i的验证节点群组cnsi;

步骤2-3.验证节点群组cnsi对接收到的副层区块进行解析,根据副层区块中的交易列表tlist与交易的详细信息tdetail进行全局一致验证,将通过验证的可信交易列表发送给构造节点群组gns;

步骤2-4.构造节点群组gns根据收到的可信交易列表,从构造节点群组gns中随机选取一个节点作为构造节点gn;

步骤2-5.构造节点gn解析可信交易列表,得到交易标识tid与交易所属主体标识tsid,附上构造节点的签名gnsign,并打上当前时间戳pt,打包形成主层区块,将打包的主层区块连接到主层区块链中,并向全网广播,共识结束。

步骤2-4中,随机选取的方法为:

步骤2-4-1.对构造节点群组gns中的节点进行排序标号(0,1,2……,n-1);

步骤2-4-2.选取哈希算法对收到可信交易列表的时间戳以及交易的详细信息进行哈希运算;

步骤2-4-3.将哈希运算得到的结果与n进行取模运算,并以此运算结果作为节点标号选出的构造节点gn。

本发明的有益效果是:

本发明所述方法基于主层-副层的双层联盟链架构,主层区块链存储并维护联盟的全局业务数据,副层区块链由各个主体维护自身的局部业务数据。将共识节点的选取过程分为验证节点与构造节点的动态选取,提升联盟链的灵活度。本发明所述方法借助区块链的双层架构以及共识节点的动态选取,实现交易的可扩展性以及一致性保障,提升联盟链的业务处理效率,实现联盟链系统的易扩展性与高可用性,增强区块链技术支持大数据服务以及应对多种业务场景的能力。

附图说明

图1为双层联盟链架构示意图;

图2为副层区块链和主层区块链的区块结构示意图;

图3为构造主层区块链的流程示意图。

具体实施方式

下面结合附图和实施例对本发明进行进一步的说明。

目前,医疗行业遭受大规模的数据质量问题——一部分源于多个医疗机构对同一患者ehr(电子病历)未做全局一致验证,致使患者就诊时医疗机构拿不到患者ehr的最新版本,无法对患者病情做到精准的诊断。

本实施例提供一种基于主副双层的联盟链动态共识方法,用于解决医疗行业的数据质量问题,双层联盟链架构示意图如图1所示,双层联盟链包括主层区块链和副层区块链;此情形的主层-副层双层联盟链架构中,主体为联盟链的不同医疗机构(医院、诊所),每个医疗机构具有唯一的身份标识;各个医疗机构借助自身的区块链(副层区块链)存储并维护本医疗机构患者的ehr。

为解决患者在不同医疗机构就诊时,患者ehr版本不同导致病历信息不对称的问题,保证医疗机构可以获取到患者最新版本的ehr,需要对各个医疗机构的患者ehr进行全局一致性验证,联盟链中所有医疗机构在主层区块链上共同存储并维护通过全局一致验证的患者ehr。

同时,为了减少通信及存储开销,主层区块链仅存储满足全局一致性的患者ehr(即最新版本)id,各医疗机构患者ehr的具体信息则由各医疗机构维护并存储在自身的副层区块链中。

副层区块链和主层区块链的区块结构示意图如图2所示。

副层区块链的区块结构为{header:sbn,sid,ssign,shpre,st,elist,tlist|body:tdetail},其中sbn为当前副层区块序号,sid为所属医疗机构的身份标识,ssign为医疗机构签名,shpre为前一副层区块的哈希值,st为当前副层区块的时间戳,elist为合法的实体列表(患者、诊断医师、药剂师等),tlist为当前区块打包的患者ehr列表,tdetail为所打包患者ehr的详细信息;

主层区块链的区块结构为{header:pbn,gnsign,phpre,pt|body:gtlist},其中pbn为当前主层区块序号,gnsign为构造当前块的构造节点签名,phpre为前一主层区块的哈希值,pt为当前主层区块的时间戳,gtlist为满足全局一致性的患者ehr列表;

全局一致性患者ehr列表gtlist结构为{tid,tsid,tbn},其中tid为患者ehr的标识,tsid为该患者ehr所属的主体身份标识,tbn为该患者ehr对应的副层区块序号。

整个联盟链中有三类区块链节点,分别是普通节点、验证节点与构造节点。普通节点负责发起交易、数据传输以及根据本医疗结构的共识算法维护本医疗结构的副层区块链;验证节点负责对各个医疗机构记录的患者ehr进行全局一致性验证;构造节点负责对通过验证节点一致性验证的患者ehr进行打包上链,构造主层区块链。

本实施例所述方法具体包括以下步骤:

根据联盟链业务量的大小,将系统时间分为多个时间片,每个时间片为一轮;每一轮开始时,根据共识算法在每个医疗机构的节点集群中选举出一个代表节点,该节点代表本医疗机构与其他医疗机构进行通信;主体的代表节点负责从全网中选取验证节点群组,构造节点群组从各个主体的验证节点群组选出。

步骤1.选取验证节点群组与构造节点群组:

情形a.初始轮次,节点群组选取流程为:

步骤1-a-1.每个医疗机构随机选举出一个代表节点,记医疗机构i的代表节点为dni,1≤i≤n,n为联盟链中医疗机构的个数;

步骤1-a-2.dni从全网中随机选举m个医疗机构,m个医疗机构中每个医疗机构的代表节点组成群组rnsi,其中m>2n/3;

步骤1-a-3.群组rnsi中的每个节点在n个医疗机构中随机选择一个节点投票,并将投票结果发送给其他的m-1个医疗机构及医疗机构i的代表节点;

步骤1-a-4.医疗机构i和m个医疗机构的代表节点选取票数最多的m个节点作为医疗机构i的初始验证节点群组cnsi,其中票数最多的节点为本轮验证节点群组的主节点pcni,并将初始验证节点群组cnsi与主节点pcni广播给每个医疗机构的代表节点;

步骤1-a-5.每个医疗机构的代表节点将初始验证节点群组cnsi与主节点pcni广播给医疗机构内的节点,使初始验证节点群组cnsi中的各个节点建立连接,进行通信;

步骤1-a-6.各个医疗机构验证节点群组的主节点pcni组成构造节点群组gns,用以将满足全局一致性的交易打包,构造主层区块。

情形b.初始轮次后的轮次,节点群组选取流程为:

步骤1-b-1.每个医疗机构随机选举出一个代表节点dni’,1≤i≤n,本轮次的代表节点与上轮次的代表节点不同,即dni’≠dni;

步骤1-b-2.上一轮的验证节点群组cnsi从全网中随机选举m个医疗机构,m个医疗机构中每个医疗机构的代表节点组成群组rnsi’,其中m>2n/3;

步骤1-b-3.群组rnsi’中的每个节点在n个医疗机构中随机选择一个节点投票,并将投票结果发送给其他的m-1个医疗机构及医疗机构i的代表节点;

步骤1-b-4.医疗机构i和m个医疗机构的代表节点选取票数最多的m个节点作为医疗机构i的验证节点群组cnsi’,其中票数最多的节点为本轮验证节点群组的主节点pcni’,并将验证节点群组cnsi’与主节点pcni’广播给每个医疗机构的代表节点;

步骤1-b-5.每个医疗机构的代表节点将验证节点群组cnsi’与主节点pcni’广播给医疗机构内的节点,使验证节点群组cnsi’中的各个节点建立连接,进行通信;

步骤1-b-6.各个医疗机构验证节点群组的主节点pcni组成构造节点群组gns,用以将满足全局一致性的交易打包,构造主层区块。

步骤2.构造主层区块链,其流程图如图3所示;

步骤2-1.医疗机构i识别发起患者ehr操作请求(查询&更新)的实体身份,检查操作发起实体对数据的访问权限(例如某些诊断医师可以修改ehr,药剂师仅能查询ehr),若通过,则将操作请求标识为合法,执行该操作,转至步骤2-2;否则,拒绝进行操作;

步骤2-2.医疗机构i的普通节点收到多个合法的操作共识请求后,根据医疗机构i的共识算法对操作进行共识验证,将操作行为以及更新后相关患者ehr打包成副层区块连接至医疗机构i所在的副层区块链,并将打包的副层区块转发至医疗机构i的验证节点群组cnsi;

步骤2-3.验证节点群组cnsi对接收到的副层区块进行解析,根据副层区块中的患者ehr列表tlist与ehr的详细信息tdetail进行全局一致验证,将通过验证的患者ehr列表发送给构造节点群组gns;

步骤2-4.构造节点群组gns根据收到的患者ehr列表,从构造节点群组gns中随机选取一个节点作为构造节点gn;

随机选取的方法可以为下述步骤,但不限定:

步骤2-4-1.对构造节点群组gns中的节点进行排序标号(0,1,2……,n-1);

步骤2-4-2.选取哈希算法对收到ehr列表的时间戳以及ehr的列表信息进行哈希运算;

步骤2-4-3.将哈希运算得到的结果与n进行取模运算,并以此运算结果作为节点标号选出的构造节点gn;

步骤2-5.构造节点gn解析患者ehr列表,得到患者ehr标识tid与该患者ehr所属医疗机构标识tsid,附上构造节点的签名gnsign,并打上当前时间戳pt,打包形成主层区块,将打包的主层区块连接到主层区块链中,并向全网广播,共识结束。

至此,当有权限的医疗机构对患者进行诊治时,该医疗机构可以通过查询主层区块获取患者最新ehr的tid与tsid,从而获取该患者最新版本ehr的tdetail。

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