蜜獾拜占庭容错共识机制的区块链共识方法、节点及系统
技术领域
本文件涉及区块链技术领域,尤其涉及一种蜜獾拜占庭容错共识机制的区块链共识方法、节点及系统。
背景技术
目前,很多区块链系统基于拜占庭容错(BFT,Byzantine Fault-Tolerant)算法来实现共识。蜜獾拜占庭容错(HoneyBadgerBFT)作为一种新兴的异步BFT 共识机制,凭借不依赖于网络环境的时间条件的优点,具有极高的处理效率,在未来会发展成为主流的共识机制。
现阶段,HoneyBadgerBFT共识机制采用的是二进协定(BA,Binary Agreement )协议来达成共识。BA协议是一种随机不确定性的算法,包括共识节点之间通过初次交换共识意见、二次交换共识意见有利于趋同和最后抛币决定三个阶段实现共识。在抛币阶段,如果一轮抛币的结果未达成统一,则需要重新发起下一轮抛币。在此背景下,本申请针对蜜獾拜占庭容错共识机制,提出一种效率更高的共识方案。
发明内容
本说明书实施例目的是提供一种蜜獾拜占庭容错共识机制的区块链共识方法、节点及系统,可以基于蜜獾拜占庭容错共识机制,更高效率地执行共识。
为了实现上述目的,本说明书实施例是这样实现的:
第一方面,提供一种蜜獾拜占庭容错共识机制的区块链共识方法,包括:
目标共识节点执行本轮共识,统计N个共识提议的共识投票;
所述目标共识节点对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,所述第一集合用于存放大于等于2f+1个相同的共识投票的共识提议,f为共识节点容错数;
所述目标共识节点对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至所述第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至所述第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至所述第三集合中,并更新为反对的共识意见;其中,所述第一集合为所述第四集合针对所述N个共识提议的绝对补集,首轮共识中所述第四集合存放有所述N个共识提议;
所述目标共识节点将所述第二集合合并至第一集合,将所述第三集合合并至第四集合,以执行下一轮共识,直至所述第一集合中存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票;
所述目标共识节点基于最后一轮共识中统计到的所述N个共识提议的共识投票,确定共识结果。
第二方面,提供一种蜜獾拜占庭容错共识机制的共识节点,包括:
共识投票统计模块,执行本轮共识,统计N个共识提议的共识投票;
第一遍历模块,对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,所述第一集合用于存放大于等于2f+1个相同的共识投票的共识提议,f为共识节点容错数;
第二遍历模块,对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至所述第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至所述第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至所述第三集合中,并更新为反对的共识意见;其中,所述第一集合为所述第四集合针对所述N个共识提议的绝对补集,首轮共识中所述第四集合存放有所述N个共识提议;
集合更新模块,将所述第二集合合并至第一集合,将所述第三集合合并至第四集合,以执行下一轮共识,直至所述第一集合中存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票;
共识结果确定模块,基于最后一轮共识中统计到的所述N个共识提议的共识投票,确定共识结果。
第三方面,提供一种蜜獾拜占庭容错共识机制的区块链系统,包括多个共识节点,其中,
所述多个共识节点中的任意目标共识节点在执行本轮共识时,统计N个共识提议的共识投票;
所述目标共识节点对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,所述第一集合用于存放大于等于2f+1个相同的共识投票的共识提议,f为共识节点容错数;
所述目标共识节点对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至所述第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至所述第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至所述第三集合中,并更新为反对的共识意见;其中,所述第一集合为所述第四集合针对所述N个共识提议的绝对补集,首轮共识中所述第四集合存放有所述N个共识提议;
所述目标共识节点将所述第二集合合并至第一集合,将所述第三集合合并至第四集合,以执行下一轮共识,直至所述第一集合中存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票;
所述目标共识节点基于最后一轮共识中统计到的所述N个共识提议的共识投票,确定共识结果。
基于本说明书实施例的方案,区块链的共识节点在共识阶段,对共识提议发起多轮迭代的共识投票,并根据每轮共识中共识提议的共识投票结果,更新本地的共识意见,并在下一轮中对还未达成共识的共识提议发起本地最新的共识意见的共识投票,从而使得区块链中的各共识节点针对共识提议的共识意见会按照一定方向趋近,进而更快达成共识一致性,可大幅减少需要消息交互的轮次,有效提高了共识效率。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书实施例提供的区块链共识方法第一种流程示意图。
图2为本说明书实施例提供的区块链共识方法第二种流程示意图。
图3为本说明书实施例提供的共识节点的结构示意图。
图4为本说明书实施例提供的区块链系统的结构示意图。
图5为本说明书实施例提供的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
如前所述,现阶段HoneyBadgerBFT共识机制采用的是二进协定(BA,BinaryAgreement )协议来达成共识。BA协议是一种随机不确定性的算法,包括共识节点之间通过初次交换共识意见、二次交换共识意见有利于趋同和最后抛币决定三个阶段实现共识。在抛币阶段,如果一轮抛币的结果未达成统一,则需要重新发起下一轮抛币。对于区块链系统来说,由于BA协议的不确定性,在网络不可控下,发起多轮消息交互可能会导致共识的效率降低。有鉴于此,本申请针对蜜獾拜占庭容错共识机制,提出一种效率更高的共识方案。
图1是本说明书实施例蜜獾拜占庭容错共识机制的区块链共识方法的流程图。图1所示的方法可以由下文相对应的装置执行,包括以下步骤:
S102,目标共识节点执行本轮共识,统计N个共识提议的共识投票。
在HoneyBadgerBFT共识机制下,区块链中的每个共识节点均发起自己的共识提议,也就是说区块链的共识节点总数也同样为N。
在每轮共识中,各共识节点均需要通过共识同步消息,向其他共识节点广播自己对N个共识提议的共识投票。应理解,目标共识节点针对目标共识提议的共识投票,代表了目标共识节点对目标共识提议的共识意见,如果目标共识节点反对(不批准)目标共识提议,投表示反对的共识投票;反之,如果赞成目标共识提议,则投表示赞成的共识投票。
S104,目标共识节点对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,第一集合用于存放大于等于2f+1个相同的共识投票的共识提议(首轮为空集),f为共识节点容错数。
具体地,本步骤中,目标共识节点在统计到2f个其他共识节点所发送的共识同步消息后(即包含自身在内共计2f+1个共识投票),开始对所述第一集合遍历。
在HoneyBadgerBFT共识机制下,一个共识提议且仅有一种共识投票(反对的共识投票或者赞成的共识投票)能够达到大于等于2f+1个,且对应的共识结果为数量达到大于等于2f+1个共识投票所指示的结果。也就是说,具有大于等于2f+1个相同的共识投票的共识提供为已经能够达成共识的共识提供,具有大于等于2f+1个相同的共识投票的共识提议为接近达成共识的共识提议,未具有f+1个相同共识意见的共识提议为远无法达成共识的共识提议。
S106,目标共识节点对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,第一集合为第四集合针对N个共识提议的绝对补集,首轮共识中第四集合存放有N个共识提议。
本步骤中,对于具有大于等于f+1且小于2f+1个相同共识意见的共识提议,为了加快共识,目标共识节点可以基于纠删码算法进行追溯,如果能够追溯到,则迁移至第二集合,并更新为赞成的共识意见,以下一轮共识中投表示赞成的共识投票;如果未能够追溯到,则迁移至第三集合,并更新为反对的共识意见,以下一轮共识中投表示反对的共识投票。需要说明的是,这里所述的纠删码算法及使用属于现有HoneyBadgerBFT的技术,本文不再赘述。
此外,对于第四集合中未具有f+1个相同共识意见的共识提议,则表示区块链中的各共识节点无法达成一致,因此为了加快共识,目标共识节点可直接迁移第三集合,并更新反对的共识意见。
此外,如果第四集合中只具有表示反对的共识投票的共识意见,即便票数未达到f+1个,也可以直接迁移至第二集合中,并更新反对的共识意见。一般情况下,如果共识投票被不止一个共识节点反对后,也绝大可能也会别其他共识节点反对,因此这类共识提议也可以算是接近达成反对意见的共识节点,被存放在第二集合中。
此外,共识同步消息可以针对上述第一集合和第四集合进行设置。比如,目标共识节点发送的共识同步消息包括:目标共识节点本地记录的第四集合中的共识提议的共识投票字段值和第一集合中的共识提议的共识投票字段值。
S108,目标共识节点将第二集合合并至第一集合,将第三集合合并至第四集合,以执行下一轮共识,直至第一集合中存放有N个共识提议,且N个共识提议均具有大于等于2f+1个相同的共识投票。
应理解,共识过程是多轮迭代进行的,在上述S104和S106中,目标共识节点可能会更新一些共识提议的共识意见,以在下一轮共识中投出与上一轮共识不一样的共识投票,从而影响共识结果。当第一集合中存放有N个共识提议,且N个共识提议均具有大于等于2f+1个相同的共识投票时,则表示这个N个共识提议全部具备达成共识的条件,此时退出多轮迭代。
S110,目标共识节点基于最后一轮共识中统计到的N个共识提议的共识投票,确定共识结果。
如前所述,当某个共识提议的某种共识投票的数量达到2f+1时,则表示这个共识提议的共识结果为该共识投票所表示的结果。比如,某共识提议有大于等于2f+1个表示反对的共识投票时,则这个共识提议的共识结果为不通过,不对其提议数据进行上链。
基于本实施例图1所示的区块链共识方法,共识节点在共识阶段,对共识提议发起多轮迭代的共识投票,并根据每轮共识中共识提议的共识投票结果,更新本地的共识意见,并在下一轮中对还未达成共识的共识提议发起本地最新的共识意见的共识投票,从而使得区块链中的各共识节点针对共识提议的共识意见会按照一定方向趋近,进而更快达成共识一致性,可大幅减少需要消息交互的轮次,有效提高了共识效率。
下面对本说明书实施例的区块链共识方法进行详细介绍。
本说明书实施例的区块链共识方法主要分为两个阶段:
阶段一:共识节点基于RBC协议传输自己发起的共识提议。
该阶段利用已有的RBC协议来传输共识提议,协议中使用纠删码的技术可以有效的降低提议发起者的网络带宽,由于是现有技术,本文不再详细赘述。
阶段二:收集共识提议的RBC结果,并进行确定性共识。相关数据结构定义如下:
1)View:共识视图批次号,也就是共识结束后新生区块的序号。
2)Round:在View共识中,进行的共识轮次。默认值为0,每发起新一轮共识投票,自行加1。
3)Unconfirmed_Proposals(即上述第四集合,后文简称为第四集合):在首轮共识中存放已完成RBC协议的共识提议和相关信息(如root hash等),后续轮次共识中存放无法确认的共识提议和相关信息。
4)Confirmed_Proposals(即上述第一集合,后文简称为集合C): 在首轮共识中为空集,后续轮次共识用于保留大于等于2f+1个相同的共识投票的共识提议。当集合C中存放有N个共识提议,且每个共识提议均具有2f+1个相同的共识投票是,则结束批迭代。
5)共识同步消息(ConsensusMessage):用于共识节点之间交互共识投票。ConsensusMessage的结构体如下:
struct ConsensusMessage {
NodeId sender;
Seq seq;
Round round;
vector[proposal hash] Unconfirmed_Proposals;
vector[proposal hash] Confirmed_Proposals;
}
注释:Unconfirmed_Proposals和Confirmed_Proposals两个数组中可以通过下标值代表共识节点的顺序。在Unconfirmed_Proposals字段中,记录Unconfirmed_Proposals集合的共识提议的共识投票,这里,可以通过共识提议的root hash来表示赞成的共识投票,用∅表示反对的共识投票。在Confirmed_Proposals字段中记录Confirmed_Proposals集合共识提议的共识投票,同样地,可以通过共识提议的root hash来表示赞成的共识投票,用∅表示反对的共识投票。
举例如下:
假设有A、B、C、D四个共识节点,共识节点A发起的共识提议的root hash为a1,共识节点B发起的共识提议的root hash为b1,共识节点C发起的共识提议的root hash为c1, 共识节点D发起的共识提议的root hash为d1,共识节点D在首轮共识收到了2f+1个ConsensusMessage:
{sender:A,Seq:100,round:0,Unconfirmed_Proposals{a1,null,c1,d1},Confirmed_Proposals{}};
{sender:C,Seq:100,round:0,Unconfirmed_Proposals{a1,null,c1,d1},Confirmed_Proposals{}};
{sender:D,Seq:100,round:0,Unconfirmed_Proposals{a1,b1,c1,d1},Confirmed_Proposals{}};
其中,sender记录共识节点的标识,Seq记录共识视图序号。Unconfirmed_Proposals记录的信息如下:
共识节点A的提议:{a1:3} ——表示3个赞成的共识投票;
共识节点B的提议:{null:3} ——表示3个反对的共识投票;
共识节点C的提议:{c1:3}——表示3个赞成的共识投票;
共识节点D的提议:{d1:2,d2:1}——表示2个赞成的共识投票和1个反对的共识投票。
此外,对于Confirmed_ProposalsConfirmed_Proposals也可以记录是否达成共识的结果,比如用于0或者1表示,如果某个共识提议的共识投票可以达成共识,则取值为1,相反则为0。
本说明书实施例的共识方法的主要流程如图2所示,包括:
步骤一,目标共识节点重置Unconfirmed_Proposals和Confirmed_Proposals两个本地集合为空集,并重置本地round变量为0。
步骤二,目标共识节点执行RBC协议,将完成RBC协议的共识提议后,更新到集合U中,并添加共识提议的root hash为真值,以表示赞同的共识意见。
步骤三,目标共识节点检查集合U中的共识提议个数,假设提议个数为x,如果x<2f+1个则继续步骤二,相反x>=2f+1个,基于纠删码算法对剩余f个的共识提议进行追溯(一般情况下,区块链的共识节点的数量应满足N=3f+1的关系),如果成功追溯,则将共识提议更新到集合U中,并设置共识提议的root hash为真值;否则将共识提议更新到集合U中,并设置root hash为空,以表示反对的共识意见。
之后,生成本地的ConsensusMessage消息,用Unconfirmed_Proposals中记录的信息填充ConsensMessage消息ConsensMessage.Unconfirmed_Proposals字,将ConsensMessage.Confirmed_Proposals字段设置为空,将Round设为0,向其他共识节点广播ConsensusMessage消息。
步骤四,目标共识节点接收到其他共识节点以同样方式发送的ConsensusMessage消息后,当获得包含自身在内的2f+1个同一round的ConsensusMessage消息后,执行步骤五。
步骤五,目标共识节点对集合C的共识提议进行遍历:
先判断集合C中是否存放有N个共识提议,且每个共识提议均具有2f+1个相同的root hash。是,则结束批迭代,将集合C作为N个共识提议的共识结果集合;否,则继续进行:
将具有大于等于f+1且小于2f+1个相同root hash的共识提议迁移至临时Confirmed_Proposals集合(即上述的第二集合,后文简称为集合C*)中;将未具有f+1个相同共识意见的共识提议迁移至历时Unconfirmed_Proposals集合(即上述的第三集合,后文简称为集合U*)中,并更新root hash为空,表示反对的共识意见。如果,全部遍历完成,则顺序执行步骤六。
步骤六,对集合U的共识提议进行遍历:
将root hash全部为空的共识提议直接放入到集合C*中,如果本地root hash为真值,则更改为空。
将具有大于等于2f+1个相同root hash共识提议迁移至集合C*中。
基于纠删码算法,对具有大于等于f+1且小于2f+1个相同root hash的共识提议进行赘述,成功则迁移集合C*中,如果本地root hash为空,则更改为真值;失败,则则迁移集合U*中,如果本地root hash为真值,则更改为空。
将不具有f+1个相同的同root hash的共识提议迁移至U*中,如果本地root hash真值,则更改为空。
步骤七,将集合C*合并回集合C中,生成新的集合C,将集合U*中合并回集合U中,生成新的集合U,round增加1,用于新的集合C和新的集合U填充ConsensusMessage消息中的Unconfirmed_Proposals和Confirmed_Proposal字段,并广播。之后,回到步骤四。
以上是对本说明书实施例的方法的介绍。应理解,在不脱离本文上述原理基础之上,还可以进行适当的变化,这些变化也应视为本说明书实施例的保护范围。
与上述共识方法相对应地,本说明书实施例还提供一种采用蜜獾拜占庭容错共识机制的共识节点。图3是该共识节点300的结构示意图,包括:
共识投票统计模块310,执行本轮共识,统计N个共识提议的共识投票。
第一集合遍历模块320,共识节点对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,所述第一集合用于存放大于等于2f+1个相同的共识投票的共识提议,f为共识节点容错数。
第二集合遍历模块330,所述共识节点对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至所述第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至所述第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至所述第三集合中,并更新为反对的共识意见;其中,所述第一集合为所述第四集合针对所述N个共识提议的绝对补集,首轮共识中所述第四集合存放有所述N个共识提议。
集合更新模块340,将所述第二集合合并至第一集合,将所述第三集合合并至第四集合,以执行下一轮共识,直至所述第一集合中存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票。
共识结果确定模块350,基于最后一轮共识中统计到的所述N个共识提议的共识投票,确定共识结果。
本说明实施例的共识节点在共识阶段,对共识提议发起多轮迭代的共识投票,并根据每轮共识中共识提议的共识投票结果,更新本地的共识意见,并在下一轮中对还未达成共识的共识提议发起本地最新的共识意见的共识投票,从而使得区块链中的各共识节点针对共识提议的共识意见会按照一定方向趋近,进而更快达成共识一致性,可大幅减少需要消息交互的轮次,有效提高了共识效率。
可选地,所述共识节点还包括:
RBC协议模块,基于RBC协议中的epoch消息将所述目标共识节点发起的共识提议发送至其他共识节点,并在接收到2f个其他共识节点通过epoch消息发送的共识提议后,基于纠删码算法追溯其余未接收到的共识提议;其中,在首轮共识中,所述目标共识节点对RBC协议阶段无法通过纠删码算法追溯的共识提议,投表示反对的共识投票,对其余共识提议投表示赞成的共识投票。
可选地,所述第二集合遍历模块330在执行时,还将只具有表示反对的共识投票的共识意见迁移至第二集合中。
可选地,所述共识节点还包括:
共识同步模块,与其他共识节点通过交互共识同步消息以统计N个共识提议的共识投票,其中,目标共识节点发送的共识同步消息包括:目标共识节点本地记录的第四集合中的共识提议的共识投票字段值和第一集合中的共识提议的共识投票字段值。
可选地,所述目标共识节点赞成的共识提议在共识同步消息中的共识投票字段值为该共识提议对应的根哈希,所述目标共识节点反对的共识提议在共识同步消息中的共识投票字段值为0。
可选地,所述共识同步消息还包括:用于指示共识视图序号的字段值和/或用于指示共识轮次的字段值。
可选地,所述第一集合遍历模块320在所述共识投票统计模块310统计到2f个其他共识节点所发送的共识同步消息后,开始对所述第一集合遍历。
可选地,所述共识节点还包括:
控制模块,在所述第一集合遍历模块320在对所述第一集合遍历完成后,确定所述第一集合中是否存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票;是,则结束共识;否,则控制所述第二集合遍历模块330开始对第四集合遍历。
其中,所述N个共识提议由不同的共识节点发起,任一共识提议有且仅有一种共识投票能够达到大于等于2f+1个,且对应的共识结果为数量达到大于等于2f+1个共识投票所指示的结果。
显然,本说明书实施例的共识节点可以作为上述图1所示的区块链共识方法的执行主体,因此能够实现该区块链共识方法在图1和图2所实现的功能。由于原理相同,本文不再赘述。
与上述共识方法相对应地,本说明书实施例还提供一种蜜獾拜占庭容错共识机制的区块链系统。图4是该区块链系统400的结构示意图,包括:多个共识节点410,其中:
所述多个共识节点410中的任意目标共识节点411在执行本轮共识时,统计N个共识提议的共识投票;
所述目标共识节点411对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,所述第一集合用于存放大于等于2f+1个相同的共识投票的共识提议,f为共识节点容错数。
所述目标共识节点411对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至所述第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至所述第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至所述第三集合中,并更新为反对的共识意见;其中,所述第一集合为所述第四集合针对所述N个共识提议的绝对补集,首轮共识中所述第四集合存放有所述N个共识提议。
所述目标共识节点411将所述第二集合合并至第一集合,将所述第三集合合并至第四集合,以执行下一轮共识,直至所述第一集合中存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票。
所述目标共识节点411基于最后一轮共识中统计到的所述N个共识提议的共识投票,确定共识结果。
本说明书实施例的区块链系统中,共识节点在共识阶段,对共识提议发起多轮迭代的共识投票,并根据每轮共识中共识提议的共识投票结果,更新本地的共识意见,并在下一轮中对还未达成共识的共识提议发起本地最新的共识意见的共识投票,从而使得区块链中的各共识节点针对共识提议的共识意见会按照一定方向趋近,进而更快达成共识一致性,可大幅减少需要消息交互的轮次,有效提高了共识效率。
显然,本说明书实施例的区块链系统可以作为上述图1所示的区块链共识方法的执行主体,因此能够实现该区块链共识方法在图1和图2所实现的功能。由于原理相同,本文不再赘述。
图5是本说明书的一个实施例电子设备的结构示意图。请参考图5,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成上述图3所示的共识节点。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
执行本轮共识,统计N个共识提议的共识投票。
对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,所述第一集合用于存放大于等于2f+1个相同的共识投票的共识提议,f为共识节点容错数。
对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至所述第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至所述第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至所述第三集合中,并更新为反对的共识意见;其中,所述第一集合为所述第四集合针对所述N个共识提议的绝对补集,首轮共识中所述第四集合存放有所述N个共识提议。
将所述第二集合合并至第一集合,将所述第三集合合并至第四集合,以执行下一轮共识,直至所述第一集合中存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票。
基于最后一轮共识中统计到的所述N个共识提议的共识投票,确定共识结果。
上述如本说明书图1所示实施例揭示的交易处理方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
应理解,本说明书实施例的电子设备可以实现图3所示的共识节点在图1和图2所示的实施例的功能,本文不再赘述。
当然,除了软件实现方式之外,本说明书的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
此外,本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行以下方法:
执行本轮共识,统计N个共识提议的共识投票。
对第一集合遍历以执行:将具有大于等于f+1且小于2f+1个相同共识投票的共识提议迁移至第二集合中;将未具有f+1个相同共识意见的共识提议迁移至第三集合中,并更新为反对的共识意见;其中,所述第一集合用于存放大于等于2f+1个相同的共识投票的共识提议,f为共识节点容错数。
对第四集合遍历以执行:将具有大于等于2f+1个相同共识意见的共识提议迁移至第二集合中;将具有大于等于f+1且小于2f+1个相同共识意见的能够基于纠删码算法追溯的共识提议迁移至所述第二集合中,并更新为赞成的共识意见;将具有大于等于f+1且小于2f+1个相同共识意见的不能够基于纠删码算法追溯的共识提议迁移至所述第三集合中,并更新为反对的共识意见;将未具有f+1个相同共识意见的共识提议迁移至所述第三集合中,并更新为反对的共识意见;其中,所述第一集合为所述第四集合针对所述N个共识提议的绝对补集,首轮共识中所述第四集合存放有所述N个共识提议。
将所述第二集合合并至第一集合,将所述第三集合合并至第四集合,以执行下一轮共识,直至所述第一集合中存放有所述N个共识提议,且所述N个共识提议均具有大于等于2f+1个相同的共识投票。
基于最后一轮共识中统计到的所述N个共识提议的共识投票,确定共识结果。
应理解,上述指令当被包括多个应用程序的便携式电子设备执行时,能够使图3所示的共识节点实现图1和图2所示实施例的功能,本文不再赘述。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。此外,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本文件的保护范围。