联盟链中的共识方法和系统
技术领域
本文件涉及计算机技术领域,尤其涉及一种联盟链中的共识方法和系统。
背景技术
目前,采用实用拜占庭容错算法(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共识算法在一轮共识操作时进行视图切换操作后,无法保证对视图切换过程中未完成共识的待共识数据继续进行共识操作的问题。
为解决上述技术问题,本说明书实施例是这样实现的:
第一方面,提出了一种联盟链中的共识方法,包括:
当联盟链的共识网络中的第一共识节点在预设时间段内没有完成对目标共识数据的共识操作时,所述第一共识节点基于接收到的针对所述目标共识数据广播的ECHO消息和签名,在所述共识网络中广播视图切换ViewChange消息,所述针对所述目标共识数据广播的ECHO消息和签名是所述共识网络中的其它共识节点发送的;
所述共识网络中的第一共识主节点接收所述共识网络的共识节点广播的ViewChange消息,所述第一共识主节点为对所述目标共识数据进行共识时的视图对应的共识主节点;
当所述第一共识主节点确定接收到N-f个通过验证的ViewChange消息时,基于所述N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建新视图NiewView消息,并广播至所述共识网络中,以切换所述共识网络的视图至目标视图中;其中,f为所述共识网络中允许的最大异常共识节点数量,N为所述共识网络的共识节点数量,且N≥3f+1;
当接收到所述NiewView消息的第二共识节点确定本共识节点存在与所述目标共识数据对应的ECHO消息时,在所述共识网络中广播针对所述目标共识数据的ECHO消息,所述ECHO消息中的视图编号为所述目标视图的视图编号。
第二方面,提出了一种联盟链系统,包括:
第一共识节点,在预设时间段内没有完成对目标共识数据的共识操作时,基于从联盟链的共识网络中的其它共识节点接收到的针对所述目标共识数据广播的ECHO消息和签名,在所述共识网络中广播视图切换ViewChange消息;
共识主节点,接收所述共识网络的共识节点广播的ViewChange消息;以及当确定接收到N-f个通过验证的ViewChange消息时,基于所述N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建新视图NiewView消息,并广播至所述共识网络中,以切换所述共识网络的视图至目标视图中;其中,f为所述共识网络中允许的最大异常共识节点数量,N为所述共识网络的共识节点数量,且N≥3f+1;
第二共识节点,在接收到所述NiewView消息之后,确定本共识节点存在与所述目标共识数据对应的ECHO消息时,在所述共识网络中广播针对所述目标共识数据的ECHO消息,所述ECHO消息中的视图编号为所述目标视图的视图编号。
本说明书实施例采用上述技术方案至少可以达到下述技术效果:
采用本说明书实施例提供的共识方法,当联盟链的共识网络中的第一共识节点在预设时间段内没有完成对目标共识数据的共识操作时,第一共识节点可以基于联盟链中的其它共识节点发送的针对目标共识数据广播的ECHO消息和签名,在共识网络中广播ViewChange消息;共识网络中的第一共识主节点接收共识网络的共识节点广播的ViewChange消息;当第一共识主节点确定接收到N-f个通过验证的ViewChange消息时,基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建NewView消息,并广播至共识网络中;当接收到NewView消息的第二共识节点确定本共识节点存在与目标共识数据对应的ECHO消息时,则可以在共识网络中广播针对目标共识数据的ECHO消息。
也就是说,在共识网络中的共识节点触发视图切换操作之后,由于共识网络中的任意共识节点即第一共识节点可以在共识网络中广播ViewChange消息,且该ViewChange消息中包含有第一共识节点接收到的联盟链中的共识节点针对目标共识数据广播的ECHO消息和对应的签名,这就使得即便触发视图切换的共识节点不是视图切换后的共识主节点,也能使得共识网络中的共识节点针对目标共识数据构建的ECHO消息和对应的签名被共识网络中的其他共识节点所获取,从而使得共识网络中的共识节点在视图切换后的共识网络中继续执行对目标共识数据的共识操作。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图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是2f+1验证过的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消息处理流程。
采用本说明书实施例提供的共识方法,当联盟链的共识网络中的第一共识节点在预设时间段内没有完成对目标共识数据的共识操作时,第一共识节点可以基于联盟链中的其它共识节点发送的针对目标共识数据广播的ECHO消息和签名,在共识网络中广播ViewChange消息;共识网络中的第一共识主节点接收共识网络的共识节点广播的ViewChange消息;当第一共识主节点确定接收到N-f个通过验证的ViewChange消息时,基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建NewView消息,并广播至共识网络中;当接收到NewView消息的第二共识节点确定本共识节点存在与目标共识数据对应的ECHO消息时,则可以在共识网络中广播针对目标共识数据的ECHO消息。
也就是说,在共识网络中的共识节点触发视图切换操作之后,由于共识网络中的任意共识节点即第一共识节点可以在共识网络中广播ViewChange消息,且该ViewChange消息中包含有第一共识节点接收到的联盟链中的共识节点针对目标共识数据广播的ECHO消息和对应的签名,这就使得即便触发视图切换的共识节点不是视图切换后的共识主节点,也能使得共识网络中的共识节点针对目标共识数据构建的ECHO消息和对应的签名被共识网络中的其他共识节点所获取,从而使得共识网络中的共识节点在视图切换后的共识网络中继续执行对目标共识数据的共识操作。
具体地,本说明书一个或多个实施例提供的一种联盟链中的共识方法的实现流程示意图如图2所示,包括:
步骤210,当联盟链的共识网络中的第一共识节点在预设时间段内没有完成对目标共识数据的共识操作时,第一共识节点基于接收到的针对目标共识数据广播的ECHO消息和签名,在共识网络中广播ViewChange消息。
其中,针对目标共识数据广播的ECHO消息和签名是共识网络中的其它共识节点发送的。
其中,ViewChange消息的格式为ViewChange(v+1, n, C, P, i),其中,v+1为视图切换后的视图编号,n为目标共识数据对应的区块号,C是N-f验证过的CheckPoint消息集合,P为已经prepared的数据,由N-f个含有效签名的ECHO消息组成,该N-f 个含有效签名的ECHO消息,为共识网络中的N-f个共识节点基于接收到的VAL消息构建得到的。其中,N为大于或等于3f+1的正整数,f为共识网络中允许的最大异常共识节点数量,当共识节点状态更改为prepared则表明,该共识节点已收到N-f个含有效签名的ECHO消息。
其中,第一共识节点可以是共识网络中的任意一个共识节点,即第一共识节点可以是联盟链中的任意一个共识备份节点,也可以是第一共识主节点,还可以是第二共识主节点。也就是说,共识网络中的任意一个共识节点包括共识主节点和共识备份节点,都可以在该共识节点未在预设时间段内完成对目标共识数据的共识操作时,触发该共识网络中的视图切换操作以试图更换共识网络中的共识主节点。
应理解,ViewChange消息中可携带有第一共识节点接收到的共识网络中的所有共识节点针对目标共识数据广播的ECHO消息和对应的签名。该ECHO消息具体可以是在PBFT共识算法的Normal Case Phase中,共识网络中的共识节点针对接收到的VAL消息构建得到的,该ECHO消息中可携带目标共识数据对应的区块号、目标共识数据当前所处的视图编号、以及原始目标共识数据。ECHO消息的签名具体可以是共识网络中的各个共识节点使用共识节点的私钥对ECHO消息的签名。
当目标共识数据可基于指定纠删码技术拆分为与共识网络中的共识节点数量等量的多个数据分片时,这多个数据分片可通过VAL消息分别发送给共识网络中对应的共识节点,每个共识节点收到的VAL消息中的数据分片不同,一个数据分片对应于共识网络中的一个共识节点。此时,上述共识网络中的共识节点在共识网络中广播的ECHO消息具体可携带有目标共识数据对应的区块号、目标共识数据当前所处的视图编号、以及与该共识节点对应的数据分片、该数据分片在由这多个数据分片构建的默克树中的默克树路径、以及由这多个数据分片构建的默克树的根哈希。
可选地,为了减少共识主节点在共识操作过程中消耗的网络传输带宽,本说明书实施例中的目标共识数据可基于指定纠删码技术拆分为多个数据分片。具体地,第一共识节点在共识网络中广播ViewChange消息之前,本说明书实施例提供的方法还包括:
共识网络中的第二共识主节点基于指定纠删码技术,将目标共识数据拆分为与共识网络中的共识节点数量等量的多个有序排列的数据分片;该第二共识主节点为第一共识主节点对应的视图的前一个视图对应的共识主节点;
第二共识主节点基于多个有序排列的数据分片,构建默克树;
第二共识主节点将与第二共识主节点相对应的数据分片、对应的默克树路径、以及默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及默克树的根哈希的VAL消息发送给共识网络中对应的共识节点,一个数据分片对应于共识网络中的一个共识节点。
其中,与第二共识主节点相对应的数据分片所对应的默克树路径具体是与第二共识主节点相对应的数据分片在默克树中所关联的哈希值。
假设共识网络中的共识节点数量为4,在视图切换之前,包括第二共识主节点(共识节点0)和共识备份节点(共识节点1~共识节点3),其中,共识节点3在共识过程中处于异常的状态,即为该共识网络中的异常共识节点。具体来说,第二共识主节点可将目标共识数据采用指定纠删码算法处理后拆分为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消息,发送至与VAL消息中的数据分片相对应的共识节点。共识主节点具体可以将携带有(s1和Hash000 , Hash01 , Hash0 )的第1个VAL消息发送至共识节点1,将携带有(s2和Hash030 , Hash00 , Hash0 )的第2个VAL消息发送至共识节点2,将携带有(s3和Hash020 , Hash00 , Hash0)的第3个VAL消息发送至共识节点3。
可选地,第二共识主节点将与第二共识主节点相对应的数据分片、对应的默克树路径、以及默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径之后,本说明书实施例提供的方法还包括:
接收到VAL消息的第三共识节点,针对接收到的VAL消息构建ECHO消息,并将构建的ECHO消息广播至共识网络中,构建的ECHO消息中包含接收到的VAL消息中的数据分片、对应的默克树路径和默克树的根哈希;
第二共识主节点基于保存在本地的数据分片、对应的默克树路径、以及默克树的根哈希构建ECHO消息,并将构建的ECHO消息广播至共识网络中。
其中,第三共识节点可以是共识网络中除第二共识主节点以外的任意一个共识备份节点。
本说明书实施例将PBFT算法中的准备阶段中的共识节点广播的消息更改为ECHO消息,该ECHO消息的格式为 <<ECHO, v, n, r>, bj, sj>。当共识网络中共识节点(包括共识主节点本身)收到VAL消息时,验证VAL数据中的默克树的根哈希是否正确,若不正确丢弃该消息;若正确,则基于接收到的VAL消息构建并广播ECHO消息和各个共识节点使用私钥对ECHO消息的签名。
当共识网络中的共识节点收到 N-2f 个正确的ECHO消息后,可将共识节点状态更改为完成VAL的状态。若共识网络中的共识节点未收到VAL消息,但已经收到 N-2f 个其他共识节点发送的且正确的ECHO 消息,则可基于这N-2f 个其他共识节点发送的且正确的ECHO消息解析得到原始的目标共识数据解析得到的多个数据分片和对应的默克树,并基于这多个数据分片中与本共识节点相对应的数据分片、对应的默克树路径、以及默克树的根哈希构建与共识节点对应的ECHO消息,并在共识网络中广播该ECHO消息和对应的签名。
如图3所示,为本说明书实施例提供的联盟链中的共识方法应用于实际场景中的示意图,在图3所示的共识网络中,包括4个共识节点,即N=4,即第二共识主节点(p0)和共识备份节点(p1~p3),其中,p3在视图切换之前处于异常的状态,并在视图切换之后恢复。
在图3所示的视图切换vc第一阶段中,当共识网络在预设时间段内没有完成对目标共识数据的共识操作时,共识网络中的第一共识节点(p1~p3中的任意一个共识节点)都可在共识网络中广播ViewChange消息。其中,该ViewChange消息的格式为ViewChange(v+1,n, C, P, i)。
步骤220,共识网络中的第一共识主节点接收共识网络的共识节点广播的ViewChange消息。
其中,第一共识主节点为对目标共识数据进行共识时的视图对应的共识主节点,也即为视图切换后共识网络中更新后的共识主节点。该共识主节点的确定方式可以根据公式p=v mode N来确定,其中,v为视图切换后的视图编号,N为共识网络中的共识节点数量。
步骤230,当第一共识主节点确定接收到N-f个通过验证的ViewChange消息时,基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建NewView消息,并广播至共识网络中,以切换共识网络的视图至目标视图中;其中,f为共识网络中允许的最大异常共识节点数量,N为共识网络的共识节点数量,且N≥3f+1。
其中,目标视图为共识网络的当前视图v的下一个视图v+1。
视图切换后的新共识主节点即第一共识主节点收到 N-f 个 关于切换到视图编号为v+1 的有效ViewChange消息后,便可以基于ViewChange消息中携带的N-f个ECHO消息,计算NewView消息即NewView消息的内容,将所有有效的P加入O中,其中O的格式为<v+1, n,r>,r为目标共识数据拆分得到的多个数据分片构建的默克树的根哈希,n为目标共识数据对应的区块号。具体地,当ViewChange消息中存在有效的P时,则表明共识网络中有 N-f 个共识节点收到了相同的目标共识数据,也即至少有 N-2f 个忠诚共识节点有目标共识数据对应的多个数据分片。
应理解,当各个共识节点广播的ECHO消息中还包括各共识节点的签名时,可直接基于签名来确定ECHO消息的合法性。具体地,当第一共识主节点确定接收到N-f个通过验证的ViewChange消息时,基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建新视图NiewView消息,包括:
第一共识主节点分别确定接收到的ViewChange消息中的ECHO消息的哈希值、与其对应的签名通过公钥解密后的数据是否一致;
当接收到的ViewChange消息中的ECHO消息中存在N-f个ECHO消息的哈希值与其对应的签名解密后的数据一致时,第一共识主节点确定接收到N-f个通过验证的ViewChange消息;
第一共识主节点基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建NewView消息。
应理解,采用指定纠删码技术将目标共识数据拆分得到N个数据分片时,节点至少需要收到 N-2f 个数据分片才能还原出原始的目标共识数据,由于P 包含了 N-f 个 Echo消息和签名,所以系统中至少有 N-2f 个忠诚节点有目标共识数据的纠删码分片。具体地,第一共识主节点基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建NewView消息,包括:
第一共识主节点基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,获取对应的N-f个数据分片第一共识主节点基于N-f个数据分片构建默克树,得到默克树的根哈希;
第一共识主节点基于默克树的根哈希、N-f个通过验证的ViewChange消息、以及目标共识数据对应的区块号,构建NewView消息。
继续沿用图3所示的例子,在图3所示的视图切换vc第二阶段,当第一共识主节点p1确定接收到N-f个携带的ECHO消息和对应的签名通过验证的ViewChange消息时,可基于N-f个通过验证的ViewChange消息,构建NewView消息,格式为NewView(v+1,V,O),其中,V为N-f个ViewChange消息,O为计算得到的(v+1, n, r),并广播至共识网络中。
步骤240,当接收到NewView消息的第二共识节点确定本共识节点存在与目标共识数据对应的ECHO消息时,在共识网络中广播针对目标共识数据的ECHO消息,该ECHO消息中的视图编号为目标视图的视图编号。
其中,第二共识节点是共识网络中的任意一个共识备份节点,上述第一共识节点和第二共识节点可以是相同的节点也可以是不同的节点。
其中,针对目标共识数据的ECHO消息的格式为ECHO(v+1,n,r,bj,sj),其中,sj为目标共识数据中与该共识节点对应的目标数据分片,bj为目标数据分片在默克树中的默克树路径,r为默克树的根哈希。
可选地,当接收到NewView消息的第二共识节点确定本共识节点存在与目标共识数据对应的ECHO消息时,在共识网络中广播针对目标共识数据的ECHO消息,包括:
当接收到NewView消息的第二共识节点确定本共识节点存在携带有默克树的根哈希的ECHO消息时,在共识网络中广播针对目标共识数据的ECHO消息。
可选地,当接收到NewView消息的第二共识节点确定本共识节点存在与目标共识数据对应的ECHO消息时,在共识网络中广播针对目标共识数据的ECHO消息,包括:
当接收到NewView消息的第二共识节点确定本共识节点存在与目标共识数据对应的ECHO消息时,基于本共识节点中与目标共识数据对应的ECHO消息中的目标数据分片、目标数据分片在默克树中的默克树路径、默克树的根哈希、切换视图后的视图编号、以及目标共识数据对应的区块号,构建针对目标共识数据的ECHO消息;
接收到NewView消息的第二共识节点在切换视图后的共识网络中广播针对目标共识数据的ECHO消息。
如图3所示,在视图切换vc的第一阶段和第二阶段完成之后,共识网络则重新进入到Normal Case Phase,此时接收到NewView消息的第二共识节点包括第一共识主节点本身,在确定本共识节点存在与目标共识数据对应的ECHO消息,即存在与本共识节点对应的目标数据分片时,则可基于本共识节点中与目标共识数据对应的ECHO消息中的目标数据分片、目标数据分片在默克树中的默克树路径、默克树的根哈希、切换视图后的视图编号、以及目标共识数据对应的区块号,构建针对目标共识数据的ECHO消息,即ECHO(v+1,n,r,bj,sj),其中,sj为目标数据分片,bj为目标数据分片在默克树中的默克树路径,r为默克树的根哈希。在图3中,由于共识节点p3在上一轮共识操作中就是异常共识节点,但在视图切换操作后恢复了,而视图切换后p0又处于失效状态,因此,只有共识节点p1和p2有目标共识数据中对应的数据分片。
应理解,接收到NewView消息的第二共识节点在切换视图后的共识网络中广播针对目标共识数据的ECHO消息之后,后续的共识操作流程不变,即本说明书实施例提供的方法还包括:
接收到针对目标共识数据的ECHO消息的第四共识节点,若接收到N-f个共识节点的针对目标共识数据的ECHO消息,则将目标共识数据提交给状态机。
其中,第四共识节点可以是共识网络中的任意一个共识节点。
采用本说明书实施例提供的共识方法,当联盟链的共识网络中的第一共识节点在预设时间段内没有完成对目标共识数据的共识操作时,第一共识节点可以基于联盟链中的其它共识节点发送的针对目标共识数据广播的ECHO消息和签名,在共识网络中广播ViewChange消息;共识网络中的第一共识主节点接收共识网络的共识节点广播的ViewChange消息;当第一共识主节点确定接收到N-f个通过验证的ViewChange消息时,基于N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建NewView消息,并广播至共识网络中;当接收到NewView消息的第二共识节点确定本共识节点存在与目标共识数据对应的ECHO消息时,则可以在共识网络中广播针对目标共识数据的ECHO消息。
也就是说,在共识网络中的共识节点触发视图切换操作之后,由于共识网络中的任意共识节点即第一共识节点可以在共识网络中广播ViewChange消息,且该ViewChange消息中包含有第一共识节点接收到的联盟链中的共识节点针对目标共识数据广播的ECHO消息和对应的签名,这就使得即便触发视图切换的共识节点不是视图切换后的共识主节点,也能使得共识网络中的共识节点针对目标共识数据构建的ECHO消息和对应的签名被共识网络中的其他共识节点所获取,从而使得共识网络中的共识节点在视图切换后的共识网络中继续执行对目标共识数据的共识操作。
图4是本说明书实施例提供的联盟链系统400的结构示意图。请参考图4,在一种软件实施方式中,联盟链系统400可包括第一共识节点410、共识主节点420和第二共识节点430,其中:
第一共识节点410,在预设时间段内没有完成对目标共识数据的共识操作时,基于从联盟链的共识网络中的其它共识节点接收到的针对所述目标共识数据广播的ECHO消息和签名,在所述共识网络中广播视图切换ViewChange消息;
共识主节点420,接收所述共识网络的共识节点广播的ViewChange消息;以及当确定接收到N-f个通过验证的ViewChange消息时,基于所述N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建新视图NiewView消息,并广播至所述共识网络中,以切换所述共识网络的视图至目标视图中;其中,f为所述共识网络中允许的最大异常共识节点数量,N为所述共识网络的共识节点数量,且N≥3f+1;
第二共识节点430,在接收到所述NiewView消息之后,确定本共识节点存在与所述目标共识数据对应的ECHO消息时,在所述共识网络中广播针对所述目标共识数据的ECHO消息,所述ECHO消息中的视图编号为所述目标视图的视图编号。
基于本说明书实施例提供的联盟链系统可以知道:
在共识网络中的共识节点触发视图切换操作之后,由于共识网络中的任意共识节点即第一共识节点可以在共识网络中广播ViewChange消息,且该ViewChange消息中包含有第一共识节点接收到的联盟链中的共识节点针对目标共识数据广播的ECHO消息和对应的签名,这就使得即便触发视图切换的共识节点不是视图切换后的共识主节点,也能使得共识网络中的共识节点针对目标共识数据构建的ECHO消息和对应的签名被共识网络中的其他共识节点所获取,从而使得共识网络中的共识节点在视图切换后的共识网络中继续执行对目标共识数据的共识操作。
可选地,在一种实施方式中,所述第一共识节点410,在所述共识网络中广播ViewChange消息之前,所述系统还包括第二共识主节点440,用于:
基于指定纠删码技术,将所述目标共识数据拆分为与所述共识网络中的共识节点数量等量的多个有序排列的数据分片;所述第二共识主节点为所述第一共识主节点对应的视图的前一个视图对应的共识主节点;
基于所述多个有序排列的数据分片,构建默克树;
将与所述第二共识主节点相对应的数据分片、对应的默克树路径、以及所述默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径、以及所述默克树的根哈希的VAL消息发送给所述共识网络中对应的共识节点,一个数据分片对应于共识网络中的一个共识节点。
可选地,在一种实施方式中,所述第二共识主节点440,将与所述第二共识主节点相对应的数据分片、对应的默克树路径、以及所述默克树的根哈希保存在本地,并将携带有其它各数据分片、对应的默克树路径之后,
所述联盟链系统中的第三共识节点450,在接收到VAL消息时,针对接收到的VAL消息构建ECHO消息,并将构建的ECHO消息广播至所述共识网络中,所述构建的ECHO消息中包含接收到的VAL消息中的数据分片、对应的默克树路径和所述默克树的根哈希;
所述第二共识主节点440,基于保存在本地的数据分片、对应的默克树路径、以及所述默克树的根哈希构建ECHO消息,并将构建的ECHO消息广播至所述共识网络中。
可选地,在一种实施方式中,所述共识主节点420,用于:
分别确定接收到的ViewChange消息中的ECHO消息的哈希值、与其对应的签名通过公钥解密后的数据是否一致;
当接收到的ViewChange消息中的ECHO消息中存在N-f个ECHO消息的哈希值与其对应的签名解密后的数据一致时,确定接收到N-f个通过验证的ViewChange消息;
基于所述N-f个通过验证的ViewChange消息中的ECHO消息和签名,构建NewView消息。
可选地,在一种实施方式中,所述共识主节点420,用于:
基于所述N-f个通过验证的ViewChange消息中的ECHO消息和签名,获取对应的N-f个数据分片;
基于所述N-f个数据分片构建默克树,得到所述默克树的根哈希;
基于所述默克树的根哈希、所述N-f个通过验证的ViewChange消息、以及所述目标共识数据对应的区块号,构建所述NewView消息。
可选地,在一种实施方式中,所述第二共识节点430,在接收到所述NewView消息时,还用于:
当确定本共识节点存在携带有所述默克树的根哈希的ECHO消息时,在共识网络中广播针对目标共识数据的ECHO消息。
可选地,在一种实施方式中,所述第二共识节点430,在接收到所述NewView消息时,还用于:
当确定本共识节点存在与所述目标共识数据对应的ECHO消息时,基于本共识节点中与所述目标共识数据对应的ECHO消息中的目标数据分片、所述目标数据分片在所述默克树中的默克树路径、所述默克树的根哈希、切换视图后的视图编号、以及所述目标共识数据对应的区块号,构建针对所述目标共识数据的ECHO消息;
在切换视图后的共识网络中广播针对所述目标共识数据的ECHO消息。
可选地,在一种实施方式中,所述第二共识节点430,在切换视图后的共识网络中广播针对所述目标共识数据的ECHO消息之后,所述系统还包括:
第四共识节点460,在接收到针对所述目标共识数据的ECHO消息时,若接收到N-f个共识节点的针对所述目标共识数据的ECHO消息,则将所述目标共识数据提交给状态机。
可选地,在一种实施方式中,所述第一共识节点410为所述共识网络中的任意一个共识节点;所述第二共识节点430为所述共识网络中的任意一个共识节点。
联盟链系统400能够实现图2~图3的方法实施例的方法,具体可参考图2~图3所示实施例的联盟链中的共识方法,不再赘述。
总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。