一种区块链数据的删除方法及装置
技术领域
本发明涉及区块链技术领域,尤其涉及一种区块链数据的删除方法及装置。
背景技术
自比特币诞生以来,区块链技术蓬勃发展,以太坊、EOS等技术方案层出不穷,大大推动了区块链技术的发展。
区块链虽然拥有分布式存储和不可篡改等特性,可以保证数据一旦上链,永久存在,但是区块链上的数据随着时间推移,区块数量不断增多,数据存储压力越来越大,因此,如何降低数据存储压力成为了亟需解决的问题。。
发明内容
有鉴于此,本发明提供了一种区块链数据的删除方法及装置,用以解决区块链虽然拥有分布式存储和不可篡改等特性,可以保证数据一旦上链,永久存在,但是区块链上的数据随着时间推移,区块数量不断增多,数据存储压力越来越大的问题。具体方案如下:
一种区块链数据的删除方法,所述区块链由各个区块组成,每一个区块包含至少一个交易,每个交易中包含两个账户,每个账户中包含有预先分配的状态标识,所述状态标识用于表征账户的状态,所述状态包括:正常状态和退出状态,所述删除方法包括:
获取所述区块链中各个账户的状态标识;
依据所述状态标识确定每个交易中的已退出账户,其中,所述已退出账户的状态为退出状态;
获取与所述已退出账户存在关联的待删除数据;
删除所述待删除数据。
上述的方法,可选的,获取与所述已退出账户关联的待删除数据,包括:
针对当前交易,若所述当前交易的账户均为已退出账户,分别获取与所述已退出账户关联的第一链数据和第一状态数据,其中,所述第一链数据和所述第一状态数据组成所述待删除数据。
上述的方法,可选的,还包括:
当节点同步账本区块时,若已知所述已退出账户的账户状态为退出状态,依据所述已退出账户的交易内容更新校验内容;
若未知所述已退出账户的账户状态为退出状态,获取所述已退出账户的账户状态,对所述账户状态进行验证,验证通过后,依据所述账户状态确定目标交易状态,将本地交易状态更新为所述目标交易状态。
上述的方法,可选的,获取与所述已退出账户关联的待删除数据,包括:
针对当前交易,若所述当前交易的账户一方为已退出账户,分别获取与所述已退出账户关联的第二链数据和第二状态数据;
在所述第二状态数据中选取待删除数据。
上述的方法,可选的,还包括:
当节点同步账本区块时,若已知所述已退出账户的账户状态为退出状态,依据所述已退出账户在交易中所属参与方,更新本地账本的本地交易状态;
若未知所述已退出账户的账户状态为退出状态,获取所述已退出账户的账户状态和本地交易状态,依据所述账户状态,确定目标交易状态,当所述目标交易状态和所述本地交易状态不一致时,将所述本地交易状态更新为所述目标交易状态。
一种区块链数据的删除装置,所述区块链由各个区块组成,每一个区块包含至少一个交易,每个交易中包含两个账户,每个账户中包含有预先分配的状态标识,所述状态标识用于表征账户的状态,所述状态包括:正常状态和退出状态,所述删除装置包括:
标识获取模块,用于获取所述区块链中各个账户的状态标识;
确定模块,用于依据所述状态标识确定每个交易中的已退出账户,其中,所述已退出账户的状态为退出状态;
数据获取模块,用于获取与所述已退出账户存在关联的待删除数据;
删除模块,用于删除所述待删除数据。
上述的装置,可选的,所述数据获取模块包括:
第一获取单元,用于针对当前交易,若所述当前交易的账户均为已退出账户,分别获取与所述已退出账户关联的第一链数据和第一状态数据,其中,所述第一链数据和所述第一状态数据组成所述待删除数据。
上述的装置,可选的,还包括:
第一更新单元,用于当节点同步账本区块时,若已知所述已退出账户的账户状态为退出状态,依据所述已退出账户的交易内容更新校验内容;
第二更新单元,用于若未知所述已退出账户的账户状态为退出状态,获取所述已退出账户的账户状态,对所述账户状态进行验证,验证通过后,依据所述账户状态确定目标交易状态,将本地交易状态更新为所述目标交易状态。
上述的装置,可选的,所述数据获取模块包括:
第二获取单元,用于针对当前交易,若所述当前交易的账户一方为已退出账户,分别获取与所述已退出账户关联的第二链数据和第二状态数据;
选取单元,用于在所述第二状态数据中选取待删除数据。
上述的装置,可选的,还包括:
第三更新单元,用于当节点同步账本区块时,若已知所述已退出账户的账户状态为退出状态,依据所述已退出账户在交易中所属参与方,更新本地账本的本地交易状态;
第四更新单元,用于若未知所述已退出账户的账户状态为退出状态,获取所述已退出账户的账户状态和本地交易状态,依据所述账户状态,确定目标交易状态,当所述目标交易状态和所述本地交易状态不一致时,将所述本地交易状态更新为所述目标交易状态。
与现有技术相比,本发明包括以下优点:
本发明公开了一种区块链数据的删除方法,所述区块链由各个区块组成,每一个区块包含至少一个交易,每个交易中包含两个账户,每个账户中包含有预先分配的状态标识,所述状态标识用于表征账户的状态,所述状态包括:正常状态和退出状态,所述删除方法包括:获取所述区块链中各个账户的状态标识;依据所述状态标识确定每个交易中的已退出账户,其中,所述已退出账户的状态为退出状态;获取与所述已退出账户存在关联的待删除数据;删除所述待删除数据。预先为每个交易分配状态标识,依据状态标识确定目标区块链中的已退出账户,根据确定出的处于退出状态的账户来确定需要删除的数据,并进行删除,这种通过状态标识对账户状态进行标记,进而确定待删除数据的方式,保证了被删除数据选取的准确性,避免了将有用数据删除而对区块链造成的影响,同时又能够实现减少区块链中存储资源的占用。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术公开的一种区块链数据的删除方法流程图;
图2为本申请实施例公开的一种账户状态变更示意图;
图3为本申请实施例公开的一种区块链数据的删除装置结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
本发明公开了一种区块链数据的删除方法及装置,应用在对区块链中数据的删除过程中,目前区块链技术广泛应用,而由于区块链的分布式存储和不可篡改性,所以不可以对区块链中的数据进行随意删除,但是随着时间推移,区块数量不断增多,数据存储压力越来越大,如何降低存储压力成为了亟需解决的问题。
发明人研究发现,区块链数据之所以不能被删除,是因为区块链中的数据具有可追溯性,而删除数据可能会导致区块链中数据的不可追溯。发明人同样发现,在区块链中存储数据中,其实有很多历史交易大概率不会再被查询、被关心,也就是说,不会再被进行追溯,而这些数据,仍然停留在区块链上,也无端占用着存储资源,这样的数据显然即使删除,也不会影响区块链的正常工作和性能。但是由于技术限制,目前根本无法确定哪些数据可以被删除,哪些数据必须被保留,从而导致无法执行删除数据的操作以缓解存储压力。
发明人为了解决以上的问题,提出了本方案,本发明实施例中,区块链由各个区块组成,每一个区块包含至少一个交易,每个交易中包含两个账户,每个账户中包含有预先分配的状态标识,所述状态标识用于表征账户的状态,所述状态包括:正常状态和退出状态,依据状态标识确定目标区块链中的已退出账户,根据确定出的处于退出状态的账户来确定需要删除的数据,并进行删除,这种通过状态标识对账户状态进行标记,进而确定待删除数据的方式,保证了被删除数据选取的准确性,避免了将有用数据删除而对区块链造成的影响,同时又能够实现减少区块链中存储资源的占用。
本发明实施例中,所述区块链中的每一个区块包括:区块头和区块体两个部分:其中,区块头里存储着区块的头信息,包含父区块(上一个区块)的哈希值,区块链的版本信息,时间戳、挖矿难度、随机数、MerkleRoot(Merkle根)等信息。区块体包含了区块的详细数据,包括若干个交易或其他信息,每个交易内容记为TXN_CONTENT,区块头和区块体通过MerkleRoot信息联系在一起,篡改其中任何一个交易内容都无法恢复出MerkleRoot,因此,提供一个校验路径和具体的交易内容,可以判断交易是否在这个区块中。
交易数据中包含交易输入地址(发起方)、交易输出地址(接收方)、输出地址数量、输入地址数量、数字签名、版本号(区块链协议版本)、交易生成时间等信息。一个交易的哈希值由下列计算方法得到:HASH(ENCODE(TXN_CONTENT))。各个交易hash最终可以汇总成MerkleRoot。
交易的数据包含的数据如表1所示:
表1
CHECK_INFO包括的信息如表2所示:
表2
在MerkleRoot的计算中,由NEW_HASH替换TXN_HASH来计算,基于Merkle树计算MerkleRoot的逻辑不变。
本发明实施例中,基于上述的区块结构,所述删除方法的执行流程如图1所示,包括步骤:
S101、获取所述区块链中各个账户的状态标识;
本发明实施例中,遍历所述区块链中的各个区块,针对每一个区块,获取对应区块体中各个交易的状态标识,其中,状态标识的获取可以在指定位置获取或者在预设标识处获取,本发明实施例中,对具体的获取形式不进行限定。
S102、依据所述状态标识确定每个交易中的已退出账户,其中,所述已退出账户的状态为退出状态;
本发明实施例中,针对每一个交易,依据所述当前交易中交易双方账户的状态标识,确定所述当前交易中是否存在已退出账户,例如,所述当前交易中交易双方的状态标识为11,表示交易双方账户均处于退出状态,则所述当前交易中交易双方账户均为已退出账户,若所述当前交易中交易双方账户的状态标识为10或者01,表示交易双方中一方账户处于退出状态,则所述当前交易中交易一方账户为已退出账户,若所述当前交易中交易双方账户的状态标识为00,标识交易双方账户均处于正常状态。
S103、获取与所述已退出账户存在关联的待删除数据;
本发明实施例中,区块链数据包含两部分数据,链数据和状态数据。链数据是指区块链数据,即一系列区块通过链式结构组成的账本数据,记录的是事件信息,例如A给B转了100元;状态数据中记录的是账本和智能合约的当前状态,例如A在某个区块后余额100元,B余额120元。每个区块执行后,都能够产生对应于某个区块的状态数据,因此,所述待删除数据由链数据和状态数据两部分组成,依据当前交易是一方账户退出还是双方账户退出,所述待删除数据的组成不同。
S104、删除所述待删除数据。
本发明实施例中,由于所述待删除数据由链数据和状态数据组成,因此,针对所述待删除数据分别在对应的位置将所述待删除数据中包含的链数据和状态数据进行删除,优选的,链数据的存储位置为TXN_CONTENT,在删除对应的链数据时,只需要将TXN_CONTENT中的内容清空,状态数据的存储在状态数据库,在所述状态数据库中将对应的状态数据进行删除,当两者均删除时,完成所述待删除数据的删除。
本发明公开了一种区块链数据的删除方法,所述区块链由各个区块组成,每一个区块包含至少一个交易,每个交易中包含两个账户,每个账户中包含有预先分配的状态标识,所述状态标识用于表征账户的状态,所述状态包括:正常状态和退出状态,所述删除方法包括:获取所述区块链中各个账户的状态标识;依据所述状态标识确定每个交易中的已退出账户,其中,所述已退出账户的状态为退出状态;获取与所述已退出账户存在关联的待删除数据;删除所述待删除数据。预先为每个交易分配状态标识,依据状态标识确定目标区块链中的已退出账户,根据确定出的处于退出状态的账户来确定需要删除的数据,并进行删除,这种通过状态标识对账户状态进行标记,进而确定待删除数据的方式,保证了被删除数据选取的准确性,避免了将有用数据删除而对区块链造成的影响,同时又能够实现减少区块链中存储资源的占用。
本发明实施例中,优选的,区块链中账户状态有三种状态,正常状态、冻结状态和退出状态,其中,冻结是退出前的临界状态,在交易发生时,会为交易中的双方账户分配交易标识,此时的交易双方账户的交易标识为00,本发明实施例中,以交易双方中的一个账户发起退出申请为例进行说明,退出过程如图2所示,账户发起退出申请,进入冻结状态,退出申请通过,且用户最终确认,则账户进入退出状态,若退出申请未通过或者账户取消退出申请,则账户进入正常状态。交易双方账户均退出的情况与一方账户退出的情况相同,在此不再赘述。假设账户A发起账户退出申请,退出申请在区块链上公示,此时账户A处于冻结状态,在一段时间内,账户A将无法再次发起交易,链上账户对此消息进行审核,其中,审核过程即查看账户A的退出请求,校验其是否具备退出条件,验证步骤可以线下完成,响应可以通过智能合约的方式提交。若同意,则发送通过响应;若失败,则发送拒绝响应。在规定时间内,根据预先设定的退出条件判断是否允许账户退出,判断条件可以由具体的区块链制定。可选地,可以是严格的拒绝策略,有账户拒绝则拒绝退出;也可以是与申请退出账户存在历史交易的账户都同意账户才能退出;也可以是投票策略,支持用户达到一定数量才可以通过等等。若退出申请被拒绝,账户A从冻结状态恢复至正常状态。若退出申请被通过,账户A发送确认退出消息(包含账户A对退出消息的签名),等到该退出消息上链若干个块后,账户A正式退出,此后账户A的任意交易都不会再被验证通过。优选的,账户A发送确认退出之前,账户A可以取消退出,账户A恢复至正常状态
进一步的,所述区块链支持查询账户信息的接口,除提供账户余额、nonce等基本信息外,还需要提供账户状态信息,若账户为退出状态,则还需要包含账户退出信息的签名。
本发明实施例中,获取与所述已退出账户关联的待删除数据过程中,针对当前交易,若所述当前交易的账户均为已退出账户,分别获取与所述已退出账户关联的第一链数据和第一状态数据,其中,所述第一链数据和所述第一状态数据组成所述待删除数据。
当发现交易双方账户都退出,此时修改当前交易中交易双方账户的标识状态为11,表示交易处于删除状态,当接收到账户退出信息,遍历历史交易信息的过程中,检查到该账户参与的某个交易双方均退状态,同时,根据TXN_CONTENT里的内容更新CHECK_INFO,并删除TXN_CONTENT信息。
当节点同步账本区块时,根据同步获取的交易信息:
交易状态显示删除情况,节点会获取并校验交易双方的状态,若交易双方确实都是退出状态,利用CHECK_INFO的信息校验交易HASH是否正确,若正确,则同步区块。
交易状态为正常,检查本地状态,若交易双方处于删除状态,则按照上述方法,修改交易状态和内容后更新至区块链存储。
本发明实施例中,获取与所述已退出账户关联的待删除数据过程中,针对当前交易,若所述当前交易的账户一方为已退出账户,分别获取与所述已退出账户关联的第二链数据和第二状态数据;在所述第二状态数据中选取待删除数据。其中,选取所述待删除数据可以依据具体的情况进行设定,例如,当节点检查到某账户A处于退出状态后,会删除状态数据库中账户A域下相关状态信息,例如余额,交易记录的关联信息等,需要注意的是,这里删除的是交易记录的关联信息,若交易对方未退出,具体交易信息暂时不删除。同时修改所述第二链数据的交易状态为01或者10。通过减少状态数据库的数据信息,达到了数据删除的目的,减少区块链的数据存储
本发明实施例中,通过建立账户退出机制和新的区块结构,一方面,对于交易双方都已经退出的交易,可以删除交易信息,减少链数据的大小,同时,新的区块结构在减少无关的同时,保持了交易和区块的可验证能力,保证了区块链的不可篡改;另一方面,对于那些退出的账户,可以删除状态数据库中该账户域下的状态信息,进一步减少状态数据库的存储;同时,账户退出机制丰富了区块链的账户模型,后续账户模型也可以更加灵活。
基于上述的一种区块链数据的删除方法,本发明实施例中,还提供了一种区块链数据删除装置,其中,所述区块链由各个区块组成,每一个区块包含至少一个交易,每个交易中包含两个账户,每个账户中包含有预先分配的状态标识,所述状态标识用于表征账户的状态,所述状态包括:正常状态和退出状态,所述删除装置的结构框图如图3所示,所述删除装置包括:
标识获取模块201、确定模块202、数据获取模块203和删除模块204。
其中,
所述标识获取模块201,用于获取所述区块链中各个账户的状态标识;
所述确定模块202,用于依据所述状态标识确定每个交易中的已退出账户,其中,所述已退出账户的状态为退出状态;
所述数据获取模块203,用于获取与所述已退出账户存在关联的待删除数据;
所述删除模块204,用于删除所述待删除数据。
本发明公开了一种区块链数据的删除装置,所述区块链由各个区块组成,每一个区块包含至少一个交易,每个交易中包含两个账户,每个账户中包含有预先分配的状态标识,所述状态标识用于表征账户的状态,所述状态包括:正常状态和退出状态,所述删除装置包括:获取所述区块链中各个账户的状态标识;依据所述状态标识确定每个交易中的已退出账户,其中,所述已退出账户的状态为退出状态;获取与所述已退出账户存在关联的待删除数据;删除所述待删除数据。预先为每个交易分配状态标识,依据状态标识确定目标区块链中的已退出账户,根据确定出的处于退出状态的账户来确定需要删除的数据,并进行删除,这种通过状态标识对账户状态进行标记,进而确定待删除数据的方式,保证了被删除数据选取的准确性,避免了将有用数据删除而对区块链造成的影响,同时又能够实现减少区块链中存储资源的占用。
本发明实施例,所述数据获取模块203包括:第一获取单元205。
其中,
所述第一获取单元205,用于针对当前交易,若所述当前交易的账户均为已退出账户,分别获取与所述已退出账户关联的第一链数据和第一状态数据,其中,所述第一链数据和所述第一状态数据组成所述待删除数据。
本发明实施例中,所述数据获取模块203还包括:
第一更新单元206和第二更新单元207。
其中,
所述第一更新单元206,用于当节点同步账本区块时,若已知所述已退出账户的账户状态为退出状态,依据所述已退出账户的交易内容更新校验内容。
所述第二更新单元207,用于若未知所述已退出账户的账户状态为退出状态,获取所述已退出账户的账户状态,对所述账户状态进行验证,验证通过后,依据所述账户状态确定目标交易状态,将本地交易状态更新为所述目标交易状态。
本发明实施例中,所述数据获取模块203包括:
第二获取单元208和选取单元209。
其中,
所述第二获取单元208,用于针对当前交易,若所述当前交易的账户一方为已退出账户,分别获取与所述已退出账户关联的第二链数据和第二状态数据;
所述选取单元209,用于在所述第二状态数据中选取待删除数据。
本发明实施例中,所述数据获取模块203还包括:
第三更新单元210和第一更新单元211。
其中,
所述第三更新单元210,用于当节点同步账本区块时,若已知所述已退出账户的账户状态为退出状态,依据所述已退出账户在交易中所属参与方,更新本地账本的本地交易状态;
所述第四更新单元211,用于若未知所述已退出账户的账户状态为退出状态,获取所述已退出账户的账户状态和本地交易状态,依据所述账户状态,确定目标交易状态,当所述目标交易状态和所述本地交易状态不一致时,将所述本地交易状态更新为所述目标交易状态
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上对本发明所提供的一种区块链数据的删除方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。