1.一种改进的PBFT共识方法,其特征在于:包括以下步骤:S1、对区块链的所有节点赋予初始信誉积分,启动首次共识过程,更新所有所述节点的信誉积分,统计连续成功共识次数;
S2、基于所述信誉积分和所述连续成功共识次数,定期对所有所述节点进行CART分类,动态调整所述节点的身份类别;
S3、基于所述节点的身份类别分配参选权限,基于所述参选权限参与主节点的选举,选举出主节点和备选主节点;
S4、所述主节点接收客户端发送的请求后,将该请求广播给其他所有所述节点,开始共识过程,在所述共识过程中,在保证所述主节点可靠的前提下简化共识过程,如果所述主节点作恶或者故障,所述备选主节点直接接收所述主节点的权限,不进行视图切换,所述主节点降级成为中级节点,信誉积分减半,退出所述共识过程;
S5、所述共识过程结束后,获取参与共识的所述节点的共识结果,调整对应所述节点的所述信誉积分和所述连续成功共识次数,返回S2,进行下一轮共识。
2.根据权利要求1所述的改进的PBFT共识方法,其特征在于:所述S1包括:在参加首次共识时,所有所述节点均分配相同的所述初始信誉积分,并随机分配所述节点的初始身份类别,参加所述共识过程,调整所述节点的所述信誉积分,统计更新所述节点的所述连续成功共识次数。
3.根据权利要求1所述的改进的PBFT共识方法,其特征在于:所述S2中所述节点的身份类别包括低级节点、中级节点和高级节点。
4.根据权利要求3所述的改进的PBFT共识方法,其特征在于:所述S2中动态调整所述节点的身份类别包括:首次共识结束之后,所有所述节点的所述信誉积分进行更新,并调整所述节点的身份类别:
新加入的所述节点初始为低级,在成功参与同步完区块后升级为中级;
若中级节点的信誉积分达到高级节点的阈值,则升级为高级;
若高级节点的信誉积分降低到所述中级节点的阈值,则降级为中级;
若所述节点的信誉积分小于0时,降级为低级,重置所述节点的信誉积分为0,并将所述节点放在低级节点序列的末位;
若在所述共识过程中,所述节点未能成功产生有效区块,由所述主节点查看所述节点的状态是故障还是故意作恶,若是故障则正常扣分,若节点是故意作恶,所述节点将直接降为低级,信誉积分置为0,其中,所述故意作恶为所述节点在共识过程中故意发送错误信息或不同于原始信息给其他所述节点,导致共识失败;
还需要满足条件:
其中,表示高级节点集中的节点数目,表示中级节点集中的节点数目,表示低级节点集中的节点数目;f表示参与共识的所有节点集中允许失效的最大节点数。
5.根据权利要求4所述的改进的PBFT共识方法,其特征在于:所述S3中的参选权限为:所述节点为高级节点能够参与所述主节点的选举;所述节点为高级节点或者中级节点,能够作为从节点,参与所述共识过程;所述高级节点、所述中级节点、所述低级节点均能够参与检查点协议,其中,所述检查点协议除了检查一致性状态之外,还能够对已经确认过的区块的相关信息进行清除。
6.根据权利要求5所述的改进的PBFT共识方法,其特征在于:所述S3中对于所述主节点的选择包括在所述共识过程之前,基于所述信誉积分和所述连续成功共识次数,对所有所述节点进行CART决策树分类评估,将分布式网络中的N个所述节点,基于评估结果的高低依次编号:{0,…,|N|‑1},排序越靠前,节点可靠度越高,则其被选中作为所述主节点的概率越大,选中的所述主节点的序号和所述备选主节点的序号分别表示为:p=v mod |NA|;
p′=(v+1)mod |NA|;
其中,p表示最后选出来的主节点序号;p’表示最后选出来的备选主节点序号;v表示当前视图的编号;|N|表示参与共识过程的所有节点的数量;|NA|表示参与共识过程的高级节点的数量。
7.根据权利要求5所述的改进的PBFT共识方法,其特征在于:所述S4包括:所述主节点将从所述客户端发送的请求打包成预准备消息,广播至所有参与共识过程的所述从节点;
所述从节点接收所述预准备消息后验证正确性,判断所述主节点是否作恶或故障,若所述主节点正常,发送的所述预准备消息是可靠的,则生成准备消息并发送给所述主节点;
当所述主节点收到所述准备消息后,判断所述从节点的状态是否存在作恶或故障,若所有所述从节点发送的所述准备消息都是正确的,则所述主节点生成所述确认消息并广播给所有所述节点,并将成功消息发送给所述客户端,所有所述节点收到确认消息后,将新区块加入;若存在所述从节点的消息与所述主节点的消息不一致,若故障节点或恶意节点数量大于f,则所述主节点终止此次共识操作,对出现所述消息不一致的所述从节点进行惩罚并及时更新所述从节点的信誉积分、身份类别及等级,保证每次参与共识的节点集的诚实性;
若所述主节点故障或作恶,则将权限转移给备选主节点,继续完成共识操作,而所述主节点降级成为所述中级节点,所述信誉积分减半,退出共识。
8.根据权利要求1所述的改进的PBFT共识方法,其特征在于:所述S5中,非所述主节点的其他所述节点参与完成一次区块生成共识,所述节点的所述信誉积分根据规则加分,所述连续成功参与共识次数加1,所述主节点信誉积分也根据相应规则加分,连续成功参与共识的次数加1;
当参与共识的所述主节点未能成功生成区块,所有参与共识的所述节点的所述信誉积分减m,所述连续成功参与共识的次数被重置为0。