CN110633199A - 用于支持智能合约的区块链的测试装置、方法及介质 - Google Patents
用于支持智能合约的区块链的测试装置、方法及介质 Download PDFInfo
- Publication number
- CN110633199A CN110633199A CN201810653968.2A CN201810653968A CN110633199A CN 110633199 A CN110633199 A CN 110633199A CN 201810653968 A CN201810653968 A CN 201810653968A CN 110633199 A CN110633199 A CN 110633199A
- Authority
- CN
- China
- Prior art keywords
- variable
- event
- information
- code
- intelligent contract
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Economics (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- Marketing (AREA)
- Technology Law (AREA)
- Debugging And Monitoring (AREA)
Abstract
公开了一种用于支持智能合约的区块链的测试装置、方法及介质。所述用于支持智能合约的区块链的测试装置包括:变量检测单元,其被配置成针对所述智能合约的代码,检测变量以获得所述变量的信息;以及事件注入单元,其被配置成根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。使用根据本公开的用于支持智能合约的区块链的测试装置可以在很大程度上提高智能合约开发者的效率,并且可以单独做成一个工具或者集成到现有开发工具中。
Description
技术领域
本公开涉及区块链的技术领域,具体地涉及用于支持智能合约的区块链的测试装置和测试方法。
背景技术
这个部分提供了与本公开有关的背景信息,这不一定是现有技术。
以太坊是目前最流行的支持智能合约运行的区块链平台。其特征有利于开发者根据自身的需求开发复杂业务的应用。以太坊智能合约的开发语言是solidity,其被设计专门用来开发智能合约。由于它是一种新的语言,所以目前缺乏有效的工具或者开发工具来支持智能合约的调试。虽然开发者可以通过注入事件的方法来捕获日志信息,但是通过人工的方式来对所有变量插入日志、来监控变量的变化情况是不太现实的。此外,仅通过监控变量的变化情况是不足的,这是因为调试代码还需要记录变量的位置信息和代码的执行路径。
发明内容
这个部分提供了本公开的一般概要,而不是其全部范围或其全部特征的全面披露。
本公开的目的在于提供一种针对上述问题的解决方案,具体地提供了一种用于支持智能合约的区块链的测试装置和方法。
根据本公开的一方面,提供了一种用于支持智能合约的区块链的测试装置,包括:变量检测单元,其被配置成针对所述智能合约的代码,检测变量以获得所述变量的信息;以及事件注入单元,其被配置成根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
根据本公开的另一方面,提供了一种用于支持智能合约的区块链的测试方法,包括:针对所述智能合约的代码,检测变量以获得所述变量的信息;以及根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
根据本公开的另一方面,提供了一种程序产品,该程序产品包括存储在其中的机器可读指令代码,其中,所述指令代码当由计算机读取和执行时,能够使所述计算机执行根据本公开的用于支持智能合约的区块链的测试方法。
根据本公开的另一方面,提供了一种机器可读存储介质,其上携带有根据本公开的程序产品。
使用根据本公开的用于支持智能合约的区块链的测试装置和方法可以在很大程度上提高智能合约开发者的效率,并且可以单独做成一个工具或者集成到现有开发工具中。
从在此提供的描述中,进一步的适用性区域将会变得明显。这个概要中的描述和特定例子只是为了示意的目的,而不旨在限制本公开的范围。
附图说明
在此描述的附图只是为了所选实施例的示意的目的而非全部可能的实施,并且不旨在限制本公开的范围。在附图中:
图1示出根据本公开的一个实施例的用于支持智能合约的区块链的测试装置的框图;
图2示出根据本公开的另一个实施例的用于支持智能合约的区块链的测试装置的框图;
图3示出根据本公开的又一个实施例的用于支持智能合约的区块链的测试装置的框图;
图4示出根据本公开的一个实施例的变量检测及定位的示意图;
图5示出根据本公开的又一个实施例的用于支持智能合约的区块链的测试装置的框图;
图6示出根据本公开的一个实施例的修改后的智能合约的示意图;
图7示出根据本公开的又一个实施例的用于支持智能合约的区块链的测试装置的框图;
图8示出根据本公开的又一个实施例的用于支持智能合约的区块链的测试装置的框图;
图9示出根据本公开的一个实施例的通过组织日志信息来生成调试信息的示例图;
图10示出根据本公开的一个实施例的用于支持智能合约的区块链的测试装置的结构图;
图11示出根据本公开的一个实施例的用于支持智能合约的区块链的测试方法的流程图;以及
图12为其中可以实现根据本公开的实施例的用于支持智能合约的区块链的测试装置和方法的通用个人计算机的示例性结构的框图。
虽然本公开容易经受各种修改和替换形式,但是其特定实施例已作为例子在附图中示出,并且在此详细描述。然而应当理解的是,在此对特定实施例的描述并不打算将本公开限制到公开的具体形式,而是相反地,本公开目的是要覆盖落在本公开的精神和范围之内的所有修改、等效和替换。要注意的是,贯穿几个附图,相应的标号指示相应的部件。
具体实施方式
现在参考附图来更加充分地描述本公开的例子。以下描述实质上只是示例性的,而不旨在限制本公开、应用或用途。
提供了示例实施例,以便本公开将会变得详尽,并且将会向本领域技术人员充分地传达其范围。阐述了众多的特定细节如特定部件、装置和方法的例子,以提供对本公开的实施例的详尽理解。对于本领域技术人员而言将会明显的是,不需要使用特定的细节,示例实施例可以用许多不同的形式来实施,它们都不应当被解释为限制本公开的范围。在某些示例实施例中,没有详细地描述众所周知的过程、众所周知的结构和众所周知的技术。
solidity是针对以太坊智能合约的一种新的编程语言,其专门被设计用来开发智能合约。然而,目前缺乏有效的工具来支持智能合约的开发与调试,因此使用solidity来开发时非常不方便。尽管solidity支持插入事件的方式来记录开发者所需的日志,但是如果需要生成调试信息,那么需要插入一种事件来记录所有变量的值。人工来插入所有事件,这是不可接受的。同时调试程序还需要知道代码的执行路径,因此需要定义另外一种事件来记录代码的执行路径。本公开提供了一种改进的技术方案来自动的插入这两种事件,然后,通过优化智能合约日志的记录机制来在发生异常时将日志记录到区块链或离线文件,以便于后续的日志分析。
为了更好地理解本公开的技术方案,下面针对本公开的用于支持智能合约的区块链的测试装置和测试方法进行更加详细地描述。
根据本公开的一个实施例,提供了一种用于支持智能合约的区块链的测试装置,包括:变量检测单元,其被配置成针对所述智能合约的代码,检测变量以获得所述变量的信息;以及事件注入单元,其被配置成根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
图1示出了根据本公开的一个实施例的用于支持智能合约的区块链的测试装置100。如图1所示,根据本公开的用于支持智能合约的区块链的测试装置100可以包括变量检测单元101和事件注入单元102。
变量检测单元101可以被配置成针对所述智能合约的代码,检测变量以获得所述变量的信息。所述变量是指内存或寄存器中用一个标识符命名的存储单元,其可以用来存储一个特定类型的数据,并且数据的值在程序运行过程中可以进行修改。
然后,事件注入单元102可以被配置成根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。所述事件是指用户的动作或者触发某项行为。这里,例如,可以定义两种事件,一种用于记录变量的值,另一种用于记录变量所在的行。当然,本领域技术人员应该清楚,这两种事件仅为示例性的,本公开并不限于此。
使用根据本公开的用于支持智能合约的区块链的测试装置可以在很大程度上提高智能合约开发者的效率,并且可以单独做成一个工具或者集成到现有开发工具中。
根据本公开的一个实施例的用于支持智能合约的区块链的测试装置还包括生成单元,所述生成单元被配置成针对所述日志信息生成针对所述智能合约的调试信息。
如图2所示,根据本公开的用于支持智能合约的区块链的测试装置200除了可以包括上述变量检测单元101和事件注入单元102之外,还可以包括生成单元201。
生成单元201可以被配置成针对所述日志信息生成针对所述智能合约的调试信息。这有利于开发者调试所述智能合约。
根据本公开的一个实施例的用于支持智能合约的区块链的测试装置还包括执行单元,所述执行单元被配置成在所述智能合约的函数被调用时执行所注入的事件以记录所述日志信息。
如图3所示,根据本公开的用于支持智能合约的区块链的测试装置300除了可以包括上述变量检测单元101和事件注入单元102之外,还可以包括执行单元301。
执行单元301可以被配置成在所述智能合约的函数被调用时执行所注入的事件以记录所述日志信息。例如,当所述智能合约的函数被调用时,代码会被执行,注入代码的事件也会被执行,然后,该事件记录的日志信息会被记录于如区块链和离线文件中,这样便于后续的日志分析。这里,根据本公开的一个实施例的用于支持智能合约的区块链的测试装置300还可以包括生成单元201。这样,记录的日志信息还可以用于生成调试信息。这有利于开发者调试智能合约。
根据本公开的一个实施例,所述变量检测单元进一步被配置成:使用抽象语法分析生成所述智能合约的语法树;分析所述语法树以提取所有变量;以及根据所述变量的信息确定所述变量在所述代码中的行号。
例如,如图4所示,针对使用solidity编写的智能合约,首先使用抽象语法分析生成所述智能合约的语法树。然后,通过分析所述语法树来抽取所有变量及其位置信息,确认具体变量的具体行。在图4中,可以看到检测到的变量信息,代码行4和代码行5包含变量“x”,代码行6包含变量“storedData”,以及代码行8包含变量“x”和“storedData”。
接下来,为了自动地记录变量的信息例如变量值和函数执行路径,根据本公开的一个实施例,用于支持智能合约的区块链的测试装置还可以包括定义单元,所述定义单元被配置成定义所述事件,所述事件包括第一事件和第二事件,其中所述第一事件用于记录所述变量的变化,所述第二事件用于记录所述函数的执行轨迹。
如图5所示,根据本公开的用于支持智能合约的区块链的测试装置400除了可以包括上述变量检测单元101、事件注入单元102和执行单元301之外,还可以包括定义单元401。
定义单元401可以定义事件。根据本实施例,定义单元401可以定义两种事件,一种用来记录变量值,另一种用来记录函数的执行路径。对于智能合约的每一行代码,可以插入两种定义的事件。如果该行中具有多个变量,可以插入多个记录变量的事件来分别记录各个变量值。对于记录函数的执行路径,可以仅针对每一行代码插入一个记录执行路径的事件。当智能合约的函数被调用时,其代码会被执行,插入代码的事件也会被执行。通过收集事件执行后的日志信息,可以分析哪些具体行的代码被执行,并记录下该行中的变量信息。这里,本领域技术人员应该清楚,上述所列的事件类型和变量信息都是示例性的,本公开并不限于此。本领域技术人员可以根据实际的需要来定义一个或更多个事件。
例如,如图6所示,首先,为了记录智能合约的执行路径,定义了一种事件,这里称之为“RecordLine”。该事件的参数为代码行的具体值,该事件的具体格式如下:
event RecordLine(string lineNumber)
然后,为了记录具体的变量值,定义了另一种事件,其包含两个参数,第一个参数用于记录变量名,第二个参数用于记录变量值,该事件的具体格式如下:
event RecordVariable(string varName,string value)
对于每一行代码,首先插入“RecordLine”来记录执行路径;然后,针对该代码行中的每一个变量,都插入一个事件“RecordVariable”来记录具体变量的值。
接下来,为了解决当代码执行过程中发生异常的情形时事件日志不会被存储到区块链的问题,根据本公开的一个实施例,用于支持智能合约的区块链的测试装置还可以包括修改单元,所述修改单元被配置成修改针对所述智能合约的测试平台的日志记录机制,使其在代码执行过程中发生异常时记录所述日志信息。
如图7所示,根据本公开的用于支持智能合约的区块链的测试装置500除了可以包括上述变量检测单元101、事件注入单元102和执行单元301之外,还可以包括修改单元501。
修改单元501可以修改智能合约的运行环境(例如TestRPC)的源码来改变日志的记录方式。换言之,当智能合约中的事件被执行之后,该事件记录的日志信息将被记录到区块链或离线文件,以便于后续的日志分析。这样,即使在执行过程中发生异常,日志也将被记录下来。这里,本领域技术人员应该清楚,根据本公开的实施例可以采用TestRPC来进行智能合约的部署和运行,然而,这仅是示例性的,本领域技术人员也可以根据实际需要采用其他智能合约的运行环境。
使用根据本公开的用于支持智能合约的区块链的测试装置通过语法分析技术,自动地将事件注入到智能合约对应的位置,优化了智能合约的日志记录机制,并且在发生异常时,可以记录日志到区块链或离线文件,以便于后续的日志分析。
接下来,根据本公开的一个实施例,如图8所示,用于支持智能合约的区块链的测试装置600除了可以包括上述变量检测单元101、事件注入单元102、执行单元301和定义单元401之外,还可以包括调试单元601。
调试单元601可以被配置成利用所注入的第二事件(即用于记录函数的执行轨迹的事件)逐步调试所述智能合约的代码。
换言之,结合上述所定义的事件的功能以及捕获到的日志,可以模拟生成代码的调试信息,进而可以一步步的调试智能合约的代码、查看代码的执行路径以及具体行的变量值。
具体地,为了在函数执行后呈现调试信息,需要依据具体行组织日志。如图9所示,对于原始智能合约的每一行,插入一个事件“RecordLine”来记录执行路径,然后针对该行中的每一个变量都插入一个对应的事件“RecordVariable”来记录变量值。然后,将修改后的智能合约部署到运行平台(例如TestRPC)上。当智能合约中的一个函数被调用时,所执行到的插入的事件就会记录相应的信息。最后,通过记录的信息例如“行号”来分割日志信息,同时组织分割的信息。每一行对应的信息对应于调试中的一步,最后可以模拟调试,一步一步的显示调试信息。
总的来说,如图10所示,针对智能合约,可以使用例如solidity语法分析器进行分析以检测并定位所有变量。然后,针对每一行的变量信息,自动插入定义的事件。接下来,可以修改智能合约的运行环境(例如TestRPC)的源码来改变日志的记录方式。当智能合约中的事件被执行之后,该事件记录的日志信息将被记录到区块链或离线文件,以便于后续基于日志分析生成代码的调试信息。这有利于开发者一步步调试智能合约。
根据本公开的一个实施例,所述变量的信息可以包括所述变量的位置的偏移量。这里,所述位置的偏移量可以是按字符计的位置偏移量。但本领域技术人员应该清楚,这仅是示例性的,本公开并不限于此。
使用根据本公开的用于支持智能合约的区块链的测试装置可以在很大程度上提高智能合约开发者的效率,并且可以单独做成一个工具或者集成到现有开发工具中。
下面将结合图11来描述根据本公开的实施例的用于支持智能合约的区块链的测试方法。如图11所示,根据本公开的实施例的用于支持智能合约的区块链的测试方法开始于步骤S1110。
在步骤S1110中,针对所述智能合约的代码,检测变量以获得所述变量的信息。
接下来,在步骤S1120中,根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,还包括针对所述日志信息生成针对所述智能合约的调试信息的步骤。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,当所述智能合约的函数被调用时,执行所注入的事件以记录所述日志信息。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,检测变量的步骤进一步包括:使用抽象语法分析生成所述智能合约的语法树;分析所述语法树以提取所有变量;以及根据所述变量的信息确定所述变量在所述代码中的行号。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,还包括定义所述事件的步骤,所述事件包括第一事件和第二事件,其中所述第一事件用于记录所述变量的变化,所述第二事件用于记录所述函数的执行轨迹。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,还包括修改针对所述智能合约的测试平台的日志记录机制使其在代码执行过程中发生异常时记录所述日志信息的步骤。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,还包括利用所注入的第二事件逐步调试所述代码的步骤。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,所述记录所述变量的变化的步骤进一步包括记录所述变量的名称和记录所述变量的值的步骤。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,所述日志信息被存储到所述区块链或离线文件。
根据本公开的一个实施例的用于支持智能合约的区块链的测试方法,所述变量的信息包括所述变量的位置的偏移量。
使用根据本公开的用于支持智能合约的区块链的测试方法可以在很大程度上提高智能合约开发者的效率,并且可以单独做成一个工具或者集成到现有开发工具中。
根据本公开的实施例的用于支持智能合约的区块链的测试方法的上述步骤的各种具体实施方式前面已经作过详细描述,在此不再重复说明。
显然,根据本公开的用于支持智能合约的区块链的测试方法的各个操作过程可以以存储在各种机器可读的存储介质中的计算机可执行程序的方式实现。
而且,本公开的目的也可以通过下述方式实现:将存储有上述可执行程序代码的存储介质直接或者间接地提供给系统或设备,并且该系统或设备中的计算机或者中央处理单元(CPU)读出并执行上述程序代码。此时,只要该系统或者设备具有执行程序的功能,则本公开的实施方式不局限于程序,并且该程序也可以是任意的形式,例如,目标程序、解释器执行的程序或者提供给操作系统的脚本程序等。
上述这些机器可读存储介质包括但不限于:各种存储器和存储单元,半导体设备,磁盘单元例如光、磁和磁光盘,以及其他适于存储信息的介质等。
另外,计算机通过连接到因特网上的相应网站,并且将依据本公开的计算机程序代码下载和安装到计算机中然后执行该程序,也可以实现本公开的技术方案。
图12为其中可以实现根据本公开的实施例的用于支持智能合约的区块链的测试装置和方法的通用个人计算机1300的示例性结构的框图。
如图12所示,CPU 1301根据只读存储器(ROM)1302中存储的程序或从存储部分1308加载到随机存取存储器(RAM)1303的程序执行各种处理。在RAM 1303中,也根据需要存储当CPU 1301执行各种处理等等时所需的数据。CPU 1301、ROM 1302和RAM 1303经由总线1304彼此连接。输入/输出接口1305也连接到总线1304。
下述部件连接到输入/输出接口1305:输入部分1306(包括键盘、鼠标等等)、输出部分1307(包括显示器,比如阴极射线管(CRT)、液晶显示器(LCD)等,以及扬声器等)、存储部分1308(包括硬盘等)、通信部分1309(包括网络接口卡比如LAN卡、调制解调器等)。通信部分1309经由网络比如因特网执行通信处理。根据需要,驱动器1310也可连接到输入/输出接口1305。可拆卸介质1311比如磁盘、光盘、磁光盘、半导体存储器等等根据需要被安装在驱动器1310上,使得从中读出的计算机程序根据需要被安装到存储部分1308中。
在通过软件实现上述系列处理的情况下,从网络比如因特网或存储介质比如可拆卸介质1311安装构成软件的程序。
本领域的技术人员应当理解,这种存储介质不局限于图12所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质1311。可拆卸介质1311的例子包含磁盘(包含软盘(注册商标))、光盘(包含光盘只读存储器(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)(注册商标))和半导体存储器。或者,存储介质可以是ROM 1302、存储部分1308中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。
在本公开的系统和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
以上虽然结合附图详细描述了本公开的实施例,但是应当明白,上面所描述的实施方式只是用于说明本公开,而并不构成对本公开的限制。对于本领域的技术人员来说,可以对上述实施方式作出各种修改和变更而没有背离本公开的实质和范围。因此,本公开的范围仅由所附的权利要求及其等效含义来限定。
关于包括以上实施例的实施方式,还公开下述的附记:
附记1.一种用于支持智能合约的区块链的测试装置,包括:
变量检测单元,其被配置成针对所述智能合约的代码,检测变量以获得所述变量的信息;以及
事件注入单元,其被配置成根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
附记2.根据附记1所述的测试装置,还包括生成单元,所述生成单元被配置成针对所述日志信息生成针对所述智能合约的调试信息。
附记3.根据附记1或2所述的测试装置,还包括执行单元,所述执行单元被配置成在所述智能合约的函数被调用时执行所注入的事件以记录所述日志信息。
附记4.根据附记3所述的测试装置,其中,所述变量检测单元进一步被配置成:
使用抽象语法分析生成所述智能合约的语法树;
分析所述语法树以提取所有变量;以及
根据所述变量的信息确定所述变量在所述代码中的行号。
附记5.根据附记4所述的测试装置,还包括定义单元,所述定义单元被配置成定义所述事件,所述事件包括第一事件和第二事件,其中所述第一事件用于记录所述变量的变化,所述第二事件用于记录所述函数的执行轨迹。
附记6.根据附记3所述的测试装置,还包括修改单元,所述修改单元被配置成修改针对所述智能合约的测试平台的日志记录机制,使其在代码执行过程中发生异常时记录所述日志信息。
附记7.根据附记5所述的测试装置,还包括调试单元,所述调试单元被配置成利用所注入的第二事件逐步调试所述代码。
附记8.根据附记1所述的测试装置,其中,所述变量的信息包括所述变量的位置的偏移量。
附记9.根据附记5所述的测试装置,其中,所述记录所述变量的变化包括记录所述变量的名称和记录所述变量的值。
附记10.根据附记5所述的测试装置,其中,所述日志信息被存储到所述区块链或离线文件。
附记11.一种用于支持智能合约的区块链的测试方法,包括:
针对所述智能合约的代码,检测变量以获得所述变量的信息;以及
根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
附记12.根据附记11所述的测试方法,还包括针对所述日志信息生成针对所述智能合约的调试信息。
附记13.根据附记11或12所述的测试方法,其中,当所述智能合约的函数被调用时,执行所注入的事件以记录所述日志信息。
附记14.根据附记13所述的测试方法,其中,检测变量包括:使用抽象语法分析生成所述智能合约的语法树;
分析所述语法树以提取所有变量;以及
根据所述变量的信息确定所述变量在所述代码中的行号。
附记15.根据附记14所述的测试方法,还包括定义所述事件,所述事件包括第一事件和第二事件,其中所述第一事件用于记录所述变量的变化,所述第二事件用于记录所述函数的执行轨迹。
附记16.根据附记12所述的测试方法,还包括修改针对所述智能合约的测试平台的日志记录机制,使其在代码执行过程中发生异常时记录所述日志信息。
附记17.根据附记15所述的测试方法,还包括利用所注入的第二事件逐步调试所述代码。
附记18.根据附记15所述的测试方法,其中,所述记录所述变量的变化包括记录所述变量的名称和记录所述变量的值。
附记19.根据附记15所述的测试方法,其中,所述日志信息被存储到所述区块链或离线文件。
附记20.一种程序产品,包括存储在其中的机器可读指令代码,其中,所述指令代码当由计算机读取和执行时,能够使所述计算机执行根据附记11-19中任何一项所述的测试方法。
Claims (10)
1.一种用于支持智能合约的区块链的测试装置,包括:
变量检测单元,其被配置成针对所述智能合约的代码,检测变量以获得所述变量的信息;以及
事件注入单元,其被配置成根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
2.根据权利要求1所述的测试装置,还包括生成单元,所述生成单元被配置成针对所述日志信息生成针对所述智能合约的调试信息。
3.根据权利要求1或2所述的测试装置,还包括执行单元,所述执行单元被配置成在所述智能合约的函数被调用时执行所注入的事件以记录所述日志信息。
4.根据权利要求3所述的测试装置,其中,所述变量检测单元进一步被配置成:
使用抽象语法分析生成所述智能合约的语法树;
分析所述语法树以提取所有变量;以及
根据所述变量的信息确定所述变量在所述代码中的行号。
5.根据权利要求4所述的测试装置,还包括定义单元,所述定义单元被配置成定义所述事件,所述事件包括第一事件和第二事件,其中所述第一事件用于记录所述变量的变化,所述第二事件用于记录所述函数的执行轨迹。
6.根据权利要求3所述的测试装置,还包括修改单元,所述修改单元被配置成修改针对所述智能合约的测试平台的日志记录机制,使其在代码执行过程中发生异常时记录所述日志信息。
7.根据权利要求5所述的测试装置,还包括调试单元,所述调试单元被配置成利用所注入的第二事件逐步调试所述代码。
8.根据权利要求1所述的测试装置,其中,所述变量的信息包括所述变量的位置的偏移量。
9.一种用于支持智能合约的区块链的测试方法,包括:
针对所述智能合约的代码,检测变量以获得所述变量的信息;以及
根据所述变量的信息,自动注入事件以获得针对所述变量的变化的日志信息。
10.一种机器可读存储介质,其上携带有程序产品,所述程序产品包括存储在其中的机器可读指令代码,其中,所述指令代码当由计算机读取和执行时,能够使所述计算机执行根据权利要求9所述的测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810653968.2A CN110633199A (zh) | 2018-06-22 | 2018-06-22 | 用于支持智能合约的区块链的测试装置、方法及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810653968.2A CN110633199A (zh) | 2018-06-22 | 2018-06-22 | 用于支持智能合约的区块链的测试装置、方法及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110633199A true CN110633199A (zh) | 2019-12-31 |
Family
ID=68967989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810653968.2A Pending CN110633199A (zh) | 2018-06-22 | 2018-06-22 | 用于支持智能合约的区块链的测试装置、方法及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110633199A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352835A (zh) * | 2020-02-25 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 一种智能合约的测试方法、装置、设备及存储介质 |
CN112819621A (zh) * | 2021-01-22 | 2021-05-18 | 支付宝(杭州)信息技术有限公司 | 一种智能合约资损测试方法及系统 |
CN113419821A (zh) * | 2021-07-09 | 2021-09-21 | 杭州复杂美科技有限公司 | evm合约调试方法、计算机设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955426A (zh) * | 2014-04-21 | 2014-07-30 | 中国科学院计算技术研究所 | 一种检测c代码空指针引用的方法及系统 |
CN105893042A (zh) * | 2016-03-31 | 2016-08-24 | 北京航空航天大学 | 一种基于区块链的智能合约的实现方法 |
CN107329888A (zh) * | 2017-05-31 | 2017-11-07 | 深圳前海微众银行股份有限公司 | 智能合约操作码覆盖率计算方法和系统 |
CN107402875A (zh) * | 2017-07-31 | 2017-11-28 | 深圳市金立通信设备有限公司 | 一种日志记录方法、终端及计算机可读存储介质 |
CN107770154A (zh) * | 2017-09-22 | 2018-03-06 | 中国科学院信息工程研究所 | 基于云存储的区块链可靠数据存储方法、终端及系统 |
CN107908513A (zh) * | 2017-11-14 | 2018-04-13 | 郑州云海信息技术有限公司 | 一种存储介质和存储设备性能的测试方法、装置及设备 |
US20180137465A1 (en) * | 2016-11-11 | 2018-05-17 | International Business Machines Corporation | Smart contract admission check and fault tolerance in a blockchain |
CN108073513A (zh) * | 2017-04-21 | 2018-05-25 | 富士通株式会社 | 对基于区块链的智能合约进行测试的装置和方法 |
-
2018
- 2018-06-22 CN CN201810653968.2A patent/CN110633199A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955426A (zh) * | 2014-04-21 | 2014-07-30 | 中国科学院计算技术研究所 | 一种检测c代码空指针引用的方法及系统 |
CN105893042A (zh) * | 2016-03-31 | 2016-08-24 | 北京航空航天大学 | 一种基于区块链的智能合约的实现方法 |
US20180137465A1 (en) * | 2016-11-11 | 2018-05-17 | International Business Machines Corporation | Smart contract admission check and fault tolerance in a blockchain |
CN108073513A (zh) * | 2017-04-21 | 2018-05-25 | 富士通株式会社 | 对基于区块链的智能合约进行测试的装置和方法 |
CN107329888A (zh) * | 2017-05-31 | 2017-11-07 | 深圳前海微众银行股份有限公司 | 智能合约操作码覆盖率计算方法和系统 |
CN107402875A (zh) * | 2017-07-31 | 2017-11-28 | 深圳市金立通信设备有限公司 | 一种日志记录方法、终端及计算机可读存储介质 |
CN107770154A (zh) * | 2017-09-22 | 2018-03-06 | 中国科学院信息工程研究所 | 基于云存储的区块链可靠数据存储方法、终端及系统 |
CN107908513A (zh) * | 2017-11-14 | 2018-04-13 | 郑州云海信息技术有限公司 | 一种存储介质和存储设备性能的测试方法、装置及设备 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352835A (zh) * | 2020-02-25 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 一种智能合约的测试方法、装置、设备及存储介质 |
CN111352835B (zh) * | 2020-02-25 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 一种智能合约的测试方法、装置、设备及存储介质 |
CN112819621A (zh) * | 2021-01-22 | 2021-05-18 | 支付宝(杭州)信息技术有限公司 | 一种智能合约资损测试方法及系统 |
CN112819621B (zh) * | 2021-01-22 | 2021-09-24 | 支付宝(杭州)信息技术有限公司 | 一种智能合约资损测试方法及系统 |
CN113419821A (zh) * | 2021-07-09 | 2021-09-21 | 杭州复杂美科技有限公司 | evm合约调试方法、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Tomassi et al. | Bugswarm: Mining and continuously growing a dataset of reproducible failures and fixes | |
US7503037B2 (en) | System and method for identifying bugs in software source code, using information from code coverage tools and source control tools to determine bugs introduced within a time or edit interval | |
Muccini et al. | Using software architecture for code testing | |
Duraes et al. | Emulation of software faults: A field data study and a practical approach | |
US9465718B2 (en) | Filter generation for load testing managed environments | |
CN110554965B (zh) | 自动化模糊测试方法及相关设备、计算机可读存储介质 | |
US8776029B2 (en) | System and method of software execution path identification | |
Mariani et al. | Dynamic detection of cots component incompatibility | |
CN111756575A (zh) | 存储服务器的性能分析方法及装置、电子设备 | |
Nayrolles et al. | JCHARMING: A bug reproduction approach using crash traces and directed model checking | |
CN106909510A (zh) | 一种获取测试用例的方法以及服务器 | |
CN103049371A (zh) | Android应用程序测试方法和测试装置 | |
CN102243609A (zh) | 一种基于嵌入式软件的测试分析方法及系统 | |
CN110543420B (zh) | 一种软件测试方法、系统、终端及存储介质 | |
CN110633199A (zh) | 用于支持智能合约的区块链的测试装置、方法及介质 | |
CN110688313B (zh) | 一种VxWorks操作系统下软件测试的故障注入方法 | |
CN112433948A (zh) | 一种基于网络数据分析的仿真测试系统及方法 | |
CN109857637A (zh) | 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置 | |
CN110704315B (zh) | 一种嵌入式软件测试的故障注入装置 | |
CN115470138A (zh) | 一种基于不同调试级别交叉验证的调试器缺陷检测方法 | |
CN111813672A (zh) | 一种针对多种处理器架构的非侵入式覆盖率统计方法 | |
CN107480048A (zh) | 测试工具生成方法、装置、存储介质及计算机设备 | |
CN112612697A (zh) | 一种基于字节码技术的软件缺陷测试定位方法及系统 | |
US10229029B2 (en) | Embedded instruction sets for use in testing and error simulation of computing programs | |
Stojkovski | Thresholds for software quality metrics in open source android projects |
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: 20191231 |