一种在联盟链中修复指定区块数据的方法与流程

文档序号:20439769发布日期:2020-04-17 22:19阅读:400来源:国知局
一种在联盟链中修复指定区块数据的方法与流程

本发明涉及区块链技术领域,一种在联盟链中修复指定区块数据的方法。



背景技术:

目前区块链技术被广泛应用在各个行业,依托区块链技术的数据匿名性、去中心化、数难以篡改的特性,给很多应用场景提供了更为适宜的技术方案,比如在存证应用、数字资产转移应用等。但很多应用并不需要将数据全网公开,只希望限定在一部分成员之中,所以除了公有链的形式,更多的企业或政务应用都选择联盟链来进行实现,链码链只针对某个特定群体的成员和有限的第三方,因其只针对成员开放全部或部分功能,所以联盟链上的读写权限、以及记账规则都按联盟规则来定制。联盟链上的共识过程由预先选好的节点控制,或者由主要管理节点来调度管理。

在政务应用或商务应用中,经常会有一些敏感数据会被有意无意的在违背联盟意愿的情况下上传到区块链上,比如政务应用中,一些违规数据,或者在商业应用中的一些行业机密数据等。这时就需要对区块链数据进行剔除指定数据和修复的操作。

一般的,在公有链中如果出现数据统一性有分歧的情况,系统会产生分叉,分叉后的系统会分裂为两个系统,两个系统分裂后各自运行,互不干扰,从而形成两个“并行时间”,如果用分叉的方法处理联盟链中的特定数据会导致一部分节点脱离整个系统,从而不能参与今后的数据分布式记账,但这种方式在联盟链系统中并不可取。

在联盟链中需要用一种可以剔除特定数据,并维持其他数据真实可靠的方式。



技术实现要素:

有鉴于此,本发明的目的是提供一种在联盟链中修复指定区块数据的方法,能够通过特殊方式剔除特定数据,同时维持其他真实数据真实可靠。

本发明的目的是通过以下技术方案实现的:该种在联盟链中修复指定区块数据的方法包括以下步骤:

步骤s1:暂停运行整个区块链系统;

步骤s2:修改所有节点的配置文件;

步骤s3:经过每个节点的消息交互后,每个节点都获取到其他节点的hash,整个系统中会计算所有节点的hash字符串的整数值,并计算所有节点hash整数值的平均值,最后找到与平均值相差最少的hash字符串的节点,以此节点作为管理节点,并进入init状态;

步骤s4:其中管理节点首先向其余节点发送修复请求消息,消息中携带要剔除的数据的定位信息;

步骤s5:其余节点程序收到消息后,对比自己配置的修改信息,经过确认后,通过响应反馈消息给管理节点,并开始准备修复流程;

步骤s6:管理节点收到所有节点的确认反馈后,首先备份原始数据,然后通知其他非管理节点同步准备的请求消息,消息中携带要剔除的数据的定位信息;

步骤s7:管理节点收到所有节点的确认反馈后,首先备份原始数据,然后通知其他非管理节点同步准备的请求消息,消息中携带要剔除的数据的定位信息;

步骤s8:所有节点删除完规定的数据后,向管理节点返回准备完毕的响应,并进入prep状态;

步骤s9:管理节点收到所有节点的准备完毕响应,进入prep状态;

步骤s10:管理节点进入prep状态后,开始重构第k块区块数据,删除区块中的数据内容,并将区块重新打包,生成新的区块hash,并生成新的区块数据;

步骤s11:管理节点将新的区块链k’作为请求的内容,发送给其他一般节点;

步骤s12:其他节点收到k’后,因为未被剔除的交易结构并未被修改,仍然保持完整的签名,所以其他节点可以验证其他的交易数据的有效性,验证无误后接受新区块k’,并保存数据,附加在本地区块链文件系统之后,然后向管理节点回复k’区块的修复成功响应;

步骤s13:收到所有的针对k’区块的修复成功响应后,由于上一个区块的hash值的改变,之后的所有区块都需要再更新一下hash值内容,所以管理节点在本地根据备份数据重构第k+n个区块,并将新的区块信息发给其他节点;

步骤s14:其他一般节点收到k+n区块的修复请求后,对区块内的数据进行验证,若验证成功,则将区块附加到本地的区块链文件系统之后,并向管理节点回复k+n区块的修复成功响应;

步骤s15:管理节点收到所有节点的k+n区块的修复成功响应,判断是否是最后一个待修复区块,若已经没有待修复的内容,则整个数据重构完毕,向所有一般节点发送修复完毕通知消息,并进入final状态,等待重启;

步骤s16:所有其他一般节点收到请求之后,也随即进入final状态,不再处理任何消息,并等待重启;

步骤s17:待所有节点进入final状态后,修改配置文件(修改启动方式),所有节点以正常模式启动,就可以继续提供区块链接口服务。

特别地,所述步骤s2中,修改所有节点的配值文件包括:(一)修改启动方式,所有节点以修复模式启动;(二)修改修复区块数据信息,包括区块高度k和交易id。

特别地,所述步骤s4、步骤s6中,消息中携带要剔除的数据的定位信息包括数据所在区块和交易id。

本发明的有益效果是:本发明通过将整个系统暂停,在所有节点的认可下,进行数据的维护以及数据清洗,剔除掉不希望在链上存在的数据,同时保持区块链数据的结构有效性,整个操作过程简洁有效,准确率高,安全可靠。

本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书和权利要求书来实现和获得。

附图说明

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步的详细描述,其中:

图1为节点选举过程的流程示意图;

图2为节点准备完毕响应的流程示意图;

图3为重构至修复完毕的流程示意图;

图4为修复前的区块数据示意图;

图5为应用本方法完成修复后的区块数据示意图。

具体实施方式

以下将参照附图,对本发明的优选实施例进行详细的描述。应当理解,优选实施例仅为了说明本发明,而不是为了限制本发明的保护范围。

如图1至图3所示,本发明的一种在联盟链中修复指定区块数据的方法,包括以下步骤:

步骤s1:暂停运行整个区块链系统;

步骤s2:修改所有节点的配置文件;本实施例中,修改所有节点的配值文件包括:(一)修改启动方式,所有节点以修复模式启动;(二)修改修复区块数据信息,包括区块高度k和交易id。

步骤s3:经过每个节点的消息交互后,每个节点都获取到其他节点的hash,整个系统中会计算所有节点的hash字符串的整数值,并计算所有节点hash整数值的平均值,最后找到与平均值相差最少的hash字符串的节点,以此节点作为管理节点,并进入init状态;如图1所示;

步骤s4:其中管理节点首先向其余节点发送修复请求消息,消息中携带要剔除的数据的定位信息;消息中携带要剔除的数据的定位信息包括数据所在区块和交易id。

步骤s5:其余节点程序收到消息后,对比自己配置的修改信息,经过确认后,通过响应反馈消息给管理节点,并开始准备修复流程;

步骤s6:管理节点收到所有节点的确认反馈后,首先备份原始数据,然后通知其他非管理节点同步准备的请求消息,消息中携带要剔除的数据的定位信息;消息中携带要剔除的数据的定位信息包括数据所在区块和交易id。

步骤s7:管理节点收到所有节点的确认反馈后,首先备份原始数据,然后通知其他非管理节点同步准备的请求消息,消息中携带要剔除的数据的定位信息;

步骤s8:所有节点删除完规定的数据后,向管理节点返回准备完毕的响应,并进入prep状态(即图中的prepe);

步骤s9:管理节点收到所有节点的准备完毕响应,进入prep状态;步骤s4至步骤s9如图2所示;

步骤s10:管理节点进入prep状态后,开始重构第k块区块数据,删除区块中的数据内容,并将区块重新打包,生成新的区块hash,并生成新的区块数据;

步骤s11:管理节点将新的区块链k’作为请求的内容,发送给其他一般节点;

步骤s12:其他节点收到k’后,因为未被剔除的交易结构并未被修改,仍然保持完整的签名,所以其他节点可以验证其他的交易数据的有效性,验证无误后接受新区块k’,并保存数据,附加在本地区块链文件系统之后,然后向管理节点回复k’区块的修复成功响应;

步骤s13:收到所有的针对k’区块的修复成功响应后,由于上一个区块的hash值的改变,之后的所有区块都需要再更新一下hash值内容,所以管理节点在本地根据备份数据重构第k+n个区块,并将新的区块信息发给其他节点;

步骤s14:其他一般节点收到k+n区块的修复请求后,对区块内的数据进行验证,若验证成功,则将区块附加到本地的区块链文件系统之后,并向管理节点回复k+n区块的修复成功响应;

步骤s15:管理节点收到所有节点的k+n区块的修复成功响应,判断是否是最后一个待修复区块,若已经没有待修复的内容,则整个数据重构完毕,向所有一般节点发送修复完毕通知消息,并进入final状态,等待重启;

步骤s16:所有其他一般节点收到请求之后,也随即进入final状态,不再处理任何消息,并等待重启;

步骤s17:待所有节点进入final状态后,修改配置文件(修改启动方式),所有节点以正常模式启动,就可以继续提供区块链接口服务。步骤s10至步骤s17如图3所示。

图4为修复前的区块数据情况,图5为修复后的区块数据情况,从两图对比可以看出,通过应用本发明的修复方法,可以精确地剔除掉不希望在链上存在的数据,同时保持区块链数据的结构有效性。

应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。

此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。

进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、ram、rom等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的在联盟链中修复指定区块数据的方法和技术编程时,本发明还包括计算机本身。

计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1