一种面向大规模物联网场景的链网分割重组方法及系统

文档序号:28500459发布日期:2022-01-15 04:48阅读:48来源:国知局
一种面向大规模物联网场景的链网分割重组方法及系统

1.本发明涉及物联网以及区块链领域,具体涉及一种面向大规模物联网场景的链网分割重组方法及系统。


背景技术:

2.区块链技术最早诞生于08年中本聪的《比特币:一种点对点电子现金支付系统》一文中,该技术提供了解决分布式系统一致性问题的新的技术思想。这个新的技术思想核心是基于分布式系统的共识机制,即指在点对点网络中,缺乏信任的节点(即具备一定计算能力和存储能力的设备)之间通过遵循预设的机制(通常这种使得数据最终达成一致的预设机制被称为共识算法)最终达成数据的一致性。用户的支付行为通过交易完成,交易经过验证之后被记录在区块中(一个区块即一个可存储多条交易的数据结构),区块按照一定顺序(例如时间戳)连成的数据组织结构根据其结构特点可以分为链式和图式两种结构(规定第一个区块叫做创世块)。其特有的数据结构和共识机制使得区块链具有去中心化、防篡改、可溯源等性质,也间接保证了数据的公开透明性。
3.物联网是在传统互联网的基础上,将其用户端延伸扩展到任何物品与物品之间,进行信息交换和通信的一种网络概念。物联网突破了之前互联网的连接模式,使得不同种类不同型号的设备利用无线通信模块和标准通信协议,形成自组织网络,实现信息的共享和融合,从而在各行各业中创造出自动化程度更高、功能更强大、对环境适应性更好的应用系统。物联网的发展促进了大规模人机协作实现的可能,目前蓬勃发展的机器人技术、无人机技术以及人体可佩戴的智能终端都是大规模人机协作的基础。区块链凭借着主体对等、公开透明、安全通信、难以篡改以及多方共识等特性,对物联网产生重要影响:多中心、弱中心化的特质将降低中心化架构的高额运维成本,信息加密、安全通信的特质将有助于保护隐私,身份权限管理和多方共识有助于识别非法节点,及时阻止恶意节点的接入和作恶,依托链式的结构有助于构建可证可溯的电子证据存证,分布式架构和主体对等的特点有助于打破物联网现存的多个信息孤岛桎梏,促进信息的横向流动和多方协作。将区块链技术应用于物联网面临的主要问题包括:1)节点的失效,节点之间网络通信受到干扰甚至阻断都会使得协作的群体分割成不同的群体。2)不同的群体或者无法同时承认不同群体生成的区块链组织结构,或者无法继续使用原有的共识算法,使得网络通信受到干扰的时间段内,整个系统处于一种紊乱状态,需要等到网络恢复之后,才能恢复系统状态;也就导致了网络受挫时的性能损失。在这种环境下,如何使得大规模人机保持协作,是一个丞待解决的问题。
4.现有的区块链系统中,面对物联网常见的网络分区问题,常常采用的方法是节点离线不参与共识,或者是节点共识后产生的区块以及区块链等到网络恢复后再进行验证,而再验证的时候可能因为不被系统接受而进行回滚,也就是说这些区块很可能在网络恢复、验证环节失败从而失效,失效区块内的交易信息需要重新打包重新进行共识。这使得网络分区后系统性能(主要指区块产生的速度)受到一定影响;甚至当网络不可靠或者大规模物联网终端节点离线后,离线节点超出了共识算法所能容忍的最大出错节点数,导致共识
算法失效,无法产生有效区块,使得系统无法完成正常的功能。此外,现行的共识算法,均不支持主动链网分割。当节点面对不同的应用场景时,也不能主动选择不同的共识算法。也就是说,目前没有一个适用于多任务环境、支持多共识算法的区块链系统。
5.因此,如何能够将区块链技术应用于物联网,且有效应对链网的动态分割和合并,是目前物联网系统领域技术人员面临的一个技术难题。


技术实现要素:

6.本发明要解决的技术问题:针对现有技术的上述问题,提供一种面向大规模物联网场景的链网分割重组方法及系统,本发明能在出现网络分区时,保证基于区块链的物联网人机协作系统继续达成共识产生区块,并能在网络恢复后将分区时产生的区块进行融合,既使得分区或融合及时迅速,又保证数据的可溯源性和不可篡改性;既支持多种共识算法,又支持不同区块链结构共存的区块链组织架构。
7.为了解决上述技术问题,本发明采用的技术方案为:
8.一种面向大规模物联网场景的链网分割重组方法,包括:
9.1)共识主体与物联网中其他的共识主体进行通信生成初始的共识组;
10.2)共识主体监控是否收到引导重组指令或者引导分割指令,若收到引导重组指令则跳转至步骤3);若收到引导分割指令则跳转至步骤4);否则跳转至步骤5);
11.3)区块链共识系统内所有共识主体确定共识组控制的指令为引导重组指令,并针对引导重组指令所涉及的共识主体进行重组操作,将引导重组指令所涉及的共识主体重组为新的共识组;跳转至步骤8);
12.4)区块链共识系统内所有共识主体确定共识组控制的指令为引导分割指令,并基于引导分割指令针对当前共识组进行分割操作,将共识组分割为多个子共识组;跳转至步骤8);
13.5)共识主体对当前的共识组成员进行网络检测,若网络需要进行分割操作,跳转执行步骤6);若网络需要进行重组操作,跳转执行步骤7);否则跳转执行步骤8);
14.6)区块链共识系统内所有共识主体确定共识组控制的指令为被动重组指令,并针对分割得到的各个子共识组进行重组操作,将各个子共识组重组为共识组;跳转至步骤8);
15.7)区块链共识系统内所有共识主体确定共识组控制的指令为被动分割指令,并针对当前共识组进行分割操作,将共识组分割为多个子共识组;跳转至步骤8);
16.8)区块链共识系统内所有共识主体并行对历史状态打结;
17.9)区块链共识系统内的共识主体分别为所属的当前共识组确定共识算法;
18.10)区块链共识系统内所有共识主体并行进行共识,本轮次共识轮次完成,跳转执行步骤2)。
19.可选地,步骤3)中针对引导重组指令所涉及的共识主体进行重组操作时,区块链共识系统内的任意共识主体g进行重组操作的步骤包括:
20.3.1)检测引导重组指令中的重组后共识组成员列表是否与历史共识组信息中的末次共识组成员列表一致,如果一致,则跳转至步骤3.2);如果不一致,则跳转至步骤5);
21.3.2)检测引导重组指令中的重组前所有子共识组成员列表,是否包含当前共识组,如果包含,则跳转至步骤3.3);如果不包含,则跳转至步骤5);
22.3.3)将引导重组指令广播给所有重组后的共识组成员;
23.3.4)所有重组后的共识组成员收到引导重组指令;
24.3.5)所有重组后的共识组成员将当前共识组信息更新为向历史共识组信息中获取的末次共识组信息;
25.3.6)所有重组后的共识组成员确定共识组控制的指令为引导重组指令,跳转执行步骤8)。
26.可选地,步骤4)中于引导分割指令针对当前共识组进行分割操作时,区块链共识系统内的任意共识主体g进行分割操作的步骤包括:
27.4.1)检测引导分割指令中的分割前共识组成员列表是否与当前共识组成员列表一致,如果一致,如果一致,则跳转至步骤4.2);如果不一致,则跳转至步骤5);
28.4.2)将引导分割指令广播给所有当前共识组成员;
29.4.3)所有当前共识组成员收到引导分割指令;
30.4.4)所有当前共识组成员将当前共识组信息存入历史共识组信息;
31.4.5)所有当前共识组成员将引导分割指令中分割后的所有子共识组成员列表中的包含所属共识主体的子共识组成员列表存为当前共识组信息的成员列表,将当前共识组信息的共识轮次n置为0,将分组标志置为主动分组标志;
32.4.6)所有当前共识组成员确定共识组控制的指令为引导分割指令,跳转执行步骤8)。
33.可选地,步骤6)中针对分割得到的各个子共识组进行重组操作时,区块链共识系统内的任意共识主体g进行重组操作的步骤包括:
34.6.1)共识主体g将收到的重组检测的所有回复信息整合为重组信息,所述重组信息包括重组信息标志、当前共识主体标识号、共识轮次n、重组后的共识组成员列表以及所有收到的重组检测回复信息集合,将重组信息广播给末次共识组成员列表中的所有共识组成员;
35.6.2)共识主体g收到其他节共识节点发出的重组信息后,检查重组信息是否有效,若有效则向末次共识组成员列表中所有其他成员转发重组信息,且第n轮次对每个节点发出的重组信息仅转发一次;
36.6.3)共识主体g将当前共识组信息更新为从历史共识组信息中取出的末次共识组信息;
37.6.4)共识主体g将收到的所有重组检测信息的回复中的共识组成员列表合并为重组前所有子共识组成员列表,以末次共识组成员列表为重组后的共识组成员列表,和重组标志位组合在一起,生成被动重组指令,所述被动重组指令中包括被动重组标志、重组前所有子共识组成员列表以及重组后的共识组成员列表;
38.6.5)共识主体g确定共识组控制的指令为被动重组指令,跳转执行步骤8)。
39.可选地,步骤7)中针对当前共识组进行分割操作时,区块链共识系统内的任意共识主体g进行分割操操作的步骤包括:
40.7.1)将收到的回复广播检测信息以及回复的节点名单统计为一个列表,得到初步共识组成员列表,该初步共识组成员列表上含名单上所有成员签名的回复信息,广播初步分割信息给共识组成员列表的所有成员,所述初步分割信息包括初步分割信息标志、共识
主体g的标识号、共识轮次、共识组成员列表、初步共识组成员列表以及所有成员的签名回复信息;
41.7.2)在第n轮次第一次收到其他共识组控制子模块发送的初步分割信息后,首先检测其有效性,有效性检测通过则将收到的初步共识组成员列表与本地保存的初步共识组成员列表的并集作为新的初步共识组成员列表信息,将生成新的初步分割信息并广播给所有共识组成员;若第n轮次收到的名单信息是当前初步共识组成员列表的子集,则不转发回复操作;
42.7.3)在预设的超时时间t3后,不再更新初步共识组成员名单;若最终的初步共识组成员名单的数量依然不满足当前共识算法所需的最小成员数,则跳转至步骤7.4);否则判定共识组未发生变化,跳转至步骤10);
43.7.4)共识组控制子模块将当前共识组成员名单存入历史共识组成员名单中,存入后当前共识组成员名单变为新的末次共识组成员名单;
44.7.5)将当前共识组成员列表更新为最终的初步共识组成员名单,将共识轮次n重置为0,将分组标志置为被动分组标志;
45.7.6)完成共识组成员名单更新后,生成被动分割指令,所述被动分割指令包含被动分割标志位、分割前共识组成员列表以及分割后所有子共识组成员列表,将当前共识组成员列表作为一个子共识组,将末次共识组成员列表中所有不在当前共识组成员列表中的成员作为另一个子共识组,将两个子共识组作为分割后所有子共识组成员列表,以末次共识组成员列表为分割前共识组成员列表,和分割标志位组合成分割指令;
46.7.7)共识主体g确定共识组控制的指令为被动分割指令,跳转执行步骤8)。
47.可选地,步骤8)中区块链共识系统内所有共识主体并行对历史状态打结时,区块链共识系统内的任意共识主体g对历史状态打结的步骤包括:
48.8.1)共识主体g获取最新被确定的区块的hash信息;
49.8.2)若共识主体g进行共识组控制的指令为分割指令,所述分割指令包括引导分割指令和被动分割指令,则跳转至步骤8.3);若共识主体g收到共识组控制的指令为重组指令,所述重组指令包括引导重组指令和被动重组指令,则跳转至步骤8.5);
50.8.3)共识主体g将获取的所有hash信息封装生成第一区块头;
51.8.4)若共识主体g进行共识组控制的指令为引导分割指令,且该引导分割指令中包含所有子共识组的共识算法,在引导分割指令中分割后的子共识组成员列表中,选择包含本共识主体的子共识组成员列表以及相应的共识算法,与封装生成的第一区块头合并生成共识组发生变化的信息,跳转至步骤10);若共识主体g进行共识组控制的指令为被动分割指令或不含指定共识算法的引导分割指令,从该指令中分割后的子共识组成员列表中,选择包含共识主体g的子共识组成员列表,与封装生成的第一区块头以及对应的分标志位合并,跳转至步骤9);
52.8.5)共识主体g向所有重组前的共识组成员获取每个共识组所生成的区块图链组织结构中最新被确认的区块信息的hash集合;
53.8.6)共识主体g将获取的所有hash集合封装生成第二区块头;
54.8.7)共识主体g将重组标志位、收到的重组指令中重组后的共识成员列表以及封装生成的第二区块头合并,跳转至步骤9)。
55.可选地,步骤9)中共识主体分别为所属的当前共识组确定共识算法时,区块链共识系统内的任意共识主体g进行确定共识算法的步骤包括:
56.9.1)共识主体g接收来自共识主体g的历史状态打结信息,所述历史状态打结信息包括标志位、共识组成员列表和区块头信息;若标志位为分割标志,则跳转至步骤9.2);若标志位为重组标志,则跳转至步骤9.8);
57.9.2)共识主体g发送共识算法征求信息,所述共识算法征求信息包括共识算法征求信息标志、共识主体标识号、共识组成员名单以及支持的共识算法列表,将共识算法所属共识主体g支持的共识算法广播给所有当前共识组成员,等待来自其他节点共识算法征求信息;
58.9.3)共识主体g收到来自其他节点共识主体的有效共识算法征求信息后,选取共识算法列表的交集并签名生成回复信息,所述回复信息包括共识算法征求回复标志、共识主体标识号、共识组成员名单以及支持的共识算法合集列表,将回复信息回复给发出的共识主体,并将收到的共识算法征求信息转发给当前共识组的其他成员,记录已回复的成员名单;若在预设的超时时间t4内再次收到同一共识主体的共识算法列表则不再进行操作;
59.9.4)共识主体g在预设的超时时间t5内,将收到的所有共识算法集合取交集,按优先级选取一个共识算法;
60.9.5)共识主体g广播共识算法选择消息,所述共识算法选择消息包括共识算法选择信息标志、共识主体标识号、选取的共识算法以及其收到的所有带签名的回复信息以及序号m,序号m初始为0,若收到其他节点的有效广播信息中选取的共识算法以及收到的所有带签名的回复信息和本节点的广播的共识算法选择消息中不一致,则重新生成广播信息,并将其中的序号m加一重新广播;
61.9.6)共识主体g收到来自其他节点共识主体的共识算法选择信息后,记录收到该节点的序号m的共识算法选择信息,若收到其他节点的有效广播信息和本节点的不一致,则重新生成广播信息,更新选取的共识算法,将其中的序号m加一,重新广播;若一致,则不进行操作;若在预设的超时时间t5内再次收到同一共识主体的相同或较小序号的共识算法列表,则不再进行操作;
62.9.7)共识主体g的算法控制模块在预设的超时时间t5后,不再更新选取的共识算法,将选取的共识算法以及来自共识主体g的历史状态打结的信息中的共识成员列表和区块头,生成共识组发生变化的信息,跳转至步骤10);
63.9.8)共识主体g从历史共识算法中取出末次共识算法,将该末次共识算法以及来自历史状态打结信息中的共识成员列表和区块头,生成共识组发生变化的信息,跳转至步骤10)。
64.可选地,步骤10)中区块链共识系统内所有共识主体并行进行共识时,区块链共识系统内的任意共识主体g进行共识的步骤包括:
65.10.1)共识主体g持续监听是否有来自用户的交易请求信息,若有来自用户的交易请求信息,则跳转至下一步;
66.10.2)共识主体g对接收到的交易请求信息的合法性进行验证,包括校验用户的合法性以及用户和交易信息主体是否对应,并将合法的交易请求存储至本地并标记为未使用,将不合法的交易信息直接丢弃;
67.10.3)共识主体g判断共识组是否发生变化,若共识组未发生变化,则跳转至步骤10.7);否则若共识组发生变化,跳转至下一步;
68.10.4)共识主体g根据共识组成员列表以及共识算法更新当前的共识算法,并对共识变化信息中的区块头信息进行共识,生成当前共识算法的创世区块;
69.10.5)共识主体g将生成的创世区块进行区块确认;
70.10.6)共识主体g在确认创世区块后,对之前所有已经生成、但未被确认的区块进行回退操作,跳转至步骤10.14);
71.10.7)共识主体g获取本地存储的未使用的交易数据并标记为待确认;
72.10.8)共识主体g的区块生成子模块与共识主体g所属当前共识组其他共识主体按照指定共识算法进行共识,将交易信息打包生成区块;
73.10.9)共识主体g获取生成但未被确认的区块;
74.10.10)共识主体g对所有已经生成但未被确认的区块,按照当前共识算法,进行区块确认,若为区块确认结果为确认操作,则跳转至步骤10.11);若为回退操作则跳转至步骤10.14);若无需操作或暂时无法确认/回退操作,则完成当前轮次共识,跳转至步骤2);
75.10.11)共识主体g按照所属当前共识组使用的共识算法,将相应的区块按照指定的共识算法存储到对应的区块图链组织结构中;
76.10.12)共识主体g获取被确认的区块中包含的交易信息编号;
77.10.13)共识主体g将获取的交易信息编号对应的交易信息删除,完成当前轮次共识,跳转至步骤2);
78.10.14)共识主体g将相应的区块和其后续的所有区块遗弃,并确定这些被遗弃的区块中包含的交易信息编号;
79.10.15)共识主体g将与这些被遗弃的区块中包含的交易信息编号相应的交易信息标志位置为未使用,完成当前轮次共识,跳转至步骤2)。
80.此外,本发明还提供一种面向大规模物联网场景的链网分割重组系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行所述面向大规模物联网场景的链网分割重组方法的步骤。
81.此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行所述面向大规模物联网场景的链网分割重组方法的计算机程序。
82.和现有技术相比,本发明具有下述优点:本发明方法包括共识主体首先基于引导指令执行主动重组或分割,以及进行网络检测,基于网络动态变化情况来选择执行被动分割操作、被动重组操作或者保持原有网络结构不变;最终所有共识主体并行对历史状态打结、分别为所属的当前共识组确定共识算法并进行并行进行共识,最终完成一个轮次的共识。本发明在原有区块链共识系统的基础上,增加对网络状态进行检测、对成员节点动态变化进行监管以及及时相应的功能模块:在出现网络分割时,将子网络中的共识主体重新分组,保证区块链共识系统能继续响应请求生成区块结构;当网络恢复时,不同的子网络之间的共识组彼此记录所有共识组在网络分割过程中所产生的区块结构,并相互承认其合法性。物联网节点可根据实际情况,将共识主体分割成不同的共识组,共识组内所有共识主体并发进行共识,使得各个共识组可以同时产生区块进行交易打包,即同一时间内区块并发打包。共识组可根据实际需求,定制最适合的链式或图式组织结构及相应的共识算法。本发
明能在出现网络分区时,保证基于区块链的物联网人机协作系统继续达成共识产生区块,并能在网络恢复后将分区时产生的区块进行融合,既使得分区或融合及时迅速,又保证数据的可溯源性和不可篡改性;既支持多种共识算法,又支持不同区块链结构共存的区块链组织架构。
附图说明
83.图1为本发明实施例方法的基本流程示意图。
84.图2为本发明实施例中共识主体的逻辑结构示意图。
85.图3为本发明实施例中步骤5)的详细流程图。
86.图4为本发明实施例中步骤5)~步骤7)中涉及的共识组控制子模块的监听流程。
87.图5为本发明实施例中步骤8)的详细流程图。
88.图6为本发明实施例中步骤10)的详细流程图。
具体实施方式
89.如图1所示,本实施例面向大规模物联网场景的链网分割重组方法包括:
90.1)共识主体与物联网中其他的共识主体进行通信生成初始的共识组;
91.2)共识主体监控是否收到引导重组指令或者引导分割指令,若收到引导重组指令则跳转至步骤3);若收到引导分割指令则跳转至步骤4);否则跳转至步骤5);
92.3)区块链共识系统内所有共识主体确定共识组控制的指令为引导重组指令,并针对引导重组指令所涉及的共识主体进行重组操作,将引导重组指令所涉及的共识主体重组为新的共识组;跳转至步骤8);
93.4)区块链共识系统内所有共识主体确定共识组控制的指令为引导分割指令,并基于引导分割指令针对当前共识组进行分割操作,将共识组分割为多个子共识组;跳转至步骤8);
94.5)共识主体对当前的共识组成员进行网络检测,若网络需要进行分割操作,跳转执行步骤6);若网络需要进行重组操作,跳转执行步骤7);否则跳转执行步骤8);
95.6)区块链共识系统内所有共识主体确定共识组控制的指令为被动重组指令,并针对分割得到的各个子共识组进行重组操作,将各个子共识组重组为共识组;跳转至步骤8);
96.7)区块链共识系统内所有共识主体确定共识组控制的指令为被动分割指令,并针对当前共识组进行分割操作,将共识组分割为多个子共识组;跳转至步骤8);
97.8)区块链共识系统内所有共识主体并行对历史状态打结;
98.9)区块链共识系统内的共识主体分别为所属的当前共识组确定共识算法;
99.10)区块链共识系统内所有共识主体并行进行共识,本轮次共识轮次完成,跳转执行步骤2)。
100.其中,共识主体即每个参与共识的成员节点。成员节点是可以运行软件程序的物联网硬件设备,如无人车、无人机、智能穿戴设备等。成员节点通过网络互联。节点之间可以通信,所有通信信息均签名后发送。
101.参见图2,本实施例中每个成员节点除了装有操作系统之外,还装有网络检测模块、历史状态打结模块、算法控制模块以及共识模块。
102.网络检测模块由共识组控制子模块和引导指令响应子模块组成,接收来自用户的引导指令以及来自其他共识主体的共识组控制子模块的检测信息,当共识组信息更新时,将更新的共识组信息传递给历史状态打结模块;否则将“无变化信息”传递给共识模块。共识组信息包含共识组成员列表(包含一个共识组的所有共识主体的编号、公钥)、共识轮次n以及分组标志(若根据引导指令进行分组,则为主动分组标志;若不是根据引导指令进行分组,则为被动分组标志),n为正整数且初始为0。
103.本实施例中,共识组为一组共识主体,按照约定的共识算法进行区块的生成。不同的共识算法有不同的最低成员数量的要求。共识组控制子模块中存储的共识组信息包括当前共识组信息和历史共识组信息,当前共识组信息指共识主体正在进行共识使用的共识组信息,历史共识组信息指从共识主体加入区块链共识系统以来,经历的所有分割(包括主动分割和被动分割)之前的共识信息,当共识主体经历合组时,将从历史共识组信息中取出对应的分割的共识组信息;在共识主体未加入系统、成为某共识组成员之前,其历史共识组信息为空集;若多个共识主体的历史共识组信息相同,则可进行重组操作,合并为一个共识组。当前共识组信息在与其他共识主体的网络检测模块通信后生成。共识组创建之初,共识组轮次为0。
104.引导指令响应子模块与所属共识主体的共识组控制子模块相连,负责从用户接收到引导指令,将经过校验的引导指令传递给共识组控制子模块,使得共识组控制子模块可以按照引导指令进行共识组的主动分割或重组。
105.引导指令指由有权限的用户或者节点发出的、引导共识组进行分割或者重组的指令,引导指令分为引导分割指令以及引导重组指令,引导分割指令将当前共识组进行强制分割,引导重组指令将多个共识组合为一个共识组。引导分割指令必须包含引导分割标志位(表示该指令为引导分割指令)、分割前共识组成员列表、分割后所有子共识组成员列表,可以附加指定所有子共识组的共识算法名单;引导重组指令包含引导重组标志位(表示该指令为引导重组指令)、参与重组的所有子共识组成员列表以及重组后共识组成员列表,由于重组将按照分割前的共识算法继续生成链式区块链结构或图式区块链结构(统称为区块图链组织结构),故而引导重组指令不附加重组后的共识算法。当引导指令响应子模块接收到引导指令后,将校验引导指令,校验通过后将引导指令广播转发并按照引导指令更新共识组信息,随后将引导指令发送给所属共识主体的历史状态打结模块。
106.共识组控制子模块与所属共识主体的引导指令响应子模块、共识模块、历史状态打结模块、其他共识主体的共识组控制子模块相连。共识组控制子模块主要功能为生成、存储和更新共识组信息。共识组控制子模块接收来自引导指令响应子模块传递的引导指令,或者通过与其他共识主体的共识组控制子模块互相发送检测指令来管理共识组信息;向算法控制模块发送最低成员数请求获取当前成员节点使用的算法所需的最低成员数量;若共识组信息中共识组成员列表发生变化,则将收到的引导指令或者生成的分割指令、重组指令传入历史状态打结模块;若无变化,则将“无变化信息”传入共识模块。
107.共识组控制子模块负责检测当前共识组信息中共识组成员的连通性。在第一次共识之前,和其他共识主体的共识组控制子模块进行通信(即互相群发检测信息),生成初始的共识组信息。而后和其他共识主体的共识组控制子模块通信,通过接收到的检测信息发现网络出现分割时,也就是共识组成员列表上部分成员无法进行通信时,根据失去通信的
共识组成员数量决定是否对当前共识组进行分组处理。若当前的共识组并非通过引导指令进行分割,共识组控制子模块将检测末次共识组(即历史共识组信息中,最后一组共识组信息,也就是以当前共识组为子共识组而进行分组的、分组前的共识组)内成员的连通性,当发现末次共识组在线成员高于共识所需的最小成员数,且能连通所有子共识组时(所有成员所在的共识组成员的合集和末次共识组相同),对所有子共识组进行重组处理。当需要进行分割或重组操作时(产生上述情况时),共识组控制子模块与其他相连的共识主体的共识组控制子模块广播通信,将当前的共识组信息计入历史共识组信息并生成最当前共识组信息,将分割或重组操作仿照引导指令的格式,生成被动分割或重组指令并发送给历史状态打结模块,其中被动分割指令包含被动分割标志位、分割前共识组成员列表、分割后所有子共识组成员列表;重组引导指令包含被动重组标志位(表示该指令为被动重组指令)、重组前所有子共识组成员列表以及重组后的共识组成员列表;当不需要进行分割或重组操作时(即不满足前述情况时),共识组控制子模块将“无变化信息”传入共识模块,使得共识模块可以按当前共识组继续进行共识。
108.共识组控制子模块预设超时时间t1、t2、t3,对应和其他共识主体的共识组控制子模块的通信超时时间。其中t1为等待检测信息的回复信息的超时时间,t2为等待重组检测信息的回复信息的超时时间,t3为等待初步共识组成员列表信息的超时时间。
109.历史状态打结模块与共识组控制子模块、算法控制模块、共识模块以及其他共识主体的历史状态打结模块相连,从所属共识主体的共识组控制子模块接收引导指令、分割指令或重组指令,得到当前分割或重组标志位、当前共识组成员列表以及分割前的共识组成员列表或重组前的所有子共识组成员列表,负责将分割或重组前的共识组的历史状态固定下来,产生包含这些历史状态信息的区块头。当历史状态打结模块接收到的指令为引导分割指令且该引导分割指令包含指定共识算法时,历史状态打结模块将共识组成员列表、共识算法以及区块头发送给共识模块;当历史状态打结模块接收到的指令为重组指令、被动分割指令或者是不包含指定共识算法的引导分割指令时,历史状态打结模块将分割或重组标志位、共识组成员列表以及区块头发送给算法控制模块。
110.历史状态打结模块固定历史状态时,从所属共识主体的共识模块接收分割或重组前的当前共识主体所在的共识组的区块图链组织结构中的最新被确认的区块信息。若从所属共识主体的共识组控制子模块接收的指令为重组指令,历史状态打结模块同时需要与重组前的其他子共识组中的共识节点的历史状态打结模块通信,获取其他子共识组的区块图链组织结构中最新的区块信息。历史状态打结模块将分割前的共识组的区块图链组织结构中最新的区块或者重组前所有子共识组产生的所有区块图链组织结构的最新区块信息打包并生成一个区块头,该区块头将被包含在分割或者重组后的第一个区块信息中,使得通过该区块可以追溯分割前的共识组或者重组前的所有子共识组的区块图链组织结构。
111.若历史状态打结模块接收到的指令为包含共识算法的引导分割指令,则由于共识算法已经被确定,历史状态打结模块直接将当前共识组成员列表、共识算法以及区块头信息发送给共识模块;若历史状态打结模块接受到的指令为重组指令、被动分割指令或者是不包含指定共识算法的引导分割指令,历史状态打结模块将当前共识组成员列表以及区块头信息发送给算法控制模块。
112.算法控制模块与所属共识主体的历史状态打结模块、共识模块以及其他共识主体
的算法控制模块相连,负责选定共识组所使用的共识算法。算法控制模块存储有区块链共识系统所有支持的算法以及相应的优先级,并保存所属共识主体支持的共识算法列表。算法控制模块从历史状态打结模块接收当前共识组成员列表以及区块头信息,与共识组成员列表上的共识主体的算法控制模块相互通信,在所有共识主体都支持的共识算法集合中,按照优先级选取一个共识算法,作为当前共识组的共识算法,将当前共识组成员列表、选定共识算法以及区块头信息传递给共识模块。算法控制模块预设超时时间t4、t5,t4为转发回复共识列表的等待时间,t5为和其他共识主体的算法控制模块的通信超时时间。
113.共识模块与用户、算法控制模块、历史状态打结模块、网络检测模块以及其他共识主体的共识模块相连,从算法控制模块或者从历史状态打结模块接收当前共识组成员列表、选定共识算法以及区块头信息,从网络检测模块的共识组控制子模块接收无变化信息,从用户接收交易请求信息。共识模块由请求处理子模块、本地缓冲子模块、区块生成子模块、区块确认子模块组成。请求处理子模块负责从用户接收交易请求信息(包含交易信息),对接收到的交易请求信息的合法性进行验证,将合法的交易请求信息传递给本地缓冲子模块,并将其标记为未使用,将不合法的交易请求信息丢弃;本地缓冲子模块负责将从请求处理子模块接收的交易请求信息保存,本地缓冲子模块将所有未上链的交易请求信息标记从未使用状态置为待确认状态,并发送给区块生成子模块;在收到来自区块确认子模块的确认信息后,将相应的交易请求信息删除;若从区块确认子模块接收到上链失败信息(即区块回退信息),则将相应的交易信息的状态从待确认重置为未使用状态。区块生成子模块从本地缓冲子模块获取所有未使用状态的交易信息(这些信息被获取后,本地缓冲子模块将这些信息的状态置为待确认状态)。负责按照从算法控制模块或者从历史状态打结模块收到的选定的共识算法,参与共识组所有共识主体间的共识,与共识组其他成员的共识模块达成共识后生成区块,将区块发送给区块确认子模块;区块确认子模块从区块生成子模块接收区块,并根据共识算法要求(不同的共识算法的确认要求不一致,如pbft算法,区块生成则视为确认;pow算法,需要等待区块形成一定长度后方能确认;hashgraph算法则需要经过虚拟投票后确认)对区块进行确认,若产生回退区块,则将对应的区块以及其后续所有以该上链失败的区块为祖先的区块(若区块a能追溯到区块b,则区块b为区块a的祖先区块)丢弃,将上链失败的信息传递给本地缓冲子模块,若区块完成确认则将相应的区块按照共识算法要求存储到区块链组织结构中。区块生成子模块从历史状态打结模块或者算法控制模块接收到区块头信息时,生成第一个区块的区块头,第一个区块的区块头包含收到的区块头信息,使得新的共识组以及共识算法产生的区块图链组织结构能追溯到分割或重组之前的区块图链组织结构中去。
114.步骤3)中针对引导重组指令所涉及的共识主体进行重组操作时,区块链共识系统内的任意共识主体g进行重组操作的步骤包括:
115.3.1)检测引导重组指令中的重组后共识组成员列表是否与历史共识组信息中的末次共识组成员列表一致,如果一致,则跳转至步骤3.2);如果不一致,则跳转至步骤5);
116.3.2)检测引导重组指令中的重组前所有子共识组成员列表,是否包含当前共识组,如果包含,则跳转至步骤3.3);如果不包含,则跳转至步骤5);
117.3.3)将引导重组指令广播给所有重组后的共识组成员;
118.3.4)所有重组后的共识组成员收到引导重组指令;
119.3.5)所有重组后的共识组成员将当前共识组信息更新为向历史共识组信息中获取的末次共识组信息;
120.3.6)所有重组后的共识组成员确定共识组控制的指令为引导重组指令,跳转执行步骤8)。
121.结合图2中共识主体g的模块结构,区块链共识系统内的任意共识主体g进行重组操作的步骤包括:3.1)引导指令响应子模块检测引导重组指令中的重组后共识组成员列表是否与历史共识组信息中的末次共识组成员列表一致,如果一致,则跳转至步骤3.2);如果不一致,则跳转至步骤5)。3.2)引导指令响应子模块检测引导重组指令中的重组前所有子共识组成员列表,是否包含当前共识组,如果包含,则跳转至步骤3.3);如果不包含,则跳转至步骤5)。3.3)引导指令响应子模块将引导重组指令广播给所有重组后的共识组成员的引导指令响应子模块。3.4)所有重组后的共识组成员的引导指令响应子模块将引导重组指令发送给所属共识主体的共识组控制子模块。3.5)所有重组后的共识组成员的共识组控制子模块将当前共识组信息更新为向历史共识组信息中获取的末次共识组信息。3.6)所有重组后的共识组成员的共识组控制子模块将引导重组指令发送给所属共识主体的历史状态打结模块,跳转执行步骤8)。
122.步骤4)中于引导分割指令针对当前共识组进行分割操作时,区块链共识系统内的任意共识主体g进行分割操作的步骤包括:
123.4.1)检测引导分割指令中的分割前共识组成员列表是否与当前共识组成员列表一致,如果一致,如果一致,则跳转至步骤4.2);如果不一致,则跳转至步骤5);
124.4.2)将引导分割指令广播给所有当前共识组成员;
125.4.3)所有当前共识组成员收到引导分割指令;
126.4.4)所有当前共识组成员将当前共识组信息存入历史共识组信息;
127.4.5)所有当前共识组成员将引导分割指令中分割后的所有子共识组成员列表中的包含所属共识主体的子共识组成员列表存为当前共识组信息的成员列表,将当前共识组信息的共识轮次n置为0,将分组标志置为主动分组标志;
128.4.6)所有当前共识组成员确定共识组控制的指令为引导分割指令,跳转执行步骤8)。
129.结合图2中共识主体g的模块结构,区块链共识系统内的任意共识主体g进行分割操作的步骤包括:4.1)引导指令响应子模块检测引导分割指令中的分割前共识组成员列表是否与当前共识组成员列表一致,如果一致,则跳转至步骤4.2);如果不一致,则跳转至步骤5);4.2)引导指令响应子模块将引导分割指令广播给所有当前共识组成员的引导指令响应子模块。4.3)所有当前共识组成员的引导指令响应子模块将引导分割指令发送给所属共识主体的共识组控制子模块。4.4)所有当前共识组成员的共识组控制子模块将当前共识组信息存入历史共识组信息。4.5)所有当前共识组成员的共识组控制子模块将引导分割指令中分割后的所有子共识组成员列表中的包含所属共识主体的子共识组成员列表存为当前共识组信息的成员列表,将当前共识组信息的共识轮次n置为0,将分组标志置为主动分组标志。4.6)所有当前共识组成员的共识组控制子模块将引导分割指令发送给所属共识主体的历史状态打结模块,跳转执行步骤8)。
130.步骤5)中区块链共识系统内所有共识主体的共识组控制子模块检测网络状态,每
个共识组控制子模块的检测方法相同。参见图3和图4,以任意共识主体g的共识组控制子模块为例,步骤5)中共识主体对当前的共识组成员进行网络检测的步骤包括:
131.5.1)若本共识主体(共识主体g)不处于离线状态,则当前共识组信息中共识轮次n=n+1。
132.5.2)若当前共识组信息中共识轮次n为1,则向算法控制模块获取当前使用的共识算法以及末次使用的共识算法的最低成员数;
133.5.3)将检测信息(包括检测信息标志、当前共识主体标识号、当前共识组列表、共识轮次n)广播给当前共识组所有成员;
134.5.4)在第一次收到来自其他共识主体的第n轮次的检测信息并验证签名、共识组列表是否一致、是否是当前轮次后,将检测信息转发给共识组其他成员;生成回复信息(检测信息回复标志,当前共识主体标识号,共识轮次n)并将回复信息回复给发出检测信息的共识主体的共识组控制子模块;记录第n轮次已经收到并回复过的共识主体的名单。若已经在第n轮次回复过共识主体,则不作转发以及回复操作(以防止不必要的重传);
135.5.5)在超时时间t1内统计收到的回复信息;若回复的共识主体数不足预设阈值(本实施例中取值为4),则将共识主体g的状态置于离线状态,并本轮次结束,跳转至步骤2);若回复的共识主体数不少于预设阈值4,且共识主体g处于离线状态,则将当前共识主体的离线状态去除;若回复的共识主体数不满足当前共识算法所需的最小节点数,则跳转至步骤7);若回复的共识主体数不少于当前共识算法所需的最小共识主体数,则跳转至步骤5.6)。
136.5.6)若当前共识组信息中,分组标志为主动分组,则判定共识组未发生变化,跳转至步骤10);否则跳转至步骤5.7);
137.5.7)检测末次共识组成员列表上的在线成员数,将重组检测信息(重组检测标志、共识主体g的标识号、当前共识组列表、末次共识组成员列表、共识轮次n)广播给所有末次共识组成员。
138.5.8)在收到重组检测信息后,检查重组检测信息是否有效(是否为同一轮次,当前共识组列表是否一致,末次共识组成员列表是否一致,签名是否有效等)第一次收到来自其他的节点的第n轮次的重组检测信息后,将重组检测信息转发给末次共识组成员名单中其他共识组成员;生成回复信息(重组检测信息回复标志,当前共识主体标识号,共识组成员列表,共识轮次n)并将回复信息回复给发出重组检测信息的共识主体;记录第n轮次已经回复过重组检测信息的节点的名单;若不是第n轮次第一次接收到该重组检测信息,则不作转发以及回复操作。
139.5.9)在超时时间t2内统计收到的回复信息。若回复的节点数满足末次共识算法所需的最小节点数,且收到的所有成员列表的并集与末次共识成员列表一致,跳转至步骤6);否则判定共识组未发生变化,跳转至步骤10)。
140.参见图3和图4,结合图2中共识主体g的模块结构,步骤5)中共识主体对当前的共识组成员进行网络检测的步骤包括:5.1)若共识组控制子模块所属共识主体g不处于离线状态,则共识组控制子模块的当前共识组信息中,共识轮次n=n+1。5.2)若共识组控制子模块中当前共识组信息中共识轮次n为1,则向算法控制模块获取当前使用的共识算法以及末次使用的共识算法的最低成员数。5.3)共识组控制子模块将检测信息(包括检测信息标志、
当前共识主体标识号、当前共识组列表、共识轮次n)广播给当前共识组所有成员的共识组控制子模块。5.4)共识组控制子模块在第一次收到来自其他共识主体的第n轮次的检测信息并验证签名、共识组列表是否一致、是否是当前轮次后,将检测信息转发给共识组其他成员;生成回复信息(检测信息回复标志,当前共识主体标识号,共识轮次n)并将回复信息回复给发出检测信息的共识主体的共识组控制子模块;记录第n轮次已经收到并回复过的共识主体的名单。若已经在第n轮次回复过共识主体,则不作转发以及回复操作(以防止不必要的重传)。5.5)共识组控制子模块在超时时间t1内统计收到的回复信息。若回复的共识主体数不足4,则将共识主体g的状态置于离线状态,并转到第二步;若回复的共识主体数不少于4,且共识主体g处于离线状态,则将当前共识主体的离线状态去除;若回复的共识主体数不满足当前共识算法所需的最小节点数,则跳转至步骤7);若回复的共识主体数不少于当前共识算法所需的最小共识主体数,则转到5.6。5.6)若共识组控制子模块的当前共识组信息中,分组标志为主动分组,则发送“无变化”信息给共识模块,跳转至步骤10),否则转到5.7。5.7)共识组控制子模块检测末次共识组成员列表上的在线成员数,将重组检测信息(重组检测标志、共识主体g的标识号、当前共识组列表、末次共识组成员列表、共识轮次n)广播给所有末次共识组成员。5.8)共识组控制子模块在收到重组检测信息后,检查重组检测信息是否有效(是否为同一轮次,当前共识组列表是否一致,末次共识组成员列表是否一致,签名是否有效等)第一次收到来自其他的节点的第n轮次的重组检测信息后,将重组检测信息转发给末次共识组成员名单中其他共识组成员;生成回复信息(重组检测信息回复标志,当前共识主体标识号,共识组成员列表,共识轮次n)并将回复信息回复给发出重组检测信息的共识主体;记录第n轮次已经回复过重组检测信息的节点的名单;若不是第n轮次第一次接收到该重组检测信息,则不作转发以及回复操作。5.9)共识组控制子模块在超时时间t2内统计收到的回复信息。若回复的节点数满足末次共识算法所需的最小节点数,且收到的所有成员列表的并集与末次共识成员列表一致,转到第六步;否则发送“无变化”信息给共识模块,跳转至步骤10)。
141.步骤6)中区块链共识系统内所有共识主体的共识组控制子模块并行进行被动重组操作,每个共识主体的被动重组操作相同。本实施例步骤6)中针对分割得到的各个子共识组进行重组操作时,区块链共识系统内的任意共识主体g进行重组操作的步骤包括:
142.6.1)共识主体g将收到的重组检测的所有回复信息整合为重组信息,所述重组信息包括重组信息标志、当前共识主体标识号、共识轮次n、重组后的共识组成员列表以及所有收到的重组检测回复信息集合,将重组信息广播给末次共识组成员列表中的所有共识组成员;
143.6.2)共识主体g收到其他节共识节点发出的重组信息后,检查重组信息是否有效,若有效则向末次共识组成员列表中所有其他成员转发重组信息,且第n轮次对每个节点发出的重组信息仅转发一次;
144.6.3)共识主体g将当前共识组信息更新为从历史共识组信息中取出的末次共识组信息;
145.6.4)共识主体g将收到的所有重组检测信息的回复中的共识组成员列表合并为重组前所有子共识组成员列表,以末次共识组成员列表为重组后的共识组成员列表,和重组标志位组合在一起,生成被动重组指令,所述被动重组指令中包括被动重组标志、重组前所
有子共识组成员列表以及重组后的共识组成员列表;
146.6.5)共识主体g确定共识组控制的指令为被动重组指令,跳转执行步骤8)。
147.结合图2中共识主体g的模块结构,步骤6)中区块链共识系统内的任意共识主体g进行重组操作的步骤包括:6.1)共识主体g的共识组控制子模块将收到的重组检测的所有回复信息整合为重组信息(包括重组信息标志,当前共识主体标识号,共识轮次n,重组后的共识组成员列表,所有收到的重组检测回复信息集合),将重组信息广播给末次共识组成员列表中的所有共识组成员。6.2)共识主体g的共识组控制子模块收到其他节共识节点发出的重组信息后,检查重组信息是否有效(检查信息中所有重组检测回复信息集合中签名是否有效,签名节点数是否满足重组最低要求,重组后的共识组成员列表是否和末次共识组成员列表一致等)向末次共识组成员列表中所有其他成员转发重组信息(第n轮次对每个节点发出的重组信息仅转发一次)。6.3)共识主体g的共识组控制子模块将当前共识组信息更新为从历史共识组信息中取出的末次共识组信息。6.4)共识主体g的共识组控制子模块将收到的所有重组检测信息的回复中的共识组成员列表合并为重组前所有子共识组成员列表,以末次共识组成员列表为重组后的共识组成员列表,和重组标志位组合在一起,生成被动重组指令(被动重组标志,重组前所有子共识组成员列表,重组后的共识组成员列表)。6.5)共识主体g的共识组控制子模块将被动重组指令发送给历史状态打结模块,跳转执行步骤8)。
148.步骤7)区块链共识系统内所有共识主体的共识组控制子模块并行进行被动分割操作,每个共识主体的被动分割操作相同。本实施例步骤7)中针对当前共识组进行分割操作时,区块链共识系统内的任意共识主体g进行分割操操作的步骤包括:
149.7.1)将收到的回复广播检测信息以及回复的节点名单统计为一个列表,得到初步共识组成员列表,该初步共识组成员列表上含名单上所有成员签名的回复信息,广播初步分割信息给共识组成员列表的所有成员,所述初步分割信息包括初步分割信息标志、共识主体g的标识号、共识轮次、共识组成员列表、初步共识组成员列表以及所有成员的签名回复信息;
150.7.2)在第n轮次第一次收到其他共识组控制子模块发送的初步分割信息后,首先检测其有效性,有效性检测通过则将收到的初步共识组成员列表与本地保存的初步共识组成员列表的并集作为新的初步共识组成员列表信息,将生成新的初步分割信息并广播给所有共识组成员;若第n轮次收到的名单信息是当前初步共识组成员列表的子集,则不转发回复操作;
151.7.3)在预设的超时时间t3后,不再更新初步共识组成员名单;若最终的初步共识组成员名单的数量依然不满足当前共识算法所需的最小成员数,则跳转至步骤7.4);否则判定共识组未发生变化,跳转至步骤10);
152.7.4)共识组控制子模块将当前共识组成员名单存入历史共识组成员名单中,存入后当前共识组成员名单变为新的末次共识组成员名单;
153.7.5)将当前共识组成员列表更新为最终的初步共识组成员名单,将共识轮次n重置为0,将分组标志置为被动分组标志;
154.7.6)完成共识组成员名单更新后,生成被动分割指令,所述被动分割指令包含被动分割标志位、分割前共识组成员列表以及分割后所有子共识组成员列表,将当前共识组
成员列表作为一个子共识组,将末次共识组成员列表中所有不在当前共识组成员列表中的成员作为另一个子共识组,将两个子共识组作为分割后所有子共识组成员列表,以末次共识组成员列表为分割前共识组成员列表,和分割标志位组合成分割指令;
155.7.7)共识主体g确定共识组控制的指令为被动分割指令,跳转执行步骤8)。
156.参见图4,结合图2中共识主体g的模块结构,步骤7)中区块链共识系统内的任意共识主体g进行分割操操作的步骤包括:7.1)共识组控制子模块将收到的回复广播检测信息以及回复的节点名单统计为一个列表,得到初步共识组成员列表(含名单上所有成员签名的回复信息),广播初步分割信息(包括初步分割信息标志,共识主体g的标识号,共识轮次,共识组成员列表,初步共识组成员列表以及所有成员的签名回复信息)给共识组成员列表的所有成员。7.2)共识组控制子模块在第n轮次第一次收到其他共识组控制子模块发送的初步分割信息后,首先检测其有效性(共识轮次是否匹配,共识组成员列表是否匹配,验证签名信息等),将收到的初步共识组成员列表与本地保存的初步共识组成员列表的并集作为新的初步共识组成员列表信息,将生成新的初步分割信息并广播给所有共识组成员;若第n轮次收到的名单信息是当前初步共识组成员列表的子集,则不转发回复操作。7.3)共识组控制子模块在超时时间t3后,不再更新初步共识组成员名单。若最终的初步共识组成员名单的数量依然不满足当前共识算法所需的最小成员数,则跳转执行步骤7.4);否则发送无变化信息给共识模块,跳转执行步骤10)。7.4)共识组控制子模块将当前共识组成员名单存入历史共识组成员名单中(历史共识组成员名单中,最后的成员名单即末次共识组成员名单,也就是说,存入后当前共识组成员名单变为新的末次共识组成员名单)。7.5)共识组控制子模块将当前共识组成员列表更新为最终的初步共识组成员名单,将共识轮次n重置为0,将分组标志置为被动分组标志。7.6)共识组控制子模块完成共识组成员名单更新后,生成被动分割指令(包含被动分割标志位、分割前共识组成员列表、分割后所有子共识组成员列表),将当前共识组成员列表作为一个子共识组,将末次共识组成员列表中所有不在当前共识组成员列表中的成员作为另一个子共识组,将两个子共识组作为分割后所有子共识组成员列表(第二个共识组并不是真正的分割后的共识组,在此仅作为补充位,不实际使用),以末次共识组成员列表为分割前共识组成员列表,和分割标志位组合成分割指令。7.7)共识组控制子模块将被动分割指令发送给历史状态打结模块,跳转执行步骤8)。
157.如图5所示,本实施例步骤8)中区块链共识系统内所有共识主体并行对历史状态打结时,区块链共识系统内的任意共识主体g对历史状态打结的步骤包括:
158.8.1)共识主体g获取最新被确定的区块的hash信息;
159.8.2)若共识主体g进行共识组控制的指令为分割指令,所述分割指令包括引导分割指令和被动分割指令,则跳转至步骤8.3);若共识主体g收到共识组控制的指令为重组指令,所述重组指令包括引导重组指令和被动重组指令,则跳转至步骤8.5);
160.8.3)共识主体g将获取的所有hash信息封装生成第一区块头;
161.8.4)若共识主体g进行共识组控制的指令为引导分割指令,且该引导分割指令中包含所有子共识组的共识算法,在引导分割指令中分割后的子共识组成员列表中,选择包含本共识主体的子共识组成员列表以及相应的共识算法,与封装生成的第一区块头合并生成共识组发生变化的信息,跳转至步骤10);若共识主体g进行共识组控制的指令为被动分割指令或不含指定共识算法的引导分割指令,从该指令中分割后的子共识组成员列表中,
选择包含共识主体g的子共识组成员列表,与封装生成的第一区块头以及对应的分标志位合并,跳转至步骤9);
162.8.5)共识主体g向所有重组前的共识组成员获取每个共识组所生成的区块图链组织结构中最新被确认的区块信息的hash集合;
163.8.6)共识主体g将获取的所有hash集合封装生成第二区块头;
164.8.7)共识主体g将重组标志位、收到的重组指令中重组后的共识成员列表以及封装生成的第二区块头合并,跳转至步骤9)。
165.参见图5,结合图2中共识主体g的模块结构,步骤8)中区块链共识系统内的任意共识主体g对历史状态打结的步骤包括:8.1)共识主体g的历史状态打结模块从共识主体g的共识模块获取最新被确定的区块的hash信息。8.2)若共识主体g的历史状态打结模块从共识主体g的共识组控制子模块收到的指令为分割指令(包含引导分割指令和被动分割指令),转8.3;若为重组指令(包含引导重组指令和被动重组指令),则转8.5。8.3)共识主体g的历史状态打结模块将获取的所有hash信息封装成区块头。8.4)若共识主体g的历史状态打结模块收到的分割指令为引导分割指令,且该引导分割指令中包含所有子共识组的共识算法,在引导分割指令中分割后的子共识组成员列表中,选择包含本共识主体的子共识组成员列表
166.以及相应的共识算法,与8.3)中生成的区块头合并生成共识变化信息发送给共识主体g的
167.共识模块,跳转至步骤10);若共识主体g的历史状态打结模块收到的分割指令为被动分割指令或不含指定共识算法的引导分割指令,从该指令中分割后的子共识组成员列表中,选择包含共识主体g的子共识组成员列表,与8.3)中生成的区块头以及对应的分标志位合并发送给共识主体g的算法控制模块,跳转至步骤9)。8.5)共识主体g的历史状态打结模块向所有重组前的共识组成员获取每个共识组所生成的区块图链组织结构中最新被确认的区块信息的hash集合。8.6)共识主体g的历史状态打结模块将获取的所有hash集合封装成区块头。8.7)共识主体g的历史状态打结模块将重组标志位、收到的重组指令中重组后的共识成员列表以及8.6中生成的区块头合并发送给共识主体g的算法控制模块,跳转至步骤9)。其中,步骤8.1)中共识主体g的历史状态打结模块从共识主体g的共识模块获取最新被确定的区块的hash信息时,若当前区块图链组织结构为链式结构,则仅获取最末尾的被确定的区块的hash信息;若为图式结构,则获取所有末端的被确定的区块的hash信息。
168.本实施例步骤9)中共识主体分别为所属的当前共识组确定共识算法时,区块链共识系统内的任意共识主体g进行确定共识算法的步骤包括:
169.9.1)共识主体g接收来自共识主体g的历史状态打结信息,所述历史状态打结信息包括标志位、共识组成员列表和区块头信息;若标志位为分割标志,则跳转至步骤9.2);若标志位为重组标志,则跳转至步骤9.8);
170.9.2)共识主体g发送共识算法征求信息,所述共识算法征求信息包括共识算法征求信息标志、共识主体标识号、共识组成员名单以及支持的共识算法列表,将共识算法所属共识主体g支持的共识算法广播给所有当前共识组成员,等待来自其他节点共识算法征求信息;
171.9.3)共识主体g收到来自其他节点共识主体的有效共识算法征求信息后,选取共
识算法列表的交集并签名生成回复信息,所述回复信息包括共识算法征求回复标志、共识主体标识号、共识组成员名单以及支持的共识算法合集列表,将回复信息回复给发出的共识主体,并将收到的共识算法征求信息转发给当前共识组的其他成员,记录已回复的成员名单;若在预设的超时时间t4内再次收到同一共识主体的共识算法列表则不再进行操作;
172.9.4)共识主体g在预设的超时时间t5内,将收到的所有共识算法集合取交集,按优先级选取一个共识算法;
173.9.5)共识主体g广播共识算法选择消息,所述共识算法选择消息包括共识算法选择信息标志、共识主体标识号、选取的共识算法以及其收到的所有带签名的回复信息以及序号m,序号m初始为0,若收到其他节点的有效广播信息中选取的共识算法以及收到的所有带签名的回复信息和本节点的广播的共识算法选择消息中不一致,则重新生成广播信息,并将其中的序号m加一重新广播;
174.9.6)共识主体g收到来自其他节点共识主体的共识算法选择信息后,记录收到该节点的序号m的共识算法选择信息,若收到其他节点的有效广播信息和本节点的不一致,则重新生成广播信息,更新选取的共识算法,将其中的序号m加一,重新广播;若一致,则不进行操作;若在预设的超时时间t5内再次收到同一共识主体的相同或较小序号的共识算法列表,则不再进行操作;
175.9.7)共识主体g的算法控制模块在预设的超时时间t5后,不再更新选取的共识算法,将选取的共识算法以及来自共识主体g的历史状态打结的信息中的共识成员列表和区块头,生成共识组发生变化的信息,跳转至步骤10);
176.9.8)共识主体g从历史共识算法中取出末次共识算法,将该末次共识算法以及来自历史状态打结信息中的共识成员列表和区块头,生成共识组发生变化的信息,跳转至步骤10)。
177.参见图6,结合图2中共识主体g的模块结构,步骤9)中区块链共识系统内的任意共识主体g进行确定共识算法的步骤包括:9.1)共识主体g的算法控制模块接收来自共识主体g的历史状态打结模块的信息(分割或重组标志位、共识组成员列表和区块头信息),若标志位为分割标志,则转9.2;若标志位为重组标志转到步骤9.8);9.2)共识主体g的算法控制模块发送共识算法征求信息(包括共识算法征求信息标志,共识主体标识号,共识组成员名单,支持的共识算法列表),将共识算法所属共识主体g支持的共识算法广播给所有当前共识组成员,等待来自其他节点共识算法征求信息。9.3)共识主体g的算法控制模块收到来自其他节点共识主体的有效共识算法征求信息后,选取共识算法列表的交集并签名生成回复信息(包括共识算法征求回复标志,共识主体标识号,共识组成员名单,支持的共识算法合集列表),将回复信息回复给发出的共识主体,并将收到的共识算法征求信息转发给当前共识组的其他成员,记录已回复的成员名单;若在超时时间t4内再次收到同一共识主体的共识算法列表,不再进行操作。9.4)共识主体g的算法控制模块在超时时间t5内,将收到的所有共识算法集合取交集,按优先级选取一个共识算法。9.5)共识主体g的算法控制模块广播共识算法选择消息(包括共识算法选择信息标志,共识主体标识号,选取的共识算法以及其收到的所有带签名的回复信息,序号m),序号m初始为0,若收到其他节点的有效广播信息中选取的共识算法以及收到的所有带签名的回复信息和本节点的广播的共识算法选择消息中不一致,重新生成广播信息,其中序号加一,重新广播。9.6)共识主体g的算法控制模块收
到来自其他节点共识主体的共识算法选择信息后,记录收到该节点的序号m的共识算法选择信息,若收到其他节点的有效广播信息和本节点的不一致,则重新生成广播信息,更新选取的共识算法,序号加一,重新广播;若一致,则不进行操作;若在超时时间t5内再次收到同一共识主体的相同或较小序号的共识算法列表,不再进行操作。9.7)共识主体g的算法控制模块在超时时间t5后,不再更新选取的共识算法,将选取的共识算法,以及来自共识主体g的历史状态打结的信息中的共识成员列表和区块头,生成共识变化信息发送给共识主体g的共识模块,跳转至步骤10);9.8)共识主体g的算法控制模块从历史共识算法中,取出末次共识算法,将该末次共识算法以及来自历史状态打结信息中的共识成员列表和区块头,生成共识变化信息发给共识主体g的共识模块,跳转至步骤10)。
178.本实施例步骤10)中区块链共识系统内所有共识主体并行进行共识时,区块链共识系统内的任意共识主体g进行共识的步骤包括:
179.10.1)共识主体g持续监听是否有来自用户的交易请求信息,若有来自用户的交易请求信息,则跳转至下一步;
180.10.2)共识主体g对接收到的交易请求信息的合法性进行验证,包括校验用户的合法性以及用户和交易信息主体是否对应,并将合法的交易请求存储至本地并标记为未使用,将不合法的交易信息直接丢弃;
181.10.3)共识主体g判断共识组是否发生变化,若共识组未发生变化,则跳转至步骤10.7);否则若共识组发生变化,跳转至下一步;
182.10.4)共识主体g根据共识组成员列表以及共识算法更新当前的共识算法,并对共识变化信息中的区块头信息进行共识,生成当前共识算法的创世区块;
183.10.5)共识主体g将生成的创世区块进行区块确认;
184.10.6)共识主体g在确认创世区块后,对之前所有已经生成、但未被确认的区块进行回退操作,跳转至步骤10.14);
185.10.7)共识主体g获取本地存储的未使用的交易数据并标记为待确认;
186.10.8)共识主体g的区块生成子模块与共识主体g所属当前共识组其他共识主体按照指定共识算法进行共识,将交易信息打包生成区块;
187.10.9)共识主体g获取生成但未被确认的区块;
188.10.10)共识主体g对所有已经生成但未被确认的区块,按照当前共识算法,进行区块确认,若为区块确认结果为确认操作,则跳转至步骤10.11);若为回退操作则跳转至步骤10.14);若无需操作或暂时无法确认/回退操作,则完成当前轮次共识,跳转至步骤2);
189.10.11)共识主体g按照所属当前共识组使用的共识算法,将相应的区块按照指定的共识算法存储到对应的区块图链组织结构中;
190.10.12)共识主体g获取被确认的区块中包含的交易信息编号;
191.10.13)共识主体g将获取的交易信息编号对应的交易信息删除,完成当前轮次共识,跳转至步骤2);
192.10.14)共识主体g将相应的区块和其后续的所有区块遗弃,并确定这些被遗弃的区块中包含的交易信息编号;
193.10.15)共识主体g将与这些被遗弃的区块中包含的交易信息编号相应的交易信息标志位置为未使用,完成当前轮次共识,跳转至步骤2)。
194.结合图2中共识主体g的模块结构,步骤10)中区块链共识系统内的任意共识主体g进行共识的步骤包括:10.1)共识主体g的请求处理子区块链共识模块持续监听是否有来自用户的交易请求信息。10.2)共识主体g的请求处理子模块对接收到的交易请求信息的合法性进行验证(校验用户的合法性,以及用户和交易信息主体是否对应),将合法的交易请求存储至本地缓冲子模块中,并标记为未使用,将不合法的交易信息直接丢弃。10.3)若接收到来自共识主体g的共识组控制子模块的“无变化”信息,转步骤10.7。10.4)若接受到来自共识主体g的历史状态打结模块或者算法控制模块的共识变化信息,则根据共识组成员列表以及共识算法更新当前共识算法,并对共识变化信息中的区块头信息进行共识,生成当前共识算法的创世区块。10.5)共识主体g的区块生成子模块将生成的区块传入共识主体g的区块确认子模块。10.6)共识主体g的区块确认子模块收到创世区块后,对之前所有已经生成但未被确认的区块,进行回退操作,转步骤10.14。10.7.)共识主体g的区块生成子模块从共识主体g的本地缓冲子模块获取标记为未使用的交易数据,共识主体g的本地缓冲子模块将这些交易数据标记为待确认。10.8)共识主体g的区块生成子模块与共识主体g所属当前共识组其他共识主体按照指定共识算法进行共识,将交易信息打包生成区块。10.9)共识主体g的区块生成子模块将生成的区块传入共识主体g的区块确认子模块。10.10)共识主体g的区块确认子模块对所有已经生成但未被确认的区块,按照当前共识算法,进行区块确认。若为确认操作,则转10.11;若为回退操作则转到10.14;若无需操作或暂时无法确认/回退操作,则完成当前轮次共识,转到步骤2)。10.11)共识主体g的区块确认子模块按照共识主体g所属当前共识组使用的共识算法,将相应的区块,按照指定的共识算法存储到对应的区块图链组织结构中。10.12)共识主体g的区块生成子模块将被确认的区块中包含的交易信息编号传递给共识主体g的本地缓存子模块。10.13)共识主体g的本地缓冲子模块收到来自共识主体g的区块生成子模块的交易信息编号后,将相应编号的交易信息删除。完成当前轮次共识,转到步骤2)。10.14)共识主体g的区块确认子模块将相应的区块和其后续的所有区块遗弃,将这些区块中包含的交易信息编号传递给本地缓存子模块。10.15)共识主体g的本地缓冲子模块收到来自共识主体g的区块生成子模块的交易信息编号后,将与交易信息编号相应的交易信息标志位置为未使用,完成当前轮次共识,转到步骤2)。
195.综上所述,本实施例面向大规模物联网场景的链网分割重组方法具有下述优点:1、本发明特有的节点网络检测,支持大批量物联网终端离线或者网络条件不佳的情况下,继续原先的共识算法可能导致系统无法正常共识生成区块的情况下,剩余在线节点能够组成新的共识组,保证相应并收集数据生成子链,从而提升系统的可靠性。2、针对不同的任务,本发明可产生仅需要局部达成共识的可能(例如无人驾驶汽车在通过路口时,仅需要和路口附近的车辆以及行人达成一个先后行进顺序的共识,而不需要全市的车辆位置信息),本发明通过生成子共识组,可以有效的减少不必要的通信。3、本发明不同共识组同时进行交易处理并行产生区块,提升系统的事务处理能力。4、不同的共识算法有不同的优势和劣势,如pow算法为代表的链式区块链系统需要消耗大量的算力且出块速率低下,dag图式区块链算法通信开销很大导致其不适应大规模共识节点部署情况,本发明方法支持在共识组生成时自主选择共识算法,使得共识组可以根据实际情况选择更加合适的共识算法。5、当共识组已经完成任务,本发明支持合并共识组,将产生的子区块结构附在主区块链组织结构中去,并保证产生的子区块图链组织结构数据不可篡改、支持溯源。
196.此外,本实施例还提供一种面向大规模物联网场景的链网分割重组系统,包括相互连接的微处理器和存储器,该微处理器被编程或配置以执行前述面向大规模物联网场景的链网分割重组方法的步骤。
197.此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行前述面向大规模物联网场景的链网分割重组方法的计算机程序。
198.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
199.以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1