首页 / 专利分类库 / 电通信技术 / 一种基于社区发现的改进PBFT共识算法及系统

一种基于社区发现的改进PBFT共识算法及系统

申请号 CN202410100701.6 申请日 2024-01-25 公开(公告)号 CN118018556A 公开(公告)日 2024-05-10
申请人 合肥工业大学; 发明人 任明仑; 韩涛; 朱王; 吴淑慧; 张育萌; 奉中华;
摘要 本 发明 公开一种基于社区发现的改进PBFT共识 算法 及系统,涉及 区 块 链 节点 共识算法领域,所述算法包括:构建区块链网络;利用Louvain算法对所述区块链网络进行社区划分,得到多个划分社区;对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。本发明利用Louvain社区发现算法对区块链网络进行社区划分。采用"先社区内共识,后社区间共识"的策略,降低大规模共识中的复杂度。该算法能够显著降低大规模区块链网络的通信复杂度,缩短共识达成时间,提高系统的吞吐量。
权利要求

1.一种基于社区发现的改进PBFT共识算法,其特征在于,所述算法包括:
构建链网络;
利用Louvain算法对所述区块链网络进行社区划分,得到多个社区;
对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。
2.根据权利要求1所述的一种基于社区发现的改进PBFT共识算法,其特征在于,利用Louvain算法对所述区块链网络进行社区划分,得到多个社区,具体包括:
计算所述区块链网络中各节点的信用值和各节点间的业务关联度,以所述节点间的业务关联度为所述节点间的边的权重,以节点的信用值为节点的属性相似度权重,来定义模块度的计算表达式;设置所述模块度的约束条件,将所述区块链网络中每个节点作为一个社区;
将每个节点分别移动到每个邻居节点所在社区;所述邻居节点为与所述节点具有连接边的节点;
计算每个邻居节点所在社区对应的移动前后的模块度变化量;
提取所述模块度变化量的最大值;若所述模块度变化量的最大值大于0,则将当前移动的节点分配到目标邻居节点所在社区;所述目标邻居节点所在社区为所述模块度变化量的最大值对应的所述邻居节点所在社区;
返回步骤“将每个节点分别移动到每个邻居节点所在社区”,直至所有节点的所属社区不再变化,得到划分社区;
将每一当前所述划分社区视为一个新节点,当前所述划分社区内各节点的信用值的平均值转化成新节点的信用值,当前所述划分社区内各节点之间的权重转化为新节点的权重,当前所述划分社区间的边权重转化为新节点间的边权重;
返回步骤“将每个节点分别移动到每个邻居节点所在社区”,直至整体模块度不再变化;
从所有迭代过程中的社区划分结果中筛选出满足所述模块度的约束条件的社区划分结果,得到最终划分后的社区。
3.根据权利要求2所述的一种基于社区发现的改进PBFT共识算法,其特征在于,所述信用值的计算公式为:
mi=ω1a1+ω2a2
其中,
mi代表节点i的信用值,ω1、ω2是权重,a1、a2是当前信用周期节点i的共识参与度和节点i共识成功率;Ci是节点i一个信用周期内的共识次数,Bi是一个信用周期内总共识次数;
CSi是节点i一个信用周期内的共识成功次数。
4.根据权利要求3所述的一种基于社区发现的改进PBFT共识算法,其特征在于,所述业务关联度的计算公式为:
其中,
式中,e^(‑deltat/T)是一个时间衰减因子,deltat代表当前的时间与每一轮共识完成的时间的差值,T是一个共识周期,时间衰减因子e^(‑deltat/T)的值在0到1之间,其值随着deltat的增大而减小;Sij是节点i和节点j之间的交易次数,Mij是节点i和节点j之间的交易金额,Fij是节点i和节点j之间的交易频率;α1、β1、γ是权重系数。
5.根据权利要求4所述的一种基于社区发现的改进PBFT共识算法,其特征在于,所述模块度的计算表达式为:
其中,
式中,Wij是节点i和节点j之间边的权重,即节点之间的业务关联度;ki和kj是与节点i和节点j相连的所有的边的权重之和;wi和wj是节点i和节点j的信用值;m是区块链网络中所有的边的权重之和;参数α和β用来调整业务关联度和信用值的影响权重;Sij表示节点的属性相似度,指节点i和节点j在共识中的每一个信用周期R的信用值的相似度,miR和mjR分别表示节点i和节点j的第R个信用周期的信用值。
6.根据权利要求5所述的一种基于社区发现的改进PBFT共识算法,其特征在于,所述模块度的约束条件为:
2
Q″=Q′‑λ∑(nc‑navg)
其中,Q″表示预设的模块度约束值;nc是每一个社区的节点数量,navg是预设的社区内节点数量平均值,∑是对所有社区的求和,λ是一个正的惩罚系数。
7.根据权利要求1所述的一种基于社区发现的改进PBFT共识算法,其特征在于,对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识,具体包括:
客户端向每一社区主节点发送请求;REQUEST为包含消息内容m以及消息的摘要d(m),o表示请求的具体操作,t表示发送请求时客户端追加的时间戳,c表示客户端标识;客户端对请求进行签名;每个所述社区主节点为每个社区内信用值最高的节点;
每一所述社区主节点在收到客户端的请求后,校验客户端发送的请求消息签名是否正确;如果签名正确,每一所述社区主节点给客户端发送的请求消息分配一个编号;然后广播一条<,m>消息给所在社区内其他社区内节点,v表示视图编号,编号n用于对客户端的请求进行排序,d表示客户端消息的摘要;同时,每一所述社区主节点对<,m>消息进行签名;所述副本节点为社区内非社区主节点;
每一所述社区内节点收到对应的所述社区主节点的PRE‑PREPARE消息,校验消息签名是否正确、是否已经收到了一条在同一视图下并且编号相同,但是签名不同的信息、消息中的d与m的摘要是否一致;如果请求校验正确,向所在社区内的其他社区内节点发送一条消息,并对消息进行签名;i表示当前发送消息的节点编号;
社区内节点收到PREPARE消息,校验消息签名是否正确、当前节点是否已经收到了同一视图下的n、d是否和当前已收到消息中的d相同;如果请求校验正确,则当节点收到了2f+1个验证通过的PREPARE消息,则向其他节点包括社区主节点发送消息,并对消息进行签名;ci表示社区的标签;f表示PBFT算法中拜占庭节点的数目;
社区主节点收到COMMIT消息,校验其他社区内节点COMMIT消息签名是否正确、当前节点是否已经收到了同一视图下的n、d与m的摘要是否一致;如果请求校验正确,则当社区主节点收到了2f+1个验证通过的COMMIT消息,说明社区内的大部分节点已经达成共识;然后向各个社区主节点发送<,m>消息,a表示社区编号,同时,对<,m>消息进行签名;
社区主节点收到其他社区主节点的IN‑REPLY消息,校验消息签名是否正确、是否已经收到了一条在同一视图下、社区编号是a并且消息编号是n,但是签名不同的信息、消息中的d与m的摘要是否一致;如果请求校验正确,社区主节点要向其他社区主节点发送一条消息,并对消息进行签名;
社区主节点收到IN‑REPLY消息,校验消息签名是否正确、当前节点是否已经收到了同一视图下的a和n、d是否和当前已收到消息中的d相同;如果请求校验正确,则当社区主节点收到了全部社区主节点的验证通过的IN‑REPLY消息,运行客户端的请求操作o,并返回消息给客户端,r表示请求操作结果,如果客户端收到全部社区主节点的IN‑REPLY消息,说明客户端发起的请求已经达成全网共识,否则客户端需要判断是否重新发送请求给全网主节点;所述全网主节点为在各个社区主节点内随机选择的一个社区主节点。
8.一种基于社区发现的改进PBFT共识系统,其特征在于,所述系统包括:
网络构建模块,用于构建区块链网络;
社区划分模块,用于利用Louvain算法对所述区块链网络进行社区划分,得到多个划分社区;
共识模块,用于对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。
9.根据权利要求8所述的一种基于社区发现的改进PBFT共识系统,其特征在于,所述社区划分模块具体包括:
初始定义单元,用于计算所述区块链网络中各节点的信用值和各节点间的业务关联度,以所述节点间的业务关联度为所述节点间的边的权重,以节点的信用值为节点的属性相似度权重,来定义模块度的计算表达式;设置所述模块度的约束条件,将所述区块链网络中每个节点作为一个社区;
节点移动单元,用于将每个节点分别移动到每个邻居节点所在社区;所述邻居节点为与所述节点具有连接边的节点;
模块度变化量计算单元,用于计算每个邻居节点所在社区对应的移动前后的模块度变化量;
节点分配单元,用于提取所述模块度变化量的最大值;若所述模块度变化量的最大值大于0,则将当前移动的节点分配到目标邻居节点所在社区;所述目标邻居节点所在社区为所述模块度变化量的最大值对应的所述邻居节点所在社区;
第一循环单元,用于返回执行所述节点移动单元中的“将每个节点分别移动到每个邻居节点所在社区”,直至所有节点的所属社区不再变化,得到划分社区;
网络凝聚单元,用于将每一当前所述划分社区视为一个新节点,当前所述划分社区内各节点的信用值的平均值转化成新节点的信用值,当前所述划分社区内各节点之间的权重转化为新节点的权重,当前所述划分社区间的边权重转化为新节点间的边权重;
第二循环单元,用于返回执行所述节点移动单元中的“将每个节点分别移动到每个邻居节点所在社区”,直至整体模块度不再变化;
社区划分筛选单元,用于从所有迭代过程中的社区划分结果中筛选出满足所述模块度的约束条件的社区划分结果,得到最终划分后的社区。

说明书全文

一种基于社区发现的改进PBFT共识算法及系统

技术领域

[0001] 本发明涉及链共识算法领域,特别是涉及一种基于社区发现的改进PBFT共识算法及系统。

背景技术

[0002] 相比之下,区块链的商业应用通常无法承担巨额资源消耗,且对吞吐量有更高的要求,特别在实时交易应用中,用户期望能够快速完成交易确认,因此需要更低的延迟。尤其是在大规模区块链网络中,对系统的吞吐量和延迟也提出了更高的要求。但是,如何优化区块链的共识机制以适应大规模网络环境的研究却相对匮乏。
[0003] 在当今区块链网络中,特别是面对节点数量不断增加和交易请求日益复杂化的环境,实现高效且可靠的共识算法已成为一个紧迫和关键的问题。传统的PBFT(Practical Byzantine Fault Tolerance)算法在处理小规模网络时,以其优良的容错性和稳定性得到了广泛的认可。然而,在面对大规模节点的环境中,该算法的性能表现出明显的局限性。在仅有四个节点的情况下,PBFT算法就需要高达22次的通信交换,而随着节点数量的增加,这个数字会呈指数级别递增,使得整体通信效率大幅度降低。如何有效提升PBFT算法的共识效率,成为区块链应用面临的主要挑战。

发明内容

[0004] 本发明的目的是提供一种基于社区发现的改进PBFT共识算法及系统,利用Louvain社区发现算法对区块链网络进行社区划分。采用"先社区内共识,后社区间共识"的策略,降低大规模共识中的复杂度。该算法能够显著降低大规模区块链网络的通信复杂度,缩短共识达成时间,提高系统的吞吐量。
[0005] 为实现上述目的,本发明提供了如下方案:
[0006] 一种基于社区发现的改进PBFT共识算法,所述算法包括:
[0007] 构建区块链网络;
[0008] 利用Louvain算法对所述区块链网络进行社区划分,得到多个划分社区;
[0009] 对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。
[0010] 可选的,利用Louvain算法对所述区块链网络进行社区划分,得到多个社区,具体包括:
[0011] 计算所述区块链网络中各节点的信用值和各节点间的业务关联度,以所述节点间的业务关联度为所述节点间的边的权重,以节点的信用值为节点的属性相似度权重,来定义模块度的计算表达式;设置所述模块度的约束条件,将所述区块链网络中每个节点作为一个社区;
[0012] 将每个节点分别移动到每个邻居节点所在社区;所述邻居节点为与所述节点具有连接边的节点;
[0013] 计算每个邻居节点所在社区对应的移动前后的模块度变化量;
[0014] 提取所述模块度变化量的最大值;若所述模块度变化量的最大值大于0,则将当前移动的节点分配到目标邻居节点所在社区;所述目标邻居节点所在社区为所述模块度变化量的最大值对应的所述邻居节点所在社区;
[0015] 返回步骤“将每个节点分别移动到每个邻居节点所在社区”,直至所有节点的所属社区不再变化,得到划分社区;
[0016] 将每一当前所述划分社区视为一个新节点,当前所述划分社区内各节点的信用值的平均值转化成新节点的信用值,当前所述划分社区内各节点之间的权重转化为新节点的权重,当前所述划分社区间的边权重转化为新节点间的边权重;
[0017] 返回步骤“将每个节点分别移动到每个邻居节点所在社区”,直至整体模块度不再变化;
[0018] 从所有迭代过程中的社区划分结果中筛选出满足所述模块度的约束条件的社区划分结果,得到最终划分后的社区。
[0019] 可选的,所述信用值的计算公式为:
[0020] mi=ω1a1+ω2a2
[0021] 其中,
[0022] mi代表节点i的信用值,ω1、ω2是权重,a1、a2是当前信用周期节点i的共识参与度和节点i共识成功率;Ci是节点i一个信用周期内的共识次数,Bi是一个信用周期内总共识次数;CSi是节点i一个信用周期内的共识成功次数。
[0023] 可选的,所述业务关联度的计算公式为:
[0024]
[0025] 其中,
[0026] 式中,e^(‑deltat/T)是一个时间衰减因子,deltat代表当前的时间与每一轮共识完成的时间的差值,T是一个共识周期,时间衰减因子e^(‑deltat/T)的值在0到1之间,其值随着deltat的增大而减小;Sij是节点i和节点j之间的交易次数,Mij是节点i和节点j之间的交易金额,Fij是节点i和节点j之间的交易频率;;α1、β1、γ是权重系数。
[0027] 可选的,所述模块度的计算表达式为:
[0028]
[0029] 其中,
[0030] 式中,Wij是节点i和节点j之间边的权重,即节点之间的业务关联度;ki和kj是与节点i和节点j相连的所有的边的权重之和;wi和wj是节点i和节点j的信用值;m是区块链网络中所有的边的权重之和;参数α和β用来调整业务关联度和信用值的影响权重;Sij表示节点的属性相似度,本文中指节点i和节点j在共识中的每一个信用周期R的信用值的相似度;miR和mjR分别表示节点i和节点j的第R个信用周期的信用值。
[0031] 可选的,所述模块度的约束条件为:
[0032]
[0033] 其中,Q”表示预设的模块度约束值;nc是每一个社区的节点数量,navg是预设的社区内节点数量平均值,∑是对所有社区的求和,λ是一个正的惩罚系数。
[0034] 可选的,对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识,具体包括:
[0035] 客户端向每一社区主节点发送请求;REQUEST为包含消息内容m以及消息的摘要d(m),o表示请求的具体操作,t表示发送请求时客户端追加的时间戳,c表示客户端标识;客户端对请求进行签名;每个所述社区主节点为每个社区内信用值最高的节点;
[0036] 每一所述社区主节点在收到客户端的请求后,校验客户端发送的请求消息签名是否正确;如果签名正确,每一所述社区主节点给客户端发送的请求消息分配一个编号;然后广播一条<,m>消息给所在社区内其他社区内节点,v表示视图编号,编号n用于对客户端的请求进行排序,d表示客户端消息的摘要;同时,每一所述社区主节点对<,m>消息进行签名;所述副本节点为社区内非社区主节点;
[0037] 每一所述社区内节点收到对应的所述社区主节点的PRE‑PREPARE消息,校验消息签名是否正确、是否已经收到了一条在同一视图下并且编号相同,但是签名不同的信息、消息中的d与m的摘要是否一致;如果请求校验正确,向所在社区内的其他社区内节点发送一条消息,并对消息进行签名;i表示当前发送消息的节点编号;
[0038] 社区内节点收到PREPARE消息,校验消息签名是否正确、当前节点是否已经收到了同一视图下的n、d是否和当前已收到消息中的d相同;如果请求校验正确,则当节点收到了2f+1个验证通过的PREPARE消息,则向其他节点包括社区主节点发送消息,并对消息进行签名;ci表示社区的标签;f表示PBFT算法中拜占庭节点的数目;
[0039] 社区主节点收到COMMIT消息,校验其他社区内节点COMMIT消息签名是否正确、当前节点是否已经收到了同一视图下的n、d与m的摘要是否一致;如果请求校验正确,则当社区主节点收到了2f+1个验证通过的COMMIT消息,说明社区内的大部分节点已经达成共识;然后向各个社区主节点发送<,m>消息,a表示社区编号,同时,对<,m>消息进行签名;
[0040] 社区主节点收到其他社区主节点的IN‑REPLY消息,校验消息签名是否正确、是否已经收到了一条在同一视图下、社区编号是a并且消息编号是n,但是签名不同的信息、消息中的d与m的摘要是否一致;如果请求校验正确,社区主节点要向其他社区主节点发送一条消息,并对消息进行签名;
[0041] 社区主节点收到IN‑REPLY消息,校验消息签名是否正确、当前节点是否已经收到了同一视图下的a和n、d是否和当前已收到消息中的d相同;如果请求校验正确,则当社区主节点收到了全部社区主节点的验证通过的IN‑REPLY消息,运行客户端的请求操作o,并返回消息给客户端,r表示请求操作结果,如果客户端收到全部社区主节点的IN‑REPLY消息,说明客户端发起的请求已经达成全网共识,否则客户端需要判断是否重新发送请求给全网主节点;所述全网主节点为在各个社区主节点内随机选择的一个社区主节点。
[0042] 本发明提供一种基于社区发现的改进PBFT共识系统,所述系统包括:
[0043] 网络构建模块,用于构建区块链网络;
[0044] 社区划分模块,用于利用Louvain算法对所述区块链网络进行社区划分,得到多个划分社区;
[0045] 共识模块,用于对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。
[0046] 可选的,所述社区划分模块具体包括:
[0047] 初始定义单元,用于计算所述区块链网络中各节点的信用值和各节点间的业务关联度,以所述节点间的业务关联度为所述节点间的边的权重,以节点的信用值为节点的属性相似度权重,来定义模块度的计算表达式;设置所述模块度的约束条件,将所述区块链网络中每个节点作为一个社区;
[0048] 节点移动单元,用于将每个节点分别移动到每个邻居节点所在社区;所述邻居节点为与所述节点具有连接边的节点;
[0049] 模块度变化量计算单元,用于计算每个邻居节点所在社区对应的移动前后的模块度变化量;
[0050] 节点分配单元,用于提取所述模块度变化量的最大值;若所述模块度变化量的最大值大于0,则将当前移动的节点分配到目标邻居节点所在社区;所述目标邻居节点所在社区为所述模块度变化量的最大值对应的所述邻居节点所在社区;
[0051] 第一循环单元,用于返回执行所述节点移动单元中的“将每个节点分别移动到每个邻居节点所在社区”,直至所有节点的所属社区不再变化,得到划分社区;
[0052] 网络凝聚单元,用于将每一当前所述划分社区视为一个新节点,当前所述划分社区内各节点的信用值的平均值转化成新节点的信用值,当前所述划分社区内各节点之间的权重转化为新节点的权重,当前所述划分社区间的边权重转化为新节点间的边权重;
[0053] 第二循环单元,用于返回执行所述节点移动单元中的“将每个节点分别移动到每个邻居节点所在社区”,直至整体模块度不再变化;
[0054] 社区划分筛选单元,用于从所有迭代过程中的社区划分结果中筛选出满足所述模块度的约束条件的社区划分结果,得到最终划分后的社区。
[0055] 根据本发明提供的具体实施例,本发明公开了以下技术效果:
[0056] 本发明公开一种基于社区发现的改进PBFT共识算法及系统,算法包括:构建区块链网络;利用Louvain算法对所述区块链网络进行社区划分,得到多个划分社区;对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。本发明利用Louvain社区发现算法对区块链网络进行社区划分,在共识策略方面,该研究对原有的一致性协议进行了改进,采用了先进行社区内部共识,再进行社区间共识的策略。在社区内部达成初步共识后,再与其他社区进行整体共识,降低大规模共识中的复杂度。不仅有效提高了共识的效率,还增强了整个网络的稳定性。附图说明
[0057] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0058] 图1为本发明实施例1提供的一种基于社区发现的改进PBFT共识算法流程图
[0059] 图2为本发明实施例1提供的一种基于社区发现的改进PBFT共识算法构思图;
[0060] 图3为本发明实施例1提供的G‑PBFT共识算法过程示意图;
[0061] 图4为本发明实施例1提供的PBFT共识算法和G‑PBFT共识算法通讯复杂度对比示意图;
[0062] 图5为本发明实施例1提供的PBFT共识算法与G‑PBFT共识算法的共识时延对比示意图;
[0063] 图6为本发明实施例1提供的PBFT共识算法与G‑PBFT共识算法的交易吞吐量对比示意图。

具体实施方式

[0064] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0065] 共识算法是区块链分布式系统的核心组成部分,它是通过遵循预设流程,使互不信任的节点最终实现数据一致性的关键算法。PBFT共识算法在这一过程中能够容忍一定数量的拜占庭错误节点。大规模区块链网络中,通过PBFT共识算法维护分布式账本的一致性,是区块链系统运行的关键。传统的PBFT共识算法通过多个节点间的交叉验证,防止恶意节点的篡改和欺瞒。然而,这种方式的共识过程复杂,在大规模网络中,共识效率低下,且无法有效应对恶意节点和故障节点的影响,导致网络的稳定性难以保证。本文提出一个基于社区发现的改进PBFT算法,通过节点间交易行为数据构建社交网络,根据节点间的业务关联度,利用Louvain社区发现算法进行社区划分。采用"先社区内共识,后社区间共识"的策略,降低大规模共识中的复杂度。实验结果表明,该算法能够显著降低大规模区块链网络的通信复杂度,缩短共识达成时间,提高系统的吞吐量。
[0066] 为使本发明的目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0067] 实施例1
[0068] 如图1和2所示,本实施例提供一种基于社区发现的改进PBFT共识算法,所述算法包括:
[0069] S1:构建区块链网络。
[0070] 区块链网络模型构建,在大规模制造产业的中,为了应用区块链实现跨域追溯,供应商、制造商、运输商、销售商等主体加入区块链网络,构成大规模区块链网络。使用无向图来表示区块链网络。在这个网络图中,制造产业中的供应商、制造商、运输商、销售商是区块链网络中的节点,产业中的每笔交易(例如,零部件采购、产品销售等)可以表示为一个边。
[0071] 边的权重采用业务关联度表示,例如,两个节点之间的交易次数、交易金额和交易频率。在网络中,为了突显节点之间最近的业务关联度对总体的影响,引入时间衰减因子。然后,采用基于模块度的社区发现算法——Louvain算法,在网络中节点遍历其他节点,并选择最大化模块度增量的合并节点为一个新的社区。在最大化模块度之后,区块链网络就被划分成多个社区,这代表着划分出的社区内部的业务关联度高,而社区之间的业务关联度低。
[0072] S2:利用Louvain算法对所述区块链网络进行社区划分,得到多个划分社区。
[0073] 在区块链网络模型中,采用基于Louvain算法的网络社区划分,再根据区块链网络的特性和参量选择,将选择节点之间的交易次数、交易金额和交易频率等多个因素度量成两个节点之间的业务关联度作为边的权重,同时为了保证共识算法的稳定性,选择节点在共识算法中的历史行为的指标度量节点的信用值,然后,将节点信用值和节点之间的业务关联度与Louvain算法结合成社区划分的加权的模块度。
[0074] Louvain算法是一种常用的用于大规模网络社区发现的算法,在初始化阶段,每个节点都是一个社区,那么,Q'是每个社区的模块度,而模块度代表社区内部以及社区之间的紧密程度。然后在每次迭代过程中,算法都会尝试把每个节点移动到它的邻居社区中,需要执行ΔQ去判断这种移动是否可以带来模块度的增加,如果可以,那么就执行这种移动。对所有节点重复此过程直到模块度无法进一步提高为止,使社区内达到最紧密的连接程度。但社区划分的结果需要为改进的PBFT算法准备,需要社区划分后保证每个社区的节点在平均值范围内,需要在社区发现算法之后,进行一些额外的后处理步骤。例如,如果一个社区太大,可以尝试将它分割成几个较小的社区;如果一个社区太小,可以尝试将它与最近的其他社区合并。处理的方法在算法后引入一个惩罚项来惩罚过大或过小的社,定义了新的模块度Q”(模块度的约束条件Q'),使得最终的模块度选择出的社区节点符合算法的需求。
[0075] Louvain算法,首先,定义了社区的模块度Q',由Q'推出的ΔQ(表示节点i进入社区c之后的模块度与节点i进入社区c之前,社区c和节点i分别单独作为一个社区的模块度之和的差值。)来判断是否将节点移入社区来增加模块度。但是,在网络凝聚阶段容易发生错误的合并或者社区过大或过小的情况,引入Q”来限制。Louvain算法步骤如下:
[0076] 1,初始化,将区块链网络的每个节点看作一个独立的社区,社区的数目与节点个数相同。
[0077] 2,社区间节点转移。对每个节点,依次尝试把节点分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化ΔQ,并记录ΔQ最大的那个邻居节点,如果ΔQ>0,则把节点分配到ΔQ最大的那个邻居节点所在的社区,否则保持不变;
[0078] 3,重复步骤2,直到所有节点的所属社区不再变化;
[0079] 4,图重构。对图进行压缩,将所有在同一个社区的节点压缩成一个新节点,社区内节点之间的边的权重转化为新节点的权重,社区间的边权重转化为新节点间的边权重;
[0080] 5,重复步骤1,直到整个图的模块度不再发生变化。
[0081] 6,但最终结果是,根据限制条件Q”从不断迭代过程中社区划分中选择出社区数目与节点数目符合当前共识算法的需求,即限制社区节点数目和社区数目。
[0082] 例如,第一次迭代,经过模块度优化阶段,总的模块度值不再改变,算法将16个节点划分成8个社区;在网络凝聚阶段,8个社区被凝聚成8个超级节点,并重新更新了边权重。如果加入某个邻接节点的社区会获得最大的模块度增益,且是正数,那么会加入到社区内,在整个图的模块度不再变化之后就进入第二次迭代中。算法将8个超级节点划分成4个社区;同上在网络凝聚阶段,4个社区会被凝聚成4个超级节点,并重新更新了边权重。之后可能存在第三次迭代,如果进入第三次迭代中,算法会将4个超级节点划分成2个社区;但此时在限制条件下,这一步骤会被终止,也不会存在网络凝聚阶段,2个社区被凝聚成2个超级节点的情况。那么最终迭代的结果,是形成4个社区,每个社区4个节点。
[0083] 其中,步骤S2具体包括:
[0084] (1)计算所述区块链网络中各节点的信用值和各节点间的业务关联度,以所述节点间的业务关联度为所述节点间的边的权重,以节点的信用值为节点的属性相似度权重,来定义模块度的计算表达式;设置所述模块度的约束条件,将所述区块链网络中每个节点作为一个社区。
[0085] 节点信用值是由节点在共识算法中的历史行为的指标来表示的,考虑到节点在共识算法的数据难以计算,通过节点的共识参与度,节点的共识成功率的指标并分配权重计算出节点信用值。
[0086] 节点i的信用值,可以表示为:
[0087] mi=ω1a1+ω2a2
[0088] 其中,
[0089] mi代表节点i的信用值,ω1、ω2是权重,a1、a2是当前信用周期节点i的共识参与度和节点i共识成功率;Ci是节点i一个信用周期内的共识次数,Bi是一个信用周期内总共识次数;CSi是节点i一个信用周期内的共识成功次数。
[0090] 业务关联度表示节点之间在交易上的关系程度的指标。首先,根据节点之间的交易次数、交易金额和交易频率等多个因素体现两个节点之间的业务关联度。然后,根据这些因素在场景中的重要性分配权重再进行计算。最后,为了更精确地评估近期节点间业务关联度对总体业务关联度的影响,我们将每个共识周期内的业务关联度作为单独的个体来计算出总体业务关联度。
[0091]
[0092] 其中, 代表两个节点之间在一个共识周期内的业务关联度。Sij是节点i和节点j之间的交易次数,Mij是节点i和节点j之间的交易金额,Fij是节点i和节点j之间的交易频率;α1、β1、γ是权重系数。
[0093] 在业务关联度的评估中,通过引入时间衰减因子来强调最近的节点之间的业务关联度,时间衰减因子可以由时间计算得到,例如使用指数衰减函数或者其他类型的衰减函数。衰减因子随着时间的增长而减小,因此最近的衰减因子较大,对总体业务关联度的比重也就更大。
[0094]
[0095] 其中,e^(‑deltat/T)是一个时间衰减因子,其中deltat代表现在的时间与每一轮共识完成的时间的差值,T是一个共识周期。时间衰减因子e^(‑deltat/T)的值在0到1之间,其值随着deltat的增大而减小。这表示距离现在越近的业务关联度对整体的权重越大。
[0096] 节点信用值反映了节点自身特性的重要指标,而节点间的业务关联度则反映网络内在因素的重要指标。通过结合这两个属性,可以更有效地对网络进行社区划分,从而形成内部联系紧密,而与外部联系相对较弱的社区。这不仅提高了共识的效率,同时也增强了网络的安全性和稳定性。同时,这种方式有助于确保社区内节点的稳定性,并将不稳定节点的影响限制在其所在社区,从而减轻其对整个网络的影响。
[0097] 考虑到将节点之间的业务关联度作为边的权重,同时引入节点信用值,需要使用加权的模块度重新定义,如下:
[0098]
[0099] 其中,
[0100] 式中,Wij是节点i和节点j之间边的权重,即节点之间的业务关联度;ki和kj是与节点i和节点j相连的所有的边的权重之和;wi和wj是节点i和节点j的信用值;m是区块链网络中所有的边的权重之和;参数α和β用来调整业务关联度和信用值的影响权重;Sij表示节点的属性相似度,本文中指节点i和节点j在共识中的每一个信用周期R的信用值的相似度。miR和mjR分别表示节点i和节点j的第R个信用周期的信用值。该公式计算了节点间信用值的相似度,Sij的值越接近0,表示节点间信用值越接近,N指节点的信用周期数量。
[0101] 在这个模块度定义中,当两个信用值都高的节点之间的业务关联度高时,模块度会增加,这意味着算法会倾向于将这样的节点划分到同一社区。另一方面,当两个节点的信用值差距大时,即使它们之间的业务关联度高,模块度也不会增加很多,这意味着算法不太可能将这样的节点划分到同一社区。
[0102] 为了保证每个社区的节点在平均值的范围内,需要在社区发现算法之后,进行一些额外的后处理步骤。例如,如果一个社区太大,可以尝试将它分割成几个较小的社区;如果一个社区太小,可以尝试将它与最近的其他社区合并。处理的方法在算法后引入一个惩罚项来惩罚过大或过小的社区。
[0103] 定义一个新的模块度Q”:
[0104]
[0105] 其中,Q”表示预设的模块度约束值;Q'是原始的模块度,nc是社区c的大小,navg是预设的社区内节点数量平均值,∑是对所有社区的求和,λ是一个正的惩罚系数。这个新的模块度会在最大化原始模块度的同时,尽量使每个社区的大小接近平均值。
[0106] (2)将每个节点分别移动到每个邻居节点所在社区;所述邻居节点为与所述节点具有连接边的节点;
[0107] (3)计算每个邻居节点所在社区对应的移动前后的模块度变化量;
[0108] (4)提取所述模块度变化量的最大值;若所述模块度变化量的最大值大于0,则将当前移动的节点分配到目标邻居节点所在社区;所述目标邻居节点所在社区为所述模块度变化量的最大值对应的所述邻居节点所在社区;
[0109] 在当Louvain算法尝试把一个节点i分别移动到邻居节点所在的社区时,会计算移动前后的模块度变化ΔQ,具体的计算公式为:
[0110]
[0111] 其中,Σin是邻居节点所在的社区内部边的权重之和,Σtot是邻居节点所在的社区所有边的权重之和,ki是节点i所有边的权重之和,ki,in是节点i到邻居节点所在的社区的边的权重之和。
[0112] 如果ΔQ>0,那么就把节点i移动到邻居节点所在的社区。通过这样的方式,Louvain算法可以考虑边的权重来寻找模块度最大的社区划分。同时,在每个社区中选择信誉值高的节点作为每个社区的主节点,提高算法的稳定性
[0113] (5)返回步骤(2)“将每个节点分别移动到每个邻居节点所在社区”,直至所有节点的所属社区不再变化,得到划分社区。
[0114] 将每一当前所述划分社区视为一个新节点,当前所述划分社区内各节点的信用值的平均值转化成新节点的信用值,当前所述划分社区内各节点之间的权重转化为新节点的权重,当前所述划分社区间的边权重转化为新节点间的边权重。
[0115] 返回步骤(2)“将每个节点分别移动到每个邻居节点所在社区”,直至整体模块度不再变化。
[0116] 从所有迭代过程中的社区划分结果中筛选出满足所述模块度的约束条件的社区划分结果,得到最终划分后的社区。
[0117] S3:对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。
[0118] 根据步骤S1和步骤S2,区块链网络划分成多个内部节点紧密关联的社区,通过改进PBFT算法选择先社区内共识,再社区间共识的方法从局部共识达成全网共识,形成区块链整体网络的共识算法,实现区块链共识算法的改进优化。
[0119] G‑PBFT一致性协议是共识算法的流程路线,G‑PBFT算法通过采用基于模块度的Louvain算法,在区块链网络中根据节点之间的业务关联度来发现节点关系紧密型的社区,进而将区块链网络划分为多个紧密型社区,然后通过社区内共识再进行社区间共识的方法达到全网共识。同时,引入节点信用值提高社区的稳定性和安全性,通过节点的信用值选择每个社区最高信用值的作为社区的主节点,而全网主节点由各个社区主节点随机选择。一致性协议是PBFT算法的核心,而G‑PBFT算法的一致性协议对原协议各个过程进行一些优化和调整,其优化流程如下:
[0120] 1.Request:
[0121] 客户端C向各个社区主节点G发送请求。REQUEST:包含消息内容m,以及消息的摘要d(m),o:请求的具体操作,t:发送请求时客户端追加的时间戳,c:客户端标识。最后,客户端对请求进行签名。
[0122] 2.Pre‑prepare:
[0123] 每个社区主节点在收到客户端的请求后,需要校验客户端发送的请求消息签名是否正确。如果签名正确,社区主节点会给客户端发送的请求消息分配一个编号n,编号n主要用于对客户端的请求进行排序。然后广播一条<,m>消息给其他副本节点。v:视图编号,d:客户端消息的摘要,m:消息内容,同时,消息需要社区主节点进行签名。
[0124] 3.Prepare:
[0125] 社区内节点收到社区主节点的PRE‑PREPARE消息,需要校验消息签名是否正确、是否已经收到了一条在同一view下并且编号也是n,但是签名不同的信息、消息中的d与m的摘要是否一致。如果请求校验正确,节点要向其他节点包括主节点发送一条消息,消息需要节点i进行签名。
[0126] 4.Commit:
[0127] 社区内节点收到PREPARE消息,需要校验消息签名是否正确、当前节点是否已经收到了同一视图v下的n、d是否和当前已收到消息中的d相同。如果请求校验正确,则当节点收到了2f+1个验证通过的PREPARE消息,则向其他节点包括社区主节点发送消息,消息需要节点i进行签名。ci表示社区的标签;f表示PBFT算法中拜占庭节点的数目。
[0128] 5.In‑reply:
[0129] 社区主节点收到COMMIT消息,需要校验其他节点COMMIT消息签名是否正确、当前节点是否已经收到了同一视图v下的n、d与m的摘要是否一致。如果请求校验正确,则当社区主节点收到了2f+1个验证通过的COMMIT消息,说明社区内的大部分节点已经达成共识。然后向各个社区主节点发送<,m>,v:视图编号,a:社区编号,d:客户端消息的摘要,m:消息内容,同时,消息需要社区主节点进行签名。
[0130] 6.Out‑parpare
[0131] 社区主节点收到其他社区主节点的IN‑REPLY消息,需要校验消息签名是否正确、是否已经收到了一条在同一view下、社区编号是a并且消息编号是n,但是签名不同的信息、消息中的d与m的摘要是否一致。如果请求校验正确,社区主节点要向其他主节点包括网络主节点发送一条消息,消息需要社区主节点i进行签名。
[0132] 7.Out‑reply
[0133] 社区主节点收到IN‑REPLY消息,需要校验消息签名是否正确、当前节点是否已经收到了同一视图v下的a和n、d是否和当前已收到消息中的d相同。如果请求校验正确,则当节点收到了全部社区主节点的验证通过的IN‑REPLY消息,运行客户端的请求操作o,并返回消息给客户端,r:是请求操作结果,如果客户端收到全部社区主节点的IN‑REPLY消息,说明客户端发起的请求已经达成全网共识,否则客户端需要判断是否重新发送请求给全网主节点。G‑PBFT算法如图3所示。
[0134] 在共识策略方面,该研究对原有的一致性协议进行了改进,采用了先进行社区内部共识,再进行社区间共识的策略。在社区内部达成初步共识后,再与其他社区进行整体共识。这种策略不仅有效提高了共识的效率,还增强了整个网络的稳定性。
[0135] 下面通过实验将G‑PBFT算法和PBFT算法从通信复杂度、时延测试、吞吐量三方面对两种算法进行对比,以下是分析与实验:
[0136] 1实验环境
[0137] 本实验基于Go编程语言对G‑PBFT和PBFT的共识流程进行了仿真模拟。实验环境为VMware虚拟机,Ubuntu 20.04.5系统和8GB内存。实验结果用Python对数据进行了处理。实验分别测试了总节点N为10、16、22、25、28和31的两种共识算法的时延和吞吐量。为了减少实验误差,实验重复进行了20次取平均值。本节从通信复杂度、时延测试、吞吐量三方面对两种算法进行对比。
[0138] 2通信复杂度分析
[0139] 设区块链网络总节点数为N,在PBFT共识算法的Pre‑prepare、prepare、commit的通讯复杂度分别为(N‑1)、N(N‑1)、N(N‑1),则总通讯次数为:
[0140] f(N)=1+N‑1+N(N‑1)+N(N‑1)+N=2N2
[0141] G‑PBFT算法将区块链网络分成M个社区,在Pre‑prepare阶段通讯次数为(N/M‑1)、在prepare阶段通讯次数为N/M(N/M‑1)、在commit阶段通讯次数为N/M(N/M‑1)、在In‑reply阶段通讯次数为N/M、在Out‑prepare阶段通讯次数为M(M‑1),则总通讯次数为:
[0142]
[0143] 随着社区数量M的增加,我们观察到G‑PBFT算法的通信次数有显著的降低趋势。具体如图4所示,从图中看出,随着区块链网络节点的增长,G‑PBFT算法对通信次数的降低效果愈发显著,尤其在网络节点达到1000时。以1000个节点的区块链网络为例,将网络分为两个社区后,G‑PBFT算法的通信次数降至PBFT算法通信次数的1/4。如果我们继续增加社区的划分,例如将网络分为四个社区,那么G‑PBFT的通信次数将进一步降低,只有PBFT通信次数的1/16。如果我们更进一步将区块链网络划分为更多的社区,G‑PBFT算法的通信效率提升将更为显著。比如将网络划分为八个社区时,G‑PBFT的通信次数仅为PBFT通信次数的1/66;当网络划分为十六个社区时,G‑PBFT的通信次数甚至可以降至PBFT通信次数的1/250。
[0144] 由此可见,G‑PBFT算法在处理大规模区块链网络时,通过对网络进行合理的社区划分,能够显著降低通信次数,并显著提高通信效率,其性能表现出了显著的优越性。G‑PBFT和PBFT通信次数对比图如下:
[0145] 在传统的PBFT共识算法中,通信复杂度为O(N2),其中N是区块链网络中的节点数量。然而,当我们引入基于社区发现的改进PBFT(G‑PBFT)算法后,通信复杂度可以得到显著的降低。
[0146] 在G‑PBFT算法中,我们首先将整个网络划分为M个社区,每个社区内部[0147] 含有N/M个节点。G‑PBFT算法的共识过程分为两个阶段:社区内共识和社区间共识。在社区内共识阶段,由于只涉及社区内的节点通信,其通信复杂度将降为O((N/M)^2)。随后,在社区间共识阶段,主要的通信过程发生在各个社区主节点之间,其通信复杂度为O(M^2)。
[0148] 因此,总体而言,引入基于社区发现的G‑PBFT算法后,通信复杂度将降低为O((N/M)^2+M^2)。为了在实际的区块链应用环境中实现最优的通信效率,我们需要根据应用的具体业务需求,以及社区内外通信复杂度的平衡,来合理地选择社区数量M。
[0149] 3共识时延
[0150] 共识时延是从节点发送请求到整个共识过程完成所需的时间,可通过以下公式来表示:
[0151] Delay=Tc‑Tr
[0152] 其中,Tc是共识完成结束的时间,而Tr是节点发送请求的时间。共识时延是衡量共识算法性能的一个关键因素。时延越短意味着共识算法更高效。
[0153] 在本实验中,PBFT算法的性能数据将作为基准标准,与G‑PBFT算法进行综合对比。实验设计出不同网络规模,如节点数量为10、16、22、25、28和31,并在不同网络规模下进行了20次共识实验。采用20次实验数据的平均值进行比较,具体如图5所示。从图5的数据曲线中,我们发现PBFT算法的共识时延随着节点数量增加呈现出快速的上升趋势,在节点数量达到30个时,该时延升至约6秒。相对地,G‑PBFT算法展示了更优异的性能:在划分为四个社区的情况下,其共识时延仅缓慢增长至3秒;而在划分为七个社区的情况下,该指标更是稳定在1.5秒。更重要的是,无论G‑PBFT划分为四个社区还是七个社区,共识时延都没有因为节点数量的增加而显著上升。这一结果意味着G‑PBFT算法能够维持较低的共识时延,从而提高整体区块链的运行速度。
[0154] 4交易吞吐量
[0155] 吞吐量(TPS,Transactions Per Second)是评价共识算法性能的关键指标之一,它表示每秒内可以处理的交易数量。该指标可用公式来计算,
[0156] TPS=Transaction/Δt
[0157] 其中,Δt为出块时间,Transaction即从Δt时间段内成功打包进区块的交易数量。在实验中,我们分别对PBFT和GBFT进行了20轮共识测试,500次交易的吞吐量测试。根据以上公式,我们计算出了两种算法的吞吐量,并将结果绘制在图6中。从图6可以明显看出,PBFT与G‑PBFT算法的交易吞吐量都是随着节点数量增加而下降。在相同实验条件和相同数量的节点下,G‑PBFT的交易吞吐量明显高于PBFT算法。当将网络划分为七个社区的G‑PBFT算法的交易吞吐量也高于将网络划分为四个社区的G‑PBFT算法。具体来说,PBFT随着节点达到30节点时就趋近于0,而将网络划分为四个社区的G‑PBFT算法的交易吞吐量只是缓慢下降到250,将网络划分为七个社区的G‑PBFT算法的交易吞吐量则下降到了280。这一结果意味着G‑PBFT算法随着节点的增加依然保持较高的交易吞吐量,从而提升了整体系统的运行效率。
[0158] 本实施例提出了改进PBFT(G‑PBFT)算法,该算法利用社区发现的思想,通过社区内共识和社区间共识两个阶段的共识,降低问题规模,从而解决大规模区块链网络中的共识问题。通过引入了基于模块度的社区发现算法——Louvain算法,对区块链网络进行社区划分。社区内的节点具有更强的相关性,因而在共识过程中更具有代表性。而通过最大化模块度划分的社区,可以保证社区内部的节点之间的联系更紧密,与其他社区节点的联系则相对较少。同时,为了保证社区网络的稳定性以及精确描述社区内节点之间的连接强度,我们引入了节点的信用值和业务关联度这两个关键度量因子。节点信用值反映了一个节点在区块链网络中的可信度,它包括该节点的历史行为的稳定性和可靠性。通过将信用值相近的节点分入同一社区,可以提高网络的安全性和稳定性。业务关联度主要反映了节点之间在业务层面上的关联程度。由于高度关联的节点更频繁地进行交易,所以将这些节点分配到同一社区可以减少跨社区的传输需求,并加快具体交易的确认速度。该算法通过引入节点信用值和业务关联度,在保障网络安全和稳定的同时,还提高了区块链网络的共识效率。
[0159] 通过改进的模块度保证了同一社区内的节点具有高度的业务关联度,即同一社区的节点间存在大量的交易,业务关联度高。因此,单个节点的行为变化,如交易频率、交易金额的波动,对整体社区的影响较小,从而增加了社区内部的稳定性。同时,本研究引入时间衰减因子强调节点之间最近的交易程度在社区划分中的影响,过去的交易对社区划分的影响逐渐减弱,从而降低了历史交易对社区划分指标的影响,使得社区划分结果能够更好地反映出区块链网络的最新状态,提高了社区划分的实时性,进一步提高社区的稳定性。除此之外,本文引入节点信用值作为关键因素。节点的信用值是基于其在共识过程中的历史行为来确定的,从而反映了节点在共识过程中的稳定性和可靠性。通过将信用值相近的节点划分到同一社区,避免信用值差别过大的节点划分到同一个社区,有助于提高社区内的共识效率,并增强社区的稳定性,因为这些节点在未来的共识过程中更可能表现出一致的行为,而信用值较高的节点划分到同一社区可以提高社区的共识效率,并增加社区的稳定性。反之,将信用值较低的节点划分到同一社区,虽然可能降低该社区的共识效率,但由于该社区的影响被限制在社区内,不会对整个网络产生较大影响。此外,通过信用值选择的社区内主节点能够有效提高社区间的共识效率和稳定性。
[0160] 实施例2
[0161] 本实施例提供一种基于社区发现的改进PBFT共识系统,所述系统包括:
[0162] 网络构建模块,用于构建区块链网络。
[0163] 社区划分模块,用于利用Louvain算法对所述区块链网络进行社区划分,得到多个划分社区。
[0164] 其中,所述社区划分模块具体包括:
[0165] 初始定义单元,用于计算所述区块链网络中各节点的信用值和各节点间的业务关联度,以所述节点间的业务关联度为所述节点间的边的权重,以节点的信用值为节点的属性相似度权重,来定义模块度的计算表达式;设置所述模块度的约束条件,将所述区块链网络中每个节点作为一个社区。
[0166] 节点移动单元,用于将每个节点分别移动到每个邻居节点所在社区;所述邻居节点为与所述节点具有连接边的节点。
[0167] 模块度变化量计算单元,用于计算每个邻居节点所在社区对应的移动前后的模块度变化量。
[0168] 节点分配单元,用于提取所述模块度变化量的最大值;若所述模块度变化量的最大值大于0,则将当前移动的节点分配到目标邻居节点所在社区;所述目标邻居节点所在社区为所述模块度变化量的最大值对应的所述邻居节点所在社区。
[0169] 第一循环单元,用于返回执行所述节点移动单元中的“将每个节点分别移动到每个邻居节点所在社区”,直至所有节点的所属社区不再变化,得到划分社区;
[0170] 网络凝聚单元,用于将每一当前所述划分社区视为一个新节点,当前所述划分社区内各节点的信用值的平均值转化成新节点的信用值,当前所述划分社区内各节点之间的权重转化为新节点的权重,当前所述划分社区间的边权重转化为新节点间的边权重;
[0171] 第二循环单元,用于返回执行所述节点移动单元中的“将每个节点分别移动到每个邻居节点所在社区”,直至整体模块度不再变化;
[0172] 社区划分筛选单元,用于从所有迭代过程中的社区划分结果中筛选出满足所述模块度的约束条件的社区划分结果,得到最终划分后的社区。
[0173] 共识模块,用于对每一所述社区应用PBFT共识算法进行社区内共识,社区内达成共识后,应用所述PBFT共识算法进行社区间共识。
[0174] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0175] 本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
QQ群二维码
意见反馈