一种新型区块链共识算法RBFT的实现方法[发明专利]

(19)中华人民共和国国家知识产权局
(12)发明专利申请
(10)申请公布号 (43)申请公布日 (21)申请号 202010993360.1
(22)申请日 2020.09.21
(71)申请人 中国电子科技网络信息安全有限公
地址 610207 四川省成都市双流区西南航
空港经济开发区工业集中区内
(72)发明人 韩虎 苏云龙 白健 安红章 
(74)专利代理机构 成都九鼎天元知识产权代理
有限公司 51214
代理人 贾年龙
(51)Int.Cl.
H04L  29/08(2006.01)
H04L  12/26(2006.01)
H04L  29/06(2006.01)
(54)发明名称
一种新型区块共识算法RBFT的实现方法
(57)摘要
本发明公开了一种新型区块链共识算法
RBFT的实现方法。本发明能有效防止恶意节点
击。RBFT共识算法在总节点数为3f+1时能够容忍
f个恶意节点的攻击,因此采用该共识算法的区
块链系统能够拥有和采用PBFT共识算法的区块
链系统相同的安全性。和PBFT共识算法相比,
RBFT共识算法由于少了一次多对多全节点广播,
因此在网络流量和交互次数上都比PBFT更低,因
此具有更高的共识性能,能用应用在更广泛的场
景中。权利要求书2页  说明书5页  附图1页CN 112153136 A 2020.12.29
C N  112153136
A
1.一种新型区块链共识算法RBFT的实现方法,其特征在于,包括以下步骤:
S1、通过客户端的共识请求完成共识;
S2、当检测到心跳超时或共识失败时,进行主节点的视图切换;
S3、对视图切换后的主节点落后的副节点进行同步,完成RBFT共识算法。
2.根据权利要求1所述的新型区块链共识算法RBFT的实现方法,其特征在于,所述步骤S1的具体步骤为:
S11、通过客户端将共识请求Request<channel,env>发送给任意一个orderer节点;
其中,channel为交易所属的通道ID,env为交易实体;
S12、当收到客户端请求的orderer节点不是当前共识集的leader节点,则通过该orderer节点将共识请求转发给leader节点,否则,判断leader节点能否出块,若出块则进入步骤S13,否则返回步骤S11;
S13、将区块数据追加到本地日志,并通过leader节点向自己和其他follower节点广播日志追加信息Append<MsgApp,height,term,blockData,sig,cert>;
其中,MsgApp为追加日志的消息类型,height为当前共识的区块高度,term为当前主节点任期,blockData为区块数据,sig为节点对(height,blockData)的签名,cert为身份证书;
S14、通过leader节点和follower节点对所有节点发送广播消息AppResp<MsgAppResp, height,blockHash,sig1,cert>;
其中,MsgAppResp为追加响应消息类型,blockHash为区块数据的hash值,sig1为发送方对(height,blockHash)的签名;
S15、当leader节点和follower节点在收到法定人数的AppResp广播消息后提交区块到本地账本,完成本轮共识。
3.根据权利要求1所述的新型区块链共识算法RBFT的实现方法,其特征在于,所述步骤S2的具体步骤为:
S21、当检测到心跳超时,或共识失败时,触发视图切换;
S22、组装消息<<id,term+1,voteMsgType>,sign<id,term+1,voteMsgType>>,并将该消息广播给共识集内的其他节点;
其中,id为发起换主的节点号,term为下一个主节点的任期,voteMsgType为投票消息类型,sign为使用私钥对id+term+voteMsgType进行签名后的数据;
S23、当节点收到组装消息后,验证组装消息的签名,当验证未通过则丢弃该组装消息,否则判断term+1与本地的localTerm相同,则发送<<id,localTerm,voteMsgType>,sign (id,localTerm,voteMsgType)>给该节点,如果收到大于2/3个合法有效的组装消息后,将本地的localTerm锁定到term+1;
其中,localTerm为本地主节点的任期;
S24、根据任期号采用取模方法计算当前的主节点号,当前主节点的编号为localTerm%n+1,完成视图切换。
4.根据权利要求1所述的新型区块链共识算法RBFT的实现方法,其特征在于,所述步骤S3的具体步骤为:
S31、当副节点的提交记录小于主节点分发的日志高度N时,触发节点同步流程;
S32、当其它节点收到类型为MsgGetHash的消息m后,根据GetIndexHash方法在本地数据库中寻到索引为N-1到N的block,计算其hash值,并返回类型主MsgGetHashRes的消息m2到副节点;
S33、当副节点收到的Hash字段相等的元素个数大于f+1时,认为该元素有效,遍历每个节点返回的[]blockhash,当这些节点Index为i的blockhash,其Hash值相等的个数大于f+ 1,则认为索引为i的block日志有效;
其中,2f+1为发送索引为N的消息来源节点集合中发送索引为N的消息个数,[] blockhash为区块的hash队列,Index为区块的序号,Hash为区块的hash;
S34、在f+1个节点中随机选择一个节点,向其发送类型为MsgGetData的Message消息;
S35、当f+1个节点中的一个节点接收到Message消息后,根据GetIndexData方法在本地区块数据中到相应的block集合,并返回类型主MsgGetDataRes的消息;
S36、在请求节点接收到MsgGetDataRes消息后,遍历[]indexblock,计算每个Data的hash值,如果与前面接收的hash值一致,则将该Data追加到本地数据库中;
其中,Data为block的值。
5.根据权利要求4所述的新型区块链共识算法RBFT的实现方法,其特征在于,所述步骤S31的具体步骤为:
为了防止在Append阶段,主节点恶意不将区块分发到某个副节点,该副节点在AppResp 阶段,接收来自其它节点的MsgAppResp消息m,若m的Index为N,由于副节点未接收到来自主节点分发的高度为N的日志,因此副节点本地的提交记录小于N,此时触发节点同步流程。
6.根据权利要求5所述的新型区块链共识算法RBFT的实现方法,其特征在于,2f+1个所述Index为N的消息来源的集合为prs,副节点3遍历prs节点的id,利用send方法将Mssage类型的消息m传送到每个节点。
一种新型区块链共识算法RBFT的实现方法
技术领域
[0001]本发明涉及区块链技术领域,具体涉及一种新型区块链共识算法RBFT的实现方法。
背景技术
[0002]现有区块链系统共识算法存在的问题:
[0003](1)能容忍恶意节点,但性能低下。目前区块链系统常见的提供安全性保障的共识算法,如pow共识算法,pbft共识算法。他们都能容忍一定数量的恶意节点,但是性能较低,无法使用在大规模的应用场景中。
[0004](2)性能较高,但不能容忍恶意节点。目前区块链系统常见的提供高效处理性能的共识算法,如raft共识算法,基于kafka的背书验证共识算法。他们都能提供很高的共识性能,但是却无法防止共识节点中的恶意节点作恶。
发明内容
[0005]针对现有技术中的上述不足,本发明提供的一种新型区块链共识算法RBFT的实现方法解决了现有区块链系统的共识算法在安全与性能上的矛盾关系的问题。
[0006]为了达到上述发明目的,本发明采用的技术方案为:一种新型区块链共识算法RBFT的实现方法,包括以下步骤:
[0007]S1、通过客户端的共识请求完成共识;
[0008]S2、当检测到心跳超时或共识失败时,进行主节点的视图切换;
[0009]S3、对视图切换后的主节点落后的副节点进行同步,完成RBFT共识算法。[0010]进一步地:所述步骤S1的具体步骤为:
[0011]S11、通过客户端将共识请求Request<channel,env>发送给任意一个orderer节点;
[0012]其中,channel为交易所属的通道ID,env为交易实体;
[0013]S12、当收到客户端请求的orderer节点不是当前共识集的leader节点,则通过该orderer节点将共识请求转发给leader节点,否则,判断leader节点能否出块,若出块则进入步骤S13,否则返回步骤S11;
[0014]S13、将区块数据追加到本地日志,并通过leader节点向自己和其他follower节点广播日志追加信息Append<MsgApp,height,term,blockData,sig,cert>;
[0015]其中,MsgApp为追加日志的消息类型,height为当前共识的区块高度,term为当前主节点任期,blockData为区块数据,sig为节点对(height,blockData)的签名,cert为身份证书;
[0016]S14、通过leader节点和follower节点对所有节点发送广播消息AppResp< MsgAppResp,height,blockHash,sig1,cert>;
[0017]其中,MsgAppResp为追加响应消息类型,blockHash为区块数据的hash值,sig1为
发送方对(height,blockHash)的签名;
[0018]S15、当leader节点和follower节点在收到法定人数的AppResp广播消息后提交区块到本地账本,完成本轮共识。
[0019]进一步地:所述步骤S2的具体步骤为:
[0020]S21、当检测到心跳超时,或共识失败时,触发视图切换;
[0021]S22、组装消息<<id,term+1,voteMsgType>,sign<id,term+1,voteMsgType>>,并将该消息广播给共识集内的其他节点;
[0022]其中,id为发起换主的节点号,term为下一个主节点的任期,voteMsgType为投票消息类型,sign为使用私钥对id+term+voteMsgType进行签名后的数据;
[0023]S23、当节点收到组装消息后,验证组装消息的签名,当验证未通过则丢弃该组装消息,否则判断term+1与本地的localTerm相同,则发送<<id,localTerm,voteMsgType>, sign(id,localTerm,voteMsgType)>给该节点,如果收到大于2/3个合法有效的组装消息后,将本地的localTerm锁定到term+1;
[0024]其中,localTerm为本地主节点的任期;
[0025]S24、根据任期号采用取模方法计算当前的主节点号,当前主节点的编号为localTerm%n+1,完成视图切换。
[0026]进一步地:所述步骤S3的具体步骤为:
[0027]S31、当副节点的提交记录小于主节点分发的日志高度N时,触发节点同步流程;[0028]S32、当其它节点收到类型为MsgGetHash的消息m后,根据GetIndexHash方法在本地数据库中寻到索引为N-1到N的block,计算其hash值,并返回类型主MsgGetHashRes的消息m2到副节点;
[0029]S33、当副节点收到的Hash字段相等的元素个数大于f+1时,认为该元素有效,遍历每个节点返回的[]blockhash,当这些节点Index为i的blockhash,其Hash值相等的个数大于f+1,则认为索引为i的block日志有效;
[0030]其中,2f+1为发送索引为N的消息来源节点集合中发送索引为N的消息个数,[] blockhash为区块的hash队列,Index为区块的序号,Hash为区块的hash;
[0031]S34、在f+1个节点中随机选择一个节点,向其发送类型为MsgGetData的Message消息;
[0032]S35、当f+1个节点中的一个节点接收到Message消息后,根据GetIndexData方法在本地区块数据中到相应的block集合,并返回类型主MsgGetDataRes的消息;
[0033]S36、在请求节点接收到MsgGetDataRes消息后,遍历[]indexblock,计算每个Data 的hash值,如果与前面接收的hash值一致,则将该Data追加到本地数据库中;
[0034]其中,Data为block的值。
[0035]进一步地:所述步骤S31的具体步骤为:
[0036]为了防止在Append阶段,主节点恶意不将区块分发到某个副节点,该副节点在AppResp阶段,接收来自其它节点的MsgAppResp消息m,若m的Index为N,由于副节点未接收到来自主节点分发的高度为N的日志,因此副节点本地的提交记录小于N,此时触发节点同步流程。
[0037]本发明的有益效果为:

本文发布于:2024-09-20 13:54:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/799739.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:节点   共识   区块   消息   算法
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议