数据存储方法、交易存储方法及装置与流程

文档序号:20775720发布日期:2020-05-19 20:44阅读:193来源:国知局
数据存储方法、交易存储方法及装置与流程

本说明书涉及存储领域,特别涉及一种数据存储方法、交易存储方法及装置。



背景技术:

传统的存储技术将所有的数据存储至统一的数据中心,由于采用中心化的数据存储方式,存在易篡改、可信度低等问题。

区块链技术(也被称之为,分布式账本技术)是基于传统存储技术的问题提出的一种去中心化的分布式数据库技术。由于采用去中心化的网络结构、共识机制和链式区块结构,使得区块链技术具有去中心化、公开透明、不可篡改、可信任等多种特点,适用于诸多对数据可靠性具有高需求的应用场景中。在区块链技术中,所有区块链节点均需保存区块链的数据,区块链中各个区块用于记录被打包的若干交易的原始数据等。



技术实现要素:

有鉴于此,本说明书提供一种数据存储方法、交易存储方法及装置。

本说明书提供技术方案如下:

根据本说明书的第一方面,提出了一种数据存储方法,应用于数据存储节点,所述方法包括:

接收待存储的数据;

将所述数据保存至所述数据存储节点中的数据存储区;

将所述数据的标识信息添加至目标区块,并将所述目标区块保存至所述数据存储节点中的区块链存储区,以使所述目标区块被添加至所述区块链存储区中的区块链的末端。

根据本说明书的第二方面,提出了一种交易存储方法,应用于区块链节点,所述方法包括:

接收待存储的交易;

将所述交易的原始数据保存至链下存储空间;

与区块链网络中的其他区块链节点对所述交易或所述交易的标识信息进行共识,并在共识通过的情况下将目标区块添加至区块链的末端,所述目标区块的区块体用于记录所述交易的标识信息。

根据本说明书的第三方面,提出了一种数据存储设备,包括:

数据存储区,用于存储接收到的数据;

区块链存储区,用于存储所述数据的标识信息,所述标识信息被添加至区块中,且各个区块按照成块顺序依次链接以形成所述区块链存储区内保存的区块链。

根据本说明书的第四方面,提出了一种数据存储装置,应用于数据存储节点,所述装置包括:

接收单元,接收待存储的数据;

保存单元,将所述数据保存至所述数据存储节点中的数据存储区;

添加单元,将所述数据的标识信息添加至目标区块,并将所述目标区块保存至所述数据存储节点中的区块链存储区,以使所述目标区块被添加至所述区块链存储区中的区块链的末端。

根据本说明书的第五方面,提出了一种交易存储装置,应用于区块链节点,所述装置包括:

接收单元,接收待存储的交易;

保存单元,将所述交易的原始数据保存至链下存储空间;

添加单元,与区块链网络中的其他区块链节点对所述交易或所述交易的标识信息进行共识,并在共识通过的情况下将目标区块添加至区块链的末端,所述目标区块的区块体用于记录所述交易的标识信息。

根据本说明书的第六方面,提供一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器通过运行所述可执行指令以实现如上述实施例中任一所述的方法。

根据本说明书的第六方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述实施例中任一所述方法的步骤。

附图说明

图1是本说明书一示例性实施例示出的一种数据存储设备的示意图。

图2a是本说明书一示例性实施例示出的一种数据存储方法的流程图。

图2b是本说明书一示例性实施例示出的另一种数据存储方法的流程图。

图3是本说明书一示例性实施例示出的一种交易存储方法的流程图。

图4是本说明书一示例性实施例示出的又一种数据存储方法的流程图。

图5是本说明书一示例性实施例示出的一种数据存储的过程展示图。

图6是本说明书一示例性实施例示出的一种数据验证方法的流程图。

图7是本说明书一示例性实施例示出的一种交易存储方法的交互图。

图8是本说明书一示例性实施例示出的一种交易验证方法的交互图。

图9是本说明书一示例性实施例示出的另一种交易存储方法的交互图。

图10是本说明书一示例性实施例示出的一种交易验证方法的流程图。

图11是本说明书一示例性实施例示出的一种电子设备的结构示意图。

图12是本说明书一示例性实施例示出的一种数据存储装置的框图。

图13是本说明书一示例性实施例示出的另一种电子设备的结构示意图。

图14是本说明书一示例性实施例示出的一种交易存储装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。

在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

参考图1,图1为本说明书一示例性实施例示出的一种数据存储设备,如图1所示,该数据存储设备可以包括:

数据存储区102,用于存储接收到的数据。

区块链存储区104,用于存储所述数据的标识信息,所述标识信息被添加至区块中,且各个区块按照成块顺序依次链接以形成所述区块链存储区内保存的区块链。

基于上述数据存储设备,可以将接收到的数据存储至数据存储区;将数据的标识信息保存至区块链存储区中的区块链中。由于区块链存储区以区块链的形式保存标识信息,使得标识信息之间紧密相连,无法轻易被篡改;而标识信息与数据存储区中的数据相对应,一旦数据被篡改,就无法查找到对应的标识信息,使得容易验证数据存储区中的数据是否发生了篡改。

接下来,结合上述数据存储设备的存储结构对本说明书提出的数据存储方法进行介绍。

图2a是本说明书一示例性实施例示出的一种数据存储方法的流程图。该方法应用于数据存储节点,如图2a所示,该方法可以包括以下步骤:

步骤202a,接收待存储的数据。

本说明书中的数据存储节点可以为pc、移动终端(智能手机、平板电脑等)、服务器等具备存储功能的电子设备,也可以为包含若干电子设备的数据中心,本说明书对此不作限定。

数据存储节点包含有两个存储区,即数据存储区和区块链存储区。需要说明的是,两个存储区为逻辑上的划分,两个存储的实际位置可以位于同一物理区域,也可以位于不同物理区域。其中,区块链存储区采用区块链的存储结构,即各个区块按照成块顺序依次链接以形成保存在该存储区的区块链。与现有区块链不同的是,该存储区中的区块链,可以不保存现有区块链的区块中的参数,如,时间戳、默克尔(merkle)根等,而仅在区块头保留上一区块的哈希值,即父哈希。

在本说明书中,数据存储区和区块链存储区均可以采用流式数据库的存储技术存储数据或标识信息。流式数据库的存储技术应当满足以下几个条件:1、数据被按照一定顺序存储;2、在先存储的数据不会被在后存储的数据覆盖;3、已存储的数据无法更新和修改。

步骤204a,将所述数据保存至所述数据存储节点中的数据存储区。

数据存储区用于存储接收到的数据本身,在一种情况下,可以每接收到一数据,即将其保存至数据存储区;在另一种情况下,可以在接收到的数量达到预设数量时,再将该预设数量的数据保存至数据存储区。

步骤206a,将所述数据的标识信息添加至目标区块,并将所述目标区块保存至所述数据存储节点中的区块链存储区,以使所述目标区块被添加至所述区块链存储区中的区块链的末端。

区块链存储区用于存储接收到的数据的标识信息,标识信息可以包括数据的哈希值和/或该数据在数据存储区中的索引号,还可以包括与该数据相关的其他信息,例如该数据的摘要信息等。应当理解的是,本说明书中的标识信息所指的是:不包含数据本身的相关信息,其具体内容可以由本领域技术人员根据实际需求确定,本说明书对此不做限制。在一种情况下,标识信息可以仅包括数据的哈希值或索引号,标识信息可用于在数据存储区中查找相应的数据。在另一种情况下,标识信息包含数据的哈希值和索引号,标识信息还可以用于对该数据进行验证,例如,当一用户需要对任一数据进行验证的情况下,即可将该任一数据确定为目标数据,并向数据存储节点发送验证请求。数据存储节点在接收到该验证请求后,可以基于验证请求中包含的目标数据的索引号获取保存在区块链存储区中的目标数据的哈希值和保存在数据存储区中的目标数据;并基于目标数据的哈希值对获取到的目标数据进行验证。在该情况下,相当于在区块链存储区的区块链中保存了数据的哈希值与索引号之间的对应关系,用户可以从区块链存储区的区块链中获取该对应关系,进而向数据存储节点发起针对任一数据的验证;或者在存储数据的过程中,可以生成已存储数据的索引号与哈希值的对应关系表,以供用户查询所要获取或验证的数据。

在本实施例中,可以在将数据保存至数据存储区时,按照一定的顺序对数据进行编号,并将所述编号作为数据的索引号。例如,可以按照数据被保存至数据存储区的时间顺序进行编号。当然,该举例仅是示意性的,本领域技术人员完全可以根据实际情况采用不同的方式确定索引号,本说明书对此不作限定。

在本实施例中,顺序执行将所述数据保存至所述数据存储区的操作,和将所述标识信息保存至所述区块链存储区的操作。换言之,优先将接收到的数据保存至数据存储区,然后再将数据的标识信息保存至区块链存储区。

在一种情况下,每当一数据被保存至数据存储区,即可将该数据的标识信息保存至区块链存储区。在另一种情况下,只有当保存至数据存储区的数据满足预设条件时,才将这些数据的标识信息保存至区块链存储区(即将多个数据的标识信息进行统一存储),例如,该预设条件可以为:保存至数据存储区的数据的数量达到预设值,或者存储数据的时间经过了预设时间段。在实际操作中,为了简化操作,进而减少对处理资源的占用,通常采用统一存储多个标识信息的方式,该方式会将满足上述预设条件的多个数据的标识信息保存至同一区块中。

本申请可以采用多种方式将标识信息保存至区块链存储区的区块链中。在一种情况下,区块链存储区中预先创建有包含若干空区块的区块链,在该情况下,只需将已存储有标识信息的区块后的空区块确定为目标区块,并将待存储的标识信息保存至该目标区块即可。在另一种情况下,在确定待存储的标识信息后,需要创建一区块,以将该区块作为用于存储待存储的标识信息的目标区块,再将该目标区块添加至区块链存储区的区块链末端。

由上述技术方案可知,本说明书中的数据存储节点中包括数据存储区和区块链存储区。其中,数据存储区用于存储接收到的数据;而区块链存储区用于存储数据的标识信息。由于区块链存储区采用区块链存储标识信息,使得存储的标识信息之间紧密相连,无法轻易被篡改。而标识信息与数据之间一一对应,一旦数据存储区中的数据被篡改,即无法获取到与之对应的标识信息,进而发现数据的变动。换言之,本说明书的存储方式不存在如传统的中心化存储技术中数据隐蔽、易被篡改、可信度低等问题。

其次,在本说明书中,仅将数据保存在本地的数据存储区中,而不会将数据保存至其他数据存储节点,使得本说明书的存储方式也不存在区块链技术中由于所有区块链节点均需保存区块链的数据而造成的数据冗余问题,避免了存储资源的浪费。

在上述实施例中,顺序执行将数据保存至数据存储区的操作,和将标识信息保存至区块链存储区的操作。在另一种情况下,可以异步执行将数据保存至数据存储区的操作,和将标识信息保存至区块链存储区的操作。下面通过图2b对该情况下的数据存储方式进行介绍。在该情况下,技术方案的原理于上述实施例相类似,所涉及的实施细节比如将数据保存至数据存储区的操作、获得索引号的方式均可参照上述实施例,因此下文不再详细表述。

参考图2b,图2b是本说明书一示例性实施例示出的另一种数据存储方法的流程图。该方法应用于数据存储节点,如图2b所示,该方法可以包括以下步骤:

步骤202b,接收待存储的数据。

如上所述,数据存储节点可以为pc、移动终端(智能手机、平板电脑)、服务器等具备存储功能的电子设备,也可以为包含若干电子设备的数据中心。本说明书对此不作限定。

如上所述,数据存储节点中包含两个存储区,即数据存储区和区块链存储区。数据存储区和区块链存储区均可以采用流式数据库的存储技术存储接收到的数据或标识信息。

步骤204b,将所述数据保存至所述数据存储节点中的数据存储区。

如上所述,数据存储区用于存储接收到的数据本身,在一种情况下,可以每接收到一数据,即将其保存至数据存储区;在另一种情况下,可以在接收到的数量达到预设值时,再将接收到的数量保存至数据存储区。

步骤206b,将所述数据的标识信息添加至目标区块,并将所述目标区块保存至所述数据存储节点中的区块链存储区,以使所述目标区块被添加至所述区块链存储区中的区块链的末端。

如上所述,区块链存储区用于存储接收到的数据的标识信息,标识信息可以包括数据的哈希值和/或该数据在数据存储区中的索引号,还可以包括与该数据相关的其他信息,例如该数据的摘要信息等。

如上所述,可以在将数据保存至数据存储区时,按照一定的顺序对数据进行编号,并将所述编号作为数据的索引号。

如上所述,区块链存储区中可以将预先创建的空区块作为目标区块,也可以在确定待存储的标识信息后再创建相应的区块以作为目标区块。

与上一实施例不同的是,在本实施例中,异步执行将数据保存至数据存储区的操作,和将标识信息保存至区块链存储区的操作。换言之,存储数据和存储标识信息的操作之间互不关联。举例而言,当接收到待存储的数据之后,一方面可以将该数据保存至数据存储区;另一方面,可以将基于该数据确定相应的标识信息,例如,计算该数据的哈希值,并通过上述方式将该哈希值保存至区块链存储区。两个过程不分先后关系,既可以先确定标识信息,并将其保存至区块链存储区,也可以先将数据保存至数据存储区。当然,在该过程中由于两者不分先后关系,在建立索引号时,可以根据接收的顺序对数据进行编号,以将该编号作为该数据的索引号。

相较于上一实施例,本实施例不限制数据和标识信息的存储顺序,使得在大多数情况下,可以并行两个存储的操作,进而大幅提高了存储的效率。

除上述在单一存储节点存储数据的技术方案以外,本说明书还提出一种对现有区块链技术的改进方案,图3为本说明书一示例性实施例示出的一种交易存储方法。该技术方案的原理与上述实施例相类似,所涉及的部分内容比如存储交易的原始数据的操作、获得标识信息的方式均可参照上述实施例。值得注意的是,由于该技术方案结合了现有的区块链技术,而不是仅采用了现有的区块链结构。因此,将上述“数据存储区”替换为“链下存储空间”,将上述“数据”替换为“交易”;相应的,标识信息也不再仅保存在本地区块链,而是上传至区块链网络。

参考图3,图3为本说明书一示例性实施例示出的一种交易存储方法,该方法应用于区块链节点,该方法可以包括以下步骤:

步骤302,接收待存储的交易。

与上述数据存储节点相似,本实施例中的区块链节点也可以为pc、移动终端(智能手机、平板电脑)、服务器等具备存储功能的电子设备,本说明书对此不作限定。

在本实施例中,当用户存在待存储的交易时,即可向区块链节点发送用于存储该交易的请求,以使该区块链节点对该待存储的交易进行存储。

与上述实施例不同的是,本实施例中不在本地划分两个不同的存储区,而是将交易的原始数据和标识信息分别存储在链下和链上。本说明书中链下和链上的判断依据为:是否通过区块链的共识机制发布至区块链网络;若是,则存储在链上;若否,则存储在链下。与上述实施例相类似的是,链下存储空间和区块链均可以采用流式数据库的存储技术存储交易或标识信息。

步骤304,将所述交易的原始数据保存至链下存储空间。

链下存储空间用于存储接收到交易的原始数据,在一种情况下,可以每接收到一交易,即将其原始数据保存至链下存储空间;在另一种情况下,可以在接收到的数量达到预设数量时,再将接收到的交易的原始数据保存至链下存储空间。

步骤306,与区块链网络中的其他区块链节点对所述交易或所述交易的标识信息进行共识,并在共识通过的情况下将目标区块添加至区块链的末端,所述目标区块的区块体用于记录所述交易的标识信息。

本实施例中的标识信息被存储至区块链网络;该标识信息与上述实施例中的标识信息相类似,也可以包括数据的哈希值和/或该数据在数据存储区中的索引号,还可以包括与该数据相关的其他信息,例如该数据的摘要信息等。在一种情况下,标识信息仅包括数据的哈希值或索引号,标识信息可用于在链下存储空间中查找相应的交易。在另一种情况下,标识信息包含交易的原始数据的哈希值和该交易的索引号,在该情况下,标识信息还可以用于对该数据进行验证,例如,当一用户需要对任一数据进行验证的情况下,即可将该任一数据确定为目标交易,并向区块链节点发送验证交易。区块链节点在接收到该验证交易后,可以基于验证交易中包含的目标交易的索引号调用用于查找哈希值的智能合约,以获取保存在区块链中的与目标交易对应的哈希值;还可以根据该索引号获取保存在链下存储空间中的目标交易的原始数据;并基于与目标交易对应的哈希值对获取到的原始数据进行验证。在该情况下,相当于在区块链中保存了交易的哈希值和索引号之间的对应关系,用户可以从区块链中获取该对应关系,进而向区块链节点发起针对任一交易的验证。

值得注意的是,用户可以向区块链网络中的任一区块链节点发起验证交易,换言之,存储目标交易的区块链节点和对目标交易进行验证的区块链节点可以为同一区块链网络中的不同节点。在一种情况下,存储和验证的操作由同一区块链节点执行,此时,该区块链节点在接收到验证交易后,即可从本地链下存储空间获取目标交易的原始数据,并对其进行验证;在另一种情况下,存储和验证的操作由不同区块链节点执行,此时,某一区块链节点在接收到验证交易后,需要根据索引号确定保存有目标交易的目标节点,并向其发起获取目标交易的原始数据的请求,并在接收到返回的原始数据后,基于获取的哈希值对其进行验证。在该情况下,也可以将该验证请求转发至确定的目标节点,以由该目标节点对目标交易进行验证。具体如何基于验证交易对目标交易进行验证可以由本领域技术人员根据实际情况确定,本申请对此不作限定。

在本实施例中,获取索引号的方式与上述实施例相类似,可参考步骤206a的介绍,在此不作赘述。

其次,本实施例保存标识信息的条件与上述实施例相类似。在一种情况下,每当一交易被保存至链下存储空间,即可通过共识机制将该交易的标识信息保存至区块链。在另一种情况下,只有当保存至链下存储空间的交易满足预设条件时,才将这些交易的标识信息保存至区块链(即将多个交易的标识信息进行统一存储),例如,该预设条件可以为:保存至链下存储空间的交易的数量达到预设值,或者存储交易的时间经过了预设时间段。在实际操作中,为了简化操作,进而减少对处理资源的占用,通常采用统一存储多个标识信息的方式,该方式会将满足上述预设条件的多个交易保存至同一区块。

需要声明的是,由于标识信息所占存储空间较小,可以将其与父哈希一起保存在区块头中,也可以将其保存在区块体中。

由于本实施例通过共识机制将标识信息存储至区块链上,保存标识信息的过程与所采用的共识机制相关。

在一种情况下,本说明书可以采用类似pow的共识机制将标识信息保存至区块链。在该情况下,区块链节点首先在本地创建新的区块,以将标识信息保存至该区块中;然后,可以将该保存有标识信息的区块发送至区块链网络中其他节点,以由其他节点对该区块进行共识,在共识通过后,其他节点即可将该区块添加至各自的区块链的末端,进而将该标识信息保存至各个节点的区块链中。

在另一种情况下,本说明书可以采用类似pbft的共识机制将标识信息保存至区块链。在该情况下,区块链网络中包含一主节点,当任一区块链节点需要将交易的标识信息保存至区块链时,可以将该交易或该交易的标识信息发送给主节点,以由主节点对其进行共识,在该交易或该交易的标识信息通过共识后,即可将该交易的标识信息发送给区块链网络中的其他节点,其他节点在接收到标识信息后,即可创建新的区块,以用于保存接收到的标识信息,并将该保存有标识信息的区块添加至各自区块链的末端。

在采用类似pbft的共识机制将标识信息保存至区块链的情况下,由于由主节点执行共识的操作,在主节点中可以保存有各个节点保存的交易的原始数据的相关信息。在此基础上,任一区块链节点在接收到针对任一交易的原始数据的验证交易时,可以优先判断该交易的原始数据是否保存在本地链下存储空间,若是,则可以根据验证交易中的索引号获取保存在本地链下存储空间的所述目标交易的原始数据;否则,可以向主节点发送目标节点获取请求,以获取保存有目标交易的原始数据的目标节点的相关信息,进而再根据返回的目标节点的相关信息,向目标节点发送原始数据获取请求,以使目标节点根据索引号查找保存的目标交易的原始数据并返回。

值得注意的是,在一种情况下,区块链网络中的各个区块链节点在接收到交易后,将其原始数据保存在各自的链下存储空间中。在该情况下,若个各个区块仅按照各自的存储顺序确定交易的索引号,将造成整个区块链网络中存在多个索引号相同的交易。因此,在本实施例中,在将接收到的交易的原始数据保存至链下存储空间的过程中,各个区块链节点需要确定区块链中已存储的交易的索引号,并以已存储的最后一个索引号为起点,确定下一待存储的交易的索引号。以将编号作为索引号为例,假设当前区块链中已存储了编号为1-7的交易;那么当任一区块链节点接收到待存储的交易时,应当从8开始对交易进行编号,而不能继续采用1-7的编号。

在本说明书中,可以顺序执行将所述交易的原始数据保存至所述链下存储空间的操作,和将所述标识信息存储至区块链的操作;也可以异步执行将所述交易的原始数据保存至所述链下存储空间的操作,和将所述标识信息保存至区块链的操作。换言之,可以顺序执行或异步执行步骤304和步骤306。顺序执行的情况可参照图2a的介绍,异步执行的情况可参照图2b的介绍,在此不作赘述。

由上述技术方案可知,本说明书将交易的原始数据保存在链下存储空间,仅将交易的标识信息保存至区块链,避免了大量原始数据在区块链中保存多个备份而造成的数据冗余。其次,由于交易的标识信息被保存至区块链,使其不可被篡改。而交易的标识信息与原始数据之间一一对应,进而使得交易的原始数据也不可被篡改。可见,通过本说明书的技术方案,可以在保证交易原始数据的安全性的基础上,避免由于数据冗余造成的区块链存储资源浪费。

为了方便理解,下面结合具体实施例对本说明书的技术方案进行介绍。

图4为本说明书一示例性实施例示出的又一种数据存储方法。在该方法中,每当待存储的数据的数量达到预设数量时,再将该预设数量的数据的标识信息保存至区块链存储区。如图4所示,该方法可以包括以下步骤:

步骤401,接收待存储的数据。

步骤402,将待存储的数据保存至数据存储区。

在本实施例中,可以每接收到一个数据,便将其按照接收到的时间顺序保存至数据存储区中,且已保存至数据存储区的不会被在后存储的数据覆盖,也无法修改或更新。

步骤403,按照存储顺序对待存储的数据进行编号。

在本实施例中,将数据的编号作为数据的索引号。本步骤可以按照步骤402中的保存顺序对已存储至数据存储区的数据进行编号。值得注意的是,虽然该步骤与步骤402分开描述,但也可以在将数据保存至数据存储区的过程中对其进行编号。

步骤404,计算待存储的数据的哈希值。

在本实施例中,计算哈希值的步骤也可以在将数据保存至数据存储区的过程中执行。应当理解的是,本实施例将哈希值和编号的对应关系作为数据的标识信息,只需在保存标识信息之前,获得数据的哈希值和编号即可,而具体在哪一步骤中计算可由本领域技术人员根据实际情况确定,本说明书对此不作限定。

步骤405,判断待存储的数据的数量是否达到预设数量。若是,则跳转至步骤406;否则,跳转至步骤409。

在本实施例中,将数量是否达到预设数量作为是否将数据的标识信息保存至区块链存储区的预设条件。需要声明的是,本实施例在数量达到预设数量的时候将标识信息保存至区块链存储区指的是:每当“数据已被存储至数据存储区而标识信息尚未被存储至区块链存储区”的数据的数量达到预设数量时,将该部分数据的标识信息保存至区块链存储区。

该过程可参考图5,在图5所示的情况下,将预设数量设置为3。此时,数据存储区中保存有8个数据,即数据1-8。其中,每3个数据的标识信息被打包成一个区块,以保存至区块链存储区的区块链中,如图5中,将数据1-3和数据4-6的标识信息分别打包成区块1和2,而数据7和8由于尚未达到预设数量3,不会将其标识信息打包成区块保存至区块链存储区。

步骤406,创建新的区块;

在本实施例中,每当确定待存储的数据的数量达到预设值时,即可创建一新的区块,以作为保存这些数据的标识信息的目标区块。

步骤407,将待存储的数据的哈希值与编号的对应关系保存至创建的新区块中。

在本实施例中,由于将预设数量的数据的标识信息统一进行保存。因此,在执行本步骤之后,目标区块中应当保存有预设数量对哈希值与编号的对应关系。

步骤408,将包含哈希值与编号的对应关系的区块添加至区块链存储区的区块链的末端。

在将哈希值与编号的对应关系保存至目标区块后,即可将目标区块添加至区块链存储区的区块链的末端,以完成对待存储的数据的标识信息的存储。

步骤409,不执行将标识信息保存至区块链存储区的操作。

由上述技术方案可知,本说明书将数据的标识信息存储至区块链存储区的区块链中,使得数据的标识信息相互关联(通过父哈希建立标识信息之间的关联关系),进而使得标识信息不易被篡改。进一步的,由于标识信息与数据之间一一对应,一旦存储在数据存储区的数据被篡改,便无法找到与之对应的标识信息,这使得存储的数据也难以被篡改,进而保证了数据的安全性。

图6为本说明书一示例性实施例示出的一种数据验证方法。该方法用于对采用如图4所示方法存储的数据进行验证。如图5所示,该方法可以包括以下步骤:

步骤601,接收到验证请求。

在本实施例中,当用户需要使用某一数据时,可以对该数据进行验证,此时,便可通过向数据存储节点发送包含待验证的数据的编号的验证请求,以指示数据存储节点对待验证的目标数据进行验证。

在本实施例中,可以在存储阶段基于存储的过程生成一编号与哈希值的对应关系表,以便用户在需要对任一已存储的数据进行验证时,从中查找待验证的目标数据的编号。当然,用户也可以从数据存储区或区块链存储区中获取该编号。

步骤602,根据验证请求中的编号从区块链存储区中获取待验证的目标数据的哈希值。

步骤603,根据验证请求中的编号从数据存储区中获取待验证的目标数据。

步骤604,基于获取的哈希值,对待验证的目标数据进行验证。

在本实施例中,可以基于存储时计算哈希值的算法重新计算获取到的目标数据的哈希值,并将该计算得到的哈希值与获取到的哈希值进行比较,以验证该目标数据是否被篡改。

由上述技术方案可知,由于图4所示的存储方式将数据的编号与哈希值的对应关系作为标识信息,使得用户可以通过向数据存储节点发送编号的方式,分别从数据存储区和区块链存储区获取到待验证的目标数据及其哈希值,进而基于该哈希值对目标数据进行验证,保证了数据的安全性。

图7为本说明书一示例性实施例示出的一种交易存储方法的交互图。该方法采用pbft共识机制对交易的哈希值进行共识。如图7所示,该方法可以包括以下步骤:

步骤701,区块链节点接收待存储的交易。

在本实施例中,区块链节点特指区块链网络中的所有节点,换言之,本步骤中的接收待存储的交易指的是:区块链网络中所有节点分别接收各自接收到的待存储的交易,例如,如图7中,区块链节点a、b、c均为区块链网络中的节点,那么区块链节点a、b、c分别接收各自接收到的交易。下面,本实施例以区块链节点a、b、c为例对上述交易存储方法进行介绍。为了方便表述,后文中分别将区块链节点a、b、c简称为节点a、节点b和节点c。应当理解的是,虽图7中仅包含a、b、c三个区块链节点,但实际区块链网络中应当包含大量节点。

步骤702,区块链节点将接收到的交易的原始数据保存至各自的链下存储空间。

各个区块链网络节点在接收到交易后即可将交易保存至各自的链下存储空间。举例而言,假设如图7中的节点a接收到交易a、b、c;节点b接收到交易m、n;节点c接收到交易x、y。那么,节点a会将交易a、b、c的原始数据保存在节点a的链下存储空间;节点b会将交易m、n的原始数据保存在节点b的链下存储空间;节点c会将交易x、y的原始数据保存在节点c的链下存储空间。

步骤703,区块链节点计算待存储的交易的原始数据的哈希值。

承接上述举例,在本步骤中,节点a会基于交易a、b、c的原始数据分别计算其哈希值;节点b会基于交易m、n的原始数据分别计算其哈希值;节点c会基于交易x、y的原始数据分别计算其哈希值。

步骤704,区块链网络中的非主节点将计算得到的哈希值发送至主节点。

在本实施例中,可以对交易的哈希值进行共识,以确定将哪些交易的标识信息进行上链。由于本实施例采用pbft共识机制,在区块链网络中包含一主节点,该主节点负责对待存储的交易进行共识。因此,区块链网络中的非主节点,需要将各自接收到的交易的哈希值发送至主节点,以由该主节点对待存储的交易的哈希值进行共识。

承接上述举例,假设当前区块链网络中的主节点为节点b,那么,节点a需要将与交易a、b、c对应的哈希值发送至节点b;节点c需要将与交易x、y对应的哈希值发送至节点b。

步骤705,主节点对需要上链的哈希值进行编号。

主节点在接收到区块链网络中其他节点发送的待存储交易的哈希值后,对需要上链的哈希值进行编号,并将该编号作为与哈希值对应的交易的索引号。进一步的,将编号与哈希值的对应关系作为相应交易的标识信息。

承接上述举例,若确定需要上链的哈希值为与交易c、m、n、x对应的哈希值,可将其编号分别确定为1、2、3、4。为方便表述,后文将交易c的哈希值称为哈希c,其他交易也是同理,在此不作赘述。

当然,值得注意的是,在主节点对哈希值进行编号时,需要确定当前已使用的编号信息。举例而言,假设已保存至区块链节点的编号已包括1-7,那么本次编号应当从8开始。

步骤706,主节点向区块链网络中所有节点广播需要上链的哈希值以及与之对应的编号。

承接上述举例,节点b可以将哈希c-1、哈希m-2、哈希n-3、哈希x-4的对应关系发送给区块链网络中所有其他节点。

步骤707,区块链节点基于哈希值与编号的对应关系形成区块。

在本实施例中,当区块链节点确定待上链的标识信息后,即待上链的编号与哈希值的对应关系后,即可创建新的区块,并将确定的标识信息保存至该区块中。

承接上述举例,包括节点a、b、c在内的所有节点,创建新的区块,并将哈希c-1、哈希m-2、哈希n-3、哈希x-4四组对应关系保存至该区块中。

值得注意的是,在本步骤中,还包括对保存在各个链下存储空间中的交易进行编号。承接上述举例,如节点a应当将保存在本地链下存储空间中的交易c编号为1;节点b应当将保存在本地链下存储空间中的交易m编号为2、交易n编号为3;节点c应当将保存在本地链下存储空间中的交易x编号为4。

步骤708,区块链节点将形成的区块保存至本地区块链末端。

本步骤,各个区块链节点将各自形成的区块保存至各自的区块链末端。

本实施例将各个区块链节点接收到的待存储交易保存在各自的链下存储空间中,进而避免了现有区块链由于各个区块链节点均需保存交易原始数据而造成的数据冗余,减少了存储资源的浪费。

其次,本实施例将交易的编号和哈希值作为标识信息,并将该标识信息保存至区块链中,使得标识信息无法被篡改。进一步的,由于标识信息与交易的原始数据一一对应,使得交易的原始数据也无法被篡改。

可见,相较于现有的区块链技术,本申请在保证数据不被篡改的情况下,避免了数据冗余的问题,进而避免了存储资源的浪费。

图8为本说明书一示例性实施例示出的一种交易验证方法的交互图。该方法用于对采用如图7所示的方法存储的交易进行验证。如图8所示,该方法可以包括以下步骤:

步骤801,区块链节点接收到验证交易。

在本实施例中,区块链节点特指接收到验证交易的区块链节点,而非上一实施例中区块链网络中所有节点。

在本实施例中,接收到验证交易的区块链节点可以与存储待验证的目标交易的区块链节点为同一节点,也可以为不同节点。

步骤802,区块链节点基于验证交易中的索引号确定待验证的目标交易的哈希值。

在本实施例中,可以基于索引号在本地区块链中查找与目标交易对应的哈希值,进一步的,可以向区块链网络中的其他节点发送哈希验证交易,以验证该哈希值未被篡改。

步骤803,区块链节点根据索引号判断待验证的目标交易是否保存在本地链下存储空间;若是,则跳转至步骤804a;若否则跳转至804b。

步骤804a,基于索引号从本地链下存储空间中获取目标交易。

步骤804b,区块链节点向区块链网络中的主节点发送目标节点查询请求。

由于在上一实施例中通过类似pbft的共识机制对待存储的交易进行共识,任一已存储的交易的原始数据由哪一区块链节点保存均在主节点中保存有记录,因此,可以通过向主节点发送包含索引号的查询请求的方式,确定保存有目标交易的目标节点。

当然,在另一种情况下,可以在存储的过程中,将保存有相应交易的区块链节点的信息也保存在区块链中。在该情况下,当需要对任一交易进行验证时,无需向主节点发送查询请求,只需在区块链中查找存储有该任一交易的区块链节点即可。

步骤805,主节点基于目标节点查询请求中的索引号确定目标节点。

步骤806,主节点将目标节点的信息返回至区块链节点。

步骤807,区块链节点向目标节点发送目标交易获取请求。

在本实施例中,验证的操作由接收到验证交易的节点执行,因此,需要向目标节点发起获取请求,以获得目标交易的原始数据,并对其进行验证。

在另一种情况下,也可以由保存有该目标交易的原始数据的节点执行验证的操作,此时,接收到验证交易的区块链节点可将验证交易或目标交易的索引号转发至确定的目标节点,以由目标节点对目标交易进行验证,而接收到验证交易的区块链节点只需接收目标节点的验证结果即可。

步骤808,目标节点基于索引号查询目标交易的原始数据。

步骤809,目标节点将目标交易的原始数据返回至区块链节点。

步骤810,区块链节点基于目标交易的哈希值对目标交易的原始数据进行验证。

由上述技术方案可知,本实施例可以在接收到验证交易的情况下,基于验证交易中包含的索引号,确定保存有目标交易的目标节点,进而获取目标交易的原始数据,以基于区块链中保存的哈希值对其进行验证。通过该方式,用户可以在需要使用任一交易的原始数据时,验证该原始数据的可靠性。

图9为本说明书一示例性实施例示出的另一种交易存储方法的交互图。该方法采用pow共识机制对交易的原始数据进行共识。如图9所示,该方法可以包括以下步骤:

步骤901,区块链节点接收待存储的交易。

与图7所示的实施例相类似的是,本实施例中的区块链节点也特指区块链网络中的所有节点,换言之,本步骤中的接收待存储的交易指的是:区块链网络中所有节点分别接收各自接收到的待存储的交易。

下面,仍以区块链网络中的节点a、b、c为例对本实施例所提出的交易存储方式进行介绍。与图7所示的交易存储方式不同的是,本实施例采用pow共识机制,因此,在本实施例的区块链网络中,不存在主节点的概念,即所有节点地位一致。

步骤902,区块链节点在区块链网络中广播接收到的交易的原始数据。

在本实施例中,将接收到的交易的原始数据作为共识的依据。在任一节点接收到待存储交易后便会将该交易的原始数据广播给区块链网络中所有节点。

以图9所示的区块链节点a、b、c为例进行介绍。仍假设节点a接收到交易a、b、c;节点b接收到交易m、n;节点c接收到交易x、y。那么,节点a会将交易a、b、c的原始数据发送给节点b和c;节点b会将交易m、n的原始数据发送给节点a和c;节点c会将交易x、y的原始数据发送给节点a和b。

换言之,在实施例中,区块链网络中任一节点均保存有区块链网络中所有节点接收到的待存储交易的原始数据。即如图9中的区块链节点a、b、c均保存有交易a、b、c、m、n、x、y的原始数据。

步骤903,区块链节点之间基于预设规则争夺记账权。

在将待存储交易的原始数据广播后,区块链网络中的各个节点可以根据预设的规则争夺记账权。例如,可以通过传统的计算数学题的方式确定记账权的归属。

步骤904,获得记账权的区块链节点确定待上链的交易。

承接上述举例,假设在区块链网络中,由节点b获取到了记账权,那么节点b可以根据一定的规则确定待上链的交易。假定本次确定的待上链交易仍为交易c、m、n、x。

步骤905,获得记账权的区块链节点对待上链的交易进行编号。

承接上述举例,在本步骤中,节点b可以将待上链交易c、m、n、x的编号分别确定为1、2、3、4。

步骤906,获得记账权的区块链节点在区块链网络中广播待上链的交易及其编号。

承接上述举例,可以将确定的待上链交易与编号的对应关系,即c-1、m-2、n-3、x-4发送给区块链网络中其他节点,如节点a和c。

步骤907,区块链节点将待上链的交易的原始数据与编号的对应关系保存至链下存储空间。

在本实施例中,由于所有区块链节点的链下存储空间保存有交易的原始数据,因此本步骤只需将交易与编号的对应关系保存至链下存储空间即可,以用于后续对交易原始数据的查找。

承接上述举例,在本步骤中,可以将c-1、m-2、n-3、x-4四组对应关系保存至链下存储空间。

步骤908,区块链节点计算待上链的交易的原始数据的哈希值。

承接上述举例,在本步骤中,节点a、b、c可分别计算交易c、m、n、x的哈希值。

步骤909,区块链节点基于待上链的交易的哈希值与编号的对应关系形成区块。

承接上述举例,在计算得到交易c、m、n、x的哈希值后,节点a、b、c可分别创建新的区块,并将哈希c-1、哈希m-2、哈希n-3、哈希x-4四组对应关系保存至各自创建的区块中。

步骤910,区块链节点将形成的区块添加至区块链的末端。

承接上述举例,节点a、b、c可以分别将各自创建的保存有哈希c-1、哈希m-2、哈希n-3、哈希x-4四组对应关系的区块添加至各自的区块链中。

本实施例将交易的原始数据保存至区块链网络中各个节点的链下存储空间,使得在查找交易原始数据的过程中无需跨节点查找,减少了对传输资源的占用。

其次,本实施例将交易的哈希值和编号作为标识信息保存至链上,使得哈希值与编号无法被篡改。进一步的,由于标识信息与交易的原始数据一一对应,使得交易的原始数据也无法被篡改。

图10为本说明书一示例性实施例示出的一种交易验证方法的流程图。该方法用于对采用如图9所示的方法存储的交易进行验证,该方法应用于区块链节点。如图10所示,该方法可以包括以下步骤:

步骤1001,接收到验证交易。

在本实施例中,区块链网络中任一节点均可作为该接收到验证交易的区块链节点。

步骤1002,基于验证交易中的索引号确定待验证的目标交易的哈希值。

在本实施例中,由于图9所示的存储方式在各个节点的区块链中均保存有索引号与哈希值的对应关系,因此,可以根据索引号在本地区块链中查找该索引号对应的哈希值。当然,也可以调用用于获取哈希值的智能合约,以获取该索引号对应的哈希值。

进一步的,在获取到哈希值后,可以向区块链网络中其他节点发送哈希值验证请求,以确保本地区块链中的哈希值与其他节点的区块链中保存的哈希值一致。

步骤1003,基于验证交易中的索引号从本地链下存储空间获取待验证的目标交易的原始数据。

在本实施例中,由于所有区块链节点均保存有区块链网络中所有交易的原始数据,因此,只需根据索引号在本地链下存储空间中查找目标交易的原始数据即可。

步骤1004,基于确定的哈希值对获取到的原始交易进行验证。

相较于图8所示的校验方法,由于本实施例中的区块链节点保存有区块链网络中所有交易的原始数据,使得本实施例在校验的过程中无需跨节点查找,减少了对传输资源的占用。

图11为本说明书的一示例性实施例示出一种电子设备的结构示意图。请参考图11,在硬件层面,该电子设备包括处理器1102、内部总线1104、网络接口1106、内存1108以及非易失性存储器1110,当然还可能包括其他业务所需要的硬件。处理器1102从非易失性存储器1110中读取对应的计算机程序到内存1108中然后运行,在逻辑层面上形成数据存储装置。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

请参考图12,在软件实施方式中,该数据存储装置可以包括:

接收单元1201,接收待存储的数据;

保存单元1202,将所述数据保存至所述数据存储节点中的数据存储区;

添加单元1203,将所述数据的标识信息添加至目标区块,并将所述目标区块保存至所述数据存储节点中的区块链存储区,以使所述目标区块被添加至所述区块链存储区中的区块链的末端。

可选的,所述数据的标识信息包含所述数据的哈希值和/或所述数据在所述数据存储区中的索引号。

可选的,所述数据的标识信息包含所述数据的哈希值和所述数据在所述数据存储区中的索引号;所述接收单元1201进一步用于,接收验证请求,所述验证请求中包含目标数据的索引号;

所述装置还包括:

获取单元1204,根据所述索引号获取保存在所述区块链存储区中的所述目标数据的哈希值,和保存在所述数据存储区中的所述目标数据;

验证单元1205,基于所述目标数据的哈希值对获取到的目标数据进行验证。

可选的,所述数据存储节点中的数据存储区和区块链存储区均采用流式数据库的存储技术存储数据或标识信息。

可选的,顺序执行将所述数据保存至所述数据存储区的操作,和将所述标识信息保存至所述区块链存储区的操作;或者

异步执行将所述数据保存至所述数据存储区的操作,和将所述标识信息保存至所述区块链存储区的操作。

图13为本说明书的一示例性实施例示出的另一种电子设备的示意结构图。请参考图13,在硬件层面,该电子设备包括处理器1302、内部总线1304、网络接口1306、内存1308以及非易失性存储器1310,当然还可能包括其他业务所需要的硬件。处理器1302从非易失性存储器1310中读取对应的计算机程序到内存1308中然后运行,在逻辑层面上形成交易存储装置。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

请参考图14,在软件实施方式中,该交易存储装置可以包括:

接收单元1401,接收待存储的交易;

保存单元1402,将所述交易的原始数据保存至链下存储空间;

添加单元1403,与区块链网络中的其他区块链节点对所述交易或所述交易的标识信息进行共识,并在共识通过的情况下将目标区块添加至区块链的末端,所述目标区块的区块体用于记录所述交易的标识信息。

可选的,所述交易的标识信息包括所述原始数据的哈希值和/或所述原始数据在所述链下存储空间内的索引号。

可选的,所述交易的标识信息包括所述原始数据的哈希值和所述原始数据在所述链下存储空间内的索引号,所述接收单元1401进一步用于,接收验证交易,所述验证交易中包含目标交易的索引号;

所述装置还包括:

调用单元1404,调用用于查找哈希值的智能合约,以根据所述索引号获取区块链内存储的与所述目标交易对应的哈希值;

获取单元1405,根据所述索引号获取保存在所述链下存储空间的所述目标交易的原始数据;

验证单元1406,基于与所述目标交易对应的哈希值对获取到的原始数据进行验证。

可选的,所述获取单元进一步用于:

基于所述索引号判断所述目标交易是否保存在本地链下存储空间;

若是,则根据所述索引号获取保存在所述本地链下存储空间的所述目标交易的原始数据;

否则,基于所述索引号向所述区块链节点所属区块链网络中的主节点发送目标节点获取请求,以使所述主节点根据所述索引号返回目标节点的相关信息;基于所述相关信息向所述目标节点发送原始数据获取请求,以使所述目标节点根据所述索引号返回所述目标交易的原始数据。

可选的,所述链下存储空间和所述区块链均采用流式数据库的存储技术存储交易或标识信息。

可选的,顺序执行将所述交易的原始数据保存至所述链下存储空间的操作,和将所述标识信息存储至所述区块链的操作;或者

异步执行将所述交易的原始数据保存至所述链下存储空间的操作,和将所述标识信息存储至所述区块链的操作。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由数据存储装置、交易存储装置的处理器执行以实现如上述实施例中任一所述的方法,比如数据存储方法可以包括:接收待存储的数据;将所述数据保存至所述数据存储节点中的数据存储区;将所述数据的标识信息添加至目标区块,并将所述目标区块保存至所述数据存储节点中的区块链存储区,以使所述目标区块被添加至所述区块链存储区中的区块链的末端。

其中,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等,本说明书并不对此进行限制。

以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

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