1.一种基于贡献值的高可靠性区块链共识方法,其特征在于,包括:步骤1、收集区块链系统中节点的信息,为各节点分配贡献值并进行降序排序,得到一个降序列表CList;
步骤2、采用“均值迁移”的动态分组方法对所述降序列表CList进行动态分组;
步骤3、计算分组后各组的组间难度和每组内节点的组内难度,确定各节点进行工作量证明PoW计算所对应的难度值H;具体包括:步骤31、为每一个组确定组间难度:
计算每一组Gj内全部节点贡献值的平均值 计算所有组的平均贡献值之差的平均值计算每一组的组间难度param1j;若节点处于分组后的第一组G1,那么该节点的组间难度为param1j为0;
步骤32、确定每一组内各个节点的组内难度:
计算组Gi内全部节点贡献值之差的平均值 确定第j组内第i个节点的组内难度param2j,i;若节点处于分组后每一组的第一位,则该节点的组内难度param2j,i为0;
步骤33、确定节点的PoW难度哈希值Hj,i:
Hj,i表示排序为第j组中的第i个的节点在进行哈希碰撞时,需要计算出一个小于Hj,i的哈希值,按照下述公式计算节点的难度哈希值;
式中,param1j表示第j组的组间难度,param2j,i表示在第j组中,排序为i的节点的组内难度;Dap是一个可变的难度调节参数;
步骤4、各节点根据各自的难度值H开始PoW计算,将率先计算出了符合自己难度值所要求的哈希值的节点作为本轮生成新区块的出块节点;
步骤5、基于所述出块节点外的其他节点,验证区块链系统选取的所述出块节点是否符合创建新区块的要求。
2.如权利要求1所述的共识方法,其特征在于,在所述步骤1中,所述贡献值是节点加入区块链网络系统后,节点进行符合系统规范的活动后被系统赋予的一种参数,对于每一个初次加入到区块链网络中的节点,贡献值将被初始化为0。
3.如权利要求1所述的共识方法,其特征在于,在所述步骤1中,所述降序排序包括:在一个既定的出块周期T后,统计系统内所有节点的贡献值大小,并进行降序排序得到一个降序列表CList。
4.如权利要求1所述的共识方法,其特征在于,在所述步骤2中,所述“均值迁移”的动态分组方法,包括:步骤21、计算贡献值列表CList中相邻节点贡献值之差的平均值 其中,贡献值列表CList={C1,C2,…,Cn},n为区块链系统内节点的个数;
步骤22、初始化节点所在集合Gj=Φ(j=1,2,..,n),并且初始化节点Ci的序号i=1,节点组号j=1及G1={C1},CList列表中节点C1的组号j=1;
步骤23、确定各节点所在组Gj:判断Ci‑Ci+1之差是否大于 若大于,则节点Ci和节点Ci+1属于不同组,j=j+1,记为Gj=Gj∪{Ci+1},此时的Gj为一个新的组;若不大于,则节点Ci和节点Ci+1属于同一组,j=j,记为Gj=Gj∪{Ci+1},此时的Gj是为节点Ci所在的组;
步骤24、判断当前节点Ci是否是CList中的最后一个值,若是,则结束步骤2;若不是,则i的值加一位,继续执行步骤23;最终将分组集合记为G={G1,G2,…,Gm‑1}(0
5.如权利要求1所述的共识方法,其特征在于,在所述步骤4中,所述出块节点用于进行新区块的创建工作,并将所述新区块向全网广播。
6.如权利要求1所述的共识方法,其特征在于,所述步骤5,包括:将除所述出块节点外的其他节点作为验证节点,所述出块节点向全网发出广播创建出新区块的同时,各验证节点接收新区块,验证该出块的节点是否为最快运算出符合要求的哈希值的节点;
验证通过后,验证节点还要验证新区块头中的merkle‑Tree的根是否与本地的merkle‑Tree的根一致;
若二者的值一致,则将新区块添加到到区块链的尾部成功,并将节点的信息进行更新;
若二者的值不一致,则新区块添加到到区块链的尾部失败。
7.一种基于贡献值的高可靠性区块链共识系统,其特征在于,包括:收集排序模块,用于收集区块链系统中节点的信息,为各节点分配贡献值并进行降序排序,得到一个降序列表CList;
分组模块,用于采用“均值迁移”的动态分组方法对所述降序列表CList进行动态分组;
难度值计算模块,用于计算分组后各组的组间难度和每组内节点的组内难度,确定各节点进行工作量证明PoW计算所对应的难度值H;具体包括:为每一个组确定组间难度:
计算每一组Gj内全部节点贡献值的平均值 计算所有组的平均贡献值之差的平均值计算每一组的组间难度param1j;若节点处于分组后的第一组G1,那么该节点的组间难度为param1j为0;
确定每一组内各个节点的组内难度:
计算组Gi内全部节点贡献值之差的平均值 确定第j组内第i个节点的组内难度param2j,i;若节点处于分组后每一组的第一位,则该节点的组内难度param2j,i为0;
确定节点的PoW难度哈希值Hj,i:
Hj,i表示排序为第j组中的第i个的节点在进行哈希碰撞时,需要计算出一个小于Hj,i的哈希值,按照下述公式计算节点的难度哈希值;
式中,param1j表示第j组的组间难度,param2j,i表示在第j组中,排序为i的节点的组内难度;Dap是一个可变的难度调节参数;
出块节点确定模块,用于各节点根据各自的难度值H开始PoW计算,将率先计算出了符合自己难度值所要求的哈希值的节点作为本轮生成新区块的出块节点;
验证模块,用于基于所述出块节点外的其他节点,验证区块链系统选取的所述出块节点是否符合创建新区块的要求。
8.如权利要求7所述的共识系统,其特征在于,在所述收集排序模块中,所述贡献值是节点加入区块链网络系统后,节点进行符合系统规范的活动后被系统赋予的一种参数,对于每一个初次加入到区块链网络中的节点,贡献值将被初始化为0。
9.如权利要求7所述的共识系统,其特征在于,在所述收集排序模块中,所述降序排序包括:在一个既定的出块周期T后,统计系统内所有节点的贡献值大小,并进行降序排序得到一个降序列表CList。
10.如权利要求7所述的共识系统,其特征在于,在所述分组模块中,所述“均值迁移”的动态分组方法,包括:步骤21、计算贡献值列表CList中相邻节点贡献值之差的平均值 其中,贡献值列表CList={C1,C2,…,Cn},n为区块链系统内节点的个数;
步骤22、初始化节点所在集合Gj=Φ(j=1,2,..,n),并且初始化节点Ci的序号i=1,节点组号j=1及G1={C1},CList列表中节点C1的组号j=1;
步骤23、确定各节点所在组Gj:判断Ci‑Ci+1之差是否大于 若大于,则节点Ci和节点Ci+1属于不同组,j=j+1,记为Gj=Gj∪{Ci+1},此时的Gj为一个新的组;若不大于,则节点Ci和节点Ci+1属于同一组,j=j,记为Gj=Gj∪{Ci+1},此时的Gj是为节点Ci所在的组;
步骤24、判断当前节点Ci是否是CList中的最后一个值,若是,则结束分组;若不是,则i的值加一位,继续执行步骤23;最终将分组集合记为G={G1,G2,…,Gm‑1}(0
11.如权利要求7所述的共识系统,其特征在于,在所述出块节点确定模块中,所述出块节点用于进行新区块的创建工作,并将所述新区块向全网广播。
12.如权利要求7所述的共识系统,其特征在于,所述验证模块,具体包括:将除所述出块节点外的其他节点作为验证节点,所述出块节点向全网发出广播创建出新区块的同时,各验证节点接收新区块,验证该出块的节点是否为最快运算出符合要求的哈希值的节点;
验证通过后,验证节点还要验证新区块头中的merkle‑Tree的根是否与本地的merkle‑Tree的根一致;
若二者的值一致,则将新区块添加到到区块链的尾部成功,并将节点的信息进行更新;
若二者的值不一致,则新区块添加到到区块链的尾部失败。