CN110544113A - 基于智能合约的交易中燃油费的输入确定方法及装置 - Google Patents
基于智能合约的交易中燃油费的输入确定方法及装置 Download PDFInfo
- Publication number
- CN110544113A CN110544113A CN201910749662.1A CN201910749662A CN110544113A CN 110544113 A CN110544113 A CN 110544113A CN 201910749662 A CN201910749662 A CN 201910749662A CN 110544113 A CN110544113 A CN 110544113A
- Authority
- CN
- China
- Prior art keywords
- node
- function
- input
- operator
- fuel
- 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
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
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/40—Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
- G06Q20/405—Establishing or using transaction specific rules
-
- 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
- G06Q30/00—Commerce
- G06Q30/02—Marketing; Price estimation or determination; Fundraising
- G06Q30/0283—Price estimation or determination
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Development Economics (AREA)
- Engineering & Computer Science (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- Economics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Entrepreneurship & Innovation (AREA)
- Game Theory and Decision Science (AREA)
- Marketing (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供一种基于智能合约的交易中燃油费的输入确定方法及装置,方法包括:根据智能合约中函数的执行过程,生成控制流图;将函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入函数,根据函数在执行过程中各节点消耗的实际燃油费,从种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;对目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;将最后一次更新的各节点的权重之和作为基于智能合约的交易中燃油费的输入。本发明可以快速找到产生较高燃油费的输入,促使智能合约的函数消耗较高的燃油费。
Description
技术领域
本发明属于区块链技术领域,尤其涉及一种基于智能合约的交易中燃油费的输入确定方法及装置。
背景技术
以太坊是一个基于区块链技术的平台。在以太坊中,开发者可以根据自身需要开发去中心化的应用。为了防止资源的浪费和恶意攻击,以太坊官方规定,每一笔基于智能合约的交易都需要为消耗的计算资源和存储资源付出燃油费。
为了节约传播和数据交换时间,每一个区块都会被设置一个燃油费最大值。同时,每个用户在完成交易之前也会设置一个愿意为本次交易付出的燃油费最大值。如果在交易的过程中,实际使用的燃油费用比设置的最大值大,那么就会出现燃油费不足的问题,从而导致交易失败。在某些情况下,一次交易的输入和当前区块链系统的环境状态都可以影响燃油费的消耗。一些恶意的攻击者可能会设计一些特别的输入导致一些很高的燃油费,从而实施让区块链系统拒绝服务的攻击。
实际上,在一次交易真正执行之前预估它要消耗多少的燃油费是很困难的。因为燃油费的消耗不仅来源于交易过程中具体执行的操作符,还来源于对数据的存储过程。除此之外,有些包含许多分支的复杂函数也为燃油费的预估带来不确定性。
目前存在一些预估燃油费消耗的工具,这些工具采用的是静态方法。比如用于编译由Solidity语言写成的智能合约的编译工具solc提供可以估计燃油费消耗的工具。但是这些工具往往存在一些问题,比如solc提供的工具总是会出现估计燃油费为无穷大的情况。还有一些工具利用符号执行的技术来估计燃油费消耗,但是有时候符号执行工具给出的路径十分复杂,无法求出具体的解。
发明内容
为克服上述现有的燃油费估计方法估计结果错误或无法估计出结果的问题或者至少部分地解决上述问题,本发明实施例提供一种基于智能合约的交易中燃油费的输入确定方法及装置。
根据本发明实施例的第一方面,提供一种基于智能合约的交易中燃油费的输入确定方法,包括:
根据智能合约中函数的执行过程,生成控制流图;其中,所述控制流图中的节点为所述执行过程的部分操作符构成的操作符序列,每个节点的权重为每个节点消耗的最大燃油费;
将所述函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入所述函数,根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;
对所述目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;
将最后一次更新的各节点的权重之和作为基于所述智能合约的交易中燃油费的输入。
根据本发明实施例第二方面提供一种基于智能合约的交易中燃油费的输入确定装置,包括:
生成模块,用于根据智能合约中函数的执行过程,生成控制流图;其中,所述控制流图中的节点为所述执行过程的部分操作符构成的操作符序列,每个节点的权重为每个节点消耗的最大燃油费;
选择模块,用于将所述函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入所述函数,根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;
变异模块,用于对所述目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;
确定模块,用于将最后一次更新的各节点的权重之和作为基于所述智能合约的交易中燃油费的输入。
根据本发明实施例的第三个方面,还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器调用所述程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的基于智能合约的交易中燃油费的输入确定方法。
根据本发明实施例的第四个方面,还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的基于智能合约的交易中燃油费的输入确定方法。
本发明实施例提供一种基于智能合约的交易中燃油费的输入确定方法及装置,该方法通过根据智能合约函数的执行过程生成控制流图,根据智能合约函数的执行结果的反馈信息,对智能合约函数执行所消耗的燃油费进行估计,导向种子的选择和变异,从而快速找到产生较高燃油费的输入,促使智能合约的函数消耗较高的燃油费,对于使用者来说,可以有效估计当前智能合约的交易消耗的燃油费上限,方便用户设置燃油费的最大值;对于智能合约的开放者来说,通过确定的燃油费输入依然出现燃油费不足的问题,说明存在恶意攻击者,需要开发者检查合约中是否存在不合理的代码。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于智能合约的交易中燃油费的输入确定方法整体流程示意图;
图2为本发明实施例提供的基于智能合约的交易中燃油费的输入确定方法中控制流图示意图;
图3为本发明实施例提供的基于智能合约的交易中燃油费的输入确定装置整体结构的示意图;
图4为本发明实施例提供的电子设备整体结构示意图。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
在本发明的一个实施例中提供一种基于智能合约的交易中燃油费的输入确定方法,图1为本发明实施例提供的基于智能合约的交易中燃油费的输入确定方法整体流程示意图,该方法包括:S101,根据智能合约中函数的执行过程,生成控制流图;其中,所述控制流图中的节点为所述执行过程中的操作符构成的操作符序列,每个节点的权重为每个节点消耗的最大燃油费;
其中,控制流图(Control Flow Graph,CFG)是程序的抽象数据结构,代表程序执行过程中遍历到的所有路径,用图的形式表示程序执行过程中所有基本块执行的流向。对智能合约中函数进行编译生成二进制文件,根据二进制文件中的操作符生成控制流图。其中,控制图中的节点为函数执行过程中的操作符构成的操作符序列。每个节点中包括一个或多个操作符,这里的节点是指一串连续的没有分支的操作符组成的块。生成的控制流图为有权控制流图,控制流图的每个节点的权重为这个节点消耗的最大燃油费。燃油费为基于智能合约的交易中为消耗的计算资源和存储资源付出的费用。
S102,将所述函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入所述函数,根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;
本实施例利用反馈导向的种子选择和变异方法,对每一轮输入的种子进行选择和变异。反馈导向的种子选择和变异是针对每次输入函数的种子而言的。根据每次智能合约的函数执行结果的反馈信息,决定当前的种子是否应该保留,如果进行保留应该如何进行种子的变异。函数执行结果的反馈信息与函数在执行过程中消耗的实际燃油费相关。若消耗的实际燃油费增加,则将输入函数的种子保留,将保留的种子作为目标种子。
在进行种子选择之前,首先生成一些初始的种子,具体根据智能合约的抽象二进制接口文件中对每个函数所需参数的类型定义进行随机确定。函数的第一次输入为初始种子,第一次之后的输入为变异后的种子节点。
本实施例采用基因链结构存储种子的信息,同时还定义基因匹配图将基因链上的每一部分与其所代表的函数输入相对应。基因链是由若干个字节组成的链,种子的变异策略是针对基因链进行的。
本实施例对各节点的权重进行维护。函数执行之前,将各节点的最大燃油费作为各节点的权重。在每次向函数输入一个种子进行函数执行时,将执行过程中各节点的实际燃油费和权重进行比较,若任一节点消耗的实际燃油费大于该节点的权重,则将该节点消耗的实际燃油费作为该节点的权重;否则,该节点的权重不变,从而实现对该节点的权重进行更新。
为了能更好地执行智能合约函数,为智能合约函数的执行过程准备一些环境变量,以及设置一些驱动器。为了模拟以太坊的执行环境,首先初始化一些模拟的环境变量,同时还要部署当前的智能合约,这个过程通过执行当前智能合约的构造函数完成。
S103,对所述目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;
对选择的目标种子进行变异。本实施例不限于变异的方法。将变异后的目标种子输入智能合约中的函数,根据函数的执行结果的反馈信息对变异后的种子进行选择和变异。迭代执行步骤S102和S103,直到达到预设终止条件。预设终止条件可以为本次迭代确定的当确定的燃油费输入大于预设阈值,说明可能有黑客入侵。还可以在达到用户指定的迭代次数或计算时间时进行终止。
S104,将最后一次更新的各节点的权重之和作为基于所述智能合约的交易中燃油费的输入。
总体来看,本实施例接收智能合约函数编译得到的二进制文件和抽象二进制接口文件,输出的是每一个函数的输入,以及这个输入所带来的燃油费的消耗。从而快速找到大量的输入使得智能合约中每一个函数的燃油费达到较高的值。最终自动确定基于智能合约的交易中燃油费的输入,指导用户设置交易的燃油费最大值,避免用户设置的燃油费最大值导致燃油费不足的问题。
在智能合约上的测试结果发现,在很多的智能合约上,本实施例可以产生超过用户设置的燃油费最大值的燃油费输入,说明按照目前用户设置的燃油费最大值,会出现燃油费不足的问题。
本实施例通过根据智能合约函数的执行过程生成控制流图,根据智能合约函数的执行结果的反馈信息,对智能合约函数执行所消耗的燃油费进行估计,导向种子的选择和变异,从而快速找到产生较高燃油费的输入,促使智能合约的函数消耗较高的燃油费,对于使用者来说,可以有效估计当前智能合约的交易消耗的燃油费上限,方便用户设置燃油费的最大值;对于智能合约的开放者来说,通过确定的燃油费输入依然出现燃油费不足的问题,说明存在恶意攻击者,需要开发者检查合约中是否存在不合理的代码。
在上述实施例的基础上,本实施例中根据智能合约中函数的执行过程,生成控制流图的步骤具体包括:对智能合约中函数的执行过程进行编译,获取所述执行过程中的所有操作符;对于生成控制流图的任一所述操作符,若该操作符不为JUMP操作符或JUMPI操作符,则将该操作符添加到所述控制流图的当前节点中;若该操作符为JUMP操作符或JUMPI操作符,则将该操作符添加到所述控制流图的当前节点中,将该操作符指向的操作符添加到所述当前节点的下一个节点中;将该操作符指向的操作符作为下一个生成控制流图的操作符,将所述下一个节点作为下一个当前节点,直到该操作符为STOP操作符。
具体的,对智能合约中函数的执行过程进行变异,获取执行过程中的所有操作符。控制流图的每个节点都是一串连续的无分支的操作符序列。在生成控制流图时,如果当前操作符为JUMP操作符或JUMPI操作符,控制流图就会出现一个新的分支,即当前节点指向的下一个节点,当前操作符后面的一个操作符存放在当前节点指向的节点中。否则,当前操作符后面的一个操作符存放在当前节点中。
如图2所示,图2中有6个节点,按操作符出现的先后顺序,先将编号0和1的操作符放入第一个节点。当出现编号3的JUMPI操作符时,将该操作符放入第一个节点,然后将该操作符指向的编号4的操作符放入第二个节点,将该操作符指向的编号d的操作符放入第三个节点。将编号4的操作符之后的操作符顺序放入第二个节点中,直到出现编号a的JUMP操作符。将编号d的操作符之后的操作符顺序放入第三个节点中,直到出现编号14的JUMP操作符。编号a和14的JUMP操作符指都指向编号17的操作符。将编号17的操作符之后的操作符顺序放入第四个节点中,直到出现编号19的JUMP操作符。将编号19的JUMP操作符指向的编号b的操作符放入第五个节点,指向的编号15的操作符放入第六个节点。直到第五个节点和第六个节点中放入STOP节点后终止。
在上述实施例的基础上,本实施例中根据智能合约中函数的执行过程,生成控制流图的步骤还包括:对于所述控制流图中的任一节点,将该节点中存在预设燃油费的操作符作为目标操作符,将该节点中所有目标操作符的预设燃油费之和作为该节点的初始燃油费,将该节点的初始燃油费作为该节点的初始权重。
如图2所示,每个节点中的虚线框内为对应操作符的预设燃油费,如3个单位,即3units。预设燃油费为以太坊平台预设设定。有些操作符的预设燃油费还跟操作符的操作数相关,如STORE操作符,这些操作符消耗的燃油费不确定,不存在预设燃油费。将每个节点中确定燃油费的操作符作为目标操作符,将这些操作符的预设燃油费之和作为相应节点的初始燃油费。将节点的权重定义为初始燃油费,这个权重会随着智能合约的函数的执行而更新。若某次执行使得某个节点消耗的实际燃油费比该节点的当前权重高,则将该节点的权重更新为该节点的实际燃油费。
在上述实施例的基础上,本实施例中根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子的步骤具体包括:将各节点消耗的实际燃油费相加,获取执行所述函数消耗的实际总燃油费,并获取所述控制流图中每条边上的节点的执行次数;若任一所述节点消耗的实际燃油费大于所述任一节点的权重,则将当前输入所述函数的种子作为目标种子;若所述函数消耗的实际总燃油费大于所述函数消耗的最大燃油费,则将当前输入所述函数的种子作为目标种子;其中,所述函数消耗的最大燃油费为所有所述节点的权重之和;若任一所述边上的节点的执行次数大于所述任一边上的节点的最大执行次数,则将当前输入所述函数的种子作为目标种子。
具体的,在根据每一轮输入的种子执行智能合约的函数之后,将执行结果的反馈信息进行收集,并根据反馈信息对种子进行筛选和重新变异。反馈信息包括智能合约函数本次执行的过程中整个函数消耗的实际燃油费、有权控制流图中每个节点消耗的实际燃油费和每条边的执行次数。每条边的执行次数是指每条边上的两个节点中所有操作符的整体执行次数。
根据反馈信息,如果获知某个节点的燃油费升高,或者某条边的执行次数变多,或者整个函数的燃油费消耗值变多,对当前输入的种子进行保留。某条边上的执行次数变多,如某条边上两个节点的整体由于循环导致执行次数变多,从而会导致整个函数消耗的燃油费增加。
在上述实施例的基础上,本实施例中对所述目标种子进行变异的步骤具体包括:若所述目标种子的变量类型不为数组类型,则基于传统变异方法对所述目标种子进行变异;若所述目标种子的变量类型为数组,则随机选择预设范围内的数值作为所述数组的长度;根据所述数组中元素的类型,对所述数组进行随机填充。
具体地,目标种子的变异过程分成两部分,即传统变异过程和燃油费消耗相关的变异。对于函数的一些普通输入,采用传统变异方法对其进行变异。普通输入是指除了数组变量之外的其他类型的变量。传统变异方法是指在针对传统软件的模糊测试工具中所使用的变异方法,包括位翻转、字节翻转、算术值的递增和递减等。燃油费消耗相关的变异过程是让燃油费消耗增多的变异策略。针对数组类型的输入,变异时会先随机选择一个预设范围内,如1000以内的数作为数组的长度,然后按照数组中元素的类型进行随机填充。
在本发明的另一个实施例中提供一种基于智能合约的交易中燃油费的输入确定装置,该装置用于实现前述各实施例中的方法。因此,在前述基于智能合约的交易中燃油费的输入确定方法的各实施例中的描述和定义,可以用于本发明实施例中各个执行模块的理解。图3为本发明实施例提供的基于智能合约的交易中燃油费的输入确定装置整体结构示意图,该装置包括生成模块301、选择模块302、变异模块303和确定模块304,其中:
生成模块301用于根据智能合约中函数的执行过程,生成控制流图;其中,所述控制流图中的节点为所述执行过程的部分操作符构成的操作符序列,每个节点的权重为每个节点消耗的最大燃油费;
其中,控制流图是程序的抽象数据结构,代表程序执行过程中遍历到的所有路径,用图的形式表示程序执行过程中所有基本块执行的流向。生成模块301对智能合约中的函数进行编译生成二进制文件,根据二进制文件中的操作符生成控制流图。其中,控制图中的节点为函数执行过程中的操作符构成的操作符序列。每个节点中包括一个或多个操作符,这里的节点是指一串连续的没有分支的操作符组成的块。生成的控制流图为有权控制流图,控制流图的每个节点的权重为这个节点消耗的最大燃油费。燃油费为基于智能合约的交易中为消耗的计算资源和存储资源付出的费用。
选择模块302用于将所述函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入所述函数,根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;
本实施例利用反馈导向的种子选择和变异方法,对每一轮输入的种子进行选择和变异。反馈导向的种子选择和变异是针对每次输入函数的种子而言的。选择模块302根据每次智能合约的函数执行结果的反馈信息,决定当前的种子是否应该保留,如果进行保留应该如何进行种子的变异。函数执行结果的反馈信息与函数在执行过程中消耗的实际燃油费相关。若消耗的实际燃油费增加,则将输入函数的种子保留,将保留的种子作为目标种子。本实施例对各节点的权重进行维护。函数执行之前,将各节点的最大燃油费作为各节点的权重。
变异模块303用于对所述目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;
变异模块303对选择的目标种子进行变异。本实施例不限于变异的方法。将变异后的目标种子输入智能合约中的函数,根据函数的执行结果的反馈信息对变异后的种子进行选择和变异。迭代执行选择和变异步骤,直到达到预设终止条件。预设终止条件可以为本次迭代确定的当确定的燃油费输入大于预设阈值,说明可能有黑客入侵。还可以在达到用户指定的迭代次数或计算时间时进行终止。
确定模块304用于将最后一次更新的各节点的权重之和作为基于所述智能合约的交易中燃油费的输入。
本实施例通过根据智能合约函数的执行过程生成控制流图,根据智能合约函数的执行结果的反馈信息,对智能合约函数执行所消耗的燃油费进行估计,导向种子的选择和变异,从而快速找到产生较高燃油费的输入,促使智能合约的函数消耗较高的燃油费
在上述实施例的基础上,本实施例中生成模块具体用于:对智能合约中函数的执行过程进行编译,获取所述执行过程中的所有操作符;对于生成控制流图的任一所述操作符,若该操作符不为JUMP操作符或JUMPI操作符,则将该操作符添加到所述控制流图的当前节点中;若该操作符为JUMP操作符或JUMPI操作符,则将该操作符添加到所述控制流图的当前节点中,将该操作符指向的操作符添加到所述当前节点的下一个节点中;将该操作符指向的操作符作为下一个生成控制流图的操作符,将所述下一个节点作为下一个当前节点,直到该操作符为STOP操作符。
在上述实施例的基础上,本实施例中生成模块还用于:对于所述控制流图中的任一节点,将该节点中存在预设燃油费的操作符作为目标操作符,将该节点中所有目标操作符的预设燃油费之和作为该节点的初始燃油费,将该节点的初始燃油费作为该节点的初始权重。
在上述实施例的基础上,本实施例中选择模块具体用于:将各节点消耗的实际燃油费相加,获取执行所述函数消耗的实际总燃油费,并获取所述控制流图中每条边上的节点的执行次数;若任一所述节点消耗的实际燃油费大于所述任一节点的权重,则将当前输入所述函数的种子作为目标种子;若所述函数消耗的实际总燃油费大于所述函数消耗的最大燃油费,则将当前输入所述函数的种子作为目标种子;其中,所述函数消耗的最大燃油费为所有所述节点的权重之和;若任一所述边上的节点的执行次数大于所述任一边上的节点的最大执行次数,则将当前输入所述函数的种子作为目标种子。
在上述实施例的基础上,本实施例中选择模块具体用于:若任一所述节点消耗的实际燃油费大于所述任一节点的权重,则将所述任一节点消耗的实际燃油费作为所述任一节点的权重。
在上述实施例的基础上,本实施例中变异模块具体用于:若所述目标种子的变量类型不为数组类型,则基于传统变异方法对所述目标种子进行变异;若所述目标种子的变量类型为数组,则随机选择预设范围内的数值作为所述数组的长度;根据所述数组中元素的类型,对所述数组进行随机填充。
在上述实施例的基础上,本实施例中选择模块具体用于:根据所述智能合约的抽象二进制接口文件中对输入所述函数的参数类型的定义,确定输入所述函数的初始种子。
本实施例提供一种电子设备,图4为本发明实施例提供的电子设备整体结构示意图,该设备包括:至少一个处理器401、至少一个存储器402和总线403;其中,
处理器401和存储器402通过总线403完成相互间的通信;
存储器402存储有可被处理器401执行的程序指令,处理器调用程序指令能够执行上述各方法实施例所提供的方法,例如包括:根据智能合约中函数的执行过程,生成控制流图;将函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入函数,根据函数在执行过程中各节点消耗的实际燃油费,从种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;对目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;将最后一次更新的各节点的权重之和作为基于智能合约的交易中燃油费的输入。
本实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的方法,例如包括:根据智能合约中函数的执行过程,生成控制流图;将函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入函数,根据函数在执行过程中各节点消耗的实际燃油费,从种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;对目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;将最后一次更新的各节点的权重之和作为基于智能合约的交易中燃油费的输入。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种基于智能合约的交易中燃油费的输入确定方法,其特征在于,包括:
根据智能合约中函数的执行过程,生成控制流图;其中,所述控制流图中的节点为所述执行过程的部分操作符构成的操作符序列,每个节点的权重为每个节点消耗的最大燃油费;
将所述函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入所述函数,根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;
对所述目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;
将最后一次更新的各节点的权重之和作为基于所述智能合约的交易中燃油费的输入。
2.根据权利要求1所述的基于智能合约的交易中燃油费的输入确定方法,其特征在于,根据智能合约中函数的执行过程,生成控制流图的步骤具体包括:
对智能合约中函数的执行过程进行编译,获取所述执行过程中的所有操作符;
对于生成控制流图的任一所述操作符,若该操作符不为JUMP操作符或JUMPI操作符,则将该操作符添加到所述控制流图的当前节点中;
若该操作符为JUMP操作符或JUMPI操作符,则将该操作符添加到所述控制流图的当前节点中,将该操作符指向的操作符添加到所述当前节点的下一个节点中;
将该操作符指向的操作符作为下一个生成控制流图的操作符,将所述下一个节点作为下一个当前节点,直到该操作符为STOP操作符。
3.根据权利要求2所述的基于智能合约的交易中燃油费的输入确定方法,其特征在于,根据智能合约中函数的执行过程,生成控制流图的步骤还包括:
对于所述控制流图中的任一节点,将该节点中存在预设燃油费的操作符作为目标操作符,将该节点中所有目标操作符的预设燃油费之和作为该节点的初始燃油费,将该节点的初始燃油费作为该节点的初始权重。
4.根据权利要求1所述的基于智能合约的交易中燃油费的输入确定方法,其特征在于,根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子的步骤具体包括:
将各节点消耗的实际燃油费相加,获取执行所述函数消耗的实际总燃油费,并获取所述控制流图中每条边上的节点的执行次数;
若任一所述节点消耗的实际燃油费大于所述任一节点的权重,则将当前输入所述函数的种子作为目标种子;
若所述函数消耗的实际总燃油费大于所述函数消耗的最大燃油费,则将当前输入所述函数的种子作为目标种子;其中,所述函数消耗的最大燃油费为所有所述节点的权重之和;
若任一所述边上的节点的执行次数大于所述任一边上的节点的最大执行次数,则将当前输入所述函数的种子作为目标种子。
5.根据权利要求1所述的基于智能合约的交易中燃油费的输入确定方法,其特征在于,根据每个节点消耗的实际燃油费对各节点的权重进行更新的步骤具体包括:
若任一所述节点消耗的实际燃油费大于所述任一节点的权重,则将所述任一节点消耗的实际燃油费作为所述任一节点的权重。
6.根据权利要求1所述的基于智能合约的交易中燃油费的输入确定方法,其特征在于,对所述目标种子进行变异的步骤具体包括:
若所述目标种子的变量类型不为数组类型,则基于传统变异方法对所述目标种子进行变异;
若所述目标种子的变量类型为数组,则随机选择预设范围内的数值作为所述数组的长度;
根据所述数组中元素的类型,对所述数组进行随机填充。
7.根据权利要求1所述的基于智能合约的交易中燃油费的输入确定方法,其特征在于,将所述函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入所述函数的步骤具体包括:
根据所述智能合约的抽象二进制接口文件中对输入所述函数的参数类型的定义,确定输入所述函数的初始种子。
8.一种基于智能合约的交易中燃油费的输入确定装置,其特征在于,包括:
生成模块,用于根据智能合约中函数的执行过程,生成控制流图;其中,所述控制流图中的节点为所述执行过程的部分操作符构成的操作符序列,每个节点的权重为每个节点消耗的最大燃油费;
选择模块,用于将所述函数每一种预先确定的参数值作为进行燃油费输入确定的种子输入所述函数,根据所述函数在执行过程中各节点消耗的实际燃油费,从所述种子中选择目标种子,并根据每个节点消耗的实际燃油费对各节点的权重进行更新;
变异模块,用于对所述目标种子进行变异,将变异后的目标种子作为下一次进行燃油费输入确定的种子,直到达到预设终止条件;
确定模块,用于将最后一次更新的各节点的权重之和作为基于所述智能合约的交易中燃油费的输入。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述基于智能合约的交易中燃油费的输入确定方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述基于智能合约的交易中燃油费的输入确定方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910749662.1A CN110544113B (zh) | 2019-08-14 | 2019-08-14 | 基于智能合约的交易中燃油费的输入确定方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910749662.1A CN110544113B (zh) | 2019-08-14 | 2019-08-14 | 基于智能合约的交易中燃油费的输入确定方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110544113A true CN110544113A (zh) | 2019-12-06 |
CN110544113B CN110544113B (zh) | 2022-04-12 |
Family
ID=68710815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910749662.1A Active CN110544113B (zh) | 2019-08-14 | 2019-08-14 | 基于智能合约的交易中燃油费的输入确定方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110544113B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035350A (zh) * | 2020-08-27 | 2020-12-04 | 腾讯科技(深圳)有限公司 | 针对区块链系统的测试方法、装置及计算机设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140279065A1 (en) * | 2013-03-15 | 2014-09-18 | Adchemy, Inc. | Generating Ad Copy |
CN107967539A (zh) * | 2017-11-29 | 2018-04-27 | 暨南大学 | 基于机器学习和区块链技术的预测以太坊上交易的燃料限制的方法 |
US20180300694A1 (en) * | 2018-05-14 | 2018-10-18 | Beijing Good Fortune Innovative Intelligence Technology Co.Ltd | Method for intelligently selecting accounting node of blockchain |
CN108876620A (zh) * | 2018-06-28 | 2018-11-23 | 北京金山安全软件有限公司 | 一种交易费预估方法及装置 |
CN109493042A (zh) * | 2018-10-24 | 2019-03-19 | 南京邮电大学 | 一种拥有访问控制功能的智能合约可信存证方法和系统 |
-
2019
- 2019-08-14 CN CN201910749662.1A patent/CN110544113B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140279065A1 (en) * | 2013-03-15 | 2014-09-18 | Adchemy, Inc. | Generating Ad Copy |
CN107967539A (zh) * | 2017-11-29 | 2018-04-27 | 暨南大学 | 基于机器学习和区块链技术的预测以太坊上交易的燃料限制的方法 |
US20180300694A1 (en) * | 2018-05-14 | 2018-10-18 | Beijing Good Fortune Innovative Intelligence Technology Co.Ltd | Method for intelligently selecting accounting node of blockchain |
CN108876620A (zh) * | 2018-06-28 | 2018-11-23 | 北京金山安全软件有限公司 | 一种交易费预估方法及装置 |
CN109493042A (zh) * | 2018-10-24 | 2019-03-19 | 南京邮电大学 | 一种拥有访问控制功能的智能合约可信存证方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035350A (zh) * | 2020-08-27 | 2020-12-04 | 腾讯科技(深圳)有限公司 | 针对区块链系统的测试方法、装置及计算机设备 |
CN112035350B (zh) * | 2020-08-27 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 针对区块链系统的测试方法、装置及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110544113B (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230067128A1 (en) | Prioritizing security controls using a cyber digital twin simulator | |
EP3490223B1 (en) | System and method for simulating and foiling attacks on a vehicle on-board network | |
Gribaudo et al. | Hybrid Petri nets with general one-shot transitions | |
Cavalcante et al. | Statistical model checking of dynamic software architectures | |
CN102110013B (zh) | 用于有效生成处理器体系结构模型的方法和设备 | |
GB2530516A (en) | Intelligent Software Test Augmenting | |
Horváth et al. | Dynamic constraint satisfaction problems over models | |
Choudhary et al. | An efficient parameter estimation of software reliability growth models using gravitational search algorithm | |
Simaitis | Automatic verification of competitive stochastic systems | |
CN110544113B (zh) | 基于智能合约的交易中燃油费的输入确定方法及装置 | |
CN110321458B (zh) | 一种基于控制流图的数据流分析方法及装置 | |
Smetanin et al. | Modeling of distributed ledgers: Challenges and future perspectives | |
CN113468044B (zh) | 一种基于改进的灰色预测演化算法的测试用例生成方法 | |
US10819752B2 (en) | Systems and methods for quantitative assessment of a computer defense technique | |
US20170010950A1 (en) | Lifting of bounded liveness counterexamples to concrete liveness counterexamples | |
CN111818007B (zh) | 一种基于量子遗传算法的漏洞修复收益优先级评估方法及电子装置 | |
CN102567169B (zh) | 微处理器的测试方法及测试装置 | |
Ummer et al. | Factors influencing design iteration with a focus on project duration | |
CN114840856A (zh) | 一种状态感知的物联网可信执行环境模糊测试方法和系统 | |
Oh et al. | A model independent S/W framework for search-based software testing | |
CN107135221B (zh) | 一种渐进式求解k最大概率攻击路径的方法 | |
Marques-Silva | Computing with SAT oracles: past, present and future | |
Draeger et al. | Formalized risk assessment for safety and security | |
CN110796234B (zh) | 一种用于预测计算机状态的方法和装置 | |
Bala et al. | Effective Search-Based Approach for Testing Non-Functional Properties in Software System: an Empirical Review |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |