一种基于可靠广播的可再投票二元共识方法及装置

文档序号:1956628 发布日期:2021-12-10 浏览:15次 >En<

阅读说明:本技术 一种基于可靠广播的可再投票二元共识方法及装置 (Re-voting binary consensus method and device based on reliable broadcast ) 是由 张海滨 段斯斯 于 2021-08-25 设计创作,主要内容包括:本申请实施例中提供了一种基于可靠广播的可再投票二元共识方法,以及一种拜占庭容错方法,应用于所述N个共识节点中的任一节点,该共识方法包括:针对任一共识节点的待共识提议,确定该待共识提议的初始投票值;在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;基于可靠广播RBC协议将首轮投票值广播至所述N个共识节点中的其他节点;基于其他共识节点广播的首轮投票值确定所述待共识提议的共识情况。可以使各个共识节点就待共识提议快速达成共识,同时提升了共识过程的安全性,另外,如果采用无条件安全的RBC协议,上述二元共识方法以及拜占庭容错方法也是无条件安全的。(The embodiment of the application provides a re-voting binary consensus method based on reliable broadcasting and a Byzantine fault-tolerant method, which are applied to any node in N consensus nodes, and the consensus method comprises the following steps: for a to-be-consensus proposal of any consensus node, determining an initial vote value of the to-be-consensus proposal; under the condition that the initial voting value is other voting values and meets a preset condition, determining the initial voting value as a priority voting value again; broadcasting an initial round of vote values to other nodes of the N consensus nodes based on a reliable broadcast RBC protocol; and determining the consensus situation of the proposal to be consensus based on the initial polling values broadcast by other consensus nodes. The method can enable each consensus node to quickly achieve consensus on the pending consensus offers, simultaneously improves the security of the consensus process, and in addition, if an unconditional and safe RBC protocol is adopted, the binary consensus method and the Byzantine fault-tolerant method are also unconditionally and safe.)

一种基于可靠广播的可再投票二元共识方法及装置

技术领域

本申请涉及计算机技术领域,具体地,涉及一种基于可靠广播的可再投票二元共识方法及装置。

背景技术

二元共识是拜占庭容错机制(拜占庭共识,BFT)的主要组成部分,目前已知的异步拜占庭共识协议都直接或者间接依赖二元共识,其可以使分布式系统在异步环境下达成共识。同时,二元共识也可以用于构造状态机复制(state machine replication),进而使用状态机复制为分布式容错系统建立基础,另外,二元共识还可以应用在数据库等技术领域。因此,对于二元共识的研究是目前业界重要的研究方向。

发明内容

本申请实施例中提供了一种基于可靠广播的可再投票二元共识方法及装置,用于解决现有技术中共识安全性差的问题。

根据本申请实施例的第一个方面,提供了一种基于可靠广播的可再投票二元共识方法,其特征在于,应用于分布式系统中的任意一共识节点,所述分布式系统包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述方法包括:

针对任一共识节点的待共识提议,确定该待共识提议的初始投票值;其中,初始投票值为优先投票值或其他投票值;

在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;

基于可靠广播RBC协议将首轮投票值广播至所述N个共识节点中的其他节点;

基于其他共识节点广播的首轮投票值确定所述待共识提议的共识情况。

根据本申请实施例的第二个方面,提供了一种拜占庭容错方法,其特征在于,应用于分布式系统中的任意一共识节点,所述分布式系统包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述方法包括:

以预设的方式确定本次待共识提议,利用可靠广播RBC协议将所述待共识提议广播至其他共识节点;

针对任一共识节点的待共识提议,采用上述基于可靠广播的可再投票二元共识方法确定该待共识提议的共识结果。

根据本申请实施例的第三个方面,提供了一种基于可靠广播的可再投票二元共识装置,其特征在于,应用于分布式系统中的任意一共识节点,所述分布式系统包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述装置包括:

处理模块,用于针对任一共识节点的待共识提议,确定该待共识提议的初始投票值;其中,初始投票值为优先投票值或其他投票值;在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;

通信模块,用于基于可靠广播RBC协议将首轮投票值广播至所述N个共识节点中的其他节点;

所述处理模块,还用于基于其他共识节点广播的首轮投票值确定所述待共识提议的共识情况。

根据本申请实施例的第四个方面,提供了一种拜占庭容错装置,其特征在于,应用于分布式系统中的任意一共识节点,所述分布式系统包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述装置包括:

广播模块,用于以预设的方式确定本次共识的待共识提议,利用可靠广播RBC协议将所述待共识提议广播至其他共识节点;

共识模块,用于针对任一共识节点的待共识提议,采用上述的基于可靠广播的可再投票二元共识方法确定该待共识提议的共识结果。

采用本申请实施例中提供的基于可靠广播的二元共识方法,各个共识节点利用可靠广播RBC协议广播投票值,可以使各个共识节点就待共识提议快速达成共识,同时提升了共识过程的安全性,进而提高了分布式系统的处理能力。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本说明书实施例的一种共识节点维护各个RABA实例的示意图;

图2为本说明书实施例的一种基于可靠广播的可再投票二元共识方法的流量示意图;

图3为本说明书实施例的一种广播投票的流程示意图;

图4为本说明书实施例的另一种基于可靠广播的可再投票二元共识方法的流程示意图;

图5为本说明书实施例的一种共识节点维护各个RBC以及RABA实例的示意图;

图6为本说明书实施例的一种默克尔树的结构示意图;

图7为本说明书实施例的一种基于可靠广播的可再投票二元共识装置的结构示意图;

图8为本说明书实施例的一种拜占庭容错装置的结构示意图;

图9是用于配置本说明书实施例装置的一种设备的结构示意图。

具体实施方式

二元共识是拜占庭容错机制BFT的重要组成部分,目前已知的异步拜占庭共识协议都直接或者间接依赖二元共识,其可以使区块链等分布式系统在异步环境下达成共识。同时,二元共识也可以用于构造状态机复制(state machine replication),进而使用状态机复制为分布式容错系统建立基础,另外,二元共识还可以应用在数据库等技术领域。

二元共识中,二元是指两个值,通常用0和1表示,分布式系统中各个节点可以就两个值中的某个值达成一致,而该值对于分布式系统来说往往具有重要的实际意义。以二元共识应用在区块链网络为例,区块链网络中各个节点的数据需要保持一致,如果利用二元共识方法,当各个节点针对某批交易达成共识为1时,则各个节点都存储该数据,当各个节点针对某批交易达成共识为0时,则各个节点都不存储该数据,这样就保证了各个节点存储数据的一致性。可以理解的是,如果二元共识过程的安全性越高,则分布式系统的抗攻击能力也就越强、性能也就越优越,因此如何提高二元共识的安全性是目前业界重要的研究方向之一。

针对上述问题,本申请实施例中提供了一种基于可靠广播的可再投票二元共识方法,应用于分布式系统中的任一个共识节点,该节点通过可靠广播RBC协议广播投票值,并基于接收到的其他共识节点广播的投票值确定共识结果,从而使系统中各个节点达成共识,同时有效提升了共识过程的安全性。

本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java和直译式脚本语言JavaScript等。

为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

为了便于本领域技术人员理解本说明书中的内容,下面对本说明书中涉及到的名词进行说明。

在本说明书中,待共识提议可以理解为任一共识节点发出的数据,并希望其他共识节点共同参与对该数据的共识,而投票值则用于表示各个共识节点对该数据的共识意见,其中投票值包括优先投票值以及其他投票值两种值,即各个共识节点可以对待共识提议存在共两种共识意见,优先投票值以及其他投票值在一个实施例中,可以用1和0分别进行表示,在其他实施例中,还可以用其他形式和符号进行表示,本说明书对于优先投票值以及其他投票值的具体形式不行进行限定,只要能够用于区分优先投票值和其他投票值均可。

以区块链场景为例,待共识提议可以是任一共识节点从本地交易池中获取的一批交易,并希望其他共识节点可以接收并存储该批交易,而投票值用于表示各个共识节点是否同意存储该待共识提议。在其他应用场景中,待共识提议以及投票值会具有其他不同的实际含义,本说明书对此不进行限定。

如图1所示,为分布式系统中的任一节点所要执行的二元共识实例的示意图,分布式系统中的任一节点会针对每一个共识节点(包括其自身)分别利用本说明提出的基于可靠广播的可再投票二元共识方法确定针对该共识节点提出的待共识提议的共识结果,为了方便说明,将任一共识节点称为目标节点,如图中实例RABA1-RABAN,分别为针对N个共识节点采用可再投票的二元共识方法RABA进行共识的示意图,RABA1为目标节点针对共识节点1提出的待共识提议进行二元共识的示意,RABA2为目标节点针对共识节点2提出的待共识提议进行二元共识的示意,以此类推。

从示意图中可以看出,目标节点在针对每个待共识提议进行共识时,会确定一个初始投票值(0或1)作为可再投票二元共识方法的输入,最终基于本说明提出的可再投票二元共识方法也会得到输出即针对该待共识提议的共识结果(0或1)。

如图2所示,基于以上说明,本说明书提出了一种基于可靠广播的二元共识方法,该方法为分布式系统中的任一共识节点所执行的方法,分布式系统至少包括N个共识节点,共识节点是指参与共识过程的节点,可以理解的是,在分布式系统中通常还会存在其他不参与共识的节点,这些节点仅接收和存储共识节点的共识结果而不参与共识过程;另外,当系统中的恶意节点或称拜占庭节点过多时任何一种共识方法均无法确保系统中的共识节点达成共识,因此本说明书中规定该分布式系统包括N个共识节点,所述N个共识节点中最多允许存在f个恶意节点,N≥3f+1,所述f和N均为大于0的整数,例如,当N为4时,f只能为1,当N为8时,f为2或1。本说明书中将f值预先设置为任一对应于N值的正整数。例如,当N为7时,可以将f设置为2。

该方法应用于分布式系统中多个共识节点中的任一正确节点,可以理解的是其他正确共识节点也在异步执行上述方法,当目标节点针对任一共识节点提出的待共识提议的得到共识结果时,其他正确共识节点最终也会针对该待共识提议得到相同的共识结果,该分布式系统可以是区块链网络也可以是其他分布式系统,本说明书对此不进行限定。

该方法包括:

S201,针对任一共识节点的待共识提议,确定该待共识提议的初始投票值;其中,初始投票值为优先投票值或其他投票值;

S202,在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;

S203,基于可靠广播RBC协议将首轮投票值广播至所述N个共识节点中的其他节点;

S204,基于其他共识节点广播的首轮投票值确定所述待共识提议的共识情况。

根据上述图1、以及对于图1的说明可知,目标节点会针对每个共识节点的待共识提议分别确定共识结果,图2所描述的即为针对每个待共识提议所要执行的共识过程。

本说明书提出的基于可靠广播的可再投票二元共识方法是按照共识轮执行的,每轮包括若干步骤,上述S201-S204均为首轮共识所执行的步骤,在每轮共识过程中均有一定的概率达成共识。

上述S201-S202的内容可以参照下文,这里先不进行详述。

上述S203中,目标节点可以将本地的投票值广播至其他共识节点,同时也会接收到其他共识节点广播的投票值。为了提升安全性,避免恶意节点故意篡改投票值,或冒充其他共识节点广播投票值,各个共识节点可以利用可靠广播RBC协议来广播本地的投票值。可靠广播RBC协议可以确保目标节点能够可靠地将消息发送到网络中的所有共识节点,并且满足以下性质:一致性(Agreement),即任意两个正确节点都收到来自源节点的相同的消息;统一性(Totality),只要有一个节点收到了来自源节点的消息,那么所有正确的节点最终都能收到这个消息;活跃性(Validity),如果源节点是正确的,那么所有正确的节点收到的消息一定与源节点发送的消息一致。

可靠广播RBC协议的具体实现方式可以参照相关技术,这里不进行详述。在本实施例中,可以采用各种具体实现方式来实现可靠广播RBC协议,本实施例中不进行限定。采用可靠广播RBC协议的方式广播投票值,与普通广播相比可以有效提升共识过程的安全性。

本说明书中提出,在S203中即首轮广播投票值的过程中,目标节点会广播三次投票值,第一次广播的投票值称为预投票值,第二次广播的投票值称为主投票值,第三次广播的投票值称为最终投票值,其中,在首轮共识中,初始投票值即为预投票值。本说明书中,目标节点在广播三次投票值时,可以均采用可靠广播RBC协议进行广播。

另外,考虑到与普通广播相比,通过可靠广播RBC协议进行广播耗时较长,因此,本说明书提出可以在每轮共识中可以只在第三次广播投票值时采用可靠广播RBC来实现,即广播最终投票值时可以采用可靠广播RBC协议进行广播,其余两次广播时采用普通的广播形式,经实验证明,采用这样的方式既能保证共识过程的安全性也能保证共识效率。

在一个具体实施例中,目标节点具体可以是执行如图3所述的方法来完成S203:

S301,将所述初始投票值广播至其他共识节点;

目标节点可以将本地确定的初始投票值添加到第一共识消息中,并通过认证信道将第一共识消息传输至分布式系统中的其他共识节点。在一个实施例中,第一共识消息可以是bvalr格式的消息,其中r为共识轮数,首轮为0,以1为步长递增,则本轮发送的消息类型即为bval0

S302,基于所述初始投票值以及其他共识节点广播的初始投票值确定首轮主投票值,并将确定的首轮主投票值广播至其他共识节点;

可以理解的是,分布式系统中的全部正确节点都在异步的执行目标节点所执行的步骤,即其他共识节点也会发送包括初始投票值的第一共识消息;此时,目标节点会接收到来自其他共识节点发送的第一共识消息,进而解析出初始投票值。其中,在首轮共识过程中,初始投票值即为预投票值。

在一个实施例中,如果目标节点在首轮共识中接收到f+1个第一共识消息解析出f+1个初始投票值,即超过恶意节点数量的第一共识消息,如果这f+1个初始投票值均相同、且与本地广播的初始投票值不同,目标节点则将本地初始投票值修改为所述f+1个初始投票值对应的投票值,并再次利用第一共识消息广播修改后的初始投票值。例如,如果目标节点收到f+1个bval0消息,其中该f+1个消息中携带的f+1个初始投票值均为1,而该目标节点已经通过第一共识消息广播过一次初始投票值为0,与这f+1个初始投票值不同,因此可以将本地的初始投票值修改为1,并且再次通过第一共识消息广播携带值为1的初始投票值。本步骤目的是为了让共识节点可以更正本地初始投票值。

本步骤中确定首轮主投票值的具体方式为:目标节点若确定本地初始投票值为优先投票值,则将优先投票值添加到首轮投票集合中,并将优先投票值确定为首轮主投票值。

若本地初始投票值为其他投票值,则在接收到其他共识节点广播的2f+1个初始投票值,且所述2f+1个初始投票值均相同的情况下,将所述2f+1个初始投票值添加到首轮投票集合中;并将最先添加到首轮投票集合中的值确定为首轮主投票值。

例如,如果目标节点确定本地初始投票值为优先投票值1,则将优先投票值1添加到首轮投票集合bset0中,并确定该优先投票值1为主投票值。

如果,目标节点确定本地初始投票值为其他投票值0,则在接收到2f+1个第一共识消息,对接收到的第一共识消息进行解析后,确定其中携带的初始投票值均为1,则可以将该初始投票值1添加到首轮投票集合bset0中,此时如果确定投票值1为最先添加到该首轮投票集合bset0中的值,则确定该优先投票值1为主投票值。

采用上述方式,在首轮共识中可以基于本地初始投票值以及其他共识节点广播的初始投票值确定主投票值。

S303,基于确定的首轮主投票值以及其他共识节点广播的首轮主投票值确定首轮最终投票值,利用可靠广播RBC协议将确定的最终投票值广播至其他共识节点。

本步骤中,目标节点可以将主投票值添加到第二共识消息aux0中发送至其他共识节点,同时目标节点也会接收到其他共识节点广播的主投票值,为了避免恶意节点故意发送假投票,目标节点可以基于首轮投票集合对接收到的首轮主投票值进行合法性验证,具体可以是在接收到任一共识节点广播的主投票值后,判断该主投票值是否在本地的首轮投票集合中,如果在,则说明该第二共识消息合法,即该第二共识消息携带的主投票值合法,如果不在,则说明该第二共识消息携带的主投票值不合法。

在本步骤中可以采用以下方式确定最终投票值:

目标节点如果确定本地首轮主投票值为优先投票值,则确定首轮最终投票值为优先投票值;

例如,确定本地广播的主投票值为优先投票值1,则确定首轮最终投票值也为优先投票值1。

另外,如果本地首轮主投票值为其他投票值0,则基于首轮投票集合对接收到的其他共识节点广播的首轮主投票值进行合法性验证;在接收到N-f个合法首轮主投票值的情况下,基于所述N-f个合法首轮主投票值确定最终投票值。

具体可以为:如果确定这N-f个合法首轮主投票值均相同,则确定这N-f个主投票值为最终投票值;如果这N-f个合法首轮主投票值不完全相同,则确定最终投票值为不同于优先投票值与其他投票值的预定义值。

例如,接收到的N-f个合法主投票值均为1,则确定最终投票值为1。又如,接收到的N-f个合法主投票值有的为1,有的为0,则确定最终投票值为*(*为预定义值)。

在确定了最终投票值后,即可以利用可靠广播RBC协议将最终投票值广播至其他共识节点,在本步骤中,可以基于各种实现方式来实现可靠广播RBC协议。

另外,为了提升安全性,做到抗量子攻击,可以采用量子安全的RBC来广播投票值,例如,可以采用Bracha’s broadcast或AVID RBC,采用这一类可靠广播RBC协议可以使本说明书提出的二元共识方法具有量子安全性。

进一步,为了做到无条件安全或称信息论安全,可以采用无条件安全的可靠广播RBC协议来广播投票值,例如,可以是采用Bracha’s broadcast可靠广播RBC协议,采用该种可靠广播RBC协议进行广播,无论敌手的计算能力有多强也无法破解,因此进一步提升了共识过程的安全性。

在上述S204中,具体可以为基于接收到的其他共识节点广播的首轮最终投票值确定所述待共识提议的共识情况,在此之前,首先仍需要对接收到的最终投票值进行合法性验证,可以是在接收到的最终投票值为0或1时,如果确定该最终投票值在本地首轮投票集合中,则确定该最终投票值合法,否则,确定该最终投票值不合法。如果在接收到的最终投票值为*(预定义值)时,如果确定本地首轮投票集合中既包括优先投票值1又包括其他投票值0,则确定该最终投票值合法,否则,则确定该最终投票值不合法。

在对接收到的最终投票值进行合法性验证后,即可以在接收到N-f个合法首轮最终投票值的情况下,确定共识情况。

具体可以是在接收到N-f个合法首轮最终投票值的情况下,如果这N-f个本轮最终投票值均相同、为优先投票值或其他投票值,则确定这N-f个首轮最终投票值为所述待共识提议的共识结果,并将该N-f个首轮最终投票值确定为下轮共识的预投票值。

例如,如果接收到的N-f个合法首轮最终投票值均为1,则确定该1为该待共识提议的共识结果。在得到共识结果后,目标节点仍参与下轮共识,可以将1确定为下轮共识的预投票值。

另外,如果这N-f个首轮最终投票的值不全相同,且其中存在f+1个首轮最终投票值相同、为优先投票值或其他投票值,则将这f+1个首轮最终投票值确定为下轮共识的预投票值;

例如,如果接收到的N-f个合法首轮最终投票的值不全相同,其中存在f+1个为1,而不存在2f+1个相同的值,则目标节点确定首轮未得到该待共识提议的共识结果,因此要执行下轮共识,并将1确定为下轮共识的预投票值,开始执行下轮共识。

另外,如果这N-f个合法首轮最终投票值中不存在f+1个相同的投票值,则将优先投票值确定为下轮共识的预投票值。

例如,如果接收到的N-f个合法首轮最终投票值中不存在任意f+1个投票值相同,则目标节点确定首轮未得到该待共识提议的共识结果,因此要执行下轮共识,将优先投票值1确定为下轮共识的预投票值,并开始执行下轮共识。

可以理解的是,在首轮共识过程中,任一共识节点在确定本地的当前投票值为优先投票值时,会直接发送下一阶段的投票,且下一阶段投票的值也为优先投票值,例如目标节点在确定本地初始投票为优先投票值时并向其他共识节点广播了初始投票值后,会直接向其他共识节点广播值为优先投票值的主投票值,因此,在基于各个共识节点广播的最终投票值确定待共识提议的共识结果时,大概率会基于优先投票值达成共识,即大概率会确定待共识提议的共识结果为优先投票值,且就优先投票值达成共识的效率较高。

上述S201-S204为首轮共识的方式,下面介绍其他轮共识的方式:

在首轮没有达成共识的情况下,则可以开始循环执行其他轮共识步骤,其他轮共识步骤如图4所示,即S401-S402,直到达到预设停止条件:

S401,基于可靠广播RBC协议将本轮投票值广播至所述N个共识节点中的其他节点;

S402,基于接收到的其他共识节点广播的本轮投票值确定所述待共识提议的共识情况。

在401中,即除首轮以外的其他共识轮,共识节点也均是广播三次投票值,即广播预投值、主投票值以及最终投票值,可以在广播三次投票值时均采用可靠广播RBC协议,另外,与首轮相同出于相同的考虑,为了兼顾共识效率以及安全性,可以仅在发送最终投票值的时候采用可靠广播RBC协议。

因此,S401的一种具体的实施方式可以是:

S401a,将本轮预投票值广播至其他共识节点;

S401b,基于其他共识节点广播的本轮预投票值确定本轮主投票值,并将确定的主投票值广播至其他共识节点;

S401c,基于其他共识节点广播的本轮主投票值确定本轮最终投票值,利用可靠广播RBC协议将确定的最终投票值广播至其他共识节点。

S401a可以参照上述S301,这里不再进行详述,区别仅在于本步骤中的预投票是基于上轮共识结果确定的,而S301中的预投票是初始投票,确定初始投票的过程可以参照下文。

在S401b中,具体可以是,如果目标节点在当前共识轮接收到f+1个第一共识消息解析出f+1个预投票值,即超过恶意节点数量的第一共识消息,如果这f+1个预投票值均相同、且与本地本轮广播的预投票值不同,目标节点则将本地预投票值修改为所述f+1个本轮预投票值对应的投票值,并再次广播修改后的预投票值。例如,如果目标节点收到f+1个bvalr消息,其中该f+1个消息中携带的f+1个预投票值均为1,而该目标节点本轮共识中已经通过第一共识消息广播过一次预投票值为0,与这f+1个预投票值不同,即可以将本地的本轮共识的预投票值修改为1,并且再次通过第一共识消息广播携带值为1的预投票值。本步骤目的是为了让本地节点可以更正本地预投票值。

本步骤中,目标节点可以在接收到其他共识节点广播的2f+1个第一共识消息即2f+1个本轮预投票值,且这2f+1个本轮预投票值均相同的情况下,将该2f+1个本轮预投票值对应的投票值添加到本轮投票集合中;并将最先添加到本轮投票集合中的值确定为本轮主投票值。

例如,目标节点接收到2f+1个第一共识消息,对接收到的第一共识消息进行解析后,确定其中携带的预投票值均为1,则可以将该预投票值1添加到本轮投票集合bsetr中,此时如果确定1为最先添加到该投票集合bsetr中值,则确定该1为主投票值。

采用上述方式,可以基于接收到的预投票值确定主投票值,在确定了之后,即可以通过第二共识消息广播主投票值。

在S401c中,目标节点可以将主投票值添加到第二共识消息auxr中发送至其他共识节点,同时目标节点也会接收到其他共识节点广播的主投票值,为了避免恶意节点故意发送假投票值,目标节点可以基于本轮投票集合对接收到的本轮主投票值进行合法性验证,具体可以是在接收到任一共识节点广播的主投票值后,判断该主投票值是否在本地的本轮投票集合中,如果在,则说明该第二共识消息合法,即该第二共识消息携带的主投票值合法,如果不在,则说明该第二共识消息携带的主投票值不合法。

在接收到N-f个合法本轮主投票值的情况下,即可以基于这N-f个合法本轮主投票值确定最终投票值,具体可以是:若这N-f个合法本轮主投票值均相同,则确定这N-f个主投票值对应的投票值为最终投票值;若这N-f个合法本轮主投票值不全相同,则确定最终投票值为不同于优先投票值与其他投票值的预定义值。

例如,接收到的N-f个合法主投票值均为1,则确定最终投票值为1。又如,接收到的N-f个合法主投票值有的为1,有的为0,则确定最终投票值为*(*为预定义值)。

在确定了最终投票值后,即可以利用可靠广播RBC协议将最终投票值广播至其他共识节点,在本步骤中,可以基于各种实现方式来实现可靠广播RBC协议。同样的,为了进一步提升安全性,可以将其他轮的RBC协议与首轮共识中的RBC协议都设置为无条件安全的可靠广播RBC协议或者量子安全的可靠广播RBC协议,其中,首轮共识与其他轮共识所采用的可靠广播RBC协议相同。

上述S402中,具体内容可以参照上述S204的内容,这里不再进行详述,区别仅在于如果目标节点接收到的N-f个合法首轮最终投票值中不存在f+1个相同的投票值,则确定本地抛币值,将所述本地抛币值确定为下轮共识的预投票值,其中本地抛币值为目标节点随机确定的,其可以为优先投票值也可以为其他投票值。例如,如果接收到的N-f个合法本轮最终投票值中不存在任意f+1个投票值相同,则目标节点确定本轮未得到该待共识提议的共识结果,因此要执行下轮共识,则随机确定本地抛币值,并将本地抛币值确定为下轮共识的预投票值,并开始执行下轮共识。本步骤中,各个共识节点确定本地抛币值,无需与其他共识节点进行交互得到公共抛币值,因此无需使用任何加密机制或加密算法。

上述S401-S402为除了首轮之外,每轮共识执行的过程,在未达到预设停止条件时,则循环执行S401-S402,其中预设停止条件可以为确定上轮共识已经得到待共识提议的共识结果,且本轮已发送完成最终投票;还可以是接收到用户发送的停止指令等。另外,目标节点针对一个待共识提议仅会得到一个共识结果,在得到共识结果后虽然也会参与下轮共识但是并不会再次得到共识结果,即任一共识节点在本轮共识过程中如果针对某个待共识提议得到了共识结果,那么下一轮共识其只会执行S401,而不执行S402。

可以理解的是,本说明书中每轮共识过程中,对预投票、主投票和最终投票分别采用了三种消息进行广播,目的是为了让各个共识节点可以确定接收到的消息类型以区分不同类型的投票,本说明书对于各个消息的具体类型不进行限定。另外,除了预投票值以外,在每轮共识过程中,每个共识节点仅能广播一次主投票值以及一次最终投票值。

上述共识方法中,由于各个共识节点在一轮共识中未达成共识时,会随机确定本地抛币值作为下轮共识的预投票值,无需使用密码学与其他共识节点进行交互产生公共抛币值(不需要采用密码学原理进行多次交互得到一个共同的抛币值),因此在上述共识方法中,如果采用的可靠广播RBC协议为无条件安全的RBC协议时,上述二元共识方法的共识过程是不依赖任何密码学假设,只依赖认证信道,因此也是无条件安全(unconditionallysecure)的,即信息论安全(information-theoretically secure)的。

上述方式是共识节点中的任一正确节点所执行的方法,其他正确共识节点也在异步执行上述方法,采用上述方式,可以使异步环境下的分布式系统中的各个共识节点针对某个待共识提议快速达到共识状态,并且可以有效保证共识过程的安全性。其中每轮共识中,节点仅需要广播三次共识消息,其中只需在第三次广播共识消息中采用可靠广播RBC协议进行广播,就可以有效保证共识过程的安全性,因此也可以保证共识效率。

同时,采用上述共识方法可以保证分布式系统中的共识节点满足以下性质,即以下技术效果:有效性:在所有正确节点广播的投票值均为v、且没有再次广播其他投票值的情况下,那么所有正确节点的共识结果均为该投票值v;一致终止:在所有正确节点广播的投票值为相同值v、且没有再次广播其他投票值的情况下,那么所有正确节点均可以终止共识操作,即达成共识;共识性:如果任一个正确节点确定某一投票值v为共识结果,那么其他终止共识操作的正确节点也会确定该投票值v为共识结果;有偏有效性:如果f+1个正确节点广播投票值v,那么正确节点在终止共识时,可以确定该投票值v为共识结果;有偏终止:如果Q是正确节点的集合,其中Q1是广播了投票值1没有再次广播投票值0的正确节点的集合,Q2是广播了投票值0又再次广播了投票值1的正确节点的集合,如果以及Q=Q1∪Q2,那么所有正确的节点都会达成共识;完整性:正确的节点就一个提议只达成一次共识。

下面以区块链场景为例,对本说明书的基于可靠广播的可再投票二元共识方法进行说明,在区块链场景中,可以将上述基于可靠广播的可再投票二元共识方法以及可靠广播RBC协议进行组合成为拜占庭容错方法,用于解决区块链网络中的数据共识问题,基于此,本说明书提出一种拜占庭容错方法,应用于该分布式系统即该区块链网络中的任一共识节点,该方法包括:

以预设的方式获取本次待共识提议,利用可靠广播RBC协议将所述待共识提议广播至其他共识节点;

针对任一共识节点的待共识提议,利用上述基于可靠广播的可再投票二元共识方法,确定所述待共识提议的共识结果。

可以理解的是,由于各个共识节点都会接收客户端请求的交易,因此各个共识节点都可以在本地维护自己的交易池。目标节点在获取了交易后,可以将获取的交易打包成为本次的待共识提议。目标节点在获取了本地待共识提议后,即可以基于可靠广播RBC协议,向其他共识节点广播本地待共识提议,同时也可以基于可靠广播RBC协议接收其他共识节点广播的待共识提议。

其中,预设的方式可以是随机从本地交易池中获取预设数量的交易,还可以是按序从本地交易池中获取预设数量的交易。当然,还可以是对多种获取方式进行组合:例如可以是确定采用随机获取的方式获取交易的连续次数是否达到预设次数;若是,则确定本次获取较早存储在本地交易池中的预设数量的明文交易作为待共识提议;若否,则确定本次随机获取存储在本地交易池中的预设数量的明文交易作为待共识提议。例如,可以将预设次数设为5,如果已经在连续5次共识过程中以随机获取的方式获取了交易,则本次以按序选择的方式获取交易,下次共识时还是以随机选择的方式进行选择,并重新开始记录连续次数。

采用上述组合的方式,多数情况下采用随机的方式进行获取,可以保证各个共识节点在每次共识时尽量不获取相同的交易作为待共识提议,同时由于是以明文形式获取的交易,为了避免恶意节点故意作恶,即故意不获取某些交易达成共识,因此在预设的时间节点,将随机获取模式切换为按序获取的模式,使各个共识节点可以将较早存储在交易池中而一直未被共识的交易获取出来进行共识。

各个共识节点基于可靠广播RBC协议广播待共识提议后,即可以针对任一待共识提议,基于接收该待共识提议的情况确定该待共识提议的初始投票值,进一步,即可以采用初始投票值继续执行上述基于可靠广播的可再投票二元共识方法的首轮共识过程,在首轮未达成共识时,继续执行其他轮共识过程,直到达到预设停止条件。

基于接收待共识提议的情况确定针对该待共识提议的初始投票值具体可以是:

在接收到任一个共识节点通过可靠广播RBC协议广播的待共识提议的情况下,若还未针对该待共识提议开始执行共识过程即本说明书提出的可再投票的二元共识方法,或者说还未确定其初始投票值,则将该待共识提议的初始投票值确定为优先投票值1;

在接收到N-f个共识节点广播的待共识提议的情况下,将还未开始执行共识过程的待共识提议的初始投票值确定为其他投票值0;

另外,目标节点在接收到任一个共识节点通过可靠广播RBC协议广播的待共识提议的情况下,若已针对该待共识提议开始执行共识过程,且还未得到该待共识提议的共识结果的情况下,则重新将该待共识提议的初始投票值确定为优先投票值1。

本实施例中,由于在接收到N-f个共识节点广播的待共识提议的情况下,将还未开始执行共识过程的待共识提议的初始投票值确定为其他投票值0,并且可靠广播RBC协议可以保证目标节点在接收任一待共识提议时,仅会接收到一次,而非多次接收同一待共识提议,因此,在接收到任一待共识提议后,若已经针对该待共识提议开始执行共识过程,则说明是以其他投票值0为初始投票值开始执行的,进一步,可以将初始投票值由其他投票值0修改为优先投票值1。即可以将S202中的预设条件配置为:若接收到该待共识提议,且还未得到该待共识提议的共识结果。

以N为7,f为2为例进行说明,目标节点在接收到任一共识节点广播的待共识提议之后,确定是否已经开始针对该待共识提议执行共识过程,如果没有,则将该待共识提议的初始投票值确定为优先投票值1,并继续执行本说明书提出的可再投票的二元共识方法,以得到针对该待共识提议的共识结果。另外,在确定接收到N-f即7-2=5个共识节点广播的待共识提议,即已经开始针对5个待共识提议分别以优先投票值1作为输入开始执行共识过程,可以将剩余的其他还未开始执行共识过程的2个待共识提议的初始投票值确定为其他投票值0,并针对这剩余的2个待共识提议开始执行共识过程。同时,目标节点在接收到任一共识节点广播的待共识提议之后,若已针对该待共识提议开始执行共识过程,并且该待共识提议的初始投票值为其他投票值0,且还未得到该待共识提议的共识结果,则重新将该待共识提议的初始投票值确定为优先投票值。

如图5所述,区块链网络中共存在7个共识节点,每个共识节点需要针对7个共识节点发出的待共识提议分别达成共识,如图中所示,需要维护7对RBC+RABA实例,其中RABA即为本说明书提出的基于可靠广播的可再投票二元共识方法,其中N为7,f为2,目标节点在通过可靠广播RBC协议接收到了节点0-节点4的5个待共识提议后,就开始针对节点0-节点4的待共识提议分别执行可再投票的二元共识算法RABA,即将RABA0-RABA4的输入均设置为1(优先投票值)并开始执行,并且直接将对应于节点5和节点6的RABA5和RABA6的输入均设置为0(其他投票值)并开始执行,即在接收到N-f个共识节点的待共识提议的最后一个待共识提议的情况下,就开始触发剩余f个还未开始执行RABA的待共识提议开始执行,如图中所示,在节点3以1为输入执行开始RABA3时,就将RABA5和RABA6的输入均设置为0,触发开始执行RABA5和RABA6。另外,节点5和节点6的RABA5和RABA6的输入设置为0之后,且还未得到RABA5和RABA6的输出结果时,如果又接收到了节点5和节点6的待共识提议,那么可以将RABA5和RABA6的输入更改为1,再次触发执行RABA5和RABA6,以得到RABA5和RABA6的输出结果。采用上述方式,可以保障各个待共识提议的二元共识过程基本上是在并行处理和发生的,进一步提升了共识的效率。

可以理解的是,上述方式仅是在区块链网络中确定初始投票值的方式,在其他分布式系统场景中,还可以根据不同的数据确定待共识提议的初始投票值。

本说明书提出为了使各个共识节点能够在首轮共识过程中就该优先投票值快速达成共识,因此允许目标节点在确定的初始投票值为其他投票值的情况下,若确定满足预设条件,则可以重新将所述初始投票值确定为优先投票值,并再次执行共识过程。在不满足预设条件的情况下,不允许目标节点修改初始投票值,在不同分布式系统应用场景中可以灵活的配置不同的预设条件。可以理解的是,上述仅以区块链网络应用场景为例进行说明,在其他的应用场景中,可以根据不同的场景需求配置不同的预设条件。

在一个具体实施例中,为了实现量子安全,各个共识节点广播待共识提议以及广播投票值所使用的可靠广播RBC协议可以是量子安全的可靠广播RBC协议,例如可以使用Bracha’s broadcast以及AVID RBC协议。

在一个具体实施例中,可以采用下述具体的实现方式实现量子安全的可靠广播RBC协议,下面对采用AVID RBC协议广播待共识提议的过程进行说明:

目标节点可以将待共识提议采用纠删码处理,得到N个数据块;基于得到的N个数据块的哈希值构建默克尔树,得到根哈希以及对应于每个数据块的默克尔路径的默克尔证明;将所述N个数据块中的部分数据块保存在本地,将其他数据块、根哈希以及其他数据块对应的默克尔路径发送至其他共识节点,以使其他共识节点对所述数据块进行广播和验证。如图6所示,以共有4个共识节点(共识节点1-共识节点4)为例,目标节点为共识节点1,共识节点1将本地的待共识提议采用纠删码处理后拆分成4个数据块,分别为数据块1-数据块4,采用预设的Hash算法对4个数据块进行Hash运算,得到4个数据块的Hash值,并基于4个数据块的哈希值构建默克尔树,数据块1的Hash值为Hash1,数据块2的Hash值为Hash2,数据块3的Hash值为Hash3,数据块4的Hash值为Hash4,对Hash1和Hash2进行计算得到Hash12,对Hash3和Hash4进行计算得到Hash34,对Hash12和Hash34进行计算得到根Hash,从而得到默克尔树。可以理解的是,上述仅以4个节点为例,实际应用中可以根据不同数量的共识节点构建更为复杂的默克尔树。在构建了默克尔树之后,共识节点1可以将数据块1存储在本地,将数据块2、Hash1、Hash34以及根Hash发送至共识节点2;将数据块3、Hash4、Hash12以及根Hash发送至共识节点3;将数据块4、Hash3、Hash12以及根Hash发送至共识节点4。以发送给共识节点2的内容为例,其中Hash1、Hash34即为数据块2对应的默克尔路径的默克尔证明。共识节点1可以将上述内容以Rval消息格式发送到其他共识节点。其他共识节点在接收到共识节点1发送的上述内容后,可以将上述内容以Echo消息格式广播至其他共识节点。其他共识节点在接收到Echo消息后,即可以验证该消息是否合法,具体可以是在接收到消息后,针对该消息中的数据块,利用该数据块对应的默克尔路径的默克尔证明、根哈希进行验证;如果验证通过,则确定该消息合法。

延续上述的例子,共识节点3在接收到Echo消息后,确定该消息内容为:数据块4、Hash3、Hash12以及根Hash,则可以对该数据块4进行计算得到Hash4,将Hash4与接收到的Hash3计算得到Hash34,将Hash34与接收到的Hash12进行计算得到根Hash,如果该计算得到的根Hash与接收到的根Hash相同,则说明该Echo消息合法,如果验证不通过,则可以直接丢弃该Echo消息,以避免恶意节点对消息的篡改。

通过上述方式共识节点2-共识节点4可以接收到共识节点1(目标节点)发送的出所有数据块(在没有节点故意不发送数据块的情况下),任一节点可以在接收到N-f个Echo消息后,且该N-f个Echo消息均验证通过的情况下,选取其中任意N-2f个数据块还原待共识提议,并且可以重构默克尔树,比较重构得到的默克尔树的根Hash与之前接收到的Echo中的根Hash是否一致,如果一致则广播Ready消息。

可以理解的是,虽然上述是以目标节点1为例进行说明,但是在本说明书示出的共识方法中,各个共识节点没有主副之分,即任一个共识节点均为目标节点,任一共识节点均可以通过上述方式得到其他共识节点的待共识提议;任一共识节点也均是通过上述方式将本地的待共识提议发送至其他共识节点。

各个共识节点可以同时发出本地的待共识提议,因此目标节点可能会先后接收到不同共识节点发送的待共识提议。目标节点在接收到其他共识节点发的的待共识提议后,即可以确定待共识提议的初始投票值。

上述方式即为使用其中一种具体的量子安全的RBC广播协议广播待共识提议的过程。由于该可靠广播RBC协议采用了hash算法,因此上述可靠广播RBC协议是量子安全的。

另外,为了进一步提升安全性,各个共识节点广播待共识提议以及广播投票值所使用的可靠广播RBC协议可以是无条件安全的可靠广播RBC协议,例如可以是采用Bracha’sbroadcast协议。

可以理解的是,如果采用本说明书上文提出的获取明文交易的组合方式(即随机+按序),即不对交易进行加密处理,以及如果各个共识节点广播待共识提议、广播投票值所使用的可靠广播RBC协议是无条件安全的可靠广播RBC协议,则整体的拜占庭容错方法即是无条件安全的。

同理,如果采用本说明书上文提出的获取明文交易的组合方式(即随机+按序),以及如果各个共识节点广播待共识提议、广播投票值所使用的可靠广播RBC协议是量子安全的可靠广播RBC协议,则整体的拜占庭容错方法即是量子安全的。

采用上述拜占庭容错方法,可以针对区块链网络中的N个共识节点提出的待共识提议分别得到N个共识结果,在得到N个待共识提议的共识结果后,将共识结果为优先投票值的至少一个待共识提议组成的集合确定为待共识集合;在接收到待共识集合中的全部待共识提议后,按照预设的顺序执行该集合中的待共识提议。

例如,在针对全部共识节点提出的共识提议达成共识之后,各个正确的共识节点会得到相同的共识结果,结果为包含0和1的序列,例如,共存在7个共识节点P1-P7,其中P1-P6对应的6个待共识提议的共识结果为1,P7对应的待共识提议的共识结果为0,则确定P1-P6对应的待共识提议组成的集合为待共识集合S,此时任一正确的共识节点,均会得到这样的一个待共识集合,但是其有可能还未接收到该待共识集合S中的某些待共识提议,由于是采用可靠广播RBC协议广播的待共识提议,因此,可以确保该共识节点一定可以接收到待共识集合S中的全部待共识提议,基于此,共识节点可以持续等待,等到接收到待共识集合S中的全部待共识提议之后,可以按照预设的执行顺序,执行该共识集合S中的全部待共识提议,即执行P1-P6的待共识提议。

在区块链网络中,0或1用于指示是否将相应的共识提议打包成块。例如共有四个共识节点,共识节点1提出的共识提议为P1,共识节点2提出的共识提议为P2,共识节点3提出的共识提议为P3,共识节点4提出的共识提议为P4,使用上述拜占庭容错方法进行共识后得到一个01序列,例如得到的序列为(1,1,1,0),则达成的共识结果为所有节点将P1、P2以及P3打包成块存储在本地、不存储P4,即各个共识节点根据共识结果对各共识提议进行了一致性处理,保证各个共识节点的数据一致性。

下面从代码实现的角度对本说明书的基于可靠广播的可再投票二元共识方法的一种具体的实施方式进行说明:

伪代码如下:

上述伪代码中,对于任意b∈{0,1},*在某消息中作为参数时,代表区别于0和1之外的符号,例如final-voter(*)表示投票既不是对0也不是对1投票;bsetr由0、1和⊥组成的向量(多集);Random()为随机函数,随机生成0或1。

(1)在共识0轮,我们定义了新的函数broadcast-vote(v),该函数只在第0轮触发。一旦触发propose(v),则会相继出发broadcast-vote(v)函数且开始第0轮。一旦出发repropose(v),若副本pi仍处在第0轮,则会相继出发broadcast-vote(v)函数。因为共识方法更倾向对1进行投票,所有正确副本只有在之前执行过propose(0)才会执行repropose(1)。

(2)我们定义broadcast-vote(v)函数只有在第0轮触发,副本广播预投票pre-vote0(v)。如果v=1,副本pi将1添加到集合bset0。如果副本之前没有广播主投票main-vote0(1),则执行广播main-vote0(1)操作;若副本之前没有广播最终投票final-vote0(1),则执行RBC广播final-vote0(1)操作。

(3)因为每个副本在每轮中只广播main-voter()和final-voter()一次,我们在第二和第三阶段中加入了一些限制。一个副本如果之前没有广播过主投票main-voter(),则广播一次main-voter();类似的,如果一个副本之前没有广播过final-voter(),则广播一次final-voter();第0轮的公共抛币结果默认设置为1。

在其他共识轮,每轮分为三个阶段:

第一阶段

(1)副本pi为自己第r轮的输入ivr广播预投票pre-voter(ivr),其中ivr∈{0,1}。

(2)当副本pi收到f+1个对相同值v在相同轮数r的预投票pre-voter(v),且之前没有广播过对v在r轮的预投票,则副本pi广播该预投票。

(3)当副本pi收到2f+1个对相同值v在相同轮数r的预投票pre-voter(v),则将v插入集合bsetr中,其中bsetr是由0和1组成的集合。

第二阶段

(1)当集合bsetr不为空是,副本pi取bestr中第一个插入的值作为v,广播主投票main-voter(v)。一个正确的副本接受主投票main-voter(v)当且仅当v之前已经插入到本地的集合bsetr中。

(2)当副本pi收到来自N-f个不同副本的主投票main-voter(),进入第三阶段。

第三阶段

(1)当副本pi收到N-f个对相同v在相同轮数r的主投票main-voter(v)消息时,r-广播对v在r轮的最终投票final-voter(v),否则副本pir-广播在r轮的最终投票final-voter(*),其中是一个区别于0和1的符号。

最终投票final-voter()对副本pi只有在以下几种情况下有效:

·对于一个投票final-voter(v),副本pi已经将v插入bsetr

·对于final-voter(*),副本pi的bsetr包含0和1

(2)当副本pir-deliver了N-f个最终投票

A.若N-f个对相同v在相同轮数r的最终投票,则decede v,且将v作为下一轮输入;

B.若存在超过f+1个对相同v在相同轮数r的最终投票,则将v作为下一轮的输入;

C.否则将产生一个随机数作为下一轮的输入。

如图7所示,与前述一种基于可靠广播的可再投票二元共识方法相对应,本说明书还提供了一种基于可靠广播的可再投票二元共识装置,应用于分布式系统中的任意一共识节点,所述分布式系统包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述装置包括:

处理模块710,用于针对任一共识节点的待共识提议,确定该待共识提议的初始投票值;其中,初始投票值为优先投票值或其他投票值;在所述初始投票值为其他投票值、且满足预设条件的情况下,重新将所述初始投票值确定为优先投票值;

通信模块720,用于基于可靠广播RBC协议将首轮投票值广播至所述N个共识节点中的其他节点;

所述处理模块710,还用于基于其他共识节点广播的首轮投票值确定所述待共识提议的共识情况。

在一个实施例中,所述处理模块710,还用于在首轮未就所述优先投票值达成共识的情况下,循环执行其他轮共识步骤,直到达到预设停止条件;

在其他轮共识步骤中:

所述通信模块720,用于基于可靠广播RBC协议将本轮投票值广播至所述N个共识节点中的其他节点;

所述处理模块710,用于基于接收到的其他共识节点广播的本轮投票值确定所述待共识提议的共识情况。

在一个实施例中,所述通信模块720,用于将所述初始投票值广播至其他共识节点;调用所述处理模块710基于所述初始投票值以及其他共识节点广播的初始投票值确定首轮主投票值,并将确定的首轮主投票值广播至其他共识节点;调用所述处理模块710基于确定的首轮主投票值以及其他共识节点广播的首轮主投票值确定首轮最终投票值,利用可靠广播RBC协议将确定的最终投票值广播至其他共识节点。

在一个实施例中,所述可靠广播RBC协议为无条件安全的可靠广播RBC协议。

在一个实施例中,所述处理模块710,用于在接收到其他共识节点广播的f+1个初始投票值,所述f+1个初始投票值均相同、且与本地本轮广播的初始投票值不同的情况,将本地初始投票值修改为所述f+1个初始投票值对应的投票值,并再次广播修改后的初始投票值。

在一个实施例中,所述处理模块710,用于若本地初始投票值为优先投票值,则将优先投票值添加到首轮投票集合中,并将优先投票值确定为首轮主投票值;若所述初始投票值为其他投票值,则在接收到其他共识节点广播的2f+1个初始投票值、且所述2f+1个初始投票值均相同的情况下,将所述2f+1个初始投票值对应的值添加到首轮投票集合中;并将最先添加到首轮投票集合中的投票值确定为首轮主投票值。

在一个实施例中,所述处理模块710,用于若本地首轮主投票值为优先投票值,则确定首轮最终投票值为优先投票值;

若本地首轮主投票值为其他投票值,则基于所述首轮投票集合对接收到的其他共识节点广播的首轮主投票值进行合法性验证;

在接收到N-f个合法首轮主投票值的情况下,基于所述N-f个合法首轮主投票值确定最终投票值。

在一个实施例中,所述处理模块710,用于若所述N-f个合法首轮主投票值均相同,则确定所述N-f个主投票值对应的值为最终投票值;若所述N-f个合法首轮主投票值不完全相同,则确定最终投票值为不同于优先投票值与其他投票值的预定义值。

在一个实施例中,所述处理模块710,用于基于所述本轮投票集合对接收到的本轮最终投票值进行合法性验证;

在接收到n-f个合法首轮最终投票值的情况下,若所述N-f个首轮最终投票值均相同、为优先投票值或其他投票值,则将所述N-f个首轮最终投票值对应的投票值确定为所述待共识提议的共识结果,并将该N-f个首轮最终投票值对应的投票值确定为下轮共识的预投票的值;

若所述N-f个合法首轮最终投票值不完全相同,且其中存在f+1个首轮最终投票值相同、为优先投票值或其他投票值,则将所述f+1个首轮最终投票值对应的投票值确定为下轮共识的预投票值;

若所述N-f个首轮最终投票值中不存在f+1个相同的投票值,则将优先投票值确定为下轮共识的预投票值。

在一个实施例中,所述通信模块720,具体用于将本轮预投票值广播至其他共识节点;

所述处理模块710,具体用于基于其他共识节点广播的本轮预投票值确定本轮主投票值;

所述通信模块720,具体用于将确定的主投票值广播至其他共识节点;

所述处理模块710,具体用于基于其他共识节点广播的本轮主投票值确定本轮最终投票值;

所述通信模块720,具体用于利用可靠广播RBC协议将确定的最终投票值广播至其他共识节点。

在一个实施例中,所述可靠广播RBC协议为无条件安全的可靠广播RBC协议。

所述处理模块710,具体用于若接收到其他共识节点广播的f+1个本轮预投票值,所述f+1个本轮预投票值均相同、且与本地本轮广播的预投票值不同,则将本地预投票值修改为所述f+1个本轮预投票值对应的值,并再次广播修改后的预投票值。

在一个实施例中,所述处理模块710,具体用于在接收到其他共识节点广播的2f+1个本轮预投票值,且所述2f+1个本轮预投票值均相同的情况下,将所述2f+1个本轮预投票值对应的值添加到本轮投票集合中;将最先添加到本轮投票集合中的值确定为本轮主投票值。

在一个实施例中,所述处理模块710,具体用于基于所述本轮投票集合对接收到的本轮主投票值进行合法性验证;在接收到N-f个合法本轮主投票值的情况下,基于所述N-f个合法本轮主投票值确定最终投票值。

在一个实施例中,所述处理模块710,具体用于若所述N-f个合法本轮主投票值均相同,则将所述N-f个主投票值对应的值确定为最终投票值;若所述N-f个合法本轮主投票值不完全相同,则确定最终投票值为不同于优先投票值与其他投票值的预定义值。

在一个实施例中,所述处理模块710,具体用于在接收到N-f个本轮最终投票值的情况下,若所述N-f个本轮最终投票值均相同、为优先投票值或其他投票值,则确定所述N-f个本轮最终投票值对应的值为所述待共识提议的共识结果,并将所述N-f个本轮最终投票值对应的值确定为下轮共识的预投票值。若所述N-f个本轮最终投票值不完全相同,且其中存在f+1个本轮最终投票值相同、为优先投票值或其他投票值,则将所述f+1个本轮最终投票值对应的值确定为下轮共识的预投票值;若所述N-f个本轮最终投票值中不存在f+1个相同的投票值,则随机确定本地抛币值,所述本地抛币值为优先投票值或其他投票值,将所述本地抛币值确定为下轮共识的预投票值。

如图8所示,本说明书还提供了一种拜占庭容错装置,应用于分布式系统中的任意一共识节点,所述分布式系统包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述装置包括:

广播模块810,用于以预设的方式确定本次共识的待共识提议,利用可靠广播RBC协议将所述待共识提议广播至其他共识节点;

共识模块820,用于针对任一共识节点的待共识提议,采用如权利要求1-14任一项所述的基于可靠广播的可再投票二元共识方法确定该待共识提议的共识结果。

在一个实施例中,所述广播模块810,具体用于确定采用随机获取的方式获取交易的连续次数是否达到预设次数;若是,则确定本次获取较早存储在本地交易池中的预设数量的明文交易作为待共识提议;若否,则确定本次随机获取存储在本地交易池中的预设数量的明文交易作为待共识提议。

在一个实施例中,所述可靠广播RBC协议为无条件安全的可靠广播RBC协议。

在一个实施例中,所述可靠广播RBC协议为量子安全的可靠广播RBC协议。

上述装置中各个部件的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述的方法。该方法至少包括上述基于可靠广播的可再投票二元共识方法或者上述拜占庭容错方法。

图9示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。

处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。

存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。

输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。

总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的方法。该方法至少包括上述基于可靠广播的可再投票二元共识方法或者上述拜占庭容错方法。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。

29页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于会议系统的参会人员监测处理方法、装置、智能终端

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!