一种基于中心化块链式账本的数据块删除方法
技术领域
本说明书实施例涉及信息技术领域,尤其涉及一种基于中心化块链式账本的数据块删除方法。
背景技术
中心化块链式账本,区别于去中心化的块链式账本(如区块链网络中各节点分布式维护的区块链),是指中心化的数据库服务端维护的本地数据库。有时,也将中心化块链式账本称为Ledger Data Base(Ledger DB)。
中心化块链式账本是在区块链存储方案的基础上进行改进得到的新型存储方案,其能够克服了区块链存储存在的吞吐量低、响应时间长等问题。中心化块链式账本的服务对象通常是企业级用户,用户一般在数据库服务端注册账户,并通过账户将自身业务产生的业务数据封装成业务交易,将业务交易提交给数据库服务端,数据库服务端受理业务交易后,会基于一定的成块条件,将若干业务交易打包成数据块写入中心化块链式账本进行存储。
中心化块链式账本中,类似于传统的区块链,数据块间按照成块时间先后顺序依次链接,每个数据块中携带有本数据块中各业务交易构成的梅克尔-帕特里夏树(Merkle-Patricia Tree,MPT)的根哈希值,此外,后一个数据块的块头中携带有前一个数据块的块哈希(即对块头进行哈希计算得到的哈希值),如此确保中心化块链式账本中的业务交易无法被轻易篡改。还需要说明的是,中心化块链式账本中序号为1的数据块(即第一个数据库)为创世数据块,其中一般会携带中心化块链式账本的配置信息(如账本创建时间,账本维护方信息、账本有效期等)。
在实际应用中,有时用户想要将其拥有的产生时间过于久远的业务数据从中心化块链式账本中删除,从而节约需要支付给数据库服务端的存储费用。为此,需要一种基于中心化块链式账本的数据块删除方法。
发明内容
本申请实施例是为了解决现有的中心化块链式账本不支持删除数据库的技术问题而提出的。
为解决上述技术问题,本申请实施例是这样实现的:
根据本说明书实施例的第1方面,提供一种基于中心化块链式账本的数据块删除方法,应用于数据库服务端,所述数据库服务端维护有中心化块链式账本;
所述数据库服务端还维护有状态树;针对所述状态树中每个叶子节点,该叶子对应的键key为一个业务关键词,该叶子节点对应的值value为中心化块链式账本中存储的包含该业务关键词的业务交易的数量;不同叶子节点对应于不同的key;所述数据库服务端每当向中心化块链式账本中写入数据块时,更新所述状态树,并将更新后的状态树根哈希写入所述数据块;
所述方法包括:
接收块删除指令;
确定所述块删除指令指定的待删除数据块集合;所述待删除数据块集合包括序号为1至序号为N的N个待删除数据块,N>1;
从中心化块链式账本中删除所述待删除数据块集合,并且,重新生成创世数据块;其中,重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希、第N个待删除数据块携带的状态树根哈希。
根据本说明书实施例的第2方面,提供另一种基于中心化块链式账本的数据块删除方法,应用于数据库服务端,所述数据库服务端维护有中心化块链式账本;
所述数据库服务端还维护有状态树;针对所述状态树中每个叶子节点,该叶子对应的键key为一个业务关键词,该叶子节点对应的值value为中心化块链式账本中存储的包含该业务关键词的业务交易的数量;不同叶子节点对应于不同的key;所述数据库服务端每当向中心化块链式账本中写入数据块时,更新所述状态树,并将更新后的状态树根哈希写入所述数据块;
所述方法包括:
接收块删除指令;
确定所述块删除指令指定的待删除数据块集合;所述待删除数据块集合包括序号为1至序号为N的N个待删除数据块,N>1;
从中心化块链式账本中删除所述待删除数据块集合,将待删除的每个数据块对应的状态树删除,并且,重新生成创世数据块;其中,重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希、第1~N个待删除数据块分别对应的状态树。
根据本说明书实施例的第3方面,提供一种基于中心化块链式账本的数据块删除装置,应用于数据库服务端,所述数据库服务端维护有中心化块链式账本;
所述数据库服务端还维护有状态树;针对所述状态树中每个叶子节点,该叶子对应的键key为一个业务关键词,该叶子节点对应的值value为中心化块链式账本中存储的包含该业务关键词的业务交易的数量;不同叶子节点对应于不同的key;所述数据库服务端每当向中心化块链式账本中写入数据块时,更新所述状态树,并将更新后的状态树根哈希写入所述数据块;
所述装置包括:
接收模块,接收块删除指令;
确定模块,确定所述块删除指令指定的待删除数据块集合;所述待删除数据块集合包括序号为1至序号为N的N个待删除数据块,N>1;
删除模块,从中心化块链式账本中删除所述待删除数据块集合,并且,重新生成创世数据块;其中,重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希、第N个待删除数据块携带的状态树根哈希。
根据本说明书实施例的第4方面,提供另一种基于中心化块链式账本的数据块删除装置,应用于数据库服务端,所述数据库服务端维护有中心化块链式账本;
所述数据库服务端还维护有状态树;针对所述状态树中每个叶子节点,该叶子对应的键key为一个业务关键词,该叶子节点对应的值value为中心化块链式账本中存储的包含该业务关键词的业务交易的数量;不同叶子节点对应于不同的key;所述数据库服务端每当向中心化块链式账本中写入数据块时,更新所述状态树,并将更新后的状态树根哈希写入所述数据块;
所述装置包括:
接收模块,接收块删除指令;
确定模块,确定所述块删除指令指定的待删除数据块集合;所述待删除数据块集合包括序号为1至序号为N的N个待删除数据块,N>1;
删除模块,从中心化块链式账本中删除所述待删除数据块集合,将待删除的每个数据块对应的状态树删除,并且,重新生成创世数据块;其中,重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希、第1~N个待删除数据块分别对应的状态树。
通过本说明书实施例中所提供的方案,为中心化块链式账本配置关联的状态树,状态树用于针对每个业务关键词,动态记录中心化块链式账本中存储的该业务关键词对应的业务交易的数量。由于状态树是在每次向账本中写入数据块时进行更新的,而数据块成块就意味着数据块中的交易必然会存入账本,因此,相当于每个数据块都对应有一个状态树,表明该数据块成块时的世界状态(即各业务关键词对应的被账本存储的业务交易的数量)。而又由于每个数据块中携带有对应的状态树的根哈希,因此,可以确保对应的状态树不可篡改,从状态树中读取的某个业务关键词对应的已存储业务交易的数量是可信的。
任一用户想要删除自己之前提交给中心化块链式账本历史数据时,可以向数据库服务端发送块删除指令,请求数据库服务端从中心化块链式账本中删除包含该用户指定的历史数据的数据库。由于账本中前后相邻的数据块之间存在耦合性,因此,通常需要从创世数据块开始依次向后删除,删除之后,还需要重新生成创世数据块以便保留账本配置信息与最后一个被删除数据块的块哈希。此外,如果在删除历史数据块的同时,不删除对应的状态树,则需要将最后一个被删除数据块对应的状态树根哈希写入重新生成的创世块;如果在删除历史数据块的同时,删除对应的状态树,则需要将每个被删除数据块对应的状态树写入重新生成的创世块。
通过本说明书实施例,可以在从中心化块链式账本中删除历史数据块的情况下,依然不破坏中心化块链式账本的可用性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本说明书提供的一种基于中心化块链式账本的数据存储系统示意图;
图2是本说明书实施例提供的一种基于中心化块链式账本的交易存储方法的流程示意图;
图3是本说明书实施例提供的一种基于中心化块链式账本的交易完整性验证方法的流程示意图;
图4是本说明书实施例提供的一种基于中心化块链式账本的数据块删除方法的流程示意图;
图5是本说明书实施例提供的一种基于中心化块链式账本的交易完整性验证方法的流程示意图;
图6是本说明书实施例提供的一种基于中心化块链式账本的数据块删除装置的结构示意图;
图7是本说明书实施例提供的另一种基于中心化块链式账本的数据块删除装置的结构示意图;
图8是本说明书实施例提供的一种基于中心化块链式账本的交易完整性验证装置的结构示意图;
图9是用于配置本说明书实施例方法的一种设备的结构示意图。
具体实施方式
图1是本说明书提供的一种基于中心化块链式账本的数据存储系统示意图。如图1所示,数据存储系统包括中心化的数据库服务端与多个客户端。其中,数据库服务端负责维护中心化块链式账本,每个客户端对应于一个企业级用户(机构),每个企业级用户自身又进一步对接一个或多个个人用户。
例如,外卖平台与电商平台分别作为用户在数据库服务端上进行注册,获得用户账户,并且,分别在自己的设备上安装数据库服务端提供的客户端,在客户端中登录用户账户,从而具有与数据库服务端进行数据交互的能力。
而外卖平台与电商品台又分别对接各自的大量个人用户。某个个人用户使用自己的手机上安装的外卖客户端购买一份外卖食品后,外卖平台的设备会生成一外卖订单记录(即外卖平台基于业务产生的业务数据),外卖平台会通过自己在数据库服务端注册的用户账户将订单记录封装成交易(类似于区块链,本文所述的交易是适用于中心化块链式账本存储的专用数据结构),将交易提交给数据库服务端,以便数据库服务端将交易封装进数据库写入中心化块链式账本进行存储。类似地,电商平台也会将基于电商业务产生的每个电商订单封装成交易提交给数据库服务端。
为了描述的方便,后文所述的用户是指数据库服务端所服务的企业级用户,后文所述的用户账户,是指企业级用户在数据库服务端注册的账户。
通常,一个用户向数据库服务端提交的交易的先后顺序体现了交易所封装的业务数据产生的先后顺序,而数据库服务端可以根据同一用户提交的交易的先后顺序,优先将在先收到的交易进行数据块封装,如此,在中心化块链式账本中,对于同一用户提交的若干交易而言,封装于靠前数据块中的交易的产生时间往往早于封装于靠后数据库中的交易的产生时间。
因此,某个用户如果出于节省存储费用的考虑,想要将产生时间过于久远的交易(这些历史交易封装的业务数据往往已不具有使用价值)从中心化块链式账本中删除,则相当于请求数据库服务端将封装有这些历史交易的每个数据块进行删除。
需要说明的是,一方面,对于中心化块链式账本中的每个数据块,该数据块的块头中通常包含块体中所有交易构成的梅克尔树的根哈希(用于确保本数据块内所有交易不可篡改),一旦数据块中的任一交易被删除,则该数据块也就失去了存证的意义,另一方面,由于数据块服务端不仅仅是为一个用户服务,每个数据块中包含的交易也不仅仅来自于同一个用户,因此,即便某个用户只是请求删除自己提交的历史交易,数据块服务端在操作层面,也只能选择将凡是涉及这些历史交易的数据块删除。
还需要说明的是,中心化块链式账本中先后相邻的数据块之间具有耦合性,后一个数据块的块头中携带有前一个数据块的块头对应的哈希值,因此,即便某个用户请求删除的多个历史交易仅涉及个别不连续的数据块,数据库服务端从操作层面,也只能选择从创世数据块开始连续向后删除数据块,直至实现将该用户请求删除的所有历史交易都删除的效果为止。
此外,考虑到中心化块链式账本中的第1个数据块(创世数据块)往往需要携带中心化块链式账本的账本配置信息,因此,如果从中心化块链式账本从创世数据块开始删除一串数据块(包括删除原创世数据块),则需要重新生成创世数据块。
重新生成的创世数据块可以包含原创世数据块携带的账本配置信息,以及包含删除的最后序位(第N个)的数据块对应的块哈希(以便与保留的第N+1个数据块携带的第N个数据块的块哈希匹配,从而保留第N+1个数据块与被删除的数据块之间的耦合性)。
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图2是本说明书实施例提供的一种基于中心化块链式账本的交易存储方法的流程示意图,包括如下步骤:
S200:当确定满足预设成块条件时,将已受理的多个业务交易打包成待写入账本的数据块。
图2所示方法流程的执行主体是中心化的数据库服务端。
在本说明书实施例中,数据库服务端维护有中心化块链式账本。数据库服务端还维护有状态树;针对所述状态树中每个叶子节点,该叶子对应的键key为一个业务关键词,该叶子节点对应的值value为中心化块链式账本中存储的包含该业务关键词的业务交易的数量;不同叶子节点对应于不同的key。
此处对状态树进行介绍。状态树实际上属于一种MPT,状态树原本是区块链领域的概念,在以太坊协议中,将用户账户视为key,将账户的状态(如以太币余额)视为value,将每个用户对应的key-value作为状态树的一个叶子节点。在以太坊协议中,状态树用于实现对全部用户的账户状态进行动态更新,每一次共识完成得到区块时,就更新一次状态树,并且将更新后的状态树的根哈希写入区块。如此,区块写入区块链中之后,就实现了对用户的账户状态变化过程的锚定。
而在本说明书中实施例中,可以将数据库服务端所服务的所有用户定义的全量业务关键词视为一个个key,将每个业务关键词对应的已存入账本的业务交易的数量视为value,以这样的key-value作为状态树的叶子节点。
在本说明书实施例中,预设成块条件可以根据实际需要指定。例如,数据库服务端可以每经过一定时长时,将已受理的一定数量的业务交易打包成待写入账本的数据块。又如,数据库服务端可以每当监测到已受理的业务交易的总容量大于某个阈值时,将已受理的多个业务交易打包成待写入账本的数据块。
需要说明的是,数据库服务端已受理的交易,是指用户账户已经构建并提交给数据库服务端,而数据库服务端还未打包成数据块的交易。还需要说明的是,中心化块链式账本中存储的交易,通常主要是业务交易,此外,还可以由其他类型的交易,如用户账户也可以向数据库服务端发送一些请求性交易或指令性交易,这些交易也会被写入账本。一般而言,只有业务交易才会包含业务关键词。
S202:根据所述数据块中每个业务交易包含的业务关键词,更新所述状态树,并将更新后的所述状态树的根哈希写入所述数据块。
在本说明书实施例中,数据库服务端在将打包成的数据块写入账本之前,需要执行步骤S202。需要说明的是,当前数据块中的每个交易不一定都是业务交易。
数据库服务端需要将当前数据块中每个业务交易涉及的业务关键词都确定出来,然后针对确定出的每个业务关键词,统计当前数据块中携带该业务关键词的业务交易的数量,并根据统计结果来更新状态树,然后还要将更新后的状态树的根哈希写入当前数据块。
具体而言,若所述数据块中的M个业务交易包含有同一个非首次出现的业务关键词,则在所述状态树中定位该业务关键词对应的叶子节点,并将定位到的叶子节点对应的value增加M。
若所述数据块中的N个业务交易包含有同一个首次出现的业务关键词,则在所述状态树中增加对应于该业务关键词的叶子节点;增加的叶子节点对应的key为该业务关键词,对应的value为N。
S204:将所述数据块写入中心化块链式账本。
可以理解,对于中心化块链式账本中的每个数据块而言,其都有对应的一个版本的状态树。中心化块链式账本中最后一个数据块(当前最新数据块)对应的状态树,就是最新版本的状态树。最新版本之前的版本,就是历史版本。
在本说明书实施例中,数据库服务端可以将历史版本的状态树删除,也可以将历史版本的状态树保留,存入历史状态数据库中。
通过本说明书实施例中所提供的方案,为中心化块链式账本配置关联的状态树,状态树用于针对每个业务关键词,动态记录中心化块链式账本中存储的该业务关键词对应的业务交易的数量。由于状态树是在每次向账本中写入数据块时进行更新的,而数据块成块就意味着数据块中的交易必然会存入账本,因此,相当于每个数据块都对应有一个状态树,表明该数据块成块时的世界状态(即各业务关键词对应的被账本存储的业务交易的数量)。而又由于每个数据块中携带有对应的状态树的根哈希,因此,可以确保对应的状态树不可篡改,从状态树中读取的某个业务关键词对应的已存储业务交易的数量是可信的。
图3是本说明书实施例提供的一种基于中心化块链式账本的交易完整性验证方法的流程示意图,包括:
S300:获取用户账户发送的完整性验证请求。
图3所示方法的执行主体是数据库服务端。
本文中所述的完整性验证,是指针对某个业务关键词,由数据库服务端验证用户已提交的该业务关键词对应的全部业务交易是否都存储于账本中。
一般而言,所述完整性验证请求包含所述用户账户指定的业务关键词。
S302:执行交易统计操作。
具体而言,数据库服务端从中心化块链式账本中统计包含所述业务关键词的业务交易的第一数量。
S304:基于维护的状态树,确定以所述业务关键词为key的叶子节点对应的value,作为第二数量。
步骤S304中的所述的状态树,是指中心化块链式账本中最后一个数据块(最新数据块)对应的状态树,其是最新版本的全局状态树。
S306:判断所述第一数量与所述第二数量是否一致,若判断结果为是,则向所述用户账户返回验证成功结果。
如果第一数量与第二数量相等,则说明通过完整性验证。
此外,由于完整性验证不通过可能是数据库服务端的系统偶然故障导致,因此,如果第一数量与第二数量不相等,则可以重新执行交易统计操作,通过再次执行,可能会避免偶然的系统故障。
另外,也可以在判断结果为否的情况下(或者连续两次判断结果为否的情况下),向所述用户账户返回验证失败结果。
图4是本说明书实施例提供的一种基于中心化块链式账本的数据块删除方法的流程示意图,包括如下步骤:
S400:接收块删除指令。
图4所示方法流程的执行主体是中心化的数据库服务端。
在本说明书实施例中,块删除指令可以不是交易这一数据结构,而是基于传统的客户端/服务端架构下,客户端向服务端发送的指令报文。数据块服务端对块删除指令进行处理。
S402:确定所述块删除指令指定的待删除数据块集合。
可以有多种方式确定块删除指令指定的待删除数据块集合。需要强调的是,在图4所示的方法实施例中,不论采用何种方式确定待删除数据块集合,待删除数据块集合需要满足:包括序号为1至序号为N的N个待删除数据块,N>1。
例如,用户账户可以在块删除指令中携带待删除交易标识集合,用于指定用户账户指令删除哪些历史交易。数据块服务端可以根据所述块删除指令中携带的待删除交易标识集合,将凡是封装有待删除交易标识集合中任一交易标识对应的交易的数据块加入到待删除数据块集合。
又如,用户账户可以在块删除指令中携带待删除数据块的序号范围[1,N],以便数据库服务端将第1个数据块至第N个数据块确定为待删除数据块。
S404:从中心化块链式账本中删除所述待删除数据块集合,并且,重新生成创世数据块。
数据块服务端在删除数据块之前,可以先对待删除的1-N数据块进行完整性验证(即通过复盘交易的方式,将第1-第N个数据块重新推演一次,确保数据块内部各交易的耦合性以及数据块之间耦合性),确认无误后,再进行删除。
如果在删除历史数据块的同时,不删除对应的状态树,则重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希以及、第N个待删除数据块携带的状态树根哈希。原创世数据块是指被删除的序号为1的数据块。
如果在删除历史数据块的同时,删除对应的状态树,则重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希以及第1~N个待删除数据块分别对应的状态树。
此处需要说明的是,账本配置信息可以是指与账本配置有关的任何信息。例如创建账本的账本创建交易,其中包含账本创建时间、账本创建方标识等信息。数据块对应的块哈希,一般是指对数据块的块头进行哈希计算得到的哈希值。
在本说明书实施例中,可以将重新生成的创世数据块存储至删除的第N个数据块原本所在的存储位置(即拼接到第N+1个数据块之前)。
此外,在本说明书实施例中,块删除指令具体还可以是块删除交易这一数据结构。如此,数据库服务端还需要将所述块删除交易写入中心化块链式账本。进一步地,还可以将所述块删除交易在中心化块链式账本中的存储位置信息也写入重新生成的创世数据块(具体是写入块头),以便根据重新生成的创世数据块可以定位到相应的块删除交易进行查阅。
块删除交易中可以携带如下信息:请求删除数据块的用户账户的标识、请求时间、请求删除的数据块范围等。
交易在中心化块链式账本中的存储位置,具体可以是指交易所在的数据块的序号(或称块高)以及交易在数据块中的具体位置(即偏移量offset)。
另外,在本说明书实施例中,可以将重新生成的创世数据块对应的块哈希写入块删除交易对应的交易日志,并且将块删除交易与相应的交易日志一并写入中心化块链式账本。这种情况下,可以不需要将重新生成的创世数据块拼接到第N+1个数据块之前,而是另行存储,根据所述交易日志可以查询到重新生成的创世数据块。
图5是本说明书实施例提供的一种基于中心化块链式账本的交易完整性验证方法的流程示意图,包括:
S500:获取用户账户发送的完整性验证请求。
图5所示方法流程的执行主体是数据块服务端。在实施图5所示方法流程之前,已经预先基于图4所示的方法从中心化块链式账本中删除数据块。这意味着,在实施图5所示的方法流程时,中心化块链式账本中的一些数据块已经被删除。
S502:执行交易统计操作。
具体而言,从中心化块链式账本中统计包含所述业务关键词的业务交易的第一数量。
由于数据库服务端可能出现系统故障,因此可能对第一数量统计出错。
S504:基于创世数据块对应的状态树,确定以所述业务关键词为key的叶子节点对应的value,作为第二数量。
S506:基于最后一个数据块对应的状态树,确定以所述业务关键词为key的叶子节点对应的value,作为第三数量。
S508:计算第三数量与第二数量的差值,作为第四数量。
第四数量,即为目前中心化块链式账本中实际应当存储的所述业务关键词对应的业务交易的数量。
S510:判断所述第一数量与所述第四数量是否一致,若判断结果为是,则向所述用户账户返回验证成功结果。
若判断结果为否,则重新执行交易统计操作。
或者,如果判断结果为否(或多次判断结果都为否),则向用户账户返回验证失败结果。
关于图5所示方法的说明,可以参考对图3所示方法的说明进行理解,不再赘述。
图6是本说明书实施例提供的一种基于中心化块链式账本的数据块删除装置的结构示意图,应用于数据库服务端,所述数据库服务端维护有中心化块链式账本;
所述数据库服务端还维护有状态树;针对所述状态树中每个叶子节点,该叶子对应的键key为一个业务关键词,该叶子节点对应的值value为中心化块链式账本中存储的包含该业务关键词的业务交易的数量;不同叶子节点对应于不同的key;所述数据库服务端每当向中心化块链式账本中写入数据块时,更新所述状态树,并将更新后的状态树根哈希写入所述数据块;
所述装置包括:
接收模块601,接收块删除指令;
确定模块602,确定所述块删除指令指定的待删除数据块集合;所述待删除数据块集合包括序号为1至序号为N的N个待删除数据块,N>1;
删除模块603,从中心化块链式账本中删除所述待删除数据块集合,并且,重新生成创世数据块;其中,重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希、第N个待删除数据块携带的状态树根哈希。
所述确定模块602,根据所述块删除指令中携带的待删除交易标识集合,确定待删除数据块集合;或者根据所述块删除指令中携带的待删除数据块的序号范围[1,N],确定待删除数据块集合。
所述块删除指令,包括:用户账户构建的块删除交易;
所述装置还包括:
写入模块604,将所述块删除交易写入中心化块链式账本;以及,将所述块删除交易在中心化块链式账本中的存储位置信息写入重新生成的创世数据块。
图7是本说明书实施例提供的一种基于中心化块链式账本的数据块删除装置的结构示意图,应用于数据库服务端,所述数据库服务端维护有中心化块链式账本;
所述数据库服务端还维护有状态树;针对所述状态树中每个叶子节点,该叶子对应的键key为一个业务关键词,该叶子节点对应的值value为中心化块链式账本中存储的包含该业务关键词的业务交易的数量;不同叶子节点对应于不同的key;所述数据库服务端每当向中心化块链式账本中写入数据块时,更新所述状态树,并将更新后的状态树根哈希写入所述数据块;
所述装置包括:
接收模块701,接收块删除指令;
确定模块702,确定所述块删除指令指定的待删除数据块集合;所述待删除数据块集合包括序号为1至序号为N的N个待删除数据块,N>1;
删除模块703,从中心化块链式账本中删除所述待删除数据块集合,将待删除的每个数据块对应的状态树删除,并且,重新生成创世数据块;其中,重新生成的创世数据块中包含原创世数据块携带的账本配置信息、第N个待删除数据块对应的块哈希、第1~N个待删除数据块分别对应的状态树。
图8是本说明书实施例提供的一种基于中心化块链式账本的交易完整性验证装置的结构示意图,应用于数据库服务端,预先基于权利要求1~4任一项所述方法从中心化块链式账本中删除数据块,所述交易完整性验证装置包括:
获取模块801,获取用户账户发送的完整性验证请求;所述完整性验证请求包含所述用户账户指定的业务关键词;
执行模块802,执行交易统计操作,以便从中心化块链式账本中统计包含所述业务关键词的业务交易的第一数量;
确定模块803,基于创世数据块对应的状态树,确定以所述业务关键词为key的叶子节点对应的value,作为第二数量;以及,基于最后一个数据块对应的状态树,确定以所述业务关键词为key的叶子节点对应的value,作为第三数量;
计算模块804,计算第三数量与第二数量的差值,作为第四数量;
判断处理模块805,判断所述第一数量与所述第四数量是否一致,若判断结果为是,则向所述用户账户返回验证成功结果。
所述判断处理模块805,若判断结果为否,则重新执行交易统计操作。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图2或3或4或5所示方法。
图9示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图2或图3或4或5所示方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。