首页> 中国专利> 一种双委员会共识方法及装置

一种双委员会共识方法及装置

摘要

本申请公开了一种双委员会共识方法及装置,应用于目标联盟链,获取目标联盟链中的各个节点,在各个节点中选取第一委员会节点和第二委员会节点,第一委员会中的主节点向从节点广播预准备消息,使从节点反馈准备消息给主节点,主节点再向从节点和第二委员会发送提交消息,从节点接收到提交消息后向主节点进行反馈,使主节点广播同步消息,第二委员会接收到提交消息后,第二委员会中的主节点向从节点发送预准备消息,以使从节点反馈准备消息给主节点,主节点再向从节点和第一委员会节点广播提交消息,从节点接收到提交消息后向主节点进行反馈,以使主节点广播同步消息,上述共识过程中,减少了共识的节点数和通信开销,提高了共识效率。

著录项

  • 公开/公告号CN114928441A

    专利类型发明专利

  • 公开/公告日2022-08-19

    原文格式PDF

  • 申请/专利权人 中国科学技术大学;

    申请/专利号CN202210391712.5

  • 发明设计人 张信明;夏庆庆;

    申请日2022-04-14

  • 分类号H04L9/08(2006.01);H04L9/32(2006.01);H04L67/1097(2022.01);H04L67/1042(2022.01);

  • 代理机构北京集佳知识产权代理有限公司 11227;

  • 代理人吴磊

  • 地址 230026 安徽省合肥市包河区金寨路96号

  • 入库时间 2023-06-19 16:25:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-06

    实质审查的生效 IPC(主分类):H04L 9/08 专利申请号:2022103917125 申请日:20220414

    实质审查的生效

说明书

技术领域

本申请涉及区块链技术领域,尤其涉及一种双委员会共识方法及装置。

背景技术

共识算法作为区块链的核心技术,用于解决分布式系统的一致性问题,通过共识算法,使得区块链中的各个节点对交易的顺序达成一致。公有链中的共识算法为了保证安全性,采用以算力为主的工作量证明和权益证明等共识机制,但是现有的共识算法太耗费资源,且共识效率低,不适合联盟链。联盟链中需要确保一定的效率,因此共识算法大多采用以实用拜占庭容错为基础的分布式一致性算法。

但是,发明人经研究发现,实用拜占庭容错算法(PBFT)虽然可以保证一定的效率,但是也存在着可扩展性较低,全节点广播不仅较大的限制了共识的效率,也导致了较高的通信开销。因此需要对原有的实用拜占庭容错算法进行优化。

发明内容

有鉴于此,本申请提供了一种双委员会共识方法及装置,用以解决基于实用拜占庭容错算法可扩展性较低,以及全节点广播较大的限制了委员会共识的效率,也导致了较高的通信开销的问题。具体方案如下:

一种双委员会共识方法,应用于目标联盟链,所述方法包括:初始委员会选举流程和双委员会共识流程;

所述初始委员会选举流程包括:获取所述目标联盟链中的各个节点,所述各个节点的初始可信度分值相同,基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点,所述第一委员会节点属于第一委员会,所述第二委员会节点属于第二委员会,所述第一委员会的节点数和所述第二委员会的节点数相同,并且所述第一委员会的节点数和所述第二委员会的节点数相加的结果不超过所述目标联盟链的节点数;

所述双委员会共识流程包括:第一主节点向第一从节点广播第一预准备消息,所述第一从节点接收所述第一主节点发送的所述第一预准备消息并进行第一验证;

其中,所述第一主节点通过所述可验证随机函数从所述第一委员会节点选举产生,所述第一从节点包括:所述第一委员会节点中除所述第一主节点外的其他节点,所述第一预准备消息中包括:第一区块;

若所述第一验证通过,则所述第一从节点向所述第一主节点发送第一准备消息,当所述第一主节点接收到所述第一准备消息后,所述第一主节点向所述第一从节点和所述第二委员会节点广播第一提交消息,所述第一提交消息包括所述第一区块;

所述第一从节点接收到所述第一提交消息后,进行第二验证,若所述第二验证通过,则所述第一从节点向所述第一主节点发送第二提交消息,所述第一主节点接收到所述第二提交消息后,进行第三验证,若所述第三验证通过,则所述第一主节点向所述第一从节点和非委员会节点广播第一同步消息;

第二主节点接收到所述第一提交消息之后,所述第二主节点向第二从节点广播第二预准备消息,所述第二从节点接收所述第二主节点发送的所述第二预准备消息并进行第四验证;

其中,所述第二主节点通过所述可验证随机函数从所述第二委员会节点选举产生,所述第二从节点包括,所述第二委员会节点中除所述第二主节点外的其他节点,所述第二预准备消息中包括:第二区块;

若所述第四验证通过,则所述第二从节点向第二主节点发送第二准备消息,当所述第二主节点接收到所述第二准备消息后,所述第二主节点向所述第二从节点和所述第一委员会节点广播第三提交消息,所述第三提交消息包括所述第二区块;

所述第二从节点接收到所述第三提交消息后,进行第五验证,若所述第五验证通过,则所述第二从节点向所述第二主节点发送第四提交消息,所述第二主节点接收到所述第四提交消息后,进行第六验证,若所述第六验证通过,则所述第二主节点向所述第二从节点和所述非委员会节点节点广播第二同步消息。

优选的,所述基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点,包括:

所述目标联盟链中的所有节点均基于所述可验证随机函数VRF产生对应随机输出值output和对应随机证明值pi,所述output为哈希hash值;

所述目标联盟链中的节点被选择为委员会节点的概率为w值,所述w值具体为:w=2c/n,所述目标联盟链中的节点个数为n,其中,一个委员会包括的节点个数为c;

判断z值是否小于所述w值;

其中,所述z值具体为:z=output/2

当所述z值小于所述w值时,则所述目标联盟链中的节点被选为所述委员会节点,并且所述委员会节点向所述目标联盟链中的所有节点广播委员会请求消息;

所述目标联盟链中的所有节点对所述委员会请求消息进行验证;

若验证通过,则根据所述委员会节点的z值,对所述委员会节点进行从小到大的顺序排序,并从所述委员会节点中选取所述第一委员会节点和所述第二委员会节点。

优选的,所述第一验证、所述第二验证、所述第三验证、所述第四验证、所述第五验证、所述第六验证,包括:

所述第一验证,包括:所述第一从节点接收到所述第一主节点发送的所述第一预准备消息后,判断第一验证信息是否正确,若正确,则所述第一验证通过,所述第一验证信息包括:所述第一主节点的签名、所述第一主节点的视图号、所述第一区块的高度以及所述第一区块的hash值;

其中,所述第一预准备消息Pre-Prepare1的消息格式为:

σ

其中,σ

所述第二验证,包括:所述第一从节点接收到所述第一主节点发送的所述第一提交消息后,判断第二验证信息是否正确,若正确,则所述第二验证通过,所述第二验证信息包括:所述第一主节点的签名、所述第一主节点的视图号、所述第一区块的高度、所述第一区块的hash值及PG1;

其中,所述第一提交消息Commit1的消息格式为:

σ

其中,σ

所述第三验证,包括:当所述第一主节点收到2e个所述第二提交消息,所述

所述第四验证,包括:所述第二从节点接收到所述第二主节点发送的所述第二预准备消息后,判断第四验证信息是否正确,若正确,则所述第四验证通过,所述第四验证信息包括:所述第二主节点的签名、所述第二主节点的视图号、所述第二区块的高度以及所述第二区块的hash值;

其中,所述第二预准备消息Pre-Prepare2的消息格式为:

σ

其中,σ

所述第五验证,包括:所述第二从节点接收到所述第二主节点发送的所述第三提交消息后,判断第五验证信息是否正确,若正确,则所述第五验证通过,所述第五验证信息包括:所述第二主节点的签名、所述第二主节点的视图号、所述第二区块的高度、所述第二区块的hash值及PG2;

其中所述第三提交消息Commit3的消息格式为:

σ

其中,σ

所述第六验证,包括:当所述第二主节点收到2e个所述第四提交消息,所述

优选的,所述方法,还包括:第一委员会节点更新流程和第二委员会节点更新流程;

所述第一委员会节点更新流程包括:

当所述第一委员会当前共识的区块的标号与所述第一委员会节点数量值相同时,若第一委员会的所述第一预准备消息的类型值为预设的第二值,进行正常所述双委员会共识流程,所述第二委员会节点接收到有效的所述第一提交消息后,执行单一委员会共识;

若所述第一委员会完成共识的区块数量与所述第一委员会节点数量相同,则所述第一主节点向所述第一委员会节点广播第一重配置消息,所述第一主节点根据委员会重配置协议进行所述第一委员会节点更新;

当所述第一预准备消息的类型值为预设的第二值时,所述第二委员会节点执行单一委员会共识;

所述第二委员会节点更新,具体为:

当所述第二委员会当前共识的区块的标号与所述第一委员会节点数量值相同时,若所述第二委员会的第二预准备消息的类型值为预设的第二值,进行正常所述双委员会共识流程,所述第一委员会接收到有效的所述第三提交消息后,执行单一委员会共识;

若所述第二委员会节点完成共识的区块数量与所述第二委员会节点数量相同,则所述第二主节点向所述第二委员会节点广播第二重配置消息,所述第二主节点根据委员会重配置协议进行所述第二委员会节点更新;

当所述第二预准备消息的类型值为预设的第二值时,所述第一委员会节点执行单一委员会共识。

优选的,所述第一主节点根据委员会重配置协议进行所述第一委员会节点更新,包括:

所述第一主节点根据委员会重配置协议进行所述第一委员会节点更新,具体为:

所述第一重配置消息Reconfigure1的消息格式为:

σ

其中,σ

若所述第一重配置消息中flag1=1,则再验证所述BD 1中是否存在异常的所述第一委员会节点,若不存在异常的所述第一委员会节点,则验证通过,所述第一从节点向所述第一主节点发送第一重配置回复消息;

所述第一重配置回复消息Rcf-Reply1的消息格式为:

σ

其中,σ

当所述第一主节点接收到2e个所述第一委员会节点发送的所述第一重配置回复消息,且判断第一重配置回复信息是否正确,若正确,则所述第一主节点计算出第一替换节点,并进行所述第一委员会节点更新;

所述第一重配置回复信息包括:所述第一重配置回复消息中第一委员会的从节点i1的签名,所述第一主节点的视图号,所述将要被替换的所述第一委员会节点的编号集合,所述完成共识的所述第一区块数量,所述完成共识的最高所述第一区块的hash值;

所述第二主节点根据委员会重配置协议进行所述第二委员会节点更新,具体为:

所述第二重配置消息Reconfigure2的消息格式为:

σ

其中,σ

若所述第二重配置消息中所述flag2=1,则再验证所述BD 2中是否存在异常的所述第二委员会节点,若不存在异常的所述第二委员会节点,则验证通过,所述第二从节点向所述第二主节点发送第二重配置回复消息;

所述第二重配置回复消息Rcf-Reply2的消息格式为:

σ

其中,σ

当所述第二主节点接收到2e个所述第二委员会节点发送的所述第二重配置回复消息,且判断第二重配置回复信息是否正确,若正确,则所述第二主节点计算出第二替换节点,并进行所述第二委员会节点更新;

所述第二重配置回复信息包括:所述第二重配置回复消息中第二委员会中从节点i2的签名,所述第二主节点的视图号,所述将要被替换的所述第二委员会节点的编号集合,所述完成共识的所述第二区块数量,所述完成共识的最高所述第二区块的hash值。

优选的,所述第一主节点计算出第一替换节点,和所述第二主节点计算出第二替换节点,包括:

所述第一主节点计算出第一替换节点,具体为:

所述第一主节点通过可验证随机函数计算出第一随机值z1;

其中,z1=output/2

所述第一主节点将所述非委员会节点按照可信度分值由高到低进行所述非委员会节点排序;

若所述第一重配置消息中所述flag1=1,则确定所述第一替换节点为所述非委员会节点排序中的第

其中,所述非委员会节点数量为en;

若所述第一重配置消息中所述flag1=2,则所述非委员会节点排序中的第

其中,所述gn表示可信度分值排名为前gn的所述非委员会节点数;

所述第二主节点计算出第二替换节点,具体为:

所述第二主节点通过可验证随机函数计算出第二随机值z2;

其中,z2=output/2

所述第二主节点将所述非委员会节点按照可信度分值由高到低进行所述非委员会节点排序;

若所述第二重配置消息中所述flag2=1,则确定所述第二替换节点为所述非委员会节点排序中的第

其中,所述非委员会节点数量为en;

若所述第二重配置消息中所述flag2=2,则所述非委员会节点排序中的第

其中,所述gn表示可信度分值排名为前gn的所述非委员会节点数。

优选的,所述方法,还包括:第一委员会节点评估机制,和第二委员会节点评估机制;

所述第一委员会节点评估机制,具体为:

所述第一主节点接收所述第一从节点发送的第二提交消息;

若所述第一主节点接收到的所述第二提交消息数量不少于2e个,所述第一主节点通过如下方式得到所述可信度分值奖励:

Ps2=Ps1+x;

其中,x为可信度分值奖励,Ps1为所述第一主节点的可信度分值,Ps2为奖励后的所述第一主节点的可信度分值;

若发生第一视图切换时,新产生的第一主节点接收到的所述第一准备消息不少于2e+1个,所述第一主节点得到所述可信度分值惩罚,所述可信度分值惩罚,具体为:

Ps3=Ps1-d*x;

其中,d为惩罚参数,且d大于1,x为可信度分值奖励,Ps1为所述第一主节点的可信度分值,Ps3为惩罚后的所述第一主节点的可信度分值;

若所述新产生的第一主节点接收到的所述第一准备消息少于2e+1个,则所述第一主节点的第一可信度分值减半,若所述第一可信度分值低于下限,则所述第一主节点失去参与所述第一委员会节点共识的机会;

所述第二委员会节点评估机制,具体为:

所述第二主节点接收所述第二从节点发送的第三提交消息;

若所述第二主节点接收到的所述第四提交消息数量不少于2e个,所述第二主节点得到所述可信度分值奖励,所述可信度分值奖励,具体为:

Ps5=Ps4+x;

其中,x为可信度分值奖励,Ps4为所述第二主节点的可信度分值,Ps5为奖励后的所述第二主节点的可信度分值;

若发生第二视图切换时,新产生的第二主节点接收到的所述第二准备消息不少于2e+1个,所述第二主节点得到所述可信度分值惩罚,所述可信度分值惩罚,具体为:

Ps6=Ps4-d*x;

其中,d为惩罚参数,且d大于1,x为可信度分值奖励,Ps4为所述第二主节点的可信度分值,Ps6为惩罚后的所述第二主节点的可信度分值;

若所述新产生的第二主节点接收到的所述第二准备消息少于2e+1个,所述第二主节点的第二可信度分值减半,若所述第二可信度分值低于下限,则所述第二主节点失去参与所述第二委员会节点共识的机会。

优选的,所述第一视图切换包括;

若第一委员会共识超时或者所述第一主节点故障,则进行所述第一视图切换,所述第一视图切换,包括:

当所述第二委员会节点已接收到所述第一主节点发送的所述第一提交消息,所述第一委员会节点广播第一视图切换消息;

所述第一视图切换消息View-Change1的消息格式为:

σ

其中,σ

所述新产生的第一主节点接收到所述第一视图切换消息后进行验证,当所述新产生的第一主节点接收到2e+1个第一视图切换消息后,所述新产生的第一主节点向所述第一委员会节点广播第一新视图消息;

所述第一新视图消息New-View1的消息格式为:

σ

其中,σ

当所述第一委员会节点向所述第二委员会节点广播所述第一视图切换消息时,若所述第二委员会节点已向所述第一委员会节点广播所述第二区块,则所述第二委员会节点采取双委员会共识;

当所述第一委员会节点向所述第二委员会节点广播所述第一视图切换消息时,若所述第二委员会节点还未向所述第一委员会节点广播所述第二区块,且所述第二委员会节点接收到2e+1个有效的第一视图切换消息时,所述第二委员会节点采取单委员会共识;

若所述第二委员会共识超时或者所述第二主节点故障,则进行所述第二视图切换,所述第二视图切换,包括:

当所述第一委员会节点已接收到所述第二主节点发送的所述第三提交消息,所述第二委员会节点广播第二视图切换消息;

所述第二视图切换消息View-Change2的消息格式为:

σ

所述新产生的第二主节点接收到所述第二视图切换消息后进行验证,当所述新产生的第二主节点接收到2e+1个第二视图切换消息后,所述新产生的第二主节点向所述第二委员会节点广播第二新视图消息;

所述第二新视图消息的消息格式为:

σ

其中,σ

当所述第二委员会节点向所述第一委员会节点广播所述第二视图切换消息时,若所述第一委员会节点已向所述第二委员会节点广播所述第一区块,则所述第一委员会节点采取双委员会共识;

当所述第二委员会节点向所述第一委员会节点广播所述第二视图切换消息时,若所述第一委员会节点还未向所述第二委员会节点广播所述第一区块,且所述第一委员会节点接收到2e+1个有效的第二视图切换消息时,所述第一委员会节点采取单委员会共识。

一种双委员共识装置,应用于目标联盟链,所述装置包括:

委员会选举模块,用于获取所述目标联盟链中的各个节点,所述各个节点的初始可信度分值相同,基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点,所述第一委员会节点属于第一委员会,所述第二委员会节点属于第二委员会,所述第一委员会的节点数和所述第二委员会的节点数相同,并且所述第一委员会的节点数和所述第二委员会的节点数相加的结果不超过所述目标联盟链的节点数;

双委员会共识处理模块,通过第一主节点向第一从节点广播第一预准备消息,所述第一从节点接收所述第一主节点发送的所述第一预准备消息并进行第一验证;

其中,所述第一主节点通过所述可验证随机函数从所述第一委员会节点选举产生,所述第一从节点包括:所述第一委员会节点中除所述第一主节点外的其他节点,所述第一预准备消息中包括:第一区块;

若所述第一验证通过,则所述第一从节点向所述第一主节点发送第一准备消息,当所述第一主节点接收到所述第一准备消息后,所述第一主节点向所述第一从节点和所述第二委员会节点广播第一提交消息,所述第一提交消息包括所述第一区块;

所述第一从节点接收到所述第一提交消息后,进行第二验证,若所述第二验证通过,则所述第一从节点向所述第一主节点发送第二提交消息,所述第一主节点接收到所述第二提交消息后,进行第三验证,若所述第三验证通过,则所述第一主节点向所述第一从节点和非委员会节点广播第一同步消息;

第二主节点接收到所述第一提交消息之后,所述第二主节点向第二从节点广播第二预准备消息,所述第二从节点接收所述第二主节点发送的所述第二预准备消息并进行第四验证;

其中,所述第二主节点通过所述可验证随机函数从所述第二委员会节点选举产生,所述第二从节点包括,所述第二委员会节点中除所述第二主节点外的其他节点,所述第二预准备消息中包括:第二区块;

若所述第四验证通过,则所述第二从节点向第二主节点发送第二准备消息,当所述第二主节点接收到所述第二准备消息后,所述第二主节点向所述第二从节点和所述第一委员会节点广播第三提交消息,所述第三提交消息包括所述第二区块;

所述第二从节点接收到所述第三提交消息后,进行第五验证,若所述第五验证通过,则所述第二从节点向所述第二主节点发送第四提交消息,所述第二主节点接收到所述第四提交消息后,进行第六验证,若所述第六验证通过,则所述第二主节点向所述第二从节点和所述非委员会节点广播第二同步消息。

优选的,所述基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点,包括:

所述目标联盟链中的所有节点均基于所述可验证随机函数VRF产生对应随机输出值output和对应随机证明值pi,所述output为哈希hash值;

所述目标联盟链中的节点被选择为委员会节点的概率为w值,所述w值具体为:w=2c/n,所述目标联盟链中的节点个数为n,其中,一个委员会包括的节点个数为c;

判断z值是否小于所述w值;

其中,所述z值具体为:z=output/2

当所述z值小于所述w值时,则所述目标联盟链中的节点被选为所述委员会节点,并且所述委员会节点向所述目标联盟链中的所有节点广播委员会请求消息;

所述目标联盟链中的所有节点对所述委员会请求消息进行验证;

若验证通过,则根据所述委员会节点的z值,对所述委员会节点进行从小到大的顺序排序,并从所述委员会节点中选取所述第一委员会节点和所述第二委员会节点。

与现有技术相比,本申请包括以下优点:

本申请公开了一种双委员会共识方法及装置,应用于目标联盟链,所述方法包括:初始委员会选举流程和双委员会共识流程,初始委员会选举流程包括:获取目标联盟链中的各个节点,在各个节点中选取第一委员会节点和第二委员会节点;双委员会共识流程包括:第一委员会中的主节点向从节点广播预准备消息,以使从节点反馈准备消息给主节点,主节点再向从节点和第二委员会发送提交消息,从节点接收到提交消息后向主节点进行反馈,以使主节点广播同步消息,第二委员会接收到提交消息后,第二委员会中的主节点向从节点发送预准备消息,以使从节点反馈准备消息给主节点,主节点再向从节点和第一委员会节点广播提交消息,从节点接收到提交消息后向主节点进行反馈,以使主节点广播同步消息,上述共识过程中,通过选举第一委员会和第二委员会再进行共识,解决了基于实用拜占庭容错算法可扩展性较低以及高通信开销的问题,同时也减少单委员会全节点广播、委员会成员更新以及视图切换对单委员会共识效率的影响,进一步提高了委员会共识效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种双委员会共识方法的流程示意图;

图2为本申请实施例提供的双委员会共识流程的示意图;

图3为本申请实施例提供的节点更新流程的示意图;

图4为本申请实施例提供的一种双委员会共识装置的流程示意图。

具体实施方式

本申请提供了一种双委员会共识方法及装置,通过选举第一委员会和第二委员会再进行共识,提高了委员会共识效率。

为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

下面将对本申请中一种双委员会共识方法进行介绍,请参阅图1,图1为本申请实施例提供的一种双委员会共识方法的流程图,本申请实施例至少包括以下流程:初始委员会选举流程和双委员会共识流程;

S101、所述初始委员会选举流程包括:获取所述目标联盟链中的各个节点,所述各个节点的初始可信度分值相同,基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点,所述第一委员会节点属于第一委员会,所述第二委员会节点属于第二委员会,所述第一委员会的节点数和所述第二委员会的节点数相同,并且所述第一委员会的节点数和所述第二委员会的节点数相加的结果不超过所述目标联盟链的节点数;

本申请实施例中,获取目标联盟链中的各个节点,各个节点的初始可信度分值相同,由于第一委员会节点和第二委员会节点代表了联盟链中的所有节点,目标联盟链中的各个节点的初始可信度分值相同,保证了选取第一委员会节点和第二委员会节点的公平性,再基于可验证随机函数在各个节点中选取第一委员会节点和第二委员会节点,第一委员会节点属于第一委员会,第二委员会节点属于第二委员会,第一委员会的节点数和第二委员会的节点数相同,并且第一委员会的节点数和第二委员会的节点数相加的结果不超过目标联盟链的节点数,如此,通过可验证随机函数,进一步提高了选取第一委员会节点和第二委员会节点的公平性。

可选的,基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点的一种实现方式可以为:

目标联盟链中的所有节点,通过可验证随机函数VRF选取第一委员会节点和第二委员会节点,第一委员会节点和第二委员会节点的地位是等价的,具体选取过程如下:

目标联盟链中的所有节点均利用可验证随机函数VRF公式(1)产生对应随机输出值output,公式(1)具体如下:

output=VRF_hash(SK,randvalue)

目标联盟链中的所有节点均利用可验证随机函数VRF(Verifiable RandomFunction)公式(2)产生对应随机证明值pi,公式(2)具体如下:

pi=VRF_proof(SK,randvalue)

在公式(1)和公式(2)中,SK为SK节点的私钥,PK为PK节点的公钥,output为哈希hash值,该hash值的范围为[0,2

目标联盟链中的最高区块,具体为:当目标联盟链中的第一个区块完成共识后,第一个区块的区块高度为1,第二个区块完成共识后,第二个区块的高度为2,以此类推,因此,目标联盟链区块中最高区块为:目标联盟链中已经完成共识后并且区块高度最高的区块。

假设目标联盟链中的节点被选择为委员会节点的概率为w值,w值具体为:w=2c/n,目标联盟链中的节点个数为n,其中,一个委员会包括的节点个数为c,由于output1是一个随机hash值,那么z(z=output1/2

判断z值是否小于w值;

其中,z值具体为:z=output1/2

当z值小于w值时,则目标联盟链中的节点被选中为委员会节点,并且被选中的目标联盟链节点向目标联盟链中的所有节点广播委员会请求消息;委员会请求消息Committee-Request的消息格式为:

σ

其中,随机输入randvalue为当前目标联盟链区块中最高区块的hash值(最高区块为空时,可以采用交易hash值或者系统预设的一个随机值),σ

目标联盟链中的所有节点接收到委员会请求消息后,目标联盟链中的所有节点通过可验证随机函数VRF验证被选中的目标联盟链节点是否为合法的委员会节点,即通过公式(3)和公式(4)对被选中的目标联盟链节点进行验证,公式(3)具体为:output 1=VRF_proof_to_hash(pi)

公式(4)具体为:VRF_verify(PK,randvalue,pi);

在公式(3)和公式(4)中,pi为节点i的随机证明值,PK为PK节点的公钥,randvalue为当前目标联盟链区块中最高区块的hash值(最高区块为空时,可以采用交易hash值或者系统预设的一个随机值);

目标联盟链中的所有节点接收被选中的目标联盟链节点发送的pi,并将pi代入公式(3)计算出output1值,若output1等于output,则公式(3)进行的验证通过。当公式(4)的返回值为true时,则公式(4)进行的验证通过。当公式(3)和公式(4)的验证(可验证随机函数VRF验证)均通过,再次判断被选中的目标联盟链节点的z值是否小于w值,若被选中的目标联盟链节点的z值小于w值,则将被选中的目标联盟链节点的z值进行保存,再将委员会节点中所有节点的z值,按照z值由小到大的顺序平均分成2个委员会,两个委员会中z值最小的节点分别作为各个委员会第一次共识的主节点,选举委员会节点完成后的委员会可以开始新的共识,如此进行委员会节点的选取,保证了选取第一委员会节点和第二委员会节点的公平性。

双委员会共识流程参考图2,具体如步骤S102至S107所示;

图2中,委员会1表示第一委员会,委员会2表示第二委员会,第一委员会识别流程和第二委员会识别流程均分为预准备阶段(Pre-Prepare),准备阶段(Prepare),提交阶段1(Commit1),提交阶段2(Commit2),广播同步阶段(Synchronize);

所述双委员会共识流程包括:如下步骤S102至S107:

S102、第一主节点向第一从节点广播第一预准备消息,所述第一从节点接收所述第一主节点发送的所述第一预准备消息并进行第一验证;

本申请实施例中,第一委员会中的预准备阶段(Pre-Prepare)具体为:第一委员会中的第一主节点打包交易形成第一区块,并向第一从节点广播预准备消息,第一从节点接收第一主节点发送的第一预准备消息并进行第一验证;

其中,第一主节点通过可验证随机函数从第一委员会节点选举产生,第一从节点包括:第一委员会节点中除第一主节点外的其他节点,第一预准备消息中包括:第一区块。

S103、若所述第一验证通过,则所述第一从节点向所述第一主节点发送第一准备消息,当所述第一主节点接收到所述第一准备消息后,所述第一主节点向所述第一从节点和所述第二委员会节点广播第一提交消息,所述第一提交消息包括所述第一区块;

本申请实施例中,第一委员会的准备阶段(Prepare)包括:若第一验证通过,则第一委员会中的第一从节点向第一主节点发送第一准备消息Prepare,当第一主节点接收到

σ

其中,σ

第一提交消息包括第一区块,若第一从节点接收到的预准备消息并通过验证后,第一从节点发送的第一准备消息,即为有效的第一准备消息,通过发送有效的第一准备消息,提高了第一委员会中主节点和从节点交互过程中的安全性,并提高了节点交互的效率。

可选的,所述第一验证,可以包括:

第一从节点接收到第一主节点发送的第一预准备消息后,判断第一验证信息是否正确,若正确,则第一验证通过,第一验证信息包括:第一主节点的签名、第一主节点的视图号、第一区块的高度以及第一区块的hash值;

其中,第一预准备消息Pre-Prepare1的消息格式为:

σ

其中,σ

S104、所述第一从节点接收到所述第一提交消息后,进行第二验证,若所述第二验证通过,则所述第一从节点向所述第一主节点发送第二提交消息,所述第一主节点接收到所述第二提交消息后,进行第三验证,若所述第三验证通过,则所述第一主节点向所述第一从节点和非委员会节点广播第一同步消息。

本申请实施例中,第一委员会的提交阶段1(Commit1)包括:第一从节点接收到第一提交消息后,进行第二验证,若第二验证通过,进行第一委员会的提交阶段2(Commit2),第一委员会的提交阶段2包括:第一从节点向第一主节点发送第二提交消息,第一主节点接收到第二提交消息后,进行第三验证,若第三验证通过,进行第一委员会的广播同步阶段(Synchronize),第一委员会的广播同步阶段包括:第一主节点向第一从节点和非委员会节点广播第一同步消息,且第一主节点向非委员会节点广播的同步消息需要附带生成的区块,生成的区块即为第一区块。

其中,第一同步消息Synchronize1的消息格式为:

σ

其中,σ

可选的,第二验证,可以包括:

第一从节点接收到第一主节点发送的第一提交消息后,判断第二验证信息是否正确,若正确,则第二验证通过,第二验证信息包括:第一主节点的签名、第一主节点的视图号、第一区块的高度、第一区块的hash值及PG1;

其中,第一提交消息Commit1的消息格式为:

σ

其中,σ

可选的,第三验证,可以包括:

第三验证,包括:当第一主节点收到2e个第二提交消息,

σ

其中,σ

S105、第二主节点接收到所述第一提交消息之后,所述第二主节点向第二从节点广播第二预准备消息,所述第二从节点接收所述第二主节点发送的所述第二预准备消息并进行第四验证;

本申请实施例中,第二委员会的预准备阶段(Pre-Prepare)包括:第二主节点接收到第一提交消息之后,第二委员会开始共识,第二委员会中的第二主节点打包交易形成第二区块,并向第二从节点广播第二预准备消息,第二从节点接收第二主节点发送的第二预准备消息并进行第四验证。

其中,第二主节点通过可验证随机函数从第二委员会节点选举产生,第二从节点包括,第二委员会节点中除第二主节点外的其他节点,第二预准备消息中包括:第二区块;

S106、若所述第四验证通过,则所述第二从节点向第二主节点发送第二准备消息,当所述第二主节点接收到所述第二准备消息后,所述第二主节点向所述第二从节点和所述第一委员会节点广播第三提交消息,所述第三提交消息包括所述第二区块;

本申请实施例中,第二委员会的准备阶段(Prepare)包括:若第四验证通过,则第二委员会中的第二从节点向第二主节点发送第二准备消息,当第二主节点接收到

σ

其中,σ

第二提交消息包括第二区块,若第二从节点接收到的预准备消息并通过验证后,第二从节点发送的第二准备消息,即为有效的第二准备消息,通过发送有效的第二准备消息,提高了第二委员会中主节点和从节点交互过程中的安全性,并提高了节点交互的效率。

可选的,所述第四验证,可以包括:

第二从节点接收到第二主节点发送的第二预准备消息后,判断第四验证信息是否正确,若正确,则第四验证通过,第四验证信息包括:第二主节点的签名、第二主节点的视图号、第二区块的高度以及第二区块的hash值;

其中,第二预准备消息Pre-Prepare2的消息格式为:

σ

其中,σ

S107、所述第二从节点接收到所述第三提交消息后,进行第五验证,若所述第五验证通过,则所述第二从节点向所述第二主节点发送第四提交消息,所述第二主节点接收到所述第四提交消息后,进行第六验证,若所述第六验证通过,则所述第二主节点向所述第二从节点和所述非委员会节点广播第二同步消息。

本申请实施例中,第二委员会的提交阶段1(Commit1)包括:第二从节点接收到第三提交消息后,进行第五验证,若第五验证通过,进行第二委员会的提交阶段2(Commit2),第二委员会的提交阶段2包括:第二从节点向第二主节点发送第四提交消息,第二主节点接收到第四提交消息后,进行第六验证,若第六验证通过,进行第二委员会的广播同步阶段(Synchronize),第二委员会的广播同步阶段包括:第二主节点向第二从节点和非委员会节点广播第二同步消息,且第二主节点向非委员会节点广播的同步消息需要附带生成的区块,生成的区块即为第二区块。

其中,第二同步消息Synchronize2的消息格式为:

σ

其中,σ

可选的,所述第五验证,可以包括:

第二从节点接收到第二主节点发送的第三提交消息后,判断第五验证信息是否正确,若正确,则第五验证通过,第五验证信息包括:第二主节点的签名、第二主节点的视图号、第二区块的高度、第二区块的hash值及PG2;

其中,第三提交消息Commit3的消息格式为:

σ

其中,σ

可选的,所述第六验证,可以包括:

当第二主节点收到2e个第四提交消息,

其中,第四提交消息Commit4的消息格式为:

σ

其中,σ

可选的,本申请中的双委员会识别方法还可以包括:第一委员会节点更新流程和第二委员会节点更新流程;

所述第一委员会节点更新流程包括:

当所述第一委员会当前共识的区块的标号与所述第一委员会节点数量值相同时,若第一委员会的所述第一预准备消息的类型值为预设的第二值,进行正常所述双委员会共识流程,所述第二委员会节点接收到有效的所述第一提交消息后,执行单一委员会共识,其中,所述第一从节点接收到所述第一提交消息后,进行第二验证,若所述第二验证通过,所述第一提交消息即为有效的所述第一提交消息;

若所述第一委员会完成共识的区块数量与所述第一委员会节点数量相同,则所述第一主节点向所述第一委员会节点广播第一重配置消息,所述第一主节点根据委员会重配置协议进行所述第一委员会节点更新,当所述第一预准备消息的类型值为预设的第二值时,所述第二委员会节点执行单一委员会共识;

更进一步的,所述第一委员会节点更新流程中,第一主节点根据委员会重配置协议进行所述第一委员会节点更新,参考图3,具体如步骤S201至S204所示;

S201、重配置阶段(Reconfigure):

当第一委员会节点中的区块达到完成共识的区块数量与所述第一委员会节点数量相同的条件后,需要进行第一委员会节点的更新,为了保证第二委员会中共识仍然可以持续进行,第一主节点向第一委员会节点广播第一重配置消息,并向所述第二委员会节点发送所述第一提交消息,

所述第一重配置消息Reconfigure1的消息格式为:

σ

其中,σ

S202、重配置回复阶段(Rcf-Reply):

若所述第一重配置消息中flag1=1,则再验证所述BD 1中是否存在异常的所述第一委员会节点,若不存在异常的所述第一委员会节点,则验证通过,所述第一从节点向所述第一主节点发送第一重配置回复消息;

所述第一重配置回复消息Rcf-Reply1的消息格式为:

σ

其中,σ

当所述第一主节点接收到2e个所述第一委员会节点发送的所述第一重配置回复消息,且判断第一重配置回复信息是否正确;

所述第一重配置回复信息包括:所述第一重配置回复消息中第一委员会的从节点i1的签名,所述第一主节点的视图号,所述将要被替换的所述第一委员会节点的编号集合,所述完成共识的所述第一区块数量,所述完成共识的最高所述第一区块的hash值。

S203、重配置提交阶段(Rcf-Commit):

若第一重配置回复信息正确,则所述第一主节点计算出第一替换节点;

可选的,第一主节点计算出第一替换节点,可以包括:

所述第一主节点通过可验证随机函数VRF计算出第一随机值z1;

其中,z1=output/2

所述第一主节点将所述非委员会节点按照可信度分值由高到低进行所述非委员会节点排序;

若所述第一重配置消息中所述flag1=1,则确定所述第一替换节点为所述非委员会节点排序中的第

其中,所述非委员会节点数量为en;

若所述第一重配置消息中所述flag1=2,则所述非委员会节点排序中的第

其中,所述gn表示可信度分值排名为前gn的所述非委员会节点数;

接着,第一委员会中的主节点向联盟链中的所有节点广播一条第一重配置提交消息Rcf-Commit1,第一重配置提交消息的消息格式为:

σ

其中,σ

联盟链中的节点接收到第一重配置提交消息后,需要验证第一重配置信息是否正确,若第一重配置信息正确,则进行更新阶段(Update);

第一重配置信息包括:第一主节点p1的签名、第一主节点计算出的GD1以及RV1和BD1。

S204、更新阶段(Update):

GD1中的第一替换节点发送第一更新消息(Update1)给第一委员会节点请求加入第一委员会,第一更新消息消息格式为σ

其中,σ

所述第二委员会更新流程包括:

当所述第二委员会当前共识的区块的标号与所述第一委员会节点数量值相同时,若所述第二委员会的第二预准备消息的类型值为预设的第二值,进行正常所述双委员会共识流程,所述第一委员会接收到有效的所述第三提交消息后,执行单一委员会共识,其中,所述第二从节点接收到所述第三提交消息后,进行第五验证,若所述第五验证通过,所述第三提交消息即为有效的第三提交消息;

若所述第二委员会完成共识的区块数量与所述第二委员会节点数量相同,则所述第二主节点向所述第二委员会节点广播第二重配置消息,所述第二主节点根据委员会重配置协议进行所述第二委员会节点更新,当所述第二预准备消息的类型值为预设的第二值时,所述第一委员会节点执行单一委员会共识;

更进一步的,所述第二委员会节点更新流程中,第二主节点根据委员会重配置协议进行所述第二委员会节点更新,具体如步骤S301至S304所示;

S301、重配置阶段(Reconfigure):

当第二委员会节点中的区块达到完成共识的区块数量与所述第二委员会节点数量相同的条件后,需要进行第二委员会节点的更新,为了保证第二委员会中共识仍然可以持续进行,第二主节点向第二委员会节点广播第二重配置消息,并向所述第一委员会节点发送所述第三提交消息,

所述第二重配置消息Reconfigure2的消息格式为:

σ

其中,σ

S202、重配置回复阶段(Rcf-Reply):

若所述第二重配置消息中flag2=2,则再验证所述BD 2中是否存在异常的所述第二委员会节点,若不存在异常的所述第二委员会节点,则验证通过,所述第二从节点向所述第二主节点发送第二重配置回复消息;

所述第二重配置回复消息Rcf-Reply2的消息格式为:

σ

其中,σ

当所述第二主节点接收到2e个所述第二委员会节点发送的所述第二重配置回复消息,且判断第二重配置回复信息是否正确;

所述第二重配置回复信息包括:所述第二重配置回复消息中第二委员会的从节点i2的签名,所述第二主节点的视图号,所述将要被替换的所述第二委员会节点的编号集合,所述完成共识的所述第二区块数量,所述完成共识的最高所述第二区块的hash值。

S203、重配置提交阶段(Rcf-Commit):

若第二重配置回复信息正确,则所述第二主节点计算出第二替换节点;

可选的,第二主节点计算出第二替换节点,可以包括:

所述第二主节点通过可验证随机函数VRF计算出第二随机值z2;

其中,z2=output/2

所述第二主节点将所述非委员会节点按照可信度分值由高到低进行所述非委员会节点排序;

若所述第二重配置消息中所述flag2=1,则确定所述第二替换节点为所述非委员会节点排序中的第

其中,所述非委员会节点数量为en;

若所述第二重配置消息中所述flag2=2,则所述非委员会节点排序中的第

其中,所述gn表示可信度分值排名为前gn的所述非委员会节点数;

接着,第二委员会中的主节点向联盟链中的所有节点广播一条第二重配置提交消息Rcf-Commit2,第二重配置提交消息的消息格式为:

σ

其中,σ

联盟链中的节点接收到第二重配置提交消息后,需要验证第二重配置信息是否正确,若第二重配置信息正确,则进行更新阶段(Update);

第二重配置信息包括:第二主节点p2的签名、第二主节点计算出的GD2以及RV2和BD2。

S204、更新阶段(Update):

GD2中的第二替换节点发送第二更新消息(Update2)给第二委员会节点请求加入第二委员会,第二更新消息消息格式为σ

其中,σ

可选的,本申请中的双委员会识别方法,还可以包括:第一委员会节点评估机制,和第二委员会节点评估机制;

所述第一委员会节点评估机制包括:

所述第一主节点接收所述第一从节点发送的第二提交消息;

若所述第一主节点接收到的所述第二提交消息数量不少于2e个,所述第一主节点通过如下方式得到所述可信度分值奖励:

Ps2=Ps1+x;

其中,x为可信度分值奖励,Ps1为所述第一主节点的可信度分值,Ps2为奖励后的所述第一主节点的可信度分值;

若发生第一视图切换时,新产生的第一主节点接收到的所述第一准备消息不少于2e+1个,所述第一主节点得到所述可信度分值惩罚,所述可信度分值惩罚,具体为:

Ps3=Ps1-d*x;

其中,d为惩罚参数,且d大于1,x为可信度分值奖励,Ps1为所述第一主节点的可信度分值,Ps3为惩罚后的所述第一主节点的可信度分值;

若第一主节点中的第一区块共识失败,则第一主节点进行第一视图切换,在进行第一视图切换时,第一委员会中的第一从节点向第一主节点发送第一准备消息,若第一主节点接收到的所述第一准备消息的数量不少于2e+1个,则所述第一主节点的第一预准备阶段并未出错,但是第一主节点的第一区块共识超时,仍要对第一主节点进行可信度分值惩罚;

若所述第一主节点所述新产生的第一主节点接收到的所述第一准备消息少于2e+1个,则表示第一主节点共识出现故障第一主节点的可信度分值减半,若第一主节点的可信度分值低于下限,则第一主节点将会被标记为异常节点,不允许参与后续共识,并将会通过第一委员会重配置协议对第一主节点进行替换。

所述第二委员会节点评估机制,具体为:

所述第二主节点接收所述第二从节点发送的第三提交消息;

若所述第二主节点接收到的所述第四提交消息数量不少于2e+1个,所述第二主节点得到所述可信度分值奖励,所述可信度分值奖励,具体为:

Ps5=Ps4+x;

其中,x为可信度分值奖励,Ps4为所述第二主节点的可信度分值,Ps5为奖励后的所述第二主节点的可信度分值;

若发生第二视图切换时,新产生的第二主节点接收到的所述第二准备消息不少于2e+1个,所述第二主节点得到所述可信度分值惩罚,所述可信度分值惩罚,具体为:

Ps6=Ps4-d*x;

其中,d为惩罚参数,且d大于1,x为可信度分值奖励,Ps4为所述第二主节点的可信度分值,Ps6为惩罚后的所述第二主节点的可信度分值;

若第二主节点中的第二区块共识失败,则第二主节点进行第二视图切换,在进行第二视图切换时,第二委员会中的第二从节点向第二主节点发送第二准备消息,若第二主节点接收到的所述第二准备消息的数量不少于2e+1个,则所述第二主节点的第二预准备阶段并未出错,但是第二主节点的第二区块共识超时,仍要对第二主节点进行可信度分值惩罚;

若所述第二主节点第二次接收到的第二提交消息数量少于2e+1个,表示第二主节点共识出现故障,第二主节点的可信度分值减半,若第二主节点的可信度分值低于下限,则第二主节点将会被标记为异常节点,不允许参与后续共识,并将会通过第二委员会重配置协议对第二主节点进行替换。

联盟链中的节点虽然都具有较高的可信度,但是不排除会有恶意节点的存在,双委员会共识流程中,主节点发挥着非常重要的作用,如果主节点出现故障,该次共识肯定是失败的,为了进一步提高第一委员会和第二委员会的可信度与共识成功率。

可选的,本实施例中,双委员会识别方法中,第一视图切换和第二视图切换可以包括:

若所述第一委员会节点共识超时或者所述第一主节点故障,则进行所述第一视图切换,所述第一视图切换流程为:

当所述第二委员会节点已接收到所述第一主节点发送的所述第一提交消息,说明第一委员会中的第一主节点已完成准备阶段,第一区块是可以确认的,若所述第一委员会节点广播第一视图切换消息此时第一委员会中发生视图切换并不会影响新产生的第一主节点的区块的合法性;

所述第一视图切换消息View-Change1的消息格式为:

σ

其中,σ

所述新产生的第一主节点接收到所述第一视图切换消息后进行验证,当所述新产生的第一主节点接收到2e+1个第一视图切换消息后,所述新产生的第一主节点向所述第一委员会节点广播第一新视图消息New-View;

所述第一新视图消息New-View1的消息格式为:

σ

其中,σ

当所述第一委员会节点向所述第二委员会节点广播所述第一视图切换消息时,若所述第二委员会节点已向所述第一委员会节点广播所述第二区块,则所述第二委员会节点采取双委员会共识;

当所述第一委员会节点向所述第二委员会节点广播所述第一视图切换消息时,若所述第二委员会节点还未向所述第一委员会节点广播所述第二区块,且第二委员会节点收到2e+1个有效的第一视图切换消息时,所述第二委员会节点采取单委员会共识,若所述新产生的第一主节点接收到所述第一视图切换消息后进行验证并且所述验证通过,其中,第一视图切换消息即为有效的第一视图切换消息;

另外,当第二委员会节点进行新一轮的第二委员会节点共识,产生新的第二区块并向第一委员会节点广播,当第一委员会节点能够接收到第二委员会节点广播的新的第二区块,则两个委员会节点采取双委员会共识;

更进一步的,当第二委员会节点未接收到第一提交消息时,则说明第一委员会中的第一主节点并未产生第一区块,并且第一委员会中的第一主节点未完成准备阶段,PG1中的第一准备消息基本为空,新产生的第一主节点需要重新进行第一委员会节点共识,并且第一委员会节点不会向第二委员会节点广播第一视图切换消息,第二委员会节点等待新产生的第一主节点发送新产生的第一提交消息后,再进行双委员会共识。

若所述第二委员会共识超时或者所述第二主节点故障,则进行所述第二视图切换,所述第二视图切换,包括:

当所述第一委员会节点已接收到所述第二主节点发送的所述第三提交消息,说明第二委员会中的第二主节点已完成准备阶段,第二区块是可以确认的,若所述第二委员会节点广播第一视图切换消息,此时第二委员会中发生视图切换并不会影响新产生的第二主节点的区块的合法性;

所述第二视图切换消息View-Change2的消息格式为:

σ

所述新产生的第二主节点接收到所述第二视图切换消息后进行验证,当所述新产生的第二主节点接收到2e+1个第二视图切换消息后,所述新产生的第二主节点向所述第二委员会节点广播第二新视图消息;

所述第二新视图消息的消息格式为:

σ

其中,σ

当所述第二委员会节点向所述第一委员会节点广播所述第二视图切换消息时,若所述第一委员会节点已向所述第二委员会节点广播所述第一区块,则所述第一委员会节点采取双委员会共识;

当所述第二委员会节点向所述第一委员会节点广播所述第二视图切换消息时,若所述第一委员会节点还未向所述第二委员会节点广播所述第一区块,且所述第一委员会节点收到2e+1个有效的第二视图切换消息,所述第一委员会节点采取单委员会共识,若所述新产生的第二主节点接收到所述第二视图切换消息后进行验证并且所述验证通过,其中,第二视图切换消息即为有效的第二视图切换消息。

另外,当第一委员会节点进行新一轮的第一委员会节点共识,产生新的第一区块并向第二委员会节点广播,当第二委员会节点能够接收到第一委员会节点广播的新的第一区块,则两个委员会节点采取双委员会共识;

更进一步的,当第一委员会节点未接收到第三提交消息时,则说明第二委员会中的第二主节点并未产生第二区块,并且第二委员会中的第二主节点未完成准备阶段,PG3中的第二准备消息基本为空,新产生的第二主节点需要重新进行第二委员会节点共识,并且第二委员会节点不会向所述第一委员会节点广播所述第二视图切换消息,第一委员会节点等待新产生的第二主节点发送新产生的第三提交消息后,再进行双委员会共识。

如此,进行了上述的第一视图切换和第二视图切换,保证了第一委员会和第二委员会的活性。

如图4所示,为本申请实施例提供的一种双委员会共识装置的结构示意图,下述将对一种双委员会共识装置进行介绍,相关内容请参见上述方法实施例,所述双委员会共识装置包括:

前述本申请实施例提供基于上述的一种双委员会共识方法。接下来说明本申请实施例中还提供的一种双委员会共识装置,该装置执行前述图1所示的方法,接下来对双委员会共识装置的功能进行说明,所述双委员会共识装置的结构框图如图4所示,包括:

所述双委员会共识装置,应用于目标联盟链,所述装置包括:

委员会选举模块401,用于获取所述目标联盟链中的各个节点,所述各个节点的初始可信度分值相同,基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点,所述第一委员会节点属于第一委员会,所述第二委员会节点属于第二委员会,所述第一委员会的节点数和所述第二委员会的节点数相同,并且所述第一委员会的节点数和所述第二委员会的节点数相加的结果不超过所述目标联盟链的节点数;

双委员会共识处理模块402,通过第一主节点向第一从节点广播第一预准备消息,所述第一从节点接收所述第一主节点发送的所述第一预准备消息并进行第一验证;

其中,所述第一主节点通过所述可验证随机函数从所述第一委员会节点选举产生,所述第一从节点包括:所述第一委员会节点中除所述第一主节点外的其他节点,所述第一预准备消息中包括:第一区块;

若所述第一验证通过,则所述第一从节点向所述第一主节点发送第一准备消息,当所述第一主节点接收到所述第一准备消息后,所述第一主节点向所述第一从节点和所述第二委员会节点广播第一提交消息,所述第一提交消息包括所述第一区块;

所述第一从节点接收到所述第一提交消息后,进行第二验证,若所述第二验证通过,则所述第一从节点向所述第一主节点发送第二提交消息,所述第一主节点接收到所述第二提交消息后,进行第三验证,若所述第三验证通过,则所述第一主节点向所述第一从节点和非委员会节点广播第一同步消息;

第二主节点接收到所述第一提交消息之后,所述第二主节点向第二从节点广播第二预准备消息,所述第二从节点接收所述第二主节点发送的所述第二预准备消息并进行第四验证;

其中,所述第二主节点通过所述可验证随机函数从所述第二委员会节点选举产生,所述第二从节点包括,所述第二委员会节点中除所述第二主节点外的其他节点,所述第二预准备消息中包括:第二区块;

若所述第四验证通过,则所述第二从节点向第二主节点发送第二准备消息,当所述第二主节点接收到所述第二准备消息后,所述第二主节点向所述第二从节点和所述第一委员会节点广播第三提交消息,所述第三提交消息包括所述第二区块;

所述第二从节点接收到所述第三提交消息后,进行第五验证,若所述第五验证通过,则所述第二从节点向所述第二主节点发送第四提交消息,所述第二主节点接收到所述第四提交消息后,进行第六验证,若所述第六验证通过,则所述第二主节点向所述第二从节点和所述非委员会节点广播第二同步消息。

可选的,所述委员会选举模块401可以包括:

所述基于可验证随机函数在所述各个节点中选取第一委员会节点和第二委员会节点,包括:

所述目标联盟链中的所有节点均基于所述可验证随机函数VRF产生对应随机输出值output和对应随机证明值pi,所述output为哈希hash值;

所述目标联盟链中的节点被选择为委员会节点的概率为w值,所述w值具体为:w=2c/n,所述目标联盟链中的节点个数为n,其中,一个委员会包括的节点个数为c;

判断z值是否小于所述w值;

其中,所述z值具体为:z=output/2

当所述z值小于所述w值时,则所述目标联盟链中的节点被选为所述委员会节点,并且所述委员会节点向所述目标联盟链中的所有节点广播委员会请求消息;

所述目标联盟链中的所有节点对所述委员会请求消息进行验证;

若验证通过,则根据所述委员会节点的z值,对所述委员会节点进行从小到大的顺序排序,并从所述委员会节点中选取所述第一委员会节点和所述第二委员会节点。

可选的,双委员会共识处理模块402,可以包括:验证模块;

所述验证模块,可以包括:

所述第一验证、所述第二验证、所述第三验证、所述第四验证、所述第五验证、所述第六验证,可以包括:

所述第一验证,包括:所述第一从节点接收到所述第一主节点发送的所述第一预准备消息后,判断第一验证信息是否正确,若正确,则所述第一验证通过,所述第一验证信息包括:所述第一主节点的签名、所述第一主节点的视图号、所述第一区块的高度以及所述第一区块的hash值;

其中,所述第一预准备消息Pre-Prepare1的消息格式为:

σ

其中,σ

所述第二验证,包括:所述第一从节点接收到所述第一主节点发送的所述第一提交消息后,判断第二验证信息是否正确,若正确,则所述第二验证通过,所述第二验证信息包括:所述第一主节点的签名、所述第一主节点的视图号、所述第一区块的高度、所述第一区块的hash值及PG1;

其中,所述第一提交消息Commit1的消息格式为:

σ

其中,σ

所述第三验证,包括:当所述第一主节点收到2e个所述第二提交消息,所述

所述第四验证,包括:所述第二从节点接收到所述第二主节点发送的所述第二预准备消息后,判断第四验证信息是否正确,若正确,则所述第四验证通过,所述第四验证信息包括:所述第二主节点的签名、所述第二主节点的视图号、所述第二区块的高度以及所述第二区块的hash值;

其中,所述第二预准备消息Pre-Prepare2的消息格式为:

σ

其中,σ

所述第五验证,包括:所述第二从节点接收到所述第二主节点发送的所述第三提交消息后,判断第五验证信息是否正确,若正确,则所述第五验证通过,所述第五验证信息包括:所述第二主节点的签名、所述第二主节点的视图号、所述第二区块的高度、所述第二区块的hash值及PG2;

其中所述第三提交消息Commit3的消息格式为:

σ

其中,σ

所述第六验证,包括:当所述第二主节点收到2e个所述第四提交消息,所述

可选的,所述双委员会共识装置,可以包括:更新模块:

所述更新模块,可以包括:

第一委员会节点更新流程和第二委员会节点更新流程;

所述第一委员会节点更新流程包括:

当所述第一委员会当前共识的区块的标号与所述第一委员会节点数量值相同时,若第一委员会的所述第一预准备消息的类型值为预设的第二值,进行正常所述双委员会共识流程,所述第二委员会节点接收到有效的所述第一提交消息后,执行单一委员会共识,其中,所述第一从节点接收到所述第一提交消息后,进行第二验证,若所述第二验证通过,所述第一提交消息即为有效的所述第一提交消息;

若所述第一委员会完成共识的区块数量与所述第一委员会节点数量相同,则所述第一主节点向所述第一委员会节点广播第一重配置消息,所述第一主节点根据委员会重配置协议进行所述第一委员会节点更新;

当所述第一预准备消息的类型值为预设的第二值时,所述第二委员会节点执行单一委员会共识;

所述第二委员会节点更新,具体为:

当所述第二委员会当前共识的区块的标号与所述第一委员会节点数量值相同时,若所述第二委员会的第二预准备消息的类型值为预设的第二值,进行正常所述双委员会共识流程,所述第一委员会接收到有效的所述第三提交消息后,执行单一委员会共识,其中,所述第二从节点接收到所述第三提交消息后,进行第五验证,若所述第五验证通过,所述第三提交消息即为有效的第三提交消息;

若所述第二委员会节点完成共识的区块数量与所述第二委员会节点数量相同,则所述第二主节点向所述第二委员会节点广播第二重配置消息,所述第二主节点根据委员会重配置协议进行所述第二委员会节点更新;

当所述第二预准备消息的类型值为预设的第二值时,所述第一委员会节点执行单一委员会共识。

可选的,所述更新模块,可以包括:

所述第一主节点根据委员会重配置协议进行所述第一委员会节点更新,包括:

所述第一主节点根据委员会重配置协议进行所述第一委员会节点更新,具体为:

所述第一重配置消息Reconfigure1的消息格式为:

σ

其中,σ

若所述第一重配置消息中flag1=1,则再验证所述BD 1中是否存在异常的所述第一委员会节点,若不存在异常的所述第一委员会节点,则验证通过,所述第一从节点向所述第一主节点发送第一重配置回复消息;

所述第一重配置回复消息Rcf-Reply1的消息格式为:

σ

其中,σ

当所述第一主节点接收到2e个所述第一委员会节点发送的所述第一重配置回复消息,且判断第一重配置回复信息是否正确,若正确,则所述第一主节点计算出第一替换节点,并进行所述第一委员会节点更新;

所述第一重配置回复信息包括:所述第一重配置回复消息中第一委员会的从节点i1的签名,所述第一主节点的视图号,所述将要被替换的所述第一委员会节点的编号集合,所述完成共识的所述第一区块数量,所述完成共识的最高所述第一区块的hash值;

所述第二主节点根据委员会重配置协议进行所述第二委员会节点更新,具体为:

所述第二重配置消息Reconfigure2的消息格式为:

σ

其中,σ

若所述第二重配置消息中所述flag2=1,则再验证所述BD 2中是否存在异常的所述第二委员会节点,若不存在异常的所述第二委员会节点,则验证通过,所述第二从节点向所述第二主节点发送第二重配置回复消息;

所述第二重配置回复消息Rcf-Reply2的消息格式为:

σ

其中,σ

当所述第二主节点接收到2e个所述第二委员会节点发送的所述第二重配置回复消息,且判断第二重配置回复信息是否正确,若正确,则所述第二主节点计算出第二替换节点,并进行所述第二委员会节点更新;

所述第二重配置回复信息包括:所述第二重配置回复消息中第二委员会中从节点i2的签名,所述第二主节点的视图号,所述将要被替换的所述第二委员会节点的编号集合,所述完成共识的所述第二区块数量,所述完成共识的最高所述第二区块的hash值。

可选的,所述更新模块,可以包括:

所述第一主节点计算出第一替换节点,和所述第二主节点计算出第二替换节点,包括:

所述第一主节点计算出第一替换节点,具体为:

所述第一主节点通过可验证随机函数计算出第一随机值z1;

其中,z1=output/2

所述第一主节点将所述非委员会节点按照可信度分值由高到低进行所述非委员会节点排序;

若所述第一重配置消息中所述flag1=1,则确定所述第一替换节点为所述非委员会节点排序中的第

其中,所述非委员会节点数量为en;

若所述第一重配置消息中所述flag1=2,则所述非委员会节点排序中的第

其中,所述gn表示可信度分值排名为前gn的所述非委员会节点数;

所述第二主节点计算出第二替换节点,具体为:

所述第二主节点通过可验证随机函数计算出第二随机值z2;

其中,z2=output/2

所述第二主节点将所述非委员会节点按照可信度分值由高到低进行所述非委员会节点排序;

若所述第二重配置消息中所述flag2=1,则确定所述第二替换节点为所述非委员会节点排序中的第

其中,所述非委员会节点数量为en;

若所述第二重配置消息中所述flag2=2,则所述非委员会节点排序中的第

其中,所述gn表示可信度分值排名为前gn的所述非委员会节点数。

可选的,所述双委员会共识装置,可以包括:节点评估模块;

所述节点评估模块可以包括:

第一委员会节点评估机制,和第二委员会节点评估机制;

所述第一委员会节点评估机制,具体为:

所述第一主节点接收所述第一从节点发送的第二提交消息;

若所述第一主节点接收到的所述第二提交消息数量不少于2e个,所述第一主节点通过如下方式得到所述可信度分值奖励:

Ps2=Ps1+x;

其中,x为可信度分值奖励,Ps1为所述第一主节点的可信度分值,Ps2为奖励后的所述第一主节点的可信度分值;

若发生第一视图切换时,新产生的第一主节点接收到的所述第一准备消息不少于2e+1,所述第一主节点得到所述可信度分值惩罚,所述可信度分值惩罚,具体为:

Ps3=Ps1-d*x;

其中,d为惩罚参数,且d大于1,x为可信度分值奖励,Ps1为所述第一主节点的可信度分值,Ps3为惩罚后的所述第一主节点的可信度分值;

若发生第一视图切换时,新产生的第一主节点接收到的所述第一准备消息少于2e+1个,则所述第一主节点的第一可信度分值减半,若所述第一可信度分值低于下限,则所述第一主节点失去参与所述第一委员会节点共识的机会;

所述第二委员会节点评估机制,具体为:

所述第二主节点接收所述第二从节点发送的第三提交消息;

若所述第二主节点接收到的所述第四提交消息数量不少于2e个,所述第二主节点得到所述可信度分值奖励,所述可信度分值奖励,具体为:

Ps5=Ps4+x;

其中,x为可信度分值奖励,Ps4为所述第二主节点的可信度分值,Ps5为奖励后的所述第二主节点的可信度分值;

若发生第二视图切换时,新产生的第二主节点接收到的所述第二准备消息不少于2e+1个,所述第二主节点得到所述可信度分值惩罚,所述可信度分值惩罚,具体为:

Ps6=Ps4-d*x;

其中,d为惩罚参数,且d大于1,x为可信度分值奖励,Ps4为所述第二主节点的可信度分值,Ps6为惩罚后的所述第二主节点的可信度分值;

若所述新产生的第二主节点接收到的所述第二准备消息少于2e+1个,所述第二主节点的第二可信度分值减半,若所述第二可信度分值低于下限,则所述第二主节点失去参与所述第二委员会节点共识的机会。

可选的,所述双委员会共识装置,可以包括:视图切换模块;

所述视图切换模块包括:

第一视图切换和第二视图切换;

若第一委员会节点共识超时或者第一主节点故障,则进行所述第一视图切换,所述第一视图切换,包括:

当所述第二委员会节点已接收到所述第一主节点发送的所述第一提交消息,所述第一委员会节点向第一委员会和第二委员会广播第一视图切换消息;

所述第一视图切换消息View-Change1的消息格式为:

σ

其中,σ

所述新产生的第一主节点接收到所述第一视图切换消息后进行验证,当所述新产生的第一主节点接收到2e+1个第一视图切换消息后,所述新产生的第一主节点向所述第一委员会节点广播第一新视图消息;

所述第一新视图消息New-View1的消息格式为:

σ

其中,σ

当所述第一委员会节点向所述第二委员会节点广播所述第一视图切换消息时,若所述第二委员会节点已向所述第一委员会节点广播所述第二区块,则所述第二委员会节点采取双委员会共识;

当所述第一委员会节点向所述第二委员会节点广播所述第一视图切换消息时,若所述第二委员会节点还未向所述第一委员会节点广播所述第二区块,且第二委员会节点收到2e+1个有效的第一视图切换消息时,所述第二委员会节点采取单委员会共识,若所述新产生的第一主节点接收到所述第一视图切换消息后进行验证并且所述验证通过,其中,第一视图切换消息即为有效的第一视图切换消息;

若所述第二主节点未向所述第二从节点和所述第一委员会节点广播所述第二同步消息,则进行所述第二视图切换,所述第二视图切换,包括:

当所述第一委员会节点已接收到所述第二主节点发送的所述第三提交消息,所述第二委员会节点向第一委员会和第二委员会广播第二视图切换消息;

所述第二视图切换消息View-Change2的消息格式为:

σ

所述新产生的第二主节点接收到所述第二视图切换消息后进行验证,当所述新产生的第二主节点接收到2e+1个第二视图切换消息后,所述新产生的第二主节点向所述第二委员会节点广播第二新视图消息;

所述第二新视图消息的消息格式为:

σ

其中,σ

当所述新产生的第二主节点向所述第一委员会节点广播所述第二新视图消息时,若所述第一委员会节点已向所述第二委员会节点广播所述第一区块,则所述第一委员会节点采取双委员会共识;

当所述新产生的第二主节点向所述第一委员会节点广播所述第二新视图消息时,若所述第一委员会节点还未向所述第二委员会节点广播所述第一区块,且所述第一委员会节点收到2e+1个有效的第二视图切换消息,所述第一委员会节点采取单委员会共识,若所述新产生的第二主节点接收到所述第二视图切换消息后进行验证并且所述验证通过,其中,第二视图切换消息即为有效的第二视图切换消息。

本申请公开了一种双委员会共识方法及装置,应用于目标联盟链,所述方法包括:初始委员会选举流程和双委员会共识流程,初始委员会选举流程包括:获取目标联盟链中的各个节点,在各个节点中选取第一委员会节点和第二委员会节点;双委员会共识流程包括:第一委员会中的主节点向从节点广播预准备消息,以使从节点反馈准备消息给主节点,主节点再向从节点和第二委员会发送提交消息,从节点接收到提交消息后向主节点进行反馈,以使主节点广播同步消息,第二委员会接收到提交消息后,第二委员会中的主节点向从节点发送预准备消息,以使从节点反馈准备消息给主节点,主节点再向从节点和第一委员会节点广播提交消息,从节点接收到提交消息后向主节点进行反馈,以使主节点广播同步消息,上述共识过程中,解决了基于实用拜占庭容错算法可扩展性较低以及高通信开销的问题,同时也减少单委员会全节点广播、委员会成员更新以及视图切换对单委员会共识效率的影响,进一步提高了委员会共识效率。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号