一种改进的pbft共识方法
技术领域
1.本发明涉及区块链技术领域,特别是涉及一种改进的pbft共识方法。
背景技术:
2.区块链技术是随着比特币概念一同诞生的一个概念,它以区块作为基本数据存储单位,每条区块链都由若干个区块链接而成。其中,每个区块都由区块头和区块体两个部分组成,在区块头中,包含前一个区块的哈希值、时间戳、随机数、默克尔根等信息,而在区块体中主要是存储交易的信息,前一个区块的哈希即前一区块的摘要信息,唯一地指向了上一个区块,如果攻击者想要修改某个区块,就必须修改这个区块以及该区块后的全部区块,这一点大大降低了区块链被恶意攻击和篡改的可能,体现了足够的安全性和不可篡改性。上述区块链的形成过程中,采用了密码学、分布式存储、p2p、共识算法等相关技术,其中,共识起到了至关重要的作用,它主要的任务是以一种公平的规则挑选出合适的节点,把分布式系统中各个节点间达成一致的交易数据成功打包并加入到区块链中,它保障了区块链技术的一致性,部分共识算法还提供拜占庭容错机制,对区块链系统的性能(包括交易处理能力、吞吐率、资源消耗量、可扩展性、鲁棒性等)有着很大的影响。但是目前区块链技术却被系统中共识算法的缺陷限制了发展,主要体现在性能上的不足和共识率过低,比如比特币所采用的工作量证明(proof of work,pow)共识机制带来的资源消耗过大、交易时延高、吞吐量低等缺陷,再比如股权证明(proof of stack,pos)也具有上述缺点,有必要对现有共识算法作出改进或者提出新的算法以提高吞吐量、降低时延和资源消耗量。
3.和其他算法不同的是,pbft算法可以解决拜占庭问题,足够高效,并且可以适用于各种不同的应用场景,故pbft算法已广泛应用于联盟链中。但是,pbft仍存在不少缺陷,主要存在于三方面:第一,通信开销大,整个共识过程的时间复杂度为o(n2)(n是网络中节点的总数目);第二,恶意节点可能担任主节点,造成安全隐患,不断切换视图,降低运行效率;第三,无法动态增删节点,需要加入新节点只能重启,开销巨大。
技术实现要素:
4.本发明的目的是提供一种改进的pbft共识方法,以解决上述现有技术存在的问题,赋予所有节点信誉积分和连续成功共识次数,并根据节点信誉积分和连续成功共识次数动态调整节点级别,剔除恶意节点,动态增删节点,显著提高区块链的安全性并降低通信开销。
5.为实现上述目的,本发明提供了如下方案:本发明提供一种改进的pbft共识方法,包括以下步骤:
6.s1、对区块链的所有节点赋予初始信誉积分,启动首次共识过程,更新所有所述节点的信誉积分,统计连续成功共识次数;
7.s2、基于所述信誉积分和所述连续成功共识次数,定期对所有所述节点进行cart分类,动态调整所述节点的身份类别;
8.s3、基于所述节点的身份类别分配参选权限,基于所述参选权限参与主节点的选举,选举出主节点和备选主节点;
9.s4、所述主节点接收客户端发送的请求后,将该请求广播给其他所有节点,开始共识过程,在所述共识过程中,在保证所述主节点可靠的前提下简化共识过程,如果所述主节点作恶或者故障,所述备选主节点直接接收所述主节点的权限,不进行视图切换,所述主节点降级成为中级节点,信誉积分减半,退出所述共识过程;
10.s5、所述共识过程结束后,获取参与共识的所述节点的共识结果,调整对应所述节点的所述信誉积分和所述连续成功共识次数,返回s2,进行下一轮共识。
11.优选地,所述s1包括:在参加首次共识时,所有所述节点均分配相同的所述初始信誉积分,并随机分配所述节点的初始身份类别,参加所述共识过程,调整所述节点的所述信誉积分,统计更新所述节点的所述连续成功共识次数。
12.优选地,所述s2中所述节点的身份类别包括低级节点、中级节点和高级节点。
13.优选地,首次共识结束之后,所有所述节点的所述信誉积分进行更新,并调整所述节点的身份类别:
14.新加入的所述节点初始为低级,在成功参与同步完区块后升级为中级;
15.若中级节点的信誉积分达到高级节点的阈值,则升级为高级;
16.若高级节点的信誉积分降低到所述中级节点的阈值,则降级为中级;
17.若所述节点的信誉积分小于0时,降级为低级,重置所述节点的信誉积分为0,并将所述节点放在低级节点序列的末位;
18.若在所述共识过程中,所述节点未能成功产生有效区块,由所述主节点查看所述节点的状态是故障还是故意作恶,若是故障则正常扣分,若节点是故意作恶,所述节点将直接降为低级,信誉积分置为0,其中,所述故意作恶为所述节点在共识过程中故意发送错误信息或不同于原始信息给其他所述节点,导致共识失败;
19.还需要满足条件:
[0020][0021]
其中,表示高级节点集中的节点数目,表示中级节点集中的节点数目,表示低级节点集中的节点数目;f表示参与共识的所有节点集中允许失效的最大节点数。
[0022]
优选地,所述节点为高级节点能够参与所述主节点的选举;所述节点为高级节点或者中级节点,能够作为从节点,参与所述共识过程;所述高级节点、所述中级节点、所述低级节点均能够参与检查点协议,其中,所述检查点协议除了检查一致性状态之外,还能够对已经确认过的区块的相关信息进行清除。
[0023]
优选地,所述s3中对于所述主节点的选择包括在所述共识过程之前,基于所述信誉积分和所述连续成功共识次数,对所有所述节点进行cart决策树分类评估,将分布式网络中的|n|个所述节点,基于评估结果的高低依次编号:{0,
…
,|n|
‑
1},排序越靠前,节点可靠度越高,则其被选中作为所述主节点的概率越大,选中的所述主节点的序号和所述备选主节点的序号分别表示为:
[0024]
p=v mod|n
a
|;
[0025]
p
′
=(v 1)mod|n
a
|;
[0026]
其中,p表示最后选出来的主节点序号;p'表示最后选出来的备选主节点序号;v表示当前视图的编号;|n|表示参与共识过程的所有节点的数量;|n
a
|表示参与共识过程的高级节点的数量。
[0027]
优选地,所述s4包括:
[0028]
所述主节点将从所述客户端发送的请求打包成预准备消息,广播至所有参与共识过程的所述从节点;
[0029]
所述从节点接收所述预准备消息后验证正确性,判断所述主节点是否作恶或故障,若所述主节点正常,发送的消息是可靠的,则生成准备消息并发送给所述主节点;当所述主节点收到所述准备消息后,判断所述从节点的状态是否存在作恶或故障,若所有所述从节点发送的所述准备消息都是正确的,则所述主节点生成所述确认消息并广播给所有所述节点,并将成功消息发送给所述客户端,所有所述节点收到确认消息后,将新区块加入;若存在所述从节点的消息与所述主节点的消息不一致,若故障节点或恶意节点数量大于f,则所述主节点终止此次共识操作,对出现所述消息不一致的所述从节点进行惩罚并及时更新所述从节点的信誉积分、身份类别及等级,保证每次参与共识的节点集的诚实性;
[0030]
若所述主节点故障或作恶,则将权限转移给备选主节点,继续完成共识操作,而所述主节点降级成为所述中级节点,所述信誉积分减半,退出共识。
[0031]
优选地,所述s5中,非所述主节点的其他所述节点参与完成一次区块生成共识,所述节点的所述信誉积分根据规则加分,所述连续成功参与共识次数加1,所述主节点信誉积分也根据相应规则加分,连续成功参与共识的次数加1;
[0032]
当参与共识的所述主节点未能成功生成区块,所有参与共识的所述节点的所述信誉积分减m,所述连续成功参与共识的次数被重置为0。
[0033]
本发明公开了以下技术效果:
[0034]
本发明提供的一种改进的pbft共识方法,赋予所有节点信誉积分和连续成功共识次数,并根据节点信誉积分和连续成功共识次数动态调整节点级别,与传统的pbft相比,在保证安全的前提下采用简化的共识过程大大降低了通信复杂性和通信消耗,增加了平均吞吐量,降低了时延,有效地排除了恶意节点,提高了共识的效率,并可以在特定场景进行回归预测,例如医疗保健系统、医疗数据存储系统等。
附图说明
[0035]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0036]
图1为本发明实施例中改进的pbft共识方法流程示意图;
[0037]
图2为本发明实施例中改进的pbft共识方法的节点等级升降过程图;
[0038]
图3为本发明实施例中改进的pbft共识方法的共识过程图;
[0039]
图4为本发明实施例中主节点进行区块共识过程的流程示意图。
具体实施方式
[0040]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0041]
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0042]
本发明提供一种改进的pbft共识方法,参考图1
‑
4所示,包括以下步骤:
[0043]
s100、对区块链的所有节点赋予初始信誉积分,启动首次共识过程,更新所有节点的信誉积分,统计节点的连续成功共识次数。
[0044]
在首次共识过程开始前,在第一次进行共识的时候,所有的节点均会分配统一的初始信誉积分,本实施例中,节点的初始信誉积分均为10,此时,节点的身份类别都是随机分配的,节点的身份类别有三种:低级节点、中级节点和高级节点。首次共识过程结束后,节点的身份类别的转换如图2所示,所有节点的信誉积分都会根据自身的行为而改变,那么在固定时间内节点的身份类别也会随之调整。
[0045]
s200、基于信誉积分和所述连续成功共识次数,定期对所有节点进行cart分类,动态调整节点的身份类别。
[0046]
节点分类的规则包括:
[0047]
新加入的节点初始为低级,在成功参与同步完区块后升级为中级;
[0048]
若中级节点的信誉积分达到高级节点的阈值,则升级为高级;
[0049]
若高级节点的信誉积分降低到中级节点的阈值,则降级为中级;
[0050]
若某节点的信誉积分小于0时,降级为低级,重置该节点的信誉积分为0,并将该节点放在低级节点序列的最后;
[0051]
若在共识过程中,某节点未能成功产生有效区块,由主节点查看该节点的状态是故障还是故意作恶,若是故障则正常扣分,若节点是故意作恶,即节点在共识过程中故意发送错误信息或不同于原始信息给其他节点,导致共识失败,节点将直接降为低级,信誉积分置为0。
[0052]
除此之外,在动态更新参与共识的节点数目的时候还需要满足如式(1)所示的条件:
[0053][0054]
其中,表示高级节点集合中的节点数目,表示中级节点集合中的节点数目,表示低级节点集合中的节点数目;f表示参与共识的所有节点集合(包括和)中允许失效的最大节点数。在参与共识的所有类别节点数目都确定时,该条件可以限制不同类别的节点数目,保证动态更新不出错。
[0055]
s300、节点按照自身的身份类型获取参选权限,根据参选权限,参与主节点的选举,选举出主节点和备选主节点。
[0056]
在本实施例中,只有高级节点可以参与主节点的选择;高级节点和中级节点均可
以作为从节点,参与共识过程;高级节点、中级节点、低级节点均可以参与检查点协议,除了检查一致性状态之外,检查点协议还会对已经确认过的区块的相关信息进行清除,本方法可以动态地增删节点和定期更新节点的信誉总评序列号和身份类别以实现升降级的目的。在每次共识之后增加了一次对节点行为的评价,使得效率高的节点大概率被选为主节点,效率低以及作恶的节点更小概率被选为主节点甚至不能参与共识。
[0057]
表1
[0058][0059]
如表2所示,本实施例中,将节点信誉积分的范围设置为[0,100],系统刚开始运行时所有节点的初始信誉积分均为10,当节点参与完成一次有效的区块生成共识,按照信誉积分更新规则对节点的信誉积分进行更新,若节点连续成功生成区块的次数小于等于6次时,其信誉积分根据斐波那切数列f(n)加分,如式(2)所示:
[0060][0061]
其中,参数n为连续成功生成区块的次数。若节点连续成功生成区块的次数大于6次时,信誉积分加8分,加分后,其连续成功参与共识的次数加1;当节点未能成功生成区块,其信誉积分减m,本实施例中m为10,连续成功参与共识的次数被重置为0。将集合中的所有节点将信誉积分的大小按从低到高的顺序排序后,前45%的节点为低级节点,后25%的节点为高级节点,而剩下的30%为中级节点。
[0062]
表2
[0063][0064]
在发明中,具有参选权限的节点能够参与主节点的选择,本发明提出一种新的主节点选择方式,引入节点信誉积分分类制度来优化主节点的选择,具体实施方式是在共识之前,根据节点信誉积分和连续成功参与共识的次数对所有节点进行cart决策树分类评估,将分布式网络中的|n|个共识节点,根据总评估的高低依次编号,{0,
…
,|n|
‑
1},排序越靠前,节点可靠度越高,则其被选中作为主节点的概率越大,选中的主节点序号和备选主节点序号分别表示为如式(3)
‑
(4)所示:
[0065]
p=vmod|n
a
|
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3);
[0066]
p'=(v 1)mod|n
a
|
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4);
[0067]
其中,p表示最后选出来的主节点序号;p'表示最后选出来的备选主节点序号;v表示当前视图的编号;|n|表示参与共识过程的所有节点的数量;|n
a
|表示参与共识过程的高级节点的数量。
[0068]
利用计算机编写的伪代码如下所示:
[0069]
input:客户端发送的请求消息<nrequest,o,t,c>,|n|个共识节点,视图view
[0070]
output:客户端所请求的处理结果reply
[0071]
1:int a,b a∈[1,100
‑
|n|],b∈[1,|n|
‑
4]
[0072]
2:view=0;
[0073]
3:if(|n| a|||n|
‑
b)
[0074]
4:cart tree classification:consensus node in blockchain;
[0075]
5:the number of consensus node k based on credit assessment ranking:{0,
…
,|n|
‑
1}
[0076]
6:p=v mod|n|
[0077]
7:p'=(v 1)mod|n|
[0078]
8:else
[0079]
9:check the validity of the state of p
[0080]
10:if p state=normal
[0081]
11:return p
[0082]
12:else
[0083]
13:view
[0084]
14:return p'
[0085]
其中,a和b分别是增加节点和删除节点的个数,如果有节点的增加或者退出,重新更新分类树,p是根据排序后选举出来的主节点,p'是根据排序后选举出来的备选主节点;如果没有则判断主节点p的状态,如果主节点正常,则继续共识,否则采用备选主节点开始进行新一轮共识。
[0086]
在本步中,优化了主节点的选取方式,通过定期分类从可靠度高的节点列表中选出主节点,同时选出备选主节点,避免因主节点故障而导致频繁视图切换,降低整个共识过程所需的通信时延。
[0087]
s400、主节点选举产生后,主节点接收客户端发送的请求后,将该请求广播给其他所有节点,开始共识过程,在共识过程中,在保证主节点可靠的前提下简化共识过程,如果主节点作恶或者故障,备选主节点直接接收主节点的权限,不进行视图切换,主节点降级成为中级节点,信誉积分减半,退出共识过程。
[0088]
具体过程参照图4所示:
[0089]
客户端client向主节点p发送一条请求消息<nrequest,o,t,c>,其中o为请求执行状态机,t为时间戳,c表示客户端编号。
[0090]
当检测到整个区块链网络有新的交易请求的时候,首先判断是否存在新的共识节点加入或者是旧的共识节点退出。如果是的,则根据cart分类决策树的分类模型对所有的共识节点进行分类排序,重新评估可靠度,并重新编号和选择主节点、备选节点等;如果不是,则正常工作,后续由从节点检测当前视图view中主节点的状态是否正常。
[0091]
如果主节点正常,那么主节点p接收到客户端所发送的请求后会分配提案编号n,然后生成预准备消息,并将预准备消息广播到所有共识节点,消息格式如下:<<npre
‑
prepare,v,n,digest,result>,credit_score,message>。其中v是视图编号,digest为message的摘要,credit_score为节点信誉积分信息,result为credit_score进行hash计算的结果,message为客户端的请求消息。
[0092]
从节点replica接收到主节点p发送的预准备消息后验证消息的正确性,首先会判断主节点是否可靠,若是则生成准备消息并发送给主节点。消息格式为<nprepare,v,n,digest,i,credit_score>,其中,i是节点编号。在此阶段,主节点收到所有其余节点发送的准备消息,主节点会验证消息的真实性,如果超过(2f 1)个准备消息是正确的,进入确认阶段。否则,当前主节点的状态是宕机、故障或者是作恶,则将权限转移给备选主节点,继续完成共识操作,而主节点降级成为中级节点,信誉积分减半,退出共识,将原有主节点一致性共识验证失败的消息<failure,v,t,c,k>发送出去,视图加1。
[0093]
主节点p收到准备消息后,判断是否存在从节点的状态作恶或故障,若所有从节点发送的准备消息都是正确并相同的,则主节点生成确认消息<ncommit,v,n,digest,ack>并广播给所有节点,其中ack是确认添加,并将成功消息发送给客户端,所有节点收到确认消息后,将新区块加入a为确定添加信息,表示主节点已经确认添加。若存在小于f个从节点的消息与主节点的不一致,那么继续发送确认消息,确认预生成的块并将其添加到区块链的末尾,所有节点都要更新其本地记录;若存在从节点的消息与主节点的消息不一致,且数目大于f,则主节点终止此次共识操作,对出现消息不一致的从节点进行惩罚并及时更新节点的信誉积分和对节点的分类评估,保证每次参与共识的节点集的诚实性。
[0094]
在双保险的情况下保证主节点的可靠性,因此优化了一致性协议的共识过程,根据系统节点在共识过程中的状态判断系统是否存在拜占庭节点,若不存在拜占庭节点或拜占庭节点的数目小于f的时候,保证多数时候都能采用优化一致性协议,在整体上提高共识效率,同时,在一致性协议中增加双向验证过程,在进行广播的过程中,从节点会验证数据的正确性,判断主节点是否是拜占庭节点,保证整个系统的共识效率。
[0095]
s500、共识过程结束后,获取参与共识的节点的共识结果,调整对应节点的所述信誉积分和连续成功共识次数,返回s200,开启下一轮共识。
[0096]
除主节点以外的其他所述节点参与完成一次区块生成共识,该节点的信誉积分根据信誉积分更新规则进行相应的加分,连续成功参与共识次数加1,主节点信誉积分也根据信誉积分更新规则进行相应加分,连续成功参与共识的次数加1;
[0097]
若参与共识的所有节点未能成功生成区块,该节点的所述信誉积分减m,连续成功参与共识次数被重置为0。
[0098]
本实施例中进行节点选取和更新(s100、s200、s500)时,在检查点协议中加入了cart决策树信誉评定分类制和节点定期更新制,保证后续主节点选举的安全和可靠,同时达到使节点动态加入和退出系统的目的。
[0099]
以上所述的实施例仅是对本发明的优选方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案做出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。
转载请注明原文地址:https://win.8miu.com/read-50182.html