一种区块链中的共识方法和系统
技术领域
本文件涉及计算机技术领域,尤其涉及一种区块链中的共识方法和系统。
背景技术
目前,拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法在联盟链等区块链的场景中,是被广泛使用的共识算法。PBFT主要通过预准备(pre-prepare)、准备(prepare)和确认(commit)这三个阶段的消息交互来达成对新生成区块的共识。
目前在联盟链或其他类型链等区块链的场景下,区块的产生往往需要各共识节点之间达成共识。然而,在PBFT和RAFT等共识算法的共识协议中,对共识后生成的区块中记录的提议集合则没有有效的证明,即证明其是否得到了多数共识节点的认可。
发明内容
本说明书实施例提供了一种区块链中的共识方法和系统,基于区块链中参与共识的节点对所有通过共识的提议的默克尔根的签名,生成对所有通过共识的提议的共识证明,从而提高对记录所有通过共识的提议的区块的合法性证明的效率。
为解决上述技术问题,本说明书实施例是这样实现的:
第一方面,提出了一种区块链中的共识方法,包括:
区块链的第一共识节点获取通过共识的提议的默克尔根,所述通过共识的提议由区块链中的共识节点发起;
所述第一共识节点对所述通过共识的提议的默克尔根进行签名,得到所述通过共识的提议的签名;
所述第一共识节点将所述通过共识的提议的签名发送给所述区块链中的共识节点;
所述区块链的第二共识节点接收所述第一共识节点发送的所述签名;
若所述第二共识节点接收到2f+1个所述第一共识节点发送的所述签名,则基于接收到的所述签名,生成所述通过共识的提议的共识证明,其中,f为所述区块链允许的异常共识节点最大数量。
第二方面,提出了一种基于区块链系统,包括:
区块链的第一共识节点,获取通过共识的提议的默克尔根,所述通过共识的提议由区块链中的共识节点发起;并对所述通过共识的提议的默克尔根进行签名,得到所述通过共识的提议的签名;以及将所述通过共识的提议的签名发送给所述区块链中的共识节点;
所述区块链的第二共识节点,接收所述第一共识节点发送的所述签名;以及若接收到2f+1个所述第一共识节点发送的所述签名,则基于接收到的所述签名,生成所述通过共识的提议的共识证明,其中,f为所述区块链允许的异常共识节点最大数量。
本说明书实施例采用上述技术方案至少可以达到下述技术效果:
在为通过共识的提议生成共识证明时,区块链的第一共识节点能够获取通过共识的提议的默克尔根,通过共识的提议由区块链中的共识节点发起,并能对通过共识的提议的默克尔根进行签名,得到通过共识的提议的签名,再将通过共识的提议的签名发送给区块链中的共识节点。区块链的第二共识节点能够接收第一共识节点发送的签名,若第二共识节点接收到2f+1个第一共识节点发送的签名,则基于接收到的签名,生成通过共识的提议的共识证明,其中,f为区块链允许的异常共识节点最大数量。这样在第二共识节点生成的对所有通过共识的提议的共识证明之后,便可以基于该共识证明来确认记录所有通过共识的提议的区块是否合法性,极大地提高了证明区块合法性的效率。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定,在附图中:
图1为本说明书一个实施例提供的一种区块链中的共识方法的实现流程示意图;
图2为本说明书一个实施例提供的区块链中的共识方法应用在实际场景中的示意图;
图3为本说明书一个实施例提供的一种区块链系统的结构示意图。
具体实施方式
为使本文件的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本文件一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文件保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
为解决现有的共识后生成的区块中记录的提议集合没有有效的证明,难以提高证明区块的合法性证明效率的问题,本说明书实施例提供一种区块链的共识方法。采用本说明书实施例提供的区块链的共识方法,在为通过共识的提议生成共识证明时,区块链的第一共识节点能够获取通过共识的提议的默克尔根,通过共识的提议由区块链中的共识节点发起,并对通过共识的提议的默克尔根进行签名,得到通过共识的提议的签名,再将通过共识的提议的签名发送给区块链中的共识节点。
区块链的第二共识节点能够接收第一共识节点发送的签名,若该第二共识节点接收到2f+1个第一共识节点发送的签名,则可以基于接收到的签名,生成通过共识的提议的共识证明,其中,f为区块链允许的异常共识节点最大数量。这样在第二共识节点生成的对所有通过共识的提议的共识证明之后,便可以基于该共识证明来确认记录所有通过共识的提议的区块是否合法性,极大地提高了证明区块合法性的效率。
具体地,本说明书一个或多个实施例提供的一种区块链的共识方法的实现流程示意图如图1所示,该方法应用于区块链中的共识节点,包括:
步骤110,区块链的第一共识节点获取通过共识的提议的默克尔根,该通过共识的提议由区块链中的共识节点发起。
第一共识节点可以是区块链的任何一个共识节点。区块链中的任何一个共识节点,都可以作为第一共识节点向其它的共识节点发送签名。
应理解,当区块链采用PBFT的共识协议时,该通过共识的提议则只有一个,此时区块链的第一共识节点获取通过共识的提议的默克尔根,具体可以是获取通过共识的提议的哈希值,该通过共识的提议由区块链中的共识主节点发起。
可选地,当区块链采用蜜獾拜占庭容错算法(HoneybadgerBFT)的共识协议时,该通过共识的提议有多个,该多个提议由区块链中的多个共识节点发起,
区块链的第一共识节点获取通过共识的提议的默克尔根,包括:
第一共识节点基于通过共识的多个提议,生成默克尔树;
第一共识节点获取通过共识的多个提议的默克尔根。
可选地,为了便于计算通过共识的多个提议的默克尔根,本说明书实施例可基于发起通过共识的多个提议的共识节点的顺序,来生成这多个提议的默克尔树,具体地,第一共识节点基于通过共识的多个提议,生成默克尔树,包括:
第一共识节点获取发起通过共识的多个提议的多个共识节点的顺序;
第一共识节点按照多个共识节点的顺序,依次获取通过共识的提议中包含的交易;
第一共识节点基于多个共识节点的顺序、以及通过共识的多个提议中包含的交易,生成默克尔树。
应理解,通过共识的提议中可包含有发起提议的节点从节点的交易池中捞取的交易,也可以是空的,即不包含有发起提议的节点从节点的交易池中捞取的交易。
当区块链采用蜜獾拜占庭容错算法(HoneybadgerBFT)的共识协议时,假设区块链中参与共识的节点有四个,分别是共识节点A~共识节点D,共识节点A提议中包含的交易有Atx1、Atx2和Atx3、共识节点B提议中包含的交易有Btx1、Btx2和Btx3,共识节点C提议中包含的交易有Ctx1和Ctx2,共识节点D提议中包含的交易有Dtx1。假设共识节点A~共识节点D提议的共识结果(0或1,其中0为未通过共识,1为通过共识)如下:
共识节点A:Atx1、Atx2、Atx3,共识结果为1;
共识节点B:Btx1、Btx2、Btx3,共识结果为1;
共识节点C:Ctx1、Ctx2,共识结果为1;
共识节点D:Dtx1,共识结果为0。
假设共识节点A~共识节点D这四个共识节点顺序是ABCD,则对共识节点A~共识节点D的提议共识结束后,按照共识节点的顺序,如果共识节点的共识结果为1,则选取该提议,那么最终通过共识的提议的交易集合是:{Atx1、Atx2、Atx3、Btx1、Btx2、Btx3、Ctx1、Ctx2}。此时,第一共识节点基于通过共识的多个提议,生成默克尔树,则可以首先获取上述交易集合中各个交易的哈希值,再基于上述交易集合中各个交易的哈希值,生成默克尔树,得到通过共识的多个提议的默克尔根。
应理解,在第二共识节点基于接收到的签名生成通过共识的提议的共识证明之后,为存储这些通过共识的提议中包含的交易集合,本说明书实施例可生成记录有这些交易集合的新增区块,并在该新增区块中记录这些通过共识的提议的共识证明。具体地,本说明书实施例提供的方法还包括:
基于通过共识的提议中包含的交易,获取交易集合;
生成记录有交易集合的新增区块。
可选地,为了验证广播到区块链中待共识的提议的合法性,在区块链的第一共识节点获取通过共识的提议的默克尔根之前,还可以将待共识的提议拆分为多个数据块,并基于这多个数据块构建默克尔树,并只发送部分数据块、该部分数据块在默克尔树的默克尔路径上的默克尔证明和根哈希,使得接收到这些消息的节点能够基于接收到的消息验证消息的合法性。具体地,在区块链的第一共识节点获取通过共识的提议的默克尔根之前,本说明书实施例提供的方法还包括:
第一共识节点将待共识的提议通过纠删码处理拆分为多个数据块,该多个数据块的数量与区块链中的共识节点数量相同;
第一共识节点基于多个数据块的哈希值构建默克尔树,得到对应的默克尔路径和根哈希;
第一共识节点将多个数据块中的部分数据块保存在本地,将多个数据块中的其他数据块、其他数据块在默克尔路径上的默克尔证明和根哈希发送至区块链中的其他共识节点,以使得区块链中的其他共识节点对接收到的数据块进行共识处理和反馈;
第一共识节点接收来自区块链中的其他共识节点发起的多个待共识的提议,并分别对多个待共识的提议进行共识处理和反馈。
具体地,可将上述多个数据块中的第一个数据块保存在本地,将多个数据块中的第j个数据块、第j个数据块在默克尔路径上的默克尔证明和根哈希发送至第j个共识节点,使得第j个共识节点在接收这些信息后,基于第j个数据块、第j个数据块在默克尔路径上的默克尔证明和根哈希,验证接收到的提议的合法性,若第j个数据块、第j个数据块在默克尔路径上的默克尔证明得到的根哈希与接收到的根哈希相同,则表明接收的信息是合法的,否则,则丢弃不合法的信息。
可选地,当区块链采用蜜獾拜占庭容错算法的共识协议时,第一共识节点分别对多个待共识的提议进行共识处理和反馈,包括:
基于蜜獾拜占庭容错共识算法中的二进制协定(BA)子协议,分别对多个待共识的提议进行共识处理和反馈。
步骤120,第一共识节点对通过共识的提议的默克尔根进行签名,得到通过共识的提议的签名。
应理解,为了提高通过共识的提议的默克尔根的安全级别,共识节点在区块链中广播通过共识的提议的默克尔根之前,区块链中可生成1个公钥pk和N个私钥sk,区块链中的每个共识节点持有一个私钥sk和公钥pk,共识节点使用自己的私钥对所有通过共识的提议的默克尔根进行签名,并将签名广播给区块链中其他共识节点。
以区块链中参与共识的节点包括共识节点A~共识节点D为例,在共识节点A~共识节点D分别得到通过共识的多个提议的默克尔根之后,共识节点A使用自己的私钥skA对通过共识的多个提议的默克尔根进行签名,得到sigA,共识节点B使用自己的私钥skB对通过共识的多个提议的默克尔根进行签名,得到sigB,共识节点C使用自己的私钥skC对通过共识的多个提议的默克尔根进行签名,得到sigC,共识节点D使用自己的私钥skD对通过共识的多个提议的默克尔根进行签名,得到sigD。
步骤130,第一共识节点将通过共识的提议的签名发送给区块链中的共识节点。
共识节点A将签名sigA广播给区块链中的节点,使得共识节点B~共识节点C对该签名sigA进行校验,共识节点B将签名sigB广播给区块链中的共识节点,使得共识节点A、共识节点C和共识节点D对该签名sigB进行校验,共识节点C将签名sigC广播给区块链中的共识节点,使得共识节点A、共识节点B和共识节点D对该签名sigC进行校验,共识节点D将签名sigD广播给区块链中的节点,使得共识节点A、共识节点B和共识节点C对该签名sigD进行校验。
步骤140,区块链的第二共识节点接收第一共识节点发送的签名。
可选地,第二共识节点可以是任何一个接收到第一共识节点发送的签名的共识节点。区块链中的任何一个共识节点,既可以作为第一共识节点向其它的共识节点发送签名,也可以作为第二共识节点从其它共识节点接收签名。具体地,区块链的第二共识节点接收第一共识节点发送的所述签名之前,所述方法还包括:
第二共识节点获取通过共识的提议的默克尔根,通过共识的提议由区块链中的共识节点发起;
第二共识节点对通过共识的提议的默克尔根进行签名,得到通过共识的提议的签名;
第二共识节点将通过共识的提议的签名发送给区块链中的共识节点。
步骤150,若第二共识节点接收到2f+1个第一共识节点发送的签名,则基于接收到的签名,生成通过共识的提议的共识证明,其中,f为区块链允许的异常共识节点最大数量。
区块链中的共识节点在接收到来自区块链中的共识节点的签名之后先缓存接收到的签名,当收到2f+1<=x<=N个签名消息后,用本共识节点保存的默克尔树根与这x个签名进行验签,如果能够有至少2f+1个合法签名,则基于数量至少为2f+1个签名,生成通过共识的提议的共识证明。其中,x为共识节点收到的签名个数,N为区块链中所有参与共识的节点的数量。
可选地,为提高对所有通过共识的提议的合法性验证效率,本说明书实施例可基于接收到来自区块链中的共识节点的数量至少为2f+1个签名,生成所有通过共识的提议的共识证明。具体地,若第二共识节点接收到2f+1个第一共识节点发送的签名,则基于接收到的签名,生成通过共识的提议的共识证明,包括:
若第二共识节点接收到2f+1个第一共识节点发送的所述签名,则对接收到的签名进行校验;
若第二共识节点对接收到的签名的校验通过,则基于接收到的签名生成通过共识的提议的共识证明。
可选地,为了提高共识证明的可信度,在第二共识节点生成共识证明之前,本说明书实施例的第二共识节点可对接收到的签名进行校验。具体地,第二共识节点对接收到的签名进行校验,包括:
第二共识节点基于本地保存的通过共识的提议的默克尔根,对接收到的签名进行验签。
应理解,为了提高生成的共识证明的可信度,第二共识节点在接收到签名后,可使用本地保存的公钥对签名进行解密,得到待校验的默克尔根,若该待校验的默克尔根与第二共识节点本地计算得到的通过共识的提议的默克尔根相同,则表明该签名是合法有效的。
应理解,当区块链采用拜占庭容错算法的共识协议时,通过共识的提议由区块链中的共识主节点发起,通过共识的提议的数量为1。
下面以图2所示的采用蜜獾拜占庭容错算法的共识协议的区块链的共识节点执行流程为例,对本说明书实施例提供的区块链中的共识方法进行详细说明。如图2所示,该实施流程示意图所应用的区块链中包括多个共识节点,以该区块链中包括四个共识节点(共识节点A~共识节点D)为例,包括下述步骤:
S201,区块链中的四个共识节点分别从节点交易池中捞取一些交易,并分别打包,得到四个待共识的提议;
其中,共识节点A从节点交易池中捞取了交易Atx1、Atx2和Atx3,并将交易Atx1、Atx2和Atx3打包为消息ma,作为共识节点A的提议;共识节点B从节点交易池中捞取了交易Btx1、Btx2和Btx3,并将交易Btx1、Btx2和Btx3打包为消息mb,作为共识节点B的提议;共识节点C从节点交易池中捞取了交易Ctx1和Ctx2,并将交易Ctx1和Ctx2打包为消息mc,作为共识节点C的提议;共识节点D从节点交易池中捞取了交易Dtx1,并将交易Dtx1打包为消息md,作为共识节点D的提议。
S202,区块链中的四个共识节点分别通过RBC协议将待共识的提议发送给其他共识节点;
共识节点A通过RBC协议将待共识的提议ma发送给共识节点B、C和D;共识节点B通过RBC协议将待共识的提议mb发送给共识节点A、C和D;共识节点C通过RBC协议将待共识的提议mc发送给共识节点A、B和D;共识节点D通过RBC协议将待共识的提议md发送给共识节点A、B和C。
其中,共识节点A通过RBC协议将待共识的提议ma发送给共识节点B、C和D,具体过程如下:
首先,共识节点A将该消息ma采用纠删码处理后拆分成 N 个数据块,假设为block00 ~ block03四个数据块;
然后,共识节点A基于拆分成的4个数据块(block00 ~ block03)的哈希值(分别是Hash000~Hash003)构建一个默克尔树,第一个叶子节点为block00的哈希值Hash000、第二个叶子节点为block01的哈希值Hash001、……、第四个叶子节点为block03的哈希值Hash003,且哈希值Hash000和哈希值Hash001的二次哈希值为Hash00,哈希值Hash002和哈希值Hash003的二次哈希值为Hash01,Hash00和哈希值Hash01的二次哈希值为Hash0(即默克尔根);
最后,共识节点A将block00保存在本地,将(block01和Hash000,Hash01,Hash0)发送至共识节点B,将(block02和Hash003 , Hash00 , Hash0 )发送至Node2,将(block03和Hash002 , Hash00 , Hash0 )发送至共识节点C。
上述消息(block01和Hash000,Hash01,Hash0)记为Rval (h,bj,sj ),其中,h是根哈希,bj是第j个数据块,sj是第j个数据块在对应的默克尔路径的默克尔证明。
其他共识节点在接收到Rval(h,bj,sj)消息后,将接收到的(h,bj,sj)通过Echo消息广播给其它节点,消息格式为Echo(h,bj,sj),每个共识节点j,对于收到的Echo消息,检查该消息是否合法,如果不合法就抛弃;
例如,对于共识节点B,计算收到Block01的Hash001,将Hash001与接收到的Hash000计算得到Hash00,用该Hash00与接收到的Hash01计算得到Hash0,与收到的Hash0相比,相同则合法,不相同则丢弃Echo(h,bj,sj )。
以此类推,对接收到的所有(h,bj,sj)进行校验,如果不合法即丢弃。
每个节点,当收到N-f个来自不同节点的Echo消息后(加上本地之前保存的),选取N-2f个数据块来还原消息,并重构默克尔树;校验重构的默克尔树的树根与之前的树根是否相同,不相同则丢弃;相同则广播Ready消息,并保存消息内容。
共识节点B~共识节点D通过RBC协议将待共识的提议发送给其他共识节点的方式与上述过程类似,这里将不再赘述。
S203,区块链中的四个共识节点分别确定是否接受到来自其他节点的待共识的提议,若是,则执行S204;
S204,区块链中的四个共识节点分别通过BA协议对待共识的提议进行共识处理和反馈;
i,对于区块链中每个参与共识的节点,BA初始化,首轮r初始化为0,之后每轮递增,用input初始化est;
ii,对于区块链中每个参与共识的节点,广播本共识节点对某一提议的看法,使用Bval消息发送est,消息格式为Bvalr(estr);
iii,对于区块链中每个参与共识的节点,当收到≥f+1个来自不同共识节点的相同estr值(不包含自己的意见)时,如果自身没有广播过该estr值,则广播Bvalr(estr),本次广播的estr值与第一次广播的estr值不一样,这是为了纠正自己的观点;
iv,当收到≥2f+1个来自不同共识节点的相同estr值(包含自己当前的意见)时,将estr值保存到{bin_valuesr}集合中。{bin_valuesr}集合可能有四种状态,分别是:∅、{0}、{1}、{0,1},其中后三种是最终状态。
v,当{bin_valuesr}集合不为空(第一个放进来的值导致集合不为空)时,该值作为下一阶段的输入,下一个阶段开始;同时,本阶段也有可能继续进行,从而继续向{bin_valuesr}中添加值。
vii,当{bin_valuesr}集合不为空时,共识节点从{bin_valuesr}集合中取出值W,广播给其它共识节点,广播消息为Aux消息,消息格式为Auxr(W)。
viii,共识节点接收从其它共识节点发来的Aux消息,并将其中的W值存入本地的valuesr集合(不同于{bin_valuesr}集合),直到满足以下两个条件:
条件1、valuesr中的值必须存在于{bin_valuesr},这样可以确保valuesr中的值来自于非异常共识节点的广播;
条件2、至少收到N-f个不同共识节点发出的Auxr消息。
ix,共识节点通过抛币做决定,抛币过程是用一个各共识节点都相同的与r有关的公共因子sr对2取模的结果(即sr%2,sr例如可以是取当前r的值),抛币的结果是0或1,存在以下两种分支:
分支一:如果valuesr中只有一个值v(0或者1),当v等于sr%2时,则v是BA协议的output;当v不等于sr%2时,进入下轮共识,这时r加1(即r=r+1),之后设置下一轮的初始值estr=v;
分支二:如果valuesr中包含两个值{0,1},共识节点不做最终决定,直接进入下轮共识,r加1(即r=r+1),之后设置下一轮的初始值estr=sr%2。
S205,区块链中的四个共识节点分别确认是否所有参与共识的节点都完成对接收到的待共识的提议的共识处理,若是则执行S206;
S206,区块链中的四个共识节点将所有通过共识的提议按照节点顺序排列,生成默克尔树;
假设通过共识的提议为ma~mc,节点顺序依次为共识节点A~共识节点C,则可以按照该节点顺序依次取出ma~mc中的交易,即Atx1、Atx2、Atx3、Btx1、Btx2、Btx3、Ctx1、Ctx2,这八个交易,基于这八个交易生成默克尔树,得到这八个交易的默克尔根,即所有通过共识的提议的默克尔根。
S207,共识节点A~共识节点D分别使用共识节点本身的私钥对生成的默克尔树的默克尔根进行签名,得到对所有通过共识的提议的默克尔根的签名;
理想状态下,可以得到共识节点A对所有通过共识的提议的默克尔根的签名、共识节点B对所有通过共识的提议的默克尔根的签名、共识节点C对所有通过共识的提议的默克尔根的签名、共识节点D对所有通过共识的提议的默克尔根的签名。
S208,共识节点A~共识节点D分别将所有通过共识的提议的默克尔根的签名广播给区块链中参与共识的节点;
S209,共识节点A~共识节点D分别确认是否接收到数量至少为2f+1个有效签名,若是则执行S210;
假设该区块链中允许的异常节点最大数量为1,即f=1,则若共识节点A~共识节点D分别确认接收到至少3个有效签名,则可以执行S210。
其中,共识节点A~共识节点D可分别对接收到的至少3个签名进行验签操作,即对接收到的至少3个签名进行解密得到至少3个默克尔根,并将这至少3个默克尔根与节点本身计算得到的默克尔根进行对比,若相同,则可确定这至少3个签名是有效的。
S210,共识节点A~共识节点D分别基于数量至少为2f+1个有效签名,生成共识证明,以及记录所有通过共识的提议的新增区块。
假设共识节点A~共识节点D分别接收到3个有效签名,则可将这3个有效签名放到一个文件中,生成所有通过共识的提议的共识证明,并生成用于记录所有通过共识的提议和该共识证明的新增区块。
在为通过共识的提议生成共识证明时,区块链的第一共识节点能够获取通过共识的提议的默克尔根,通过共识的提议由区块链中的共识节点发起,并能对通过共识的提议的默克尔根进行签名,得到通过共识的提议的签名,再将通过共识的提议的签名发送给区块链中的共识节点。区块链的第二共识节点能够接收第一共识节点发送的签名,若第二共识节点接收到2f+1个第一共识节点发送的签名,则基于接收到的签名,生成通过共识的提议的共识证明,其中,f为区块链允许的异常共识节点最大数量。这样在第二共识节点生成的对所有通过共识的提议的共识证明之后,便可以基于该共识证明来确认记录所有通过共识的提议的区块是否合法性,极大地提高了证明区块合法性的效率。
图3是本说明书实施例提供的一种区块链系统的结构示意图。请参考图3,在一种软件实施方式中,区块链系统300可包括区块链的第一共识节点310和第二共识节点320,其中:
区块链的第一共识节点310,获取通过共识的提议的默克尔根,所述通过共识的提议由区块链中的共识节点发起;并对所述通过共识的提议的默克尔根进行签名,得到所述通过共识的提议的签名;以及将所述通过共识的提议的签名发送给所述区块链中的共识节点;
所述区块链的第二共识节点320,接收所述第一共识节点发送的所述签名;以及若接收到2f+1个所述第一共识节点发送的所述签名,则基于接收到的所述签名,生成所述通过共识的提议的共识证明,其中,f为所述区块链允许的异常共识节点最大数量。
通过图3所示的区块链的系统可以知道:在为通过共识的提议生成共识证明时,区块链的第一共识节点能够获取通过共识的提议的默克尔根,通过共识的提议由区块链中的共识节点发起,并能对通过共识的提议的默克尔根进行签名,得到通过共识的提议的签名,再将通过共识的提议的签名发送给区块链中的共识节点。区块链的第二共识节点能够接收第一共识节点发送的签名,若第二共识节点接收到2f+1个第一共识节点发送的签名,则基于接收到的签名,生成通过共识的提议的共识证明,其中,f为区块链允许的异常共识节点最大数量。这样在第二共识节点生成的对所有通过共识的提议的共识证明之后,便可以基于该共识证明来确认记录所有通过共识的提议的区块是否合法性,极大地提高了证明区块合法性的效率。
可选地,在一种实施方式中,当所述区块链采用蜜獾拜占庭容错算法的共识协议时,所述通过共识的提议有多个,所述多个提议由区块链中的多个共识节点发起,所述第一共识节点310,用于:
获取通过共识的提议的默克尔根,包括:
基于通过共识的多个提议,生成默克尔树;
获取所述通过共识的多个提议的默克尔根。
可选地,在一种实施方式中,所述第一共识节点310,用于:
获取发起所述通过共识的多个提议的多个共识节点的顺序;
按照所述多个共识节点的顺序,依次获取所述通过共识的提议中包含的交易;
基于所述多个共识节点的顺序、以及所述通过共识的多个提议中包含的交易,生成默克尔树。
可选地,在一种实施方式中,所述第二共识节点320,用于:
若接收到2f+1个所述第一共识节点发送的所述签名,则对接收到的所述签名进行校验;
若对接收到的所述签名的校验通过,则基于接收到的所述签名生成所述通过共识的提议的共识证明。
可选地,在一种实施方式中,在所述第二共识节点320,基于接收到的所述签名生成所述通过共识的提议的共识证明之后,还用于:
基于所述通过共识的提议中包含的交易,获取交易集合;
生成记录有所述交易集合的新增区块。
可选地,在一种实施方式中,在区块链的第一共识节点310,获取通过共识的提议的默克尔根之前,还用于:
将待共识的提议通过纠删码处理拆分为多个数据块,所述多个数据块的数量与所述区块链中的共识节点数量相同;
基于所述多个数据块的哈希值构建默克尔树,得到对应的默克尔路径和根哈希;
将所述多个数据块中的部分数据块保存在本地,将所述多个数据块中的其他数据块、所述其他数据块在所述默克尔路径上的默克尔证明和所述根哈希发送至所述区块链中的其他共识节点,以使得所述区块链中的其他共识节点对接收到的数据块进行共识处理和反馈;
接收来自所述区块链中的其他共识节点发起的多个待共识的提议,并分别对所述多个待共识的提议进行共识处理和反馈。
可选地,在一种实施方式中,所述区块链中的第一共识节点310,用于:
基于蜜獾拜占庭容错共识算法中的二进制协定BA子协议,分别对所述多个待共识的提议进行共识处理和反馈。
可选地,在一种实施方式中,所述第二共识节点320,用于:
基于本地保存的所述通过共识的提议的默克尔根,对接收到的所述签名进行验签。
可选地,在一种实施方式中,当所述区块链采用拜占庭容错算法的共识协议时,所述通过共识的提议由区块链中的共识主节点发起,所述通过共识的提议的数量为1。
可选地,在一种实施方式中,所述区块链的第二共识节点320,接收所述第一共识节点发送的所述签名之前,还用于:
获取通过共识的提议的默克尔根,所述通过共识的提议由区块链中的共识节点发起;
对所述通过共识的提议的默克尔根进行签名,得到所述通过共识的提议的签名;
将所述通过共识的提议的签名发送给所述区块链中的共识节点。
区块链系统300能够实现图1~图2的方法实施例的方法,具体可参考图1~图2所示实施例的区块链中的共识方法,不再赘述。
总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。