【技术实现步骤摘要】
合约数据处理方法、相关设备及介质
[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] ...
【技术保护点】
【技术特征摘要】
1.一种合约数据处理方法,其特征在于,包括:接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的交易属性信息,基于所述交易属性信息在虚拟机中构建用于执行所述数据处理任务的智能合约,并为所述智能合约分配单位资产值为零的初始峰值资产消耗量;所述智能合约包含针对所述交易属性信息所编写的至少一个合约函数;根据所述初始峰值资产消耗量在所述虚拟机上运行所述智能合约,通过所述智能合约执行所述至少一个合约函数中的每个合约函数时,确定执行所述每个合约函数时的资产消耗信息;对执行所述每个合约函数时的资产消耗信息进行实时累计,累计得到运行所述智能合约中的对应合约函数时的待处理资产消耗量;通过最大值比较器从所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量中获取具有最大值的峰值资产消耗量,用获取到的具有最大值的峰值资产消耗量实时刷新运行所述智能合约时的峰值资产消耗量,当运行完所述智能合约时,将最新刷新得到的峰值资产消耗量作为用于成功运行所述智能合约的目标峰值资产消耗量;在成功运行完所述智能合约时,将所述智能合约以及与所述目标峰值资产消耗量发布至区块链。2.根据权利要求1所述的方法,其特征在于,所述接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的交易属性信息,基于所述交易属性信息在虚拟机中构建用于执行所述数据处理任务的智能合约,并为所述智能合约分配单位资产值为零的初始峰值资产消耗量,包括:接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的任务属性信息以及参与所述数据处理任务的用户关联属性信息,将获取的所述任务属性信息以及所述用户管理属性信息确定为所述数据交互业务的交易属性信息;基于所述交易属性信息在虚拟机中构建与所述数据处理任务相关联的至少一个合约函数;一个合约函数对应一段合约代码信息;调用所述至少一个合约函数执行每个合约函数对应的合约代码信息,并在成功执行所述每个合约函数对应的合约代码信息时,对所述至少一个合约函数进行封装处理,得到所述数据处理任务对应的智能合约;为所述智能合约分配用于进行合约测试任务的初始运行资产量,将所述初始运行资产量作为在测试所述智能合约时所提供的单位资产值为零的初始峰值资产消耗量。3.根据权利要求1所述的方法,其特征在于,所述根据所述初始峰值资产消耗量在所述虚拟机上运行所述智能合约,通过所述智能合约执行所述至少一个合约函数中的每个合约函数时,确定执行所述每个合约函数时的资产消耗信息,包括:在根据所述初始峰值资产消耗量获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约所包含的所述至少一个合约函数中的每个合约函数;识别所述每个合约函数对应的业务场景;所述每个合约函数对应的业务场景包括:存在实际消耗的第一业务场景;
若识别到所述每个合约函数对应的业务场景均为所述第一业务场景,则通过所述智能合约执行所述每个合约函数时,从所述每个合约函数对应的合约代码信息中获取所述每个合约函数所对应的操作数和操作码,确定所述每个合约函数所对应的操作数的字节长度,且确定所述每个合约函数所对应的操作码的分类类型;根据所述每个合约函数所对应的操作码的分类类型和所述每个合约函数所对应的操作数的字节长度,基于所述每个合约函数所对应的操作码的分类类型、基于与所述每个合约函数所对应的操作数的字节长度以及资产映射关系表,确定执行所述每个合约函数时的资产消耗信息。4.根据权利要求3所述的方法,其特征在于,所述资产映射关系表包括与操作码相关联的第一映射关系表和与操作数相关联的第二映射关系表;所述至少一个合约函数的所述每个合约函数中包括合约函数1,且所述合约函数1为所述第一业务场景下的合约函数;所述根据所述每个合约函数所对应的操作码的分类类型和所述每个合约函数所对应的操作数的字节长度,基于所述每个合约函数所对应的操作码的分类类型、基于与所述每个合约函数所对应的操作数的字节长度以及资产映射关系表,确定执行所述每个合约函数时的资产消耗信息,包括:获取所述合约函数1所对应的操作码的数量,从所述第一映射关系表中查找与所述合约函数1所对应的操作码的分类类型相匹配的第一匹配资产信息;根据查找到的第一匹配资产信息和所述合约函数1所对应的操作码的数量,确定与所述合约函数1所对应的操作码的分类类型相匹配的第一资产信息;从所述第二映射关系表中查找与所述合约函数1所对应的操作数的字节长度相匹配的第二匹配资产信息,将查找到的第二匹配资产信息作为与所述合约函数1所对应的操作数的字节长度相匹配的第二资产信息;基于确定的第一资产信息和第二资产信息,确定在执行所述合约函数1时所实际消耗的资产消耗量,将确定的实际消耗的资产消耗量作为执行所述合约函数1时的资产消耗信息。5.根据权利要求3所述的方法,其特征在于,所述每个合约函数对应的业务场景包括存在预消耗的第二业务场景;所述方法还包括:若识别到所述每个合约函数对应的业务场景中存在所述第二业务场景,则在所述第二业务场景下获取执行第一合约函数时所提供的预消耗资产量;所述第一合约函数为所述每个合约函数中与所述第二业务场景具有关联关系的且正在执行的合约函数;将执行所述第一合约函数时所实际消耗的资产消耗量作为所述第一合约函数的目标资产消耗信息,根据执行所述第一合约函数时所提供的预消耗资产量和所述目标资产...
【专利技术属性】
技术研发人员:李茂材,王宗友,刘区城,孔利,蓝虎,杨常青,周开班,时一防,张劲松,朱耿良,刘攀,陈秋平,黄焕坤,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。