CN113783935B - 一种拜占庭容错方法及装置 - Google Patents
一种拜占庭容错方法及装置 Download PDFInfo
- Publication number
- CN113783935B CN113783935B CN202110925724.7A CN202110925724A CN113783935B CN 113783935 B CN113783935 B CN 113783935B CN 202110925724 A CN202110925724 A CN 202110925724A CN 113783935 B CN113783935 B CN 113783935B
- Authority
- CN
- China
- Prior art keywords
- consensus
- proposal
- value
- voting
- binary
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/02—Details
- H04L12/16—Arrangements for providing special services to substations
- H04L12/18—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Hardware Redundancy (AREA)
Abstract
本申请实施例中提供了一种拜占庭容错方法,其特征在于,应用于分布式系统中的任一共识节点,所述分布式系统至少包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述方法包括:基于可靠广播RBC协议将本地待共识提议广播至其他共识节点;针对任一共识节点的待共识提议,基于本地接收情况确定该待共识提议的初始投票值;初始投票值为优先投票值或其他投票值;针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果。采用本实施例提出的方法,可以使各个待共识提议的二元共识过程并行处理,缩短了每次共识的耗时,提高了共识效率,进而提高了分布式系统的处理能力。
Description
技术领域
本申请涉及计算机技术领域,具体地,涉及一种拜占庭容错方法及装置。
背景技术
基于二元共识的拜占庭容错方法是分布式系统中常用的用于处理拜占庭问题的方法之一,在该方法中,在每次共识过程中,分布式系统中的任一共识节点,会针对每个共识节点提出的待共识提议分别与其他共识节点交互意见以达成共识,并最终输出每个待共识提议的共识结果,在每次共识过程中,共识节点通常并不能针对各个待共识提议完全并行的进行共识处理,因此,目前基于二元共识的拜占庭容错方法共识效率较低。
发明内容
本申请实施例中提供了一种拜占庭容错方法及装置,用于解决现有技术中基于二元共识的拜占庭容错方法执行效率低下的问题。
根据本申请实施例的第一个方面,提供了一种拜占庭容错方法,其特征在于,应用于分布式系统中的任一共识节点,所述分布式系统至少包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述方法包括:
基于可靠广播RBC协议将本地待共识提议广播至其他共识节点;
针对任一共识节点的待共识提议,基于本地接收情况确定该待共识提议的初始投票值;初始投票值为优先投票值或其他投票值;
针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果。
根据本申请实施例的第二个方面,提供了一种拜占庭容错装置,其特征在于,应用于分布式系统中的任一共识节点,所述分布式系统至少包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述装置包括:
通信模块,用于基于可靠广播RBC协议将本地待共识提议广播至其他共识节点;
处理模块,针对任一共识节点的待共识提议,基于本地接收情况确定该待共识提议的初始投票值;初始投票值为优先投票值或其他投票值;针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果。
采用本申请实施例中提供的拜占庭容错方法,各个共识节点相互基于可靠广播RBC协议广播本地的待共识提议,并基于本地接收情况针对每个待共识提议确定初始投票值,采用可再投票的二元共识算法确定各待共识提议的共识结果,使共识节点能够针对各个待共识提议完全并行的进行共识处理,缩短了每次共识的耗时,提高了共识的效率,进而提高了分布式系统的处理能力。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本说明书实施例的一种现有的拜占庭容错方法的结构示意图;
图2为本说明书实施的一种拜占庭容错方法的流程示意图;
图3为本说明书实施例的一种拜占庭容错方法的结构示意图;
图4为本说明书实施例的一种可再投票的二元共识算法的流程示意图;
图5为本说明书实施例的一种广播共识消息的流程示意图;
图6为本说明书实施例的另一种可再投票的二元共识算法的流程示意图;
图7为本说明书实施例的一种拜占庭容错装置的结构示意图;
图8是用于配置本说明书实施例装置的一种设备的结构示意图。
具体实施方式
集中式系统是指由一台或多台主计算机组成中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统所有的功能均由其集中处理,集中式系统连接的每个终端或客户端仅仅负责数据的录入和输出,数据的处理与存储完全交由该中心节点来完成。虽然集中式系统部署结构简单易于实现,但是当中心节点的主机出现故障时,例如出现宕机等状态时,整个系统会处于不可用状态,这会造成相当严重的后果。因此,目前业界已经开始采用分布式系统来解决上述问题,一种方案是将数据分区,即将数据分块存储到不同计算机设备上;另一种方案是采用多台计算机设备分别存储相同的数据,并提供相同的服务。上述第一种方案,还是无法从根本上解决问题,当某台计算机设备出现故障时,会有部分数据丢失,可用性还是不强。采用上述第二种方案,可以最大程度的确保系统的可用性,减少单台计算机设备发生故障时产生的危害,目前有较多的服务系统采用上述第二种方案进行部署,例如区块链网络。在这种部署的方式下,就要确保系统中各台计算机设备能够存储有相同的数据,保证数据的一致性,因此共识问题也就应运而生。另外,目前多数网络环境是异步的,即系统中各个节点发送的消息并不能保证在一个已知的时间内到达,并且系统中通常会出现单个节点计算机设备故障或作恶的情况,上述作恶的节点可以称为拜占庭节点,如何在这种情况下保证系统中的各正常节点可以进行共识,是目前业界主要的研究方向。
针对上述分布式系统中的问题,业界存在多种解决方案,其中一种为基于二元共识的拜占庭方法,该方案中是采用可靠广播RBC协议以及二元共识,对各个共识节点的待共识提议进行共识。任一共识节点会在本地针对每个共识节点提出的待共识提议利用可靠广播RBC以及二元共识ABA(asynchronous binary agreement)确定该待共识提议的共识结果。例如,分布式系统中共存在N个共识节点,其中该分布式系统中最多允许存在f个恶意节点或称拜占庭节点,N≥3f+1,f>0,那么任一共识节点会维护N对RBC+ABA的实例,每对实例用于确定一个待共识提议的共识结果,并且分布式系统中,各个共识节点会在一次共识过程中,同时得到全部待共识提议的共识结果后才确定本次共识过程结束,该方法中,任一共识节点,会基于可靠广播RBC协议向其他共识节点广播本地的待共识提议,同时也会基于可靠广播RBC协议接收其他共识节点广播的自身的待共识提议,其会在接收到一个目标节点的待共识提议后,确定该待共识提议的初始投票值为1,并开始与其他共识节点交互投票值从而执行二元共识即执行ABA,并且在接收到N-f个共识节点广播的待共识提议后,就针对这N-f个待共识提议分别执行ABA,直到针对这N-f个待共识提议分别执行完成ABA即得到N-f个共识结果后,才串行的针对剩下的f个待共识提议执行ABA,在得N个待共识提议的共识结果后,本次共识过程才算完成。
如图1所示,该实施例中共存在7个共识节点,即N为7,f为2,该图为任一共识节点内部维护的RBC+ABA实例,其需要维护7对RBC+ABA实例,即采用RBC+ABA对每个共识节点的待共识提议进行共识,为了方便说明将任一共识节点称为目标节点,目标节点在基于可靠广播RBC协议接收到了节点0-节点4的待共识提议后,就开始针对节点0-节点4的待共识提议分别执行ABA,即将ABA0-ABA4的输入均设置为1并开始执行,而不在继续接收节点5和节点6的待共识提议,即针对N-f(7-2)个共识节点的待共识提议进行ABA。在执行完针对节点0-节点4的待共识提议的ABA过程后会得到5个ABA输出结果即得到5个共识结果,在确定共识结果均为1后,此时,目标节点才会将对应于节点5和节点6的ABA5和ABA6的输入设置为0并开始执行,如图中所示,ABA2是ABA0-ABA4中最后一个执行完的,则在ABA2执行完成后,才开始执行ABA5和ABA6,直到得到ABA5和ABA6执行完毕得到输出结果后,即一共得到7个共识结果(基于全部共识节点的待共识提议均达成共识)后,本次的执行过程才算完成。
综上可见,现有的基于二元共识的拜占庭容错方法中,需要针对N-f个待共识提议(如图1中,N-f=5)分别执行完二元共识之后,才能开始针对剩下的f个待共识提议执行二元共识过程,因此每次的共识过程耗时较长,效率较低。
针对上述问题,本申请实施例中提供了一种拜占庭容错方法,应用于分布式系统中的任一个共识节点,基于可靠广播RBC协议广播和接收其他共识节点的待共识提议,基于本地接收情况确定该待共识提议的初始投票值,并基于可再投票的二元共识算法对各个待共识提议达成共识,可以有效提高每次共识的效率。
本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java和直译式脚本语言JavaScript等。
为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图2所示,基于以上说明本说明书提出的一种拜占庭容错方法,应用于分布式系统中的任一共识节点,分布式系统至少包括N个共识节点,其中,共识节点是指参与共识过程的节点,可以理解的是,在分布式系统中通常还会存在其他不参与共识的节点,这些节点仅接收和存储共识节点的共识结果而不参与共识过程;另外,当系统中的恶意节点或称拜占庭节点过多时任何一种共识方法均无法确保系统中的共识节点达成共识,因此本说明书中规定该分布式系统包括N个共识节点,该N个共识节点中最多允许存在f个恶意节点,N≥3f+1,所述f和N均为大于0的整数,该方法包括:
S201,基于可靠广播RBC协议将本地待共识提议广播至其他共识节点;
S202,针对任一共识节点的待共识提议,基于本地接收情况确定该待共识提议的初始投票值;初始投票值为优先投票值或其他投票值;
S203,针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果。
待共识提议在不同分布式系统的应用场景中可以表示不同的实际含义。例如,在区块链网络中,待共识提议可以是共识节点中某个共识节点从本地交易池获取的、需要其他共识节点一同存储的一批交易,而某一节点的提出的投票值则表示是否同意存储该批交易;在其他应用场景中,待共识提议和投票值可以具体有其他具体含义,本说明书对此不进行限定。为了方便说明,下文中将执行该方法的节点称为目标节点。
在上述S201中,目标节点可以采用任意可靠广播RBC协议将本地的待共识提议广播至其他共识节点。
由于本说明书提出的拜占庭容错方法中,各节点直接没有主副之分,其他共识节点也在执行相同的步骤,因此目标节点可以基于可靠广播RBC协议接收到其他共识节点广播的待共识提议。
下面以分布式系统为区块链网络为例对上述广播过程进行说明,目标节点可以是从本地交易池中随机获取预设数量的交易,或者按照交易存储的先后顺序,优先获取较早存储的预设数量的交易。可以理解的是,由于各个共识节点都会接收客户端请求的交易,因此各个共识节点都可以在本地维护自己的交易池。目标节点在获取了交易后,可以将获取的交易打包成为本次的待共识提议。目标节点在获取了本地待共识提议后,即可以基于可靠广播RBC协议,向其他共识节点广播本地待共识提议,同时也可以基于可靠广播RBC协议接收其他共识节点广播的待共识提议。下面以一种可靠广播RBC协议的具体实现方式进行举例说明:
目标节点可以将待共识提议采用纠删码处理,得到N个数据块;基于得到的N个数据块的哈希值构建默克尔树,得到根哈希以及对应于每个数据块的默克尔路径的默克尔证明;将所述N个数据块中的部分数据块保存在本地,将其他数据块、根哈希以及其他数据块对应的默克尔路径发送至其他共识节点,以使其他共识节点对所述数据块进行广播和验证。以共有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为例进行说明,但是在本说明书示出的共识方法中,各个共识节点没有主副之分,即任一个共识节点均为目标节点,任一共识节点均可以通过上述方式得到其他共识节点的待共识提议;任一共识节点也均是通过上述方式将本地的待共识提议发送至其他共识节点。
各个共识节点可以同时发出本地的待共识提议,因此目标节点可能会先后接收到不同共识节点发送的待共识提议。目标节点在接收到其他共识节点发的的待共识提议后,可以针对每一个待共识均提议执行S201-S203,即可以针对区块链网络中每个共识节点广播的待共识提议分别达成共识。
可以理解的是,上述仅为可靠广播RBC协议的一种具体实现方式,还可以通过其他方式实现可靠广播RBC,具体可以参照相关技术,本说明书对此不进行限定。
在上述S202中,目标节点具体可以是在接收到任一个共识节点通过可靠广播RBC协议广播的待共识提议的情况下,若还未针对该待共识提议开始执行所述可再投票的二元共识算法,则将该待共识提议的初始投票值确定为优先投票值;
另外,若已针对该待共识提议开始执行可再投票的二元共识算法,且还未得到该待共识提议的共识结果的情况下,则重新将该待共识提议的初始投票值确定为优先投票值;
在接收到N-f个共识节点广播的待共识提议的情况下,将还未开始执行可再投票的二元共识算法的待共识提议的初始投票值确定为其他投票值。
其中,投票值包括优先投票值以及其他投票值两种值,本说明书提出设置其中一种投票值为优先投票值,即希望各个共识节点偏向于该优先投票值达成共识,在一个具体的示例中可以用1和0分别表示优先投票值以及其他投票值,其中,优先投票值可以为1也可以为0,下文中均以优先投票值为1,以其他投票值为0为例进行说明。
以N为7,f为2为例进行说明,目标节点在接收到任一共识节点广播的待共识提议之后,确定是否已经开始针对该待共识提议执行了再投票的二元共识算法,如果没有,则将该待共识提议的初始投票值确定为优先投票值1,并以优先投票值1作为可再投票的二元共识算法的输入,以得到针对该待共识提议的共识结果。
另外,在确定接收到N-f即7-2=5个共识节点广播的待共识提议,即已经开始针对5个待共识提议分别以优先投票值1作为输入,开始执行可再投票的二元共识算法时,可以将剩余的其他还未开始执行可再投票的二元共识算法的2个待共识提议的初始投票值确定为其他投票值0,并开始执行可再投票的二元共识算法。
同时,目标节点在接收到任一共识节点广播的待共识提议之后,若已针对该待共识提议开始执行可再投票的二元共识算法,并且该待共识提议的初始投票值为其他投票值0,且还未得到该待共识提议的共识结果,则重新将该待共识提议的初始投票值确定为优先投票值。
可靠广播RBC协议可以保证目标节点在接收任一待共识提议时,仅会接收到一次,而非多次接收同一待共识提议,因此在针对某一待共识提议已经开始执行可再投票的二元共识算法,而后才接收到该待共识提议,则说明该待共识提议的初始投票值为其他投票值0,进一步可以将该待共识提议的初始投票值修改为优先投票值1,并再次以优先投票值1为输入再次触发执行可再投票的二元共识算法。
上述S203中,可以是针对任一待共识提议,在确定该待共识提议存在初始投票值的情况下,则开始采用可再投票的二元共识算法确定该待共识提议的共识结果,具体可以是针对任一待共识提议,在确定该待共识提议存在初始投票值的情况下,即将该初始投票值作为所述可再投票的二元共识算法的输入,以该算法的输出作为该待共识提议的共识结果。
可见,本说明书中提出的拜占庭容错方法,不需要等待N-f个共识节点的待共识提议的二元共识步骤执行完成后,才开始执行剩下f个待共识提议的二元共识步骤,而是基于每个待共识提交的接收情况直接确定各个待共识提议的初始投票值,并触发执行各待共识提议的二元共识过程,从这个层面而言,任何一个待共识提议的二元共识过程的执行,不需要依赖其他待共识提议的共识完成情况,因此各个待共识提议的共识过程是并行处理的,从而缩短了每次共识过程的时长,提高了共识效率。
如图3所述,对标图1所示的现有的基于二元共识的拜占庭容错算法,图中仍共存在7个共识节点,即N为7,f为2,目标节点在接收到了节点0-节点4的待共识提议后,就开始针对节点0-节点4的待共识提议分别执行可再投票的二元共识算法RABA(reproposableasynchronous binary agreement),即将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的输出结果。与图1所示出的不同,本说明书提出的拜占庭容错方法不是在执行完节点0-节点4的待共识提议的ABA过程后,才执行ABA5和ABA6,通常情况下各个共识节点的二元共识过程即ABA过程耗时较长,如果等待N-f个待共识提议的二元共识过程结束后,才串行的执行剩下的f个待共识提议的ABA过程,整体共识过程耗时会较长,本说明提出的拜占庭容错方法中,可以保障各个待共识提议的二元共识过程基本上是在并行处理和发生的,因此,明显缩短了每次共识过程的时长,提高了每次共识的效率。
本说明书提出的新的并行运行二元共识的方法即提出的拜占庭容错方法,除了应用在区块链网络中,还可以应用在多方安全计算、和interactive consistency等多个方向中。
下面对上述S203中的可再投票的二元共识算法进行说明,本说明书提出的可再投票的二元共识算法,是指允许针对任一待共识提议的输入由其他投票值更改为优先投票值、且输出的共识结果偏向于优先投票值的二元共识算法。
可以采用多种方式实现可再投票的二元共识算法,下面以对于一个具体的可再投票的二元共识算法的实施方式进行说明,可以理解的是还可以采用其他可再投票的二元共识算法实现本说明书提出的拜占庭容错方法,本说明书对可再投票二元共识算法的具体实现方式不进行限定。
如图4所示,该算法包括:
S401,针对任一共识节点的待共识提议,确定对应于该待共识提议的初始投票值以及初始辅助值;
S402,广播携带有初始投票值以及初始辅助值的首轮共识消息;
S403,根据其他共识节点广播的针对该待共识提议的首轮共识消息以及首轮共识策略,就所述优先投票值达成共识。
投票值,用于表示各个共识节点对该数据的共识意见,其中投票值包括优先投票值以及其他投票值两种值,即各个共识节点可以对待共识提议存在共两种共识意见,优先投票值以及其他投票值在一个实施例中,可以用1和0分别进行表示。辅助值则为本说明书提出的用于协助各个节点就待共识提议达成共识的一种辅助意见,其包括优先投票值以及其他投票值以及空值。
在S401中,针对待共识提议确定初始投票值以及初始辅助值,初始辅助值可以默认为空,而初始投票值可以根据上述S202中的内容确定,这里不再进行详述,直接基于S202中得到的初始投票值执行S402,这里可以理解为可再投票的二元共识算法接收上传协议的输入,确定待共识提议的初始投票值;
在S401中,目标节点在确定了初始投票值的情况下,不论初始投票值为优先投票值还是其他投票值,目标节点均可以执行S402,即广播该初始投票值以及初始辅助值,并接收其他共识节点广播的针对该待共识提议的初始投票值以及初始辅助值。
另外,本说明书提出为了使各个共识节点能够在首轮共识过程中就该优先投票值快速达成共识,因此允许目标节点在确定的初始投票值为其他投票值的情况下,在又接收到了该待共识提议后可以重新将所述初始投票值确定为优先投票值可以参考上述S202的过程,并再次执行触发执行S401-S403。
上述S402中,具体可以是执行图5所示的方法:
S501,将初始投票值和初始辅助值携带在首轮第一类共识消息中进行广播;
目标节点可以将本地确定的初始投票值以及初始辅助值添加到首轮第一类共识消息中,并通过认证信道将首轮第一类共识消息传输至分布式系统中的其他共识节点,当然在没有认证信道时,为了保证数据传输的安全性,还可以通过数字签名或公钥技术设施等密码学工具保证共识消息传输的安全性,本说明书对此不进行限定。在一个实施例中,第一类共识消息可以是bvalr格式的消息,目标节点可以广播形如bvalr(estr,majr)消息,其中estr为投票值,majr为辅助值,投票值estr是一个二进制数(0或1),majr∈{0,1,⊥},在首轮中,majr设置为空,r为共识轮,首轮即第0轮,共识轮从0开始以1为步长递增。
S502,接收其他共识节点广播的首轮第一类共识消息;
可以理解的是,分布式系统中的全部正确节点都在执行目标节点所执行的步骤,即其他共识节点也会发送包括针对该待共识提议的初始投票值以及初始辅助值的首轮第一类共识消息;此时,目标节点会接收到来自其他共识节点发送的首轮第一类共识消息。
在一个实施例中,如果目标节点在首轮共识接收到f+1个首轮第一类共识消息,即超过恶意节点数量的首轮第一类共识消息,如果这f+1个首轮第一类共识消息中的投票值相同,且与本地广播的投票值不一致,目标节点则将本地初始投票值修改为所述f+1个第一类共识消息中的投票值,再次广播第一类共识消息。例如,如果目标节点收到f+1个bval0(b,⊥)消息,且b与该目标节点的当前轮首次广播的投票值不相等,该目标节点将广播bval0(b,⊥)。本步骤目的是为了让本地节点可以更正本地投票值。
S503,基于所述初始投票值以及其他共识节点广播的首轮第一类共识消息,重新确定投票值以及辅助值,并将重新确定的投票值以及辅助值携带在首轮第二类共识消息中进行广播。
其中,各个共识节点每轮仅发送一次第二类共识消息,具体确定第二类共识消息中携带信息的方式可以如下:
在一个实施例中,可以是在本地首次通过第一类共识消息广播的初始投票值为优先投票值的情况下,将该初始投票值添加到第一集合中;并将所述第一集合中的投票值确定为首轮第二类共识消息中的投票值以及辅助值。
结合上述例子,目标节点广播bval0(est0,maj0)消息,其中est0为1(优先投票值),则可以直接将1存入bin_values0(首轮第一集合,r=0)并广播aux0(1,1)。其中auxr为第二类共识消息格式。
在一个实施例中,在目标节点首次通过第一类共识消息广播的初始投票值不为优先投票值的情况下,若接收到其他共识节点广播的f+1个首轮第一类共识消息,且所述f+1个第一类共识消息中的携带的投票值均为优先投票值,则将所述优先投票值添加到首轮第一集合中,并将所述首轮第一集合中的投票值确定为首轮第二类共识消息中的投票值以及辅助值。
例如,目标节点收到f+1个bval0(b,⊥)消息,其中,b=1,即为优先投票值,则将b存入bin_values0;若此时目标节点还没发送过aux0()消息,则广播aux0(1,1)。
在一个实施例中,在目标节点首次通过第一类共识消息广播的初始投票值不为优先投票值的情况下,若接收到其他共识节点广播的法定数量的首轮第一类共识消息,且所述法定数量的第一类共识消息中的携带的投票值均不为优先投票值即均为其他投票值,则将该其他投票值添加到首轮第一集合中,并将所述首轮第一集合中的投票值确定为首轮第二类共识消息中的投票值以及辅助值。其中,法定数量即为2f+1个共识节点(包括自身节点),如无特殊规定,下文中的法定数量均为2f+1。
例如,目标节点接收到了2f+1个bval0(b,⊥)消息,其中,b为0,即不为优先投票值,则目标节点将b添加到集合bin_values0中,如果此时目标节点还没发过aux0()消息,则广播aux0(0,0)。
上述方式中,在目标节点本地通过第一类共识消息广播优先投票值后,即可以直接通过第二类共识消息广播优先投票值,而无需参考其他共识节点的意见,目的也是在于可以使各个节点可以就优先投票值快速达成共识,同时也可以使再投票后,针对优先投票值进行的共识进度可以超过针对其他投票值的共识进度。
目标节点在接收到其他共识节点广播的首轮第二类共识消息后,即可以根据首轮共识策略,确定是否能够就所述优先投票值达成共识,其中,首轮共识策略为使各个共识节点在首轮能够就所述优先投票值快速达成共识的策略。
在一个实施例中,首轮共识策略具体可以是:
在接收到法定数量的首轮第二类共识消息后,将接收到的第二类共识消息中的投票值存入到首轮第二集合中,将辅助值存入到首轮第三集合中;将首轮公共抛币值置为所述优先投票值;
在首轮第二集合中仅包含一种投票值的情况下,若接收到了超过(N+f+1)/2个携带优先投票值的第二类共识消息,则确定共识结果为所述优先投票值;若接收到了超过(N+f+1)/2个携带其他投票值的第二类共识消息,则将次轮第一类共识消息中携带的投票值以及辅助值均设置为其他投票值。
例如,目标节点在收到N-f个aux0()消息(首轮第二类共识消息)后,目标节点将接收到的aux0()消息中的投票值和辅助值均存储在vals0(首轮第二集合)和avals0(首轮第三集合)中。如果,集合vals0中仅包含b,其中b为0或1,并且接收到了超过(N+f+1)/2个相同b的aux0(b,*),*可以是0、1或空中的任意一个值,且b=1(优先投票值),则确定共识结果为1;如果b=0,目标节点则将estr+1(下一共识轮的投票值)与majr+1(下一共识轮的辅助值)都设置为b。
另外,若未收到超过(N+f+1)/2个携带相同投票值的第二类共识消息,则将次轮第一类共识消息中携带的投票值以及辅助值均设置为优先投票值。
结合上述例子,若目标节点未收到超过(N+f+1)/2个携带相同投票值的第二类共识消息,则将estr+1与majr+1都设置为1。
可见,采用上述首轮共识策略,可以使各个共识节点就优先投票值快速达成共识,提高了共识效率。
上述S401-S403为可再投票的二元共识算法的首轮共识的方式,下面介绍其他轮共识的方式:
除了首轮以外,其他轮的共识均是采用如图6所示的方法达成共识:
在首轮没有就优先投票值达成共识的情况下,则可以开始循环执行S601-S602,直到得到针对该待共识提议的共识结果:
S601,广播本轮共识消息,所述共识消息中携带本轮投票值以及辅助值;
S602,基于接收到的其他共识节点广播的针对该待共识提议的投票值和辅助值,确定是否得到共识结果。
其中,在S601中具体可以是:
S601a,将投票值和辅助值携带在第一类共识消息中进行广播;
S601b,接收其他共识节点广播的第一类共识消息;
S601c,基于接收到的第一类共识消息重新确定投票值以及辅助值,并将重新确定的投票值以及辅助值携带在第二类共识消息中进行广播。
其中,S601a-S601b的过程可以参照上述S501-S502中的内容,这里不在进行详述,区别仅在于携带在第一类共识消息中广播的投票值以及辅助值不为初始投票值和初始辅助值,而是首轮共识之后,基于消息传输结果重新确定的投票值和辅助值,具体可以参照上述关于S403以及后续S602的部分,这里不进行详述。
S601c中,可以是目标节点在接收到法定数量的第一类共识消息后,根据接收到的第一类共识消息重新确定投票值以及辅助值。
具体的,如果这2f+1个第一类共识消息中的投票值相同,目标节点则将该投票值添加到第一集合中。例如,如果目标节点收到2f+1个bvalr(b,*)消息,b∈{0,1}。则目标节点将b添加到第一集合bin_valuesr中。此外,目标节点将上述2f+1个第一类共识消息中的辅助值,也添加到辅助值集合majs中。本步骤中,在接收到法定数量的相同投票值的情况下,则将该投票值存储到第一集合中,意味着系统中大多数节点可能达成了共识。目标节点可以将第一集合中的投票值,与上一轮的公共抛币值进行比较,并根据比较结果确定第二类共识消息中携带的投票值以及辅助值。其中,公共抛币值,只有0或1两种值,各个共识节点可以在某一轮中获得相同的公共抛币值,且除了首轮以外其他的每一轮的抛币值是随机的,获得公共抛币值的方法可以是采用门限签名算法等方式获得,具体内容可以参照相关技术,这里不进行限定。
具体的根据比较结果确定第二类共识消息中携带的投票值以及辅助值的方式可以如下:
一种情况是,如果第一集合中的投票值与上一轮的公共抛币值相等,并且目标节点接收过的第一类共识消息中携带的投票值均为该第一集合中的投票值,携带的辅助值均为该第一集合中的投票值或空,则将第二类共识消息中的投票值以及辅助值设置为该第一集合中的投票值并进行广播;如果还接收过携带其他投票值的第一类共识消息,则将第二类共识消息中的投票值设置为空,并且将第二类共识消息中的辅助值设置为该第一集合中的投票值。
延续上述的例子,如果第一集合中的投票值为b,上一轮的公共抛币值为Sr-1,如果b=Sr-1,并且目标节点仅接收过bvalr(b,b)和bvalr(b,⊥)消息,则直接广播auxr(b,b),如果还接收过携带其他投票值的第一类共识消息,则广播auxr(⊥,b)。
另一种情况是,如果第一集合中的投票值与上一轮的公共抛币值不相等,并且目标节点接收过的第一类共识消息中携带的投票值以及辅助值均为该第一集合中的投票值的情况下,则将第二类共识消息中的投票值以及辅助值设置为该第一集合中的投票值,并进行广播;如果还接收过携带其他投票值或辅助值的第一类共识消息,则将第二类共识消息中的投票值设置为空,并且将第二类共识消息中的辅助值设置为该第一集合中的投票值。延续上述的例子,如果第一集合中的投票值为b,上一轮的公共抛币值为Sr-1,如果其中,由于抛币值只有两个值0或1,投票值也只有两个值0或1,因此在投票值b不等于抛币值Sr-1时,则等于1-Sr-1即在这种情况下,且目标节点仅接收过bvalr(b,b)消息,则直接广播auxr(b,b),如果还接收过携带其他投票值或辅助值的第一类共识消息,则广播auxr(⊥,b)。
每个共识节点每轮只广播一次第二共识信息,上述方式为目标节点确定非首轮第二类共识消息中携带的投票值以及辅助值的方式。
目标节点在发送第二类共识消息时,由于其他共识节点也会异步的发送第二类共识消息,因此目标节点会接收到其他共识节点发的第二类共识消息。目标节点在接收到其他共识节点发送的共识消息后,可以先将一些明显非法的第二类共识消息删除,根据上述内容可知,由于正确的共识节点仅会广播形如auxr(b,b)以及auxr(⊥,b)的第二类共识消息,因此在接收到携带其他投票值或辅助值的消息时可以直接丢弃,由于第二类共识消息中的投票值是存储在第一集合中的,因此可以在接收到第二类共识消息后,利用第一集合确定合法和非法消息。
在上述S602中,目标共识节点基于接收到的投票值和辅助值确定是否得到共识结果,如果没有得到共识结果,则确定下一轮的投票值以及辅助值,并重新开始执行S601。
下面对目标共识节点基于接收到的投票值和辅助值确定共识结果,以及确定下一轮投票值和辅助值的方法进行详述:
目标节点在接收到法定数量的第二类共识消息后,可以将接收到的第二类共识消息中的投票值以及辅助值分别存入第二集合valsr以及第三集合avalsr中,并获得本轮全部共识节点统一的公共抛币值。例如,目标节点在接收到2f+1个auxr()消息后,可以将接收到的auxr()消息中的投票值和辅助值分别存入集合valsr第二集合)和avalsr(第三集合)中。目标节点可以根据接收到的第二类共识消息的情况,按照下述方式确定共识结果、或下一轮共识中第一类共识消息所携带的投票值以及辅助值:
(a)如果目标节点接收到的第二类共识消息中,存在超过法定数量的第二类共识消息是相同的,且这些第二类共识消息中投票值与辅助值相同,目标节点则将该第二类共识消息中的投票值与本轮公共抛币值进行比较,如果该投票值与本轮公共抛币值相同,则目标共识节点确定共识结果为该投票值;如果不相同,目标节点则将下一轮第一类共识消息中携带的投票值以及辅助值均设置为这些第二类共识消息中的投票值,并开始执行下一轮共识。
例如,如果目标节点收到法定数量条auxr(b,b)信息,目标节点将b与本轮公共抛币Sr进行比较。如果b=Sr,目标节点确定共识结果为b;否则,目标节点将estr+1与majr+1都设置为b,并进入下一轮共识。
(b)如果目标节点只接收到过合法第二类共识消息,且所述第二集合中的投票值为一种投票值和空,并且至少有法定数量条第二类共识消息的辅助值为该种投票值,则将该种投票值与上一轮共识和本轮共识的公共抛币值分别进行比较。如果该种投票值与上一轮和本轮的公共抛币值均相同,则目标节点确定共识结果该为该种投票值,如果该种投票值与上一轮公共抛币值和/或本轮抛币值不相同,目标共识节点则将下一轮第一类共识消息中的投票值以及辅助值均设置为该种投票值,并开始执行下一轮共识。
例如,如果目标节点只接收到了auxr(b,*)和auxr(⊥,*),并且至少有法定数量的第二类共识消息为auxr(*,b),则目标节点将b与两轮公共抛币Sr-1与Sr进行比较。如果b=Sr-1且b=Sr,目标节点确定共识结果为b,否则目标节点将estr+1与majr+1都设置为b,并进入下一轮。
(c)如果目标节点接收到了法定数量的合法第二类共识消息,所述法定数量条第二类共识消息携带的辅助值不完全相同,第二集合中的投票值为一种投票值和空,且该种投票值与上一轮公共抛币值相同,则目标共识节点将下一轮共识中第一类共识消息中的投票值以及辅助值均设置为该种投票值,并开始执行下一轮共识。例如,如果目标节点接收了N-f条auxr(b,*)和auxr(⊥,*)消息,其中同时包含auxr(*,0)与auxr(*,1),且b=Sr-1,则目标节点将estr+1与majr+1都设置为b,并进入下一轮共识。
(d)如果目标节点接收到的第二类共识消息的情况不属于上述三种情况,则目标节点可以将本轮公共抛币值作为下一轮第一类共识消息的投票值。另外,如果当前共识轮为首轮,目标节点则将下一轮的第一类共识消息中的辅助值也设置为本轮公共抛币值,如果当前共识轮不为首轮,目标节点则将下一轮的第一共消息中的辅助值设置为第二集合中的出现次数超过预设次数的值,并进入下一轮共识。
例如,如果目标节点接收到的第二类共识消息的情况不属于上述三种情况,目标节点将当轮公共抛币值作为下一轮输入(即将estr+1设置为Sr)。此外,若轮数r=0,目标节点将majr+1设置为Sr;若r>0,目标节点将majr+1设置为majority(valsr),其中,majority(valsr)=b,b∈{0,1},代表b在valsr中出现次数占大多数,即valsr中b的数量不小于若不存在这样的b,则令majority(valsr)=⊥。
可以理解的是,上述方法是共识节点中的任一正确节点所执行的方法,其他正确共识节点也在异步执行上述方法,采用上述方式,设于优先投票值,在首轮中各个共识节点大概率可以就优先投票值达成共识,可以使异步环境下的分布式系统中的各个共识节点快速就优先投票值达到共识状态,大大提升了异步环境下分布式系统的共识效率。由于,可再投票的二元共识算法,可以允许目标节点针对任一待共识提议,多次确定初始投票值,具体是在确定某个待共识提议的初始投票值为其他投票值0的情况下,以其他投票值0作为输入开始执行可再投票的二元共识算法,且未得到共识结果的情况下,又接收到了该待共识提议,那么可以再次投票,即再次确定该待共识提议的共识结果为优先投票值1,并以优先投票值1作为输入再次执行可再投票的二元共识算法,并且由于该再投票的二元共识算法是偏向于优先投票值达成共识的,且大概率在共识首轮就可以基于优先投票值达成共识,并且在共识首轮无法基于其他投票值达成共识,即该可再投票的二元共识算法偏向于输出为1,且在输入为0和输入为1的两种情况下,在输入为1的情况下该算法执行更快,因此,可以使用可再投票的二元共识算法来实现本说明书提出的拜占庭容错方法。
同时,采用可再投票的共识算法可以保证分布式系统中的共识节点满足以下性质,即以下技术效果:
有效性:在所有正确节点广播的投票值均为v、且没有再次广播其他投票值的情况下,那么所有正确节点的共识结果均为该投票值v;
一致终止:在所有正确节点广播的投票值为相同值v、且没有再次广播其他投票值的情况下,那么所有正确节点均可以终止共识操作,即达成共识;
共识性:如果任一个正确节点确定某一投票值v为共识结果,那么其他终止共识操作的正确节点也会确定该投票值v为共识结果;
有偏有效性:如果f+1个正确节点广播投票值v,那么正确节点在终止共识时,可以确定该投票值v为共识结果;
有偏终止:如果Q是正确节点的集合,其中Q1是广播了投票值1没有再次广播投票值0的正确节点的集合,Q2是广播了投票值0又再次广播了投票值1的正确节点的集合,如果以及Q=Q1∪Q2,那么所有正确的节点都会达成共识;
完整性:正确的节点就一个提议只达成一次共识。
可以理解的是图4、图5、图6以及图4、图5和图6相关部分涉及的内容均为可再投票的二元共识算法的一种具体实施方式,还可以采用其他可再投票的二元共识算法实现本说明书所述的拜占庭共识方法,本说明书对此不进行限定,也并不对其他可再投票的二元共识算法进行赘述,只要是允许针对任一待共识提议的输入由其他投票值更改为优先投票值、且输出的共识结果偏向于优先投票值的二元共识算法,并且满足上述所述的可再投票的二元共识算法的相关性质的二元共识算法,均包括在本说明书提出的可再投票的二元共识算法的范围之内。
采用上述拜占庭容错方法,可以针对分布式系统中的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,即各个共识节点根据共识结果对各共识提议进行了一致性处理,保证各个共识节点的数据一致性。
下面从代码实现的角度对本说明书的S201-S203进行说明:
伪代码如下:
上述伪代码中,使用了RBC中的r-broadcast和r-deliver原语,以及propose,repropose,和decide等RABA原语。对于每个epoch,框架包括n个并行的RBC实例和n个并行的RABA实例。
在RBC阶段,每个副本pi为RBC实例RBCi广播提案mi。如果pi在RBCj实例中r-deliver了提案mj,pi将开始运行RABAj,并在RABAj中propose1。N-f个RBC实例都r-deliver了提案后,pi不需要等待n-f个RABA实例终止,而是直接在那些没开始运行的RABA实例中propose0。如果pi在RABAj中propose0后,r-deliver了提案mj,且RABAj尚未运行终止,此时pi将在RABAj中repropose1。令S代表decide的值为1的RABA实例序号的集合。若pi在RABAj实例中decide1,则将pj为RBCj提出的提案mj加入到集合C中。若对任意j∈S,RBCj实例中已经r-deliver([e,j],mj),则按照某种确定性的顺序确认执行C集合中的消息。
如图7所示,与上述一种拜占庭容错方法相对应,本说明书还提供了一种拜占庭容错装置,应用于分布式系统中的任一共识节点,所述分布式系统至少包括N个共识节点,其中N≥3f+1,所述f为大于0的整数,所述装置包括:
通信模块710,用于基于可靠广播RBC协议将本地待共识提议广播至其他共识节点;
处理模块720,用于针对任一共识节点的待共识提议,基于本地接收情况确定该待共识提议的初始投票值;初始投票值为优先投票值或其他投票值;针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果。
在一个实施例中,所述处理模块720,具体用于在接收到任一个共识节点通过可靠广播RBC协议广播的待共识提议的情况下,若还未针对该待共识提议开始执行所述可再投票的二元共识算法,则将该待共识提议的初始投票值确定为优先投票值;
若已针对该待共识提议开始执行所述可再投票的二元共识算法,且还未得到该待共识提议的共识结果,则重新将该待共识提议的初始投票值确定为优先投票值;
在接收到N-f个共识节点广播的待共识提议的情况下,将还未开始执行可再投票的二元共识算法的待共识提议的初始投票值确定为其他投票值。
在一个实施例中,所述处理模块720,具体用于针对任一待共识提议,在确定该待共识提议存在初始投票值的情况下,即将该初始投票值作为所述可再投票的二元共识算法的输入,以该算法的输出作为该待共识提议的共识结果。
在一个实施例中,所述可再投票的二元共识算法,包括:允许针对任一待共识提议的输入由其他投票值更改为优先投票值、且输出的共识结果偏向于优先投票值的二元共识算法。
在一个实施例中,所述处理模块720,具体用于在得到N个待共识提议的共识结果后,将共识结果为优先投票值的至少一个待共识提议组成的集合确定为待共识集合;在接收到待共识集合中的全部待共识提议后,按照预设的顺序执行该待共识集合中的待共识提议。
上述装置中各个部件的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述的方法。该方法至少包括上述图2所示的方法。
图8示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器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,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的方法。该方法至少包括上述图2所示的方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
Claims (10)
1.一种拜占庭容错方法,其特征在于,应用于分布式系统中的任一共识节点,所述分布式系统至少包括N个共识节点,该N个共识节点中最多允许存在f个恶意节点,其中N≥3f+1,所述f为大于0的整数,所述方法包括:
基于可靠广播RBC协议将本地待共识提议广播至其他共识节点;
在接收到任一个共识节点通过可靠广播RBC协议广播的待共识提议的情况下,若还未针对该待共识提议开始执行可再投票的二元共识算法,则将该待共识提议的初始投票值确定为优先投票值;若已针对该待共识提议开始执行所述可再投票的二元共识算法,且还未得到该待共识提议的共识结果,则重新将该待共识提议的初始投票值确定为优先投票值;
在接收到N-f个共识节点广播的待共识提议的情况下,将还未开始执行可再投票的二元共识算法的待共识提议的初始投票值确定为其他投票值;
针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果。
2.根据权利要求1所述的方法,其特征在于,所述针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果,包括:
针对任一待共识提议,在确定该待共识提议存在初始投票值的情况下,即将该初始投票值作为所述可再投票的二元共识算法的输入,以该算法的输出作为该待共识提议的共识结果。
3.根据权利要求2所述的方法,其特征在于,所述可再投票的二元共识算法,包括:
允许针对任一待共识提议的输入由其他投票值更改为优先投票值、且输出的共识结果偏向于优先投票值的二元共识算法。
4.根据权利要求1所述的方法,其特征在于,还包括:
在得到N个待共识提议的共识结果后,将共识结果为优先投票值的至少一个待共识提议组成的集合确定为待共识集合;
在接收到待共识集合中的全部待共识提议后,按照预设的顺序执行该集合中的待共识提议。
5.一种拜占庭容错装置,其特征在于,应用于分布式系统中的任一共识节点,所述分布式系统至少包括N个共识节点,该N个共识节点中最多允许存在f个恶意节点,其中N≥3f+1,所述f为大于0的整数,所述装置包括:
通信模块,用于基于可靠广播RBC协议将本地待共识提议广播至其他共识节点;
处理模块,在接收到任一个共识节点通过可靠广播RBC协议广播的待共识提议的情况下,若还未针对该待共识提议开始执行可再投票的二元共识算法,则将该待共识提议的初始投票值确定为优先投票值;若已针对该待共识提议开始执行所述可再投票的二元共识算法,且还未得到该待共识提议的共识结果,则重新将该待共识提议的初始投票值确定为优先投票值;在接收到N-f个共识节点广播的待共识提议的情况下,将还未开始执行可再投票的二元共识算法的待共识提议的初始投票值确定为其他投票值;针对任一具有初始投票值的待共识提议,采用可再投票的二元共识算法确定其共识结果。
6.根据权利要求5所述的装置,其特征在于,
所述处理模块,具体用于针对任一待共识提议,在确定该待共识提议存在初始投票值的情况下,即将该初始投票值作为所述可再投票的二元共识算法的输入,以该算法的输出作为该待共识提议的共识结果。
7.根据权利要求6所述的装置,其特征在于,
所述可再投票的二元共识算法,包括:允许针对任一待共识提议的输入由其他投票值更改为优先投票值、且输出的共识结果偏向于优先投票值的二元共识算法。
8.根据权利要求5所述的装置,其特征在于,
所述处理模块,还用于在得到N个待共识提议的共识结果后,将共识结果为优先投票值的至少一个待共识提议组成的集合确定为待共识集合;在接收到待共识集合中的全部待共识提议后,按照预设的顺序执行该集合中的待共识提议。
9.一种计算机设备,其特征在于,包括存储器、处理器、通信接口及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至4任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1至4任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110925724.7A CN113783935B (zh) | 2021-08-12 | 2021-08-12 | 一种拜占庭容错方法及装置 |
PCT/CN2022/111000 WO2023016428A1 (zh) | 2021-08-12 | 2022-08-09 | 一种拜占庭容错方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110925724.7A CN113783935B (zh) | 2021-08-12 | 2021-08-12 | 一种拜占庭容错方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113783935A CN113783935A (zh) | 2021-12-10 |
CN113783935B true CN113783935B (zh) | 2022-04-01 |
Family
ID=78837813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110925724.7A Active CN113783935B (zh) | 2021-08-12 | 2021-08-12 | 一种拜占庭容错方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113783935B (zh) |
WO (1) | WO2023016428A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113783935B (zh) * | 2021-08-12 | 2022-04-01 | 清华大学 | 一种拜占庭容错方法及装置 |
CN114780987B (zh) * | 2021-12-29 | 2023-08-29 | 张海滨 | 数据分发、存储、读取、传输方法及分布式系统 |
CN114861233B (zh) * | 2022-04-19 | 2023-12-19 | 湖南天河国云科技有限公司 | 一种无需可信第三方的分片异步拜占庭容错共识方法和装置 |
CN114553423B (zh) * | 2022-04-27 | 2022-07-29 | 南京大学 | 一种去中心化量子拜占庭共识方法 |
CN115174090B (zh) * | 2022-05-20 | 2023-04-25 | 清华大学 | 区块链共识方法、装置、计算机设备及可读存储介质 |
CN115396432B (zh) * | 2022-07-29 | 2023-08-01 | 北京理工大学 | 二元协商方法及装置、电子设备和存储介质 |
CN116192868B (zh) * | 2023-04-27 | 2023-09-08 | 南方科技大学 | 一种应用于联盟链的并行拜占庭容错共识方法及终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108846659A (zh) * | 2018-06-13 | 2018-11-20 | 深圳前海微众银行股份有限公司 | 基于区块链的转账方法、装置及存储介质 |
CN109447810A (zh) * | 2018-11-29 | 2019-03-08 | 杭州秘猿科技有限公司 | 并行区块链共识方法、系统、电子设备和计算机可读存储介质 |
CN110708171A (zh) * | 2019-12-13 | 2020-01-17 | 腾讯科技(深圳)有限公司 | 区块链共识投票方法、装置、设备以及存储介质 |
EP3647955A1 (en) * | 2017-06-30 | 2020-05-06 | Bitflyer Blockchain, Inc. | Consensus-forming method in network, and node for configuring network |
CN112416905A (zh) * | 2020-07-03 | 2021-02-26 | 支付宝(杭州)信息技术有限公司 | 蜜獾拜占庭容错共识机制的区块链共识方法、节点及系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019157475A1 (en) * | 2018-02-12 | 2019-08-15 | Ripple Labs Inc. | Byzantine agreement in open networks |
WO2020258252A1 (zh) * | 2019-06-28 | 2020-12-30 | 深圳市网心科技有限公司 | 一种区块链数据的共识方法及相关设备 |
CN110288479B (zh) * | 2019-06-28 | 2023-07-14 | 深圳市迅雷网络技术有限公司 | 一种区块链数据的共识方法及相关设备 |
CN112104482B (zh) * | 2020-08-11 | 2021-06-29 | 佛山赛思禅科技有限公司 | 一种基于并行投票的共识方法 |
CN112685796B (zh) * | 2021-03-12 | 2021-06-18 | 腾讯科技(深圳)有限公司 | 一种基于区块链的区块共识方法以及相关设备 |
CN113783935B (zh) * | 2021-08-12 | 2022-04-01 | 清华大学 | 一种拜占庭容错方法及装置 |
CN113794694B (zh) * | 2021-08-25 | 2022-08-26 | 清华大学 | 一种基于可靠广播的二元共识方法及装置 |
CN113783708A (zh) * | 2021-08-25 | 2021-12-10 | 山东区块链研究院 | 一种基于可靠广播的可再投票二元共识方法及装置 |
-
2021
- 2021-08-12 CN CN202110925724.7A patent/CN113783935B/zh active Active
-
2022
- 2022-08-09 WO PCT/CN2022/111000 patent/WO2023016428A1/zh unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3647955A1 (en) * | 2017-06-30 | 2020-05-06 | Bitflyer Blockchain, Inc. | Consensus-forming method in network, and node for configuring network |
CN108846659A (zh) * | 2018-06-13 | 2018-11-20 | 深圳前海微众银行股份有限公司 | 基于区块链的转账方法、装置及存储介质 |
CN109447810A (zh) * | 2018-11-29 | 2019-03-08 | 杭州秘猿科技有限公司 | 并行区块链共识方法、系统、电子设备和计算机可读存储介质 |
CN110708171A (zh) * | 2019-12-13 | 2020-01-17 | 腾讯科技(深圳)有限公司 | 区块链共识投票方法、装置、设备以及存储介质 |
CN112416905A (zh) * | 2020-07-03 | 2021-02-26 | 支付宝(杭州)信息技术有限公司 | 蜜獾拜占庭容错共识机制的区块链共识方法、节点及系统 |
Non-Patent Citations (2)
Title |
---|
Byzantine Fault Tolerant Algorithm Based on Vote;Haiyong Wang等;《2019 International Conference on Cyber-Enabled Distributed Computing and Knowledge Discovery (CyberC)》;20191019;全文 * |
区块链共识算法的发展现状与展望;袁勇等;《自动化学报》;20180927(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113783935A (zh) | 2021-12-10 |
WO2023016428A1 (zh) | 2023-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113783935B (zh) | 一种拜占庭容错方法及装置 | |
US11830001B2 (en) | Blockchain consensus method, accounting node and node | |
CN113810465B (zh) | 一种异步二元共识方法及装置 | |
US10999060B2 (en) | Data processing method and apparatus | |
CN111782275B (zh) | 基于区块链的交易处理方法及装置、电子设备 | |
CN113794694B (zh) | 一种基于可靠广播的二元共识方法及装置 | |
US20180240114A1 (en) | Transaction verification in a consensus network | |
US20210314167A1 (en) | Methods and systems for consensus in blockchains | |
US11444783B2 (en) | Methods and apparatuses for processing transactions based on blockchain integrated station | |
CN110868441A (zh) | 区块链公链的维护方法、装置、节点及区块链公链 | |
CN111382168B (zh) | 在联盟链网络中创建节点组、基于节点组的交易方法 | |
CN113783708A (zh) | 一种基于可靠广播的可再投票二元共识方法及装置 | |
CN111526216B (zh) | 联盟链中的共识方法和系统 | |
US11783339B2 (en) | Methods and apparatuses for transferring transaction based on blockchain integrated station | |
CN113794576B (zh) | 一种可再投票的二元共识方法及装置 | |
US11275814B2 (en) | Recording ledger data on a blockchain | |
CN111526218A (zh) | 联盟链中的共识方法和系统 | |
CN112069169B (zh) | 区块数据存储方法、装置、电子设备及可读存储介质 | |
CN114070733B (zh) | 一种基于区块链网络的共识方法、装置及系统 | |
CN112184244A (zh) | 基于区块链的共识达成方法、装置及存储介质 | |
CN113794566B (zh) | 一种可再投票的二元共识方法、装置、及存储介质 | |
CN113783946A (zh) | 一种基于门限签名的可再投票二元共识方法及装置 | |
CN115037472B (zh) | 基于双层dag共识机制的交易处理方法及系统、服务设备 | |
CN114760198B (zh) | 一种基于区块链网络的共识方法、装置及系统 | |
CN111242778B (zh) | 数据处理方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |