联盟链中的共识方法和系统
技术领域
本文件涉及计算机技术领域,尤其涉及一种联盟链中的共识方法和系统。
背景技术
目前,采用实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT)主要包括两个部分,即包括Normal Case Phase和View Change Phase这两个部分。其中,Normal Case Phase部分包括Pre-Prepare(预准备阶段)、Prepare(准备阶段)和Commit(提交阶段)这三个阶段来完成共识。
在预准备阶段,由共识主节点发起一个提议,向各共识备份节点发送针对该提议的PRE-PREPARE消息;在准备阶段,各共识备份节点对接收到的PRE-PREPARE消息进行验证,验证通过后,向其他共识备份节点和共识主节点发送PREPARE消息;在提交阶段,共识备份节点或共识主节点接收到1个PRE-PREPARE消息和来自不少于2f个共识节点的PREPARE消息,且验证通过,则向联盟链中的其他共识节点发送COMMIT消息。
如果在预设时间段内没有完成对目标提议的共识操作,共识网络中的共识节点则可以触发视图切换操作以试图更换共识主节点。而在无签名机制的PBFT中,如何使得视图切换后的共识主节点做出准确的视图切换决策,仍然需要提供进一步的解决方案。
发明内容
本说明书实施例提供了一种联盟链中的共识方法和系统,以解决现有的联盟链中在New-View阶段之后,如何保证视图切换后的共识主节点准确做出视图切换决策的问题。
为解决上述技术问题,本说明书实施例是这样实现的:
第一方面,提出了一种联盟链中的共识方法,包括:
当联盟链的共识网络中的第一共识节点在预设时间段内没有完成对目标待共识数据的共识操作时,所述第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在所述共识网络中广播视图切换ViewChange消息,所述第一共识节点为触发所述ViewChange消息时所述共识网络的当前视图对应的第一共识主节点以外的共识节点,所述第一共识节点接收到的ECHO消息是所述共识网络中的共识节点针对所述目标待共识数据广播的;
第二共识节点针对接收到的ViewChange消息,向第二共识主节点发送与接收到的ViewChange消息相对应的视图切换确认ViewChangeACK消息,所述第二共识主节点为所述第一共识主节点之后的共识主节点;
所述第二共识主节点在接收到所述共识网络中的共识节点发送的N-f-2个ViewChangeACK消息时,获取接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,f为所述共识网络中允许的最大异常共识节点数量;
所述第二共识主节点基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策。
第二方面,提出了一种联盟链系统,包括:
当联盟链的共识网络中的第一共识节点,在预设时间段内没有完成对目标待共识数据的共识操作时,所述第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在所述共识网络中广播视图切换ViewChange消息,所述第一共识节点为触发所述ViewChange消息时所述共识网络的当前视图对应的第一共识主节点以外的共识节点,所述第一共识节点接收到的ECHO消息是所述共识网络中的共识节点针对所述目标待共识数据广播的;
第二共识节点,针对接收到的ViewChange消息,向第二共识主节点发送与接收到的ViewChange消息相对应的视图切换确认ViewChangeACK消息,所述第二共识主节点为所述第一共识主节点之后的共识主节点;
第二共识主节点,在接收到所述共识网络中的共识节点发送的N-f-2个ViewChangeACK消息时,获取接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,f为所述共识网络中允许的最大异常共识节点数量;以及基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策。
本说明书实施例采用上述技术方案至少可以达到下述技术效果:
采用本说明书实施例提供的共识方法,当联盟链的共识网络中的第一共识节点,在预设时间段内没有完成对目标待共识数据的共识操作时,第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在共识网络中广播视图切换ViewChange消息;第二共识节点针对接收到的ViewChange消息,向第二共识主节点发送与接收到的ViewChange消息相对应的视图切换确认ViewChangeACK消息,第二共识主节点为第一共识主节点之后的共识主节点;第二共识主节点在接收到共识网络中的各共识节点发送的N-f-2个ViewChangeACK消息时,获取接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,f为所述共识网络中允许的最大异常共识节点数量;以及基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策,进而使得视图切换后的第二共识主节点能够准确做出视图切换决策。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1为现有的PBFT中视图切换的流程示意图。
图2为本说明书一个实施例提供的一种联盟链中的共识方法的实现流程示意图。
图3为本说明书一个实施例提供的联盟链中的共识方法应用于实际场景中的示意图。
图4为本说明书一个实施例提供的一种联盟链系统的结构示意图。
具体实施方式
为使本文件的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本文件一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文件保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
如图1所示,为现有的PBFT算法中的视图切换的流程示意图。在图1所示的共识网络中,包括四个共识节点即p0、p1、p2和p3,其中p0为视图切换之前的共识主节点,p3为该共识网络中的异常共识节点。
在图1中,如果共识主节点p0作恶,它可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻的序号不连续。该共识网络中的共识备份节点(p1~p3)应当有职责来主动检查这些序号的合法性。如果共识主节点p0掉线或者作恶不广播客户端的请求,使得在预设时间段内没有完成对客户端所请求共识的数据,也就是出现超时的情况,此时如果共识备份节点(p1~p3中的任意一个共识备份节点)检测出共识主节点(p0)作恶或者下线,都可以在共识网络中触发视图切换。具体过程可包括:
共识备份节点向其他共识节点广播视图切换(ViewChange)消息,其格式为<VIEW-CHANGE, v+1, n, C, P, i>消息。其中,n是最新的stable checkpoint的编号,也就是当前正在共识的数据对应的区块号,C是N-f验证过的CheckPoint消息集合,P是共识备份节点当前未完成的请求的PRE-PREPARE和PREPARE消息集合。
当视图切换后的新共识主节点p=v+1 mod |R|收到2f个有效的ViewChange消息后,则可以向其他共识节点广播<NEW-VIEW, v+1, V, O>消息。V是有效的ViewChange消息的集合。O是共识主节点重新发起的未经完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的选取规则如下:
1、选取V中最小的stable checkpoint编号min-s,选取V中prepare消息的最大编号max-s。
2、在min-s和max-s之间,如果存在P消息集合,则创建<<PRE-PREPARE, v+1, n, d>, m>消息。否则创建一个空的PRE-PREPARE消息,即:<<PRE-PREPARE, v+1, n, d(null)>,m(null)>, m(null)为空消息,d(null)为空消息的摘要。
视图切换后的共识备份节点在收到新共识主节点的新视图消息(NewView)消息后,验证有效性,在验证有效的前提下,进入视图切换后的新视图状态,即视图编号为v+1的新视图状态,并且开始进行O中的PRE-PREPARE消息处理流程。
然而,在无签名机制的PBFT中,如何使得视图切换后的共识主节点做出准确的视图切换决策,仍然需要提供进一步的解决方案。
采用本说明书实施例提供的共识方法,当联盟链的共识网络中的第一共识节点,在预设时间段内没有完成对目标待共识数据的共识操作时,第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在共识网络中广播视图切换ViewChange消息;第二共识节点针对接收到的ViewChange消息,向第二共识主节点发送与接收到的ViewChange消息相对应的视图切换确认ViewChangeACK消息,第二共识主节点为第一共识主节点之后的共识主节点;第二共识主节点在接收到共识网络中的各共识节点发送的N-f-2个ViewChangeACK消息时,获取接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,f为所述共识网络中允许的最大异常共识节点数量;以及基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策,进而使得视图切换后的第二共识主节点能够准确做出视图切换决策。
具体地,本说明书一个或多个实施例提供的一种联盟链中的共识方法的实现流程示意图如图2所示,包括:
步骤210,当联盟链的共识网络中的第一共识节点在预设时间段内没有完成对目标待共识数据的共识操作时,第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在共识网络中广播ViewChange消息。
其中,第一共识节点为触发ViewChange消息时共识网络的当前视图对应的第一共识主节点以外的共识节点,P集合和Q集合中的ECHO消息是共识网络中的共识节点针对目标待共识数据广播的。
应理解,P集合和Q集合中的ECHO消息是第一共识节点触发视图切换之前的一个视图中未完成共识的目标待共识数据对应的ECHO消息。
如图3所示,为本说明书实施例提供的方法应用于实际场景中的流程示意图,在图3中,第一共识节点触发ViewChange消息之前的第一共识主节点为P0,第一共识节点触发ViewChange消息且生效之后的第二共识主节点为P1。在图3所示的视图切换vc第一阶段,共识网络中除第一共识主节点以外的其他共识节点在满足各自共识节点的超时机制后,都可在共识网络中广播ViewChange消息。
以其中一个共识节点即第一共识节点为例,第一共识节点广播的ViewChange消息的格式为ViewChange(v+1, n, C, P, i),其中,v+1为视图切换后的视图编号,n为目标共识数据对应的区块号,C是N-f验证过的CheckPoint消息集合,P集合中的数据由第一共识节点在视图编号为v的视图中已经prepared的数据组成,Q集合中的数据由第一共识节点在视图编号为v的视图中已经pre-prepared的数据组成。
其中,prepared状态用于指示第一共识节点已接收到的N-f个针对目标待共识数据的ECHO消息,该P集合中包括第一共识节点已接收到的N-f个ECHO消息对应<n, r, v>,n为这N-f个ECHO消息对应的待共识数据的区块号,r为这N-f个ECHO消息对应的待共识数据构成的默克树的根哈希,v为当前的视图编号;pre-prepared状态用于指示第一共识节点已接收到的N-2f个针对目标待共识数据的ECHO消息,该Q集合中包括第一共识节点已接收到的N-2f个ECHO消息对应<n, r, v>,n为这N-f个ECHO消息对应的待共识数据的区块号,r为这N-f个ECHO消息对应的待共识数据构成的默克树的根哈希,v为当前的视图编号。
如图3所示,该第一共识节点可以是共识网络中除第一共识主节点以外的任意一个共识节点,即P1~P3中的任意一个共识节点,由于此时P0已经失效,且有另外一个共识节点即第一共识节点已在共识网络中广播ViewChange消息,共识网络中的其他共识节点P2和P3的个数小于3即2f+1,因此,共识网络中的其他共识节点P2和P3也不能完成对目标待共识数据的共识操作。也就是说,P2和P3也会在满足各自共识节点的超时机制后,在共识网络中广播ViewChange消息。
应理解,在每轮共识操作过程中,共识网络中各个参与共识的共识节点都有自己的一套超时机制,即共识网络中的各个共识节点本身都可以预先设定有一个超时时间段,如果一轮共识开始之后的超时时间段后,共识网络中的共识节点由于共识主节点作恶,或者共识节点本身断网宕机等原因,导致没有完成对该轮共识操作中的待共识数据的共识操作,则可以在该共识网络中广播ViewChange消息。当共识网络中大于或等于f+1个共识节点都广播了ViewChange消息,则会触发该共识网络的换主操作,即更换当前的共识主节点。
也就是说,当联盟链的共识网络中存在f+1个第一共识节点在预设时间段内没有完成对目标待共识数据的共识操作时,这f+1个第一共识节点就可以基于各自接收到的ECHO消息构建的P集合和Q集合,在共识网络中广播各自的ViewChange消息,此时,该共识网络则会更换当前的共识主节点。
其中,第一共识节点接收到的VAL消息,第一共识节点接收到的ECHO消息,为共识网络中的其他节点针对接收到的VAL消息通过校验并广播至共识网络中的。
需要说明的是,本说明书实施例中的Normal Case Phase阶段中,共识网络中的共识主节点广播至共识网络中的VAL消息中不携带共识主节点的签名,且共识网络中的共识节点针对共识主节点广播的VAL消息广播的ECHO消息中也不携带各发送端共识节点的签名。
可选地,为了提高共识网络的系统吞吐量,节省共识网络中的共识主节点在发起共识过程中的网络带宽消耗,本说明书实施例在Normal Case Phase阶段采用指定纠删码技术将目标待共识数据拆分为与共识网络中的共识节点数量等量的多个有序排列的数据分片。具体地,共识网络中的第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在共识网络中广播视图切换ViewChange消息之前,本说明书实施例提供的方法还包括:
第一共识主节点基于指定纠删码技术,将目标待共识数据拆分为与共识网络中的共识节点数量等量的多个有序排列的数据分片;
第一共识主节点基于多个有序排列的数据分片,构建默克树;
第一共识主节点将与第一共识主节点相对应的数据分片、对应的默克树路径、以及默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及默克树的根哈希的VAL消息发送给共识网络中对应的共识节点,一个数据分片对应于共识网络中的一个共识节点。
假设共识网络中的共识节点数量为N,共识网络中允许的最大异常共识节点数量为f,N≥3f+1。具体来说,共识网络中的第一共识主节点可将目标待共识数据打包为消息m0作为目标提议,并将该消息0采用指定纠删码算法处理后拆分为4个数据分片(s0~s3),共识主节点基于拆分成的4个数据分片(s0~s3)的哈希值构建一个默克树。其中,s0的哈希值为hash000、s1的哈希值为hash001、s2的哈希值为hash002、s3的哈希值为hash003、hash(hash00,hash01)=hash00、hash(hash002,hash003)=hash01、hash(hash01,hash02)=hash0即该默克树的根哈希。
第一共识主节点将携带有s0、以及s0在该默克树上的哈希路径上的哈希值b0(hash001、hash01)、该默克树的哈希根hash0保存在本地,并基于其他数据分片、对应的默克树路径以及默克树的根哈希,构建VAL消息,发送至与VAL消息中的数据分片相对应的共识节点。具体地,第一共识主节点可以将携带有(s1和Hash000 , Hash01 , Hash0 )的第1个VAL消息(即VAL<v, n, Hash0, b1, s1>)发送至共识节点1,将携带有(s2和Hash030 ,Hash00 , Hash0 )的第2个VAL消息(即VAL<v, n, Hash0, b2, s2>)发送至共识节点2,将携带有(s3和Hash020 , Hash00 , Hash0)的第3个VAL消息(即VAL<v, n, Hash0, b3, s3>)发送至共识节点3。
可选地,为了提高系统的恢复能力,使得在每轮共识操作中,即使有些共识节点没有接受到VAL消息也能在接收到2f+1个ECHO消息的前提下保证解析得到完整的待共识的交易列表,本说明书实施例中在共识网络中广播ECHO消息的共识节点除了共识备份节点以外,还包括共识主节点。具体地,第一共识主节点将与第一共识主节点相对应的数据分片、对应的默克树路径、以及默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及默克树的根哈希的VAL消息发送给共识网络中对应的共识节点之后,本说明书实施例提供的方法还包括:
接收到VAL消息的共识节点,针对接收到的VAL消息构建ECHO消息,并将构建的ECHO消息广播至所述共识网络中,构建的ECHO消息中包含接收到的VAL消息中的数据分片、对应的默克树路径和默克树的根哈希;
第一共识主节点基于保存在本地的数据分片、对应的默克树路径、以及默克树的根哈希构建ECHO消息,并将构建的ECHO消息广播至共识网络中。
继续沿用上述例子,接收到VAL消息的共识备份节点,在对接收到VAL消息进行验证之后,可基于接收到VAL消息,构建携带有接收到的数据分片、对应的默克树路径以及默克树的根哈希的ECHO消息,并将所构建的ECHO消息广播至共识网络中的其他共识节点。第一共识主节点可基于本地保存的VAL消息构建携带有与本共识节点的顺序相对应的数据分片、对应的默克树路径以及默克树的根哈希的ECHO消息,并将所构建的ECHO消息广播至共识网络中的其他共识节点。
步骤220,第二共识节点针对接收到的ViewChange消息,向第二共识主节点发送与接收到的ViewChange消息相对应的ViewChangeACK消息,第二共识主节点为第一共识主节点之后的共识主节点。
其中,第二共识节点为共识网络中除第二共识主节点以外的其他共识节点。如图3所示的视图切换vc第二阶段,第二共识节点p2和p3每接收到共识网络中的其他共识节点广播的ViewChange消息后,都会向第二共识主节点发送与接收到的ViewChange消息相对应的ViewChangeACK消息。
需要说明的是,本说明书实施例中共识网络中的共识节点间传输的消息不包含共识节点的签名,共识节点间传输的消息可通过MAC进行两两共识节点之间传输的消息认证。而为了确保第一共识节点广播至共识网络中的ViewChange消息被共识网络中的其他共识节点接收到,本说明书实施例可在视图切换过程中添加视图切换确认环节,即在共识网络中的共识节点每接收到一个由其他共识节点广播的ViewChange消息之后,就向视图切换后的第二共识主节点返回一个ViewChangeACK消息,使得第二共识主节点能够确认共识网络中的哪些共识节点接收到的ViewChange消息以及接收到的ViewChange消息的数量。
步骤230,第二共识主节点在接收到共识网络中的各共识节点发送的N-f-2个ViewChangeACK消息时,获取接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,f为共识网络中允许的最大异常共识节点数量。
应理解,由于本说明书实施例采用的共识算法是无签名机制的,为确保发送端共识节点发送的ViewChange消息能被接收端共识节点接收到,并且能使得第二共识主节点基于足够数量的共识节点发送的ViewChange消息做出视图切换决策,共识网络中的共识节点每接收到一个其他共识节点发送的ViewChange消息,都会向第二共识主节点反馈一个ViewChangeACK消息。而当共识网络中有大于或等于f+1个共识节点都在共识网络中广播了ViewChange消息,则会触发该共识网络中的视图切换即更换共识主节点的操作。当共识网络中有f+1个共识节点都在共识网络中广播了ViewChange消息时,此时第二共识主节点可接收其他各个共识节点分别反馈的N-f-2个ViewChangeACK消息。其中,N-f-2中的减掉的2个共识节点为发送端共识节点和第二共识主节点。
由于本说明书实施例中的共识过程采用的是无签名机制,因此,第二共识主节点无法根据一个单独的ViewChange消息来判断上一轮未完成的共识数据是什么,但可通过第二共识主节点接收到的多个ViewChange消息中所包含的多个P集合和多个Q集合是否相同(即以无冲突为基准),来确定下一轮即视图切换后要共识的数据。
步骤240,第二共识主节点基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策。
可选地,由于第一共识主节点可能为作恶共识节点,即在Normal Case Phase阶段向不同的共识备份节点发送不同的待共识数据,本说明书实施例为了判断接收到的ViewChange消息的有效性,可基于多个ViewChange消息中的P集合或Q集合是否相同来判断。具体地,第二共识主节点基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策,包括:
第二共识主节点从接收到的ViewChange消息中获取多个相同的P集合及多个相同的Q集合;
第二共识主节点若确定接收到的ViewChange消息满足指定条件,则在共识网络中广播NewView消息。
可选地,上述指定条件包括下述至少一种:
第二共识主节点接收到的ViewChange消息中存在N-f个相同的P集合,其中,N为大于或等于3f+1的整数;
第二共识主节点接收到的ViewChange消息中存在f+1个相同的Q集合。
本说明书实施例中,上述指定条件具体可以包括下述几个条件:
A1:第二共识主节点接收到的ViewChange消息中存在N-f个相同的P集合,且P集合不为空;
A2:第二共识主节点接收到的ViewChange消息中存在f+1个相同的Q集合;
B:第二共识主节点接收到的ViewChange消息中存在N-f个相同的P集合,且P集合为空。
可选地,当指定条件包括第二共识主节点接收到的ViewChange消息中存在N-f个相同的P集合和f+1个相同的Q集合时,第二共识主节点在共识网络中广播NewView消息,包括:
第二共识主节点从N-f个相同的P集合和f+1个相同的Q集合中,获取目标待共识数据对应的区块号、根哈希;
第二共识主节点基于视图切换后对应的视图编号、接收到的ViewChange消息、目标待共识数据对应的区块号以及根哈希,在共识网络中广播NewView消息,该NewView消息中携带有视图切换后对应的视图编号、第二共识主节点接收到的ViewChange消息、目标待共识数据对应的区块号以及根哈希。
其中,NewView消息的格式为NewView(v+1,V,X),其中,v+1为视图切换后的视图编号,V为第二共识主节点接收到的ViewChange消息的集合,X为所有有效的(v+1,n,r)的集合,r为目标待共识数据对应的根哈希,n为目标待共识数据对应的区块号。
在图3所示的视图切换vc第三阶段,第二共识主节点在确定接收到的ViewChange消息中存在N-f个相同的P集合和f+1个相同的Q集合时,第二共识主节点在共识网络中广播NewView消息,即NewView(v+1,V,X),在广播了NewView消息后,则表明视图切换操作已完成,即共识网络中的共识主节点由第一共识主节点成功更换为第二共识主节点。
可选地,当上述指定条件为A1&A2时,则表明目标待共识数据为非空,且共识网络中至少存在一个共识节点能恢复完整的目标待共识数据。此时,为避免接收到NewView消息的共识节点在发现本地没有X中对应的目标待共识数据,则需要向其他共识节点查询,导致接收到NewView消息的共识节点需要耗费较大的带宽开销来向其他共识节点请求完整的目标待共识数据,本说明书实施例中接收到NewView消息的共识节点在确定本共识节点能够恢复得到完整的目标待共识数据后,可在共识网络中广播针对目标待共识数据的VAL消息。
具体地,第二共识主节点在共识网络中广播NewView消息之后,本说明书实施例提供的方法还包括:
接收到NewView消息的共识节点若确定接收到的ViewChange消息中存在f+1个相同的Q集合,则确定本共识节点存在完整的目标待共识数据;
接收到NewView消息的共识节点基于指定纠删码技术,将目标待共识数据拆分为与视图切换后的共识网络中的共识节点数量等量的多个有序排列的数据分片;
接收到NewView消息的共识节点基于多个有序排列的数据分片,构建默克树;
接收到NewView消息的共识节点将与本共识节点相对应的数据分片、对应的默克树路径、以及默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及默克树的根哈希的VAL消息发送给视图切换后的共识网络中对应的共识节点,一个数据分片对应于视图切换后的共识网络中的一个共识节点。
在图3所示的Normal Case Phase阶段,接收到NewView消息的共识节点P2若确定满足A2条件,即存在f+1个相同的Q集合,则可基于这f+1个Q集合恢复得到完整的目标待共识数据,由于此时共识网络中能够恢复完整的目标待共识数据可能只有P2,因此,还需要P2基于指定纠删码技术将目标待共识数据拆分为与视图切换后的共识网络中的共识节点数量等量的多个有序排列的数据分片。P2基于这多个有序排列的数据分片构建与各个共识节点的共识节点顺序相对应的VAL消息,该VAL消息的格式为VAL(v+1,n,r,bi,si),其中,v+1为当前视图的视图编号,n为目标待共识数据对应的区块号,r为由P2拆分得到的多个有序排列的数据分片构建的默克树的根哈希,bi为接收方共识节点对应的数据分片,si为接收方共识节点对应的数据分片在默克树中的默克树路径。
可选地,当指定条件包括第二共识主节点接收到的ViewChange消息中存在N-f个相同的P集合时,第二共识主节点在共识网络中广播NewView消息,包括:
若N-f个相同的P集合为空,则第二共识主节点确定目标待共识数据为空;
第二共识主节点在共识网络中广播NewView消息。
可选地,当上述指定条件为B时,则表明目标待共识数据为空,此时则不需要对目标待共识数据继续进行共识操作。具体地,第二共识主节点在共识网络中广播NewView消息之后,本说明书实施例提供的方法还包括:
第二共识主节点基于指定纠删码技术,将目标待共识数据的下一个待共识数据拆分为与视图切换后的共识网络中的共识节点数量等量的多个有序排列的数据分片;
第二共识主节点基于多个有序排列的数据分片,构建默克树;
第二共识主节点将与第二共识主节点相对应的数据分片、对应的默克树路径、以及默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及默克树的根哈希的VAL消息发送给切换后的共识网络中对应的共识节点,一个数据分片对应于视图切换后的共识网络中的一个共识节点。
其中,目标待共识数据的下一个待共识数据可由第二共识主节点在交易池中捞取得到。
采用本说明书实施例提供的共识方法,当联盟链的共识网络中的第一共识节点,在预设时间段内没有完成对目标待共识数据的共识操作时,第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在共识网络中广播视图切换ViewChange消息;第二共识节点针对接收到的ViewChange消息,向第二共识主节点发送与接收到的ViewChange消息相对应的视图切换确认ViewChangeACK消息,第二共识主节点为第一共识主节点之后的共识主节点;第二共识主节点在接收到共识网络中的各共识节点发送的N-f-2个ViewChangeACK消息时,获取接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,f为所述共识网络中允许的最大异常共识节点数量;以及基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策,进而使得视图切换后的第二共识主节点能够准确做出视图切换决策。
图4是本说明书实施例提供的联盟链系统400的结构示意图。请参考图4,在一种软件实施方式中,联盟链系统400可包括第一共识节点410、第二共识节点420、第一共识主节点430和第二共识主节点440,其中:
当联盟链的共识网络中的第一共识节点410,在预设时间段内没有完成对目标待共识数据的共识操作时,所述第一共识节点基于接收到的ECHO消息构建的P集合和Q集合,在所述共识网络中广播视图切换ViewChange消息,所述第一共识节点为触发所述ViewChange消息时所述共识网络的当前视图对应的第一共识主节点430以外的共识节点,所述第一共识节点接收到的ECHO消息是所述共识网络中的共识节点针对所述目标待共识数据广播的;
第二共识节点420,针对接收到的ViewChange消息,向第二共识主节点发送与接收到的ViewChange消息相对应的视图切换确认ViewChangeACK消息,所述第二共识主节点为所述第一共识主节点之后的共识主节点;
第二共识主节点440,在接收到所述共识网络中的共识节点发送的N-f-2个ViewChangeACK消息时,获取接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,f为所述共识网络中允许的最大异常共识节点数量;以及基于接收到的ViewChange消息中的多个相同的P集合及多个相同的Q集合,做出视图切换决策。
可选地,在一种实施方式中,所述共识网络中的第一共识节点410基于接收到的ECHO消息构建的P集合和Q集合,在所述共识网络中广播视图切换ViewChange消息之前,所述第一共识主节点430,用于:
基于指定纠删码技术,将所述目标待共识数据拆分为与所述共识网络中的共识节点数量等量的多个有序排列的数据分片;
基于所述多个有序排列的数据分片,构建默克树;
将与所述第一共识主节点相对应的数据分片、对应的默克树路径、以及所述默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及所述默克树的根哈希的VAL消息发送给所述共识网络中对应的共识节点,一个数据分片对应于所述共识网络中的一个共识节点。
可选地,在一种实施方式中,所述第一共识主节点430,将与所述第一共识主节点相对应的数据分片、对应的默克树路径、以及所述默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及所述默克树的根哈希的VAL消息发送给所述共识网络中对应的共识节点之后,还用于:
接收到VAL消息的共识节点,针对接收到的VAL消息构建ECHO消息,并将构建的ECHO消息广播至所述共识网络中,所述构建的ECHO消息中包含接收到的VAL消息中的数据分片、对应的默克树路径和所述默克树的根哈希;
基于保存在本地的数据分片、对应的默克树路径、以及所述默克树的根哈希构建ECHO消息,并将构建的ECHO消息广播至所述共识网络中。
可选地,在一种实施方式中,所述第二共识主节点440,用于:
从接收到的ViewChange消息中获取多个相同的P集合及多个相同的Q集合;
若确定接收到的ViewChange消息满足指定条件,则在所述共识网络中广播NewView消息。
可选地,在一种实施方式中,所述指定条件包括下述至少一种:
所述第二共识主节点440接收到的ViewChange消息中存在N-f个相同的P集合,其中,N为大于或等于3f+1的整数;
所述第二共识主节点440接收到的ViewChange消息中存在f+1个相同的Q集合。
可选地,在一种实施方式中,当所述指定条件包括所述第二共识主节点接收到的ViewChange消息中存在N-f个相同的P集合和f+1个相同的Q集合时,所述第二共识主节点440,用于:
从所述N-f个相同的P集合和所述f+1个相同的Q集合中,获取所述目标待共识数据对应的区块号、根哈希;
基于视图切换后对应的视图编号、接收到的ViewChange消息、所述目标待共识数据对应的区块号以及根哈希,在所述共识网络中广播新视图NewView消息,所述NewView消息中携带有所述视图切换后对应的视图编号、所述第二共识主节点接收到的ViewChange消息、所述目标待共识数据对应的区块号以及根哈希。
可选地,在一种实施方式中,所述第二共识主节点440在所述共识网络中广播NewView消息之后,
接收到所述NewView消息的共识节点若确定接收到的ViewChange消息中存在f+1个相同的Q集合,则确定本共识节点存在完整的所述目标待共识数据;
接收到所述NewView消息的共识节点基于指定纠删码技术,将所述目标待共识数据拆分为与所述视图切换后的共识网络中的共识节点数量等量的多个有序排列的数据分片;
接收到所述NewView消息的共识节点基于所述多个有序排列的数据分片,构建默克树;
接收到所述NewView消息的共识节点将与本共识节点相对应的数据分片、对应的默克树路径、以及所述默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及所述默克树的根哈希的VAL消息发送给所述视图切换后的共识网络中对应的共识节点,一个数据分片对应于所述视图切换后的共识网络中的一个共识节点。
可选地,在一种实施方式中,当所述指定条件包括所述第二共识主节点440接收到的ViewChange消息中存在N-f个相同的P集合时,所述第二共识主节点440,用于:
若所述N-f个相同的P集合为空,则确定所述目标待共识数据为空;
在所述共识网络中广播NewView消息。
可选地,在一种实施方式中,所述第二共识主节点440在所述共识网络中广播NewView消息之后,所述第二共识主节点440,用于:
基于指定纠删码技术,将所述目标待共识数据的下一个待共识数据拆分为与所述视图切换后的共识网络中的共识节点数量等量的多个有序排列的数据分片;
基于所述多个有序排列的数据分片,构建默克树;
将与所述第二共识主节点相对应的数据分片、对应的默克树路径、以及所述默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及所述默克树的根哈希的VAL消息发送给所述切换后的共识网络中对应的共识节点,一个数据分片对应于所述视图切换后的共识网络中的一个共识节点。
联盟链系统400能够实现图2~图3的方法实施例的方法,具体可参考图2~图3所示实施例的联盟链中的共识方法,不再赘述。
总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。