合约数据处理方法、装置、计算机可读存储介质和计算机设备转让专利

申请号 : CN201910853888.6

文献号 : CN110569264B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李茂材刘区城王宗友孔利蓝虎杨常青时一防周开班朱耿良陈秋平张劲松刘攀

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

摘要 :

本申请涉及一种合约数据处理方法、装置、计算机可读存储介质和计算机设备,方法包括:获取各个待处理交易对应的智能合约方法,基于合约缓存创建目标块对应的块缓存,创建各个待处理交易对应的初始交易缓存,在各个初始交易缓存中并行执行对应的智能合约方法,得到对应的更新交易缓存,按交易顺序依次将更新交易缓存合并至块缓存,当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据无资源冲突时,将当前待合并更新交易缓存合并至块缓存中,反之,则重新执行其对应的智能合约方法,将得到的交易缓存合并至块缓存,直到所有更新交易缓存合并至块缓存中得到目标块缓存,根据目标块缓存生成更新块。该方法能够提高智能合约方法的执行效率。

权利要求 :

1.一种合约数据处理方法,包括:获取各个待处理交易对应的智能合约方法;

获取目标块,基于合约缓存创建所述目标块对应的块缓存,基于所述块缓存创建与各个所述待处理交易对应的初始交易缓存;块缓存用于缓存所有待处理交易对应的交易结果,各个所述待处理交易对应的初始交易缓存用于缓存执行对应的智能合约方法产生的交易结果;在各个所述初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的交易结果,根据各个待处理交易对应的交易结果更新各个待处理交易对应的初始交易缓存得到各个所述待处理交易对应的更新交易缓存;

按交易顺序和各个所述待处理交易对应的更新交易缓存的类型依次将各个所述更新交易缓存合并至所述块缓存;所述更新交易缓存的类型包括更新交易读缓存和更新交易写缓存;

当当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据无资源冲突时,将所述当前待合并更新交易缓存合并至所述块缓存中;当当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突时,则基于所述块缓存重新执行所述当前待合并更新交易缓存对应的智能合约方法,将执行结果对应的交易缓存合并至所述块缓存;其中,当当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在交集时,判定当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突;

当当前待合并更新交易缓存对应的智能合约方法被执行的次数达到预设次数时所对应的执行结果与所述块缓存存在资源冲突时,丢弃所述当前待合并更新交易缓存;

直到各个待处理交易对应的更新交易缓存合并完成,得到目标块缓存;

根据所述目标块缓存生成更新块。

2.根据权利要求1所述的方法,其特征在于,所述基于合约缓存创建所述目标块对应的块缓存,创建与各个所述待处理交易对应的初始交易缓存,包括:基于合约缓存为所述目标块创建对应的块读缓存和块写缓存;

基于所述块读缓存和所述块写缓存为各个所述待处理交易创建对应的初始交易读缓存和初始交易写缓存。

3.根据权利要求2所述的方法,其特征在于,所述在各个所述初始交易缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易缓存,包括:在各个所述待处理交易对应的初始交易读缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易读缓存;

在各个所述待处理交易对应的初始交易写缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易写缓存。

4.根据权利要求3所述的方法,其特征在于,所述按交易顺序依次将各个所述更新交易缓存合并至所述块缓存,包括:

获取各个所述待处理交易对应的交易顺序;

根据所述交易顺序依次将各个所述待处理交易对应的更新交易写缓存合并至所述块写缓存中。

5.根据权利要求1所述的方法,其特征在于,所述当前待合并更新交易缓存为当前更新交易写缓存或当前更新交易读缓存,所述初始交易缓存包括初始交易读缓存和初始交易写缓存,所述当前更新交易写缓存是当前待处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,所述当前更新交易读缓存是所述当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法得到的,所述块缓存包括块读缓存和块写缓存;

所述当当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突时,包括:

当所述当前待合并更新交易缓存为当前更新交易写缓存时,获取所述块写缓存中的历史已合并交易缓存数据,所述历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至所述块缓存后更新为已处理交易;

当所述当前更新交易写缓存与至少一个所述历史已合并交易缓存数据存在交集时,则确定所述当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突。

6.根据权利要求5所述的方法,其特征在于,所述当所述当前更新交易写缓存与至少一个所述历史已合并交易缓存数据存在交集时,包括:获取所述当前更新交易写缓存对应的当前交易写键值对,所述当前交易写键值对包括当前键和对应的当前值;

获取所述历史已合并交易缓存数据对应的历史交易写键值对,所述历史交易写键值对包括历史键和对应的历史值;

当各个所述历史键中存在至少一个与所述当前键相同的目标历史键时,则确定所述当前更新交易写缓存与至少一个所述历史已合并交易缓存数据存在交集。

7.根据权利要求5所述的方法,其特征在于,所述方法还包括:获取所述当前待处理交易对应的当前更新交易读缓存,将所述当前更新交易读缓存作为所述待合并更新交易缓存;

当所述当前更新交易读缓存与至少一个所述历史已合并交易缓存数据存在交集时,则确定所述当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突。

8.根据权利要求7所述的方法,其特征在于,所述当所述当前更新交易读缓存与至少一个所述历史已合并交易缓存数据存在交集时,包括:获取所述当前更新交易读缓存对应的当前交易读键值对,所述当前交易读键值对包括当前键和对应的当前值;

获取所述历史已合并交易缓存数据对应的历史交易写键值对,所述历史交易写键值对包括历史键和对应的历史值;

当各个所述历史键中存在至少一个与所述当前键相同的目标历史键时,则确定所述当前更新交易读缓存与至少一个所述历史已合并交易缓存数据存在交集。

9.一种合约数据处理装置,其特征在于,所述装置包括:智能合约方法获取模块,用于获取各个待处理交易对应的智能合约方法;

缓存空间创建模块,用于获取目标块,基于合约缓存创建所述目标块对应的块缓存,基于所述块缓存创建与各个所述待处理交易对应的初始交易缓存;块缓存用于缓存所有待处理交易对应的交易结果,各个所述待处理交易对应的初始交易缓存用于缓存执行对应的智能合约方法产生的交易结果;初始交易缓存更新模块,用于在各个所述初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的交易结果,根据各个待处理交易对应的交易结果更新各个待处理交易对应的初始交易缓存得到各个所述待处理交易对应的更新交易缓存;

更新交易缓存合并模块,用于按交易顺序和各个所述待处理交易对应的更新交易缓存的类型依次将各个所述更新交易缓存合并至所述块缓存;所述更新交易缓存的类型包括更新交易读缓存和更新交易写缓存;资源冲突检测模块,用于当当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据无资源冲突时,将所述当前待合并更新交易缓存合并至所述块缓存中;

所述资源冲突检测模块还用于当当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突时,则基于所述块缓存重新执行所述当前待合并更新交易缓存对应的智能合约方法,将执行结果对应的交易缓存合并至所述块缓存;当当前待合并更新交易缓存对应的智能合约方法被执行的次数达到预设次数时所对应的执行结果与所述块缓存存在资源冲突时,丢弃所述当前待合并更新交易缓存;直到各个待处理交易对应的更新交易缓存合并完成,得到目标块缓存;

其中,当当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在交集时,判定当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突;

目标块缓存合并模块,用于根据所述目标块缓存生成更新块。

10.根据权利要求9所述的装置,其特征在于,所述缓存空间创建模块包括:块子缓存创建单元,用于基于合约缓存为所述目标块创建对应的块读缓存和块写缓存;

交易子缓存创建单元,用于基于所述块读缓存和所述块写缓存为各个所述待处理交易创建对应的初始交易读缓存和初始交易写缓存。

11.根据权利要求10所述的装置,其特征在于,所述初始交易缓存更新模块包括:初始交易读缓存执行单元,用于在各个所述待处理交易对应的初始交易读缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易读缓存;

初始交易写缓存执行单元,用于在各个所述待处理交易对应的初始交易写缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易写缓存。

12.根据权利要求11所述的装置,其特征在于,所述更新交易缓存合并模块包括:交易顺序确定单元,用于获取各个所述待处理交易对应的交易顺序;

更新交易写缓存合并单元,用于根据所述交易顺序依次将各个所述待处理交易对应的更新交易写缓存合并至所述块写缓存中。

13.根据权利要求9所述的装置,其特征在于,所述当前待合并更新交易缓存为当前更新交易写缓存或当前更新交易读缓存,所述初始交易缓存包括初始交易读缓存和初始交易写缓存,所述当前更新交易写缓存是当前待处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,所述当前更新交易读缓存是所述当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法得到的,所述块缓存包括块读缓存和块写缓存;

所述装置还用于:

当所述待合并更新交易缓存为当前更新交易写缓存时,获取所述块写缓存中的历史已合并交易缓存数据,所述历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,所述待处理交易对应的更新交易缓存合并至所述块缓存后更新为所述已处理交易;

当所述当前更新交易写缓存与至少一个所述历史已合并交易缓存数据存在交集时,则确定所述当前待合并更新交易缓存与所述块缓存中的历史已合并交易缓存数据存在资源冲突。

14.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至8中任一项所述方法的步骤。

15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至8中任一项所述方法的步骤。

说明书 :

合约数据处理方法、装置、计算机可读存储介质和计算机设备

[0001] 本申请是于2019年08月09日提交中国专利局,申请号为2019107354599,发明名称为“合约数据处理方法、装置、计算机可读存储介质和计算机设备”的分案申请,其全部内容
通过引用结合在本申请中。

技术领域

[0002] 本申请涉及计算机技术领域,特别是涉及一种合约数据处理方法、装置、计算机可读存储介质和计算机设备。

背景技术

[0003] 随着计算机技术的发展,智能合约与区块链密切相关,智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行
可信交易,这些交易可追踪且不可逆转。然而,目前只能按照待处理交易的交易顺序依次执
行对应的智能合约方法,若短时间内出现请求量较大的业务场景,则目前智能合约方法的
串行方法容易造成智能合约方法的执行效率低下。

发明内容

[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] 图1为一个实施例中合约数据处理方法的应用环境图;
[0048] 图2为一个实施例中合约数据处理方法的流程示意图;
[0049] 图3为一个实施例中块缓存和初始交易缓存的示意图;
[0050] 图4为一个实施例中智能合约方法执行步骤的流程示意图;
[0051] 图5为一个实施例中更新交易缓存合并至块缓存的合并步骤的流程示意图;
[0052] 图5A为一个实施例中更新交易缓存中的交易结果合并至块缓存的示意图;
[0053] 图6为一个实施例中资源冲突检测步骤的流程示意图;
[0054] 图6A为一个实施例中智能合约方法冲突检测的示意图;
[0055] 图7为一个实施例中当前更新写缓存与历史已合并交易缓存数据是否存在交集的判断步骤的流程示意图;
[0056] 图8为另一个实施例中资源冲突检测步骤的流程示意图;
[0057] 图9为一个实施例中当前更新读缓存与历史已合并交易缓存数据是否存在交集的判断步骤的流程示意图;
[0058] 图9A为一个实施例中当前更新读缓存与历史已合并交易缓存数据是否存在交集的判断步骤的原理示意图;
[0059] 图10为一个实施例中合约数据处理方法的原理示意图;
[0060] 图11为一个实施例中合约数据处理装置的结构框图;
[0061] 图12为一个实施例中缓存空间创建模块的结构框图;
[0062] 图13为一个实施例中初始交易缓存更新模块的结构框图;
[0063] 图14为一个实施例中更新交易缓存合并模块的结构框图;
[0064] 图15为一个实施例中计算机设备的结构框图。

具体实施方式

[0065] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并
不用于限定本申请。
[0066] 图1为一个实施例中合约数据处理方法的应用环境图。参照图1,该合约数据处理方法应用于合约数据处理系统。该合约数据处理系统包括终端110和服务器120。终端110和
服务器120通过网络连接。终端110具体可以是台式终端或移动终端,移动终端具体可以手
机、平板电脑、笔记本电脑等中的至少一种。服务器120可以用独立的服务器或者是至少一
个服务器组成的服务器集群来实现。其中,服务器120为一个节点,节点中保存有一条完整
的区块链,区块链包括至少一个区块。
[0067] 具体地,终端110将至少一个待处理交易通过交易请求发送至服务器120。服务器120接收到交易请求,根据交易请求获取各个待处理交易对应的智能合约方法,创建目标块
对应的块缓存,创建与各个待处理交易对应的初始交易缓存,在各个初始交易缓存中并行
执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存,按交易顺序依次将
各个更新交易缓存合并至块缓存,当当前待合并更新交易缓存与块缓存中的历史已合并交
易缓存数据无资源冲突时,将当前待合并更新交易缓存合并至块缓存中,当当前待合并更
新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突时,则基于块缓存重新创
建对应的中间交易缓存,在中间交易缓存执行当前待合并更新交易缓存对应的智能合约方
法,将执行结果对应的交易缓存合并至块缓存,直到各个待处理交易对应的更新交易缓存
合并至块缓存中得到目标块缓存,根据目标块缓存生成更新块。
[0068] 如图2所示,在一个实施例中,提供了一种合约数据处理方法。该合约数据处理方法可以由计算机设备执行,计算机设备可以是服务器或终端中的至少一个。本实施例主要
以该方法应用于上述图1中的服务器120来举例说明。参照图2,该合约数据处理方法具体包
括如下步骤:
[0069] 步骤202,接收交易请求,交易请求包括至少一个待处理交易。
[0070] 其中,交易请求是用来请求处理待处理交易的,通常由终端发送交易请求至服务器中,服务器接收到交易请求后,可根据交易请求处理对应的待处理交易。其中,交易请求
包括至少一个待处理交易,待处理交易为等待处理的交易。其中,这里的待处理交易存在对
应智能合约方法,存在对应的智能合约方法的待处理交易可创建对应的初始交易缓存,而
不存在对应的智能合约方法的待处理交易无需创建对应的初始交易缓存。
[0071] 具体地,终端可通过相关应用或者控件触发生成交易请求,将至少一个待处理交易对应的交易信息携带至交易请求中,通过网络发送至服务器。
[0072] 步骤204,根据交易请求获取各个待处理交易对应的智能合约方法。
[0073] 其中,智能合约与区块链密切相关,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,区块链本质上是一个去中心化的数据库,同
时区块链作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数
据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一
个区块。而智能合约是区块链被称之为“去中心化的”重要原因,它允许不需要第三方的情
况下,执行可追溯、不可逆转和安全的交易。
[0074] 其中,智能合约是智能合约是区块链技术中使用的一种计算机协议,智能合约包含了至少一个待处理交易的所有信息,只有在满足要求后才会执行结果操作。而智能合约
包括至少一个变量以及对应的合约方法,这里的智能合约方法是指智能合约中的合约方
法。
[0075] 具体地,服务器接收到交易请求后,根据交易请求获取各个待处理交易对应的智能合约方法。具体可以是,根据各个待处理交易确定对应的变量,再根据变量确定对应的合
约方法,将变量对应的合约方法作为对应的待处理交易对应的智能合约方法。
[0076] 步骤206,创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存。
[0077] 其中,目标块是用来创建块缓存的,可以从区块中确定目标块,例如,目标块可以是最新区块,所谓最新区块是指服务器保存的区块中高度最高的区块。而块缓存是用来缓
存所有待处理交易对应的交易结果的,而初始交易缓存是用来缓存各个待处理交易执行对
应的智能合约方法产生的交易结果的。各个待处理交易在执行对应的智能合约方法时,智
能合约方法所带来的改动都会缓存至对应的初始交易缓存中,而各个待处理交易执行对应
的智能合约方法产生的交易结果都可合并至块缓存中。即,块缓存中暂时保存了所有待处
理交易对应的交易结果。
[0078] 具体地,块缓存可基于合约缓存为最新区块创建得到的,最新区块是指服务器保存的区块中高度最高的区块,在创建得到块缓存后,可基于块缓存为各个待处理交易创建
对应的初始交易缓存。这里的合约缓存是指用来保存各个待处理交易对应的智能合约方法
的,各个待处理交易从数据库中获取对应的智能合约方法后,将获取到的智能合约方法统
一放入合约缓存保存。其中,合约缓存包括合约读缓存和合约写缓存,合约读缓存用来记录
智能合约方法的读访问情况,合约写缓存用来记录智能合约方法的写访问情况。
[0079] 在一个实施例中,基于合约缓存为最新区块创建块缓存对应的读缓存和写缓存,再基于块缓存的读缓存和写缓存为各个待处理交易创建对应的初始交易缓存对应的读缓
存和写缓存。其中,待处理交易在对应的初始交易缓存对应的读缓存和写缓存分别执行对
应的智能合约方法,分别得到初始交易缓存的读缓存对应的交易结果,和初始交易缓存的
写缓存对应的交易结果,最后将初始交易缓存的读缓存对应的交易结果合并至块缓存对应
的读缓存中,将初始交易缓存的写缓存对应的交易结果合并至块缓存对应的写缓存中。
[0080] 步骤208,在各个初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。
[0081] 具体地,在创建完块缓存以及各个待处理交易对应的初始交易缓存后,由于初始交易缓存是用来记录待处理交易在执行智能合约方法过程中产生的交易信息的,因此在各
个待处理交易对应的初始交易缓存中执行对应的智能合约方法,从而得到各个待处理交易
对应的更新交易缓存。即,智能合约是一套以数字形式定义的承诺,在获取到各个待处理交
易对应的智能合约方法后,需要各个待处理交易根据对应的智能合约方法所规定的协议执
行,因此得到各个待处理交易对应的交易结果,根据交易结果更新初始交易缓存,即将交易
结果保存至更新交易缓存中。这里的交易结果是各个待处理交易在对应的交易缓存中执行
对应的智能合约方法,智能合约方法所带来的改动结果都可作为对应的交易结果。
[0082] 其中,各个待处理交易在对应的初始交易缓存中执行对应的智能合约方法是并行执行,即不管各个待处理交易的交易顺序,各个待处理交易直接并行在对应的初始交易缓
存中执行对应的智能合约方法。
[0083] 步骤210,按交易顺序依次将各个更新交易缓存合并至块缓存。
[0084] 其中,待处理交易打包到目标块时已经排好序,此处不需再排序,可直接获取各个待处理交易对应的交易顺序。而在待处理交易未打包至目标块时,可根据各个待处理交易
时间的交易时间确定交易顺序,这里的交易时间是指各个待处理交易对应的交易时间点。
而交易顺序是指各个待处理交易之间的交易次序,可根据各个待处理交易对应的交易时间
确定各个待处理交易对应的交易顺序。具体地,根据交易请求可直接获取各个待处理交易
对应的交易顺序。
[0085] 进一步地,根据各个待处理交易对应的交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存中,即合并完成后,块缓存中包括了所有待处理交易对应的交易
结果,也就是说,块缓存中包括了更新交易缓存中的各个待处理交易对应的交易结果。
[0086] 在一个实施例中,块缓存包括对应的读缓存和写缓存,各个待处理交易对应的初始交易缓存包括读缓存和写缓存,各个待处理交易在对应的初始交易缓存对应的读缓存和
写缓存分别执行对应的智能合约方法,分别得到初始交易缓存的读缓存对应的交易结果,
和初始交易缓存的写缓存对应的交易结果,再根据交易结果更新初始交易缓存,得到更新
交易缓存。
[0087] 最后,获取各个待处理交易之间的交易顺序,按照交易顺序依次将各个待处理交易对应的初始交易缓存的读缓存对应的交易结果合并至块缓存对应的读缓存中,将初始交
易缓存的写缓存对应的交易结果合并至块缓存对应的写缓存中,即根据交易顺序依次将各
个待处理交易对应的更新交易缓存合并至块缓存中。
[0088] 步骤212,当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据无资源冲突时,将当前待合并更新交易缓存合并至块缓存中。
[0089] 其中,在根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存的合并过程中,可能存在智能合约方法之间的资源冲突,所谓资源冲突就是当前待处理交
易与块缓存中的已合并交易缓存数据存在竞争关系,只有当前待处理交易与块缓存中的已
合并交易缓存数据无竞争关系时,则将当前待合并更新交易缓存合并至块缓存中。
[0090] 其中,待合并更新交易缓存暂时保存了当前待处理交易对应的当前交易结果,而当前待处理交易是指当前正在处理的待处理交易,获取当前待处理交易对应的当前交易结
果所在的待合并更新交易缓存,具体可以是将当前待处理交易对应的更新交易缓存作为待
合并更新交易缓存,由于各个待处理交易对应的更新交易缓存暂时保存了对应的交易结
果,即将更新交易缓存合并至块缓存中就是将各个待处理交易对应的交易结果合并至块缓
存中,成功将交易结果合并至块缓存的待处理交易更新为已处理交易,即块缓存中暂时保
存了已处理交易的所有交易结果,即历史已合并交易缓存数据。这里的已处理交易是指待
处理交易对应的更新交易缓存成功合并至块缓存更新之后的处理交易,即已经成功将对应
的更新交易缓存合并至块缓存的处理交易。
[0091] 具体地,获取当前待处理交易对应的当前更新交易缓存,将当前更新交易缓存作为待合并更新交易缓存,再获取块缓存中暂时保存的历史已合并交易缓存数据,当待合并
更新交易缓存与块缓存中历史已合并交易缓存数据无资源冲突时,将当前待合并更新交易
缓存合并至块缓存中,即在合并过程中,当前待处理交易对应的智能合约方法与已处理交
易对应的智能合约方法之间部存在冲突,即当前待处理交易与已处理交易存在资源竞争关
系。
[0092] 反之,当当待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在资源冲突时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法之间
存在资源冲突,无法将当前待合并更新缓存合并至块缓存中,需要基于块缓存重新创建对
应的中间交易缓存,在中间交易缓存执行当前待合并更新交易缓存对应的智能合约方法,
将执行结果对应的交易缓存合并至块缓存,直到各个待处理交易对应的更新交易缓存合并
至块缓存中得到目标块缓存。
[0093] 步骤214,当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突时,则基于块缓存重新创建对应的中间交易缓存,在中间交易缓存执行当前待
合并更新交易缓存对应的智能合约方法,将执行结果对应的交易缓存合并至块缓存。
[0094] 步骤216,直到各个待处理交易对应的更新交易缓存合并至块缓存中得到目标块缓存。
[0095] 步骤218,根据目标块缓存生成更新块。
[0096] 具体地,当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突时,说明当前待处理交易对应的智能合约方法与块缓存中的已处理交易对应的智
能合约方法存在竞争关系,因此目前无法将当前待合并更新交合并至块缓存中。为了解决
此问题,需要基于块缓存重新创建对应的中间交易缓存,在中间交易缓存执行当前待合并
更新交易缓存对应的智能合约方法,将执行结果对应的交易缓存合并至块缓存。
[0097] 但是,如果基于块缓存重新创建对应的中间交易缓存,在中间交易缓存执行当前待合并更新交易缓存对应的智能合约方法得到的执行结果还是与历史已合并交易缓存数
据存在竞争关系,可以再重新基于块缓存重新创建对应的中间交易缓存,在中间交易缓存
执行当前待合并更新交易缓存对应的智能合约方法,直至执行结果与历史已合并交易缓存
数据不存在资源冲突,则将执行结果对应的交易缓存合并至块缓存中。其中,可以根据实际
应用设置预设次数,当达到预设次数时,执行结果还是无法与历史已合并交易缓存数据存
在资源冲突,则可将当前待处理交易丢弃。
[0098] 进一步地,按照各个待处理交易对应的交易顺序,依次将各个待处理交易对应的更新交易缓存合并至块缓存中,在合并过程中,若当前待处理交易与块缓存中历史已合并
交易缓存存在资源冲突时,则基于块缓存重新创建对应的中间交易缓存,在中间交易缓存
执行当前待合并更新交易缓存对应的智能合约方法,直至当前待处理交易与块缓存中历史
已合并交易缓存不存在资源冲突,将执行结果对应的交易缓存合并至块缓存。以此方式,将
各个待处理交易对应的更新交易缓存都合并至块缓存中的目标块缓存中,也就是说,目标
块缓存中的所有历史已合并交易缓存数据都不存在竞争关系和无资源冲突。
[0099] 最后,服务器中保存了一条完整的区块链,区块链包括至少一个区块,在得到目标块缓存之后,需要根据目标块缓存生成更新块。
[0100] 上述合约数据处理方法,将至少一个待处理交易通过交易请求获取对应的智能合约方法,通过创建目标块对应的块缓存,再创建与各个待处理交易对应的初始交易缓存,在
各个初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易
缓存,按交易顺序依次将各个更新交易缓存合并至块缓存,当当前待合并更新交易缓存与
块缓存中的历史已合并交易缓存数据无资源冲突时,将当前待合并更新交易缓存合并至块
缓存中,当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突
时,则基于块缓存重新创建对应的中间交易缓存,在中间交易缓存执行当前待合并更新交
易缓存对应的智能合约方法,将执行结果对应的交易缓存合并至块缓存,直到各个待处理
交易对应的更新交易缓存合并至块缓存中得到目标块缓存,根据目标块缓存生成更新块。
[0101] 因此,通过创建各个待处理交易对应的初始交易缓存,在初始交易缓存中并行执行对应的智能合约方法,无需理睬各个待处理交易的交易顺序,在各自的初始交易缓存中
并行执行对应的智能合约方法,提高了智能合约方法的执行效率。进一步地,在各自的初始
交易中并行执行对应的智能合约方法得到对应的更新交易缓存,再按照交易顺序依次将各
个更新交易缓存合并至块缓存中,在合并过程中,通过检测当前待处理交易对应的当前待
合并更新交易缓存与块缓存中历史合并交易缓存数据是否存在资源冲突,当不存在资源冲
突时,将各个待处理交易对应的更新交易缓存合并至块缓存中得到目标块缓存,最后根据
目标块缓存生成更新块,合并过程中是否存在资源冲突的检测不需要通过分析智能合约方
法的字节码才能检测出来,提高了合约冲突检测的全面性和准确性。
[0102] 在一个实施例中,创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存,包括:获取目标块,基于合约缓存为目标块创建对应的块读缓存和块写缓存,基
于块读缓存和块写缓存为各个待处理交易创建对应的初始交易读缓存和初始交易写缓存。
[0103] 其中,合约缓存是指用来保存各个待处理交易对应的智能合约方法的,各个待处理交易从数据库中获取对应的智能合约方法后,将获取到的智能合约方法统一放入合约缓
存保存。而块缓存是用来缓存所有待处理交易对应的交易结果的,而初始交易缓存是用来
缓存各个待处理交易执行对应的智能合约方法产生的交易信息。各个待处理交易在执行对
应的智能合约方法时,智能合约方法所带来的改动都会缓存至对应的初始交易缓存中,从
而得到更新交易缓存,而各个待处理交易执行对应的智能合约方法产生的交易结果都可合
并至块缓存中。即,块缓存中暂时保存了所有待处理交易对应的交易结果。
[0104] 具体地,基于合约缓存为最新区块创建块缓存对应的块读缓存和块写缓存,再基于块读缓存和块写缓存为各个待处理交易创建对应的初始交易缓存对应的初始交易读缓
存和初始交易写缓存。其中,待处理交易在对应的初始交易缓存对应的初始交易读缓存和
初始交易写缓存分别执行对应的智能合约方法,分别得到初始交易缓存的初始交易读缓存
对应的交易结果,和初始交易缓存的初始交易写缓存对应的交易结果,根据初始交易读缓
存对应的交易结果更新初始交易读缓存,得到更新交易读缓存,同样地根据初始交易写缓
存对应的交易结果更新初始交易写缓存得到更新交易写缓存。
[0105] 最后,将更新交易缓存的更新交易读缓存对应的交易结果合并至块缓存对应的块读缓存中,将更新交易缓存的更新交易写缓存对应的交易结果合并至块缓存对应的块写缓
存中。
[0106] 在一个实施例中,如图3所示,图3示出一个实施例中块缓存和初始交易缓存的示意图,具体可以是,服务器获取最新区块,基于合约缓存为最新区块创建块缓存对应的块读
缓存和块写缓存,即块缓存中包括块读缓存和块写缓存。进一步地,基于块读缓存和块写缓
存为各个待处理交易创建对应的初始交易读缓存和初始交易写缓存,即各个待处理交易存
在对应的初始交易读缓存和初始交易写缓存。
[0107] 在一个实施例中,如图4所示,在各个初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存,包括:
[0108] 步骤402,在各个待处理交易对应的初始交易读缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易读缓存。
[0109] 步骤404,在各个待处理交易对应的初始交易写缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易写缓存。
[0110] 其中,各个待处理交易对应的更新交易缓存包括更新交易读缓存和更新交易写缓存,更新交易读缓存是用来记录待处理交易的读访问情况,更新交易写缓存是用来记录待
处理交易的写访问情况,各个待处理交易可在初始交易缓存中执行对应的智能合约方法,
从而得到更新交易缓存。
[0111] 具体地,在各个待处理交易对应的交易读缓存中并行执行对应的智能合约方法,将智能合约方法对所带来的变动都保存至交易读缓存中,得到各个待处理交易对应的交易
读缓存结果,将交易读缓存结果保存至更新交易读缓存。同样地,在各个待处理交易对应的
交易写缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的交易写缓存结
果,将交易写缓存结果保存至更新交易写缓存中。即,交易读缓存和交易写缓存都用来执行
对应的执行合约,暂时保存对应的执行结果。
[0112] 在一个实施例中,如图5所示,按交易顺序依次将各个更新交易缓存合并至块缓存,包括:
[0113] 步骤502,获取各个待处理交易对应的交易顺序。
[0114] 其中,待处理交易打包到目标块时已经排好序,此处不需再排序,可直接获取各个待处理交易对应的交易顺序。而在待处理交易未打包至目标块时,可根据各个待处理交易
时间的交易时间确定交易顺序,这里的交易时间是指各个待处理交易对应的交易时间点。
具体地,服务器(节点)直接获取各个待处理交易对应的交易顺序。
[0115] 步骤504,根据交易顺序依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。
[0116] 具体地,在获取各个待处理交易对应的交易顺序后,依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。即,将交易写缓存的交易写缓存结果提交至块写缓
存中,即块写缓存为所有待处理交易对应的交易写缓存结果的并集。
[0117] 其中,通过将更新交易写缓存提交至块写缓存来识别各个待处理交易对应的智能合约方法之间是否存在冲突,具体可通过以下实施例进行解释说明,在此不作任何赘述。
[0118] 其中,而在各个待处理交易对应的智能合约方法在执行过程中,会将从数据库或合约缓存中读取的数据存入块读缓存中。
[0119] 在一个实施例中,如图5A所示,图5A示出一个实施例中更新交易缓存中的交易结果合并至块缓存的示意图。图5A示出交易1读缓存、交易1写缓存和交易2读缓存、交易2写缓
存。具体地,按照交易顺序,将交易1读缓存提交至块读缓存中,将交易1写缓存提交至块写
缓存中。之后,再将交易2读缓存提交至块读缓存中,将交易2写缓存提交至块写缓存中。
[0120] 在一个实施例中,如图6所示,当前待合并更新交易缓存为当前更新交易写缓存或当前更新交易读缓存,初始交易缓存包括初始交易读缓存和初始交易写缓存,当前更新交
易写缓存是当前待处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,当
前更新交易读缓存是当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法
得到的,块缓存包括块读缓存和块写缓存,当当前待合并更新交易缓存与块缓存中的历史
已合并交易缓存数据存在资源冲突时,包括:
[0121] 步骤602,当待合并更新交易缓存为当前更新交易写缓存时,获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,
待处理交易对应的更新交易缓存合并至块缓存后更新为已处理交易。
[0122] 其中,待合并更新交易缓存可以为当前交易写缓存结果或当前交易读缓存结果,更新交易缓存包括更新交易读缓存和更新交易写缓存,当前交易写缓存结果是当前待处理
交易在当前更新交易写缓存中执行对应的智能合约方法得到的,当前交易读缓存是当前待
处理交易在当前更新交易读缓存中执行对应的智能合约方法得到的,块缓存包括块读缓存
和块写缓存,各个待处理交易对应的更新交易读缓存合并至块读缓存中,各个待处理交易
对应的交易写缓存合并至块写缓存中。
[0123] 其中,这里待合并更新交易缓存可以是当前更新交易写缓存,还可以为当前更新交易读缓存。具体地,当待合并更新交易缓存为当前更新交易写缓存,说明将当前待处理交
易在更新交易写缓存执行对应的智能合约方法得到的当前更新交易写缓存作为待合并更
新交易缓存。获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数据是已
处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至块缓存后更新为
已处理交易。
[0124] 其中,已处理交易是指待处理交易成功将对应的更新交易缓存合并至块缓存更新之后的处理交易。块缓存中的历史已合并交易缓存数据对应的待处理交易之间不存在冲
突。即,如果待处理交易存在冲突则不会将交易写缓存结果提交至块写缓存中的,因此块写
缓存中的已处理交易之间都不存在任何冲突。
[0125] 步骤604,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲
突。
[0126] 具体地,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,说明当前待处理交易与已处理交易都改动了同一存储槽,所以在实际智能合约方法执
行过程中,当前待处理交易必须等待所有已处理交易对应的交易完成后才能开始,即当前
待处理交易与已处理交易不能并行,则确定当前待处理交易对应的智能合约方法与已处理
交易对应的智能合约方法存在冲突。
[0127] 在一个实施例中,如图6A所示,图6A示出一个实施例中智能合约方法冲突检测的示意图。图6A示出块写缓存和当前待处理交易对应的当前交易写缓存结果,当前待处理交
易为交易4,块写缓存中包括交易1、交易2、交易3对应的交易写缓存结果,组成块写缓存中
的历史交易写缓存结果集合。如图6A所示,当前待处理交易对应的当前交易写缓存结果与
块写缓存中的至少一个历史交易写缓存结果存在交集,则确定当前待处理交易对应的智能
合约方法与已处理交易对应的智能合约方法存在冲突,即当前待处理交易必须等待所有已
处理交易对应的交易完成后交易才能开始。
[0128] 在一个实施例中,如图7所示,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,包括:
[0129] 步骤702,获取当前更新交易写缓存对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值。
[0130] 步骤704,获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
[0131] 其中,当前更新交易写缓存暂时保存了当前交易写缓存结果,交易写缓存结果可以是键值对,所谓键值对(”key=value”)字符串,在开发中经常使用,每个键后面对应着相
应的值,当按下相应的键时,就会输出相应的结果。因此,可通过更新交易写缓存对应的键
值对检测智能合约方法之间是否存在冲突。
[0132] 具体地,获取当前更新交易写缓存中的当前交易写缓存结果对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值,同时获取历史已合并交易缓存数据
对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
[0133] 步骤706,当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集。
[0134] 具体地,从各个历史键中获取与当前键相同的目标历史键,当当前键对应的当前值与目标历史键对应的目标历史值不同时,说明当前待处理交易与已处理交易都改动了同
一存储槽,所以在实际智能合约方法执行过程中,当前待处理交易必须等待所有已处理交
易对应的交易完成后才能开始,即当前待处理交易与已处理交易不能并行,则确定当前更
新交易写缓存与至少一个历史已合并交易缓存数据存在交集。
[0135] 在一个实施例中,如图6A所示,图6A中的块写缓存中包括已处理交易对应的历史交易写缓存结果,如交易1的交易写缓存结果:1=1,等号左边的1代表键key,等号右边的1
代表值value,交易2的交易写缓存结果:2=2以及交易3的交易写缓存结果3=3,当前待处
理交易为交易4对应的交易写缓存结果:3=4,4=4,因此可见,交易4的交易写缓存结果中
key为3与块缓存中的历史交易写缓存结果中key为3的值并不相同,则确定当前待处理交易
与前面的已处理交易存在冲突,需要等前面的所有已处理交易对应的交易完成后才能开
始。
[0136] 在一个实施例中,如图8所示,在图6的基础上,当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突时,包括:
[0137] 步骤802,获取当前待处理交易对应的当前更新交易读缓存,将当前更新交易读缓存作为待合并更新交易缓存。
[0138] 步骤804,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲
突。
[0139] 其中,当前更新交易读缓存中包括当前待处理交易在对应的更新交易读缓存中执行对应智能合约方法得到的,历史已合并交易缓存数据为块缓存中所有已处理交易对应的
更新交易写缓存结果,这里更新交易写缓存结果是指已处理交易在对应的更新交易写缓存
执行对应的智能合约得到的。
[0140] 其中,已处理交易是指待处理交易成功将对应的更新交易缓存合并至块缓存更新之后的处理交易。块缓存中的历史已合并交易缓存数据对应的待处理交易之间不存在冲
突。即,如果待处理交易存在冲突则不会将交易写缓存结果提交至块写缓存中的,因此块写
缓存中的前向待处理之间都不存在任何冲突。
[0141] 具体地,获取当前待处理交易对应的当前更新交易读缓存,当前更新交易读缓存中包括当前待处理交易在对应的更新交易读缓存中执行对应智能合约方法得到的,将当前
更新交易读缓存作为待合并更新交易缓存,当当前更新交易读缓存与至少一个历史已合并
交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应
的智能合约方法存在冲突。
[0142] 在一个实施例中,如图9所示,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集时,包括:
[0143] 步骤902,获取当前更新交易读缓存对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值。
[0144] 步骤904,获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
[0145] 其中,当前更新交易读缓存暂时保存了当前交易读缓存结果,交易读缓存结果可以是键值对,这里的键值对(”key=value”)字符串,在开发中经常使用,每个键后面对应着
相应的值,当按下相应的键时,就会输出相应的结果。因此,可通过更新交易读缓存对应的
键值对检测智能合约方法之间是否存在冲突。
[0146] 具体地,获取当前更新交易读缓存中的当前交易读缓存结果对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值,同时获取历史已合并交易缓存数据
对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
[0147] 步骤906,当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集。
[0148] 具体地,当各个历史键中存在至少一个与当前键相同的目标历史键时,说明在各个待处理交易对应的智能合约方法在并行情况下,不同服务器中的目标历史键的值都有可
能会有不同的情况,为了保持各个服务器之间的一致性,统一悲观地认为当前待处理交易
读取了旧数据,即当前待处理交易必须等待所有已处理交易对应的交易完成后才能开始,
所以当前待处理交易与已处理交易不能并行,则确定当前更新交易读缓存与至少一个历史
已合并交易缓存数据存在交集。
[0149] 在一个实施例中,如图9A所示,图9A中的块写缓存中包括已处理交易对应的历史交易写缓存结果,如交易1的交易写缓存结果:1=1,等号左边的1代表键key,等号右边的1
代表值value,交易2的交易写缓存结果:2=2以及交易3的交易写缓存结果3=3,当前待处
理交易3对应的交易读缓存结果:3=0,4=4,因此可见,交易4的交易读缓存结果中存在与
块缓存中的历史键相同的目标历史键,即key=3,因此不管key=3对应的值是否相同,都可
确定当前待处理交易与前面的已处理交易存在冲突,需要等前面的所有已处理交易对应的
交易完成后才能开始。
[0150] 在一个具体的实施例中,提供了一种合约数据处理方法,具体包括以下步骤:
[0151] 1、接收交易请求,交易请求包括至少一个待处理交易。
[0152] 2、根据交易请求获取各个待处理交易对应的智能合约方法。
[0153] 3、创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存。
[0154] 3‑1、获取目标块,基于合约缓存为目标块创建对应的块读缓存和块写缓存。
[0155] 3‑2、基于块读缓存和块写缓存为各个待处理交易创建对应的初始交易读缓存和初始交易写缓存。
[0156] 4、在各个初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。
[0157] 4‑1、在各个待处理交易对应的初始交易读缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易读缓存。
[0158] 4‑2、在各个待处理交易对应的初始交易写缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易写缓存。
[0159] 5、按交易顺序依次将各个更新交易缓存合并至块缓存。
[0160] 5‑1、获取各个待处理交易对应的交易顺序。
[0161] 5‑2、根据交易顺序依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。
[0162] 6、当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据无资源冲突时,将当前待合并更新交易缓存合并至块缓存中。
[0163] 7、当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突时,则基于块缓存重新创建对应的中间交易缓存,在中间交易缓存执行当前待合并更
新交易缓存对应的智能合约方法,将执行结果对应的交易缓存合并至块缓存。
[0164] 7‑1、其中,当前待合并更新交易缓存为当前更新交易写缓存或当前更新交易读缓存,初始交易缓存包括初始交易读缓存和初始交易写缓存,当前更新交易写缓存是当前待
处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,当前更新交易读缓存
是当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法得到的,块缓存包括
块读缓存和块写缓存,
[0165] 其中,当待合并更新交易缓存为当前更新交易写缓存时,获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,待
处理交易对应的更新交易缓存合并至块缓存后更新为已处理交易。
[0166] 当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突。
[0167] 7‑1‑1、获取当前更新交易写缓存对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值。
[0168] 7‑1‑2、获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
[0169] 7‑1‑3、当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集。
[0170] 7‑2、获取当前待处理交易对应的当前更新交易读缓存,将当前更新交易读缓存作为待合并更新交易缓存,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在
交集时,则确定当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源
冲突。
[0171] 7‑2‑1、获取当前更新交易读缓存对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值。
[0172] 7‑2‑2、获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
[0173] 7‑2‑3、当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集。
[0174] 8、直到各个待处理交易对应的更新交易缓存合并至块缓存中得到目标块缓存。
[0175] 9、根据目标块缓存生成更新块。
[0176] 在一个实施例中,如图10所示,图10示出一个实施例中合约数据处理方法的原理示意图。具体包括以下步骤:
[0177] 步骤1001、合约虚拟机获取到目标块。
[0178] 步骤1002、基于合约缓存为目标块创建对应的块缓存。
[0179] 步骤1003、基于块缓存为各个待处理交易创建对应的初始交易缓存。
[0180] 步骤1004、基于各自的初始交易缓存,在线程池中并行执行对应智能合约方法,得到对应的更新交易缓存。
[0181] 步骤1005、按照各个待处理交易对应的交易顺序,将第一个更新交易缓存合并入块缓存,如合并过程中发现存在资源冲突(修改了已合并的交易中修改过的数据,读取了过
旧数据),则基于已合并的块缓存(新数据)重新执行这个合约,之后再进行合并。
[0182] 步骤1006、按交易次序将成功执行的智能合约方法对应的更新交易缓存合并到块缓存中。其中,合并过程中的冲突处理与上一步骤5一致。
[0183] 步骤1007、最终,根据合并完成的块缓存合形成新的区块。
[0184] 应该理解的是,虽然上述流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的
执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少
一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时
刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依
次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替
地执行。
[0185] 在一个实施例中,如图11所示,提供了一种合约数据处理装置1100,包括:
[0186] 交易请求接收模块1102,用于接收交易请求,交易请求包括至少一个待处理交易。
[0187] 智能合约方法获取模块1104,用于根据交易请求获取各个待处理交易对应的智能合约方法。
[0188] 缓存空间创建模块1106,用于创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存。
[0189] 初始交易缓存更新模块1108,用于在各个初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。
[0190] 更新交易缓存合并模块1110,用于按交易顺序依次将各个更新交易缓存合并至块缓存。
[0191] 资源冲突检测模块1112,用于当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据无资源冲突时,将当前待合并更新交易缓存合并至块缓存中。
[0192] 资源冲突检测模块1112还用于当当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲突时,则基于块缓存重新创建对应的中间交易缓存,在中间
交易缓存执行当前待合并更新交易缓存对应的智能合约方法,将执行结果对应的交易缓存
合并至块缓存。
[0193] 资源冲突检测模块1112还用于直到各个待处理交易对应的更新交易缓存合并至块缓存中得到目标块缓存。
[0194] 目标块缓存合并模块1114,用于根据目标块缓存生成更新块。
[0195] 在一个实施例中,如图12所示,缓存空间创建模块1106包括:
[0196] 块子缓存创建单元1106a,用于获取目标块,基于合约缓存为目标块创建对应的块读缓存和块写缓存。
[0197] 交易子缓存创建单元1106b,用于基于块读缓存和块写缓存为各个待处理交易创建对应的初始交易读缓存和初始交易写缓存。
[0198] 在一个实施例中,如图13所示,初始交易缓存更新模块1108包括:
[0199] 初始交易读缓存执行单元1108a,用于在各个待处理交易对应的初始交易读缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易读缓存。
[0200] 初始交易写缓存执行单元1108b,用于在各个待处理交易对应的初始交易写缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易写缓存。
[0201] 在一个实施例中,如图14所示,更新交易缓存合并模块1110包括:
[0202] 交易顺序确定单元1110a,用于获取各个待处理交易对应的交易顺序。
[0203] 更新交易写缓存合并单元1110b,用于根据交易顺序依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。
[0204] 在一个实施例中,当前待合并更新交易缓存为当前更新交易写缓存或当前更新交易读缓存,初始交易缓存包括初始交易读缓存和初始交易写缓存,当前更新交易写缓存是
当前待处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,当前更新交易
读缓存是当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法得到的,块缓
存包括块读缓存和块写缓存,合约数据处理装置1100还用于当待合并更新交易缓存为当前
更新交易写缓存时,获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数
据是已处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至块缓存后
更新为已处理交易,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集
时,则确定当前待合并更新交易缓存与块缓存中的历史已合并交易缓存数据存在资源冲
突。
[0205] 在一个实施例中,合约数据处理装置1100还用于获取当前更新交易写缓存对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值,获取历史已合并交易
缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值,当各
个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易写缓存与至
少一个历史已合并交易缓存数据存在交集。
[0206] 在一个实施例中,合约数据处理装置1100还用于获取当前待处理交易对应的当前更新交易读缓存,将当前更新交易读缓存作为待合并更新交易缓存,当当前更新交易读缓
存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待合并更新交易缓存与块
缓存中的历史已合并交易缓存数据存在资源冲突。
[0207] 在一个实施例中,合约数据处理装置1100还用于获取当前更新交易读缓存对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值,获取历史已合并交易
缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值,当各
个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易读缓存与至
少一个历史已合并交易缓存数据存在交集。
[0208] 图15示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的服务器120。如图15所示,该计算机设备包括该计算机设备包括通过系统总线连接的
处理器、存储器、网络接口、输入装置。其中,存储器包括非易失性存储介质和内存储器。该
计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序
被处理器执行时,可使得处理器实现合约数据处理方法。该内存储器中也可储存有计算机
程序,该计算机程序被处理器执行时,可使得处理器执行合约数据处理方法。计算机设备的
输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球
或触控板,还可以是外接的键盘、触控板或鼠标等。
[0209] 本领域技术人员可以理解,图15中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设
备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0210] 在一个实施例中,本申请提供的合约数据处理装置可以实现为一种计算机程序的形式,计算机程序可在如图15所示的计算机设备上运行。计算机设备的存储器中可存储组
成该合约数据处理装置的各个程序模块,比如,图11所示的交易请求接收模块、智能合约方
法获取模块、缓存空间创建模块、初始交易缓存更新模块、更新交易缓存合并模块、资源冲
突检测模块和目标块缓存合并模块。各个程序模块构成的计算机程序使得处理器执行本说
明书中描述的本申请各个实施例的合约数据处理方法中的步骤。
[0211] 例如,图15所示的计算机设备可以通过如图11所示的合约数据处理装置中的交易请求接收模块执行接收交易请求,交易请求包括至少一个待处理交易。计算机设备可通过
智能合约方法获取模块执行根据交易请求获取各个待处理交易对应的智能合约方法。计算
机设备可通过缓存空间创建模块执行创建目标块对应的块缓存,创建与各个待处理交易对
应的初始交易缓存。计算机设备可通过初始交易缓存更新模块执行在各个初始交易缓存中
并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。计算机设备可
通过更新交易缓存合并模块执行按交易顺序依次将各个更新交易缓存合并至块缓存。计算
机设备可通过资源冲突检测模块执行当当前待合并更新交易缓存与块缓存中的历史已合
并交易缓存数据无资源冲突时,将当前待合并更新交易缓存合并至块缓存中。计算机设备
可通过资源冲突检测模块还执行当当前待合并更新交易缓存与块缓存中的历史已合并交
易缓存数据存在资源冲突时,则基于块缓存重新创建对应的中间交易缓存,在中间交易缓
存执行当前待合并更新交易缓存对应的智能合约方法,将执行结果对应的交易缓存合并至
块缓存。计算机设备可通过资源冲突检测模块还执行直到各个待处理交易对应的更新交易
缓存合并至块缓存中得到目标块缓存。计算机设备可通过目标块缓存合并模块执行根据目
标块缓存生成更新块。
[0212] 在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述合约数据处理方法的步骤。此
处合约数据处理方法的步骤可以是上述各个实施例的合约数据处理方法中的步骤。
[0213] 在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述合约数据处理方法的步骤。此处合约数据处理方
法的步骤可以是上述各个实施例的合约数据处理方法中的步骤。
[0214] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取
存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供
的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性
和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编
程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器
(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM
(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM
(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直
接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
[0215] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛
盾,都应当认为是本说明书记载的范围。
[0216] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员
来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保
护范围。因此,本申请专利的保护范围应以所附权利要求为准。