基于区块链的交易数据处理方法、装置、设备及存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及区块链技术领域,具体涉及一种基于区块链的交易数据处理方法、装置、设备及存储介质。
背景技术
区块链技术自问世以来历经多个阶段的发展,正逐渐成为促进经济发展和提高政府效率的重要引擎和动力。我国区块链产业目前也处于高速发展阶段,随着创业者和资本的不断涌入,企业的数量在快速增加,区块链应用也在加快落地,持续助推传统产业转型升级,为实体经济“降成本”、“提效率”。
在区块链应用系统中,利用区块链的不可篡改特性,经常将大量需要进行公示的数据存在链上,在对指定时间戳范围内(亦或是有序数据范围内)的交易查询时,往往需要从最近插入的区块依次向前进行遍历,如果时间戳范围很广,并且需要查询的交易所在的区块分布比较离散,那么在遍历查询过程中就需要过滤掉大量无效交易,从而导致查询效率低下。
发明内容
本发明提供了一种基于区块链的交易数据处理方法、装置、设备及存储介质,解决了交易数据查询效率低的问题,采用如下的技术方案:
一种基于区块链的交易数据处理方法,包含以下步骤:
新建业务智能合约,用于处理及存储业务数据;
新建存储智能合约,用于存储哈希表A和哈希表B,所述哈希表A用于存储若干分别对应于主键的主键ID的交易哈希,所述哈希表A以所述主键ID为key值,以对应的前向链表为value值,所述哈希表B用于存储若干所述主键ID的交易索引,所述哈希表B以所述主键ID作为key值,以对应的索引数组作为value值;
接收主键上传的上传数据以及发起的上传交易,将所述上传数据保存至所述业务智能合约,将包含交易序号、交易字段、所述交易哈希和交易签名的交易内容保存至区块链中,将所述交易内容中的交易序号和交易哈希构造成一个包含节点指针的交易节点,并将所述交易节点挂载在所述哈希表A中所述主键所对应的主键ID的前向链表尾部;
将本次交易对应的所述节点指针和所述交易序号构成一个索引节点存储在所述哈希表B中的所述主键所对应的主键ID的索引数组的尾部。
进一步地,在所述将本次交易的所述节点指针和所述交易序号构成一个索引节点存储在所述哈希表B中的所述主键所对应的主键ID的索引数组的尾部之前,所述基于区块链的交易数据处理方法还包括:
判断本次交易是否满足索引存储条件;
在满足所述索引存储条件时,将本次交易对应的所述节点指针和所述交易序号构成一个所述索引节点存储在所述哈希表B中的所述主键所对应的主键ID的索引数组的尾部。
进一步地,所述判断本次交易是否满足索引存储条件的具体方法是:
计算本次交易与同一所述主键的上一次进行索引存储的交易之间的交易间隔;
判断所述交易间隔是否等于预设的GAP值;
若所述交易间隔等于预设的所述GAP值,则满足所述索引存储条件。
进一步地,所述索引数组包含若干索引块,每个所述索引块存储对应的所述主键ID在一定周期内产生的所有的所述索引节点。
进一步地,所述基于区块链的交易数据处理方法还包括:
判断当前的所述索引块的索引组数的索引长度与预设长度的大小关系;
在所述索引长度大于所述预设长度时,调整所述GAP值;
并根据调整后的所述GAP值生成当前所述索引块的全新的索引数组。
进一步地,所述调整所述GAP值的具体方法为:
增大所述GAP值。
进一步地,所述调整所述GAP值的具体方法为:
将所述GAP值增大50%以上。
进一步地,所述基于区块链的交易数据处理方法还包括:
接收搜索条件,从所述哈希表B和所述哈希表A中查询满足要求的所有的所述交易哈希,所述搜索条件包括所述主键ID和所述交易序号的范围。
一种基于区块链的交易数据处理装置,所述基于区块链的交易数据处理装置包括:
第一新建模块,用于新建业务智能合约,所述业务智能合约用于处理及存储业务数据;
第二新建模块,用于新建存储智能合约,所述存储智能合约用于存储哈希表A和哈希表B,所述哈希表A用于存储若干分别对应于主键的主键ID的交易哈希,所述哈希表A以所述主键ID为key值,以对应的前向链表为value值,所述哈希表B用于存储若干所述主键ID的交易索引,所述哈希表B以所述主键ID作为key值,以对应的索引数组作为value值;
第一处理模块,用于接收主键上传的上传数据以及发起的上传交易,将所述上传数据保存至所述业务智能合约,将包含交易序号、交易字段、所述交易哈希和交易签名的交易内容保存至区块链中,将所述交易内容中的交易序号和交易哈希构造成一个包含节点指针的交易节点,并将所述交易节点挂载在所述哈希表A中所述主键所对应的主键ID的前向链表尾部;
第二处理模块,用于将本次交易对应的所述节点指针和所述交易序号构成一个索引节点存储在所述哈希表B中的所述主键所对应的主键ID的索引数组的尾部。
进一步地,基于区块链的交易数据处理装置还包括:
第一判断模块,用于判断本次交易是否满足索引存储条件;
在满足所述索引存储条件时,所述第二处理模块将将本次交易对应的所述节点指针和所述交易序号构成一个所述索引节点存储在所述哈希表B中的所述主键所对应的主键ID的索引数组的尾部。
进一步地,所述第一判断模块包括:
计算单元,用于计算本次交易与同一所述主键的上一次进行索引存储的交易之间的交易间隔;
判断单元,用于判断所述交易间隔是否等于预设的GAP值;
若所述交易间隔等于预设的所述GAP值,则满足所述索引存储条件。
进一步地,所述索引数组包含若干索引块,每个所述索引块存储对应的所述主键ID在一定周期内产生的所有的所述索引节点;
所述基于区块链的交易数据处理装置还包括:
第二判断模块,用于判断当前的所述索引块的索引组数的索引长度与预设长度的大小;
调整模块,用于在所述索引长度大于所述预设长度时调整所述GAP值;
生成模块,用于根据调整后的所述GAP值生成当前所述索引块的全新的索引数组。
一种电子设备,所述电子设备包括:
处理器;以及
存储器,所述存储器上存储有可由所述处理器运行的计算机程序;
所述处理器运行所述计算机程序以实现前述的基于区块链的交易数据处理方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机指令,所述计算机指令被处理器执行时实现前述的基于区块链的交易数据处理方法的步骤。
本发明的有益之处在于所提供的基于区块链的交易数据处理方法、装置、设备及存储介质,将交易哈希以及索引都保存在智能合约中,查询过程中不需要遍历所有的索引,通过交易哈希去查询区块链上具体交易,不需要再遍历区块,极大提高了查询的便利性。
本发明的有益之处在于所提供的基于区块链的交易数据处理方法、装置、设备及存储介质,使用了动态调整索引长度的策略,保证了索引长度不会过大影响性能。
附图说明
图1是本申请实施例提供的基于区块链的交易数据处理方法的流程示意图;
图2是本申请实施例提供的哈希表A的示意图;
图3是本申请实施例提供的哈希表B的示意图;
图4是本申请实施例提供的基于区块链的交易数据处理装置的结构示意图;
图5是本申请实施例提供的一种电子设备的框图。
具体实施方式
下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1所示为本申请实施例的一种基于区块链的交易数据处理方法,主要包含以下步骤:步骤S1:新建业务智能合约,用于处理及存储业务数据。步骤S2:新建存储智能合约,用于存储哈希表A和哈希表B,哈希表A用于存储分别对应于主键的若干主键ID的交易哈希,哈希表A以主键ID为key值,以对应的前向链表为value值,哈希表B用于存储若干主键ID的交易索引,哈希表B以主键ID作为key值,以对应的索引数组作为value值。步骤S3:接收主键上传的上传数据以及发起的上传交易,将上传数据保存至业务智能合约,将包含交易序号、交易字段、交易哈希和交易签名的交易内容保存至区块链中,将交易内容中的交易序号和交易哈希构造成一个包含节点指针的交易节点,并将交易节点挂载在哈希表A中主键所对应的主键ID的前向链表尾部。步骤S4:将本次交易对应的节点指针和交易序号构成一个索引节点存储在哈希表B中的主键所对应的主键ID的索引数组的尾部。通过以上步骤,直接将所有的交易哈希以及索引存储在智能合约中,通过交易哈希去查询区块链上具体交易,不需要再遍历区块。以下具体介绍上述步骤。
对于步骤S1:新建业务智能合约,用于处理及存储业务数据。
区块链服务方在区块链中建立业务智能合约,业务智能合约用于处理及存储业务数据。当某一主键向业务合约上传数据时,会发起一笔上传交易。不同的主键对应不同的业务系统用户,具有不同的主键ID。
对于步骤S2:新建存储智能合约,用于存储哈希表A和哈希表B,哈希表A用于存储若干分别对应于主键的主键ID的交易哈希,哈希表A以主键ID为key值,以对应的前向链表为value值,哈希表B用于存储若干主键ID的交易索引,哈希表B以主键ID作为key值,以对应的索引数组作为value值。
区块链服务方在区块链中建立用于存储哈希表A和哈希表B的存储智能合约业务智能合约。具体而言,如图2和图3所示,哈希表A以键值对的形式存储有不同主键ID以及对应的前向链表,该前向链表存储有若干交易节点。哈希表B以键值对的方式存储有不同主键ID以及对应的索引数组。
对于步骤S3:接收主键上传的上传数据以及发起的上传交易,将上传数据保存至业务智能合约,将包含交易序号、交易字段、交易哈希和交易签名的交易内容保存至区块链中,将交易内容中的交易序号和交易哈希构造成一个包含节点指针的交易节点,并将交易节点挂载在哈希表A中主键所对应的主键ID的前向链表尾部。
可以理解的是,当某一主键向业务智能合约上传数据时,会发生一笔上传交易。交易内容包含了交易序号、交易字段、交易哈希和交易签名等信息。将上传的上传数据保存至业务智能合约,将交易内容保存在区块链中,将交易序号和交易哈希构造成一个节点连接在该主键的前向链表尾部。交易节点包含节点指针、交易序号和交易哈希,可选的,交易节点还可以包含其它的额外信息。
对于步骤S4:将本次交易对应的节点指针和交易序号构成一个索引节点存储在哈希表B中的主键所对应的主键ID的索引数组的尾部。
具体而言,如图3所示,在本发明中,为了避免了因为数据量不断增大导致索引长度无限增长,对于索引节点的存储采用了按时间分块的方式。索引数组包含若干索引块,每个索引块存储对应的主键ID在一定周期内产生的所有的索引节点。该一定周期可以根据需要设定,如设置为一个索引块存储一天内产生的所有索引节点。
作为一种优选的实施方式,在将本次交易的节点指针和交易序号构成一个索引节点存储在哈希表B中的主键所对应的主键ID的索引数组的尾部之前,基于区块链的交易数据处理方法还包括:判断本次交易是否满足索引存储条件。在满足索引存储条件时,执行步骤S4:将本次交易对应的节点指针和交易序号构成一个索引节点存储在哈希表B中的主键所对应的主键ID的索引数组的尾部。
具体而言,判断本次交易是否满足索引存储条件的具体方法是:计算本次交易与同一主键的上一次进行索引存储的交易之间的交易间隔。判断交易间隔是否等于预设的GAP值。若交易间隔等于预设的GAP值,则满足索引存储条件。GAP值过大会导致查找较小区间范围交易时候效率过低,GAP值过小会使索引逐渐退化为普通链式查询。初始预设的GAP值可以根据需要进行设定。
作为一种优选的实施方式,在步骤S4之后,基于区块链的交易数据处理方法还包括:判断当前的索引块的索引组数的索引长度与预设长度的大小关系。在索引长度大于预设长度时,调整GAP值。并根据调整后的GAP值生成当前索引块的全新的索引数组。调整GAP值的具体方法为:增大GAP值。
可以理解的是,哈希表A中记录了该主键ID所有的交易节点,原先的索引数据是根据原始预设的GAP值生成。当GAP增大后,根据新的GAP值、原索引数组以及哈希表A中存储的交易节点推算出新的索引组数,减小索引长度。GAP值调整的过小,同一索引块下的索引节点的数量减小不够明显。因此,优选的,将GAP值增大50%以上。
作为一种优选的实施方式,基于区块链的交易数据处理方法还包括查询步骤。
具体而言,区块链接收搜索条件,从哈希表B和哈希表A中查询满足要求的所有的交易哈希,搜索条件包括主键ID和交易序号的范围。
进一步地,再通过交易哈希从区块链上查询出指定交易信息,从交易信息中解析出交易签名、交易字段,对交易签名进行验证,对交易字段进行解码,对解码后数据进行验证,验证通过后则可以认为查询成功。
如图4所示为本申请实施例的一种基于区块链的交易数据处理装置100,基于区块链的交易数据处理装置100包括:第一新建模块10、第二新建模块20、第一处理模块30和第二处理模块40。
具体而言,第一新建模块10用于新建业务智能合约,业务智能合约用于处理及存储业务数据。第二新建模块20用于新建存储智能合约,存储智能合约用于存储哈希表A和哈希表B,哈希表A用于存储若干分别对应于主键的主键ID的交易哈希,哈希表A以主键ID为key值,以对应的前向链表为value值,哈希表B用于存储若干主键ID的交易索引,哈希表B以主键ID作为key值,以对应的索引数组作为value值。第一处理模块30用于接收主键上传的上传数据以及发起的上传交易,将上传数据保存至业务智能合约,将包含交易序号、交易字段、交易哈希和交易签名的交易内容保存至区块链中,将交易内容中的交易序号和交易哈希构造成一个包含节点指针的交易节点,并将交易节点挂载在哈希表A中主键所对应的主键ID的前向链表尾部。第二处理模块40用于将本次交易对应的节点指针和交易序号构成一个索引节点存储在哈希表B中的主键所对应的主键ID的索引数组的尾部。
作为一种优选的实施方式,基于区块链的交易数据处理装置100还包括:第一判断模块50。
第一判断模块50用于判断本次交易是否满足索引存储条件。在满足索引存储条件时,第二处理模块40将将本次交易对应的节点指针和交易序号构成一个索引节点存储在哈希表B中的主键所对应的主键ID的索引数组的尾部。
作为一种优选的实施方式,第一判断模块50包括:计算单元和判断单元。
其中,计算单元用于计算本次交易与同一主键的上一次进行索引存储的交易之间的交易间隔。判断单元用于判断交易间隔是否等于预设的GAP值。若交易间隔等于预设的GAP值,则满足索引存储条件。
作为一种优选的实施方式,索引数组包含若干索引块,每个索引块存储对应的主键ID在一定周期内产生的所有的索引节点。基于区块链的交易数据处理装置100还包括:第二判断模块60、调整模块70和生成模块80。
具体而言,第二判断模块60用于判断当前的索引块的索引组数的索引长度与预设长度的大小。调整模块70用于在索引长度大于预设长度时调整GAP值。生成模块80用于根据调整后的GAP值生成当前索引块的全新的索引数组。进一步的,调整模块70调整GAP值的方式为增大GAP值,且优选的,将GAP值增大50%以上。
如图5所示为根据本申请实施例的基于区块链的交易数据处理方法的电子设备的框图,电子设备旨在表示各种形式的数字计算机,如台式计算机、工作台、服务器等其他适合的计算机。电子设备还可以表示各种形式的移动装置,诸如智能电话、可穿戴智能设备和其他类似的计算装置。本文所示的部件、它们到的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图5所示,该电子设备包括:处理器51和存储器52以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。其中,存储器52上存储有可由处理器51运行的计算机程序。处理器51运行计算机程序以实现本申请实施例提供的基于区块链的交易数据处理方法的步骤,在此不再赘述。
电子设备还可以包括:输入装置53和输出装置54。处理器51、存储器52、输入装置53和输出装置54可以通过总线或者其他方式连接,图5中通过总线连接。输入装置53可接收输入的数字或字符信息,例如触摸屏、小键盘、鼠标、轨迹板、触摸板等。输出装置54可以包括显示设备、辅助照明装置和触觉反馈装置等。
本申请实施例提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的方法,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。在一些实施例中,存储介质可以是闪存、磁表面存储器、光盘、或光盘存储器等存储器;也可以是包括上述存储器52之一或任意组合的各种设备。在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(Hyper Text Markup Language,HTML)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。作为示例,可执行指令可被部署为在一个车载计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备执行。
以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,上述实施例不以任何形式限制本发明,凡采用等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。