用于测试智能合约的方法和装置制造方法及图纸

技术编号:20655646 阅读:19 留言:0更新日期:2019-03-23 07:12
公开了一种用于测试智能合约的方法和装置,其中,用于测试智能合约的方法包括:利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险;基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数;以及基于所述至少一个函数,测试智能合约。根据本公开的实施例,能够更有针对性地测试智能合约。

Method and Device for Testing Intelligent Contracts

A method and device for testing intelligent contracts are disclosed, in which the methods for testing intelligent contracts include: detecting logical risks in intelligent contracts by using operation codes for detecting and locating logical risks; locating at least one logical risk detected in intelligent contracts based on location information in operation codes for detecting and locating logical risks. A function; and testing an intelligent contract based on at least one of the functions. According to embodiments of the present disclosure, smart contracts can be tested more pertinently.

【技术实现步骤摘要】
用于测试智能合约的方法和装置
本公开涉及信息处理领域,具体涉及一种能够更有针对性地测试智能合约的用于测试智能合约的方法和装置。
技术介绍
基于以太坊区块链的应用发展变得越来越普及,然而,存在对于以太坊区块链上的智能合约发生的一些严重的攻击。对于区块链应用开发者而言,智能合约的安全性问题变得越来越重要。传统的方法可以检测逻辑风险,但是不能定位逻辑风险。而且,关于智能合约结构分析的传统方法仅支持单个文件,而不能支持多文件智能合约分析。同时,关于如何更有效地生成目标测试例存在较少的信息。
技术实现思路
在下文中给出了关于本公开的简要概述,以便提供关于本公开的某些方面的基本理解。但是,应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图用来确定本公开的关键性部分或重要部分,也不是意图用来限定本公开的范围。其目的仅仅是以简化的形式给出关于本公开的某些概念,以此作为稍后给出的更详细描述的前序。鉴于以上问题,本公开的目的是提供能够解决现有技术中的一个或多个缺点的用于测试智能合约的方法和装置。根据本公开的一方面,提供了一种用于测试智能合约的方法,包括:利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险;基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数;以及基于所述至少一个函数,测试智能合约。根据本公开的另一方面,提供了一种用于测试智能合约的装置,包括:检测逻辑风险单元,被配置成利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险;定位逻辑风险单元,被配置成基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数;以及测试单元,被配置成基于所述至少一个函数,测试智能合约。根据本公开的其它方面,还提供了用于实现上述根据本公开的方法的计算机程序代码和计算机程序产品以及其上记录有该用于实现上述根据本公开的方法的计算机程序代码的计算机可读存储介质。在下面的说明书部分中给出本公开实施例的其它方面,其中,详细说明用于充分地公开本公开实施例的优选实施例,而不对其施加限定。附图说明本公开可以通过参考下文中结合附图所给出的详细描述而得到更好的理解,其中在所有附图中使用了相同或相似的附图标记来表示相同或者相似的部件。所述附图连同下面的详细说明一起包含在本说明书中并形成说明书的一部分,用来进一步举例说明本公开的优选实施例和解释本公开的原理和优点。其中:图1是示出根据本公开的实施例的用于测试智能合约的方法的流程示例的流程图;图2是示出根据本公开实施例的将逻辑风险定位到特定码行的示例的图;图3是示出根据本公开实施例的操作码映射的示例的图;图4是示出根据本公开实施例的调用关系分析的示例的图;图5是示出根据本公开实施例的拓扑图的示例的图;图6是示出根据本公开实施例的函数调用修饰符的示例的图;图7是示出根据本公开实施例的支持继承分析的示例的图;图8是示出示出根据本公开实施例的待测试函数的示例的图;图9是示出根据本公开实施例的自动生成测试例的示例的图;图10是示出根据本公开的实施例的用于测试智能合约的装置的功能配置示例的框图;图11是示出根据本公开的实施例的用于智能合约的逻辑风险检测和定位的方法的流程示例的流程图;图12是示出根据本公开的实施例的用于对智能合约进行拓扑分析的方法的流程示例的流程图;以及图13是示出作为本公开的实施例中可采用的信息处理装置的个人计算机的示例结构的框图。具体实施方式在下文中将结合附图对本公开的示范性实施例进行描述。为了清楚和简明起见,在说明书中并未描述实际实施方式的所有特征。然而,应该了解,在开发任何这种实际实施例的过程中必须做出很多特定于实施方式的决定,以便实现开发人员的具体目标,例如,符合与系统及业务相关的那些限制条件,并且这些限制条件可能会随着实施方式的不同而有所改变。此外,还应该了解,虽然开发工作有可能是非常复杂和费时的,但对得益于本公开内容的本领域技术人员来说,这种开发工作仅仅是例行的任务。在此,还需要说明的一点是,为了避免因不必要的细节而模糊了本公开,在附图中仅仅示出了与根据本公开的方案密切相关的设备结构和/或处理步骤,而省略了与本公开关系不大的其它细节。根据本公开的一方面,提出了一种用于测试智能合约的方法,该用于测试智能合约的方法将用于检测逻辑风险的操作码与具有定位信息的操作码进行映射;然后检测智能合约中的逻辑风险,利用定位信息,可以将所检测到的逻辑风险定位到智能合约中的特定函数;最后,基于该特定函数,测试智能合约。下面结合附图详细说明根据本公开实施例的用于测试智能合约的方法。首先,将参照图1描述根据本公开实施例的用于测试智能合约的方法100的流程示例。图1是示出根据本公开的实施例的用于测试智能合约的方法100的流程示例的流程图。如图1所示,根据本公开的实施例的用于测试智能合约的方法100包括检测逻辑风险步骤S102、定位逻辑风险步骤S104以及测试步骤S106。在检测逻辑风险步骤S102中,可以利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险。作为示例,可以利用编译器直接生成用于检测并定位逻辑风险的操作码。在该步骤中,基于该用于检测并定位逻辑风险的操作码,可以检测智能合约是否包含逻辑风险。作为示例,可以检测到智能合约中的四种逻辑风险:调用堆栈风险、重进入风险、时间戳关联风险以及交易顺序关联风险。在定位逻辑风险步骤S104中,可以基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数。用于检测并定位逻辑风险的操作码中包括定位信息,基于该定位信息,可以定位出智能合约中的包含所检测到的逻辑风险的函数。即,可以结合源代码的语法分析,将逻辑风险定位到具体的函数。图2是示出根据本公开实施例的将逻辑风险定位到特定码行的示例的图。如图2中的虚线框所示,将逻辑风险定位到第5行。在测试步骤S106中,可以基于在定位逻辑风险步骤S104中所检测和定位出的至少一个函数,测试智能合约。为了生成更具目标性的测试例以提高测试效率,可以基于逻辑风险检测和定位,测试智能合约。如果在定位逻辑风险步骤S104中检测并定位出函数,则可以认为这些函数包含代码错误,因此需要以较高的优先级测试这些函数。作为示例,可以基于在定位逻辑风险步骤S104中定位出的所述至少一个函数,提取信息以生成目标测试例,通过执行这些目标测试例,可以在动态执行阶段中查找代码错误,从而可以更容易地查找到代码错误。根据如上所述的用于测试智能合约的方法100,利用用于检测并定位逻辑风险的操作码定位出智能合约中的包含所检测到的逻辑风险的至少一个函数,并且基于所述至少一个函数而测试智能合约,因此能够更有针对性地测试智能合约。在用于测试智能合约的方法100中,优选地,可以通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将定位信息添加到用于检测逻辑风险的操作码中,从而生成用于检测并定位逻辑风险的操作码。通常,可以使用现有开放式源程序来检测智能合约中的逻辑风险,可以检测到智能合约中的四种逻辑风险:调用堆栈风险、重进入风险、时间戳关联风险以及交易顺序关联风险。但是,现有开放式源程序使用从字本文档来自技高网...

【技术保护点】
1.一种用于测试智能合约的方法,包括:利用用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险;基于所述用于检测并定位逻辑风险的操作码中的定位信息,定位出所述智能合约中的包含所检测到的逻辑风险的至少一个函数;以及基于所述至少一个函数,测试所述智能合约。

【技术特征摘要】
1.一种用于测试智能合约的方法,包括:利用用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险;基于所述用于检测并定位逻辑风险的操作码中的定位信息,定位出所述智能合约中的包含所检测到的逻辑风险的至少一个函数;以及基于所述至少一个函数,测试所述智能合约。2.根据权利要求1所述的方法,其中,通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将所述定位信息添加到所述用于检测逻辑风险的操作码中,从而生成所述用于检测并定位逻辑风险的操作码。3.根据权利要求1所述的方法,还包括:通过对所述智能合约进行拓扑分析,生成用于表示所有元数据之间的调用关系的拓扑图;在所述拓扑图中,查找最小入口函数集合,其中,所述最小入口函数集合中的每个函数均未被其他元数据调用,并且所述最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数;以及基于所述最小入口函数集合中的每个函数,测试所述智能合约。4.根据权利要求3所述的方法,还包括:在所述拓扑图中,查找被频繁调用的函数和变量;以及基于所查找到的被频繁调用的函数和变量,测试所述智能合约。5.根据权利要求4所述的方法,还包括:基于在先前测试中未被直接调用的函数,测试所述智能合约。6.根据权利要...

【专利技术属性】
技术研发人员:周恩策皮冰锋华松孙俊
申请(专利权)人:富士通株式会社
类型:发明
国别省市:日本,JP

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

1