1.基于信誉和节点压缩机制的区块链共识方法,其特征在于:该方法包括以下步骤:S1:系统初始化,根据信誉值表对各节点进行分类划分同时在信任节点集中随机选取一个节点作为主节点;
S2:主节点对已有区块进行数据备份和验证,确保所有节点的一致性,同时各节点将自身存储容量Ci和设定阈值Ti发送给主节点;
S3:客户端向主节点发送请求消息;
S4:主节点校验客户端发来的请求消息并生成预准备消息发送给其他共识节点;
S5:共识节点校验预准备消息并生成准备消息广播给所有节点,若收到的一致消息的节点超过总节点数的三分之二,则进入确认阶段并修改本地信誉值表;一致消息指的是各节点将收到来自其他节点的准备消息与自己生成的消息相比较,如果一致,则称为一致消息;
S6:各节点验证准备消息并生成确认消息,将确认消息广播给所有节点,然后验证收到的一致消息的节点是否超过总节点数的三分之二,若超过则修改本地信誉值表;
S7:各节点收到所述S6中的确认消息后生成回复消息,并将回复消息发送给客户端,若客户端收到的一致消息的节点超过总节点数的三分之二则表明达成共识结果;
S8:主节点通过收到各节点在所述S6中的确认消息,计算各节点综合信誉值表,向各节点广播该综合信誉值表并通知它们更新各自的本地信誉值表;
S9:主节点验证是否有节点容量达到阈值,若达到阈值则对区块进行压缩以生成压缩区块,然后通知节点容量达到阈值的节点更新区块;
S10:区块链系统根据综合信誉值表对节点进行动态调整,若主节点信誉值不达标则重新选择信誉值最高的节点作为主节点;至此完成本轮共识;
所述S5中,通过节点的共识行为修改本地信誉值表,具体包括以下步骤:S51:各节点都在本地维护着一张信誉值表,同时根据包括自身的各节点在共识过程中的行为修改其信誉值;
S52:若节点在本轮共识过程中产生与大多数节点一致的消息则信誉值加1,若节点在本轮共识中未产生消息则信誉值加0,若节点在本轮共识过程中发送了与大多数节点不一致的错误消息则信誉值减1;
所述S8中,信誉计算公式计算节点信誉值,具体包括以下步骤:
S81:主节点确认阶段收到的各节点的信誉值表,通过公式
进行计算,其中Di表示节点i在本轮共识过后
的综合信誉值,nt表示信任节点数,no表示普通节点数,nm表示恶意节点数且有总节点数n=nt+no+nm,tj,i表示信任节点j对节点i的信誉值评分,oj,i表示普通节点j对节点i的信誉值评分,mj,i表示恶意节点j对节点i的信誉值评分,参数 表示为整体信誉值影响系数,算法可以修改 来调整综合信誉值变化幅度,α、β、μ为3种节点对信誉值的影响因素;
所述S9中,主节点验证是否有节点容量达到阈值并进行压缩以生成新区块,具体包括以下步骤:S91:主节点在完成一轮共识后根据公式 进行判定,其中i表示每个节点,i=1,2,
3,...,n,n表示总节点数,B表示当前区块大小,Ci表示设备i的容量,Ti表示节点i所设置的阈值;
S92:若有节点的存储容量达到阈值,主节点首先通过Merkle树对压缩前的所有区块两两取哈希运算生成一个类似于Merkle树根的压缩块CBLOC、该压缩块CBLOC用于存储压缩前所有区块的哈希值,然后生成本轮应该生成的新区块NBLOC、该新区块用于存储压缩块的哈希值;
S93:主节点发送压缩块NBLOC至节点容量达到阈值的节点,通知它们以压缩块NBLOC替换之前的区块。