[0048] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0049] 本发明提供一种基于信誉与投票机制的改进PBFT共识方法,具体包括以下步骤:
[0050] 对节点进行状态划分,并根据节点在共识过程的表现进行节点状态的转换;
[0051] 根据节点的状态进行权限分配,具有参选权限的节点可参与主节点选举,并根据投票计算选举出主节点;
[0052] 主节点接收客户端发送的请求,广播该请求给备份节点,开始共识过程;
[0053] 共识过程中,如果主节点故障或作恶,根据主节点异常情况进行视图切换。
[0054] 在本实施例中,对节点进行状态划分包括根据节点的信誉值从高到低将节点分为可信节点、正常节点、异常节点、不可信节点以及无效节点5个状态,另外设置一个与信誉值无关的状态为审查节点。
[0055] 进一步的,将节点信誉值设置为[0,K),系统刚运行时所有节点的初始信誉值均为K1,如果节点成功产生有效区块,系统会奖励k点信誉值;可信节点的信誉值为[K2‑150),正常节点的信誉值为[K1‑K2),异常节点的信誉值为[K3‑K1),不可信节点的信誉值为[K4‑K3),无效节点的信誉值为0;K2、K1、K3、K4分别为可信节点、正常节点、异常节点、不可信节点的阈值。
[0056] 在本实施例中,如表1所示,将K设置为150,节点信誉值为100至149时为可信节点(Credible);节点信誉值为60至99时为普通节点(Normal);节点信誉值为30至59时为异常节点(Excepted),节点信誉值为10至29时为不可信节点(Untrusted);节点信誉值为10至29时为无效节点(Invalid);审查节点(Check)为一种特殊的节点状态,无信誉值。另外,设置信誉值100为good信誉阈值,信誉值60为normal信誉阈值,信誉值30为excepted信誉阈值,信誉值10为untrusted信誉阈值。普通节点(Normal)若出现故障或作恶行为则降级为Untrusted,信誉值降为10。
[0057] 表1
[0058]
[0059] 节点状态转换如图2所示。系统刚运行时节点均为Normal状态,当节点多次产生有效区块且信誉值达到可信节点信誉阈值时可升级为Credible状态。处于Credible状态或Normal状态的节点共识过程中未产生有效区块,则该节点状态变为Check状态。此时系统会对节点出错行为和信誉值进行审查,若节点信誉值高于good阈值且节点故障,即节点因为系统繁忙、宕机或网络问题等异常情况导致出块失败,节点将变为Excepted状态;若节点为作恶节点,即节点在共识过程中故意发送错误信息或不同信息给其他节点,使整个集群中的节点无法达成共识,节点将变为Untrusted状态。Excepted状态的节点如果出现故障或作恶情况,将降级为Untrusted状态;Untrusted状态的节点如果出现故障或作恶情况,则节点状态转换为Invalid;另外,节点产生有效区块后信誉值达到一定的阈值,节点状态也会进行相应的升级。
[0060] 进一步的,本发明对处于不同状态的节点的权限进行限定,如表2所示,Credible和Normal节点拥有参选、投票和共识的所有权限,其中参选即参与主节点选举,投票即为参选的节点投票,共识即参与共识过程;Excepted节点具有投票和共识的权限,但无参选权限,所以不能参与主节点选举;Untrusted节点只能参与共识过程,无参选和投票权限;Invalid节点无法任何权限;Check节点为一种特殊节点,在审查完成之前,也不具备任何权限。
[0061] 表2
[0062]
[0063] 在本实施例中,具有参选权限的节点可以参与主节点选举,本发明提出一种新的投票计算公式,参选节点的最终得分为:
[0064]
[0065] 其中,Scoren为参与选举的节点的得分;creditn是参选节点n的信誉值,creditk是投票节点k的信誉值,votek是k节点投票的投票情况,支持、反对和弃权分别对应1、‑1和0;K是信誉值的最大值,N是参与投票的节点数量;λ和μ为权重比例,λ+μ=1;本发明中节点的总得分主要分为两部分,基础分和投票分。基础分为参选节点信誉值与参数λ的乘积,投票分为投票节点的信誉值与总信誉值占比,投票情况和参数μ三者计算得到。creditn是参选节点n的信誉值,creditk是投票节点k的信誉值,votek是k节点投票的投票情况,支持、反对和弃权分别对应1、‑1和0。另外,引进两个参数λ和μ(λ+μ=1),参与主节点选举的Credible节点和Normal节点具有不同的λ和μ,两个参数在一定程度上可以影响参选节点总得分。节点处于Credible状态时,信誉度较高,成为主节点所需票数应少于Normal节点。然而,λ值越小成为主节点所需票数越多,所以Credible节点的λ值应大于0.5,对应Normal节点的λ值则应小于0.5。通过多次实验测试得出,Credible节点的λ值为0.65,Normal节点的λ值为0.45时,投票选举最公平。所以Credible节点的λ和μ分别为0.65和0.35,Normal节点的λ和μ分别为0.45和0.55。
[0066] 对于主节点选取,PBFT算法依据公式p=v mod N按顺序确定主节点编号,异常节点很有可能担任主节点,影响系统的运行效率。IPBFT算法中,引入信用模型与投票机制优化主节点确认机制,信誉度高的节点通过选举成为主节点的概率较大,有效降低异常担任主节点的可能性,提高了系统安全性和运行效率。算法伪代码如下:
[0067]
[0068] Master()为主节点确认函数,返回主节点编号,Scores数组存放的是按参选节点总得分排序后的节点编号,当change‑view(视图切换信号)为真,则进行视图切换操作,视图编号加1,并选取排序节点中的下一个节点作为主节点。
[0069] 本发明改进的PBFT的共识过程如图2所示。PBFT算法主要实现参与共识的节点达成一致,主节点广播请求消息给备份节点,备份节点只需要对接收的请求信息在准备阶段进行验证,当准备阶段完成后说明已经有足够数量的备份节点验证并通过了主节点发送的请求,即达成共识。而确认阶段只是对准备阶段中通过的信息进行确认,确保合法数量的节点完成对请求消息的验证。因此可将PBFT核心三阶段共识过程优化为两个阶段,即一致性提案(consistency‑proposal)和一致性确认(consistency‑confirm)。
[0070] 如图3所示为IPBFT的视图切换过程。如果主节点失效,通过视图切换协议可以保证共识系统持续运行,并且不会产生错误的结果。PBFT算法中,当备份节点检测到主节点故障或作恶时,会向其他节点广播view‑change消息,进入视图切换流程。本发明改进的PBFT的视图切换流程中在客户端设置超时机制,如果主节点超时,则主节点可能因为系统繁忙、宕机或者网络问题等其它异常情况导致的无响应,也可能故意不响应客户端发送的请求,此时可以明确当前主节点异常。然而,视图切换流程中的view‑change阶段和view‑change‑ack(视图切换确认信号)阶段,主要通过投票方式确定主节点是否异常。所以本发明改进的PBFT的视图切换流程中,若主节点超时,则直接开始视图切换流程中的new‑view(新视图)阶段,并通过主节点确认机制中的Master()算法确定新的主节点。新的主节点向其他节点广播new‑view消息,并在新的view(视图)中继续执行上个视图未处理完的请求;如果备份节点认为主节点为作恶节点时,会向其他节点广播view‑change消息,正常进行view‑change,view‑change‑ack和new‑view三阶段视图切换流程。本发明改进的PBFT算法在PBFT算法中的视图切换协议的基础上,对主节点异常情况进行分类讨论,节省了主节点超时异常时节点之间的通信时间,提高了系统运行效率。
[0071] 本发明改进的PBFT算法流程如图4所示。本发明改进的PBFT算法优化了PBFT算法的主节点确认机制、共识过程和视图切换协议,改进的PBFT的详细算法流程如下:
[0072] (1)将视图编号设置为0,根据主节点确认函数Master()确认主节点编号。
[0073] (2)主节点向备份节点广播consistency‑proposal消息,其消息格式为<,m>,其中h为区块高度,v为当前视图编号,p为主节点编号,md为m消息的摘要,m为请求消息的原文。
[0074] (3)备份节点收到consistency‑proposal消息时,需要对consistency‑proposal消息进行签名验证,如果确定消息为真,则向其他节点广播consistency‑confirm消息。其消息格式为,σi>,其中i为节点编号,σi为节点i转发自主节点p的消息摘要,表示对主节点发送的consistency‑proposal消息的认可。
[0075] (4)若参与共识的任意节点收到2f个有效的consistency‑confirm消息后,共识达成,节点执行主节点发送的请求,并发布区块。
[0076] (5)其他节点在收到区块后,认为该轮共识过程结束,将包含的交易从内存中删除,将视图编号重置为0,开始下一轮共识。
[0077] (6)上述过程中,如果主节点故障或作恶,或者节点在一定时间内未收到2f个有效的consistency‑confirm消息,则进入图3中的视图切换协议。
[0078] 尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。