CN113052699A - 合约数据处理方法、相关设备及介质 - Google Patents
合约数据处理方法、相关设备及介质 Download PDFInfo
- Publication number
- CN113052699A CN113052699A CN202110289645.1A CN202110289645A CN113052699A CN 113052699 A CN113052699 A CN 113052699A CN 202110289645 A CN202110289645 A CN 202110289645A CN 113052699 A CN113052699 A CN 113052699A
- Authority
- CN
- China
- Prior art keywords
- contract
- asset
- function
- consumption
- asset consumption
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- Marketing (AREA)
- Databases & Information Systems (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Economics (AREA)
- Development Economics (AREA)
- Medical Informatics (AREA)
- General Business, Economics & Management (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种合约数据处理方法、相关设备及介质,其中,方法包括:在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。本申请实施例可以提高数据计算的准确性,并可以确保合约执行的成功率。
Description
本申请为在2019年09月21日提交中国专利局、申请号为201910901891.0、申请名称为“合约数据处理方法、相关设备及介质”的中国专利申请的分案申请,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及互联网技术领域,具体涉及合约数据处理方法、相关设备及一种计算机存储介质。
背景技术
在一些合约调用的应用场景中,可以通过累加资产消耗量的方式得到合约执行后所最终消耗的资产量(即gas used的值)。但是在合约执行过程中,执行合约中的相应操作而真实消耗的资产量却并不一定是一直累加的。
比如,对于用于修改存储内容的方法而言,其操作码会消耗固定的gas数量,所以在使用该方法对存储数据所占用空间进行修改的过程中,会将原存储数据所占用空间和用于进行修改的存储数据所占用的空间进行计算,以退还多消耗(即重复消耗)的gas数量。所以,通过实际累加消耗的方式所计算得到的gas used的值可能存在不等于gas limit的值(即调用合约所愿意支付的gas数量)的现象,此时,若直接将累计所得到的gas used的值作为gas limit的值,则必然会降低了数据计算的准确性。
此外,在以太坊平台上,若直接将实际消耗的gas数量作为调用合约时所需要的gas limit的值,还可能会导致该gaslimit的值不足以完成合约的调用,进而导致合约执行失败,以至于难以确保合约执行的成功率。
申请内容
本申请实施例提供了一种合约数据处理方法、相关设备及介质,可以提高数据计算的准确性,并可以确保合约执行的成功率。
本申请一方面提供了一种合约数据处理方法,所述方法包括:
在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;
根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;
基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。
其中,所述根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息,包括:
在获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约的每个合约函数;
识别所述每个合约函数对应的业务场景;
若识别到所述每个合约函数对应的业务场景均为第一业务场景,则从所述每个合约函数对应的合约代码信息中获取操作数和操作码;
根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息。
其中,所述根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息,包括:
识别所述每个合约函数中的M个操作码以及所述M个操作码的分类类型,从识别到的M个操作码中获取操作码Si,将所述操作码Si的分类类型作为目标分类类型;i为小于等于M的正整数;
在所述每个合约函数中将与所述操作码Si相关联的操作数作为目标操作数,确定所述目标操作数的字节长度;
基于所述目标分类类型在所述每个合约函数中确定与所述操作码Si相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息;
基于所述第一资产信息、所述第二资产信息,确定所述每个合约函数对应的资产消耗信息。
其中,所述基于所述目标分类类型在所述每个合约函数中确定与所述操作码Si相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息,包括:
在所述每个合约函数中确定所述操作码Si的数量,从第一映射关系表中获取与所述目标分类类型相匹配的第一匹配资产信息;
根据所述操作码Si的数量以及所述第一匹配资产信息,在所述每个合约函数中与所述操作码Si相关联的第一资产信息;
从第二映射关系表中获取所述目标操作数的字节长度对应的第二匹配资产信息,并将所述第二匹配资产信息确定为与所述目标操作数相关联的第二资产信息。
其中,所述方法还包括:
若识别到所述每个合约函数对应的业务场景中存在第二业务场景,则获取所述第二业务场景对应的预消耗资产量;所述预消耗资产量用于后续调用与所述智能合约具有关联关系的关联合约;
将与所述第二业务场景具有关联关系的且正在执行的合约函数作为第一合约函数,确定所述第一合约函数对应的资产消耗信息。
其中,所述第一合约函数对应的资产消耗信息包含目标资产消耗信息和所述预消耗资产量;
所述基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
将所述第一合约函数作为所述智能合约的参考函数,在所述智能合约中将除所述参考函数之外,且已执行的合约函数作为第二合约函数;所述第二合约函数对应的业务场景包含所述第一业务场景;
将与所述第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函数时的历史累计资产消耗量;所述历史累计资产消耗量是由已执行的每个第二合约函数分别对应的资产消耗信息所确定的;
根据所述历史累计资产消耗量、所述目标资产消耗信息以及所述预消耗资产量,确定运行所述第一合约函数时的待处理资产消耗量。
其中,所述方法还包括:
获取客户终端针对所述数据处理任务的任务处理请求;
根据所述任务处理请求从所述客户终端对应的区块链地址信息中获取所述目标峰值资产消耗量对应的合约调用电子资源;所述合约调用电子资源是由所述客户终端提供的单位资产值和所述目标峰值资产消耗量之间的乘积所确定的;
基于所述合约调用电子资源调用所述智能合约执行所述数据处理任务。
其中,所述方法还包括:
在成功执行所述数据处理任务时,将所述智能合约以及所述智能合约对应的合约执行结果打包成目标区块,并将所述目标区块写入区块链。
其中,所述在虚拟机中通过构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量,包括:
获取所述数据处理任务的任务属性信息以及参与所述数据处理任务的用户关联属性信息;
基于所述任务属性信息和所述用户关联属性信息构建与所述数据处理任务相关联的合约函数;一个合约函数对应一段合约代码信息;
调用所述合约函数执行所述合约代码信息,并在成功执行所述合约代码信息时,对所述合约函数进行封装处理,得到所述数据处理任务对应的智能合约;
为所述智能合约分配用于进行合约测试任务的初始运行资产量。
其中,所述任务属性信息包括资产转移属性信息;所述用户关联属性信息至少包含以下转移关键信息:资产转移量、第一客户终端的第一区块链地址信息和第二客户终端的第二区块链地址信息。
本申请一方面提供了一种合约数据处理装置,所述合约数据处理装置包括:
合约构建模块,用于在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;
合约运行模块,用于根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;
资产累加模块,用于基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
目标峰值确定模块,用于根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。
其中,所述合约运行模块包括:
解析确定单元,用于在获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约的每个合约函数;
场景识别单元,用于识别所述每个合约函数对应的业务场景;
第一获取单元,用于若识别到所述每个合约函数对应的业务场景均为第一业务场景,则从所述每个合约函数对应的合约代码信息中获取操作数和操作码;
第一确定单元,用于根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息。
其中,所述第一确定单元包括:
分类识别子单元,用于识别所述每个合约函数中的M个操作码以及所述M个操作码的分类类型,从识别到的M个操作码中获取操作码Si,将所述操作码Si的分类类型作为目标分类类型;i为小于等于M的正整数;
字节确定子单元,用于在所述每个合约函数中将与所述操作码Si相关联的操作数作为目标操作数,确定所述目标操作数的字节长度;
资产确定子单元,用于基于所述目标分类类型在所述每个合约函数中确定与所述操作码Si相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息;
消耗确定子单元,用于基于所述第一资产信息、所述第二资产信息,确定所述每个合约函数对应的资产消耗信息。
其中,所述资产确定子单元包括:
类型匹配子单元,用于在所述每个合约函数中确定所述操作码Si的数量,从第一映射关系表中获取与所述目标分类类型相匹配的第一匹配资产信息;
第一确定子单元,用于根据所述操作码Si的数量以及所述第一匹配资产信息,在所述每个合约函数中与所述操作码Si相关联的第一资产信息;
第二确定子单元,用于从第二映射关系表中获取所述目标操作数的字节长度对应的第二匹配资产信息,并将所述第二匹配资产信息确定为与所述目标操作数相关联的第二资产信息。
其中,所述合约运行模块还包括:
第二获取单元,用于若识别到所述每个合约函数对应的业务场景中存在第二业务场景,则获取所述第二业务场景对应的预消耗资产量;所述预消耗资产量用于后续调用与所述智能合约具有关联关系的关联合约;
第二确定单元,用于将与所述第二业务场景具有关联关系的且正在执行的合约函数作为第一合约函数,确定所述第一合约函数对应的资产消耗信息。
其中,所述第一合约函数对应的资产消耗信息包含目标资产消耗信息和所述预消耗资产量;
所述资产累加模块,包括:
参考单元,用于将所述第一合约函数作为所述智能合约的参考函数,在所述智能合约中将除所述参考函数之外,且已执行的合约函数作为第二合约函数;所述第二合约函数对应的业务场景包含所述第一业务场景;
历史资源确定单元,用于将与所述第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函数时的历史累计资产消耗量;所述历史累计资产消耗量是由已执行的每个第二合约函数分别对应的资产消耗信息所确定的;
累计资产确定单元,用于根据所述历史累计资产消耗量、所述目标资产消耗信息以及所述预消耗资产量,确定运行所述第一合约函数时的待处理资产消耗量。
其中,所述装置还包括:
请求获取模块,用于获取客户终端针对所述数据处理任务的任务处理请求;
合约资源获取模块,用于根据所述任务处理请求从所述客户终端对应的区块链地址信息中获取所述目标峰值资产消耗量对应的合约调用电子资源;所述合约调用电子资源是由所述客户终端提供的单位资产值和所述目标峰值资产消耗量之间的乘积所确定的;
合约调用模块,用于基于所述合约调用电子资源调用所述智能合约执行所述数据处理任务。
其中,所述装置还包括:
上链模块,用于在成功执行所述数据处理任务时,将所述智能合约以及所述智能合约对应的合约执行结果打包成目标区块,并将所述目标区块写入区块链。
其中,所述合约构建模块包括:
信息获取单元,用于获取所述数据处理任务的任务属性信息以及参与所述数据处理任务的用户关联属性信息;
函数构建单元,用于基于所述任务属性信息和所述用户关联属性信息构建与所述数据处理任务相关联的合约函数;一个合约函数对应一段合约代码信息;
合约生成单元,用于调用所述合约函数执行所述合约代码信息,并在成功执行所述合约代码信息时,对所述合约函数进行封装处理,得到所述数据处理任务对应的智能合约;
资产分配单元,用于为所述智能合约分配用于进行合约测试任务的初始运行资产量。
其中,所述任务属性信息包括资产转移属性信息;所述用户关联属性信息至少包含以下转移关键信息:资产转移量、第一客户终端的第一区块链地址信息和第二客户终端的第二区块链地址信息。
本申请一方面提供了一种计算机设备,包括:处理器、存储器、网络接口;
所述处理器与存储器、网络接口相连,其中,网络接口用于提供数据通信功能,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以执行本申请实施例中上述一方面中的方法。
本申请一方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行本申请实施例中上述一方面中的方法。
在本申请实施例中,在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。由此可见,本申请实施例通过对虚拟机上运行的智能合约中的各合约函数的待处理资产消耗量进行计算,可以在每个合约函数运行时,进一步通过每个合约函数运行时的待处理资产消耗量与每个合约函数对应的历史峰值资产消耗量之间的比较器,得到每个合约函数运行时的较大的峰值资产消耗量,进而可以通过该较大的峰值资产消耗量不断刷新智能合约运行时所需要的目标峰值资产消耗量。换言之,本申请实施例通过对每个合约函数运行时所比较得到的较大的资产消耗量,可以不断更新智能合约在运行相应合约函数时的峰值消耗量进行更新,以通过不断更新的峰值消耗量准确计算出成功运行该智能合约所需的目标峰值资产消耗量(该目标峰值资产消耗量可以理解为运行所述智能合约所需要的合约成本),即本申请实施例可以提高数据计算的准确性,进而可以在合约运行时提供一个合理的合约成本,以确保所述智能合约调用时的成功率。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种区块链网络拓扑结构的结构示意图;
图2是本申请实施例提供的一种调用智能合约执行数据处理任务的场景示意图;
图3是本申请实施例提供的一种合约数据处理方法的流程示意图;
图4是本申请实施例所列举的不同情况下调用不同类型的智能合约的场景示意图;
图5a和图5b是本申请实施例提供的一种在有预消耗情况下进行峰值计算的场景示意图;
图6是本本申请实施例提供的另一种合约数据处理方法的流程示意图;
图7是本申请实施例提供的一种合约数据处理装置的结构示意图;
图8是本申请实施例提供的一种计算机设备的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,本申请所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参见图1,是本申请实施例提供的一种区块链网络拓扑结构的结构示意图。如图1所示的区块链网络拓扑结构可以应用于合约数据处理系统100,该合约数据处理系统100可以用于部署具有相应数据处理业务功能的智能合约。可以理解的是,本申请实施例涉及的合约数据处理系统100可以是由客户终端(简称客户端)、多个节点(接入该区块链网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统,该分布式系统也可以称之为区块链系统。
可以理解的是,本申请实施例可以将该分布式系统中的多个节点中的任意一个节点称之为区块链节点,该区块链节点可以为需要接入该区块链网络中的合约管理终端所对应的角色(即合约管理用户)提供接入服务,即该区块链节点可以通过网络与该合约管理终端进行数据交互。其中,可以理解的是,这里的合约管理用户可以理解为能够进行智能合约开发、管理的用户,这里将不对其进行限定。其中,该合约管理终端可以理解为一种可以通过合约创建平台向区块链节点发起合约创建请求的用户终端。
其中,如图1所示的该合约管理终端中所运行的客户终端可以为一种能够提供合约构建服务的应用程序。针对现有技术中存在合约调用失败的现象,本申请实施例提供一种合约数据构建处理方案,可以准确计算并得到能够成功调用智能合约(比如,合约A)的合约调用资产消耗量(即gas limit的值),以避免资产消耗量不足导致合约A的执行失败的现象。本申请实施例可以将用于调用合约的合约调用资产消耗量统称为目标峰值资产消耗量。
另外,本申请还可以解决现有技术中采用过大的gas limit的值调用智能合约(比如,前述合约A)的情况。虽然现有技术通过直接提供较大的gas limit的值也可以保证合约的成功执行,但是考虑到区块中的交易数量的多少受限于区块的块gas limit(即blockgas limit)的值,那么调用合约所使用的gas limit越大则必然会导致区块中所能够容纳的交易数量就越少,即能够打包进区块的交易数量就越少,进而降低了区块链节点的处理能力,无法充分利用区块链节点的处理能力。所以,采用上述合约数据构建处理方案不仅能够确保合约的成功运行,还可以确保区块中可以容纳更多的交易,以充分利用区块链节点的数据处理能力。
在图1所示的合约数据处理系统100(即区块链系统)中的节点104可以为与该合约管理终端对应的区块链节点。可以理解的是,该区块链节点可以为接入该区块链系统中的合约管理用户提供相应的接入接口,以使得该合约管理用户可以通过该接入接口登录并访问该区块链节点,此时,该区块链节点可以理解为一种与合约管理终端对于的服务设备。
如图1所示,区块链节点在接收到合约管理终端发起的部署合约的请求(例如,请求A)之后,可以为该请求A中所请求的数据处理任务创建与该数据处理任务相关联的智能合约,并在创建该智能合约的过程中为该智能合约分配一个初始运行资产量,本申请实施例中的初始运行资产量可以理解为区块链系统为测试该智能合约所免费提供的一定数量的gas,此时,这些免费提供的gas数量可以称之为初始峰值资产消耗量。需要注意的是,此时,与初始峰值资产消耗量对应的gas price(即单位资产值)可以为零。此外,可以理解的是,通过初始运行资产量试运行(即测试)该智能合约的过程中,可以执行该智能合约中的每个合约函数对应的合约代码信息,以得到每个合约函数对应的资产消耗信息。
其中,本申请实施例中的资产消耗信息在不同业务场景下,可以具体包含每个合约函数在实际运行时所实际消耗的资产消耗量和预消耗的资产消耗量。这里将不对其进行限制。比如,在有预消耗的业务场景下,合约函数对应的资产消耗信息所包含的预消耗的资产消耗量和预消耗的资产消耗量均不为零。又比如,在其他不存在预消耗的业务场景下,可以将合约函数对应的资产消耗信息等效为实际消耗的资产消耗量,即此时该合约函数对应的预消耗的资产消耗量可以为零。
其中,可以理解的是,每个合约调用函数可以对应一个指令,通过调用该指令可以运行相应的合约代码信息(这里的合约代码信息是一种二进制数据流),进而可以通过合约代码信息中的操作数和操作码分别从资产映射关系表中找到相应的资产信息(即可以匹配到相应数量的资产消耗量),进而可以根据每个合约函数对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息。
可以理解的是,本申请实施例可以在部署智能合约的时候,对合约代码信息中的操作数的字节长度(即合约字节数的大小)进行检查,以准确统计出每个操作数所占用的存储空间所对应的第二资产信息。此外,本申请实施例还可以一并统计操作码所对应的第二资产信息,进而可以避免在实际运行相应合约函数时,因为交易方(即调用智能合约执行数据处理任务的用户,也可以称之为合约调用者)所提供的合约调用电子资源(也可以称之为虚拟资产)对应的合约调用资产消耗量不足,而导致无法运行该合约函数的现象。
其中,可以理解的是,在以太坊(即以太坊平台)中,该合约调用电子资源(简称为电子资源)可以为以太币等。由于以太币的价格会随着市场需求而出现上下波动,为确保智能合约的有效执行,本申请实施例可以采用与该以太币相关联的gas数量(即目标峰值资产消耗量)来进行合约调用。可以理解的是,此时,调用每个合约所需要的目标峰值资产消耗量可以理解为一种具有稳定数值特性的资产度量单位,进而可以在以太坊中通过实际所消耗的gas的数量所对应的峰值(即目标峰值资产消耗量)和gas的单位资产值的乘积,来描述运行相应指令所需要消耗的支付成本(即上述合约调用电子资源)。
进一步的,可以理解的是,本申请实施例在试运行智能合约的过程中,可以根据每个合约函数对应的业务场景(第一业务场景或者第二业务场景),累计在运行每个合约函数时的待处理资产消耗量。
其中,可以理解的是,第一业务场景为运行该智能合约中的相应合约函数时不存在预消耗时的业务场景,此时,该待处理资产消耗量可以为通过资产消耗量累加方式所实时累计到的实际累加资产消耗量。其中,第二业务场景为该智能合约中的相应合约函数在执行时会存在预消耗时的业务场景。
为便于理解,本申请实施例以智能合约中的两个合约函数为例,这两个合约函数对应的业务场景均可以为第一业务场景,此时,在运行完合约函数1时,可以获知该合约函数1对应的资产消耗信息(比如,资产消耗量A)可以为20gas。同理,在运行完合约函数2时,可以获知该合约函数2对应的资产消耗信息(比如,资产消耗量B)可以为30gas。所以,该区块链节点可以对资产消耗量A和资产消耗量B进行累加处理,以将当前实时累计到的50gas(即实际累计到的资产消耗量1)作为待处理资产消耗量。由此可见,本申请实施例所累计到的待处理资产消耗量(即实际累计资产消耗量1)可以随着合约函数的遍历执行,而进行不断的刷新,以便于后续可以通过比较待处理资产消耗量(比如,50gas)与历史峰值资产消耗量(比如,20gas),进一步确定出用于成功运行所述智能合约的目标峰值资产消耗量(即50gas)。
可选的,在第二业务场景下,比如,在执行合约函数3时需要进行预支付,则本申请实施例可以将该预支付所对应的资产消耗量统称为预消耗资产量。可以理解的时,在本申请实施例中,该预消耗资产量可以用于后续调用与所述智能合约具有关联关系的关联合约,此时,与该预消耗资产量对应的合约函数3可以用于提供调用关联合约的接口,以通过该接口实现合约调用合约的功能。可以理解的是,在第二业务场景(比如,合约1调用合约2的场景)下,在完成另一个合约(即合约2)的调用且有剩余gas数量的情况下,可以将剩余gas数量继续用来调用合约1中的其他合约函数。在上述待处理资产消耗量的计算过程中,会将在本步骤调用合约函数3之前的在前述调用合约2时所累计到的上述累计资产消耗量1作为历史累计资产消耗量(即,50gas),并一并获取本步骤调用合约函数3对应的目标资产消耗信息(即本步骤的实际资产消耗量,例如,5gas)以及该合约函数3对应的预消耗资产量(例如,25gas),进而可以基于这三者一并求和计算得到运行合约步骤3时的待处理资产消耗量。进一步的,如图1所示的区块链节点也可以根据所述待处理资产消耗量(例如,50gas+5gas+25gas=80gas)与所述待处理资产消耗量对应的历史峰值资产消耗量(即前述50gas),确定用于成功运行所述智能合约的目标峰值资产消耗量(即80gas)。可以理解的是,此时,区块链节点可以在通过比较器从这两者(即max(50gas,80gas))中求取最大者作为新的峰值资产消耗量,进而可以刷新历史峰值资产消耗量,从而可以将刷新得到的最新的峰值资产消耗量,例如,80gas作为成功运行所述智能合约的目标峰值资产消耗量。
可以理解的是,本申请实施例在准确计算得到目标峰值资产消耗量时,可以准确计算得到的目标峰值资产消耗量,从而可以进一步将该准确计算得到的目标峰值资产消耗量和智能合约一并作为需要上链的交易内容写入区块链,以确保在成功将该包含目标峰值资产消耗量和智能合约的区块写入区块链(比如,合约链)时,使得上述图1所示的其他节点(比如,图1所示的节点101、节点102、…、节点103)可以同步存储上述包含该区块的哈希链,以至于这些节点在获取到相应数据交互业务对应的合约调用请求时,可以基于该数据交互业务获取到相应的合约调用地址,从而可以基于该合约调用地址找到相应的智能合约执行该数据交互业务。
其中,可以理解的是,本申请实施例中的智能合约本质上就是一段计算机执行的程序,可以事先将合约的触发条件,执行的事项等详细的合约内容,以代码的形式储存在区块链网络中,进而可以在确定满足相应的条件时自动执行相应的合约代码信息,不需任何第三方干预,任何第三方也无法干预,从而可以确保合约的参与方在调用该智能合约执行相应数据处理任务的公平、公正、可靠性。
在一些智能合约的调用场景下,开发人员所发布的智能合约在发布至区块链之后,位于上述合约数据处理系统100中的其它节点可以获取到开发人员所发布的智能合约,并可以在这些节点设备获取到需要调用该智能合约的用户(即合约调用者)的发起的合约调用请求(也可以称之为任务处理请求)时,从该合约调用者的区块链账户中转移能够调用该智能合约的目标峰值资产消耗量所对应的合约调用电子资源,以进行智能合约的调用。比如,可以调用该智能合约智能实现数据处理任务所涉及的电子资源的转移操作(比如,支付类操作)。换言之,这里的电子资源可以理解为一种针对调用该智能合约进行处理处理任务的支付成本,该支付成本可以统称为上述合约调用电子资源。其中,可以理解的是,该支付成本是由需要调用该智能合约的用户愿意支付的单位资产值(即gas price的值)与目标峰值资产消耗量(gas limit的值)之间的乘积所确定的。换言之,支付成本(即合约调用电子资源)=单位资产值*目标峰值资产消耗量。其中,目标峰值资产消耗量中的每个资产消耗量是指用于执行该智能合约的度量单位,即本申请实施例中的该目标峰值资产消耗量可以统称为调用智能合约时所需要消耗的合约调用资产量。
其中,本申请实施例中的电子资源还可以指用于购买虚拟物品的资金,其可至少包括法币、电子货币等;所谓法币是指一种以法律形式赋予其强制流通使用的货币,如人民币、美元等;所谓电子货币是指以电子形式存储在用户所持有的电子钱包(如QQ钱包、微信钱包等)中的货币。其中,所述虚拟物品可包括但不限于:电子票据、数字货币(一种不受管制的、数字化的货币)、游戏资源(如游戏币、游戏装备等),等等。
为便于理解,进一步的,请参见图2,是本申请实施例提供的一种调用智能合约执行数据处理任务的场景示意图。如图2所示的第一终端可以基于与第二终端(比如,消费者)之间的数据交互业务,向图2所示的合约管理终端发起合约构建请求,比如,第一终端对应的第一用户(比如,商户A)可以通过合约构建平台与合约管理终端进行数据交互,使得该合约管理用户可以基于第一用户(即商户A)所提交的该数据交互业务的任务关键信息,在该合约管理用户对应的区块链节点上构建并试运行该智能合约的交易码(即通过指定汇编语言所编写的针对该数据交互业务中的交易属性信息所编写的合约代码信息)。
其中,可以理解的是,在该区块链节点对该智能合约进行试运行的过程中,可以为该构建的智能合约分配相应的初始运行资产量,其中,应当理解,区块链系统会在构建智能合约时,免费为提供用于对该智能合约进行合约测试的资产消耗量(例如,300gas),此时,该区块链系统为这些gas数量所提供的单位资产值可以0,即在合约测试过程中并不会消耗任何的支付成本,所以,这些初始运行资产量所对应的电子资源的值可以为零。
进一步的,该区块链节点可以基于该初始运行资产量在该区块链节点的虚拟机上,实时刷新并记录该智能合约在执行每个合约函数时的待处理资产消耗量以及相应的历史峰值资产消耗量,并可以通过比较器实时对两者的大小进行比较,以不断刷新该智能合约运行过程中的峰值资产消耗量,进而可以在运行完该智能合约时,基于最新刷新的峰值资产消耗量准确计算出成功运行该智能合约的目标峰值资产消耗量。
如图2所示的区块链节点可以将包含该智能合约的目标区块A广播至该区块链系统中的所有节点设备。比如,可以将该目标区块广播之图2所示的共识节点1、共识节点2、…、共识节点3,以及图2所示的与该第二终端具有关联关系的第一节点,以使这些节点可以在自己的本地终端进行共识验证。应当理解,本申请实施例在将智能合约写入区块链的过程中,该区块链节点需要从该区块链节点对应的区块链账户中针对该广播事件转移一笔用于将智能合约和该目标峰值资产消耗量写入区块链的电子资源,以激励区块链中的这些共识节点可以针对该广播事件提供共识服务。
可以理解的是,在这些节点达成共识时,图2所示的区块链节点可以将该包含智能合约的目标区块A写入该区块链系统的区块链,以使该区块链系统中的每个节点都可以存储该目标区块A。应当理解,在图2所示的第二用户向相应的区块链节点(例如,图2所示的第一节点)发起合约调用请求时,可以基于该合约调用请求中所携带的数据交互业务的任务属性信息(比如,与租房属性信息相关联的合约地址)在第一节点上获取到该智能合约,并可以在该第二用户通过自己区块链账户为该第一节点提供合适的合约调用电子资源时,调用该智能合约,提供便捷且快速地的交易行为。
可选的,可以理解的是,在图2所示的第一终端具备合约代码编译功能时,图2所示的第一用户对应的第一终端也可以直接与图2所示的区块链节点进行数据交互。比如,以上述第一用户为餐饮经营者为例,其可通过图2所示的第一终端向商户节点(即图2所示的区块链节点)输入对一菜品的预定格式的菜品描述(即可以向区块链节点发起部署智能合约形式的电子菜单),从而可以在商户节点基于编写的对应于该菜品的智能合约形式的电子菜单,并在上述区块链系统中部署该电子菜单。消费者(即图2所示的第二用户)可以在第二终端中通过扫码或者在触发运行在该终端中的终端应用程序(点餐应用)获取该电子菜单。例如,消费者可以通过对该菜品进行点菜而签署与该电子菜单对应的智能合约,从而可以调用该智能合约进行点餐业务。
其中,可以理解的是,本申请实施例可以将该分布式系统称之为区块链系统,还可以称之为数据共享系统。在该区块链系统中,可以将与第二终端具有网络连接关系的节点(即第一节点)称之为该区块链中的区块链节点,该区块链节点也可以称之为钱包节点,同理,在该区块链系统中也可以存在与第一用户的第一终端具有网络连接关系的节点(为便于与第一节点进行区别,可以将该与该第一用户对应的节点称之为第二节点)。应当理解,本申请实施例还可以将与该区块链节点具有点对点网络连接关系的节点统称为共识节点。其中,应当理解,如图2所示的多个节点之间可以组成的点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。
应当了理解,在一个实施例中,该区块链节点可以为该区块链系统中的区块链节点基于共识机制所选举得到的领导节点,此时,本申请实施例可以进一步将该区块链系统中的与该领导节点具有网络连接关系的用于进行共识验证的其他共识节点称之为从节点。
应当理解,在分布式系统(即图1所示的合约数据处理系统100)中,任何机器如服务器、终端都可以加入而成为节点,且一个节点可以对应一个角色(也可以称之为一个对象)。换言之,该合约数据处理系统100可以用于为加入该区块链系统中的角色提供相应的接入接口。比如,在上述合约数据处理系统为票据处理系统时,可以针对税局(即税务局)提供用于进行收税服务的智能合约的接口、也可以针对开票企业提供针对购买虚拟物品所提供的开票服务的智能合约的接口,这里将不对其进行一一列举。
其中,该区块链节点根据初始运行资产量在所述虚拟机上运行所述智能合约以及确定用于成功运行所述智能合约的目标峰值资产消耗量的具体实现方式可以参见本申请实施例中的图3-图6所对应实施例的描述。
进一步地,请参见图3,是本申请实施例提供的一种合约数据处理方法的流程示意图。所述方法可以应用于区块链系统中的区块链节点,所述方法具体可以包含以下步骤S101-步骤S104。
步骤S101,在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;
具体的,区块链节点可以获取所述数据处理任务的任务属性信息以及参与所述数据处理任务的用户关联属性信息;进一步地,该区块链节点可以基于所述任务属性信息和所述用户关联属性信息构建与所述数据处理任务相关联的合约函数;一个合约函数对应一段合约代码信息;进一步地,该区块链节点可以调用所述合约函数执行所述合约代码信息,并在成功执行所述合约代码信息时,对所述合约函数进行封装处理,得到所述数据处理任务对应的智能合约;进一步地,该区块链节点可以为所述智能合约分配用于进行合约测试任务的初始运行资产量。可以理解的是,本申请实施例中的智能合约可以包含至少一个合约函数。
其中,可以理解的是,本申请实施例中的每个合约函数均可以按照所述智能合约的合约策略进行执行。即每个合约函数等效为智能合约中所规定的每个合约条款,且每个合约条款均是按照所述智能合约的合约逻辑依次执行的。
比如,一个智能合约可以包含多个合约函数,所述多个合约函数具体可以包含合约函数1、合约函数2、…、合约函数N,N可以为正整数,这里将不对该智能合约所包含的具体合约函数的数量进行限制。可以理解的是,本申请实施例中的合约函数可以为一系列的指令。
其中,应当理解,本申请实施例可以将区块链系统中与第一用户对应的第一终端具有关联关系的区块链节点(即节点)统称为区块链节点,该区块链节点可以为上述图2所对应实施例中的区块链节点。换言之,这里的区块链节点是指可以用于提供一种合约数据构建处理方案的节点(也可以称之为节点设备),该区块链节点可以用独立的服务器或者是多个服务器所组成的服务器集群来实现,这里将不对其进行限制。
其中,可以理解的是,在本申请实施例中,该区块链系统还可以利用区块链的去中介化特性,在通过初始运行资产量成功运行智能合约时,进一步通过共识节点对包含该智能合约的目标区块进行共识验证,以有效地确保上链前所得到的智能合约的目标峰值资产消耗量(即合约调用资产量)的真实性和可靠性。
步骤S102,根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息。
具体的,区块链节点在获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约的每个合约函数;进一步地,区块链节点可以识别所述每个合约函数对应的业务场景;进一步地,若识别到所述每个合约函数对应的业务场景均为第一业务场景,则该区块链节点可以从所述每个合约函数对应的合约代码信息中获取操作数和操作码;进一步地,该区块链节点可以根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息。
其中,可以理解的是,本申请实施例中的业务场景可以包含第一业务场景,还可以包含第二业务场景。所述第一业务场景是指在运行相应合约函数(例如,合约函数A)时仅存在实际资产消耗的业务场景,即该第一业务场景为运行该智能合约中的相应合约函数时不存在预消耗时的业务场景。所述第二业务场景是指在运行相应合约函数(例如,合约函数B)时存在预消耗资产量的业务场景,其中,该预消耗资产量可以用于后续调用与所述智能合约具有关联关系的关联合约。
应当理解,本申请实施例需要为每个智能合约的调用,提供相应数量的合约调用资产量,以确保每个智能合约的成功调用。
其中,可以理解的是,本申请实施例在上述两种业务场景下,计算相应函数所对应的待处理资产消耗量是不同的,即不同业务场景需要采用不同的计算公式准确计算与相应业务场景所关联的合约函数所对应的峰值资产消耗量。换言之,本申请实施例在调用智能合约时,可以维护了两组数据,一个是累加得到的实际累计资产消耗量,另一个是不断刷新的峰值资产消耗量。所以,需要注意的是,在智能合约的每个合约函数执行时均需要遵循以下规则对这两组数据进行不断的刷新处理:
1)当相应合约函数执行时存在预消耗时,则需要将预消耗资产量和截止到目前所累计到的实际累计资产消耗量一并称之为待处理资源消耗量。
2)当相应函数执行时存在实际消耗时,则可以直接将截止到目前所累积到的实际累累计资产消耗量直接作为待处理资源消耗量。
应当理解,在第一业务场景下,计算峰值资产消耗量的计算公式可以为如下公式(1):
峰值资产消耗量=max(旧峰值,实时累加消耗)公式(1)
在公式(1)中,旧峰值是指在当前正在执行的合约函数(例如,合约函数A)之前,且已执行的其他合约函数(例如,合约函数C和合约函数D)对应的历史峰值资产消耗量。实时累加消耗是指截至到执行合约函数A时所累计到的实际累计资产消耗量。该实际累计资产消耗量可以为实时统计到的历史累计资产消耗量与当前执行该合约函数A所实际消耗的资产消耗量之和,即此时,与合约函数A对应的待处理资产消耗量可以包含两部分,即待处理资产消耗量=实时累加消耗=实际累计资产消耗量=历史累计资产消耗量+当前的实际资产消耗量。此时,可以将当前执行合约函数A时所实际消耗的资产消耗量(即当前的实际资产消耗量)作为合约函数A对应的资产消耗信息。
其中,比如,在第一业务场景下,在智能合约运行到合约函数A时,可以将合约函数A作为参考函数,并将所述智能合约中除该合约函数A之外的,且已执行的合约函数(例如,合约函数C和合约函数D)作为已累计函数。通过每个已累计函数对应的资产消耗信息以及该参考函数对应资产消耗信息,本申请实施例可以将计算出的截止到该参考函数(即合约函数A)时的实际累计资产消耗代入上述公式(1),以求取新的峰值资产消耗量,并可以将该新的峰值资产消耗量作为调用下一个合约函数的旧峰值。可以理解的是,本申请实施例可以将上述公式(1)称之为第一峰值累计计算公式,即通过该第一峰值累计计算公式可以不断刷新合约执行过程中的峰值资产消耗量。比如,若合约函数A对应的待处理资产消耗量(即实时累加消耗)大于旧峰值,则将合约函数A对应的待处理资产消耗量作为合约函数A对应的峰值资产消耗量,反之,则将合约函数A对应的旧峰值作为合约函数A对应的峰值资产消耗量。
可选的,在第二业务场景下,计算峰值资产消耗量的计算公式可以为如下公式(2):
峰值资产消耗量=max(旧峰值,实时累加消耗+预消耗资产量)公式(2)
在公式(2)中,旧峰值是指在当前正在执行的合约函数(例如,合约函数B)之前,已执行的其他合约函数(例如,合约函数C、合约函数D和合约函数A)对应的历史峰值资产消耗量,此时,该历史峰值资产消耗量可以为合约函数A对应的峰值资产消耗量,比如,该峰值资产消耗量可以为统计到的截至到上述合约函数A时的实际累计资产消耗量。所以,当运行到该合约函数B时,为确保智能合约的成功执行,可以将合约函数B对应的预消耗资产量和合约函数B对应的实际资产消耗量一并纳入峰值计算。应当理解,此时,实时累加消耗是指截至到执行合约函数B时所累计到的实际累计资产消耗量。此时,合约函数B对应的实际累计资产消耗量(即新的实时累加消耗)可以包含以下两部分:即执行合约函数B时所消耗的资产消耗量和执行合约函数B之前的历史累计资产消耗量。
换言之,此时,与合约函数B对应的待处理资产消耗量可以包含以下三部分,即待处理资产消耗量=实时累加消耗+预消耗资产量=历史累计资产消耗量+当前的实际资产消耗量+预消耗资产量。可以理解的是,在本申请实施例中,可以将当前运行合约函数B的实际资产消耗量和该合约函数B对应的预消耗资产量统称为该合约函数B对应的资产消耗信息。
其中,为便于进行理解,本申请实施例以当前正在执行的合约函数B为上述已执行完的合约函数A的下一可执行函数(即相邻合约函数)为例,在第二业务场景下,在智能合约运行到合约函数B时,可以将合约函数B作为新的参考函数,并将所述智能合约中除该合约函数B之外的,且已执行的合约函数作为新的已累计函数,此时,该新的已累计函数可以包含上述合约函数C、合约函数D以及刚执行完的合约函数A。通过每个新的已累计函数对应的资产消耗信息以及该新的参考函数对应资产消耗信息,可以确定智能合约执行到合约函数B时的待处理资产消耗量。可以理解的是,本申请实施例可以通过结合上述公式(2),计算出截止到该新的参考函数(即合约函数B)时的实际累计资产消耗。可以理解的是,本申请实施例可以将上述公式(2)称之为第二峰值累计计算公式,即通过该第二峰值累计计算公式可以不断刷新合约执行过程中的两组数据,一个是合约执行过程中的峰值资产消耗量(即需要刷新旧峰值),一个是合约执行过程中的实际累计资产消耗量(即需要刷新实时累加消耗)。
应当理解,在第二业务场景下,在计算实际累计资产消耗量时并不会将预消耗资产量纳入进行计算。由于预消耗资产量可以用于在合约函数B执行时提供一个调用另一智能合约的接口,为确保另一智能合约的成功执行,本申请实施例需要在存在预消耗的情况下,将预消耗资产量一并纳入峰值计算,以确保合约调用合约这个功能的成功执行。
应当理解,本申请实施例在运行相应的合约函数时,可以将当前正在运行的合约函数称之为第一合约函数,并将当前已经运行过的合约函数统称为第二合约函数。可以理解的是,无论是第一合约函数还是第二合约函数,本申请实施例在运行这些合约函数时,均会维护上述两组数据(即旧峰值和实时累加消耗的不断刷新)。此外,为便于理解,本申请实施例可以将在运行每个合约函数时所统计到的需要参与峰值计算的资产消耗量(即本步骤的实际资产消耗量和预消耗资产消耗量)统称为资产消耗信息。即在第一业务场景下,第一合约函数(比如,上述合约函数A)的资产消耗信息可以为实际运行第一合约函数所消耗的资产消耗量。可选地,在第二业务场景下,第一合约函数(比如,上述合约函数B)的资产消耗信息可以包含预先消耗的资产消耗量(即该预先消耗的资产消耗量可以称之为合约函数B对应的预消耗资产量,或者第二业务场景对应的预消耗资产量)和运行该合约函数B时所实际消耗的资产消耗量(即实际消耗资产量)。
其中,可以理解的是,本申请实施例可以将运行每个合约函数时所实际消耗的资产量称之为目标资产消耗信息,通过累加这些目标资产消耗信息即可以得到上述实际累计资产消耗量,以实时刷新需要维护的实时累加消耗,从而可以在合约执行完成之后,将最新刷新得到的实时累加消耗称之为gasused的值。显然,在本申请实施例中的gasused的值并不一定等于执行合约所需要的gas limit的值,所以,为确保合约的成功执行,需要不断刷新执行合约过程中的峰值资产消耗量,以提高合约执行的成功率。
步骤S103,基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
具体的,区块链节点可以基于上述两种业务场景将当前正在运行的合约函数统称为第一合约函数,比如,在业务场景为第二业务场景时,第一合约函数所对应的资产消耗信息可以包含目标资产消耗信息(即实际资产消耗量)和所述预消耗资产量;可选的,在在业务场景为第一业务场景时,第一合约函数所对应的资产消耗信息可以包含目标资产消耗信息(即实际资产消耗量)。此时,区块链节点可以根据不同业务场景动态选择不同资产消耗信息的确定方式得当每个合约函数对应的资产消耗信息,从而可以准确计算到上述待处理资产消耗量。
例如,该区块链节点可以将所述第一合约函数作为所述智能合约的参考函数,在所述智能合约中将除所述参考函数之外,且已执行的合约函数作为第二合约函数;此时,所述第二合约函数对应的业务场景可以包含所述第一业务场景;比如,这些已执行的第二合约函数对应的业务场景可以均是第一业务场景,当然,这些已执行的第二合约函数对应的业务场景也可以包含第二业务场景。所以,区块链节点在计算历史累计资产消耗量时可以将与所述第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函数时的历史累计资产消耗量;换言之,此时,所述历史累计资产消耗量是由已执行的每个第二合约函数分别对应的资产消耗信息中的实际资产消耗量所确定的;进一步的,区块链节点可以根据所述历史累计资产消耗量、所述目标资产消耗信息中的实际资产消耗量以及所述预消耗资产量,确定运行所述第一合约函数时的待处理资产消耗量,以便于可以进一步执行步骤S104。
步骤S104,根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。
其中,可以理解的是,本申请实施例中的目标峰值资产消耗量可以为上述合约调用者调用智能合约时所需要提供的合约调用资产量,即该合约调用资产量可以为该合约调用者愿意为执行该智能合约付出的总的gas数量,该总的gas数量还可以称之为gas limit的值。
其中,可以理解的是,本申请实施例所涉及的合约数据处理方法可以应用在以下三种合约调用场景。一种是合约调用过程中涉及的是无退款合约调用,另一种是合约调用过程中涉及到有最终退款的合约调用(future refund),又一种是合约调用过程中涉及到有子合约退款的合约调用。
为便于理解,进一步的,请参见图4,是本申请实施例所列举的不同情况下调用不同类型的智能合约的场景示意图。其中,如图4所示的e点可以为合约调用完成时的点,如图4所示的合约调用场景1为无退款合约调用,如图4所示,该区块链节点可以一直累加计算智能合约调用过程中的每个步骤(即每个合约函数)所实际消耗的资产消耗量,以实时刷新这些合约函数对应的待处理资产消耗量,并可以通过上述公式(1)快速预测得该智能合约的gas limit的值,此时,可以将每次实际消耗的gas数量进行累加即可,即可以将在a点处的资产消耗信息中的实际资产消耗量(比如,100gas)、在b点处的资产消耗信息中的实际资产消耗量(比如,100gas)、在c点处的资产消耗信息中的实际资产消耗量(比如,100gas)、在d点处的资产消耗信息中的实际资产消耗量(比如,100gas)、在e点处的资产消耗信息中的实际资产消耗量(比如,100gas)依次进行累加,以得当在该合约调用场景1下在e点处的待处理资产消耗量(比如,累加计算所得到的gas数量可以为500gas),并可以将该500gas作为用于成功运行所述智能合约(比如,智能合约1)的目标峰值资产消耗量。
其中,如图4所示的合约调用场景2为有最终退款的合约调用(future refund)。比如,以智能合约(例如,智能合约2)调用合约函数执行SSTORE操作为例,需要将原存储数据清空,这样会有gas数量的补偿,且补偿发生在合约调用链结束时,所以在累加计算实际所消耗的实际累计资产消耗量时,会在合约执行结束后才会回落(即在合约执行完后进行gas数量的退还),所以,如图4所示,在合约执行过程中,即在d点之前(即截至到c点)是一直累加的,比如,c点的累计资产消耗量可以为(350gas)。应当理解,由于gas limit的值需要综合考虑合约执行过程中旧峰值与待处理资产消耗量中的较大者。比如,在调用场景2下的峰值(gas limit的值)计算方法可以在合约过程中一直累加实际消耗gas,而忽略transaction(在d点的交易)结束时的补偿即可,所以,在合约结束时的e点的实际累计资产消耗量可以为c点所统计到的累计资产消耗量(即350gas)。
其中,如图4所示的合约调用场景3为有子合约退款的合约调用,即在合约执行过程中会立即进行退费,且所退的费用(即退还的gas数量)可以用于继续调用与该智能合约相关联的其他合约。所以在合约执行过程中就会发生退款(即gas数量的补偿),即存在合约调用合约时,会将剩余的gas数量全部转入被调用的关联合约进行合约调用,即在d点的gas将不参与峰值的计算。
应当理解,本申请实施例所描述的合约数据处理方法包含但不限于上述三种合约调用场景,在其他场景的合约调用,这里将不一一进行列举。
为便于理解,进一步的,请参见图5a和图5b,是本申请实施例提供的一种在有预消耗情况下进行峰值计算的场景示意图。如图5a所示,区块链系统中的区块链节点可以通过初始运行资产量(比如,300gas,即区块链节点所免费提供的gas数量为300)运行智能合约1,其中,a点为开始调用合约1执行合约函数1所在的地方,且该a点并不存在预消耗,所以,在运行合约函数1时可以得到该合约函数1对应的资产消耗信息1(即执行合约函数1的实际资产消耗量1,也可以称之为实际消耗的gas数量)可以为10。由于区块链节点在a点开始执行合约1,所以,该合约函数1对应的历史累计资产消耗量1可以为0,且该合约函数1对应的旧峰值1也可以为零,具体的可以参见图5b所示的a点的示意图。
此时,通过上述公式(1)可以得知:a点的峰值资产消耗量1=max(旧峰值1,实时累加消耗1)=max(旧峰值1,历史累计资产消耗量1+当前的资产消耗信息1)=max(旧峰值1,历史累计资产消耗量1+实际资产消耗量1)=max(0,0+10)=10,具体的可以参见图5b所示的峰值资产消耗量1(即新峰值1)的示意图。由此可见,此时,本申请实施例可以将a点的实时累加消耗1称之为a点的待处理资产消耗量1。
可以理解的是,如图5b所示,在该区块链节点中的虚拟机运行b点处的合约函数2时,可以将在该a点得到的实时累加消耗1(即待处理资产消耗量1)作为合约函数2对应的历史累计资产消耗量2,并将在a点得到的峰值资产消耗量1作为b点的旧峰值2。
所以,当虚拟机运行合约函数2时,可以得到该合约函数2对应的资产消耗信息2(即合约函数2对应的实际资产消耗量2)可以为10。此时,区块链节点通过上述公式(1)可以得知:b点的峰值资产消耗量2=max(旧峰值2,实时累加消耗2)=max(旧峰值2,历史累计资产消耗量2+当前的资产消耗信息2)=max(旧峰值2,历史累计资产消耗量2+实际资产消耗量2)=max(10,10+10)=20,具体的可以参见图5b所示的峰值资产消耗量2的示意图。
可以理解的是,如图5b所示,在该区块链节点的虚拟机运行b点处的合约函数2时,可以将在该b点得到的实时累加消耗2作为合约函数3对应的历史累计资产消耗量3,并将在b点得到的峰值资产消耗量2作为c点的旧峰值3(即20)。由此可见,此时,本申请实施例可以将b点的实时累加消耗2称之为b点的待处理资产消耗量2。
其中,可以理解的是,如图5a所示的c点为存在预付费情况时的点,即该区块链节点需要在c点执行合约函数3时可以提供相应gas数量的预消耗资产量(比如,图5b所示的75gas)。可以理解的是,虚拟机在执行合约函数3时,可以为调用合约2提供一个合约调用接口,即此时运行合约3时所实际消耗gas数量可以为图5b所示的实际资产消耗量3,所以,此时,该合约函数3对应的资产消耗信息3可以包含实际资产消耗量3(5gas)和预消耗资产量(75gas)。此外,由于c点的实际消耗为5gas,历史累计资产消耗量3为20gas,所以,如图5b所示的实时累计到的实时累加消耗3可以为上述b点的历史累计资产消耗量3与实际资产消耗量量3之和。由此可见,此时,本申请实施例可以将c点的实时累加消耗3和与消耗资产量一并称之为c点的待处理资产消耗量3。
即此时需要将峰值计算公式切换到上述公式(2),以进行峰值计算。区块链节点通过上述公式(2)可以得知:c点的峰值资产消耗量3=max(旧峰值3,实时累加消耗3+预消耗资产量)=max(旧峰值3,历史累计资产消耗量3+当前的资产消耗信息3)=max(旧峰值3,历史累计资产消耗量3+实际资产消耗量3+预消耗资产量)=max(20,20+5+75)=100。具体的可以参见图5b所示的峰值资产消耗量3的示意图。
可以理解的是,如图5a和图5b所示,虚拟机在d点时,需要通过初始运行资产量(300)与c点的峰值资产消耗量(100)进行差值计算,以得到剩余资产量,从而可以将剩余资产消耗量(200)全部用于在d点调用合约2,此时,在d点用于调用合约2的剩余资产消耗量可以不纳入峰值计算。所以此时,合约函数4对应的峰值资产消耗量4仍然是c点处的峰值资产消耗量3(即100)。合约函数4对应的待处理资产消耗量4可以为c点处的历史累计资产消耗量(即25)。应当理解,在d点计算待处理资产消耗量4还可以存在其他实现方式,这里将不对其进行限制。此外,在计算合约函数4所对应的实时累加消耗4的具体实现方式是可以根据执行合约函数4的具体资产消耗情况进行动态调整,这里将不再继续进行赘述。
如图5a所示,区块链节点在调用完合约2之后,可以在d点到e点的过程中及时进行退款操作,从而使退款所得到的gas数量仍然可以在合约后续执行中继续使用。如图5b所示,虚拟机在运行合约函数5时可以统计到合约函数5对应的实际资产消耗量5可以为5,合约函数5对应的旧峰值5可以为d点的峰值资产消耗量4(即100),且合约函数5对应的历史累计资产消耗量5可以等于d点处的实时累加消耗4,该d点的实时累加消耗4可以为上述c点的实时累加消耗3(即25)。
所以,当虚拟机在e点运行合约函数5时,可以得到该合约函数5对应的资产消耗信息5(即gas数量)可以为5。此时,区块链节点通过上述公式(1)可以得知:e点的峰值资产消耗量5=max(旧峰值5,实时累加消耗5)=max(旧峰值5,历史累计资产消耗量5+当前的资产消耗信息5)=max(旧峰值5,历史累计资产消耗量5+实际资产消耗量5)=max(100,25+5)=100。具体的可以参见图5b所示的峰值资产消耗量5的示意图。
可以理解的是,该区块链节点在虚拟机上运行b点处的合约函数2时,由于c点是强制预付费点,所以,该区块链节点在执行完该后续的合约2的调用之后,可以在gas数量有剩余的情况下,进行退款(refund)操作,且退款所得到的gas数量仍然可以在合约1的后续执行步骤中继续使用。此外,c点是将合约1调用当时剩余的gas全部(或大部份)作为内部合约(即合约2)调用的gas limit的值传递给下一个合约执行(有可能有refund)。在这种情况下,统计合约1的gas limit的值不能靠简单累加了,因为有的合约函数运行时可能不需要实际消费gas数量,所以,gas limit的值可能发在预付费处,或者实际消耗gas的累加过程中,两者可以取较大者即可,这里将不再进行赘述。
由此可见,如图5a所示的实际累计资产消耗量为30,并不等于本申请实施例所实际计算得到的峰值资产消耗量(100),所以,在有预付款情况下,若直接使用实际累计到的资产消耗量(30)作为调用合约1的合约调用资产量,必然会导致合约执行失败。可以理解的是,本申请实施例通过使用不断刷新的峰值资产消耗量可以准确计算得到调用合约1的目标峰值资产消耗量,并可以确保合约1和合约2执行的成功率。
可选的,如上图5a给出的累计资产消耗量的示意图可知,在合约1的执行过程中的累计资产消耗量会随时间推进,即在各点的累计资产消耗量可以分别为图5a所示的a(10),b(20),e(30),即在上述c点和d点可以不需要实际消耗gas数量,即在上述c的预付费可以为80gas。上述c点的实时累加消耗3等于b点的实时累加消耗(即20gas)。此时,这些累计资产消耗量均为上述相应合约函数执行时所累加得到的实际gas的消耗值。可选的,如上述图5a所示,本申请实施例中的峰值资产消耗量也会随时间推进,比如,在各点的峰值资产消耗量可以分别为图5a分别a(10),b(20),c(100)。由此可见,在本申请实施例的合约1执行过程中所需要的目标峰值资产消耗量可以发生在c点的预付费处。此时,该区块链节点在维护各点处的实际累计消耗和峰值资产消耗的具体实现方式可以一并参见上述图5a和图5b的实现方式,这里将不再继续进行赘述。
其中,可以理解的是,对于合约调合约的描述,这两个合约之间可以是相互独立的,但是,也还可以是父合约与子合约的关系。比如,一个父合约可以调用多个子合约,在计算父合约的峰值资产消耗量的过程中,需要在每个自合约执行完成时,将子合约执行时所得到的子合约的实际累计资产量和峰值资产消耗量合并到父合约中。即可以有父合约新峰值=max(父合约实时累计资产消耗量+子合约实时累计资产消耗量,父合约峰值资产消耗量)。其中,父合约实时累计消耗量的计算方式类似于上述对调用一个智能合约中的多个合约函数进行峰值计算的方式,这里将不再进行赘述。
本申请实施例通过对虚拟机上运行的智能合约中的各合约函数的待处理资产消耗量进行计算,可以在每个合约函数运行时,进一步通过每个合约函数运行时的待处理资产消耗量与每个合约函数对应的历史峰值资产消耗量之间的比较器,得到每个合约函数运行时的较大的峰值资产消耗量,进而可以通过该较大的峰值资产消耗量不断刷新智能合约运行时所需要的目标峰值资产消耗量。换言之,本申请实施例通过对每个合约函数运行时所比较得到的较大的资产消耗量,可以不断更新智能合约在运行相应合约函数时的峰值消耗量进行更新,以通过不断更新的峰值消耗量准确计算出成功运行该智能合约所需的目标峰值资产消耗量(该目标峰值资产消耗量可以理解为运行所述智能合约所需要的合约成本),即本申请实施例可以提高数据计算的准确性,进而可以在合约运行时提供一个合理的合约成本,以确保所述智能合约调用时的成功率。
进一步地,请参见图6,是本本申请实施例提供的另一种合约数据处理方法的流程示意图。如图6所示的方法可以应用于区块链中的区块链节点,所述方法至少包含以下步骤:
步骤S201,在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;
具体的,获取所述数据处理任务的任务属性信息以及参与所述数据处理任务的用户关联属性信息;进一步地,基于所述任务属性信息和所述用户关联属性信息构建与所述数据处理任务相关联的合约函数;一个合约函数对应一段合约代码信息;进一步地,调用所述合约函数执行所述合约代码信息,并在成功执行所述合约代码信息时,对所述合约函数进行封装处理,得到所述数据处理任务对应的智能合约;进一步地,为所述智能合约分配用于进行合约测试任务的初始运行资产量。
其中,所述智能合约可以包含至少一个合约函数,这里将不对其进行限定;
步骤S202,在获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约的每个合约函数;
步骤S203,识别所述每个合约函数对应的业务场景;
其中,可以理解的是,区块链节点在执行完步骤S203之后,可以在识别到业务场景为第一业务场景(即存在实际消耗的场景)时,执行下述步骤S204-步骤S205,以计算得到每个合约函数对应的资产消耗信息;可选地,也可以在识别到业务场景为第二业务场景(即存在预付费的场景)时,执行下述步骤S206-步骤S207,以计算得到每个合约函数对应的资产消耗信息。
步骤S204,若识别到所述每个合约函数对应的业务场景均为第一业务场景,则从所述每个合约函数对应的合约代码信息中获取操作数和操作码;
步骤S205,根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息。
具体的,所述区块链节点可以识别所述每个合约函数中的M个操作码以及所述M个操作码的分类类型,从识别到的M个操作码中获取操作码Si,将所述操作码Si的分类类型作为目标分类类型;i为小于等于M的正整数;进一步地,在所述每个合约函数中将与所述操作码Si相关联的操作数作为目标操作数,确定所述目标操作数的字节长度;进一步地,基于所述目标分类类型在所述每个合约函数中确定与所述操作码Si相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息;进一步地,基于所述第一资产信息、所述第二资产信息,确定所述每个合约函数对应的资产消耗信息。
其中,所述区块链节点在执行所述基于所述目标分类类型在所述每个合约函数中确定与所述操作码Si相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息的过程中,具体可以执行以下步骤:
在所述每个合约函数中确定所述操作码Si的数量,从第一映射关系表中获取与所述目标分类类型相匹配的第一匹配资产信息;进一步地,根据所述操作码Si的数量以及所述第一匹配资产信息,在所述每个合约函数中与所述操作码Si相关联的第一资产信息;进一步地,从第二映射关系表中获取所述目标操作数的字节长度对应的第二匹配资产信息,并将所述第二匹配资产信息确定为与所述目标操作数相关联的第二资产信息。
可以理解的是,本申请实施例中的每个合约函数均可以包含操作码和操作数。其中,操作码可以决定要完成的操作,而操作数是指参加运算的数据及其所在的单元地址。所以,对应不同分类类型的操作码而言,其分类类型不同,则在合约函数执行时,所需要消耗的与操作码的gas的数量就会存在不同。同理,对于操作数而言,操作数的字节长度(即操作数的长度)不同,则所占用的存储空间所对应的gas的数量也会不同。
其中,根据智能合约所编写的内容可以取操作数进行入栈。这些操作数可以是很多不同的内容,如输入数据的值(Input Data Value),代码的拥有者(Code Owner),区块的头部(Block Header),等。另外,执行环境除了提供需要的数据,还记录了一些数据的状态,如调用的深度(Message-Call Depth),日志(Log Series),返还Gas(Refund Balance),等。
可以理解的是,本申请实施例中的虚拟机可以为以太坊虚拟机,该以太坊虚拟机有一定的复杂性,其复杂性在于:需要考虑以太坊特殊的数据结构、区块链的特点、Gas的计价策略,特定的密码学操作,等等。
步骤S206,若识别到所述每个合约函数对应的业务场景中存在第二业务场景,则获取所述第二业务场景对应的预消耗资产量;
其中,所述预消耗资产量用于后续调用与所述智能合约具有关联关系的关联合约;
步骤S207,将与所述第二业务场景具有关联关系的且正在执行的合约函数作为第一合约函数,确定所述第一合约函数对应的资产消耗信息。
应当理解,在步骤S207中所得到的资源消耗信息可以理解为执行第一合约函数时的资产消耗量,该资产消耗量可以两个部分,一个部分为执行第一合约函数时所提供的预消耗资产量(即预先消耗的资产消耗量),还可以包含执行第一合约函数所实际消耗的资产消耗量。其中,可以理解的是,该预消耗资产量后续可以用于调用与当前正在执行的智能合约相关联的其它智能合约,本申请实施例可以将与该智能合约相关联的其它智能合约统称为关联智能合约,比如,本申请实施例可以在智能合约1执行的过程中,通过智能合约1中的相应合约函数为另一智能合约(比如,智能合约2)提供可调用的接口,进而可以通过该接口进一步调用并执行智能合约2。
步骤S208,基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
应当理解,本申请实施例还可以在第二业务场景下,可以将所述第一合约函数作为所述智能合约的参考函数,在所述智能合约中将除所述参考函数之外,且已执行的合约函数作为第二合约函数,所述第二合约函数对应的业务场景可以包含所述第一业务场景;进一步的,区块链节点可以将与所述第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函数时的历史累计资产消耗量;所述历史累计资产消耗量是由已执行的每个第二合约函数分别对应的资产消耗信息所确定的;进一步的,区块链节点可以根据所述历史累计资产消耗量、所述目标资产消耗信息以及所述预消耗资产量,确定运行所述第一合约函数时的待处理资产消耗量。
由此可见,在第二业务场景下,区块链节点可以将与所述第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函数时的历史累计资产消耗量;所述历史累计资产消耗量是由已执行的每个第二合约函数分别对应的资产消耗信息所确定的;进一步地,根据所述历史累计资产消耗量、所述目标资产消耗信息以及所述预消耗资产量,确定运行所述第一合约函数时的待处理资产消耗量,进而可以继续执行步骤S209。
其中,可选地,本申请实施例还可以在每个合约函数对应的业务场景均为第一业务场景时,累加每个合约函数对应的资产消耗信息,具体的,可以参见上述图4所对应实施例中对合约调用场景1的描述。换言之,本申请实施例可以在无退款合约调用的情况下,通过直接累计执行每个合约函数时的资源消耗量,即可以得到在虚拟机上运行相应合约函数时的待处理资产消耗量,从而可以执行步骤S209。
步骤S209,根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。
应当理解,本申请实施例在执行完上述步骤S208之后,可以通过最大值比较器将确定出的待处理资产消耗量与历史峰值资产消耗量之间进行比较,以刷新运行智能合约时的峰值资产消耗量。
以此类推,本申请实施例可以在第二业务场景下,准确计算出每个存在预消耗情况下的合约函数相关联的待处理资产消耗量,并可以基于待处理资产消耗量和历史峰值资产消耗量之间的较大的峰值资产消耗量刷新运行智能合约的峰值资产消耗量,进而可以在运行完智能合约时,将最新刷新所得到的峰值资产消耗量作为用于成功运行所述智能合约对应的目标峰值资产消耗量。
同理,在上述无退款合约调用场景下,还可以通过运行每个相应合约函数时所得到的与每个合约函数对应的实际累计资产消耗量,不断刷新运行智能合约时的峰值资产消耗量,从而可以在执行完智能合约时,也将最新所得到的峰值资产消耗量作为用于成功运行所述智能合约对应的目标峰值资产消耗量。
可以理解的是,本申请实施例在成功运行智能合约时,可以将该成功运行的智能合约以及与该智能合约相关联的目标峰值资产消耗量发布到区块链上,以便于可以进一步执行步骤S210;
步骤S210,获取客户终端针对所述数据处理任务的任务处理请求;
其中,所述客户终端可以为合约调用者所对应的终端设备,该任务处理请求可以为上述合约调用请求,这里将不再继续进行赘述。
步骤S211,根据所述任务处理请求从所述客户终端对应的区块链地址信息中获取所述目标峰值资产消耗量对应的合约调用电子资源;
其中,所述合约调用电子资源是由所述客户终端提供的单位资产值和所述目标峰值资产消耗量之间的乘积所确定的。比如,通过上述目标峰值资产消耗量的精确计算,可以得到一个合理的,且能够成功运行智能合约的合约支付成本。那么对于合约调用者而言,可以避免使用过多的资产消耗量来完成合约的调用,虽然使用过多的资产可以确保合约的成功率,但是调用合约(例如,合约1)的过程中,这些过多的资产消耗量是没有办法充分得到利用的。反之,通过gaslimit的值的精确计算,可以准确预测得到一个恰到好处的gaslimit值,以避免投放太多资源消耗量,从而可以在合约1的执行过程中,充分利用这些资产消耗量所对应的电子资源实现其他业务,比如,可以并行执行合约2的调用。
步骤S212,基于所述合约调用电子资源调用所述智能合约执行所述数据处理任务。
步骤S213,在成功执行所述数据处理任务时,将所述智能合约以及所述智能合约对应的合约执行结果打包成目标区块,并将所述目标区块写入区块链。
通过区块链的可追溯性和不可篡改性,可以将合约调用者所请求执行的数据交互任务对应的合约执行结果进行上链处理,以便于后续合约调用者可以从区块链上获取到相应的区块,以对上链后的该数据交互任务进行查询处理。
本申请实施例通过对虚拟机上运行的智能合约中的各合约函数的待处理资产消耗量进行计算,可以在每个合约函数运行时,进一步通过每个合约函数运行时的待处理资产消耗量与每个合约函数对应的历史峰值资产消耗量之间的比较器,得到每个合约函数运行时的较大的峰值资产消耗量,进而可以通过该较大的峰值资产消耗量不断刷新智能合约运行时所需要的目标峰值资产消耗量。换言之,本申请实施例通过对每个合约函数运行时所比较得到的较大的资产消耗量,可以不断更新智能合约在运行相应合约函数时的峰值消耗量进行更新,以通过不断更新的峰值消耗量准确计算出成功运行该智能合约所需的目标峰值资产消耗量(该目标峰值资产消耗量可以理解为运行所述智能合约所需要的合约成本),即本申请实施例可以提高数据计算的准确性,进而可以在合约运行时提供一个合理的合约成本,以确保所述智能合约调用时的成功率。
进一步的,请参见图7,是本申请实施例提供的一种合约数据处理装置的结构示意图,该合约数据处理装置1可运行于区块链中的区块链节点中,应当理解,该合约数据处理装置1可以是运行于区块链节点中的计算机程序(包括程序代码);该合约数据处理装置1具体可以包含:合约构建模块10,合约运行模块20,资产累加模块30,目标峰值确定模块40;进一步的,该合约数据处理装置1还可以包含请求获取模块50,合约资源获取模块60,合约调用模块70,上链模块80;
合约构建模块10,用于在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;
其中,所述合约构建模块10包括:信息获取单元101,函数构建单元102,合约生成单元103,资产分配单元104;
信息获取单101,用于获取所述数据处理任务的任务属性信息以及参与所述数据处理任务的用户关联属性信息;
函数构建单元102,用于基于所述任务属性信息和所述用户关联属性信息构建与所述数据处理任务相关联的合约函数;一个合约函数对应一段合约代码信息;
合约生成单元103,用于调用所述合约函数执行所述合约代码信息,并在成功执行所述合约代码信息时,对所述合约函数进行封装处理,得到所述数据处理任务对应的智能合约;
资产分配单元104,用于为所述智能合约分配用于进行合约测试任务的初始运行资产量。
其中,信息获取单元101,函数构建单元102,合约生成单元103,资产分配单元104的具体实现方式可以参见上述图6所对应实施例中对确定第二资产信息的描述,这里将不再继续进行赘述。
其中,所述任务属性信息包括资产转移属性信息;所述用户关联属性信息至少包含以下转移关键信息:资产转移量、第一客户终端的第一区块链地址信息和第二客户终端的第二区块链地址信息。
合约运行模块20,用于根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;
其中,所述合约运行模块20包括:解析确定单元201,场景识别单元202,第一获取单元203,第一确定单元204,可选的,所述合约运行模块20还可以进一步包括:第二获取单元205,第二确定单元206;
解析确定单元201,用于在获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约的每个合约函数;
场景识别单元202,用于识别所述每个合约函数对应的业务场景;
第一获取单元203,用于若识别到所述每个合约函数对应的业务场景均为第一业务场景,则从所述每个合约函数对应的合约代码信息中获取操作数和操作码;
第一确定单元204,用于根据所述每个合约函数所对应的操作码和操作数,确定所述每个合约函数对应的资产消耗信息。
其中,所述第一确定单元204包括:分类识别子单元2041,字节确定子单元2042,资产确定子单元2043,消耗确定子单元2044;
分类识别子单2041,用于识别所述每个合约函数中的M个操作码以及所述M个操作码的分类类型,从识别到的M个操作码中获取操作码Si,将所述操作码Si的分类类型作为目标分类类型;i为小于等于M的正整数;
字节确定子单元2042,用于在所述每个合约函数中将与所述操作码Si相关联的操作数作为目标操作数,确定所述目标操作数的字节长度;
资产确定子单元2043,用于基于所述目标分类类型在所述每个合约函数中确定与所述操作码Si相关联的第一资产信息,且基于所述目标操作数的字节长度确定与所述目标操作数相关联的第二资产信息;
其中,所述资产确定子单元2043包括:类型匹配子单元2045,第一确定子单元2046,第二确定子单元2047;
类型匹配子单2045,用于在所述每个合约函数中确定所述操作码Si的数量,从第一映射关系表中获取与所述目标分类类型相匹配的第一匹配资产信息;
第一确定子单元2046,用于根据所述操作码Si的数量以及所述第一匹配资产信息,在所述每个合约函数中与所述操作码Si相关联的第一资产信息;
第二确定子单元2047,用于从第二映射关系表中获取所述目标操作数的字节长度对应的第二匹配资产信息,并将所述第二匹配资产信息确定为与所述目标操作数相关联的第二资产信息。
其中,类型匹配子单元2045,第一确定子单元2046,第二确定子单元2047的具体实现方式可以参见上述图6所对应实施例中对确定第二资产信息的描述,这里将不再继续进行赘述。
消耗确定子单元2044,用于基于所述第一资产信息、所述第二资产信息,确定所述每个合约函数对应的资产消耗信息。
其中,分类识别子单元2041,字节确定子单元2042,资产确定子单元2043,消耗确定子单元2044的具体实现方式可以参见上述图3所对应实施例中对确定资产消耗信息的描述,这里将不再继续进行赘述。
第二获取单元205,用于若识别到所述每个合约函数对应的业务场景中存在第二业务场景,则获取所述第二业务场景对应的预消耗资产量;所述预消耗资产量用于后续调用与所述智能合约具有关联关系的关联合约;
第二确定单元206,用于将与所述第二业务场景具有关联关系的且正在执行的合约函数作为第一合约函数,确定所述第一合约函数对应的资产消耗信息。
其中,解析确定单元201,场景识别单元202,第一获取单元203,第一确定单元204,第二获取单元205,第二确定单元206的具体实现方式可以参见上述图3所对应实施例中对步骤S102的描述,这里将不再继续进行赘述。
资产累加模块30,用于基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
其中,所述第一合约函数对应的资产消耗信息包含目标资产消耗信息和所述预消耗资产量;
所述资产累加模块30,包括:参考单元301,历史资源确定单元302,累计资产确定单元303;
参考单301,用于将所述第一合约函数作为所述智能合约的参考函数,在所述智能合约中将除所述参考函数之外,且已执行的合约函数作为第二合约函数;所述第二合约函数对应的业务场景包含所述第一业务场景;
历史资源确定单元302,用于将与所述第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函数时的历史累计资产消耗量;所述历史累计资产消耗量是由已执行的每个第二合约函数分别对应的资产消耗信息所确定的;
累计资产确定单元303,用于根据所述历史累计资产消耗量、所述目标资产消耗信息以及所述预消耗资产量,确定运行所述第一合约函数时的待处理资产消耗量。
其中,所述参考单元301,历史资源确定单元302,累计资产确定单元303的具体实现方式可以参见上述图3所对应实施例中对步骤S103的描述,这里将不再继续进行赘述。
目标峰值确定模块40,用于根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。
可选的,请求获取模块50,用于获取客户终端针对所述数据处理任务的任务处理请求;
合约资源获取模块60,用于根据所述任务处理请求从所述客户终端对应的区块链地址信息中获取所述目标峰值资产消耗量对应的合约调用电子资源;所述合约调用电子资源是由所述客户终端提供的单位资产值和所述目标峰值资产消耗量之间的乘积所确定的;
合约调用模块70,用于基于所述合约调用电子资源调用所述智能合约执行所述数据处理任务。
可选的,上链模块80,用于在成功执行所述数据处理任务时,将所述智能合约以及所述智能合约对应的合约执行结果打包成目标区块,并将所述目标区块写入区块链。
其中,合约构建模块10,合约运行模块20,资产累加模块30,目标峰值确定模块40的具体实现方式可以参见上述图3所对应实施例中对步骤S101-步骤S104的描述,这里将不再继续进行赘述。进一步的,请求获取模块50,合约资源获取模块60,合约调用模块70,上链模块80的具体实现方式可以参见上述图6所对应实施例中对步骤S201-步骤S213的描述,这里将不再继续进行赘述。
本申请实施例通过对虚拟机上运行的智能合约中的各合约函数的待处理资产消耗量进行计算,可以在每个合约函数运行时,进一步通过每个合约函数运行时的待处理资产消耗量与每个合约函数对应的历史峰值资产消耗量之间的比较器,得到每个合约函数运行时的较大的峰值资产消耗量,进而可以通过该较大的峰值资产消耗量不断刷新智能合约运行时所需要的目标峰值资产消耗量。换言之,本申请实施例通过对每个合约函数运行时所比较得到的较大的资产消耗量,可以不断更新智能合约在运行相应合约函数时的峰值消耗量进行更新,以通过不断更新的峰值消耗量准确计算出成功运行该智能合约所需的目标峰值资产消耗量(该目标峰值资产消耗量可以理解为运行所述智能合约所需要的合约成本),即本申请实施例可以提高数据计算的准确性,进而可以在合约运行时提供一个合理的合约成本,以确保所述智能合约调用时的成功率。
进一步地,请参见图8,是本申请实施例提供的一种计算机设备的示意图。如图8所示,所述计算机设备1000可以为上述图2对应实施例中的区块链节点,所述计算机设备1000可以包括:至少一个处理器1001,例如CPU,至少一个网络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),网络接口1004可选地可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选地还可以是至少一个位于远离前述处理器1001的存储装置。如图8所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图8所示的计算机设备1000中,网络接口1004主要用于与客户终端进行网络通信;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
在虚拟机中构建用于执行数据处理任务的智能合约,并为所述智能合约分配初始运行资产量;所述智能合约包含至少一个合约函数;
根据所述初始运行资产量在所述虚拟机上运行所述智能合约,确定每个合约函数对应的资产消耗信息;
基于所述每个合约函数对应的资产消耗信息,确定待处理资产消耗量;
根据所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量,确定用于成功运行所述智能合约的目标峰值资产消耗量。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3和图6所对应实施例中对所述合约数据处理方法的描述,也可执行前文图7所对应实施例中对所述合约数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且所述计算机可读存储介质中存储有前文提及的合约数据处理装置1所执行的计算机程序,且所述计算机程序包括程序指令,当所述处理器执行所述程序指令时,能够执行前文图3或者图6所对应实施例中对所述合约数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (15)
1.一种合约数据处理方法,其特征在于,包括:
接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的交易属性信息,基于所述交易属性信息在虚拟机中构建用于执行所述数据处理任务的智能合约,并为所述智能合约分配单位资产值为零的初始峰值资产消耗量;所述智能合约包含针对所述交易属性信息所编写的至少一个合约函数;
根据所述初始峰值资产消耗量在所述虚拟机上运行所述智能合约,通过所述智能合约执行所述至少一个合约函数中的每个合约函数时,确定执行所述每个合约函数时的资产消耗信息;
对执行所述每个合约函数时的资产消耗信息进行实时累计,累计得到运行所述智能合约中的对应合约函数时的待处理资产消耗量;
通过最大值比较器从所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量中获取具有最大值的峰值资产消耗量,用获取到的具有最大值的峰值资产消耗量实时刷新运行所述智能合约时的峰值资产消耗量,当运行完所述智能合约时,将最新刷新得到的峰值资产消耗量作为用于成功运行所述智能合约的目标峰值资产消耗量;
在成功运行完所述智能合约时,将所述智能合约以及与所述目标峰值资产消耗量发布至区块链。
2.根据权利要求1所述的方法,其特征在于,所述接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的交易属性信息,基于所述交易属性信息在虚拟机中构建用于执行所述数据处理任务的智能合约,并为所述智能合约分配单位资产值为零的初始峰值资产消耗量,包括:
接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的任务属性信息以及参与所述数据处理任务的用户关联属性信息,将获取的所述任务属性信息以及所述用户管理属性信息确定为所述数据交互业务的交易属性信息;
基于所述交易属性信息在虚拟机中构建与所述数据处理任务相关联的至少一个合约函数;一个合约函数对应一段合约代码信息;
调用所述至少一个合约函数执行每个合约函数对应的合约代码信息,并在成功执行所述每个合约函数对应的合约代码信息时,对所述至少一个合约函数进行封装处理,得到所述数据处理任务对应的智能合约;
为所述智能合约分配用于进行合约测试任务的初始运行资产量,将所述初始运行资产量作为在测试所述智能合约时所提供的单位资产值为零的初始峰值资产消耗量。
3.根据权利要求1所述的方法,其特征在于,所述根据所述初始峰值资产消耗量在所述虚拟机上运行所述智能合约,通过所述智能合约执行所述至少一个合约函数中的每个合约函数时,确定执行所述每个合约函数时的资产消耗信息,包括:
在根据所述初始峰值资产消耗量获取到针对所述智能合约的测试指令时,对所述智能合约进行解析,得到所述智能合约所包含的所述至少一个合约函数中的每个合约函数;
识别所述每个合约函数对应的业务场景;所述每个合约函数对应的业务场景包括:存在实际消耗的第一业务场景;
若识别到所述每个合约函数对应的业务场景均为所述第一业务场景,则通过所述智能合约执行所述每个合约函数时,从所述每个合约函数对应的合约代码信息中获取所述每个合约函数所对应的操作数和操作码,确定所述每个合约函数所对应的操作数的字节长度,且确定所述每个合约函数所对应的操作码的分类类型;
根据所述每个合约函数所对应的操作码的分类类型和所述每个合约函数所对应的操作数的字节长度,基于所述每个合约函数所对应的操作码的分类类型、基于与所述每个合约函数所对应的操作数的字节长度以及资产映射关系表,确定执行所述每个合约函数时的资产消耗信息。
4.根据权利要求3所述的方法,其特征在于,所述资产映射关系表包括与操作码相关联的第一映射关系表和与操作数相关联的第二映射关系表;所述至少一个合约函数的所述每个合约函数中包括合约函数1,且所述合约函数1为所述第一业务场景下的合约函数;
所述根据所述每个合约函数所对应的操作码的分类类型和所述每个合约函数所对应的操作数的字节长度,基于所述每个合约函数所对应的操作码的分类类型、基于与所述每个合约函数所对应的操作数的字节长度以及资产映射关系表,确定执行所述每个合约函数时的资产消耗信息,包括:
获取所述合约函数1所对应的操作码的数量,从所述第一映射关系表中查找与所述合约函数1所对应的操作码的分类类型相匹配的第一匹配资产信息;
根据查找到的第一匹配资产信息和所述合约函数1所对应的操作码的数量,确定与所述合约函数1所对应的操作码的分类类型相匹配的第一资产信息;
从所述第二映射关系表中查找与所述合约函数1所对应的操作数的字节长度相匹配的第二匹配资产信息,将查找到的第二匹配资产信息作为与所述合约函数1所对应的操作数的字节长度相匹配的第二资产信息;
基于确定的第一资产信息和第二资产信息,确定在执行所述合约函数1时所实际消耗的资产消耗量,将确定的实际消耗的资产消耗量作为执行所述合约函数1时的资产消耗信息。
5.根据权利要求3所述的方法,其特征在于,所述每个合约函数对应的业务场景包括存在预消耗的第二业务场景;
所述方法还包括:
若识别到所述每个合约函数对应的业务场景中存在所述第二业务场景,则在所述第二业务场景下获取执行第一合约函数时所提供的预消耗资产量;所述第一合约函数为所述每个合约函数中与所述第二业务场景具有关联关系的且正在执行的合约函数;
将执行所述第一合约函数时所实际消耗的资产消耗量作为所述第一合约函数的目标资产消耗信息,根据执行所述第一合约函数时所提供的预消耗资产量和所述目标资产消耗信息,确定执行所述第一合约函数时的资产消耗信息。
6.根据权利要求5所述的方法,其特征在于,所述第一合约函数对应的资产消耗信息包含目标资产消耗信息和所述预消耗资产量;
所述对执行所述每个合约函数时的资产消耗信息进行实时累计,累计得到运行所述智能合约中的对应合约函数时的待处理资产消耗量,包括:
将所述第一合约函数作为所述智能合约的参考函数,在所述智能合约中将除所述参考函数之外,且已执行的合约函数作为第二合约函数;已执行的每个第二合约函数对应的业务场景均为所述第一业务场景,且在所述第一业务场景下执行所述每个第二合约函数时所实际消耗的资产消耗量为执行所述每个第二合约函数时的资产消耗信息;
根据第一峰值累计计算公式对已执行的所述每个第二合约函数时的资产消耗信息进行实时累计,得到与所述每个第二合约函数相关联的实际累计资产消耗量,将与所述每个第二合约函数相关联的实际累计资产消耗量作为运行所述第一合约函数时的历史累计资产消耗量;
根据第二峰值累计计算公式对所述历史累计资产消耗量、所述目标资产消耗信息以及所述预消耗资产量进行实时累计,得到运行所述第一合约函数时的待处理资产消耗量。
7.根据权利要求5所述的方法,其特征在于,所述预消耗资产量所对应的所述第一合约函数,用于提供调用与所述智能合约具有关联关系的关联合约的接口;
所述方法还包括:
在执行所述智能合约的过程中,通过所述接口调用并执行所述关联合约;所述智能合约与所述关联合约之间存在父合约与子合约的关系,且所述父合约用于调用所述子合约。
8.根据权利要求1所述的方法,其特征在于,所述在成功运行完所述智能合约时,将所述智能合约以及与所述目标峰值资产消耗量发布至区块链,包括:
在成功运行完所述智能合约时,将所述智能合约以及与所述目标峰值资产消耗量作为待上链的交易内容;
在将所述交易内容打包成区块时,将所述区块广播至区块链中的共识节点,以使所述共识节点对所述区块进行共识验证;
在所述共识节点达成共识时,将所述区块发布至所述区块链。
9.根据权利要求8所述的方法,其特征在于,在将所述区块广播至区块链中的共识节点时,所述方法还包括:
从区块链账户中获取用于广播所述区块的电子资源,将所述电子资源发送至用于提供共识服务的共识节点,以使所述共识节点基于所述电子资源提供针对所述区块的共识服务。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取客户终端针对所述数据处理任务的合约处理请求,根据所述合约处理请求中所携带的所述数据交互业务的任务属性信息,从所述区块链上获取发布的所述智能合约以及用于执行所述智能合约的所述目标峰值资产消耗量;
从所述客户终端对应的区块链地址信息中获取所述目标峰值资产消耗量对应的合约调用电子资源,将所述合约调用电子资源作为用于成功运行智能合约的合约支付成本;所述合约调用电子资源是由所述客户终端提供的非零的单位资产值和所述目标峰值资产消耗量之间的乘积所确定的;
基于所述支付成本调用所述智能合约执行所述数据处理任务。
11.根据权利要求10所述的方法,其特征在于,还包括:
在成功执行所述数据处理任务,且接收到所述客户端对应的合约调用者发送的针对所述合约执行结果的上链请求时,将所述智能合约以及所述智能合约对应的合约执行结果打包成目标区块,并将所述目标区块写入所述区块链;
从所述区块链上获取所述目标区块,在所述目标区块中对所述合约执行结果进行查询处理。
12.根据权利要求10所述的方法,其特征在于,所述调用所述智能合约执行的所述数据处理任务至少包括:点餐业务、开票业务或者收税服务。
13.一种合约数据处理装置,其特征在于,包括:
合约构建模块,用于接收合约管理用户通过合约管理终端发送的合约构建请求,从所述合约构建请求中获取由所述合约管理用户提交的数据交互业务的交易属性信息,基于所述交易属性信息在虚拟机中构建用于执行所述数据处理任务的智能合约,并为所述智能合约分配单位资产值为零的初始峰值资产消耗量;所述智能合约包含针对所述交易属性信息所编写的至少一个合约函数;
合约运行模块,用于根据所述初始峰值资产消耗量在所述虚拟机上运行所述智能合约,通过所述智能合约执行所述至少一个合约函数中的每个合约函数时,确定执行所述每个合约函数时的资产消耗信息;
资产累加模块,用于对执行所述每个合约函数时的资产消耗信息进行实时累计,累计得到运行所述智能合约中的对应合约函数时的待处理资产消耗量;
目标峰值确定模块,用于通过最大值比较器从所述待处理资产消耗量与所述待处理资产消耗量对应的历史峰值资产消耗量中获取具有最大值的峰值资产消耗量,用获取到的具有最大值的峰值资产消耗量实时刷新运行所述智能合约时的峰值资产消耗量,当运行完所述智能合约时,将最新刷新得到的峰值资产消耗量作为用于成功运行所述智能合约的目标峰值资产消耗量;
所述目标峰值确定模块,还用于在成功运行完所述智能合约时,将所述智能合约以及与所述目标峰值资产消耗量发布至区块链。
14.一种计算机设备,其特征在于,包括:处理器、存储器、网络接口;
所述处理器与存储器、网络接口相连,其中,网络接口用于提供数据通信功能,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以执行如权利要求1-12任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-12任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110289645.1A CN113052699B (zh) | 2019-09-21 | 2019-09-21 | 合约数据处理方法、相关设备及介质 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110289645.1A CN113052699B (zh) | 2019-09-21 | 2019-09-21 | 合约数据处理方法、相关设备及介质 |
CN201910901891.0A CN110599343B (zh) | 2019-09-21 | 2019-09-21 | 合约数据处理方法、相关设备及介质 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910901891.0A Division CN110599343B (zh) | 2019-09-21 | 2019-09-21 | 合约数据处理方法、相关设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113052699A true CN113052699A (zh) | 2021-06-29 |
CN113052699B CN113052699B (zh) | 2022-09-13 |
Family
ID=68862570
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910901891.0A Active CN110599343B (zh) | 2019-09-21 | 2019-09-21 | 合约数据处理方法、相关设备及介质 |
CN202110289645.1A Active CN113052699B (zh) | 2019-09-21 | 2019-09-21 | 合约数据处理方法、相关设备及介质 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910901891.0A Active CN110599343B (zh) | 2019-09-21 | 2019-09-21 | 合约数据处理方法、相关设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN110599343B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113746859A (zh) * | 2021-09-10 | 2021-12-03 | 大连华信计算机技术股份有限公司 | 一种高网络性能与安全性的vaPBFT区块链共识方法 |
CN116739593A (zh) * | 2023-08-15 | 2023-09-12 | 腾讯科技(深圳)有限公司 | 交易资源处理方法、装置、设备及介质 |
WO2024146285A1 (zh) * | 2023-01-04 | 2024-07-11 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、设备以及可读存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112433939B (zh) * | 2020-11-19 | 2024-08-13 | 腾讯科技(深圳)有限公司 | 智能合约的测试方法、装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103907128A (zh) * | 2011-06-14 | 2014-07-02 | 英派尔科技开发有限公司 | 用于云计算环境的峰值性能已知计费 |
US20170352027A1 (en) * | 2016-06-07 | 2017-12-07 | Cornell University | Authenticated data feed for blockchains |
CN108876333A (zh) * | 2018-06-28 | 2018-11-23 | 北京金山安全软件有限公司 | 一种交易费预估方法及装置 |
US20190130368A1 (en) * | 2017-10-30 | 2019-05-02 | NEC Laboratories Europe GmbH | Method and system for securing smart contracts in blockchains |
CN110221956A (zh) * | 2018-03-02 | 2019-09-10 | 富士通株式会社 | 用于生成区块链智能合约的测试用例的方法和设备 |
CN110263536A (zh) * | 2019-06-21 | 2019-09-20 | 深圳前海微众银行股份有限公司 | 一种区块链中智能合约的监控方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180232828A1 (en) * | 2014-01-09 | 2018-08-16 | Raymond Anthony Joao | Apparatus and method for providing and/or for processing information for, regarding, and/or for facilitating, the commercialization, development, marketing, sale, transfer, licensing, and/or monetization, of intellectual property |
CN106951307B (zh) * | 2017-03-06 | 2020-09-22 | 钱德君 | 一种智能合约虚拟机实现方法 |
US20190026706A1 (en) * | 2017-07-24 | 2019-01-24 | James E. Satloff | Method of creating and maintaining a stable crypto-currency |
CN107967539B (zh) * | 2017-11-29 | 2020-11-13 | 暨南大学 | 基于机器学习和区块链技术的预测以太坊上交易的燃料限制的方法 |
CN109670800A (zh) * | 2018-11-15 | 2019-04-23 | 亦非云互联网技术(上海)有限公司 | 基于以太坊的交易处理方法及系统、存储介质及终端 |
-
2019
- 2019-09-21 CN CN201910901891.0A patent/CN110599343B/zh active Active
- 2019-09-21 CN CN202110289645.1A patent/CN113052699B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103907128A (zh) * | 2011-06-14 | 2014-07-02 | 英派尔科技开发有限公司 | 用于云计算环境的峰值性能已知计费 |
US20170352027A1 (en) * | 2016-06-07 | 2017-12-07 | Cornell University | Authenticated data feed for blockchains |
US20190130368A1 (en) * | 2017-10-30 | 2019-05-02 | NEC Laboratories Europe GmbH | Method and system for securing smart contracts in blockchains |
CN110221956A (zh) * | 2018-03-02 | 2019-09-10 | 富士通株式会社 | 用于生成区块链智能合约的测试用例的方法和设备 |
CN108876333A (zh) * | 2018-06-28 | 2018-11-23 | 北京金山安全软件有限公司 | 一种交易费预估方法及装置 |
CN110263536A (zh) * | 2019-06-21 | 2019-09-20 | 深圳前海微众银行股份有限公司 | 一种区块链中智能合约的监控方法及装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113746859A (zh) * | 2021-09-10 | 2021-12-03 | 大连华信计算机技术股份有限公司 | 一种高网络性能与安全性的vaPBFT区块链共识方法 |
CN113746859B (zh) * | 2021-09-10 | 2023-04-18 | 信华信技术股份有限公司 | 一种高网络性能与安全性的vaPBFT区块链共识方法 |
WO2024146285A1 (zh) * | 2023-01-04 | 2024-07-11 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、设备以及可读存储介质 |
CN116739593A (zh) * | 2023-08-15 | 2023-09-12 | 腾讯科技(深圳)有限公司 | 交易资源处理方法、装置、设备及介质 |
CN116739593B (zh) * | 2023-08-15 | 2024-01-19 | 腾讯科技(深圳)有限公司 | 交易资源处理方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110599343A (zh) | 2019-12-20 |
CN110599343B (zh) | 2021-04-13 |
CN113052699B (zh) | 2022-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110599343B (zh) | 合约数据处理方法、相关设备及介质 | |
CN110163590B (zh) | 基于区块链的缴费代扣方法及装置、电子设备、存储介质 | |
WO2019019490A1 (zh) | 一种用于支付区块链网络中交易费用的方法和系统 | |
TW201800994A (zh) | 資源處理方法及裝置 | |
CN111383019A (zh) | 一种基于联盟链网络的交易执行方法及系统 | |
KR102150747B1 (ko) | 트랜잭션 정보 프로세싱 방법 및 장치 | |
CN105550209B (zh) | 一种资源处理方法及装置 | |
CN112015577B (zh) | 一种智能合约的调用方法和装置 | |
WO2020238250A1 (zh) | 资金链信息追溯方法、系统、服务器和可读存储介质 | |
CN112015576A (zh) | 一种智能合约的调用方法和装置 | |
CN106096926B (zh) | 事件处理方法、装置、电子装置和存储介质 | |
CN111966757A (zh) | 智能合约账户的存储空间管理方法和装置 | |
CN111415146A (zh) | 资源数据的处理方法、装置及设备 | |
CN115456772A (zh) | 一种智能合约的创建方法和装置 | |
CN111553695A (zh) | 跨区域支付方法及装置、电子设备 | |
CN117130761A (zh) | 一种资源管理方法以及相关装置 | |
CN107301550B (zh) | 额度信息的获取方法、额度管控规则的建立方法及装置 | |
CN117014238A (zh) | 基于公有云技术的云资源计费方法、装置及云管理平台 | |
CN114896073A (zh) | 一种数据分摊处理方法、装置及系统 | |
CN113781214A (zh) | 基于PoW的提升交易TPS的打包方法、装置及设备 | |
CN108830703B (zh) | 额度控制系统及额度服务系统 | |
CN114186267A (zh) | 一种虚拟资产数据处理方法、装置及计算机可读存储介质 | |
CN113344610A (zh) | 基于区块链的虚拟对象分配方法、设备和可读存储介质 | |
CN110458701A (zh) | 一种数据处理方法、装置、区块链节点设备及介质 | |
CN110378785A (zh) | 由服务器执行的交易处理方法、装置、计算设备以及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40045480 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |