基于区块链的数据处理方法、装置、设备及可读存储介质转让专利

申请号 : CN202110074890.0

文献号 : CN112395300B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘区城李茂材王宗友孔利蓝虎刘攀周开班朱耿良时一防黄焕坤

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本申请公开一种基于区块链的数据处理方法、装置、设备以及可读存储介质,其中,方法包括:将至少两个区块中的交易数据添加到执行队列中,从执行队列中按序获取至少两个交易数据;对至少两个交易数据并行执行合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;在块缓存中确定已合并交易写缓存,在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;根据更新交易读缓存、目标交易数据对应的并行交易读缓存及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存;将目标交易数据的待合并交易写缓存合并至目标交易数据所属的块缓存中。采用本申请,可以提高区块链网络处理交易数据的效率。

权利要求 :

1.一种基于区块链的数据处理方法,其特征在于,包括:将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中,从所述执行队列中按序获取至少两个交易数据;所述至少两个交易数据均携带合约信息;所述至少两个交易数据来自不同的区块;

对所述至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;所述至少两个交易数据包括目标交易数据;

在所述至少两个区块分别对应的块缓存中确定已合并交易写缓存,在所述已合并交易写缓存中,获取所述目标交易数据对应的更新交易读缓存;所述已合并交易写缓存所对应的交易数据,在所述执行队列中的位置或添加时间处于所述目标交易数据之前;

对所述目标交易数据对应的并行交易读缓存以及所述更新交易读缓存进行读数据冲突校验,得到校验结果;

根据所述校验结果以及所述目标交易数据对应的并行交易写缓存,确定所述目标交易数据的待合并交易写缓存;

将所述目标交易数据的待合并交易写缓存合并至所述目标交易数据所属的块缓存中,继续对所述目标交易数据的下一个交易数据的待合并交易写缓存进行合并处理。

2.根据权利要求1所述的方法,其特征在于,所述从所述执行队列中按序获取至少两个交易数据,包括:

确定并行执行线程池中空闲线程对应的空闲数量;

若所述空闲数量等于或大于并行执行线程阈值,则通过所述空闲线程从所述执行队列中按序获取所述至少两个交易数据;所述至少两个交易数据的交易数量等于所述空闲数量。

3.根据权利要求1所述的方法,其特征在于,至少两个合约业务包括至少两个智能合约以及至少两个交易执行业务;所述对所述至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存,包括:

根据至少两个合约信息中分别包括的合约标识,确定分别用于执行所述至少两个交易数据的智能合约;

根据所述至少两个合约信息中分别包括的业务标识,确定所述至少两个智能合约所分别调用的用于执行所述至少两个交易数据的交易执行业务;

并行执行所述至少两个交易执行业务,获取每个交易执行业务被执行时所生成的并行交易读缓存以及并行交易写缓存。

4.根据权利要求3所述的方法,其特征在于,所述并行执行所述至少两个交易执行业务,获取每个交易执行业务被执行时所生成的并行交易读缓存以及并行交易写缓存,包括:根据所述至少两个交易执行业务,分别为所述至少两个交易数据创建初始交易读缓存以及初始交易写缓存;

并行执行所述至少两个交易执行业务,获取每个交易执行业务被执行时所生成的并行交易读数据以及并行交易写数据;

将每个并行交易读数据存储至对应的初始交易读缓存,得到所述至少两个交易数据分别对应的并行交易读缓存;

将每个并行交易写数据存储至对应的初始交易写缓存,得到所述至少两个交易数据分别对应的并行交易写缓存。

5.根据权利要求1所述的方法,其特征在于,所述在所述已合并交易写缓存中,获取所述目标交易数据对应的更新交易读缓存,包括:按照区块高度从高至低的顺序以及交易数据序号从大至小的顺序,在所述已合并交易写缓存中依次遍历,直至获取到所述目标交易数据所需读取的已合并交易写缓存;

根据所述目标交易数据所需读取的已合并交易写缓存生成所述更新交易读缓存。

6.根据权利要求1所述的方法,其特征在于,所述对所述目标交易数据对应的并行交易读缓存以及所述更新交易读缓存进行读数据冲突校验,得到校验结果,包括:将所述目标交易数据对应的并行交易读缓存中的并行交易读数据确定为目标并行交易读数据;

确定所述目标并行交易读数据的目标对象,获取所述更新交易读缓存中与所述目标对象相关联的更新交易读数据;

对所述目标并行交易读数据以及所述更新交易读数据进行读数据冲突校验,得到所述校验结果。

7.根据权利要求6所述的方法,其特征在于,所述校验结果包括第一校验结果以及第二校验结果;

所述对所述目标并行交易读数据以及所述更新交易读数据进行读数据冲突校验,得到所述校验结果,包括:

将所述目标并行交易读数据以及所述更新交易读数据进行对比;

若所述目标并行交易读数据与所述更新交易读数据相同,则确定所述校验结果为所述第一校验结果;所述第一校验结果用于指示所述目标并行交易读数据与所述更新交易读数据之间不存在读数据冲突;

若所述目标并行交易读数据与所述更新交易读数据不相同,则确定所述校验结果为所述第二校验结果;所述第二校验结果用于指示所述目标并行交易读数据与所述更新交易读数据之间存在读数据冲突。

8.根据权利要求7所述的方法,其特征在于,所述根据所述校验结果以及所述目标交易数据对应的并行交易写缓存,确定所述目标交易数据的待合并交易写缓存,包括:若所述校验结果为所述第一校验结果,则确定所述目标交易数据对应的并行交易写缓存为所述目标交易数据的待合并交易写缓存;

若所述校验结果为所述第二校验结果,则根据所述更新交易读数据以及所述目标交易数据所携带的合约信息,生成所述目标交易数据的待合并交易写缓存。

9.根据权利要求8所述的方法,其特征在于,所述根据所述更新交易读数据以及所述目标交易数据所携带的合约信息,生成所述目标交易数据的待合并交易写缓存,包括:根据所述目标交易数据所携带的合约信息中的合约标识,确定用于执行所述目标交易数据的目标智能合约;

根据所述目标交易数据所携带的合约信息中的业务标识,确定所述目标智能合约所调用的用于执行所述目标交易数据的目标交易执行业务;

根据所述更新交易读数据以及所述目标交易数据,执行所述目标交易执行业务,获取所述目标交易数据对应的目标交易执行结果;

根据所述目标交易执行结果更新所述目标交易数据对应的并行交易写缓存,得到所述目标交易数据的待合并交易写缓存。

10.根据权利要求1所述的方法,其特征在于,所述在所述至少两个区块分别对应的块缓存中确定已合并交易写缓存,包括:获取所述目标交易数据所属的目标区块,确定所述目标区块对应的目标区块高度;

根据交易数据序号的顺序,在所述目标区块中确定已合并交易数据;所述已合并交易数据对应的交易数据序号小于所述目标交易数据对应的交易数据序号;

根据所述目标区块高度从所述至少两个区块中确定已合并区块;所述已合并区块对应的区块高度小于所述目标区块高度;

将所述已合并区块对应的块缓存中的交易写缓存,以及所述已合并交易数据对应的交易写缓存确定为所述已合并交易写缓存。

11.根据权利要求10所述的方法,其特征在于,所述至少两个区块属于分叉区块链,所述分叉区块链包括至少两个分支链分别对应的哈希映射表;每个哈希映射表均包括对应的分支链上的区块高度与区块哈希之间的关联关系;

所述根据所述目标区块高度从所述至少两个区块中确定已合并区块,包括:获取所述目标区块的目标区块哈希,将至少两个哈希映射表中包含所述目标区块哈希的哈希映射表,确定为目标哈希映射表;

在所述目标哈希映射表中,将小于所述目标区块高度的区块高度所关联的区块哈希,确定为已合并区块哈希;

在所述目标哈希映射表对应的分支链上,将所述已合并区块哈希对应的区块确定为所述已合并区块。

12.一种基于区块链的数据处理装置,其特征在于,包括:第一获取模块,用于将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中,从所述执行队列中按序获取至少两个交易数据;所述至少两个交易数据均携带合约信息;所述至少两个交易数据来自不同的区块;

第二获取模块,用于对所述至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;所述至少两个交易数据包括目标交易数据;

第三获取模块,用于在所述至少两个区块分别对应的块缓存中确定已合并交易写缓存,在所述已合并交易写缓存中,获取所述目标交易数据对应的更新交易读缓存;所述已合并交易写缓存所对应的交易数据,在所述执行队列中的位置或添加时间处于所述目标交易数据之前;

第一合并模块,用于对所述目标交易数据对应的并行交易读缓存以及所述更新交易读缓存进行读数据冲突校验,得到校验结果;

所述第一合并模块,还用于根据所述校验结果以及所述目标交易数据对应的并行交易写缓存,确定所述目标交易数据的待合并交易写缓存;

第二合并模块,用于将所述目标交易数据的待合并交易写缓存合并至所述目标交易数据所属的块缓存中,继续对所述目标交易数据的下一个交易数据的待合并交易写缓存进行合并处理。

13.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;

所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供数据通信功能,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1至11任一项所述的方法。

14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1‑11任一项所述的方法。

说明书 :

基于区块链的数据处理方法、装置、设备及可读存储介质

技术领域

[0001] 本申请涉及互联网技术领域,尤其涉及一种基于区块链的数据处理方法、装置、设备以及可读存储介质。

背景技术

[0002] 随着对交易数据安全的重视,政府和企业开始利用区块链网络进行交易数据的存储。
[0003] 目前,在业界大多数的区块链网络中,区块都是按照区块高度的顺序串行执行,块内的交易数据所对应的合约业务也是按照交易数据序号的顺序串行执行,例如区块m包括
交易数据1、交易数据2、…、交易数据n,则在处理区块m的交易数据时,首先执行交易数据1
对应的合约业务,得到交易数据1的交易执行结果1,再根据交易执行结果1以及交易数据2,
执行交易数据2对应的合约业务,得到交易数据2的交易执行结果2,继续对后面的交易数据
执行对应的合约业务。处理完区块m的交易数据后,再对区块m+1的交易数据1进行处理。
[0004] 现有的处理交易数据的方式,显然不能匹配区块链网络所接收到的交易数据的增加速度,进而会导致区块链网络中滞留大量的交易数据,可见目前对区块中的交易数据的
处理效率比较低下。

发明内容

[0005] 本申请实施例提供一种基于区块链的数据处理方法、装置、设备以及可读存储介质,可以提高区块链网络处理交易数据的效率。
[0006] 本申请实施例一方面提供了一种基于区块链的数据处理方法,包括:
[0007] 将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中,从执行队列中按序获取至少两个交易数据;至少两个交易数据均携带合
约信息;
[0008] 对至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;至少两个交易数据包括目标
交易数据;
[0009] 在至少两个区块分别对应的块缓存中确定已合并交易写缓存,在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;已合并交易写缓存所对应的交易数据,在
执行队列中的位置或添加时间处于目标交易数据之前;
[0010] 根据更新交易读缓存、目标交易数据对应的并行交易读缓存以及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存;
[0011] 将目标交易数据的待合并交易写缓存合并至目标交易数据所属的块缓存中,继续对目标交易数据的下一个交易数据的待合并交易写缓存进行合并处理。
[0012] 本申请实施例一方面提供了一种基于区块链的数据处理装置,包括:
[0013] 第一获取模块,用于将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中,从执行队列中按序获取至少两个交易数据;至少两
个交易数据均携带合约信息;
[0014] 第二获取模块,用于对至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;至少两
个交易数据包括目标交易数据;
[0015] 第三获取模块,用于在至少两个区块分别对应的块缓存中确定已合并交易写缓存,在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;已合并交易写缓存
所对应的交易数据,在执行队列中的位置或添加时间处于目标交易数据之前;
[0016] 第一合并模块,用于根据更新交易读缓存、目标交易数据对应的并行交易读缓存以及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存;
[0017] 第二合并模块,用于将目标交易数据的待合并交易写缓存合并至目标交易数据所属的块缓存中,继续对目标交易数据的下一个交易数据的待合并交易写缓存进行合并处
理。
[0018] 其中,第一获取模块,包括:
[0019] 第一确定单元,用于确定并行执行线程池中空闲线程对应的空闲数量;
[0020] 第一获取单元,用于若空闲数量等于或大于并行执行线程阈值,则通过空闲线程从执行队列中按序获取至少两个交易数据;至少两个交易数据的交易数量等于空闲数量。
[0021] 其中,至少两个合约业务包括至少两个智能合约以及至少两个交易执行业务;
[0022] 第二获取模块,包括:
[0023] 第二确定单元,用于根据至少两个合约信息中分别包括的合约标识,确定分别用于执行至少两个交易数据的智能合约;
[0024] 第三确定单元,用于根据至少两个合约信息中分别包括的业务标识,确定至少两个智能合约所分别调用的用于执行至少两个交易数据的交易执行业务;
[0025] 第二获取单元,用于并行执行至少两个交易执行业务,获取每个交易执行业务被执行时所生成的并行交易读缓存以及并行交易写缓存。
[0026] 其中,第二获取单元,包括:
[0027] 第一缓存子单元,用于根据至少两个交易执行业务,分别为至少两个交易数据创建初始交易读缓存以及初始交易写缓存;
[0028] 第一获取子单元,用于并行执行至少两个交易执行业务,获取每个交易执行业务被执行时所生成的并行交易读数据以及并行交易写数据;
[0029] 第一存储子单元,用于将每个并行交易读数据存储至对应的初始交易读缓存,得到至少两个交易数据分别对应的并行交易读缓存;
[0030] 第二存储子单元,用于将每个并行交易写数据存储至对应的初始交易写缓存,得到至少两个交易数据分别对应的并行交易写缓存。
[0031] 其中,第三获取模块,包括:
[0032] 第三获取单元,用于按照区块高度从高至低的顺序以及交易数据序号从大至小的顺序,在已合并交易写缓存中依次遍历,直至获取到目标交易数据所需读取的已合并交易
写缓存;
[0033] 生成更新单元,用于根据目标交易数据所需读取的已合并交易写缓存生成更新交易读缓存。
[0034] 其中,第一合并模块,包括:
[0035] 第四确定单元,用于将目标交易数据对应的并行交易读缓存中的并行交易读数据确定为目标并行交易读数据;
[0036] 第四获取单元,用于确定目标并行交易读数据的目标对象,获取更新交易读缓存中与目标对象相关联的更新交易读数据;
[0037] 校验数据单元,用于对目标并行交易读数据以及更新交易读数据进行读数据冲突校验,得到校验结果;
[0038] 第五确定单元,用于根据校验结果、更新交易读数据以及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存。
[0039] 其中,校验结果包括第一校验结果以及第二校验结果;
[0040] 校验数据单元,包括:
[0041] 对比数据子单元,用于将目标并行交易读数据以及更新交易读数据进行对比;
[0042] 第一确定子单元,用于若目标并行交易读数据与更新交易读数据相同,则确定校验结果为第一校验结果;第一校验结果用于指示目标并行交易读数据与更新交易读数据之
间不存在读数据冲突;
[0043] 第二确定子单元,用于若目标并行交易读数据与更新交易读数据不相同,则确定校验结果为第二校验结果;第二校验结果用于指示目标并行交易读数据与更新交易读数据
之间存在读数据冲突。
[0044] 其中,第五确定单元,包括:
[0045] 第三确定子单元,用于若校验结果为第一校验结果,则确定目标交易数据对应的并行交易写缓存为目标交易数据的待合并交易写缓存;
[0046] 第二缓存子单元,用于若校验结果为第二校验结果,则根据更新交易读数据以及目标交易数据所携带的合约信息,生成目标交易数据的待合并交易写缓存。
[0047] 其中,第二缓存子单元,具体用于根据目标交易数据所携带的合约信息中的合约标识,确定用于执行目标交易数据的目标智能合约;
[0048] 第二缓存子单元,还具体用于根据目标交易数据所携带的合约信息中的业务标识,确定目标智能合约所调用的用于执行目标交易数据的目标交易执行业务;
[0049] 第二缓存子单元,还具体用于根据更新交易读数据以及目标交易数据,执行目标交易执行业务,获取目标交易数据对应的目标交易执行结果;
[0050] 第二缓存子单元,还具体用于根据目标交易执行结果更新目标交易数据对应的并行交易写缓存,得到目标交易数据的待合并交易写缓存。
[0051] 其中,第三获取模块,包括:
[0052] 第五获取单元,用于获取目标交易数据所属的目标区块,确定目标区块对应的目标区块高度;
[0053] 第六确定单元,用于根据交易数据序号的顺序,在目标区块中确定已合并交易数据;已合并交易数据对应的交易数据序号小于目标交易数据对应的交易数据序号;
[0054] 第七确定单元,用于根据目标区块高度从至少两个区块中确定已合并区块;已合并区块对应的区块高度小于目标区块高度;
[0055] 第八确定单元,用于将已合并区块对应的块缓存中的交易写缓存,以及已合并交易数据对应的交易写缓存确定为已合并交易写缓存。
[0056] 其中,至少两个区块属于分叉区块链,分叉区块链包括至少两个分支链分别对应的哈希映射表;每个哈希映射表均包括对应的分支链上的区块高度与区块哈希之间的关联
关系;
[0057] 第七确定单元,包括:
[0058] 第二获取子单元,用于获取目标区块的目标区块哈希,将至少两个哈希映射表中包含目标区块哈希的哈希映射表,确定为目标哈希映射表;
[0059] 第四确定子单元,用于在目标哈希映射表中,将小于目标区块高度的区块高度所关联的区块哈希,确定为已合并区块哈希;
[0060] 第五确定子单元,用于在目标哈希映射表对应的分支链上,将已合并区块哈希对应的区块确定为已合并区块。
[0061] 本申请一方面提供了一种计算机设备,包括:处理器、存储器、网络接口;
[0062] 上述处理器与上述存储器、上述网络接口相连,其中,上述网络接口用于提供数据通信功能,上述存储器用于存储计算机程序,上述处理器用于调用上述计算机程序,以使得
计算机设备执行本申请实施例中的方法。
[0063] 本申请实施例一方面提供了一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,上述计算机程序适于由处理器加载并执行本申请实施例中的方法。
[0064] 本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中;计算机设
备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该
计算机设备执行本申请实施例中的方法。
[0065] 在本申请实施例中,根据至少两个交易数据所分别携带的合约信息,可以并行执行至少两个交易数据所分别对应的合约业务,其中,该至少两个交易数据是按照区块高度
的顺序以及交易数据序号的顺序排列的,且可以来源于至少两个区块;获取每个合约业务
被执行时所生成的并行交易读缓存以及并行交易写缓存,由于目标交易数据对应的并行交
易读缓存可能是过旧的交易读缓存,所以先在至少两个区块分别对应的块缓存中确定已合
并交易写缓存,然后在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;其
中,已合并交易写缓存所对应的交易数据,在执行队列中的位置或添加时间处于目标交易
数据之前;根据更新交易读缓存,可以确定目标交易数据对应的并行交易读缓存是否是过
旧的交易读缓存,进而可以根据更新交易读缓存以及目标交易数据对应的并行交易写缓存
确定目标交易数据的待合并交易写缓存。上述可知,在一方面,本申请通过并行执行多个区
块中的交易数据,可以提高区块链网络处理交易数据的效率,减少执行队列中大量交易数
据的排队;另一方面,并行执行完多个交易数据后,本申请根据每个交易数据对应的已合并
交易写缓存,可以获取其对应的更新交易读缓存,进而可以根据每个交易数据对应的更新
交易读缓存,确定其对应的并行交易读缓存是否为过旧的交易读缓存,达到校验并行交易
读缓存以及并行交易写缓存的效果,进而可以保证待合并交易写缓存的正确性,从而可以
在提高对交易数据的处理效率的同时,还可以保证块缓存中的数据的正确性。

附图说明

[0066] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他的附图。
[0067] 图1是本申请实施例提供的一种系统架构示意图;
[0068] 图2是本申请实施例提供的一种基于区块链的数据处理的场景示意图;
[0069] 图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图;
[0070] 图4是本申请实施例提供的一种基于区块链的数据处理的场景示意图;
[0071] 图5是本申请实施例提供的一种基于区块链的数据处理的场景示意图;
[0072] 图6是本申请实施例提供的一种基于区块链的数据处理的场景示意图;
[0073] 图7是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图;
[0074] 图8是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图;
[0075] 图9是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图;
[0076] 图10是本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

[0077] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于
本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他
实施例,都属于本申请保护的范围。
[0078] 为了便于理解,首先对部分名词进行以下简单解释:
[0079] 1、区块链(Block chain):狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前获取的交易历史进行校验,适合分布式记账场景下防篡改
和可扩展性的需求;广义上,区块链还指代区块链结构实现的分布式记账技术,包括分布式
共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。
[0080] 区块链的目标是实现一个分布的数据记录账本,此账本只允许添加,不允许删除。账本底层的基本结构是一个线性的链表。链表由一个个“区块”串联组成,后继区块中记录
前继区块的哈希(Hash)值,每个区块(以及区块中的交易)是否合法,可通过计算哈希值的
方式进行快速检验。若网络中的节点提议添加一个新的区块,必须经过共识机制对区块达
成共识确认。
[0081] 2、区块(block):是在区块链网络上承载交易数据的数据包,是一种被标记上时间戳和前继区块对应的哈希值的数据结构,区块经过网络的共识机制验证并确认区块中的交
易。区块包括区块头(Block Header)以及区块体(Block Body),区块头可以记录当前区块
的元信息,包含当前版本号、前继区块对应的哈希值、时间戳、随机数、默克尔树根(Merkle 
Root)的哈希值等数据。区块体可以记录一段时间内所生成的详细数据,包括当前区块经过
验证的、区块创建过程中生成的所有交易记录或是其他信息,可以理解为账本的一种表现
形式。此外,区块体的详细数据可以包括通过默克尔树(Merkle Tree)的哈希过程生成唯一
的Merkle Root记录于区块头。
[0082] 前继区块,也称父区块(Parent Block),区块链通过在区块头记录区块对应的哈希值以及父区块对应的哈希值实现时间上的排序。
[0083] 3、哈希值(hash):也称作信息特征值或特征值,哈希值是通过哈希算法将任意长度的输入数据转换为密码并进行固定输出而生成的,不能通过解密哈希值来检索原始输入
数据,它是一个单向的加密函数。在区块链中,每个区块(除了初始区块)都包含前继区块的
哈希值,哈希值是区块链技术中的潜力核心基础和最重要的方面,它保留了记录和查看数
据的真实性,以及区块链作为一个整体的完整性。
[0084] 4、智能合约(Smart Contract):智能合约的概念具备承诺、协议、数字形式三大要素,因此能够将区块链的应用范围扩展至金融行业交易、支付、结算和清算的各个环节。智
能合约是指当一个预先编好的条件被触发时,立即执行相应的合同条款,其工作原理类似
于计算机程序的if‑then语句。
[0085] 请参见图1,图1是本申请实施例提供的一种系统架构示意图。如图1所示,该系统架构可以包括区块链网络101、用户终端102、用户终端103、…用户终端104。其中,区块链网
络101可以包括区块链节点1011、区块链节点1012、…、区块链节点1013。可以理解的是,上
述区块链网络101可以包括一个或者多个区块链节点,这里将不对区块链节点的数量进行
限制;上述用户终端可以包括一个或者多个用户终端,这里将不对用户终端的数量进行限
制。
[0086] 其中,用户终端之间可以存在通信连接,例如用户终端102与用户终端103之间存在通信连接,用户终端102与用户终端104之间存在通信连接。
[0087] 其中,每个区块链节点(也包括区块链节点1011、区块链节点1012以及区块链节点1013)在进行正常工作时,可以接收到用户终端发送的交易数据,即用户终端与区块链节点
之间存在通信连接,例如区块链节点1011与用户终端102之间存在通信连接,区块链节点
1011与用户终端104之间存在通信连接。区块链节点基于接收到的交易数据生成区块,然后
对区块进行上链处理,为了保证各个区块链节点之间的数据互通,每个区块链节点之间可
以存在通信连接,例如区块链节点1011与区块链节点1012之间存在通信连接,区块链节点
1011与区块链节点1013之间存在通信连接等等。
[0088] 可以理解的是,上述的通信连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其他连接
方式,本申请在此不做限制。
[0089] 其中,图1中的用户终端102、用户终端103、…用户终端104、区块链节点1011、区块链节点1012、…、区块链节点1013,可以包括手机、平板电脑、笔记本电脑、掌上电脑、智能音
响、移动互联网设备(MID,mobile internet device)、POS(Point Of Sales,销售点)机、可
穿戴设备(例如智能手表、智能手环等)等。
[0090] 可以理解的是,本申请实施例所提供的基于区块链的数据处理方法可以由计算机设备执行,计算机设备包括上述区块链网络101中的任一区块链节点,上述区块链节点包括
但不限于终端或服务器。上述服务器可以是独立的物理服务器,也可以是多个物理服务器
构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存
储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台
等基础云计算服务的云服务器。上述终端可以是智能手机、平板电脑、笔记本电脑、台式计
算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信
方式进行直接或间接地连接,本申请在此不做限制。
[0091] 为了便于叙述,全文将区块高度为X的区块命名为区块X,并将区块高度为X叙述为区块高度X,X为正整数。例如将区块高度为1的区块命名为区块1,将区块高度为1叙述成区
块高度1;将区块高度为m的区块命名为区块m,将区块高度为m叙述成区块高度m,其他区块
高度对应的区块命名亦如此,此处不再一一进行赘述。
[0092] 进一步地,请参见图2,图2是本申请实施例提供的一种基于区块链的数据处理的场景示意图。如图2所示,计算机设备20a可以是上述图1中区块链网络101中的任一区块链
节点。计算机设备20a获取至少两个区块20b,至少两个区块20b可以包括3个区块,分别为区
块m,区块m+1以及区块m+2,其中,m为大于1的正整数。可以理解的是,上述至少两个区块20b
可以是计算机设备20a作为出块节点所生成的,也可以是区块链网络中的其他区块链节点
生成的,此处不限定至少两个区块20b的生成出处。
[0093] 请再参见图2,区块m可以包括交易数据T(m,1)、…、交易数据T(m,n),区块m+1可以包括交易数据T(m+1,1)、…、交易数据T(m+1,n),区块m+2可以包括交易数据T(m+2,1)、…、交易数据
T( m+2,n)。其中,交易数据T(a,b)下标中的a表示交易数据属于区块a,下标中的b表示交易数据
序号,a以及b均为正整数,a小于或等于至少两个区块20b的区块总数量,b小于或等于区块a
中交易数据的总数量。
[0094] 至少两个区块20b除了包括交易数据外,还可以包括交易数据对应的合约信息,如图2所示,区块m可以包括交易数据T(m,1)对应的合约信息F(m,1)、…、交易数据T(m,n)对应的合
约信息F(m,n);区块m+1可以包括交易数据T(m+1,1)对应的合约信息F(m+1,1)、…、交易数据T(m+1,n)
对应的合约信息F(m+1,n);区块m+2可以包括交易数据T(m+2,1)对应的合约信息F(m+2,1)、…、交易
数据T(m+2,n)对应的合约信息F(m+2,n)。其中,合约信息F(a,b)下标中的a表示合约信息属于区块
a,下标中的b表示合约信息序号,a以及b均为正整数,且a小于或等于至少两个区块20b的区
块总数量,b小于或等于区块a中合约信息的总数量。其中,图2中的符号“&”可以表示对应关
系。
[0095] 请再参见图2,计算机设备20a将至少两个区块20b中的交易数据(例如图中所示的交易数据T(m,1)、…、交易数据T(m,n),交易数据T(m+1,1)、…、交易数据T(m+1,n),交易数据
T(m+2,1)、…、交易数据T(m+2,n)),按照区块高度的顺序以及交易数据序号的顺序添加到执行队
列20c中,如图2所示,在执行队列20c中,区块m所包含的交易数据排在区块m+1所包含的交
易数据,以及区块m+2所包含的交易数据之前,区块m中的交易数据T(m,1)排在交易数据T(m,n)
之前。其中,执行队列20c也可以称作交易队列(Transaction/TxQueue),后续,当执行线程
池(等同于图2所示例的线程池)有空闲线程时,计算机设备20a按序将交易(即交易数据)放
入空闲线程中并行执行。其中,执行线程池也可以称作交易线程池或交易处理池(Tx 
Process Pool),执行线程池可以按计算机设备20a所配置文件中指定的池大小,预先生成
对应数量的交易处理线程,交易处理线程(包括空闲线程)负责并行执行交易内的合约业
务。
[0096] 根据执行线程池,计算机设备20a从执行队列20c中按序获取至少两个交易数据,如图2所示,至少两个交易数据可以包括交易数据T(m,1)、…、交易数据T(m,n),交易数据
T(m+1,1)、…、交易数据T(m+1,n),交易数据T(m+2,1)。根据每个交易数据所对应的合约信息,计算
机设备20a在执行线程池中对交易数据T(m,1)、…、交易数据T(m,n),交易数据T(m+1,1)、…、交易
数据T(m+1,n),交易数据T(m+2,1)并行执行对应的合约业务,获取每个合约业务被执行时所生成
的并行交易缓存。
[0097] 其中,并行交易缓存可以包括并行交易读缓存以及并行交易写缓存(也可以称之为交易数据的交易执行结果),并行交易读缓存用于记录合约业务针对交易数据所读取的
数据集,如图2中所示例的针对交易数据T(m,1)的并行交易读缓存R(m,1),…,针对交易数据
T(m,n)的并行交易读缓存R(m,n),针对交易数据T(m+1,1)的并行交易读缓存R(m+1,1),…,针对交易
数据T(m+1,n)的并行交易读缓存R(m+1,n),针对交易数据T(m+2,1)的并行交易读缓存R(m+2,1)。
[0098] 其中,并行交易写缓存用于记录合约业务针对交易数据所修改的数据集,如图2中所示例的针对交易数据T(m,1)的并行交易写缓存W(m,1),…,针对交易数据T(m,n)的并行交易写
缓存W(m,n),针对交易数据T(m+1,1)的并行交易写缓存W(m+1,1),…,针对交易数据T(m+1,n)的并行
交易写缓存W(m+1,n),针对交易数据T(m+2,1)的并行交易写缓存W(m+2,1)。
[0099] 需要理解的是,计算机设备20a并行执行多个区块中的合约业务,如图2中所示的合约信息F(m,1)对应的合约业务、…、合约信息F(m,n)对应的合约业务,合约信息F(m+1,1)对应的
合约业务、…、合约信息F(m+1,n)对应的合约业务,合约信息F(m+2,1)对应的合约业务,是假设性
地认为上述多个合约业务之间,以及多个合约业务与已合并区块中的合约业务之间是没有
交集、互不影响的,即每个合约业务读取的并行交易读缓存都是不同的数据。在这种情况
下,至少两个并行交易写缓存是至少两个交易数据分别对应的待合并交易写缓存。
[0100] 其中,已合并区块对应的区块高度小于至少两个区块分别对应的区块高度。至少两个区块20b以及上述提及的已合并区块均为缓存区块,即暂时未上链的区块,其中,缓存
区块中的交易(即交易数据)为未确认交易(Unconfirmed Transactions),即交易数据处于
未确认的状态,可以理解为交易数据在全网广播后,区块链节点会不断从交易池中选择交
易数据进行记录(一般根据交易手续费进行排序),并将交易数据记录在区块上,而未确认
交易是指该笔交易尚未被记录在区块链上。
[0101] 而实际应用时,上述多个合约业务之间,或者多个合约业务与已合并区块中的合约业务之间可能存在交集,即多个合约业务读取的并行交易读缓存中存在相同的读数据,
例如,交易数据T(m,1)对应的并行交易读缓存R(m,1),与交易数据T(m+1,1)对应的并行交易读缓
存R(m+1,1)相同,即并行交易读缓存R(m,1)与并行交易读缓存R(m+1,1)存在交集,或者理解成并
行交易读缓存R(m+1,1)是过旧的数据集,故并行执行交易数据T(m,1)对应的合约业务、…、交易
数据T(m+1,1)对应的合约业务,得到的并行交易写缓存W(m+1,1)将不是实时的结果数据。
[0102] 块缓存(Block cache)用于记录区块中所有合约业务被执行时修改的数据集。当按序将交易数据(如图2中示例的交易数据T(m,1)、…、交易数据T(m,n),交易数据T(m+1,1)、…、交
易数据T(m+1,n),交易数据T(m+2,1)))对应的并行交易写缓存合并至对应的块缓存前,计算机设
备20a需要验证并行交易读缓存是否是交易数据的合法交易读数据,即并行交易读缓存(如
图2中所示例的并行交易读缓存R(m,1)、…、并行交易读缓存R(m,n),并行交易读缓存
R(m+1,1)、…、并行交易读缓存R(m+1,n),并行交易读缓存R(m+2,1))是否是过旧的交易读数据。
[0103] 为了便于叙述以及理解,本申请实施例将目标交易数据假设为图2中的交易数据T(m+2,1),即按序将要校验交易数据T(m+2,1)对应的并行交易读缓存R(m+2,1)的数据状态,即是否
是过旧的读取数据。此时,如图2所示,区块m对应的块缓存Km中的并行交易写缓存W(m,1)、…、
并行交易写缓存W(m,n),以及区块m+1对应的块缓存Km+1中的并行交易写缓存W(m+1,1)、…、并行
交易写缓存W(m+1,n),均为交易数据T(m+2,1)的已合并交易写缓存20d。
[0104] 请再参见图2,在已合并交易写缓存20d中,计算机设备20a获取目标交易数据(即交易数据T(m+2,1))对应的更新交易读缓存G(m+2,1),获取更新交易读缓存G(m+2,1)的具体过程请
参见下文图3所对应的实施例中步骤S103的描述,此处不展开。
[0105] 根据更新交易读缓存G(m+2,1),计算机设备20a校验目标交易数据对应的并行交易读缓存(即并行交易读缓存R(m+2,1)),得到校验结果,若校验结果指示并行交易读缓存R(m+2,1)
与更新交易读缓存G(m+2,1)之间不存在读数据冲突,则确定并行交易写缓存W(m+2,1)为交易数
据T(m+2,1)的待合并交易写缓存D(m+2,1);若校验结果指示并行交易读缓存R(m+2,1)与更新交易
读缓存G(m+2,1)之间存在读数据冲突,则根据更新交易读缓存G(m+2,1)以及交易数据T(m+2,1),重
新执行交易数据T(m+2,1)的交易执行业务,得到交易数据T(m+2,1)的交易执行结果,根据该交易
执行结果生成待合并交易写缓存D(m+2,1)。
[0106] 请再参见图2,计算机设备20a将待合并交易写缓存D(m+2,1)合并至目标交易数据所属的块缓存(即图2所示例的块缓存Km+2)中,继续对区块m+2的下一个交易数据(比如交易数
据T(m+2,2)))的待合并交易写缓存进行合并处理,其合并处理的具体过程,与交易数据T(m+2,1)
的待合并交易写缓存D(m+2,1)的合并处理过程一致。
[0107] 上述可知,本申请可以提供一种多个区块、多个智能合约并行执行的解决方案,从而大大地提升区块链网络的性能以及对交易数据的吞吐量。
[0108] 进一步地,请参见图3,图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图。该数据处理方法可以由图1中所述的计算机设备执行,如图3所示,该数据
处理过程可以包括如下步骤。
[0109] 步骤S101,将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中,从执行队列中按序获取至少两个交易数据;至少两个交易数
据均携带合约信息。
[0110] 具体的,确定并行执行线程池中空闲线程对应的空闲数量;若空闲数量等于或大于并行执行线程阈值,则通过空闲线程从执行队列中按序获取至少两个交易数据;至少两
个交易数据的交易数量等于空闲数量。
[0111] 其中,将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中的具体实现过程可以参见上文图2所对应的实施例中的描述,此处
不再进行赘述。
[0112] 在区块链中一笔交易是一个数字记录,在本申请实施例中,将一个交易称为一个交易数据。通过区块链网络将交易数据在全网范围中广播,并通过共识机制在全网中进行
确认及验证,使得该笔交易变得不可逆并防止篡改。
[0113] 区块链网络中的交易可以分为确认交易(Confirmed Transactions)以及未确认交易,其中,确认交易表示该笔交易被区块链网络所记录并确认;例如,当交易1发生时,记
录该交易1的区块将进行第一次确认,并在该区块之后的每一个区块进行再次确认;当确认
数达到六个及以上时,通常认为这笔交易比较安全并难以篡改,此时可以将交易1确定为确
认交易。
[0114] 未确认交易是指该笔交易尚未被记录在区块链上,即交易数据处于未确认的状态,可以理解为交易数据在全网广播后,区块链节点会不断从交易池中选择交易数据进行
记录以生成区块,但该区块还未上链。本申请所述的至少两个区块以及下文提及的缓存数
据库中的区块均为缓存区块,即还未上链的区块。
[0115] 请一并参见图4,图4是本申请实施例提供的一种基于区块链的数据处理的场景示意图。如图4所示,至少两个区块可以包括3个区块,分别为区块m,区块m+1以及区块m+2,其
中,区块m可以包括交易数据T(m,1)、交易数据T(m,2)以及交易数据T(m,3);区块m+1可以包括交
易数据T(m+1,1)、交易数据T(m+1,2)以及交易数据T(m+1,3);区块m+2可以包括交易数据T(m+2,1)、交
易数据T(m+2,2)以及交易数据T(m+2,3)。故执行队列40b可以包括按照区块高度的顺序以及交易
数据序号的顺序进行排列的上述9个交易数据。
[0116] 其中,交易数据T(a,b)下标中的a表示交易数据属于区块a,下标中的b表示交易数据序号,a以及b均为正整数,a小于或等于至少两个区块40b的区块总数量,b小于或等于区块a
中交易数据的总数量。
[0117] 此外,区块m可以包括交易数据T(m,1)、交易数据T(m,2)以及交易数据T(m,3)分别携带的合约信息;区块m+1可以包括交易数据T(m+1,1)、交易数据T(m+1,2)以及交易数据T(m+1,3)分别
携带的合约信息;区块m+2可以包括交易数据T(m+2,1)、交易数据T(m+2,2)以及交易数据T(m+2,3)
分别携带的合约信息,如图4所示例的交易数据T(m+2,1)所携带的合约信息F(m+2,1)。
[0118] 在执行队列40b中为每个区块构造块缓存,此处可以再次参见图2所示例的块缓存。
[0119] 并行执行线程池40a可以包括空闲线程E1、空闲线程E2、空闲线程E3、空闲线程E4、空闲线程E5、空闲线程E6、空闲线程E7、忙碌线程E8以及忙碌线程E9;其中,空闲线程可以表
示该线程处于闲置状态,忙碌线程可以表示该线程处于工作状态。
[0120] 请再参见图4,计算机设备首先确定并行执行线程池40a中空闲线程对应的空闲数量,根据空闲线程E1、空闲线程E2、空闲线程E3、空闲线程E4、空闲线程E5、空闲线程E6、空闲
线程E7、忙碌线程E8以及忙碌线程E9,可知并行执行线程池40a目前拥有7个空闲线程,所以
空闲数量等于7。将空闲数量7与并行执行线程阈值进行比较,其中,并行执行线程阈值可根
据硬件情况进行配置,例如并行执行线程阈值等于并行执行线程池40a中总线程的二分之
一,或三分之二,此处不限定并行执行线程阈值与并行执行线程池40a中总线程的关系,可
以根据实际应用场景进行设定,或是根据其他情况进行设定均可。
[0121] 若并行执行线程阈值设为8,则空闲数量小于并行执行线程阈值,此时,计算机设备可以不从执行队列40b中按序获取交易数据,也可以先从执行队列40b中按序获取与空闲
数量等同的至少两个交易数据,即交易数据T(m,1)、交易数据T(m,2)、交易数据T(m,3)、交易数据
T(m+1,1)、交易数据T(m+1,2)、交易数据T(m+1,3)以及交易数据T(m+2,1),但此时不执行步骤S102,等
到空闲数量等于或大于8时,再通过新增的空闲线程从执行队列40b中按序获取交易数据
T(m+2,2)等,然后执行步骤S102。
[0122] 若并行执行线程阈值设为6,则空闲数量大于并行执行线程阈值,此时,计算机设备可以通过7个空闲线程从执行队列40b中按序获取7个交易数据,即交易数据T(m,1)、交易数
据T(m,2)、交易数据T(m,3)、交易数据T(m+1,1)、交易数据T(m+1,2)、交易数据T(m+1,3)以及交易数据
T(m+2,1),如图4所示,将交易数据T(m,1)添加至空闲线程E1中,将交易数据T(m,2)添加至空闲线
程E2中,将交易数据T(m,3)添加至空闲线程E3中,将交易数据T(m+1,1)添加至空闲线程E4中,将
交易数据T(m+1,2)添加至空闲线程E5中,将交易数据T(m+1,3)添加至空闲线程E6中,以及将交易
数据T(m+2,1)添加至空闲线程E7中。
[0123] 步骤S102,对至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;至少两个交易数
据包括目标交易数据。
[0124] 具体的,至少两个合约业务包括至少两个智能合约以及至少两个交易执行业务;根据至少两个合约信息中分别包括的合约标识,确定分别用于执行至少两个交易数据的智
能合约;根据至少两个合约信息中分别包括的业务标识,确定至少两个智能合约所分别调
用的用于执行至少两个交易数据的交易执行业务;并行执行至少两个交易执行业务,获取
每个交易执行业务被执行时所生成的并行交易读缓存以及并行交易写缓存。
[0125] 其中,获取至少两个交易数据分别对应的并行交易缓存(包括并行交易读缓存以及并行交易写缓存)的具体过程可以包括:根据至少两个交易执行业务,分别为至少两个交
易数据创建初始交易读缓存以及初始交易写缓存;并行执行至少两个交易执行业务,获取
每个交易执行业务被执行时所生成的并行交易读数据以及并行交易写数据;将每个并行交
易读数据存储至对应的初始交易读缓存,得到至少两个交易数据分别对应的并行交易读缓
存;将每个并行交易写数据存储至对应的初始交易写缓存,得到至少两个交易数据分别对
应的并行交易写缓存。
[0126] 由步骤S101可知,每个交易数据均携带其对应的合约信息,如图4中所示例的区块m+2中交易数据T(m+2,1)所携带的合约信息F(m+2,1),其中,合约信息F(m+2,1)包括合约标识,例如
图4所示例的合约标识111为转账合约标识,则计算机设备可以根据该标识,确定用于执行
交易数据T(m+2,1)的智能合约为转账合约;进一步地,合约信息F(m+2,1)可以包括业务标识,例
如图4所示例的业务标识1111为转移合约标识,则计算机设备可以根据该标识,确定转账合
约所调用的用于执行交易数据T(m+2,1)的交易执行业务为交易转移业务。
[0127] 同理,计算机设备可以根据其他交易数据(包括交易数据T(m,1)、交易数据T(m,2)、交易数据T(m,3)、交易数据T(m+1,1)、交易数据T(m+1,2)以及交易数据T(m+1,3))分别携带的合约信息,
确定用于执行交易数据的智能合约以及智能合约所调用的交易执行业务。
[0128] 根据至少两个交易执行业务,计算机设备在每个交易数据所属的块缓存中,分别为至少两个交易数据创建初始交易缓存,其中,初始交易缓存包括初始交易读缓存以及初
始交易写缓存。由于在未并行执行至少两个交易数据分别对应的合约业务之前,每个交易
数据对应的初始交易读缓存以及初始交易写缓存均为空集,因为还未读取数据以及修改数
据,故图4中没有分别画出初始交易读缓存以及初始交易写缓存,均以初始交易缓存表示初
始交易读缓存以及初始交易写缓存。
[0129] 如图4所示,初始交易缓存可以包括交易数据T(m,1)对应的初始交易缓存N(m,1)、交易数据T(m,2)对应的初始交易缓存N(m,2)、交易数据T(m,3)对应的初始交易缓存N(m,3)、交易数据
T(m+1,1)对应的初始交易缓存N(m+1,1)、交易数据T(m+1,2)对应的初始交易缓存N(m+1,2)、交易数据
T(m+1,3)对应的初始交易缓存N(m+1,3),以及交易数据T(m+2,1)对应的初始交易缓存N(m+2,1)。可以
理解的是,初始交易缓存N(m,1)、初始交易缓存N(m,2)、初始交易缓存N(m,3)、初始交易缓存
N(m+1,1)、初始交易缓存N(m+1,2)、初始交易缓存N(m+1,3)以及初始交易缓存N(m+2,1)均为空集。
[0130] 请再参见图4,计算机设备根据空闲线程E1、空闲线程E2、空闲线程E3、空闲线程E4、空闲线程E5、空闲线程E6、空闲线程E7,并行执行交易数据T(m,1)对应的交易执行业务,交
易数据T(m,2)对应的交易执行业务,交易数据T(m,3)对应的交易执行业务,交易数据T(m+1,1)对
应的交易执行业务,交易数据T(m+1,2)对应的交易执行业务,交易数据T(m+1,3)对应的交易执行
业务,以及交易数据T(m+2,1)对应的交易执行业务。
[0131] 计算机设备获取每个交易执行业务被执行时所生成的并行交易读数据以及并行交易写数据,如图4所示,并行交易读数据可以包括交易数据T(m,1)对应的并行交易读数据
r(m,1)、交易数据T(m,2)对应的并行交易读数据r(m,2)、交易数据T(m,3)对应的并行交易读数据
r(m,3)、交易数据T(m+1,1)对应的并行交易读数据r(m+1,1)、交易数据T(m+1,2)对应的并行交易读数
据r(m+1,2)、交易数据T(m+1,3)对应的并行交易读数据r(m+1,3),以及交易数据T(m+2,1)对应的并行
交易读数据r(m+2,1)。
[0132] 并行交易写数据可以包括交易数据T(m,1)对应的并行交易写数据w(m,1)、交易数据T(m,2)对应的并行交易写数据w(m,2)、交易数据T(m,3)对应的并行交易写数据w(m,3)、交易数据
T(m+1,1)对应的并行交易写数据w(m+1,1)、交易数据T(m+1,2)对应的并行交易写数据w(m+1,2)、交易
数据T(m+1,3)对应的并行交易写数据w(m+1,3),以及交易数据T(m+2,1)对应的并行交易写数据
w(m+2,1)。
[0133] 计算机设备将每个并行交易读数据存储至对应的初始交易读缓存,得到至少两个交易数据分别对应的并行交易读缓存;如图4所示,将并行交易读数据r(m,1)存储至交易数据
T(m,1)对应的初始交易缓存N(m,1() 包括初始交易读缓存),得到交易数据T(m,1)对应的并行交
易读缓存R(m,1);计算机设备将并行交易读数据r(m,2)存储至交易数据T(m,2)对应的初始交易
缓存N(m,2() 包括初始交易读缓存),得到交易数据T(m,2)对应的并行交易读缓存R(m,2);将并行
交易读数据r(m,3)存储至交易数据T(m,3)对应的初始交易缓存N(m,3() 包括初始交易读缓存),
得到交易数据T(m,3)对应的并行交易读缓存R(m,3);计算机设备将并行交易读数据r(m+1,1)存储
至交易数据T(m+1,1)对应的初始交易缓存N(m+1,1)(包括初始交易读缓存),得到交易数据
T(m+1,1)对应的并行交易读缓存R(m+1,1);…;计算机设备将并行交易读数据r(m+2,1)存储至交易
数据T(m+2,1)对应的初始交易缓存N(m+2,1() 包括初始交易读缓存),得到交易数据T(m+2,1)对应
的并行交易读缓存R(m+2,1)。
[0134] 计算机设备将每个并行交易写数据存储至对应的初始交易写缓存,得到至少两个交易数据分别对应的并行交易写缓存;如图4所示,将并行交易写数据w(m,1)存储至交易数据
T(m,1)对应的初始交易缓存N(m,1() 包括初始交易写缓存),得到交易数据T(m,1)对应的并行交
易写缓存W(m,1);计算机设备将并行交易写数据w(m,2)存储至交易数据T(m,2)对应的初始交易
缓存N(m,2() 包括初始交易写缓存),得到交易数据T(m,2)对应的并行交易写缓存W(m,2);将并行
交易写数据w(m,3)存储至交易数据T(m,3)对应的初始交易缓存N(m,3() 包括初始交易写缓存),
得到交易数据T(m,3)对应的并行交易写缓存W(m,3);计算机设备将并行交易写数据w(m+1,1)存储
至交易数据T(m+1,1)对应的初始交易缓存N(m+1,1)(包括初始交易写缓存),得到交易数据
T(m+1,1)对应的并行交易写缓存W(m+1,1);…;计算机设备将并行交易写数据w(m+2,1)存储至交易
数据T(m+2,1)对应的初始交易缓存N(m+2,1() 包括初始交易写缓存),得到交易数据T(m+2,1)对应
的并行交易写缓存W(m+2,1)。
[0135] 若上述的至少两个交易数据分别对应的并行执行交易读数据之间均不冲突,即不存在交集,则可以如图4所示,将至少两个交易数据分别对应的并行执行交易写数据合并至
对应的块缓存(如图4所示例的块缓存Km+2、块缓存Km+1以及块缓存Km)中,但实际应用时,至
少两个并行执行交易读数据之间可能存在冲突,故无法直接将至少两个并行执行交易写数
据合并至对应的块缓存中,需要按序对至少两个并行执行交易读数据进读数据冲突校验,
然后根据校验结果确定是否可以将并行执行写缓存合并至块缓存中。每个并行执行交易写
缓存的合并时机为,所有前序交易(包括前面的区块中的交易数据以及本区块的前序交易)
均已合并完,具体过程请一并参见下文的步骤S103‑步骤S105。
[0136] 步骤S103,在至少两个区块分别对应的块缓存中确定已合并交易写缓存,在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;已合并交易写缓存所对应的
交易数据,在执行队列中的位置或添加时间处于目标交易数据之前。
[0137] 具体的,获取目标交易数据所属的目标区块,确定目标区块对应的目标区块高度;根据交易数据序号的顺序,在目标区块中确定已合并交易数据;已合并交易数据对应的交
易数据序号小于目标交易数据对应的交易数据序号;根据目标区块高度从至少两个区块中
确定已合并区块;已合并区块对应的区块高度小于目标区块高度;将已合并区块对应的块
缓存中的交易写缓存,以及已合并交易数据对应的交易写缓存确定为已合并交易写缓存。
[0138] 具体的,按照区块高度从高至低的顺序以及交易数据序号从大至小的顺序,在已合并交易写缓存中依次遍历,直至获取到目标交易数据所需读取的已合并交易写缓存;根
据目标交易数据所需读取的已合并交易写缓存生成更新交易读缓存。
[0139] 请一并参见图5,图5是本申请实施例提供的一种基于区块链的数据处理的场景示意图。为了便于理解以及叙述,将区块m设定为缓存数据库50d中的第一个区块,即缓存数据
库50d中的其他区块对应的区块高度均大于或者等于区块m对应的区块高度。缓存数据库
50d中的区块均为缓存区块,即还未上链的区块,而区块高度大于区块m对应的区块高度的
区块,均为链上区块,即已上链的区块。
[0140] 如图5所示,计算机设备获取目标交易数据T(m+3,2)所属的目标区块,明显地,目标交易数据T(m+3,2)是区块503b中的第2个交易数据,所以目标交易数据T(m+3,2)所属的目标区块
是区块503b,其中,区块503b的区块高度为m+3。区块503b可以包括交易数据T(m+3,1)、目标交
易数据T(m+3,2)以及交易数据T(m+3,3),根据交易数据序号的顺序,计算机设备可以确定目标区
块(即区块503b)中的交易数据T(m+3,1)为已合并交易数据。
[0141] 步骤S103所述的至少两个区块不属于分叉区块链,即区块链网络只有一个主链,此时可以根据目标区块对应的目标区块高度确定已合并区块,已合并区块对应的区块高度
小于目标区块高度。计算机设备将已合并区块对应的块缓存中的交易写缓存,以及已合并
交易数据对应的交易写缓存确定为已合并交易写缓存。
[0142] 可选的,至少两个区块属于分叉区块链,这种情况请参见下文图8所对应的实施例,此处暂不展开叙述。
[0143] 请一并参见图6,图6是本申请实施例提供的一种基于区块链的数据处理的场景示意图。计算机设备按照区块高度从高至低的顺序以及交易数据序号从大至小的顺序,在已
合并交易写缓存中依次遍历,已合并交易写缓存可以包括块缓存Km+2中的交易写缓存
W(m+2,1)、交易写缓存W(m+2,2)、交易写缓存W(m+2,3),块缓存Km+1中的交易写缓存W(m+1,1)、交易写
缓存W(m+1,2)、交易写缓存W(m+1,3),块缓存Km中的交易写缓存W(m,1)、交易写缓存W(m,2)、交易写
缓存W(m,3),以及块缓存Km+3中的交易写缓存W(m+3,1)。
[0144] 故先遍历交易写缓存W(m+3,1),若交易写缓存W(m+3,1)中存在目标交易数据T(m+3,2)所需读取的数据,则计算机设备可以将交易写缓存W(m+3,1)确定为更新交易写缓存;若交易写
缓存W(m+3,1)中不存在目标交易数据T(m+3,2)所需读取的数据,则遍历交易写缓存W(m+2,3);同
理,若交易写缓存W(m+2,3)中存在目标交易数据T(m+3,2)所需读取的数据,则计算机设备可以将
交易写缓存W(m+2,3)确定为更新交易写缓存;若交易写缓存W(m+2,3)中不存在目标交易数据
T(m+3,2)所需读取的数据,则遍历下个交易写缓存,直至获取到目标交易数据T(m+3,2)所需读取
的已合并交易写缓存;根据目标交易数据所需读取的已合并交易写缓存,计算机设备生成
更新交易读缓存,如图6所示,交易写缓存W(m+2,2)为更新交易写缓存G(m+3,2)。
[0145] 步骤S104,根据更新交易读缓存、目标交易数据对应的并行交易读缓存以及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存。
[0146] 具体的,将目标交易数据对应的并行交易读缓存中的并行交易读数据确定为目标并行交易读数据;确定目标并行交易读数据的目标对象,获取更新交易读缓存中与目标对
象相关联的更新交易读数据;对目标并行交易读数据以及更新交易读数据进行读数据冲突
校验,得到校验结果;根据校验结果、更新交易读数据以及目标交易数据对应的并行交易写
缓存,确定目标交易数据的待合并交易写缓存。
[0147] 其中,校验结果包括第一校验结果以及第二校验结果;得到校验结果的具体过程可以包括:将目标并行交易读数据以及更新交易读数据进行对比;若目标并行交易读数据
与更新交易读数据相同,则确定校验结果为第一校验结果;第一校验结果用于指示目标并
行交易读数据与更新交易读数据之间不存在读数据冲突;若目标并行交易读数据与更新交
易读数据不相同,则确定校验结果为第二校验结果;第二校验结果用于指示目标并行交易
读数据与更新交易读数据之间存在读数据冲突。
[0148] 其中,确定目标交易数据的待合并交易写缓存的具体过程可以包括:若校验结果为第一校验结果,则确定目标交易数据对应的并行交易写缓存为目标交易数据的待合并交
易写缓存;若校验结果为第二校验结果,则根据更新交易读数据以及目标交易数据所携带
的合约信息,生成目标交易数据的待合并交易写缓存。
[0149] 其中,生成目标交易数据的待合并交易写缓存的具体过程可以包括:根据目标交易数据所携带的合约信息中的合约标识,确定用于执行目标交易数据的目标智能合约;根
据目标交易数据所携带的合约信息中的业务标识,确定目标智能合约所调用的用于执行目
标交易数据的目标交易执行业务;根据更新交易读数据以及目标交易数据,执行目标交易
执行业务,获取目标交易数据对应的目标交易执行结果;根据目标交易执行结果更新目标
交易数据对应的并行交易写缓存,得到目标交易数据的待合并交易写缓存。
[0150] 请再参见图6,结合步骤S103可知,目标交易数据T(m+3,2)的更新交易写缓存G(m+3,2)为交易写缓存W(m+2,2)。可以理解的是,更新交易读缓存可以包括一个或者多个已合并的交
易写缓存。例如目标交易数据中的目标对象有多个,那么可以根据多个目标对象分别所属
的已合并交易写缓存,得到更新交易读缓存。
[0151] 其中,计算机设备将目标交易数据T(m+3,2)对应的并行交易读缓存R(m+3,2)中的并行交易读数据确定为目标并行交易读数据,即图6所示的交易读数据“账号60a余额为100”;确
定目标并行交易读数据的目标对象60f,即图6所示例的账号60a。
[0152] 更新交易读缓存G(m+3,2)可以包括3个交易读数据,分别为交易读数据“账号60a余额为120”、交易读数据“账号60b余额为100”、以及交易读数据“账号60c余额为220”。计算机
设备根据目标对象60f在更新交易读缓存G(m+3,2)中,获取更新交易读数据60e,即图6所示例
的交易读数据“账号60a余额为120”。
[0153] 计算机设备将目标并行交易读数据(即交易读数据“账号60a余额为100”),与更新交易读数据60e(即交易读数据“账号60a余额为120”)进行对比,显然两者不匹配,即目标并
行交易读数据与更新交易读数据60e之间存在读数据冲突,则确定校验结果为第二校验结
果。如图6所示,计算机设备获取目标交易数据T(m+3,2)对应的合约信息F(m+3,2),根据合约信息
F(m+3,2)中的合约标识111,确定用于执行目标交易数据T(m+3,2)的目标智能合约为转账合约,
根据合约信息F(m+3,2)中的业务标识1111,确定转账合约所调用的用于执行目标交易数据
T(m+3,2)的目标交易执行业务为交易转移业务。
[0154] 请再参见图6,计算机设备根据更新交易读数据60e(即交易读数据“账号60a余额为120”),以及目标交易数据T(m+3,2() 如图6所示例的账号60a向账号60b转移20),执行目标
交易执行业务,获取目标交易数据T(m+3,2)对应的目标交易执行结果,如图6所示例的交易执
行结果“账号60a余额为100”。根据目标并行交易读数据(即交易读数据“账号60a余额为
100”)以及目标交易数据T(m+3,2),可知并行交易写缓存W(m+3,2)中的目标并行交易写数据为
“账号60a余额为80”。
[0155] 计算机设备根据目标交易执行结果,即交易执行结果“账号60a余额为100”,更新目标交易数据T(m+3,2)对应的并行交易写缓存W(m+3,2),得到目标交易数据T(m+3,2)的待合并交
易写缓存D(m+3,2),如图6所示。
[0156] 可选的,若目标并行交易读数据与更新交易读数据60e相同,则确定校验结果为第一校验结果,第一校验结果用于指示目标并行交易读数据与更新交易读数据60e之间不存
在读数据冲突,进而计算机设备可以确定目标交易数据T(m+3,2)对应的并行交易写缓存
W(m+3,2)为目标交易数据T(m+3,2)的待合并交易写缓存D(m+3,2)。
[0157] 步骤S105,将目标交易数据的待合并交易写缓存合并至目标交易数据所属的块缓存中,继续对目标交易数据的下一个交易数据的待合并交易写缓存进行合并处理。
[0158] 具体的,请再参见图6,将目标交易数据T(m+3,2)的待合并交易写缓存D(m+3,2)合并至目标交易数据T(m+3,2)所属的块缓存Km+3中。
[0159] 后续交易数据对应的待合并交易写缓存的合并过程,与目标交易数据T(m+3,2)对应的待合并交易写缓存的合并过程一致,此处不再一一进行赘述。
[0160] 可以理解的是,每个区块分别对应的块缓存在共识模块确定该区块可以上链之前,一直保存在缓存数据库50d中,并未写入到账本(未上链),当区块确定上链时,即针对区
块的共识结果通过时,可以将缓存数据库50d中块缓存中的数据以及区块共同写入账本。
[0161] 可以理解的是,区块链的性能会制约区块链的适用场景,区块链的性能指标主要包括交易吞吐量和延时两方面,交易吞吐量表示在固定时间区块链网络可以处理的交易数
量,延时表示区块链网络对交易的响应和处理时间。
[0162] 实际应用时,需要综合上述两个要素进行考察,只使用交易吞吐量而不考虑延时是不正确的,长时间的交易响应会阻碍用户的使用,从而影响用户体验;减小区块内交易的
数量可以减少延时,但不考虑交易吞吐量的方案会导致大量的交易在执行队列中排队,某
些平台必须能够处理大量的并发用户,交易吞吐量过低的技术方案会被直接放弃。
[0163] 单纯的提高区块大小解决不了上述问题,因为区块需要时间传输验证,如果区块太大,那么就会造成网络节点的不一致性加重(分叉变多),从而严重影响区块链网络的可
靠性。而本申请正是兼顾交易吞吐量与交易处理延迟的一种方案,多个区块并行以及块内
多个合约并行,可以更快地处理多个区块,不仅能减少交易的处理延迟,而且能提高区块链
的交易吞吐量。
[0164] 请一并参见图7,图7是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图。如图7所示,S0、S1’、S2’等,代表数据存储状态,例如,S0表示原始数据,也可以理
解为图3中的并行交易读数据,S1’表示处理完交易请求T1后的修改数据(也可以理解为图3
中的并行交易写数据),S2’表示处理完交易请求T2后的修改数据(也可以理解为图3中的并
行交易写数据),S3’表示处理完交易请求T3后的修改数据(也可以理解为图3中的并行交易
写数据),S3是合并完交易请求T1、交易请求T2、交易请求T3分别对应的待合并交易写缓存
之后的块缓存。
[0165] 上述的交易请求均包含合约调用请求,等同于图3中的合约信息。结合图3所对应的实施例以及图7,可知合约业务并行可以分为3大步骤:
[0166] 1、并行处理:并行执行交易请求中的合约业务;
[0167] 2、冲突检测:按序检查并行执行是否合理;
[0168] 3、合并交易:将合约业务的执行结果合并到块缓存。
[0169] 具体过程请参见图3所对应的实施例中的描述,此处不再进行赘述。
[0170] 在本申请实施例中,根据至少两个交易数据所分别携带的合约信息,可以并行执行至少两个交易数据所分别对应的合约业务,其中,该至少两个交易数据是按照区块高度
的顺序以及交易数据序号的顺序排列的,且可以来源于至少两个区块;获取每个合约业务
被执行时所生成的并行交易读缓存以及并行交易写缓存,由于目标交易数据对应的并行交
易读缓存可能是过旧的交易读缓存,所以先在至少两个区块分别对应的块缓存中确定已合
并交易写缓存,然后在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;其
中,已合并交易写缓存所对应的交易数据,在执行队列中的位置或添加时间处于目标交易
数据之前;根据更新交易读缓存,可以确定目标交易数据对应的并行交易读缓存是否是过
旧的交易读缓存,进而可以根据更新交易读缓存以及目标交易数据对应的并行交易写缓存
确定目标交易数据的待合并交易写缓存。上述可知,在一方面,本申请通过并行执行多个区
块中的交易数据,可以提高区块链网络处理交易数据的效率,减少执行队列中大量交易数
据的排队;另一方面,并行执行完多个交易数据后,本申请根据每个交易数据对应的已合并
交易写缓存,可以获取其对应的更新交易读缓存,进而可以根据每个交易数据对应的更新
交易读缓存,确定其对应的并行交易读缓存是否为过旧的交易读缓存,达到校验并行交易
读缓存以及并行交易写缓存的效果,进而可以保证待合并交易写缓存的正确性,从而可以
在提高对交易数据的处理效率的同时,还可以保证块缓存中的数据的正确性。
[0171] 进一步地,请参见图8,图8是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图。如图8所示,该数据处理方法可以包括以下步骤S1031‑步骤S1036,且步骤
S1031‑步骤S1036为图3所对应实施例中步骤S103的一个具体实施例。
[0172] 步骤S1031,获取目标交易数据所属的目标区块,确定目标区块对应的目标区块高度。
[0173] 步骤S1032,根据交易数据序号的顺序,在目标区块中确定已合并交易数据;已合并交易数据对应的交易数据序号小于目标交易数据对应的交易数据序号。
[0174] 上述步骤S1031‑步骤S1032的具体过程请参见上文图3所对应实施例中步骤S103的描述,此处不再进行赘述。
[0175] 步骤S1033,获取目标区块的目标区块哈希,将至少两个哈希映射表中包含目标区块哈希的哈希映射表,确定为目标哈希映射表。
[0176] 具体的,至少两个区块属于分叉区块链,分叉区块链包括至少两个分支链分别对应的哈希映射表;每个哈希映射表均包括对应的分支链上的区块高度与区块哈希之间的关
联关系。
[0177] 在区块链中,由矿工挖出区块并将其链接到主链上,一般来讲同一时间内只产生一个区块,如果发生同一时间内有两个区块同时被生成,就会在全网中出现两个长度相同、
区块里的交易信息相同但矿工签名不同或者交易排序不同的区块链,这样的情况叫做分叉
(Fork),此时区块链可以称作分叉区块链。
[0178] 根据图5可知,目标区块所属的区块链为分叉区块链,该分叉区块链可以包括两个分支链,一个分支链包括区块m以及分叉区块50b,其中,分叉区块50b可以包括区块501b、区
块502b、区块503b以及区块m+4;区块m的区块高度为m,区块501b的区块高度为m+1,区块
502b的区块高度为m+2,区块503b的区块高度为m+3,区块m+4的区块高度为m+4;另一个分支
链包括区块m以及分叉区块50a,其中,分叉区块50a可以包括区块501a、区块502a以及区块
503a;区块501a的区块高度为m+1,区块502a的区块高度为m+2,区块503a的区块高度为m+3。
[0179] 请再参见图5,至少两个区块可以包括区块m、区块501b、区块502b、区块503b、区块m+4、区块501a、区块502a以及区块503a。明显地,区块501b的区块高度与区块501a的区块高
度一致,均为m+1;区块502b的区块高度与区块502a的区块高度一致,均为m+2;区块503b的
区块高度与区块503a的区块高度一致,均为m+3;所以仅仅根据区块高度在至少两个区块中
获取目标区块(即区块503b)的已合并区块,将会出现数据紊乱现象,区块503b的前继区块
对应的区块高度为m+2,但是根据图5,可知,区块高度为m+2的区块共有两个,分别为区块
502b以及区块502a,因此需要一种方案,该方案可以准确地为目标区块确定已合并区块。
[0180] 本申请实施例在缓存数据库50d中为分叉区块链设置哈希映射表,每个哈希映射表均包括对应的分支链上的区块高度与区块哈希之间的关联关系,结合区块高度以及哈希
映射表确定目标区块的已合并区块。如图5所示,缓存数据库50d中包括两个哈希映射表,分
别为哈希映射表1以及哈希映射表2。其中,哈希映射表1中的区块高度可以包括区块高度m+
4、区块高度m+3、区块高度m+2以及区块高度m+1;哈希映射表1中的区块哈希可以包括与区
块高度m+4对应的区块哈希Cb6d3d598e91420a8eca40c4f8e6d608,与区块高度m+3对应的区
块哈希666d3d5ace91420a8eca40c4f84kd608,与区块高度m+2对应的区块哈希
666d3d5ace91420a8eca40c4f84kd60,与区块高度m+1对应的区块哈希333d3dnb8e91420a8
eca40c4f8e6ytrk。
[0181] 其中,哈希映射表2中的区块高度可以包括区块高度m+3、区块高度m+2以及区块高度m+1;哈希映射表2中的区块哈希可以包括与区块高度m+3对应的区块哈希226d3d5ace91
420a8ghj40c4f84kd80y,与区块高度m+2对应的区块哈希546d3d598e9jkl0a8eca40b908e6
d608,与区块高度m+1对应的区块哈希346d3d5dek91420a8eca40c4f84kd222。
[0182] 计算机设备获取目标区块的目标区块哈希,如图5示例的区块哈希666d3d5ace91420a8eca40c4f84kd608,将目标区块哈希与两个哈希映射表中的区块哈希进行对比,根据
对比结果将两个哈希映射表中包含目标区块哈希的哈希映射表,确定为目标哈希映射表
50c,即图5所示例的哈希映射表1,此时,计算机设备可知目标区块来源于哈希映射表1所对
应的分支链上,将包括目标区块的分支链确定为目标分支链,该目标分支链可以包括分叉
区块50b,即区块501b、区块502b、区块503b以及区块m+4。
[0183] 步骤S1034,在目标哈希映射表中,将小于目标区块高度的区块高度所关联的区块哈希,确定为已合并区块哈希。
[0184] 具体的,在目标哈希映射表中,计算机设备将小于目标区块高度(即m+3)的区块高度确定为已合并分叉区块高度(即图5所示例的m+2以及m+1),将已合并分叉区块高度所关
联的分叉区块哈希,确定为已合并分叉区块哈希,如图5所示例的区块哈希546d3d598e9jk
l0a8eca40b908e6d608,以及区块哈希346d3d5dek91420a8eca40c4f84kd222。
[0185] 步骤S1035,在目标哈希映射表对应的分支链上,将已合并区块哈希对应的区块确定为已合并区块。
[0186] 具体的,在目标哈希映射表对应的分支链上,即目标分支链,将已合并分叉区块哈希对应的区块确定为已合并分叉区块,即区块502b以及区块501b,结合主链上的区块m,确
定目标区块的为已合并区块50e可以包括区块502b、区块501b以及区块m。计算机设备将已
合并区块对应的块缓存中的交易写缓存,以及已合并交易数据对应的交易写缓存确定为已
合并交易写缓存,请结合图5以及图6,已合并交易数据可以包括交易数据T(m+3,1),已合并区
块可以包括即区块502b、区块501b以及区块m。
[0187] 步骤S1036,将已合并区块对应的块缓存中的交易写缓存,以及已合并交易数据对应的交易写缓存确定为已合并交易写缓存。
[0188] 具体的,已合并区块对应的块缓存(如图6所示例的块缓存Km+2、块缓存Km+1以及块缓存Km)中的交易写缓存可以包括交易写缓存W(m+2,1)、交易写缓存W(m+2,2)、交易写缓存
W(m+2,3)、交易写缓存W(m+1,1)、交易写缓存W(m+1,2)、交易写缓存W(m+1,3)、交易写缓存W(m,1)、交易
写缓存W(m,2),以及交易写缓存W(m,3);已合并交易数据对应的交易写缓存可以包括块缓存
Km+3中的交易写缓存W(m+3,1)。
[0189] 可以理解的是,每个区块分别对应的块缓存在共识模块确定该区块可以上链之前一直保存在缓存数据库50d中,并未写入到账本(未上链),因此本申请支持区块链分叉,当
区块确定上链时(该区块在最长链中,例如图5中所示例的目标分支链),即针对区块的共识
结果通过时,可以将缓存数据库50d中块缓存中的数据以及区块共同写入账本。
[0190] 上述可知,区块链存在分叉区块时,可以在区块链网络中设置哈希映射表,故本申请实施例可以区块链网络中并行执行多个区块、多个合约业务,该多个区块可以包括分叉
区块。
[0191] 在本申请实施例中,根据至少两个交易数据所分别携带的合约信息,可以并行执行至少两个交易数据所分别对应的合约业务,其中,该至少两个交易数据是按照区块高度
的顺序以及交易数据序号的顺序排列的,且可以来源于至少两个区块;获取每个合约业务
被执行时所生成的并行交易读缓存以及并行交易写缓存,由于目标交易数据对应的并行交
易读缓存可能是过旧的交易读缓存,所以先在至少两个区块分别对应的块缓存中确定已合
并交易写缓存,然后在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;其
中,已合并交易写缓存所对应的交易数据,在执行队列中的位置或添加时间处于目标交易
数据之前;根据更新交易读缓存,可以确定目标交易数据对应的并行交易读缓存是否是过
旧的交易读缓存,进而可以根据更新交易读缓存以及目标交易数据对应的并行交易写缓存
确定目标交易数据的待合并交易写缓存。上述可知,在一方面,本申请通过并行执行多个区
块中的交易数据,可以提高区块链网络处理交易数据的效率,减少执行队列中大量交易数
据的排队;另一方面,并行执行完多个交易数据后,本申请根据每个交易数据对应的已合并
交易写缓存,可以获取其对应的更新交易读缓存,进而可以根据每个交易数据对应的更新
交易读缓存,确定其对应的并行交易读缓存是否为过旧的交易读缓存,达到校验并行交易
读缓存以及并行交易写缓存的效果,进而可以保证待合并交易写缓存的正确性,从而可以
在提高对交易数据的处理效率的同时,还可以保证块缓存中的数据的正确性。
[0192] 进一步地,请参见图9,图9是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图。上述数据处理装置可以是运行于计算机设备中的一个计算机程序(包括
程序代码),例如该数据处理装置为一个应用软件;该装置可以用于执行本申请实施例提供
的方法中的相应步骤。如图9所示,该数据处理装置1可以包括:第一获取模块11、第二获取
模块12、第三获取模块13、第一合并模块14以及第二合并模块15。
[0193] 第一获取模块11,用于将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中,从执行队列中按序获取至少两个交易数据;至少
两个交易数据均携带合约信息;
[0194] 第二获取模块12,用于对至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;至少
两个交易数据包括目标交易数据;
[0195] 第三获取模块13,用于在至少两个区块分别对应的块缓存中确定已合并交易写缓存,在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;已合并交易写缓存
所对应的交易数据,在执行队列中的位置或添加时间处于目标交易数据之前;
[0196] 第一合并模块14,用于根据更新交易读缓存、目标交易数据对应的并行交易读缓存以及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存;
[0197] 第二合并模块15,用于将目标交易数据的待合并交易写缓存合并至目标交易数据所属的块缓存中,继续对目标交易数据的下一个交易数据的待合并交易写缓存进行合并处
理。
[0198] 其中,第一获取模块11、第二获取模块12、第三获取模块13、第一合并模块14以及第二合并模块15的具体功能实现方式可以参见上述图3对应实施例中的步骤S101‑步骤
S105,这里不再进行赘述。
[0199] 再请参见图9,第一获取模块11可以包括:第一确定单元111以及第一获取单元112。
[0200] 第一确定单元111,用于确定并行执行线程池中空闲线程对应的空闲数量;
[0201] 第一获取单元112,用于若空闲数量等于或大于并行执行线程阈值,则通过空闲线程从执行队列中按序获取至少两个交易数据;至少两个交易数据的交易数量等于空闲数
量。
[0202] 其中,第一确定单元111以及第一获取单元112的具体功能实现方式可以参见上述图3对应实施例中的步骤S101,这里不再进行赘述。
[0203] 再请参见图9,至少两个合约业务包括至少两个智能合约以及至少两个交易执行业务;
[0204] 第二获取模块12可以包括:第二确定单元121、第三确定单元122以及第二获取单元123。
[0205] 第二确定单元121,用于根据至少两个合约信息中分别包括的合约标识,确定分别用于执行至少两个交易数据的智能合约;
[0206] 第三确定单元122,用于根据至少两个合约信息中分别包括的业务标识,确定至少两个智能合约所分别调用的用于执行至少两个交易数据的交易执行业务;
[0207] 第二获取单元123,用于并行执行至少两个交易执行业务,获取每个交易执行业务被执行时所生成的并行交易读缓存以及并行交易写缓存。
[0208] 其中,第二确定单元121、第三确定单元122以及第二获取单元123的具体功能实现方式可以参见上述图3对应实施例中的步骤S102,这里不再进行赘述。
[0209] 再请参见图9,第二获取单元123可以包括:第一缓存子单元1231、第一获取子单元1232、第一存储子单元1233以及第二存储子单元1234。
[0210] 第一缓存子单元1231,用于根据至少两个交易执行业务,分别为至少两个交易数据创建初始交易读缓存以及初始交易写缓存;
[0211] 第一获取子单元1232,用于并行执行至少两个交易执行业务,获取每个交易执行业务被执行时所生成的并行交易读数据以及并行交易写数据;
[0212] 第一存储子单元1233,用于将每个并行交易读数据存储至对应的初始交易读缓存,得到至少两个交易数据分别对应的并行交易读缓存;
[0213] 第二存储子单元1234,用于将每个并行交易写数据存储至对应的初始交易写缓存,得到至少两个交易数据分别对应的并行交易写缓存。
[0214] 其中,第一缓存子单元1231、第一获取子单元1232、第一存储子单元1233以及第二存储子单元1234的具体功能实现方式可以参见上述图3对应实施例中的步骤S102,这里不
再进行赘述。
[0215] 再请参见图9,第三获取模块13可以包括:第三获取单元131以及生成更新单元132。
[0216] 第三获取单元131,用于按照区块高度从高至低的顺序以及交易数据序号从大至小的顺序,在已合并交易写缓存中依次遍历,直至获取到目标交易数据所需读取的已合并
交易写缓存;
[0217] 生成更新单元132,用于根据目标交易数据所需读取的已合并交易写缓存生成更新交易读缓存。
[0218] 其中,第三获取单元131以及生成更新单元132的具体功能实现方式可以参见上述图3对应实施例中的步骤S103,这里不再进行赘述。
[0219] 再请参见图9,第一合并模块14可以包括:第四确定单元141、第四获取单元142、校验数据单元143以及第五确定单元144。
[0220] 第四确定单元141,用于将目标交易数据对应的并行交易读缓存中的并行交易读数据确定为目标并行交易读数据;
[0221] 第四获取单元142,用于确定目标并行交易读数据的目标对象,获取更新交易读缓存中与目标对象相关联的更新交易读数据;
[0222] 校验数据单元143,用于对目标并行交易读数据以及更新交易读数据进行读数据冲突校验,得到校验结果;
[0223] 第五确定单元144,用于根据校验结果、更新交易读数据以及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存。
[0224] 其中,第四确定单元141、第四获取单元142、校验数据单元143以及第五确定单元144的具体功能实现方式可以参见上述图3对应实施例中的步骤S104,这里不再进行赘述。
[0225] 再请参见图9,校验结果包括第一校验结果以及第二校验结果;
[0226] 校验数据单元143可以包括:对比数据子单元1431、第一确定子单元1432以及第二确定子单元1433。
[0227] 对比数据子单元1431,用于将目标并行交易读数据以及更新交易读数据进行对比;
[0228] 第一确定子单元1432,用于若目标并行交易读数据与更新交易读数据相同,则确定校验结果为第一校验结果;第一校验结果用于指示目标并行交易读数据与更新交易读数
据之间不存在读数据冲突;
[0229] 第二确定子单元1433,用于若目标并行交易读数据与更新交易读数据不相同,则确定校验结果为第二校验结果;第二校验结果用于指示目标并行交易读数据与更新交易读
数据之间存在读数据冲突。
[0230] 其中,对比数据子单元1431、第一确定子单元1432以及第二确定子单元1433的具体功能实现方式可以参见上述图3对应实施例中的步骤S104,这里不再进行赘述。
[0231] 再请参见图9,第五确定单元144可以包括:第三确定子单元1441以及第二缓存子单元1442。
[0232] 第三确定子单元1441,用于若校验结果为第一校验结果,则确定目标交易数据对应的并行交易写缓存为目标交易数据的待合并交易写缓存;
[0233] 第二缓存子单元1442,用于若校验结果为第二校验结果,则根据更新交易读数据以及目标交易数据所携带的合约信息,生成目标交易数据的待合并交易写缓存。
[0234] 其中,第三确定子单元1441以及第二缓存子单元1442的具体功能实现方式可以参见上述图3对应实施例中的步骤S104,这里不再进行赘述。
[0235] 再请参见图9,第二缓存子单元1442,具体用于根据目标交易数据所携带的合约信息中的合约标识,确定用于执行目标交易数据的目标智能合约;
[0236] 第二缓存子单元1442,还具体用于根据目标交易数据所携带的合约信息中的业务标识,确定目标智能合约所调用的用于执行目标交易数据的目标交易执行业务;
[0237] 第二缓存子单元1442,还具体用于根据更新交易读数据以及目标交易数据,执行目标交易执行业务,获取目标交易数据对应的目标交易执行结果;
[0238] 第二缓存子单元1442,还具体用于根据目标交易执行结果更新目标交易数据对应的并行交易写缓存,得到目标交易数据的待合并交易写缓存。
[0239] 其中,第二缓存子单元1442的具体功能实现方式可以参见上述图3对应实施例中的步骤S104,这里不再进行赘述。
[0240] 再请参见图9,第三获取模块13可以包括:第五获取单元133、第六确定单元134、第七确定单元135以及第八确定单元136。
[0241] 第五获取单元133,用于获取目标交易数据所属的目标区块,确定目标区块对应的目标区块高度;
[0242] 第六确定单元134,用于根据交易数据序号的顺序,在目标区块中确定已合并交易数据;已合并交易数据对应的交易数据序号小于目标交易数据对应的交易数据序号;
[0243] 第七确定单元135,用于根据目标区块高度从至少两个区块中确定已合并区块;已合并区块对应的区块高度小于目标区块高度;
[0244] 第八确定单元136,用于将已合并区块对应的块缓存中的交易写缓存,以及已合并交易数据对应的交易写缓存确定为已合并交易写缓存。
[0245] 其中,第五获取单元133、第六确定单元134、第七确定单元135以及第八确定单元136的具体功能实现方式可以参见上述图8对应实施例中的步骤S1031‑步骤S1036,这里不
再进行赘述。
[0246] 再请参见图9,至少两个区块属于分叉区块链,分叉区块链包括至少两个分支链分别对应的哈希映射表;每个哈希映射表均包括对应的分支链上的区块高度与区块哈希之间
的关联关系;
[0247] 第七确定单元135可以包括:第二获取子单元1351、第四确定子单元1352以及第五确定子单元1353。
[0248] 第二获取子单元1351,用于获取目标区块的目标区块哈希,将至少两个哈希映射表中包含目标区块哈希的哈希映射表,确定为目标哈希映射表;
[0249] 第四确定子单元1352,用于在目标哈希映射表中,将小于目标区块高度的区块高度所关联的区块哈希,确定为已合并区块哈希;
[0250] 第五确定子单元1353,用于在目标哈希映射表对应的分支链上,将已合并区块哈希对应的区块确定为已合并区块。
[0251] 其中,第二获取子单元1351、第四确定子单元1352以及第五确定子单元1353的具体功能实现方式可以参见上述图8对应实施例中的步骤S1033‑步骤S1035,这里不再进行赘
述。
[0252] 在本申请实施例中,根据至少两个交易数据所分别携带的合约信息,可以并行执行至少两个交易数据所分别对应的合约业务,其中,该至少两个交易数据是按照区块高度
的顺序以及交易数据序号的顺序排列的,且可以来源于至少两个区块;获取每个合约业务
被执行时所生成的并行交易读缓存以及并行交易写缓存,由于目标交易数据对应的并行交
易读缓存可能是过旧的交易读缓存,所以先在至少两个区块分别对应的块缓存中确定已合
并交易写缓存,然后在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;其
中,已合并交易写缓存所对应的交易数据,在执行队列中的位置或添加时间处于目标交易
数据之前;根据更新交易读缓存,可以确定目标交易数据对应的并行交易读缓存是否是过
旧的交易读缓存,进而可以根据更新交易读缓存以及目标交易数据对应的并行交易写缓存
确定目标交易数据的待合并交易写缓存。上述可知,在一方面,本申请通过并行执行多个区
块中的交易数据,可以提高区块链网络处理交易数据的效率,减少执行队列中大量交易数
据的排队;另一方面,并行执行完多个交易数据后,本申请根据每个交易数据对应的已合并
交易写缓存,可以获取其对应的更新交易读缓存,进而可以根据每个交易数据对应的更新
交易读缓存,确定其对应的并行交易读缓存是否为过旧的交易读缓存,达到校验并行交易
读缓存以及并行交易写缓存的效果,进而可以保证待合并交易写缓存的正确性,从而可以
在提高对交易数据的处理效率的同时,还可以保证块缓存中的数据的正确性。
[0253] 进一步地,请参见图10,图10是本申请实施例提供的一种计算机设备的结构示意图。如图10所示,该计算机设备1000可以包括:至少一个处理器1001,例如CPU,至少一个网
络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。其中,通信总线1002用于
实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘
(Keyboard),网络接口1004可选地可以包括标准的有线接口、无线接口(如WI‑FI接口)。存
储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non‑volatile memory),例
如至少一个磁盘存储器。存储器1005可选地还可以是至少一个位于远离前述处理器1001的
存储装置。如图10所示,作为一种计算机存储介质的存储器1005可以包括操作系统、网络通
信模块、用户接口模块以及设备控制应用程序。
[0254] 在图10所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的
设备控制应用程序,以实现:
[0255] 将至少两个区块中的交易数据,按照区块高度的顺序以及交易数据序号的顺序添加到执行队列中,从执行队列中按序获取至少两个交易数据;至少两个交易数据均携带合
约信息;
[0256] 对至少两个交易数据并行执行所携带的合约信息对应的合约业务,获取每个合约业务被执行时所生成的并行交易读缓存以及并行交易写缓存;至少两个交易数据包括目标
交易数据;
[0257] 在至少两个区块分别对应的块缓存中确定已合并交易写缓存,在已合并交易写缓存中,获取目标交易数据对应的更新交易读缓存;已合并交易写缓存所对应的交易数据,在
执行队列中的位置或添加时间处于目标交易数据之前;
[0258] 根据更新交易读缓存、目标交易数据对应的并行交易读缓存以及目标交易数据对应的并行交易写缓存,确定目标交易数据的待合并交易写缓存;
[0259] 将目标交易数据的待合并交易写缓存合并至目标交易数据所属的块缓存中,继续对目标交易数据的下一个交易数据的待合并交易写缓存进行合并处理。
[0260] 应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3、图7以及图8所分别对应的实施例中对基于区块链的数据处理方法的描述,也可执行前文图9所对应实
施例中对数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也
不再进行赘述。
[0261] 本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令被处理器执行时实现图3、图7以及图8
中各个步骤所提供的基于区块链的数据处理方法,具体可参见上述图3、图7以及图8中各个
步骤所提供的实现方式,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进
行赘述。
[0262] 上述计算机可读存储介质可以是前述任一实施例提供的基于区块链的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读
存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬
盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡
(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存
储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机
设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者
将要输出的数据。
[0263] 本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的
处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算
机设备可执行前文图3、图7以及图8所分别对应的实施例中对基于区块链的数据处理方法
的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
[0264] 本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖
不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于
已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这
些过程、方法、装置、产品或设备固有的其他步骤单元。
[0265] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件
和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这
些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专
业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不
应认为超出本申请的范围。
[0266] 本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每
一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指
令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器
以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用
于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能
的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定
方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令
装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框
或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理
设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处
理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个
流程和/或结构示意一个方框或多个方框中指定的功能的步骤。
[0267] 以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。