合约数据处理方法、相关设备及介质技术

技术编号:29085239 阅读:49 留言:0更新日期:2021-06-30 09:48
本申请实施例公开了一种合约数据处理方法、相关设备及介质,其中,方法包括:在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。本申请实施例可以提高数据计算的准确性,并可以确保合约执行的成功率。并可以确保合约执行的成功率。并可以确保合约执行的成功率。

【技术实现步骤摘要】
合约数据处理方法、相关设备及介质
[0001]本申请为在2019年09月21日提交中国专利局、申请号为201910901891.0、申请名称为“合约数据处理方法、相关设备及介质”的中国专利申请的分案申请,其全部内容通过引用结合在本申请中。


[0002]本申请涉及互联网
,具体涉及合约数据处理方法、相关设备及一种计算机存储介质。

技术介绍

[0003]在一些合约调用的应用场景中,可以通过累加资产消耗量的方式得到合约执行后所最终消耗的资产量(即gas used的值)。但是在合约执行过程中,执行合约中的相应操作而真实消耗的资产量却并不一定是一直累加的。
[0004]比如,对于用于修改存储内容的方法而言,其操作码会消耗固定的gas数量,所以在使用该方法对存储数据所占用空间进行修改的过程中,会将原存储数据所占用空间和用于进行修改的存储数据所占用的空间进行计算,以退还多消耗(即重复消耗)的gas数量。所以,通过实际累加消耗的方式所计算得到的gas used的值可能存在不等于gas limit的值(即调用合约所愿意支付的gas数量)的现象,此时,若直接将累计所得到的gas used的值作为gas limit的值,则必然会降低了数据计算的准确性。
[0005]此外,在以太坊平台上,若直接将实际消耗的gas数量作为调用合约时所需要的gas limit的值,还可能会导致该gaslimi
t
的值不足以完成合约的调用,进而导致合约执行失败,以至于难以确保合约执行的成功率。
[0006]申请内容
[0007]本申请实施例提供了一种合约数据处理方法、相关设备及介质,可以提高数据计算的准确性,并可以确保合约执行的成功率。
[0008]本申请一方面提供了一种合约数据处理方法,所述方法包括:
[0009]在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;
[0010]根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;
[0011]基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
[0012]根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。
[0013]其中,所述根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息,包括:
[0014]在获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约的每个合约函数;
[0015]识别所述每个合约函数对应的业务场景;
[0016]若识别到所述每个合约函数对应的业务场景均为第一业务场景,则从所述每个合约函数对应的合约代码信息中获取操作数和操作码;
[0017]根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息。
[0018]其中,所述根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息,包括:
[0019]识别所述每个合约函数中的M个操作码以及所述M个操作码的分类类型,从识别到的M个操作码中获取操作码S
i
,将所述操作码S
i
的分类类型作为目标分类类型;i为小于等于M的正整数;
[0020]在所述每个合约函数中将与所述操作码S
i
相关联的操作数作为目标操作数,确定所述目标操作数的字节长度;
[0021]基于所述目标分类类型在所述每个合约函数中确定与所述操作码S
i
相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息;
[0022]基于所述第一资产信息、所述第二资产信息,确定所述每个合约函数对应的资产消耗信息。
[0023]其中,所述基于所述目标分类类型在所述每个合约函数中确定与所述操作码S
i
相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息,包括:
[0024]在所述每个合约函数中确定所述操作码S
i
的数量,从第一映射关系表中获取与所述目标分类类型相匹配的第一匹配资产信息;
[0025]根据所述操作码S
i
的数量以及所述第一匹配资产信息,在所述每个合约函数中与所述操作码S
i
相关联的第一资产信息;
[0026]从第二映射关系表中获取所述目标操作数的字节长度对应的第二匹配资产信息,并将所述第二匹配资产信息确定为与所述目标操作数相关联的第二资产信息。
[0027]其中,所述方法还包括:
[0028]若识别到所述每个合约函数对应的业务场景中存在第二业务场景,则获取所述第二业务场景对应的预消耗资产量;所述预消耗资产量用于后续调用与所述智能合约具有关联关系的关联合约;
[0029]将与所述第二业务场景具有关联关系的且正在执行的合约函数作为第一合约函数,确定所述第一合约函数对应的资产消耗信息。
[0030]其中,所述第一合约函数对应的资产消耗信息包含目标资产消耗信息和所述预消耗资产量;
[0031]所述基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
[0032]将所述第一合约函数作为所述智能合约的参考函数,在所述智能合约中将除所述参考函数之外,且已执行的合约函数作为第二合约函数;所述第二合约函数对应的业务场景包含所述第一业务场景;
[0033]将与所述第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函
数时的历史累计资产消耗量;所述历史累计资产消耗量是由已执行的每个第二合约函数分别对应的资产消耗信息所确定的;
[0034]根据所述历史累计资产消耗量、所述目标资产消耗信息以及所述预消耗资产量,确定运行所述第一合约函数时的待处理资产消耗量。
[0035]其中,所述方法还包括:
[0036]获取客户终端针对所述数据处理任务的任务处理请求;
[0037]根据所述任务处理请求从所述客户终端对应的区块链地址信息中获取所述目标峰值资产消耗量对应的合约调用电子资源;所述合约调用电子资源是由所述客户终端提供的单位资产值和所述目标峰值资产消耗量之间的乘积所确定的;
[0038]基于所述合约调用电子资源调用所述智能合约执行所述数据处理任务。
[0039]其中,所述方法还包括:
[0040]在成功执行所述数据处理任务时,将所述智能合约以及所述智能合约对应的合约执行结果打包成目标区块,并将所述目标区块写入区块链。
[0041]其中,所述在虚拟机中通过构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量,包括:
[0042]获取所述数据处理任务的任务属性信息以及本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种合约数据处理方法,其特征在于,包括:接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的交易属性信息,基于所述交易属性信息在虚拟机中构建用于执行所述数据处理任务的智能合约,并为所述智能合约分配单位资产值为零的初始峰值资产消耗量;所述智能合约包含针对所述交易属性信息所编写的至少一个合约函数;根据所述初始峰值资产消耗量在所述虚拟机上运行所述智能合约,通过所述智能合约执行所述至少一个合约函数中的每个合约函数时,确定执行所述每个合约函数时的资产消耗信息;对执行所述每个合约函数时的资产消耗信息进行实时累计,累计得到运行所述智能合约中的对应合约函数时的待处理资产消耗量;通过最大值比较器从所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量中获取具有最大值的峰值资产消耗量,用获取到的具有最大值的峰值资产消耗量实时刷新运行所述智能合约时的峰值资产消耗量,当运行完所述智能合约时,将最新刷新得到的峰值资产消耗量作为用于成功运行所述智能合约的目标峰值资产消耗量;在成功运行完所述智能合约时,将所述智能合约以及与所述目标峰值资产消耗量发布至区块链。2.根据权利要求1所述的方法,其特征在于,所述接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的交易属性信息,基于所述交易属性信息在虚拟机中构建用于执行所述数据处理任务的智能合约,并为所述智能合约分配单位资产值为零的初始峰值资产消耗量,包括:接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的任务属性信息以及参与所述数据处理任务的用户关联属性信息,将获取的所述任务属性信息以及所述用户管理属性信息确定为所述数据交互业务的交易属性信息;基于所述交易属性信息在虚拟机中构建与所述数据处理任务相关联的至少一个合约函数;一个合约函数对应一段合约代码信息;调用所述至少一个合约函数执行每个合约函数对应的合约代码信息,并在成功执行所述每个合约函数对应的合约代码信息时,对所述至少一个合约函数进行封装处理,得到所述数据处理任务对应的智能合约;为所述智能合约分配用于进行合约测试任务的初始运行资产量,将所述初始运行资产量作为在测试所述智能合约时所提供的单位资产值为零的初始峰值资产消耗量。3.根据权利要求1所述的方法,其特征在于,所述根据所述初始峰值资产消耗量在所述虚拟机上运行所述智能合约,通过所述智能合约执行所述至少一个合约函数中的每个合约函数时,确定执行所述每个合约函数时的资产消耗信息,包括:在根据所述初始峰值资产消耗量获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约所包含的所述至少一个合约函数中的每个合约函数;识别所述每个合约函数对应的业务场景;所述每个合约函数对应的业务场景包括:存在实际消耗的第一业务场景;
若识别到所述每个合约函数对应的业务场景均为所述第一业务场景,则通过所述智能合约执行所述每个合约函数时,从所述每个合约函数对应的合约代码信息中获取所述每个合约函数所对应的操作数和操作码,确定所述每个合约函数所对应的操作数的字节长度,且确定所述每个合约函数所对应的操作码的分类类型;根据所述每个合约函数所对应的操作码的分类类型和所述每个合约函数所对应的操作数的字节长度,基于所述每个合约函数所对应的操作码的分类类型、基于与所述每个合约函数所对应的操作数的字节长度以及资产映射关系表,确定执行所述每个合约函数时的资产消耗信息。4.根据权利要求3所述的方法,其特征在于,所述资产映射关系表包括与操作码相关联的第一映射关系表和与操作数相关联的第二映射关系表;所述至少一个合约函数的所述每个合约函数中包括合约函数1,且所述合约函数1为所述第一业务场景下的合约函数;所述根据所述每个合约函数所对应的操作码的分类类型和所述每个合约函数所对应的操作数的字节长度,基于所述每个合约函数所对应的操作码的分类类型、基于与所述每个合约函数所对应的操作数的字节长度以及资产映射关系表,确定执行所述每个合约函数时的资产消耗信息,包括:获取所述合约函数1所对应的操作码的数量,从所述第一映射关系表中查找与所述合约函数1所对应的操作码的分类类型相匹配的第一匹配资产信息;根据查找到的第一匹配资产信息和所述合约函数1所对应的操作码的数量,确定与所述合约函数1所对应的操作码的分类类型相匹配的第一资产信息;从所述第二映射关系表中查找与所述合约函数1所对应的操作数的字节长度相匹配的第二匹配资产信息,将查找到的第二匹配资产信息作为与所述合约函数1所对应的操作数的字节长度相匹配的第二资产信息;基于确定的第一资产信息和第二资产信息,确定在执行所述合约函数1时所实际消耗的资产消耗量,将确定的实际消耗的资产消耗量作为执行所述合约函数1时的资产消耗信息。5.根据权利要求3所述的方法,其特征在于,所述每个合约函数对应的业务场景包括存在预消耗的第二业务场景;所述方法还包括:若识别到所述每个合约函数对应的业务场景中存在所述第二业务场景,则在所述第二业务场景下获取执行第一合约函数时所提供的预消耗资产量;所述第一合约函数为所述每个合约函数中与所述第二业务场景具有关联关系的且正在执行的合约函数;将执行所述第一合约函数时所实际消耗的资产消耗量作为所述第一合约函数的目标资产消耗信息,根据执行所述第一合约函数时所提供的预消耗资产量和所述目标资产...

【专利技术属性】
技术研发人员:李茂材王宗友刘区城孔利蓝虎杨常青周开班时一防张劲松朱耿良刘攀陈秋平黄焕坤
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1