一种智能合约测试方法、电子设备和存储介质技术

技术编号:37768554 阅读:8 留言:0更新日期:2023-06-06 13:31
本申请公开了一种智能合约测试方法、电子设备和存储介质,该方法包括:从测试样例集中获取当前测试样例;其中,当前测试样例为交易序列,交易序列包含多个交易,每个交易表示一次区块链信息的传递;基于当前测试样例进行变异,得到目标测试样例;将目标测试样例输入至智能合约的测试环境,得到测试结果;基于测试结果是否覆盖新的程序路径,确定是否将目标测试样例加入最新测试样例集。通过上述方式,本申请能够检测智能合约的漏洞,并提高检测效率。率。率。

【技术实现步骤摘要】
一种智能合约测试方法、电子设备和存储介质


[0001]本申请涉及区块链
,特别是涉及一种智能合约测试方法、电子设备和存储介质。

技术介绍

[0002]自2008年区块链的概念被提出到现在经过十几年的发展,区块链被广泛应用于各个领域以提高生产效率。实质上,区块链是一种用于记录交易的去中心化分布式账本,基于非对称的加密算法和共识机制,区块链将用户间的转账记录都以区块的形式记录在链上,并且每个区块都包含前一个区块的哈希值以保证数据的一致性。因此区块链上的数据具有不可销毁、不可篡改、匿名、可溯源的特性。
[0003]智能合约是运行在区块链上的程序,能够在满足一定条件时自动执行提前预定好的操作,包括转账、做决策、与其他合约交互等。基于区块链的特性,智能合约的运行结果是由大量计算机运行并验证以确保可信的。近年来智能合约已被应用到各种业务场景中,包括交易所、非同质化代币(NFT)等。随着智能合约的广泛应用,运行在链上的智能合约功能变得更加复杂,智能合约的安全问题也随之出现。近年来已发生成百上千起智能合约安全事件,造成了数十亿美元的损失,其中较为著名的就是2016年的The DAO事件,黑客利用合约的重入漏洞将合约的资金抽干。因此智能合约安全成为了当前学术界与工业界都重点关注的问题,尤其是智能合约的漏洞问题,智能合约漏洞检测的相关研究成为智能合约领域的一大热点。

技术实现思路

[0004]本申请主要解决的技术问题是提供一种智能合约测试方法、电子设备和存储介质,能够检测智能合约的漏洞,并提高检测效率。r/>[0005]为解决上述技术问题,本申请第一方面提供了一种智能合约测试方法,该方法包括:从测试样例集中获取当前测试样例;其中,当前测试样例为交易序列,交易序列包含多个交易,每个交易表示一次区块链信息的传递;基于当前测试样例进行变异,得到目标测试样例;将目标测试样例输入至智能合约的测试环境,得到测试结果;基于测试结果是否覆盖新的程序路径,确定是否将目标测试样例加入最新测试样例集。
[0006]为解决上述技术问题,本申请第二方面提供了一种电子设备,该电子设备包括相互耦接的存储器和处理器,存储器存储有程序指令;处理器用于执行存储器中存储的程序指令,以实现上述第一方面提供的方法。
[0007]为解决上述技术问题,本申请第三方面提供了一种计算机可读存储介质,该计算机可读存储介质用于存储程序指令,程序指令能够被执行以实现上述第一方面提供的方法。
[0008]本申请的有益效果是:区别于现有技术的情况,本申请从测试样例集中获取当前测试样例;其中,当前测试样例为交易序列,交易序列包含多个交易,每个交易表示一次区
块链信息的传递;基于当前测试样例进行变异,得到目标测试样例;将目标测试样例输入至智能合约的测试环境,得到测试结果;通过测试结果即可确定智能合约中存在的漏洞;进一步地,基于测试结果是否覆盖新的程序路径,确定是否将目标测试样例加入最新测试样例集。通过对测试样例集中的当前测试样例进行变异,得到目标测试样例,而无需重新生成目标测试样例,可节约目标测试样例生成时间,进而提高检测效率。
附图说明
[0009]图1是本申请提供的智能合约测试方法第一实施方式的流程示意图;
[0010]图2是本申请提供的智能合约测试方法第二实施方式的流程示意图;
[0011]图3是本申请提供的智能合约测试装置一实施方式的框架示意图;
[0012]图4是本申请提供的电子设备一实施方式的框架结构示意图;
[0013]图5是本申请提供的计算机可读存储介质一实施方式的框架示意图。
具体实施方式
[0014]下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性的劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0015]需要说明的是,本申请实施例中有涉及“第一”、“第二”等的描述,该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。
[0016]在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本专利技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0017]为便于理解本申请,现对智能合约测试方法进行简要介绍。智能合约的漏洞检测方法,包括静态分析、形式化验证和动态分析等程序分析方法。其中,模糊测试作为一种动态分析方法,已被频繁应用于测试软件并且检测漏洞。实质上,模糊测试的核心机制是自动或半自动生成随机数据以输入到被测的程序中,并监测程序在测试过程中发生的异常,如崩溃、断言失败,从而检测程序错误,比如内存泄漏、指针越界等。由于模糊测试的易用性与可扩展性,模糊测试往往轻松地应用到各种程序并且能够高效率地覆盖程序路径,达到较高的代码覆盖率。因此,本申请利用模糊测试的方法对智能合约进行测试。
[0018]请参阅图1,图1是本申请提供的智能合约测试方法第一实施方式的流程示意图,该方法包括:
[0019]S11:从测试样例集中获取当前测试样例。
[0020]在一实施方式中,当前测试样例为交易序列,交易序列包含多个交易,每个交易表示一次区块链信息的传递。每个交易可以包括发送者、发送的代币、调用的函数以及函数的参数等信息,在其他实施方式中,每个交易还可以包含交易执行的区块高度和时间戳等信
息。每个交易会被编码成一串进制码后执行变异操作,或直接被输入智能合约的测试环境中执行,可以理解地,每个交易可以被编码成二进制码,也可以被编码成十六进制码。
[0021]测试样例集可以由用户预先基于智能合约构建。具体地,对智能合约进行编译,得到智能合约的应用二进制接口;从应用二进制接口中获取智能合约包含的交易信息;其中,交易信息可以包括:函数的输入数据结构、函数的返回值、是否可接收以太坊代币、交易执行的区块高度和时间戳中的至少一者;利用交易信息生成至少一个交易,组合至少一个交易,得到至少一个测试样例。具体地,设函数为f,x为根据函数的输入数据结构随机生成的参数,设sender0是一个预定义好的一个以太坊地址,amount是交易的以太币数量,设交易执行的区块高度为block,时间戳为timestamp,基于以上设定,可接受以太坊代币的函数对应的交易为tx=(sender0,1,f(x),block,timestamp),不可接受以太坊代币的函数对应的交易为tx=(sender0,0,f(x),block,timestamp)。根据以上步骤即可对智能合约的每一个函数构建出对应的交易,将每个交易的每本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种智能合约测试方法,其特征在于,所述方法包括:从测试样例集中获取当前测试样例;其中,所述当前测试样例为交易序列,所述交易序列包含多个交易,每个所述交易表示一次区块链信息的传递;基于所述当前测试样例进行变异,得到目标测试样例;将所述目标测试样例输入至智能合约的测试环境,得到测试结果;基于所述测试结果是否覆盖新的程序路径,确定是否将所述目标测试样例加入最新所述测试样例集。2.根据权利要求1所述的方法,其特征在于,所述基于所述测试结果是否覆盖新的程序路径,确定是否将所述目标测试样例加入最新所述测试样例集,包括:响应于所述测试结果覆盖新的程序路径,将所述目标测试样例加入最新所述测试样例集;响应于所述测试结果未覆盖新的程序路径,不将所述目标测试样例加入最新所述测试样例集。3.根据权利要求1所述的方法,其特征在于,在所述基于所述测试结果是否覆盖新的程序路径,确定是否将所述目标测试样例加入最新所述测试样例集之后,所述方法还包括:重复执行所述从测试样例集中获取当前测试样例及其后续步骤,直至满足测试结束条件为止。4.根据权利要求3所述的方法,其特征在于,所述测试结束条件包括以下任一者:所述测试结果中的覆盖率达到第一预设值、测试时间达到第二预设值;其中,所述第一预设值表征所述目标测试样例覆盖待测程序路径的门限值;所述第二预设值表征测试时间的最大值。5.根据权利要求1所述的方法,其特征在于,所述基于所述当前测试样例进行变异,得到目标测试样例,包括:对所述当前测试样例包含的多个交易的交易顺序进行第一变异,得到初始测试样例;对所述初始测试样例中的至少一个所述交易进行第二变异,得到目标测试样例。6.根据权利要求5所述的方法,其特征在于,所述第一变异的执行步骤包括以下至少一者:按照交易顺序,将所述交易序列中的...

【专利技术属性】
技术研发人员:鲁静郑子彬苏健钟宋斌段焱明王超
申请(专利权)人:远光软件股份有限公司
类型:发明
国别省市:

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

1