掌桥专利:专业的专利平台
掌桥专利
首页

联盟链归档方法、相关装置和介质

文献发布时间:2024-01-17 01:26:37


联盟链归档方法、相关装置和介质

技术领域

本公开涉及区块链领域,特别是涉及一种联盟链归档方法、相关装置和介质。

背景技术

目前,区块链网络面临数据爆炸的问题。每个共识节点维护大量区块,但并不是每个区块都被经常访问,因此现有技术中设置了归档节点。归档节点维护全量区块。每个共识节点可以确定出一些不太经常访问的区块并删除。一旦需要,则从归档节点恢复。这样,减少了共识节点存储空间的占用。

公链共识网络上有大量归档节点。而联盟链共识网络上共识节点总数少,且有准入限制,没必要维护大量归档节点。联盟链共识网络常常只有少量归档节点,非常“中心化”。一旦少量归档节点都宕机,则无法恢复归档区块。

发明内容

本公开实施例提供了一种联盟链归档方法、相关装置和介质,它能够缓解联盟链共识网络中归档节点中心化造成的影响,提高归档区块恢复的安全性。

根据本公开的一方面,提供了一种联盟链归档方法,所述联盟链归档方法应用于联盟链共识网络的多个共识节点中的目标共识节点,所述联盟链归档方法包括:

在所述目标共识节点维护的区块链上确定待归档的目标区块;

基于所述目标区块,生成第一数目个目标子块,其中,第一数目个所述目标子块包括所述目标区块分成的第二数目个第一子块,所述第一数目大于所述第二数目;

将第一数目个所述目标子块分发到所述联盟链共识网络中的各个所述共识节点归档,并从所述区块链上删除所述目标区块;

响应于获取所述目标区块的恢复请求,向各个所述共识节点请求所述目标子块,如果接收到第二数目个所述目标子块,基于第二数目个所述目标子块恢复第二数目个所述第一子块,从而组合出所述目标区块。

根据本公开的一方面,提供了一种联盟链归档装置,所述联盟链归档装置位于联盟链共识网络的多个共识节点中的目标共识节点,所述联盟链归档装置包括:

第一确定单元,用于在所述目标共识节点维护的区块链上确定待归档的目标区块;

第一生成单元,用于基于所述目标区块,生成第一数目个目标子块,其中,第一数目个所述目标子块包括所述目标区块分成的第二数目个第一子块,所述第一数目大于所述第二数目;

分发单元,用于将第一数目个所述目标子块分发到所述联盟链共识网络中的各个所述共识节点归档,并从所述区块链上删除所述目标区块;

请求单元,用于响应于获取所述目标区块的恢复请求,向各个所述共识节点请求所述目标子块,如果接收到第二数目个所述目标子块,基于第二数目个所述目标子块恢复第二数目个所述第一子块,从而组合出所述目标区块。

可选地,所述第一生成单元具体用于:

将所述目标区块分成第二数目个所述第一子块,以形成第一子块向量;

获取第一权重矩阵,其中,所述第一权重矩阵具有所述第一数目个行和所述第二数目个列,所述第一权重矩阵的前第二数目个行构成单位矩阵;

将所述第一权重矩阵与所述第一子块向量相乘,得到目标子块向量,所述目标子块向量包括第一数目个所述目标子块。

可选地,所述请求单元具体用于:

基于第二数目个所述目标子块,生成第二子块向量;

从所述第一权重矩阵的所述第一数目个行中,获取在所述第一权重矩阵与所述第一子块向量相乘时,与第二数目个所述目标子块相乘的第二数目个行,作为第二权重矩阵;

基于所述第二子块向量与所述第二权重矩阵,恢复所述第一子块向量,并从所述第一子块向量中获取第二数目个所述第一子块。

可选地,在所述目标共识节点维护的区块链上确定待归档的目标区块之后,所述联盟链归档装置还包括:第四调用单元,用于调用所述区块链上的归档合约的启动接口,生成归档索引、以及与所述归档索引对应的所述第一权重矩阵,记录到所述归档合约中;

第一生成单元具体用于:基于所述归档索引,在所述归档合约中获取与所述归档索引对应的所述第一权重矩阵;

在从所述第一权重矩阵的所述第一数目个行中,获取在所述第一权重矩阵与所述第一子块向量相乘时,与第二数目个所述目标子块相乘的第二数目个行,作为第二权重矩阵之前,请求单元还具体用于:根据所述归档索引,在所述归档合约中获取与所述归档索引对应的所述第一权重矩阵。

可选地,所述目标区块为连续的多个所述目标区块,所述第一生成单元具体用于:

将连续的多个所述目标区块分配到各个所述共识节点,以便由每个所述共识节点,基于所述共识节点分配到的所述目标区块,生成第一数目个目标子块。

可选地,所述第一生成单元还具体用于:

针对每个所述目标区块,确定所述目标区块的第一标识序号与第三数目进行模运算的第一余数,其中,所述第三数目为分发所述目标子块时所述联盟链共识网络的共识节点数;

将所述目标区块分配到具有所述第一余数对应的第二标识序号的所述共识节点。

可选地,在所述目标共识节点维护的区块链上确定待归档的目标区块之后,所述联盟链归档装置还包括:第一调用单元,用于调用所述区块链上的归档合约的启动接口,在所述归档合约中相对应地记录归档索引、以及连续的多个所述目标区块的起始区块标识、和结束区块标识;

所述请求单元具体用于:获取所述归档索引;基于所述归档索引,在所述归档合约中获取与所述归档索引对应的所述起始区块标识和所述结束区块标识,将所述起始区块标识和所述结束区块标识之间的区块作为所述目标区块,并生成所述目标区块的恢复请求。

可选地,所述分发单元具体用于:

针对每个所述目标子块,确定所述目标子块的第三标识序号与第三数目进行模运算的第二余数,所述第三数目为分发所述目标子块时所述联盟链共识网络的共识节点数;

将所述目标子块分发到具有所述第二余数对应的第二标识序号的所述共识节点归档。

可选地,在响应于获取所述目标区块的恢复请求,向各个所述共识节点请求所述目标子块之前,所述联盟链归档装置还包括:

识别单元,用于识别第三数目个所述共识节点的可用性;

第二确定单元,用于确定第三数目个所述共识节点中的可用共识节点数与所述第三数目的第一比值;

恢复单元,用于如果确定所述第一比值低于第一阈值,向所述联盟链共识网络中的各个所述共识节点请求所述目标子块,基于接收到的第二数目个所述目标子块恢复第二数目个所述第一子块,从而组合出所述目标区块,并返回所述基于所述目标区块,生成第一数目个目标子块的步骤。

可选地,所述恢复单元具体用于:

确定所述第二数目与所述第一数目的第二比值;

在所述第二比值的基础上添加比值冗余量,得到所述第一阈值。

可选地,所述识别单元具体用于:

调用所述区块链上的归档合约的查询接口,查询联盟链管理合约,以确定在获取所述目标区块的恢复请求时所述联盟链共识网络中的共识节点;

获取第三数目个所述共识节点、与在获取所述目标区块的恢复请求时所述联盟链共识网络中的共识节点的交集,作为所述可用的共识节点。

可选地,所述恢复单元具体用于:

如果确定所述第一比值低于第一阈值,通过所述查询接口将所述归档合约中的重分块标记置为第一值,其中,所述第一值表示需要对所述目标区块重新生成所述目标子块;

查询所述归档合约中的所述重分块标记,以当所述重分块标记为所述第一值时,向所述联盟链共识网络中的各个所述共识节点请求所述目标子块。

可选地,所述重分块标记与归档索引对应记录在所述归档合约中;

所述恢复单元还具体用于:

每隔预定周期,生成查询事务,并确定所述查询事务的摘要值与归档总数进行模运算的第三余数;

以所述第三余数作为所述归档索引,调用所述查询接口,查询所述归档合约中所述归档索引对应的所述重分块标记。

可选地,在所述目标共识节点维护的区块链上确定待归档的目标区块之后,所述联盟链归档装置还包括:第二调用单元,用于调用所述区块链上的归档合约的启动接口,确定所述联盟链共识网络中的各个所述共识节点、所述第三数目、和所述第一阈值,与归档索引相对应地记录到所述归档合约中;

所述识别单元还具体用于:识别所述归档合约中与所述归档索引对应的各个所述共识节点的可用性;

所述第二确定单元还具体用于:确定所述可用共识节点数、与所述归档合约中所述归档索引对应的所述第三数目的第一比值;

所述恢复单元还具体用于:确定所述第一比值低于所述归档合约中所述归档索引对应的所述第一阈值。

可选地,在所述目标共识节点维护的区块链上确定待归档的目标区块之后,所述联盟链归档装置还包括:第五调用单元,用于调用所述区块链上的所述归档合约的所述状态更新接口,将所述归档合约中的第一状态标记置为第一等待状态;

在将第一数目个所述目标子块分发到所述联盟链共识网络中的各个所述共识节点归档,并从所述区块链上删除所述目标区块之后,所述第五调用单元还用于:调用所述区块链上的所述归档合约的所述状态更新接口,将所述归档合约中的第一状态标记置为归档完成状态;

在响应于获取所述目标区块的恢复请求,向各个所述共识节点请求所述目标子块之后,所述第五调用单元还用于:调用所述区块链上的所述归档合约的所述状态更新接口,将所述归档合约中的第一状态标记置为恢复状态。

可选地,所述联盟链共识网络还包括归档节点,其中,所述归档节点在多个所述共识节点对要记录到所述区块链上的区块完成共识后,归档所述区块;

在所述目标共识节点维护的区块链上确定待归档的目标区块之后,所述联盟链归档装置还包括:第三调用单元,用于调用所述区块链上的归档合约中的状态更新接口,将所述归档合约中的第二状态标记置为第二等待状态;响应于所述第二等待状态变为确认状态,确定所述归档节点归档成功,其中,所述确认状态由所述归档节点在识别出所述第二状态标记变为所述第二等待状态后,检测所述区块链上所述目标区块的完整性且检测成功后设置;

所述请求单元还具体用于:向所述归档节点请求所述目标区块,在请求失败时向各个所述共识节点请求所述目标子块。

可选地,所述归档节点为多个所述归档节点,所述归档合约记录与所述目标共识节点绑定的目标归档节点,所述目标归档节点属于多个所述归档节点,且所述确认状态由所述目标归档节点设置;

所述请求单元还具体用于:

查询所述归档合约记录的所述目标归档节点;

向所述目标归档节点请求所述目标区块。

可选地,所述第一确定单元具体用于:

在所述目标共识节点维护的区块链上,确定各个区块的访问频率;

在所述目标共识节点维护的区块链上,获取各个区块的重要度;

基于所述访问频率和所述重要度,确定待归档的目标区块。

根据本公开的一方面,提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上所述的联盟链归档方法。

根据本公开的一方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的联盟链归档方法。

根据本公开的一方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,所述计算机程序被计算机设备的处理器读取并执行,使得该计算机设备执行如上所述的联盟链归档方法。

本公开实施例中,目标共识节点在需要归档区块链上的目标区块时,把目标区块分成若干子块,分发到联盟链共识网络中的各个共识节点。由于联盟链共识网络中的共识节点不总是固定的,不时有共识节点经授权后加入和退出,因此,当需要恢复目标区块时,联盟链共识网络中的共识节点可能已经不是分发各子块时那些共识节点了。因此,在把目标区块分成的第二数目个子块的基础上,扩充一些子块,使得总共不只生成第二数目个子块,而是生成第一数目个目标子块。第一数目大于第二数目。即使需要恢复目标区块时,联盟链共识网络中的共识节点已经不完全是分发子块时那些共识节点了,但只要能在当初分发的第一数目个目标子块中接收到第二数目个目标子块,就能够正确恢复出目标区块,从而提高对当初参与分发的共识节点退出的容忍度。该方法并不依赖向联盟链共识网络中的归档节点归档,因此缓解了联盟链共识网络中归档节点中心化造成的影响。即使在归档节点宕机时,由于本公开实施例是把目标区块分成子块向各个共识节点备份,在需要恢复目标区块时仍然能够恢复,而将第二数目扩充成第一数目个子块完美地缓解了联盟链共识网络中的共识节点可能退出造成的影响,因此大大提高了归档区块恢复的安全性。

本公开的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本公开而了解。本公开的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本公开技术方案的进一步理解,并且构成说明书的一部分,与本公开的实施例一起用于解释本公开的技术方案,并不构成对本公开技术方案的限制。

图1是本公开的实施例应用于的一种联盟链共识网络的体系架构示意图;

图2A-图2B是根据本公开的实施例的联盟链归档方法应用在区块归档场景下的示意图;

图3是根据本公开的一个实施例的联盟链归档方法的流程图;

图4是根据本公开的实施例的调用归档合约的具体实现流程图;

图5是图3中步骤320的一个具体实现流程图;

图6是图5中步骤510的一个具体实现流程图;

图7是图6中利用模运算实现分配目标区块的一个具体实现示意图;

图8是图3中步骤320的另一个具体实现流程图;

图9A-图9C是图8中利用第一权重矩阵生成第一数目个目标子块的具体实现示意图;

图10是图3中步骤330的一个具体实现流程图;

图11A是图10中利用模运算实现分发目标子块的一个具体实现示意图;

图11B是图10中利用模运算实现分发目标子块的另一个具体实现示意图;

图12是根据本公开的另一个实施例在步骤340之前的联盟链归档方法的流程图;

图13是图12中利用可用性确定重分块的一个具体实现示意图;

图14是图12中关于第一阈值的具体实现流程图;

图15是图12中步骤1210的一个具体实现流程图;

图16是图15的一个具体实现示意图;

图17是图12中步骤1230的一个具体实现流程图;

图18是图17中步骤1720的一个具体实现流程图;

图19是图3中步骤340的一个具体实现流程图;

图20是图19的一个具体实现示意图;

图21是根据本公开的一个实施例的利用归档节点请求目标区块的具体实现示意图;

图22是根据本公开的一个实施例的利用目标归档节点请求目标区块的具体实现示意图;

图23是图3中步骤340的另一个具体实现流程图;

图24A-图24C是图23生成第一数目个目标子块的具体实现示意图;

图25是本公开的实施例的联盟链归档方法的实施细节图;

图26是根据本公开的实施例的联盟链归档装置的模块图;

图27是根据本公开的实施例实施图3所示的联盟链归档方法的终端结构图;

图28是根据本公开的实施例实施图3所示的联盟链归档方法的服务器结构图。

具体实施方式

为了使本公开的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本公开进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本公开,并不用于限定本公开。

需要说明的是,在本申请的各个具体实施方式中,当涉及到需要根据目标对象属性信息或属性信息集合等与目标对象特性相关的数据进行相关处理时,都会先获得目标对象的许可或者同意,而且,对这些数据的收集、使用和处理等,都会遵守相关法律法规和标准。此外,当本申请实施例需要获取目标对象属性信息时,会通过弹窗或者跳转到确认页面等方式获得目标对象的单独许可或者单独同意,在明确获得目标对象的单独许可或者单独同意之后,再获取用于使本申请实施例能够正常运行的必要的目标对象相关数据。

对本公开实施例进行进一步详细说明之前,对本公开实施例中涉及的名词和术语进行说明,本公开实施例中涉及的名词和术语适用于如下的解释:

人工智能:是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得目标结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。随着人工智能技术研究和进步,人工智能技术在多个领域展开研究和应用,例如常见的智能家居、智能穿戴设备、虚拟助理、智能音箱、智能营销、无人驾驶、自动驾驶、无人机、机器人、智能医疗、智能客服等,相信随着技术的发展,人工智能技术将在更多的领域得到应用,并发挥越来越重要的价值。

区块链:区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链它本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批交易的信息,用于验证其信息的有效性(防伪)和关联前一区块。

联盟链:带有鉴权功能的区块链,只有获得准许的对象才能向联盟链发送事务。换句话说,每笔事务都需要使用获得联盟链上许可的密钥签名,才能最终上链。

共识节点:区块链中参与出块、验证其他区块的节点,共识节点需要执行链上的每一笔事务。联盟链的共识节点需要获得授权后才能加入。

区块:区块链中的基本数据结构,一个区块中包含了区块时间戳、区块哈希等基本信息,以及依序排列的多笔事务。

智能合约:图灵完备的在区块链上运行的代码,一笔事务可以调用智能合约,被调用智能合约的代码将在所有共识节点上执行。在本公开实施例中涉及归档合约、联盟链管理合约。

纠删码技术:主要是通过纠删码算法将原始的数据进行编码得到冗余,并将数据和冗余一并存储起来,以达到容错的目的。其基本思想是将n块原始的数据元素通过一定的计算,得到m块冗余元素(校验块)。对于这n+m块的元素,当其中任意的m块元素出错(包括原始数据和冗余数据)时,均可以通过对应的重构算法恢复出原来的n块数据。

参见图1所示的联盟链共识网络,联盟链共识网络是指用于对区块进行归档的区块链网络。该联盟链共识网络包括共识节点、和归档节点。共识节点是指对区块进行共识并上链的节点。例如,共识节点1产生一个区块,将该区块发向共识节点2-5进行验证,在验证通过后,由共识节点1-5将区块记录到共识节点1-5分别维护的区块链上。归档节点是指对区块进行归档的节点。例如,在共识节点1-5将区块记录到区块链上之后,归档节点从区块链上同步区块数据,完成区块归档。

需要说明的是,共识节点、和归档节点均是联盟链中的联盟链节点。联盟链节点可以是一个独立的设备,如单独的计算机或服务器,也可以是独立设备的一部分,例如服务器上划分出的一个虚拟机。这里对联盟链节点的具体形式不做限定。

本公开实施例可以应用在多种场景下,例如图2A-图2B所示的区块归档的场景等。

参见图2A,图2A与图1的区别在于,图2A还示出了共识节点5所维护的区块链、以及归档节点2所记录的归档的区块。共识节点5所维护的区块链由5个区块构成,包括区块1-5。归档节点2所记录的归档的区块也是区块1-5。

继续参见图2A,共识节点5请求将区块1-4进行归档,区块归档的具体过程如下:

当有区块归档需求时,任意共识节点均可以发起归档请求,并在归档合约中记录联盟链归档区块的起始高度、结束高度,同时在归档合约中的归档状态设置为等待(Waiting)。

归档节点有一个独立的进程检查归档合约,一旦发现归档状态为等待,归档节点会检查存储中从归档区块的起始高度到结束高度的区块数据完整性,如果数据完整,则向共识节点发送应答,以便共识节点将归档合约中的归档状态设置为确认(Comfirmed)。

共识节点也有一个独立的进程检查归档合约,一旦发现归档合约中的状态从Waiting变化为Comfirmed,则开始删除区块链中归档起始高度到结束高度的区块数据。

经过上述归档过程,共识节点5所维护的区块链删除了区块1-4,剩余区块5。

参见,图2B与图2A的区别在于,图2B示出了共识节点5向归档节点2请求恢复区块1-4的过程。区块恢复的具体过程如下:

当有区块恢复需求时,任意共识节点从归档合约中查询待恢复区块的起始高度、结束高度,然后向归档节点均可以发起恢复请求。

归档节点基于恢复请求从存储中找到从待恢复区块的起始高度到结束高度的区块,发送至共识节点。

共识节点基于从归档节点接收到的区块完成区块恢复。

经过上述恢复过程,共识节点5从归档节点2获取到区块1-4,从而共识节点5所维护的区块链包括区块1-5。

但是,联盟链共识网络常常只有少量归档节点,比如图2A-图2B所示的联盟链共识网络存在两个归档节点,非常“中心化”。一旦这两个归档节点都宕机,则无法恢复归档区块,影响归档区块恢复的安全性。

对于公链来说,由于其节点总数大,即使大部分节点都不再存储历史区块数据,依然有大量全量节点存储全量数据,这为公链保留了一定的去中心化特性。但对于联盟链来说,由于联盟链节点总数小,且有准入门槛,在大多数情况下,历史归档数据仅会存储在少量归档节点中。部分情况下,联盟链甚至是以中心化存储的形式存储历史归档数据。当联盟链的其余节点需要恢复历史归档数据时,只能从极少数的归档节点恢复数据。“中心化的存储以及中心化的恢复”与区块链的去中心化特性是矛盾的。在这种情况下,一旦遇到归档节点单点数据丢失的问题,联盟链极有可能无法恢复历史归档数据。

本公开实施例希望通过数据冗余备份的方式,使联盟链共识网络中的共识节点恢复归档数据的过程不再依赖于归档节点,从而使联盟链的归档数据做到“中心化存储,去中心化恢复”。同时,考虑到联盟链共识网络中归档共识节点有加入、退出机制,本公开实施例也保证了在一定比例的节点退出联盟链后,联盟链依然有能力恢复归档数据。

根据本公开的一个实施例,提供了一种联盟链归档方法。

该联盟链归档方法一般应用在联盟链共识网络中拥有少量归档节点的归档业务场景中,例如图2A-图2B所示的区块归档的场景。本公开实施例的联盟链归档方法能够缓解联盟链共识网络中归档节点中心化造成的影响,提高归档区块恢复的安全性。该联盟链归档方法应用于联盟链共识网络的多个共识节点中的目标共识节点。例如,在图1所示的联盟链共识网络中,目标共识节点为共识节点1-5中的任一个。

如图3所示,根据本公开一个实施例的联盟链归档方法可以包括:

步骤310、在目标共识节点维护的区块链上确定待归档的目标区块;

步骤320、基于目标区块,生成第一数目个目标子块;

步骤330、将第一数目个目标子块分发到联盟链共识网络中的各个共识节点归档,并从区块链上删除目标区块;

步骤340、响应于获取目标区块的恢复请求,向各个共识节点请求目标子块,如果接收到第二数目个目标子块,基于第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块。

下面对步骤310-340进行详细描述。

在步骤310,区块链由多个区块构成,不同的区块链由不同的共识节点维护。本公开实施例针对的是目标共识节点所维护的区块链。待归档的目标区块是指,在区块链上的多个区块中,需要被归档的区块。注意,若某个区块被确定为待归档的目标区块,则在成功归档之后,将在区块链上删除该区块。

在一些实施例中,可以基于目标共识节点接收到的区块归档请求,确定待归档的目标区块。在该实施例具体实现时,目标共识节点接收由目标对象发送的区块归档请求,从区块归档请求提取起始区块标识和结束区块标识,从区块链上获取起始区块标识和结束区块标识之间的区块,得到待归档的目标区块。

该实施例的好处在于,利用目标对象的区块归档请求确定哪些区块需要被归档,可以提高对目标区块的确定准确性。

在另一实施例中,目标共识节点不接收区块归档请求,但可以通过确定区块链上各个区块的访问频率和重要度确定待归档的目标区块。

在该实施例具体实现时,步骤310具体包括:

在目标共识节点维护的区块链上,确定各个区块的访问频率;

在目标共识节点维护的区块链上,获取各个区块的重要度;

基于访问频率和重要度,确定待归档的目标区块。

在该实施例中,访问频率是指目标共识节点在将区块记录到区块链之后,对该区块进行访问的频率。某个区块的访问频率越低,则说明该区块越应该作为被归档的目标区块。例如,区块链上包括5个区块,分别为区块1、区块2、区块3、区块4和区块5。在确定区块1-5的访问频率之后,得到区块1的访问频率为0.01次/天、区块2的访问频率为0.03次/天、区块3的访问频率为0.02次/天、区块4的访问频率为0.05次/天、区块5的访问频率为2次/天。通过比对区块1-5的访问频率可知,相比区块5,应当把区块1-4确定为待归档的目标区块。

在该实施例中,重要度用于表征区块的重要程度。某个区块的重要度越低,则说明该区块越应该作为被归档的目标区块。需要说明的是,一个区块通常存储有多个事务,这些事务可以分为重要类型事务和非重要类型事务。重要类型事务对数据安全性要求较高,例如发票报销事务。存储有发票报销事务的区块的重要度0.9。非重要类型事务对数据安全性要求较低,例如天气信息事务。存储有发票报销事务的区块的重要度0.1。

在确定访问频率和重要度之后,基于访问频率和重要度,确定待归档的目标区块,具体包括:

根据访问频率,确定区块的第一分数;

根据重要度,确定区块的第二分数;

根据第一分数和第二分数,确定区块的总分数;

基于区块的总分数,确定待归档的目标区块。

在该实施例中,根据访问频率,确定区块的第一分数,可以采取查找访问频率范围与第一分数对照表的方式,也可以采用公式法等。

(1)根据访问频率查找访问频率范围与第一分数对照表,可以得到第一分数。如下是一个访问频率与第一分数对照表的例子:

表1

例如,某个区块的范围频率为5次/天,查找表1,得到对应的第一分数为80。

上述查找范围频率与第一分数对照表的方式的优点是简便易行,处理开销小。

(2)在采用公式法时,可以设置第一分数与范围频率成正比,例如:

F1=K1·G1公式1

其中,F1表示第一分数,G1表示范围频率,K1是预设的常数,可以根据实际需要设置。例如,K1=16,将G1=5代入后,第一分数F1=80。

上述通过公式确定第一分数的方式的优点是精确性高,且公式能够根据需要调整,灵活性强。

根据重要度,确定区块的第二分数,可以采取查找重要度与第二分数对照表的方式,也可以采用公式法等。

(1)根据重要度查找重要度范围与第二分数对照表,可以得到第二分数。如下是一个重要度范围与第一分数对照表的例子:

表2

例如,某个区块的重要度为0.8,查找表2,得到对应的第二分数为90。

上述查找重要度范围与第二分数对照表的方式的优点是简便易行,处理开销小。

(2)在采用公式法时,可以设置第二分数与重要度成正比,例如:

F2=K2·G2公式2

其中,F2表示第二分数,G2表示重要度,K2是预设的常数,可以根据实际需要设置。例如,K2=112.5,将G2=0.8代入后,第二分数F2=90。

上述通过公式确定第二分数的方式的优点是精确性高,且公式能够根据需要调整,灵活性强。

根据第一分数和第二分数,确定区块的总分数,可以采取计算第一分数和第二分数的平均数或加权平均数的方式。

计算第一分数和第二分数的平均数作为总分数时,举例来说,区块的第一分数为80,第二分数为90,则总分数为(80+90)/2=85。使用平均数计算第一事务的总分数的优点在于,可以平等地体现访问频率与重要度对区块作为待归档的目标区块的影响。

计算第一分数和第二分数的加权平均数作为总分数时,举例来说,为访问频率与重要度分别设置权重为0.6与0.4,区块的第一分数为80,第二分数为90,则总分数为80×0.6+90×0.4=84。使用加权平均数计算总分数的优点在于,能够为访问频率与重要度设置不同的权重,提高了确定待归档的目标区块的灵活性。

基于区块的总分数,确定待归档的目标区块,可以是将总分数大于分数阈值的区块作为待归档的目标区块,也可以是将总分数排在前若干位的区块作为待归档的目标区块。

上述使用访问频与率重要度确定目标区块的实施例的好处是,实现了根据访问频率和重要度满足不同区块的归档需求和安全性需求,提高了数据归档的灵活性和安全性。

需要说明的是,在目标共识节点确定待归档的目标区块之后,可以调用归档合约对本次归档任务的一些参数进行记录。归档合约包括启动接口、状态更新接口、查询接口。启动接口是指用于启动一次新的归档任务的接口。状态更新接口是指用于更新归档任务的状态的接口。查询接口是指用于查询归档任务的参数的接口。

在一实施例中,参见图4,在步骤310之后,本公开实施例的联盟链归档方法还包括:

步骤410、调用区块链上的归档合约的启动接口,生成归档索引、以及与归档索引对应的第一权重矩阵,记录到归档合约中;

步骤420、调用区块链上的归档合约的启动接口,在归档合约中相对应地记录归档索引、以及连续的多个目标区块的起始区块标识、和结束区块标识;

步骤430、调用区块链上的归档合约的启动接口,确定联盟链共识网络中的各个共识节点、第三数目、和第一阈值,与归档索引相对应地记录到归档合约中;

步骤440、调用区块链上的归档合约的状态更新接口,将归档合约中的第一状态标记置为第一等待状态。

下面对步骤410-440进行详细描述。

在步骤410,归档索引是指一次归档任务的索引,可根据归档索引查找到对应的归档任务。第一权重矩阵是指用于基于目标区块生成第一数目个目标子块的矩阵。参照表3,将归档索引(ArchiveID)和第一权重矩阵(Matrix)记录到归档合约中。

在步骤420,这里的归档索引与步骤410中的归档索引相同。起始区块标识是指连续的多个目标区块中的第一个目标区块的区块标识。结束区块标识是指连续的多个目标区块中的最后一个目标区块的区块标识。继续参照表3,在归档合约中相应地记录归档索引(ArchiveID)、起始区块标识(Start)、和结束区块标识(End)。

在步骤430,确定联盟链共识网络中的各个共识节点,相当于是确定在联盟链共识网络中参与归档的共识节点。第三数目是指参与归档的共识节点的数目。第一阈值是指事先设置的节点数目阈值,该第一阈值用于衡量在参与归档的共识节点中还剩余多少可用的共识节点。继续参照表3,在归档合约中相应地记录归档索引(ArchiveID)、各个共识节点(Participants)、第三数目(ParticipantNum)和第一阈值(Threshold)。

在步骤440,第一状态标记用于指示归档任务的状态。第一状态标记包括第一等待状态(Waiting)、归档完成状态(Applied)、归档恢复状态(Recovered)、归档中止状态(Abort)。继续参照表3,将归档合约中的第一状态标记(Status1)置为第一等待状态(Waiting)。

表3

注意,除了步骤410-440中涉及的参数,在归档合约中还可以记录归档索引对应的目标共识节点、和重分块标记、归档次数。目标共识节点是指发起本次归档任务的共识节点。重分块标记是指参与归档的共识节点的可用性是否满足要求。重分块标记包括第一值和第二值。第一值表示需要对目标区块重新生成目标子块。第二值表示不需要对目标区块重新生成目标子块。继续参照表3,在归档合约中相应地记录归档索引(ArchiveID)、目标共识节点(Proposer)、和重分块标记(IsAlive)。

上述在归档合约中记录各个参数的实施例的好处是,可以基于归档索引便捷地从归档合约查询到各个参数,提高了处理效率。

在另一实施例中,参照表4,归档合约还维护归档次数。归档次数在归档合约中是递增的。例如,目标共识节点已进行过两次归档,第一次归档的起始区块标识为1000,终止区块标识为2000;第二次归档的起始区块标识为3000,终止区块标识为5000;则归档合约中归档次数为2。

表4

在步骤310确定待归档的目标区块之后,在步骤320中,基于目标区块,生成第一数目个目标子块。

具体地,第一数目个目标子块包括目标区块分成的第二数目个第一子块,第一数目大于第二数目。需要说明的是,本公开实施例是基于纠删码的原理将目标区块转换成了第一数目个目标子块,相较于直接将目标区块进行分块,强化了对共识节点退出、共识节点数据丢失情况的容忍度。

在步骤330中,将第一数目个目标子块分发到联盟链共识网络中的各个共识节点归档,并从区块链上删除目标区块。

注意,联盟链共识网络中的各个共识节点包括目标共识节点,也就是说,目标共识节点将第一数目个目标子块分发到包括自己在内的各个共识节点归档。目标共识节点在分发结束之后,从区块链上删除目标区块。由此可见,目标共识节点只需少量的存储空间用于存储很少的目标子块,相较于存储完整的目标区块,节省了存储空间,提高了存储资源利用率。

在一实施例中,在步骤330之后,本公开实施例的联盟链归档方法还包括:调用区块链上的归档合约的状态更新接口,将归档合约中的第一状态标记置为归档完成状态。例如参照表3,将归档合约中的第一状态标记(Status1)置为归档完成状态(Applied)。这样一来,如果查询到归档合约中的第一状态标记为归档完成状态,则说明对目标区块的归档任务已成功完成,实现对归档任务的状态的及时检测。

在步骤340中,响应于获取目标区块的恢复请求,向各个共识节点请求目标子块,如果接收到第二数目个目标子块,基于第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块。

具体地,恢复请求是指向目标共识节点申请恢复目标区块的请求。目标共识节点响应于恢复请求,向各个共识节点请求目标子块。注意,这里的各个共识节点包括目标共识节点。需要说明的是,联盟链共识网络中的共识节点可能退出或出现故障,因此,步骤340中的各个共识节点并不一定与步骤320中的各个共识节点相同,也就导致原先的第一数目个目标子块不一定能够全部收回。但是,由于本公开实施例是基于纠删码原理将目标区块生成了第一数目个目标子块,且第一数目个目标子块包括目标区块分成的第二数目个第一子块,第一数目大于第二数目。因此,如果能够接收到第二数目个目标子块,则可以基于第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块。

在一实施例中,在步骤340之后,本公开实施例的联盟链归档方法还包括:调用区块链上的归档合约的状态更新接口,将归档合约中的第一状态标记置为恢复状态。例如参照表3,将归档合约中的第一状态标记(Status1)置为归档完成状态(Recovered)。这样一来,如果查询到归档合约中的第一状态标记为恢复状态,则说明正在对目标区块进行恢复,实现对归档任务的状态的及时检测。

通过上述步骤310-340,本公开实施例并不依赖向联盟链共识网络中的归档节点归档,因此缓解了联盟链共识网络中归档节点中心化造成的影响。即使在归档节点宕机时,由于本公开实施例是把目标区块分成子块向各个共识节点备份,在需要恢复目标区块时仍然能够恢复,而将第二数目扩充成第一数目个子块完美地缓解了联盟链共识网络中的共识节点可能退出造成的影响,因此大大提高了归档区块恢复的安全性。

以上是对步骤310-340进行的总体描述。由于步骤310的具体实现已在上文中详尽,下面将针对步骤320-340的具体实现展开详细描述。

在步骤320中,基于目标区块,生成第一数目个目标子块。

需要说明的是,目标区块可以是一个目标区块,也可以是连续的多个目标区块。在一实施例中,无论是一个目标区块还是连续的多个目标区块,都由目标共识节点基于每个目标区块生成第一数目个目标子块。

考虑到由目标共识节点对连续的多个目标区块进行处理需要耗费大量的处理资源,在一实施例中,是将连续的多个目标区块分配到各个共识节点。

在该实施例具体实现时,参照图5,步骤320包括:

步骤510、将连续的多个目标区块分配到各个共识节点,以便由每个共识节点,基于共识节点分配到的目标区块,生成第一数目个目标子块。

该实施例的好处在于,由各个共识节点分担目标共识节点的处理压力,节省了目标共识节点的处理资源。

在一实施例中,参照图6,步骤510包括:

步骤610、针对每个目标区块,确定目标区块的第一标识序号与第三数目进行模运算的第一余数;

步骤620、将目标区块分配到具有第一余数对应的第二标识序号的共识节点。

在步骤610,第三数目为分发目标子块时联盟链共识网络的共识节点数。

需要说明的是,目标共识节点可以调用归档合约的启动接口,发起一次分配任务,并规定此次分配任务的起始第一标识序号和终止第一标识序号。分配任务执行时,归档合约自动填充归档索引ArchiveID、各个共识节点Participants、第三数目ParticipantNum等字段。联盟链共识网络中所有的共识节点两两之间建立点到点连接,开始执行分配任务。假设共有m个节点,也就是第三数目为m。每个共识节点依据归档合约中记录的Participants数组中的排序获得自己的第二标识序号。对于第一标识序号在[起始第一标识序号,终止第一标识序号]区间内的任意目标区块而言,第一标识序号为h的目标区块将被分配给第二标识序号为r的共识节点制作目标子块,其中r=h mod m。

例如,参照图7,联盟链共识网络包括共识节点0、共识节点1、和共识节点2,则第三数目为3。假定连续的多个目标区块为连续的6个目标区块,且目标区块的第一标识序号为1-6。针对目标区块1,第一余数为1。针对目标区块2,第一余数为2。针对目标区块3,第一余数为0。针对目标区块4,第一余数为1。针对目标区块5,第一余数为2。针对目标区块6,第一余数为0。

在步骤620,将目标区块分配到具有第一余数对应的第二标识序号的共识节点。共识节点0的第二标识序号为0,共识节点1的第二标识序号为1,共识节点2的第二标识序号为2。继续参照图7,将目标区块1分配到共识节点1,将目标区块2分配到共识节点2,将目标区块3分配到共识节点0,将目标区块4分配到共识节点1,将目标区块5分配到共识节点2,将目标区块6分配到共识节点0。

可以理解的是,每个共识节点将可能分配到多个目标区块,但在生成第一数目个目标子块时,是基于每个目标区块生成第一数目个目标子块。

该步骤610-620的实施例的好处在于,基于模运算得到的第一余数实现轮询制分配,可以确保每个共识节点都有平等分配到目标区块的可能性,提高了分配公平性。

在一实施例中,参照图8,步骤320包括:

步骤810、将目标区块分成第二数目个第一子块,以形成第一子块向量;

步骤820、获取第一权重矩阵;

步骤830、将第一权重矩阵与第一子块向量相乘,得到目标子块向量,目标子块向量包括第一数目个目标子块。

在步骤810,对于每一个目标区块,目标共识节点将其序列化后,分为第二数目个第一子块,并将第二数目个第一子块形成一个第一子块向量。例如,参照图9A,目标区块被分为k个第一子块,包括第一子块D

在步骤820,这里的第一权重矩阵与表3中记录的第一权重矩阵相同,均是指基于目标区块生成第一数目个目标子块的矩阵。其中,第一权重矩阵具有第一数目个行和第二数目个列,第一权重矩阵的前第二数目个行构成单位矩阵。第二数目+1行至第一数目个行的参数需要共识节点自行定义。例如,参照图9B,第一权重矩阵M为{[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,

0,0,1],[M

,2,3,4,5],[2,3,4,5,1],[3,4,5,1,2]}。可以理解的是,上述z可以等于k。

需要说明的是,第二数目+1行至第一数目个行的参数可以随意设置,但需要确保第一权重矩阵是可逆矩阵。

在一实施例中,步骤820包括:基于归档索引,在归档合约中获取与归档索引对应的第一权重矩阵。参照表3,在步骤310之后,将归档索引(ArchiveID)和第一权重矩阵(Matrix)记录到归档合约中。因此,在步骤820中,可以基于归档索引(ArchiveID)从归档合约中获取第一权重矩阵(Matrix)。

在步骤830,将第一权重矩阵与第一子块向量相乘,得到目标子块向量,目标子块向量包括第一数目个目标子块。例如,参照图9C,第一权重矩阵M与第一子块向量D相乘,得到目标子块向量为[D

1*D

该步骤810-830的实施例的好处在于,利用第一权重矩阵实现第一数目个目标子块的生成,且第一权重矩阵中的参数可灵活设置,提高了生成第一数目个目标子块的灵活性。

在步骤330中,将第一数目个目标子块分发到联盟链共识网络中的各个共识节点归档,并从区块链上删除目标区块。

在一实施例中,参照图10,步骤330包括:

步骤1010、针对每个目标子块,确定目标子块的第三标识序号与第三数目进行模运算的第二余数;

步骤1020、将目标子块分发到具有第二余数对应的第二标识序号的共识节点归档。

在步骤1010,第三数目为分发目标子块时联盟链共识网络的共识节点数。

需要说明的是,联盟链共识网络中的任意共识节点可以调用归档合约的启动接口,发起一次分发任务,并规定此次分发任务的起始第三标识序号和终止第三标识序号。共识节点将一个目标区块制作成2k个目标子块,并将第j个目标子块分配给第g个节点,且g=jmod m。

例如,参照图11A,联盟链共识网络包括共识节点0、共识节点1、和共识节点2,则第三数目为3。假定连续的多个目标区块为连续的6个目标区块,针对共识节点0,分配到了目标区块3和目标区块6。共识节点0针对目标区块3,将目标区块3生成了4个目标子块,包括目标子块3.1、目标子块3.2、目标子块3.3、和目标子块3.4。对应地,目标子块3.1的第二余数为1,目标子块3.2的第二余数为2,目标子块3.3的第二余数为0,目标子块3.4的第二余数为1。共识节点0针对目标区块6,将目标区块6生成了4个目标子块,包括目标子块6.1、目标子块6.2、目标子块6.3、和目标子块6.4。对应地,目标子块6.1的第二余数为1,目标子块6.2的第二余数为2,目标子块6.3的第二余数为0,目标子块6.4的第二余数为1。

在步骤620,将目标子块分发到具有第二余数对应的第二标识序号的共识节点归档。共识节点0的第二标识序号为0,共识节点1的第二标识序号为1,共识节点2的第二标识序号为2。继续参照图11A,将目标区块3.1分配到共识节点1,将目标区块3.2分配到共识节点2,将目标区块3.3分配到共识节点0,将目标区块3.4分配到共识节点1。将目标区块6.1分配到共识节点1,将目标区块6.2分配到共识节点2,将目标区块6.3分配到共识节点0,将目标区块6.4分配到共识节点1。

在一示例中,如图9A-图9C所示,基于某个目标区块生成了8个目标子块,具体包括D

该步骤1010-1020的实施例的好处在于,基于模运算得到的第二余数实现轮询制分发,可以确保每个共识节点都有平等分发到目标子块的可能性,提高了分发公平性。

需要说明的是,在步骤330之后,目标共识节点已经在区块链上删除了目标区块。如果目标共识节点需要恢复目标区块,则需向分发到目标子块的共识节点进行请求,以便根据接收到的第二数目个目标子块恢复得到目标区块。但是,如果共识节点处于不可用状态,例如某个共识节点退出联盟链共识网络或出现故障,则导致目标共识节点无法接收到足够的第二数目个目标子块,从而导致无法恢复得到目标区块。因此,在一实施例中,为了确保能够恢复目标区块,需要及时检测共识节点的可用性。

在该实施例具体实现时,参照图12,在步骤340之前,该实施例的联盟链归档方法还包括:

步骤1210、识别第三数目个共识节点的可用性;

步骤1220、确定第三数目个共识节点中的可用共识节点数与第三数目的第一比值;

步骤1230、如果确定第一比值低于第一阈值,向联盟链共识网络中的各个共识节点请求目标子块,基于接收到的第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块,并返回基于目标区块,生成第一数目个目标子块的步骤。

在步骤1210,可用性用于指示共识节点是否可用。可用性包括可用状态或非可用状态。如果共识节点处于可用状态,则共识节点为可用的共识节点。如果共识节点处于非可用状态,则共识节点为非可用的共识节点。例如,参照图13,第三数目为3,联盟链共识网络中有3个共识节点。识别3个共识节点的可用性,也就是识别共识节点0、共识节点1、以及共识节点2的可用性。在识别可用性之后,发现共识节点2的可用性为非可用状态,可用的共识节点剩余共识节点0、和共识节点1。

在一实施例中,步骤1210包括:识别归档合约中与归档索引对应的各个共识节点的可用性。该实施例的好处在于,利用归档索引查询归档合约可以快速确定各个共识节点,从而提高确定可用性的效率。

在步骤1220,第一比值是指可用节点数与第三数目的比值。可用节点数是指可用的共识节点的数目。

在一实施例中,步骤1220包括:确定可用共识节点数、与归档合约中归档索引对应的第三数目的第一比值。该实施例的好处在于,利用归档索引查询归档合约可以快速确定第三数目,从而提高确定第一比值的效率。

例如,继续参照图13,在确定可用的共识节点剩余共识节点0、和共识节点1之后,获得可用节点数为2。由于第三数目为3,则第一比值为2/3。

在一实施例中,参照图14,第一阈值通过以下方式确定:

步骤1410、确定第二数目与第一数目的第二比值;

步骤1420、在第二比值的基础上添加比值冗余量,得到第一阈值。

在该实施例中,假设第一数目是2k,第二数目是k,第二比值为50%。低于50%,说明当初参与归档的共识节点中有一半都退出了。此时剩下的共识节点提供的剩余目标子块已经不够恢复目标区块了。因此,可以设置70%,留出一个冗余量。不能等到低于50%再恢复。

该步骤1410-1420的实施例的好处在于,通过增加一个比值冗余量,确保第一比值在低于第一阈值的时候,可以触发对目标区块的恢复和重分块,保证能够正常恢复出目标区块。

在步骤1230,如果确定第一比值低于第一阈值,则说明联盟链共识网络中存在有共识节点不可用,且需进行重分块,否则可能将无法恢复目标区块。因此,在确定第一比值低于第一阈值之后,目标共识节点向联盟链共识网络中的各个共识节点请求目标子块,基于接收到的第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块,并返回步骤320。

在一实施例中,步骤1230包括:确定第一比值低于归档合约中归档索引对应的第一阈值。该实施例的好处在于,利用归档索引查询归档合约可以快速确定第一阈值,从而提高确定第一比值低于第一阈值的效率。

例如,继续参照图13,目标共识节点向联盟链共识网络中的共识节点0和共识节点1请求目标子块。共识节点0归档有目标子块D

该步骤1210-1230的实施例的好处在于,通过检测共识节点的可用性,能够触发对目标区块的恢复和重分块,确保目标区块不会因共识节点不可用而导致丢失,提高了数据安全性。

在一实施例中,参照图15,步骤1210包括:

步骤1510、调用区块链上的归档合约的查询接口,查询联盟链管理合约,以确定在获取目标区块的恢复请求时联盟链共识网络中的共识节点;

步骤1520、获取第三数目个共识节点、与在获取目标区块的恢复请求时联盟链共识网络中的共识节点的交集,作为可用的共识节点。

在该实施例中,联盟链管理合约是指能够获得联盟链共识网络中的共识节点的合约。通过查询联盟链管理合约,可以得到在获取目标区块的恢复请求时联盟链共识网络中的共识节点。例如,参照图16,目标共识节点确定在分发目标子块时,联盟链共识网络存在{共识节点0,共识节点1,共识节点2}。但在目标共识节点调用区块链上的归档合约的查询接口,查询联盟链管理合约时,共识节点2已经非可用。因此,目标共识节点确定在获取目标区块的恢复请求时,存在{共识节点0,共识节点1}。根据{共识节点0,共识节点1,共识节点2}和{共识节点0,共识节点1}的交集确定可用的共识节点包括共识节点0、和共识节点1。

该步骤1510-1520的实施例的好处在于,基于分发目标子块时的共识节点与获取恢复请求时的共识节点之间的交集,可以快速确定出可用的共识节点,提高了处理效率。

在一实施例中,参照图17,步骤1230包括:

步骤1710、如果确定第一比值低于第一阈值,通过查询接口将归档合约中的重分块标记置为第一值;

步骤1720、查询归档合约中的重分块标记,以当重分块标记为第一值时,向联盟链共识网络中的各个共识节点请求目标子块。

在步骤1710,重分块标记包括第一值和第二值,第一值表示需要对目标区块重新生成目标子块。例如,参照表3,通过查询接口将归档合约中的重分块标记(IsAlive)置为第一值,第一值为0或假(false)。

在步骤1720,例如查询到重分块标记为第一值,例如第一值为false,则向联盟链共识网络中的各个共识节点请求目标子块。

该步骤1710-1720的实施例的好处在于,直接通过检测重分块标记是否为第一值的方式,相比需要比较第一比值与第一阈值的大小再确定是否进行重分块而言,大大提高了检测效率。

参照图18,在一实施例中,重分块标记与归档索引对应记录在归档合约中,步骤1720包括:

步骤1810、每隔预定周期,生成查询事务,并确定查询事务的摘要值与归档总数进行模运算的第三余数;

步骤1820、以第三余数作为归档索引,调用查询接口,查询归档合约中归档索引对应的重分块标记。

在该实施例中,预定周期是指目标共识节点预先设置的时间周期。例如预定周期为2个小时、或4个小时等等。查询事务是指共识节点产生的对归档任务进行查询的事务。注意。联盟链共识网络中的共识节点都有资格检查历史归档的目标区块,本实施例设计了一种基于事务摘要值的抽查方案,具体包括:每一个共识节点节点都运行一个独立的进程,每隔预定周期,进程会组建一笔查询事务,调用归档合约的查询接口,归档合约使用第三余数(第三余数等于事务的摘要值与归档次数ArchiveNum进行模运算的余数)确定抽查的归档索引。如果该归档记录的重分块标记在本次查询中变为false,则向联盟链共识网络中的各个共识节点请求目标子块。

该步骤1810-1820的实施例的好处在于,基于第三余数查询对应的归档索引的重分块标记的方式,可以实现轮询制查询重分块标记,提高查询的灵活性。

在步骤340中,响应于获取目标区块的恢复请求,向各个共识节点请求目标子块,如果接收到第二数目个目标子块,基于第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块。

在一实施例中,参照图19,步骤340包括:

步骤1910、获取归档索引;

步骤1920、基于归档索引,在归档合约中获取与归档索引对应的起始区块标识和结束区块标识;

步骤1930、将起始区块标识和结束区块标识之间的区块作为目标区块,并生成目标区块的恢复请求。

在步骤1910,获取归档索引,可以是基于上述实施例中查询事务的摘要值与归档次数进行模运算的第三余数获取归档索引的方式,也可以是由目标共识节点从多个历史的归档索引中随机选取一个作为归档索引的方式。例如,参照图20,获取到归档索引为001。

在步骤1920,归档合约中记录着与归档索引对应的起始区块标识和结束区块标识。例如,继续参照图20,归档合约记录着归档索引001对应的起始区块标识为5、结束区块标识为10;归档索引002对应的起始区块标识为15、结束区块标识为30。假定归档索引为001,可以从归档合约获取到起始区块标识为5、和结束区块标识为10。

在步骤1930,例如,继续参照图20,将起始区块标识为5和结束区块标识为10之间的区块作为目标区块,并生成目标区块的恢复请求。注意,这里的目标区块具体是连续的6个目标区块。

该步骤1910-1930的实施例的好处在于,基于归档索引可以快速从归档合约确定出起始区块标识和结束区块标识,提高了确定效率,从而提高了生成目标区块的恢复请求的处理效率。

在上述实施例中,目标共识节点在获取恢复请求之后,是直接向各个共识节点请求目标子块。但在另一实施例中,联盟链共识网络还包括归档节点,归档节点在多个共识节点对要记录到区块链上的区块完成共识后,归档区块。在该实施例中,由于归档节点中存储有区块数据,所以目标共识节点也可以向归档节点进行请求目标区块。

在该实施例具体实现时,在步骤310之后,本公开实施例的联盟链归档方法还包括:调用区块链上的归档合约中的状态更新接口,将归档合约中的第二状态标记置为第二等待状态;响应于第二等待状态变为确认状态,确定归档节点归档成功,其中,确认状态由归档节点在识别出第二状态标记变为第二等待状态后,检测区块链上目标区块的完整性且检测成功后设置;

对应地,步骤340包括:向归档节点请求目标区块,在请求失败时向各个共识节点请求目标子块。

具体地,第二状态标记用于指示归档节点对于区块归档的状态。第二状态标记包括第二等待状态(Waiting)、确认状态(Applied)。参照表5,调用区块链上的归档合约中的状态更新接口,将归档合约中的第二状态标记(Status2)置为第二等待状态(Waiting)。归档节点检测区块链上目标区块的完整性且检测成功后,设置第二状态标记置为确认状态。目标共识节点响应于第二等待状态变为确认状态,确定归档节点归档成功。

表5

在目标共识节点确定归档节点已经将目标区块归档完成之后,在步骤340需要请求目标区块时,先向归档节点请求目标区块。如果能够请求成功,则无需向各个共识节点进行请求。但如果请求失败,需向各个共识节点请求目标子块,以根据目标子块恢复出目标区块。例如,参照图21,联盟链共识网络包括两个归档节点,分别是归档节点0和归档节点1。目标共识节点先向归档节点0和归档节点2进行请求目标区块,在请求失败的情况下,目标共识节点向共识节点0、共识节点1、和共识节点2请求目标子块。

该借助归档节点请求目标区块的实施例的好处在于,一方面,由归档节点归档全量的目标区块,在归档节点正常工作的情况下,目标共识节点都能够从归档节点请求得到目标区块,无需每次都要从各个共识节点获取目标子块然后恢复目标区块,大大提高了目标区块的恢复效率。另一方面,即使是归档节点已经故障,导致请求失败,本实施例也能从各个共识节点获取目标子块然后恢复出目标区块,缓解了归档节点中心化恢复的缺陷,提高了区块恢复安全性。

在一实施例中,归档节点为多个归档节点,归档合约记录与目标共识节点绑定的目标归档节点,目标归档节点属于多个归档节点,且确认状态由目标归档节点设置。

在该实施例具体实现时,步骤340包括:

查询归档合约记录的目标归档节点;

向目标归档节点请求目标区块,在请求失败时向各个共识节点请求目标子块。

在该实施例中,参照图22,目标共识节点查询归档合约,由于归档合约中记录绑定的目标归档节点为归档节点0,所以获得目标归档节点为归档节点0。接着,目标共识节点向归档节点0请求目标区块,在请求失败时向各个共识节点请求目标子块。

该实施例的好处在于,即使联盟链共识网络存在多个归档节点,一旦目标共识节点向绑定的目标归档节点请求失败,则不再向其它归档节点进行请求,而是直接向各个共识节点请求目标子块,这样可以缓解归档节点集体故障带来的影响。

在一实施例中,参照图23,步骤340包括:

步骤2310、基于第二数目个目标子块,生成第二子块向量;

步骤2320、从第一权重矩阵的第一数目个行中,获取在第一权重矩阵与第一子块向量相乘时,与第二数目个目标子块相乘的第二数目个行,作为第二权重矩阵;

步骤2330、基于第二子块向量与第二权重矩阵,恢复第一子块向量,并从第一子块向量中获取第二数目个第一子块。

在步骤2310,第二数目个目标子块是第一数目个目标子块的一部分。例如,参照图24A,联盟链共识网络中存在共识节点0、共识节点1、和共识节点2。其中,共识节点0归档有目标子块D

在步骤2320,第二权重矩阵是第一权重矩阵的一部分,是用于将第二数目个目标子块恢复出第二数目个第一子块的矩阵。

在一实施例中,在步骤2320之前,该实施例的联盟链归档方法还包括:根据归档索引,在归档合约中获取与归档索引对应的第一权重矩阵。参照表3,第一权重矩阵与归档索引共同被记录在归档合约中,因此目标共识节点可以从归档合约中获取与归档索引对应的第一权重矩阵。这样做的好处是,可以利用归档合约中的记录快速获取第一权重矩阵,提高了第一权重矩阵的获取效率,从而提高了第二权重矩阵的获取效率。

例如,参照图24B,第一数目为8,第二数目为5,第一权重矩阵为8个行,5个列的矩阵。第一权重矩阵M为{[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0]

,[0,0,0,1,0],[0,0,0,0,1],[1,2,3,4,5],[2,3,4,5,1],[3,4,5,1,2]}。由于接收到5个目标子块为D

在步骤2330中,基于第二子块向量与第二权重矩阵,恢复第一子块向量,并从第一子块向量中获取第二数目个第一子块。具体地,是基于第二权重矩阵的逆矩阵与第二子块向量进行相乘,得到第一子块向量。原理如下公式所示:

其中,

例如,继续参照图24C,基于第二权重矩阵为{[1,0,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[1,2,3,4,5],[2,3,4,5,1]},得到第二权重矩形的逆矩阵为{[1,0,0,0,0],[-1/2,-3/2,-9/2,1,-1/2],[0,1,0,0,0]

,[0,0,1,0,0],[-1/2,1/2,17/2,-2,3/2]}。基于第二权重矩阵的逆矩阵与第二子块向量进行相乘,得到第一子块向量为[D

下面参照图25,详细示例性说明本公开实施例的联盟链归档方法的实施细节。

在步骤2510,目标共识节点在目标共识节点维护的区块链上确定待归档的目标区块;

在步骤2520,将目标区块分成第二数目个第一子块,以形成第一子块向量,获取第一权重矩阵将第一权重矩阵与第一子块向量相乘,得到目标子块向量,目标子块向量包括第一数目个目标子块;

在步骤2530,将第一数目个目标子块分发到联盟链共识网络中的各个共识节点归档,并从区块链上删除目标区块;

在步骤2540,响应于获取目标区块的恢复请求,向归档节点请求目标区块;

在步骤2550,在请求失败时向各个共识节点请求目标子块;

在步骤2560,如果接收到第二数目个所述目标子块,基于第二数目个目标子块,生成第二子块向量;从第一权重矩阵的第一数目个行中,获取在第一权重矩阵与第一子块向量相乘时,与第二数目个目标子块相乘的第二数目个行,作为第二权重矩阵;基于第二子块向量与第二权重矩阵,恢复第一子块向量,并从第一子块向量中获取第二数目个第一子块,从而组合出目标区块。

该实施例的优点包括但不限于:可以做到归档数据中心化存储,去中心化恢复。即使在归档节点宕机时,由于本公开实施例是把目标区块分成子块向各个共识节点备份,在需要恢复目标区块时仍然能够恢复,而将第二数目扩充成第一数目个子块完美地缓解了联盟链共识网络中的共识节点可能退出造成的影响,因此大大提高了归档区块恢复的安全性。以一定的数据冗余为代价,保证了联盟链所有的共识节点可以在不依赖于归档节点的前提下,恢复出被归档的数据。对于n个节点的联盟链,归档后可以降低(n-2)/n的存储开销(例如10个共识节点归档后可以降低80%的存储)。

可以理解的是,虽然上述各个流程图中的各个步骤按照箭头的表征依次显示,但是这些步骤并不是必然按照箭头表征的顺序依次执行。除非本实施例中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时间执行完成,而是可以在不同的时间执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

需要说明的是,在本申请的各个具体实施方式中,当涉及到需要根据目标对象属性信息或属性信息集合等与目标对象特性相关的数据进行相关处理时,都会先获得目标对象的许可或者同意,而且,对这些数据的收集、使用和处理等,都会遵守相关法律法规和标准。此外,当本申请实施例需要获取目标对象属性信息时,会通过弹窗或者跳转到确认页面等方式获得目标对象的单独许可或者单独同意,在明确获得目标对象的单独许可或者单独同意之后,再获取用于使本申请实施例能够正常运行的必要的目标对象相关数据。

图26为本公开实施例提供的联盟链归档装置2600的结构示意图。联盟链归档装置2600位于联盟链共识网络的多个共识节点中的目标共识节点,参见图26,该联盟链归档装置2600包括:

第一确定单元2610,用于在目标共识节点维护的区块链上确定待归档的目标区块;

第一生成单元2620,用于基于目标区块,生成第一数目个目标子块,其中,第一数目个目标子块包括目标区块分成的第二数目个第一子块,第一数目大于第二数目;

分发单元2630,用于将第一数目个目标子块分发到联盟链共识网络中的各个共识节点归档,并从区块链上删除目标区块;

请求单元2640,用于响应于获取目标区块的恢复请求,向各个共识节点请求目标子块,如果接收到第二数目个目标子块,基于第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块。

可选地,第一生成单元2620具体用于:

将目标区块分成第二数目个第一子块,以形成第一子块向量;

获取第一权重矩阵,其中,第一权重矩阵具有第一数目个行和第二数目个列,第一权重矩阵的前第二数目个行构成单位矩阵;

将第一权重矩阵与第一子块向量相乘,得到目标子块向量,目标子块向量包括第一数目个目标子块。

可选地,请求单元2640还具体用于:

基于第二数目个目标子块,生成第二子块向量;

从第一权重矩阵的第一数目个行中,获取在第一权重矩阵与第一子块向量相乘时,与第二数目个目标子块相乘的第二数目个行,作为第二权重矩阵;

基于第二子块向量与第二权重矩阵,恢复第一子块向量,并从第一子块向量中获取第二数目个第一子块。

可选地,在目标共识节点维护的区块链上确定待归档的目标区块之后,联盟链归档装置2600还包括:第四调用单元,用于调用区块链上的归档合约的启动接口,生成归档索引、以及与归档索引对应的第一权重矩阵,记录到归档合约中;

第一生成单元2620具体用于:基于归档索引,在归档合约中获取与归档索引对应的第一权重矩阵;

在从第一权重矩阵的第一数目个行中,获取在第一权重矩阵与第一子块向量相乘时,与第二数目个目标子块相乘的第二数目个行,作为第二权重矩阵之前,请求单元2640还具体用于:根据归档索引,在归档合约中获取与归档索引对应的第一权重矩阵。

可选地,目标区块为连续的多个目标区块,第一生成单元2620具体用于:

将连续的多个目标区块分配到各个共识节点,以便由每个共识节点,基于共识节点分配到的目标区块,生成第一数目个目标子块。

可选地,第一生成单元2620还具体用于:

针对每个目标区块,确定目标区块的第一标识序号与第三数目进行模运算的第一余数,其中,第三数目为分发目标子块时联盟链共识网络的共识节点数;

将目标区块分配到具有第一余数对应的第二标识序号的共识节点。

可选地,在目标共识节点维护的区块链上确定待归档的目标区块之后,联盟链归档装置2600还包括:

第一调用单元(未示出),用于调用区块链上的归档合约的启动接口,在归档合约中相对应地记录归档索引、以及连续的多个目标区块的起始区块标识、和结束区块标识;

请求单元2640具体用于:获取归档索引;基于归档索引,在归档合约中获取与归档索引对应的起始区块标识和结束区块标识,将起始区块标识和结束区块标识之间的区块作为目标区块,并生成目标区块的恢复请求。

可选地,分发单元2630具体用于:

针对每个目标子块,确定目标子块的第三标识序号与第三数目进行模运算的第二余数,第三数目为分发目标子块时联盟链共识网络的共识节点数;

将目标子块分发到具有第二余数对应的第二标识序号的共识节点归档。

可选地,在响应于获取目标区块的恢复请求,向各个共识节点请求目标子块之前,联盟链归档装置2600还包括:

识别单元(未示出),用于识别第三数目个共识节点的可用性;

第二确定单元(未示出),用于确定第三数目个共识节点中的可用共识节点数与第三数目的第一比值;

恢复单元(未示出),用于如果确定第一比值低于第一阈值,向联盟链共识网络中的各个共识节点请求目标子块,基于接收到的第二数目个目标子块恢复第二数目个第一子块,从而组合出目标区块,并返回基于目标区块,生成第一数目个目标子块的步骤。

可选地,恢复单元(未示出)具体用于:

确定第二数目与第一数目的第二比值;

在第二比值的基础上添加比值冗余量,得到第一阈值。

可选地,识别单元(未示出)具体用于:

调用区块链上的归档合约的查询接口,查询联盟链管理合约,以确定在获取目标区块的恢复请求时联盟链共识网络中的共识节点;

获取第三数目个共识节点、与在获取目标区块的恢复请求时联盟链共识网络中的共识节点的交集,作为可用的共识节点。

可选地,恢复单元(未示出)具体用于:

如果确定第一比值低于第一阈值,通过查询接口将归档合约中的重分块标记置为第一值,其中,第一值表示需要对目标区块重新生成目标子块;

查询归档合约中的重分块标记,以当重分块标记为第一值时,向联盟链共识网络中的各个共识节点请求目标子块。

可选地,重分块标记与归档索引对应记录在归档合约中;

恢复单元(未示出)还具体用于:

每隔预定周期,生成查询事务,并确定查询事务的摘要值与归档总数进行模运算的第三余数;

以第三余数作为归档索引,调用查询接口,查询归档合约中归档索引对应的重分块标记。

可选地,在目标共识节点维护的区块链上确定待归档的目标区块之后,联盟链归档装置2600还包括:第二调用单元(未示出),用于调用区块链上的归档合约的启动接口,确定联盟链共识网络中的各个共识节点、第三数目、和第一阈值,与归档索引相对应地记录到归档合约中;

识别单元(未示出)还具体用于:识别归档合约中与归档索引对应的各个共识节点的可用性;

第二确定单元(未示出)还具体用于:确定可用共识节点数、与归档合约中归档索引对应的第三数目的第一比值;

恢复单元(未示出)还具体用于:确定第一比值低于归档合约中归档索引对应的第一阈值。

可选地,在目标共识节点维护的区块链上确定待归档的目标区块之后,联盟链归档装置2600还包括:第五调用单元(未示出),用于调用区块链上的归档合约的状态更新接口,将归档合约中的第一状态标记置为第一等待状态;

在将第一数目个目标子块分发到联盟链共识网络中的各个共识节点归档,并从区块链上删除目标区块之后,第五调用单元(未示出)还用于:调用区块链上的归档合约的状态更新接口,将归档合约中的第一状态标记置为归档完成状态;

在响应于获取目标区块的恢复请求,向各个共识节点请求目标子块之后,第五调用单元(未示出)还用于:调用区块链上的所述归档合约的状态更新接口,将归档合约中的第一状态标记置为恢复状态。

可选地,联盟链共识网络还包括归档节点,其中,归档节点在多个共识节点对要记录到区块链上的区块完成共识后,归档区块;

在目标共识节点维护的区块链上确定待归档的目标区块之后,联盟链归档装置2600还包括:第三调用单元(未示出),用于调用区块链上的归档合约中的状态更新接口,将归档合约中的第二状态标记置为第二等待状态;响应于第二等待状态变为确认状态,确定归档节点归档成功,其中,确认状态由归档节点在识别出第二状态标记变为第二等待状态后,检测区块链上目标区块的完整性且检测成功后设置;

请求单元2640还具体用于:向归档节点请求目标区块,在请求失败时向各个共识节点请求目标子块。

可选地,归档节点为多个归档节点,归档合约记录与目标共识节点绑定的目标归档节点,目标归档节点属于多个归档节点,且确认状态由目标归档节点设置;

请求单元2640还具体用于:

查询归档合约记录的目标归档节点;

向目标归档节点请求目标区块。

可选地,第一确定单元2610具体用于:

在目标共识节点维护的区块链上,确定各个区块的访问频率;

在目标共识节点维护的区块链上,获取各个区块的重要度;

基于访问频率和重要度,确定待归档的目标区块。

参照图27,图27为实现本公开实施例的联盟链归档方法的终端的部分的结构框图,该终端包括:射频(Radio Frequency,简称RF)电路2710、存储器2715、输入单元2730、显示单元2740、传感器2750、音频电路2760、无线保真(wireless fidelity,简称WiFi)模块2770、处理器2780、以及电源2790等部件。本领域技术人员可以理解,图27示出的终端结构并不构成对手机或电脑的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

RF电路2710可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器2780处理;另外,将设计上行的数据发送给基站。

存储器2715可用于存储软件程序以及模块,处理器2780通过运行存储在存储器2715的软件程序以及模块,从而执行对象终端的各种功能应用以及数据处理。

输入单元2730可用于接收输入的数字或字符信息,以及产生与对象终端的设置以及功能控制有关的键信号输入。具体地,输入单元2730可包括触控面板2731以及其他输入装置2732。

显示单元2740可用于显示输入的信息或提供的信息以及对象终端的各种菜单。显示单元2740可包括显示面板2741。

音频电路2760、扬声器2761,传声器2762可提供音频接口。

在本实施例中,该终端所包括的处理器2780可以执行前面实施例的联盟链归档方法。

本公开实施例的终端包括但不限于手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等。本发明实施例可应用于各种场景,包括但不限于联盟链、结构化信息处理、安全技术、数据安全、数据存储、信息技术等。

图28为实施本公开实施例的联盟链归档方法的服务器的部分的结构框图。服务器可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(CentralProcessing Units,简称CPU)2822(例如,一个或一个以上处理器)和存储器2832,一个或一个以上存储应用程序2842或数据2844的存储介质2830(例如一个或一个以上海量存储装置)。其中,存储器2832和存储介质2830可以是短暂存储或持久存储。存储在存储介质2830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器2822可以设置为与存储介质2830通信,在服务器上执行存储介质2830中的一系列指令操作。

服务器还可以包括一个或一个以上电源2826,一个或一个以上有线或无线网络接口2850,一个或一个以上输入输出接口2858,和/或,一个或一个以上操作系统2841,例如Windows ServerTM,Mac OS XTM,UnixTM ,LinuxTM,FreeBSDTM等等。

服务器中的中央处理器2822可以用于执行本公开实施例的联盟链归档方法。

本公开实施例还提供一种计算机可读存储介质,计算机可读存储介质用于存储程序代码,程序代码用于执行前述各个实施例的联盟链归档方法。

本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序。计算机设备的处理器读取该计算机程序并执行,使得该计算机设备执行实现上述的联盟链归档方法。

本公开的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“包含”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或装置不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或装置固有的其它步骤或单元。

应当理解,在本公开中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。

应了解,在本公开实施例的描述中,多个(或多项)的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。

在本公开所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)执行本公开各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

还应了解,本公开实施例提供的各种实施方式可以任意进行组合,以实现不同的技术效果。

以上是对本公开的实施方式的具体说明,但本公开并不局限于上述实施方式,熟悉本领域的技术人员在不违背本公开精神的条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本公开权利要求所限定的范围内。

技术分类

06120116214355