CN109508981A - 用于测试智能合约的方法和装置 - Google Patents

用于测试智能合约的方法和装置 Download PDF

Info

Publication number
CN109508981A
CN109508981A CN201710834235.4A CN201710834235A CN109508981A CN 109508981 A CN109508981 A CN 109508981A CN 201710834235 A CN201710834235 A CN 201710834235A CN 109508981 A CN109508981 A CN 109508981A
Authority
CN
China
Prior art keywords
intelligent contract
function
operation code
risk
logic risk
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.)
Pending
Application number
CN201710834235.4A
Other languages
English (en)
Inventor
周恩策
皮冰锋
华松
孙俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to CN201710834235.4A priority Critical patent/CN109508981A/zh
Priority to JP2018168835A priority patent/JP2019053729A/ja
Publication of CN109508981A publication Critical patent/CN109508981A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction

Landscapes

  • Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Finance (AREA)
  • Strategic Management (AREA)
  • Computer Security & Cryptography (AREA)
  • General Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Debugging And Monitoring (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

公开了一种用于测试智能合约的方法和装置,其中,用于测试智能合约的方法包括:利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险;基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数;以及基于所述至少一个函数,测试智能合约。根据本公开的实施例,能够更有针对性地测试智能合约。

Description

用于测试智能合约的方法和装置
技术领域
本公开涉及信息处理领域,具体涉及一种能够更有针对性地测试智能合约的用于测试智能合约的方法和装置。
背景技术
基于以太坊区块链的应用发展变得越来越普及,然而,存在对于以太坊区块链上的智能合约发生的一些严重的攻击。对于区块链应用开发者而言,智能合约的安全性问题变得越来越重要。传统的方法可以检测逻辑风险,但是不能定位逻辑风险。而且,关于智能合约结构分析的传统方法仅支持单个文件,而不能支持多文件智能合约分析。同时,关于如何更有效地生成目标测试例存在较少的信息。
发明内容
在下文中给出了关于本公开的简要概述,以便提供关于本公开的某些方面的基本理解。但是,应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图用来确定本公开的关键性部分或重要部分,也不是意图用来限定本公开的范围。其目的仅仅是以简化的形式给出关于本公开的某些概念,以此作为稍后给出的更详细描述的前序。
鉴于以上问题,本公开的目的是提供能够解决现有技术中的一个或多个缺点的用于测试智能合约的方法和装置。
根据本公开的一方面,提供了一种用于测试智能合约的方法,包括:利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险;基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数;以及基于所述至少一个函数,测试智能合约。
根据本公开的另一方面,提供了一种用于测试智能合约的装置,包括:检测逻辑风险单元,被配置成利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险;定位逻辑风险单元,被配置成基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数;以及测试单元,被配置成基于所述至少一个函数,测试智能合约。
根据本公开的其它方面,还提供了用于实现上述根据本公开的方法的计算机程序代码和计算机程序产品以及其上记录有该用于实现上述根据本公开的方法的计算机程序代码的计算机可读存储介质。
在下面的说明书部分中给出本公开实施例的其它方面,其中,详细说明用于充分地公开本公开实施例的优选实施例,而不对其施加限定。
附图说明
本公开可以通过参考下文中结合附图所给出的详细描述而得到更好的理解,其中在所有附图中使用了相同或相似的附图标记来表示相同或者相似的部件。所述附图连同下面的详细说明一起包含在本说明书中并形成说明书的一部分,用来进一步举例说明本公开的优选实施例和解释本公开的原理和优点。其中:
图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中,优选地,可以通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将定位信息添加到用于检测逻辑风险的操作码中,从而生成用于检测并定位逻辑风险的操作码。
通常,可以使用现有开放式源程序来检测智能合约中的逻辑风险,可以检测到智能合约中的四种逻辑风险:调用堆栈风险、重进入风险、时间戳关联风险以及交易顺序关联风险。
但是,现有开放式源程序使用从字节码转换的操作码(该从字节码转换的操作码是用于检测逻辑风险的操作码的示例,例示而非限制,用于检测逻辑风险的操作码不限于该从字节码转换的操作码),这种操作码不具有定位信息,因此该操作码不能定位所检测到的逻辑风险。
我们发现来自智能合约编译器的操作码(该来自智能合约编译器的操作码是具有定位信息的操作码的示例,例示而非限制,具有定位信息的操作码不限于该来自智能合约编译器的操作码)包含定位信息,但是不包含偏移信息,因此不能通过现有开放式源程序直接执行来自智能合约编译器的操作码。因此,本公开提出了如下方法:通过将从字节码转换的操作码和来自智能合约编译器的操作码进行映射,以向从字节码转换的操作码添加定位信息,从而生成能够用于检测并定位逻辑风险的操作码。通过将从字节码转换的操作码和来自智能合约编译器的操作码进行映射,映射后得到的操作码(该映射后得到的操作码是用于检测并定位逻辑风险的操作码的示例,例示而非限制,用于检测并定位逻辑风险的操作码不限于该映射后得到的操作码)可以包含定位信息,从而可以对所检测到的逻辑风险进行定位。
因为来自智能合约编译器的操作码包含一些噪声,因此在映射之前,可以设定一些规则,以针对来自智能合约编译器的操作码集,删除或添加一些操作码。在对于来自智能合约编译器的操作码进行以上预处理之后,可以进行映射处理。图3是示出根据本公开实施例的操作码映射的示例的图。图3的最左侧示出的现有开放式源程序中的从字节码转换的操作码包含偏移信息(“偏移”)而缺少定位信息,图3的中间示出的来自智能合约编译器的操作码包含定位信息(“开始”和“结束”)而缺少偏移信息。通过对现有开放式源程序中的从字节码转换的操作码和来自智能合约编译器的操作码进行映射,可以得到图3的最右侧示出的映射后的具有偏移和定位的操作码,从图3的最右侧可见,映射后得到的操作码包含偏移信息(“偏移”)和定位信息(“开始”和“结束”)两者。这样,一旦在现有开放式源程序中检测到操作码包含逻辑风险,就可以通过使用映射后得到的操作码中包含的定位信息将逻辑风险定位到特定码行或特定函数。
由上可知,根据本公开的实施例的用于测试智能合约的方法将来自智能合约编译器的具有定位信息的操作码与现有开放式源程序中的从字节码转换的操作码进行映射,因此,可以定位所检测到的逻辑风险。
此外,为了更有效地生成智能合约的测试例,本公开提出了一种多文件智能合约拓扑分析方法,通过使用该方法,可以容易地建立智能合约的调用关系的拓扑图,该拓扑图可以呈现元数据(函数、事件、修饰符、变量)之间的调用关系。优选地,根据本公开实施例的用于测试智能合约的方法100还可以包括:通过对智能合约进行拓扑分析,生成用于表示所有元数据之间的调用关系的拓扑图;在拓扑图中,查找最小入口函数集合,其中,最小入口函数集合中的每个函数均未被其他元数据调用,并且最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数;以及基于最小入口函数集合中的每个函数,测试智能合约。
优选地,生成拓扑图包括:通过分别分析多文件智能合约的所有文件,建立针对多文件智能合约的元数据库;基于元数据库,生成所有元数据之间的调用关系;以及基于调用关系,生成拓扑图。
通常,可以通过使用可靠性剖析器(一种开放式源程序),进行智能合约的语法分析。然而,可靠性剖析器每次仅可以分析智能合约的一个文件,而不能支持分析多文件智能合约。此外,可靠性剖析器不支持调用关系分析。在本公开中,我们使用可靠性剖析器来提取元数据(函数、事件、修饰符、变量),以构建用于多文件智能合约的元数据库,然后,可以使用可靠性剖析器分析所有智能合约的每行,以生成所有元数据之间的调用关系,从而可以基于调用关系来生成拓扑图(即,可以通过对智能合约进行拓扑分析,生成拓扑图)。
在构建用于多文件智能合约的元数据库时,首先,使用可靠性剖析器逐个分析多文件智能合约的所有文件,并且提取四种元数据:函数、事件、修饰符、变量。以统一格式将所有元数据存储在元数据库中。
图4是示出根据本公开实施例的调用关系分析的示例的图。图4中的左侧示出了根据本公开实施例的元数据库。如图4所示,可以将所有的元数据以统一格式存储在元数据库中,例如,所有的函数存储在被称为“funcList”的函数列表中,所有的事件存储在“eventList”中,以及所有的变量存储在“variaList”中。此外,尽管在图4中未具体示出,但是,所有的修饰符可以存储在“modifierList”中。每个元数据具有四个要素,以函数为例,函数具有“funcName”、“structType”、“fileName”、“structName”四个要素,其中,“funcName”表示函数名,“structType”表示该函数来自库或合约,“fileName”表示该函数在哪个文件中,以及“structName”表示该函数来自哪个合约或库。通过使用这四个要素,可以确保元数据的唯一性。
在得到元数据库之后,可以使用可靠性剖析器来分析智能合约的每个码行。因为可靠性剖析器是语法分析工具,因此,可以从可靠性剖析器得知一特定元数据调用了另一元数据,但是不能从可靠性剖析器得知该被调用的元数据来自哪里。在所构建的元数据库的帮助下,可以得到被调用的元数据的信息,从而可以构建调用关系,如图4的右侧所示。
在图4的“调用关系”中,每个函数包含invokeFuncList,在invokeFuncList中,存储了该特定函数的被调用的函数。使用该调用关系,可以得到表示所有元数据之间的调用关系的拓扑图。图5是示出根据本公开实施例的拓扑图的示例的图。在图5中,假设Transfer是事件,sendCoin、MetaCoin、getBalance、convert以及getBalanceInEth是函数,balances是变量,verify是修饰符,图5示出了元数据Transfer、sendCoin、verify、balances、MetaCoin、getBalance、convert、getBalanceInEth之间的调用关系。
优选地,在生成所有元数据之间的调用关系时,可以设置以下限制:函数和修饰符能够调用函数、事件、修饰符以及变量,而事件和变量只能被调用。图6是示出根据本公开实施例的函数调用修饰符的示例的图。从图6的左侧可以看出,OnlyBuyer、OnlySeller以及inState是修饰符,而abort是函数,在图6的右侧的拓扑图中,函数abort调用修饰符OnlySeller和inState。
优选地,在基于元数据库而生成所有元数据之间的调用关系时,使用多重继承和/或多层继承方法,确定被调用的元数据来自哪个合约。
在多文件智能合约中,存在许多合约,当分析出元数据调用另一元数据时,需要知道该另一元数据来自哪里,因此需要添加在元数据库中进行搜索的一些限制。这里,可以充分使用合约之间的继承信息,可以用关键字“is”表示继承。存在两种继承:多重继承和多层继承。图7是示出根据本公开实施例的支持继承分析的示例的图。
根据图7中的“Sol文件B”中的“B1is A1,A2”可知,合约B1继承两个合约A1和A2,这属于多重继承,可以将该多重继承表示为:B1is A1,A2。根据图7中的“Sol文件B”中的“B2isB1”和“B1is A1,A2”可知,合约B2继承合约B1,以及合约B1继承合约A1和A2,这属于多重层承,可以将该多层继承表示为:B2is B1is A1,A2。
下面以B2中的函数b2为例来介绍如何根据继承来确定被调用的元数据来自哪个合约。在图7中,合约B2中的函数b2调用b1和a2,因为合约B2继承合约B1,以及合约B1继承合约A1和A2,因此,对于函数b2,当在元数据库中搜索b1和a2时会将“structName”的限制设置为B1或A1或A2,并且找出函数b1来自合约B1,函数a2来自合约A1,由此可以构建调用关系并且得到图7的右侧所示的拓扑图。
由上可知,根据本公开的实施例的用于测试智能合约的方法通过以统一格式存储元数据,并且定义用于在元数据库中搜索元数据的一些限制,从而可以分析多文件智能合约。
另外,如上所述,根据本公开实施例的用于测试智能合约的方法100可以在拓扑图中,查找最小入口函数集合,其中,最小入口函数集合中的每个函数均未被其他元数据调用,并且最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数。通过测试最小入口函数集合中的每个函数,可以覆盖几乎所有元数据(或智能合约代码)。
优选地,根据本公开实施例的用于测试智能合约的方法100还可以包括:在拓扑图中,查找被频繁调用的函数和变量;以及基于所查找到的被频繁调用的函数和变量,测试智能合约。由于被其他元数据频繁调用的元数据可能容易产生问题,因此需要测试它们。如上所述,可以基于所查找到的被频繁调用的函数和变量,测试智能合约。
优选地,根据本公开实施例的用于测试智能合约的方法100还可以包括:基于在先前测试中未被直接调用的函数,测试智能合约。作为示例,还存在在先前测试中未被直接调用的一些函数,需要测试这些函数以避免发生代码错误。
图8是示出根据本公开实施例的待测试函数的示例的图。在图8中,balances是变量,Transfer、SendCoin、MetaCoin、getBalance、convert、以及getBalanceInEth都是函数。假设函数Transfer是包含所检测到的逻辑风险的函数,需要以较高的优先级测试该函数。因为由函数SendCoin、MetaCoin、getBalanceInEth构成的集合中的每个函数均未被其他元数据调用,并且该集合包括用于遍历图8所示的拓扑图中的所有元数据所需的最小数量的函数,因此由函数SendCoin、MetaCoin、getBalanceInEth构成的集合是最小入口函数集合。可以基于该最小入口函数集合中的每个函数,测试智能合约。由于函数getBalance分别被SendCoin和getBalanceInEth调用,即函数getBalance被调用了两次,因此,函数getBalance是被频繁调用的函数。由于变量balances分别被SendCoin、MetaCoin、getBalance直接调用以及被getBalanceInEth通过getBalance间接调用,即变量balances被调用了四次,因此,变量balances是被频繁调用的变量。可以基于所查找到的这些被频繁调用的函数和变量,测试智能合约。函数convert在先前测试中未被直接调用,可以基于该在先前测试中未被直接调用的函数,测试智能合约。
在如上所述确定了待测试的函数之后,可以基于待测试的函数来生成测试例。可以使用可靠性剖析器来提取相应的函数信息如函数名、参数名、参数类型等,以自动生成测试例。图9是示出根据本公开实施例的自动生成测试例的示例的图。如图9的左侧所示,函数addStation、addEV、addOneBattery是所选择的待测试函数。根据这些待测试函数,可以生成如图9的右侧所示的测试例。由上可知,根据本公开的实施例的用于测试智能合约的方法基于逻辑风险检测和定位以及拓扑分析,可以选择待测试函数,并且可以基于所选择待测试函数自动生成更具有目标性的测试例,从而提高了测试效率。
综上所述,根据本公开的实施例的用于测试智能合约的方法利用用于检测并定位逻辑风险的操作码定位出智能合约中的包含所检测到的逻辑风险的至少一个函数,并且基于所述至少一个函数而测试智能合约,因此能够更有针对性地测试智能合约;此外,根据本公开的实施例的用于测试智能合约的方法将来自智能合约编译器的具有定位信息的操作码与现有开放式源程序中的从字节码转换的操作码进行映射,因此,可以定位所检测到的逻辑风险;传统的智能合约结构分析不支持多文件智能合约,而本公开的实施例的用于测试智能合约的方法通过以统一格式存储元数据,并且定义用于在元数据库中搜索元数据的一些限制,从而可以分析多文件智能合约;本公开的实施例的用于测试智能合约的方法基于逻辑风险检测和定位以及拓扑分析,可以选择待测试函数,并且可以基于所选择待测试函数自动生成更具有目标性的测试例,从而提高了测试效率。
与上述用于测试智能合约的方法实施例相对应地,本公开还提供了以下用于用于测试智能合约的装置的实施例。
图10是示出根据本公开的实施例的用于测试智能合约的装置1000的功能配置示例的框图。
如图10所示,根据本公开的实施例的用于测试智能合约的装置1000可以包括检测逻辑风险单元1002、定位逻辑风险单元1004以及测试单元1006。接下来将描述各个单元的功能配置示例。
在检测逻辑风险单元1002中,可以利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险。作为示例,可以利用编译器直接生成用于检测并定位逻辑风险的操作码。在该单元中,基于该用于检测并定位逻辑风险的操作码,可以检测智能合约是否包含逻辑风险。作为示例,可以检测到智能合约中的四种逻辑风险:调用堆栈风险、重进入风险、时间戳关联风险以及交易顺序关联风险。在该单元中,可以检测智能合约是否包含逻辑风险。
在定位逻辑风险单元1004中,可以基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数。用于检测并定位逻辑风险的操作码中包括定位信息,基于该定位信息,可以定位出智能合约中的包含所检测到的逻辑风险的函数。定位出智能合约中的包含所检测到的逻辑风险的函数的示例可以参见以上方法实施例中相应位置的描述,在此不再重复。
在测试单元1006中,可以基于在定位逻辑风险单元1004中所检测和定位出的至少一个函数,测试智能合约。为了生成更具目标性的测试例以提高测试效率,可以基于逻辑风险检测和定位,测试智能合约。如果在定位逻辑风险单元1004中检测并定位出函数,则可以认为这些函数包含代码错误,因此需要以较高的优先级测试这些函数。作为示例,可以基于在定位逻辑风险单元1004中定位出的所述至少一个函数,提取信息以生成目标测试例,通过执行这些目标测试例,可以在动态执行阶段中查找代码错误,从而可以更容易地查找到代码错误。
根据如上所述的用于测试智能合约的装置1000,利用用于检测并定位逻辑风险的操作码定位出智能合约中的包含所检测到的逻辑风险的至少一个函数,并且基于所述至少一个函数而测试智能合约,因此能够更有针对性地测试智能合约。
优选地,在检测逻辑风险单元1002中,可以通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将定位信息添加到用于检测逻辑风险的操作码中,从而生成用于检测并定位逻辑风险的操作码。
通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射来生成用于检测并定位逻辑风险的操作码的示例可以参见以上方法实施例中相应位置的描述,在此不再重复。
优选地,根据本公开实施例的用于测试智能合约的装置还可以包括基于最小入口函数集合的测试单元,该基于最小入口函数集合的测试单元被配置成:通过对智能合约进行拓扑分析,生成用于表示所有元数据之间的调用关系的拓扑图;在拓扑图中,查找最小入口函数集合,其中,最小入口函数集合中的每个函数均未被其他元数据调用,并且最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数;以及基于最小入口函数集合中的每个函数,测试智能合约。
优选地,生成拓扑图包括:通过分别分析多文件智能合约的所有文件,建立针对多文件智能合约的元数据库;基于元数据库,生成所有元数据之间的调用关系;以及基于调用关系,生成拓扑图。生成拓扑图的示例可以参见以上方法实施例中相应位置的描述,在此不再重复。
优选地,在生成所有元数据之间的调用关系时,可以设置以下限制:函数和修饰符能够调用函数、事件、修饰符以及变量,而事件和变量只能被调用。其示例可以参见以上方法实施例中相应位置的描述,在此不再重复。
优选地,在基于元数据库而生成所有元数据之间的调用关系时,使用多重继承和/或多层继承方法,确定被调用的元数据来自哪个合约。其示例可以参见以上方法实施例中相应位置的描述,在此不再重复。
如上所述,根据本公开实施例的用于测试智能合约的装置可以在拓扑图中,查找最小入口函数集合,其中,最小入口函数集合中的每个函数均未被其他元数据调用,并且最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数。通过测试最小入口函数集合中的每个函数,可以覆盖几乎所有元数据(或智能合约代码)。
优选地,根据本公开实施例的用于测试智能合约的装置还可以包括基于被频繁调用的函数和变量的测试单元,该基于被频繁调用的函数和变量的测试单元被配置成:在拓扑图中,查找被频繁调用的函数和变量;以及基于所查找到的被频繁调用的函数和变量,测试智能合约。由于被其他元数据频繁调用的元数据可能容易产生问题,因此需要测试它们。如上所述,可以基于所查找到的被频繁调用的函数和变量,测试智能合约。
优选地,根据本公开实施例的用于测试智能合约的装置还可以包括基于未被直接调用的函数的测试单元,该基于未被直接调用的函数的测试单元被配置成:基于在先前测试中未被直接调用的函数,测试智能合约。作为示例,还存在在先前测试中未被直接调用的一些函数,需要测试这些函数以避免发生代码错误。
待测试函数的示例可以参见以上方法实施例中相应位置的描述,在此不再重复。
综上所述,根据本公开的实施例的用于测试智能合约的装置利用用于检测并定位逻辑风险的操作码定位出智能合约中的包含所检测到的逻辑风险的至少一个函数,并且基于所述至少一个函数而测试智能合约,因此能够更有针对性地测试智能合约;此外,在根据本公开的实施例的用于测试智能合约的装置中,将来自智能合约编译器的具有定位信息的操作码与现有开放式源程序中的从字节码转换的操作码进行映射,因此,可以定位所检测到的逻辑风险;传统的智能合约结构分析不支持多文件智能合约,而本公开的实施例的用于测试智能合约的装置通过以统一格式存储元数据,并且定义用于在元数据库中搜索元数据的一些限制,从而可以分析多文件智能合约;本公开的实施例的用于测试智能合约的装置基于逻辑风险检测和定位以及拓扑分析,可以选择待测试函数,并且可以基于所选择待测试函数自动生成更具有目标性的测试例,从而提高了测试效率。
应指出,尽管以上描述了根据本公开的实施例的用于测试智能合约的装置的功能配置,但是这仅是示例而非限制,并且本领域技术人员可根据本公开的原理对以上实施例进行修改,例如可对各个实施例中的功能模块进行添加、删除或者组合等,并且这样的修改均落入本公开的范围内。
此外,还应指出,这里的装置实施例是与上述方法实施例相对应的,因此在装置实施例中未详细描述的内容可参见方法实施例中相应位置的描述,在此不再重复描述。
应理解,根据本公开的实施例的存储介质和程序产品中的机器可执行的指令还可以被配置成执行上述用于测试智能合约的方法,因此在此未详细描述的内容可参考先前相应位置的描述,在此不再重复进行描述。
相应地,用于承载上述包括机器可执行的指令的程序产品的存储介质也包括在本发明的公开中。该存储介质包括但不限于软盘、光盘、磁光盘、存储卡、存储棒等等。
如上所述,在根据本公开实施例的用于测试智能合约的方法100中,基于用于检测并定位逻辑风险的操作码来测试智能合约。此外,用于检测并定位逻辑风险的操作码不但可以用来测试智能合约,还可以用于检测并定位逻辑风险。
因此,本公开还提出了一种用于智能合约的逻辑风险检测和定位的方法1100。图11是示出根据本公开的实施例的用于智能合约的逻辑风险检测和定位的方法1100的流程示例的流程图。如图11所示,根据本公开的实施例的用于智能合约的逻辑风险检测和定位的方法1100包括生成用于检测并定位逻辑风险的操作码的步骤S1102、检测逻辑风险的步骤S1104以及定位逻辑风险的步骤S1106。
在生成用于检测并定位逻辑风险的操作码的步骤S1102中,可以通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将定位信息添加到用于检测逻辑风险的操作码中,从而生成用于检测并定位逻辑风险的操作码。
通常,使用现有开放式源程序来检测智能合约中的逻辑风险。但是,现有开放式源程序使用从字节码转换的操作码(该从字节码转换的操作码是用于检测逻辑风险的操作码的示例,例示而非限制,用于检测逻辑风险的操作码不限于该从字节码转换的操作码),这种操作码不具有定位信息,因此该操作码不能定位所检测到的逻辑风险。
来自智能合约编译器的操作码(该来自智能合约编译器的操作码是具有定位信息的操作码的示例,例示而非限制,具有定位信息的操作码不限于该来自智能合约编译器的操作码)包含定位信息,但是不包含偏移信息,因此不能通过现有开放式源程序直接执行来自智能合约编译器的操作码。通过将从字节码转换的操作码和来自智能合约编译器的操作码进行映射,映射后得到的操作码(该映射后得到的操作码是用于检测并定位逻辑风险的操作码的示例,例示而非限制,用于检测并定位逻辑风险的操作码不限于该映射后得到的操作码)可以包含定位信息,从而可以对所检测到的逻辑风险进行定位。操作码映射的示例可以参见图3。
在检测逻辑风险的步骤S1104中,可以利用用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险。在该步骤中,可以检测到智能合约中的四种逻辑风险:调用堆栈风险、重进入风险、时间戳关联风险以及交易顺序关联风险。
在定位逻辑风险的步骤S1106中,可以基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数。用于检测并定位逻辑风险的操作码中包括定位信息,基于该定位信息,可以定位出智能合约中的包含所检测到的逻辑风险的函数。将逻辑风险定位到特定码行的示例可以参见图2。
与上述用于智能合约的逻辑风险检测和定位的方法实施例相对应地,本公开还提供了以下用于智能合约的逻辑风险检测和定位的装置的实施例。
根据本公开的实施例的用于智能合约的逻辑风险检测和定位的装置包括:生成用于检测并定位逻辑风险的操作码的单元,可以被配置成通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将定位信息添加到用于检测逻辑风险的操作码中,从而生成用于检测并定位逻辑风险的操作码;检测逻辑风险的单元,可以被配置成利用用于检测并定位逻辑风险的操作码,检测智能合约中的逻辑风险;以及定位逻辑风险的单元,可以被配置成基于用于检测并定位逻辑风险的操作码中的定位信息,定位出智能合约中的包含所检测到的逻辑风险的至少一个函数。根据本公开的实施例的用于智能合约的逻辑风险检测和定位的装置中个单元的功能可以参见以上用于智能合约的逻辑风险检测和定位的方法实施例中相应位置的描述,在此不再重复。
在根据本公开的实施例的用于智能合约的逻辑风险检测和定位的方法和装置中,将来自智能合约编译器的具有定位信息的操作码与现有开放式源程序中的从字节码转换的操作码进行映射的方法,因此,可以定位所检测到的逻辑风险。
如上所述,在根据本公开实施例的用于测试智能合约的方法100中,可以基于元数据之间的调用关系确定待测试函数,以测试智能合约。此外,元数据之间的调用关系不但可以用来测试智能合约,还可以用于对智能合约进行拓扑分析。
因此,本公开还提出了一种多文件智能合约拓扑分析方法,通过使用该方法,可以容易地建立智能合约的调用关系的拓扑图。图12是示出根据本公开的实施例的用于对智能合约进行拓扑分析的方法1200的流程示例的流程图。如图12所示,根据本公开的实施例的用于对智能合约进行拓扑分析的方法1200包括建立元数据库步骤S1202、生成调用关系步骤S1204以及生成拓扑图步骤S1206。
在建立元数据库步骤S1202中,可以通过分别分析多文件智能合约的所有文件,建立针对多文件智能合约的元数据库。在生成调用关系步骤S1204中,可以基于元数据库,生成所有元数据之间的调用关系。在生成拓扑图步骤S1206中,可以基于所述调用关系,生成所述多文件智能合约的拓扑图。
通常,可以通过使用可靠性剖析器进行智能合约的语法分析。然而,可靠性剖析器每次仅可以分析智能合约的一个文件,而不能支持分析多文件智能合约。此外,可靠性剖析器不支持调用关系分析。根据本公开的实施例的用于对智能合约进行拓扑分析的方法1200使用可靠性剖析器来提取元数据(函数、事件、修饰符、变量),以构建用于多文件智能合约的元数据库,然后,可以使用可靠性剖析器分析所有智能合约的每行,以生成所有元数据之间的调用关系,从而可以基于调用关系来生成拓扑图。元数据库和调用关系分析的示例可以参见图4以及拓扑图的示例可以参见图5。
与上述用于对智能合约进行拓扑分析的方法实施例相对应地,本公开还提供了以下用于对智能合约进行拓扑分析的装置的实施例。
根据本公开的实施例的用于对智能合约进行拓扑分析的装置可以包括:建立元数据库单元,可以被配置成通过分别分析多文件智能合约的所有文件,建立针对多文件智能合约的元数据库;生成调用关系单元,可以被配置成基于元数据库,生成所有元数据之间的调用关系;以及生成拓扑图单元,可以被配置成基于所述调用关系,生成多文件智能合约的拓扑图。根据本公开的实施例的用于对智能合约进行拓扑分析的装置中个单元的功能可以参见以上用于对智能合约进行拓扑分析的方法实施例中相应位置的描述,在此不再重复。
利用根据本公开的实施例的用于对智能合约进行拓扑分析的方法和装置,可以支持分析多文件智能合约,并且容易地建立多文件智能合约的调用关系的拓扑图。
另外,还应该指出的是,上述系列处理和装置也可以通过软件和/或固件实现。在通过软件和/或固件实现的情况下,从存储介质或网络向具有专用硬件结构的计算机,例如图13所示的通用个人计算机1300安装构成该软件的程序,该计算机在安装有各种程序时,能够执行各种功能等等。
在图13中,中央处理单元(CPU)1301根据只读存储器(ROM)1302中存储的程序或从存储部分1308加载到随机存取存储器(RAM)1303的程序执行各种处理。在RAM1303中,也根据需要存储当CPU 1301执行各种处理等时所需的数据。
CPU 1301、ROM 1302和RAM1303经由总线1304彼此连接。输入/输出接口1305也连接到总线1304。
下述部件连接到输入/输出接口1305:输入部分1306,包括键盘、鼠标等;输出部分1307,包括显示器,比如阴极射线管(CRT)、液晶显示器(LCD)等,和扬声器等;存储部分1308,包括硬盘等;和通信部分1309,包括网络接口卡比如LAN卡、调制解调器等。通信部分1309经由网络比如因特网执行通信处理。
根据需要,驱动器1310也连接到输入/输出接口1305。可拆卸介质1311比如磁盘、光盘、磁光盘、半导体存储器等等根据需要被安装在驱动器1310上,使得从中读出的计算机程序根据需要被安装到存储部分1308中。
在通过软件实现上述系列处理的情况下,从网络比如因特网或存储介质比如可拆卸介质1311安装构成软件的程序。
本领域的技术人员应当理解,这种存储介质不局限于图13所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质1311。可拆卸介质1311的例子包含磁盘(包含软盘(注册商标))、光盘(包含光盘只读存储器(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)(注册商标))和半导体存储器。或者,存储介质可以是ROM1302、存储部分1308中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。
以上参照附图描述了本公开的优选实施例,但是本公开当然不限于以上示例。本领域技术人员可在所附权利要求的范围内得到各种变更和修改,并且应理解这些变更和修改自然将落入本公开的技术范围内。
例如,在以上实施例中包括在一个单元中的多个功能可以由分开的装置来实现。替选地,在以上实施例中由多个单元实现的多个功能可分别由分开的装置来实现。另外,以上功能之一可由多个单元来实现。无需说,这样的配置包括在本公开的技术范围内。
在该说明书中,流程图中所描述的步骤不仅包括以所述顺序按时间序列执行的处理,而且包括并行地或单独地而不是必须按时间序列执行的处理。此外,甚至在按时间序列处理的步骤中,无需说,也可以适当地改变该顺序。
另外,根据本公开的技术还可以如下进行配置。
附记1.一种用于测试智能合约的方法,包括:
利用用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险;
基于所述用于检测并定位逻辑风险的操作码中的定位信息,定位出所述智能合约中的包含所检测到的逻辑风险的至少一个函数;以及
基于所述至少一个函数,测试所述智能合约。
附记2.根据附记1所述的方法,其中,通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将所述定位信息添加到所述用于检测逻辑风险的操作码中,从而生成所述用于检测并定位逻辑风险的操作码。
附记3.根据附记1所述的方法,还包括:
通过对所述智能合约进行拓扑分析,生成用于表示所有元数据之间的调用关系的拓扑图;
在所述拓扑图中,查找最小入口函数集合,其中,所述最小入口函数集合中的每个函数均未被其他元数据调用,并且所述最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数;以及
基于所述最小入口函数集合中的每个函数,测试所述智能合约。
附记4.根据附记3所述的方法,还包括:
在所述拓扑图中,查找被频繁调用的函数和变量;以及
基于所查找到的被频繁调用的函数和变量,测试所述智能合约。
附记5.根据附记4所述的方法,还包括:
基于在先前测试中未被直接调用的函数,测试所述智能合约。
附记6.根据附记3所述的方法,其中,生成所述拓扑图包括:
通过分别分析多文件智能合约的所有文件,建立针对多文件智能合约的元数据库;
基于所述元数据库,生成所有元数据之间的调用关系;以及
基于所述调用关系,生成所述拓扑图。
附记7.根据附记6所述的方法,其中,在生成所有元数据之间的调用关系时,设置以下限制:函数和修饰符能够调用函数、事件、修饰符以及变量,而事件和变量只能被调用。
附记8.根据附记7所述的方法,其中,在基于所述元数据库而生成所有元数据之间的调用关系时,使用多重继承和/或多层继承方法,确定被调用的元数据来自哪个合约。
附记9.一种用于测试智能合约的装置,包括:
检测逻辑风险单元,被配置成利用用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险;
定位逻辑风险单元,被配置成基于所述用于检测并定位逻辑风险的操作码中的定位信息,定位出所述智能合约中的包含所检测到的逻辑风险的至少一个函数;以及
测试单元,被配置成基于所述至少一个函数,测试所述智能合约。
附记10.根据附记9所述的装置,其中,在所述检测逻辑风险单元中,通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将所述定位信息添加到所述用于检测逻辑风险的操作码中,从而生成所述用于检测并定位逻辑风险的操作码。
附记11.根据附记9所述的装置,还包括基于最小入口函数集合的测试单元,所述基于最小入口函数集合的测试单元被配置成:
通过对所述智能合约进行拓扑分析,生成用于表示所有元数据之间的调用关系的拓扑图;
在所述拓扑图中,查找最小入口函数集合,其中,所述最小入口函数集合中的每个函数均未被其他元数据调用,并且所述最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数;以及
基于所述最小入口函数集合中的每个函数,测试所述智能合约。
附记12.根据附记11所述的装置,还包括基于被频繁调用的函数和变量的测试单元,所述基于被频繁调用的函数和变量的测试单元被配置成:
在所述拓扑图中,查找被频繁调用的函数和变量;以及
基于所查找到的被频繁调用的函数和变量,测试所述智能合约。
附记13.根据附记12所述的装置,还包括基于未被直接调用的函数的测试单元,所述基于未被直接调用的函数的测试单元被配置成:
基于在先前测试中未被直接调用的函数,测试所述智能合约。
附记14.根据附记11所述的装置,其中,生成所述拓扑图包括:
通过分别分析多文件智能合约的所有文件,建立针对多文件智能合约的元数据库;
基于所述元数据库,生成所有元数据之间的调用关系;以及
基于所述调用关系,生成所述拓扑图。
附记15.根据附记14所述装置,其中,在生成所有元数据之间的调用关系时,设置以下限制:函数和修饰符能够调用函数、事件、修饰符以及变量,而事件和变量只能被调用。
附记16.根据附记15所述的装置,其中,在基于所述元数据库而生成所有元数据之间的调用关系时,使用多重继承和/或多层继承方法,确定被调用的元数据来自哪个合约。
附记17.一种用于智能合约的逻辑风险检测和定位的方法,包括:
通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将所述定位信息添加到所述用于检测逻辑风险的操作码中,从而生成用于检测并定位逻辑风险的操作码;
利用所述用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险;以及
基于所述用于检测并定位逻辑风险的操作码中的定位信息,定位出所述智能合约中的包含所检测到的逻辑风险的至少一个函数。

Claims (10)

1.一种用于测试智能合约的方法,包括:
利用用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险;
基于所述用于检测并定位逻辑风险的操作码中的定位信息,定位出所述智能合约中的包含所检测到的逻辑风险的至少一个函数;以及
基于所述至少一个函数,测试所述智能合约。
2.根据权利要求1所述的方法,其中,通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将所述定位信息添加到所述用于检测逻辑风险的操作码中,从而生成所述用于检测并定位逻辑风险的操作码。
3.根据权利要求1所述的方法,还包括:
通过对所述智能合约进行拓扑分析,生成用于表示所有元数据之间的调用关系的拓扑图;
在所述拓扑图中,查找最小入口函数集合,其中,所述最小入口函数集合中的每个函数均未被其他元数据调用,并且所述最小入口函数集合包括用于遍历所述拓扑图中的所有元数据所需的最小数量的函数;以及
基于所述最小入口函数集合中的每个函数,测试所述智能合约。
4.根据权利要求3所述的方法,还包括:
在所述拓扑图中,查找被频繁调用的函数和变量;以及
基于所查找到的被频繁调用的函数和变量,测试所述智能合约。
5.根据权利要求4所述的方法,还包括:
基于在先前测试中未被直接调用的函数,测试所述智能合约。
6.根据权利要求3所述的方法,其中,生成所述拓扑图包括:
通过分别分析多文件智能合约的所有文件,建立针对多文件智能合约的元数据库;
基于所述元数据库,生成所有元数据之间的调用关系;以及
基于所述调用关系,生成所述拓扑图。
7.根据权利要求6所述的方法,其中,在生成所有元数据之间的调用关系时,设置以下限制:函数和修饰符能够调用函数、事件、修饰符以及变量,而事件和变量只能被调用。
8.根据权利要求7所述的方法,其中,在基于所述元数据库而生成所有元数据之间的调用关系时,使用多重继承和/或多层继承方法,确定被调用的元数据来自哪个合约。
9.一种用于测试智能合约的装置,包括:
检测逻辑风险单元,被配置成利用用于检测并定位逻辑风险的操作码,检测所述智能合约中的逻辑风险;
定位逻辑风险单元,被配置成基于所述用于检测并定位逻辑风险的操作码中的定位信息,定位出所述智能合约中的包含所检测到的逻辑风险的至少一个函数;以及
测试单元,被配置成基于所述至少一个函数,测试所述智能合约。
10.根据权利要求9所述的装置,其中,在所述检测逻辑风险单元中,通过对用于检测逻辑风险的操作码与具有定位信息的操作码进行映射,将所述定位信息添加到所述用于检测逻辑风险的操作码中,从而生成所述用于检测并定位逻辑风险的操作码。
CN201710834235.4A 2017-09-15 2017-09-15 用于测试智能合约的方法和装置 Pending CN109508981A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201710834235.4A CN109508981A (zh) 2017-09-15 2017-09-15 用于测试智能合约的方法和装置
JP2018168835A JP2019053729A (ja) 2017-09-15 2018-09-10 スマートコントラクトのテスト方法及びテスト装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710834235.4A CN109508981A (zh) 2017-09-15 2017-09-15 用于测试智能合约的方法和装置

Publications (1)

Publication Number Publication Date
CN109508981A true CN109508981A (zh) 2019-03-22

Family

ID=65745066

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710834235.4A Pending CN109508981A (zh) 2017-09-15 2017-09-15 用于测试智能合约的方法和装置

Country Status (2)

Country Link
JP (1) JP2019053729A (zh)
CN (1) CN109508981A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110688428A (zh) * 2019-09-24 2020-01-14 北京海益同展信息科技有限公司 用于发布智能合约的方法和装置
CN111949532A (zh) * 2020-08-10 2020-11-17 上海熙菱信息技术有限公司 一种基于契约测试下的风险应对的测试策略
CN112801498A (zh) * 2021-01-26 2021-05-14 网易(杭州)网络有限公司 风险识别模型的训练方法、风险识别方法、装置及设备
CN115022026A (zh) * 2022-05-31 2022-09-06 电子科技大学 一种区块链智能合约威胁检测装置及方法
US12126729B2 (en) 2019-09-24 2024-10-22 Jingdong Technology Information Technology Co., Ltd. Method and apparatus for issuing smart contract

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102254500B1 (ko) * 2018-11-27 2021-05-24 어드밴스드 뉴 테크놀로지스 씨오., 엘티디. 블록체인 상의 스마트 계약의 보안을 개선하기 위한 시스템 및 방법
US11138597B2 (en) 2018-11-27 2021-10-05 Advanced New Technologies Co., Ltd. System and method for improving security of smart contract on blockchain
EP3906488B1 (en) * 2019-06-12 2023-08-02 Nec Corporation Method and contract rewriting framework system for supporting smart contracts in a blockchain network
CN110263536B (zh) * 2019-06-21 2024-05-24 深圳前海微众银行股份有限公司 一种区块链中智能合约的监控方法及装置
JPWO2021166782A1 (zh) * 2020-02-21 2021-08-26
CN111352835B (zh) * 2020-02-25 2024-04-26 腾讯科技(深圳)有限公司 一种智能合约的测试方法、装置、设备及存储介质
CN111444090B (zh) * 2020-03-24 2024-04-26 腾讯科技(深圳)有限公司 区块链中的合约测试方法、装置、电子设备及存储介质
CN112734196B (zh) * 2020-12-30 2024-04-23 杭州趣链科技有限公司 基于区块链的众测平台绩效评估方法及相关设备
CN117971679A (zh) * 2024-02-02 2024-05-03 牛津(海南)区块链研究院有限公司 一种智能合约测试数据生成方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110231936A1 (en) * 2010-03-19 2011-09-22 Aspect Security Inc. Detection of vulnerabilities in computer systems
CN103164331A (zh) * 2011-12-15 2013-06-19 阿里巴巴集团控股有限公司 一种应用程序的漏洞检测方法和装置
CN105190548A (zh) * 2013-03-14 2015-12-23 微软技术许可有限责任公司 软件的自动风险分析
CN106294156A (zh) * 2016-08-11 2017-01-04 北京邮电大学 一种静态代码缺陷检测分析方法及装置
CN106919419A (zh) * 2017-02-03 2017-07-04 中钞信用卡产业发展有限公司北京智能卡技术研究院 区块链上的智能合约程序的更新方法及装置
CN107104850A (zh) * 2017-03-24 2017-08-29 钱德君 一种量子链测试方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3692898B2 (ja) * 2000-03-13 2005-09-07 日本ビクター株式会社 デバッガ及びデータ処理方法
JP2001273169A (ja) * 2000-03-24 2001-10-05 Toshiba Corp プログラムテスト仕様書生成装置
JP4587976B2 (ja) * 2006-02-27 2010-11-24 日立ソフトウエアエンジニアリング株式会社 アプリケーションの脆弱性検査方法および装置
KR20080068385A (ko) * 2007-01-19 2008-07-23 슈어소프트테크주식회사 소프트웨어 테스트 시스템, 방법 및 그 방법을 실행하기위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
JP5212508B2 (ja) * 2011-03-15 2013-06-19 オムロン株式会社 デバッグ装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110231936A1 (en) * 2010-03-19 2011-09-22 Aspect Security Inc. Detection of vulnerabilities in computer systems
CN103164331A (zh) * 2011-12-15 2013-06-19 阿里巴巴集团控股有限公司 一种应用程序的漏洞检测方法和装置
CN105190548A (zh) * 2013-03-14 2015-12-23 微软技术许可有限责任公司 软件的自动风险分析
CN106294156A (zh) * 2016-08-11 2017-01-04 北京邮电大学 一种静态代码缺陷检测分析方法及装置
CN106919419A (zh) * 2017-02-03 2017-07-04 中钞信用卡产业发展有限公司北京智能卡技术研究院 区块链上的智能合约程序的更新方法及装置
CN107104850A (zh) * 2017-03-24 2017-08-29 钱德君 一种量子链测试方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
AWAD A.YOUNIS.ET: "Using Attack Surface Entry Points and Reachability Analysis to Assess the Risk of Software Vulnerability Exploitability", 《2014 IEEE 15TH INTERNATIONAL SYMPOSIUM ON HIGH-ASSURANCE SYSTEMS ENGINEERING》 *
程攀: "面向嵌入式软件缺陷检测的动态测试用例生成", 《中国优秀博硕士学位论文全文数据库(硕士)电子期刊》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110688428A (zh) * 2019-09-24 2020-01-14 北京海益同展信息科技有限公司 用于发布智能合约的方法和装置
US12126729B2 (en) 2019-09-24 2024-10-22 Jingdong Technology Information Technology Co., Ltd. Method and apparatus for issuing smart contract
CN111949532A (zh) * 2020-08-10 2020-11-17 上海熙菱信息技术有限公司 一种基于契约测试下的风险应对的测试策略
CN112801498A (zh) * 2021-01-26 2021-05-14 网易(杭州)网络有限公司 风险识别模型的训练方法、风险识别方法、装置及设备
CN115022026A (zh) * 2022-05-31 2022-09-06 电子科技大学 一种区块链智能合约威胁检测装置及方法

Also Published As

Publication number Publication date
JP2019053729A (ja) 2019-04-04

Similar Documents

Publication Publication Date Title
CN109508981A (zh) 用于测试智能合约的方法和装置
CN105787367B (zh) 一种软件更新的补丁安全性检测方法及系统
CN106294134B (zh) 代码的崩溃定位方法及装置
Olbrich et al. Are all code smells harmful? A study of God Classes and Brain Classes in the evolution of three open source systems
CN107861870A (zh) 接口测试及测试数据生成方法、装置、终端和存储介质
CN110059009A (zh) 用于测试代码文件的方法和装置
CN107957957A (zh) 测试用例的获取方法和装置
CN105446868B (zh) 系统兼容性测试方法、测试用例管理方法及相关装置
CN109144882A (zh) 一种基于程序不变量的软件故障定位方法及装置
CN104778033B (zh) 一种积木式软件的构建方法和装置
CN107451068A (zh) 用例运行方法、装置、计算设备及存储介质
CN109446107B (zh) 一种源代码检测方法及装置、电子设备
CN111563103B (zh) 一种用于数据血缘检测方法和系统
CN106874180A (zh) 检测系统及其方法
CN105718370A (zh) 一种Android设备测试方法及测试装置
Chen et al. Extracting and studying the Logging-Code-Issue-Introducing changes in Java-based large-scale open source software systems
Savić et al. A language-independent approach to the extraction of dependencies between source code entities
CN109753286A (zh) 一种基于功能标签的代码方法统计其调用次数的方法
CN110134582A (zh) 测试用例的处理及数据处理方法及装置
CN108710571A (zh) 一种生成自动化测试代码的方法和装置
CN107968833A (zh) 一种基于执行路径的云应用性能监测方法
CN110082666A (zh) 芯片测试分析方法、装置、设备及存储介质
CN109240903A (zh) 一种自动评估的方法和装置
CN106681905A (zh) 软件测试装置及其软件测试方法
CN106886417A (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
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20190322