CN112884475A - 一种智能合约资损监控系统的测试方法及系统 - Google Patents
一种智能合约资损监控系统的测试方法及系统 Download PDFInfo
- Publication number
- CN112884475A CN112884475A CN202110086391.3A CN202110086391A CN112884475A CN 112884475 A CN112884475 A CN 112884475A CN 202110086391 A CN202110086391 A CN 202110086391A CN 112884475 A CN112884475 A CN 112884475A
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- test
- variables
- monitoring system
- variable
- 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
- 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/382—Payment protocols; Details thereof insuring higher security of transaction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Accounting & Taxation (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本申请公开了一种智能合约资损监控系统的测试方法及系统,所述方法包括:获取测试用智能合约;对所述智能合约中与资金处理相关的变量和/或代码进行修改,得到变异智能合约;确定测试变量及其取值,向所述变异智能合约中的所述测试变量输入所述取值,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理并得到资损监控结果;获取所述智能合约资损监控系统的资损监控结果,基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,直至满足预设的测试终止条件。通过不断对资损监控系统进行测试,能充分验证资损监控系统的完备性和正确性。
Description
技术领域
本说明书实施例涉及区块链技术领域,特别涉及一种智能合约资损监控系统的测试方法及系统。
背景技术
智能合约是指由计算机程序定义并自动执行的承诺协议,其可以部署于区块链网络中的节点上,运行在虚拟机环境中。由于智能合约天生具有金融属性,因此,当智能合约存在缺陷时,其在执行的交易时可能会导致资金损失(即资损)。
通常,可以通过资损监控系统对智能合约执行产生的交易数据进行处理,以监控智能合约的执行是否发生了资损。因此,有必要提出一种智能合约资损监控系统的测试方法,以测试资损监控系统的完备性和有效性,保证正式应用的资损监控系统能准确判断合约是否发生了资损。
发明内容
本说明书实施例的一个方面提供一种智能合约资损监控系统的测试方法,所述资损监控系统用于基于智能合约执行而产生的交易数据进行资损监控,所述方法包括:获取测试用智能合约;确定所述智能合约中与资金处理相关的变量和/或代码,并对所述变量和/或代码进行修改,得到变异智能合约;确定测试变量及其取值,向所述变异智能合约中的所述测试变量输入所述取值,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理并得到资损监控结果;获取所述智能合约资损监控系统的资损监控结果,基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,直至满足预设的测试终止条件。
本说明书实施例的一个方面提供一种智能合约资损监控系统的测试系统,所述资损监控系统用于基于智能合约执行而产生的交易数据进行资损监控,所述系统包括:获取模块,用于获取测试用智能合约;变异模块,用于确定所述智能合约中与资金处理相关的变量和/或代码,并对所述变量和/或代码进行修改,得到变异智能合约;触发模块,用于确定测试变量及其取值,向所述变异智能合约中的所述测试变量输入所述取值,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理并得到资损监控结果;测试调整模块,用于获取所述智能合约资损监控系统的资损监控结果,基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,直至满足预设的测试终止条件。
本说明书实施例的一个方面提供一种智能合约资损监控系统的测试装置,包括至少一个存储介质和至少一个处理器,所述至少一个存储介质用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令以实现如前任一项所述的方法。
附图说明
本说明书将以示例性实施例的方式进一步描述,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
图1是根据本说明书的一些实施例所示的区块链网络的示例性示意图;
图2是根据本说明书的一些实施例所示的智能合约资损监控系统的测试方法的流程图;
图3是根据本说明书的一些实施例所示的确定与资金处理相关的变量和/或代码的流程图;
图4是根据本说明书的一些实施例所示的再次产生交易数据供智能合约资损监控系统处理的流程图;
图5是根据本说明书的一些实施例所示的智能合约资损监控系统的测试系统的模块图。
具体实施方式
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
应当理解,本说明书中所使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
资损监控可以是监控区块链的智能合约的执行是否发生了资损的过程。区块链是分布式、去中心化的数据库,区块链的数据具有不可纂改、全程留痕、可以追溯等特点,被应用于各个数据存证场景。智能合约是指是由计算机程序定义并自动执行的承诺协议。智能合约可以部署于区块链网络中的节点上,运行在虚拟机环境中。智能合约由合约开发者编写并部署,智能合约开发者可以根据需求编写智能合约。智能合约被成功部署后,节点可以接收调用智能合约的交易,并对已部署的智能合约进行执行(调用)。虚拟机是指通过软件模拟的具有完整硬件系统功能的、运行在一个隔离环境中的完整计算机系统。在一些实施例中,虚拟机可以包括但不限于以太坊虚拟机(Embedded Virtural Machine,EVM)、EOS虚拟机(Web Assembly,WASM)、比原链虚拟机(Bottos Virtural Machine,BVM)等。
在一些实施例中,可以采用资损监控系统,从区块链上获取智能合约运行产生的交易数据,并通过一系列资损监控规则(如人工制定的)来判断是否造成了资金损失。可以理解,能否及时监测智能合约在执行交易时是否产生资损,在较大程度上依赖于这些规则是否全面或有效。
为此,本说明书实施例提出一种智能合约资损监控系统的测试方法,通过对智能合约中与资金处理相关的变量和/或代码进行修改,得到变异智能合约,并基于资损监控系统对变异智能合约执行产生的交易数据进行处理,可以确定资损监控系统能否正确判断智能合约出现资损,进而实现资损监控系统的完备性和有效性的测试。同时,通过多次修改智能合约、和/或调整测试变量和/或其取值,再次产生交易数据供智能合约资损监控系统处理,可以高效的生成各种资损场景来验证资损监控系统的完备性和有效性,对资损监控系统测试的更加充分准确。
图1是根据本说明书的一些实施例所示的区块链网络的示例性示意图。
如图1所示,区块链网络100可以包括多个区块链节点110和网络120。在一些实施例中,区块链网络100可以是测试用区块链网络,是由合约开发者为了测试智能合约(例如,测试智能合约是否会发生资损)和/或测试资损监控系统(例如,测试资损监控系统的完备性和准确性)搭建的区块链环境,其与正式部署应用的区块链网络结构相同,运行机制也相同。可以理解的,由于测试用区块链网络并未真正上线应用,区块链的数据并不是真实使用的,因此,测试用区块链网络的数据是可以更改的。
较为一般的,在区块链中,多个区块链节点110中的每个包括对应的虚拟机。任一节点可以接收上传的合约部署交易,并在运行共识机制后存储相应的智能合约。相应的,任一节点可以接收上传至链(或在链上广播)的合约执行交易,并在运行共识机制后调用(或执行)相应的智能合约以完成交易的执行,交易以及交易执行的结果被写入区块保存到区块链数据中。例如,区块链节点110可以接收测试变量和/或其取值,调用相应的智能合约以完成交易的执行,执行产生的交易数据被写入区块保存到区块链数据中。
共识机制是区块链网络正常运行的必要组件,用于保证各节点保存的区块链数据维持一致。多个节点可以通过运行共识协议,对接收(对应代码的输入)、产生(对应代码的输出或中间结果)的数据和/或执行的操作达成一致,参与共识的节点可称为共识节点。例如,对于新区块涉及的多个交易,各共识节点可以通过运行共识协议对所述多个交易的执行顺序达成一致。
区块链数据(也可称为链上数据)可包括通过共识的区块数据和状态数据(也可称为全局状态或世界状态),区块链数据的写入也被叫作上链。其中,区块数据包括持续生成且按时序链接的区块,各共识节点可通过运行共识协议将新区块上链。共识通过意味着每个共识节点可将相同的新区块写入区块链数据。仅作为示例,在一些实施例中,共识通过的条件包括超过预设比例(如2/3)的共识节点同意将新区块上链。状态数据可包括关联于各账户的状态变量,例如,个人、组织控制的外部账户的余额,又如,合约账户的合约状态。
值得说明的是,区块链具有公开透明的特性,因此,任一节点可以获得区块链网络中广播的交易,如果将对账方的账目数据以明文形式放入对账交易中,可能存在泄密风险。有鉴于此,在一些实施例中,可以将交易数据(如第一经营流水)以密文形式上传区块链,经授权的数据使用方(如投资方)可以使用数据来源方提供的密钥对从链上获取的相应数据解密。
在一些实施例中,区块链节点110可以是各类计算设备,如膝上型计算机、台式计算机、服务器等等。
网络120可以连接区块链网络100的各组成部分,使得各部分之间可以进行通讯。例如,接收交易的节点可以通过网络120在链上广播该交易,又例如,共识节点可以通过网络120完成共识。
网络120可以包括电缆网络、有线网络、光纤网络、电信网络、内部网络、互联网、局域网络(LAN)、广域网络(WAN)、无线局域网络(WLAN)、城域网(MAN)、公共交换电话网络(PSTN)、蓝牙网络、紫蜂网络(ZigBee)、近场通信(NFC)、设备内总线、设备内线路、线缆连接等或其任意组合。
在一些实施例中,资损监控系统可以部署在独立于区块链的处理设备(如资损监控服务器)上,该处理设备可以与区块链具有通信连接,具体可以与区块链某节点具有通信连接,处理设备可以通过监测并拉取链上产生的区块数据,得到智能合约执行交易后产生的交易数据,进行资损监控。在一些实施例中,处理设备也可以是区块链的节点。
图2是根据本说明书的一些实施例所示的智能合约资损监控系统的测试方法的流程图。资损监控系统可以用于基于智能合约执行而产生的交易数据进行资损监控,资损监控即监控智能合约的执行是否发生了资损。关于资损监控系统进行资损监控的具体细节可以参见步骤206及其相关描述,在此不再赘述。如图2所示,该流程200包括如下步骤:
步骤202,获取测试用智能合约。在一些实施例中,步骤202可以由获取模块510执行。
在一些实施例中,测试用智能合约可以是用于测试资损监控系统的智能合约,测试资损监控系统也即测试资损监控系统能否准确监测智能合约的执行是否发生了资损。智能合约是合约开发者按照需求编写的可由计算机执行的程序。智能合约可以通过高级语言编写而成,例如,C语言、C++语言、java语言或VC++语言等。
在一些实施例中,智能合约可以包含一组代码,一组代码可以包括多个代码段,即智能合约可以包括多个代码段。代码段是指一组代码中的由一行或多行代码组成的代码片段,一个代码段可以对应智能合约中的一个指令或一个功能。
在一些实施例中,智能合约中的不同代码段可以实现不同的指令或功能。例如,智能合约的一个代码段A:FILE*p_file=fopen("1.txt","w")实现读取文件的功能,智能合约的另一个代码段B:if(p_file){for(num=0;num<=4;num++){fprintf(p_file,“%d-”,arr[num]);}实现存储数据的功能,其中p_file表示文件指针。
在一些实施例中,测试用智能合约部署于测试用区块链网络的节点上。测试用区块链网络可以是合约开发者预先搭建的区块链环境,用于进行智能合约的测试,和/或进行资损监控系统的测试。测试用区块链网络与正式上线应用的区块链网络的结构及工作机制相同。可以理解的,由于测试用区块链网络并未真正上线应用,区块链的数据并不是真实使用的,因此,测试用区块链网络中的区块链数据是可以更改的,例如,可以不断的对测试用智能合约进行变异,得到新的智能合约(或称为变异智能合约),并部署到测试用区块链上。关于区块链网络的更多细节可以参见图1及其相关描述,在此不再赘述。
在一些实施例中,获取模块510可以从存储区块链智能合约相关数据的空间中获取测试用智能合约,也可以通过终端上传获取测试用智能合约。本说明书实施例并不对测试用智能合约的获取方式做任何限制。
步骤204,确定所述智能合约中与资金处理相关的变量和/或代码,并对所述变量和/或代码进行修改,得到变异智能合约。在一些实施例中,步骤204可以由变异模块520执行。
在一些实施例中,变量是指能够存储或代表智能合约中参与运算或处理的数据的抽象概念。变量可以包括变量值、变量名称、变量类型等要素。变量的变量值(或称为取值)可以变化,可以通过变量名称查看变量或更改变量值,不同类型的变量可以存储不同类型的数据。例如,可以在智能合约中创建一个名为Click Count的变量,用于存储用户访问某个文件的次数,Click Count的取值即表示次数。在一些实施例中,智能合约可以具有不同类型的变量,例如指针类变量,整型类变量。
在一些实施例中,与资金处理相关的变量可以包括资金转账操作或者资金金额运算涉及的变量。字段可以理解为描述某一特征或对象的数据项。在一些实施例中,可以基于区块链涉及的用户(或资金账户)的转账操作相关的字段确定资金转账操作涉及的变量。例如,用户A向用户B转账,则资金转账操作涉及的变量可以包括“from”字段、“to”字段以及“value”字段等字段对应的变量;其中,“from”字段表示转账发起者,其内容可以是“用户A”的账户地址;“to”字段表示转账接收者,如“用户B”的账户地址,“value”字段表示转账金额。在一些实施例中,字段与变量可以互换。
对应的,资金金额运算涉及的变量可以基于与资金金额计算相关的字段确定。例如,用户的余额计算、转账的手续费计算、转账的汇率计算等。仍以上述示例为例,若智能合约的字段“bal”表征用户A的余额,则资金金额运算涉及的变量可以包括字段“bal”对应的变量。可以理解的,资金转账操作一般会导致资金金额的变化,即包括资金金额运算,因此,在一些实施例中,资金转账操作涉及的变量可以包括资金金额运算涉及的变量。
在一些实施例中,与资金处理相关的代码可以包括实现资金转账操作或者资金金额运算的代码。在一些实施例中,与资金处理相关的代码可以是一行或多行代码,多行代码可以是智能合约中相同或不同代码段包括的代码。一般地,一行代码可以是一句指令,指令包括操作码和操作数。操作码表示该指令应进行什么操作,操作数表示指令的操作对象。操作数可以包括如下类型:整型、字符型、浮点型、数组、指针类型等。
在一些实施例中,变异模块520可以基于资损核对规则和数据流分析技术确定智能合约中与资金处理相关的变量和/或代码。关于确定智能合约中与资金处理相关的变量和/或代码的具体细节可以参见图3及其相关描述,在此不再赘述。
在一些实施例中,变异模块520可以对测试用智能合约中的变量和/或代码修改或变异,得到变异智能合约。在一些实施例中,变异模块520还可以对确定的与资金处理相关的变量和/或代码进行标记。例如,利用不同颜色进行标记或利用不同字体进行标记等。在一些实施例中,可以将标记后的变异智能合约称为染色变异智能合约。
在一些实施例中,对变量和/或代码进行修改可以包括以下中的一种或多种的组合:对与资金处理相关的变量重新赋值和对与资金处理相关的代码中包括的运算操作进行变异;其中,变异至少包括:增加运算操作、减少运算操作或更换运算操作。
在一些实施例中,重新赋值可以是指对与资金处理相关的变量赋予新的值,例如可以对所述变量赋予边界值。边界值可以包括存储单元的边界值和/或判断语句的边界值。例如,仍以上述与资金处理相关的变量(字段)“bal”表征用户A的余额为例,变量“bal”的存储单元为16位,其原有的取值为20000,则可以在其被存储至合约世界状态之前对其赋予存储单元边界值“bal=65535”,其中,65535为变量的存储单元16位整数的极值(即边界值,即216-1)。又例如,若与资金处理相关的变量(字段)“bal”表征用户A的余额,其涉及判断语句“ifbal>50000,…”,则可以对变量“bal”赋予边界值50000。
在一些实施例中,运算操作可以包括数学运算操作,其通常会使用各种运算符号(例如,+、-、*、/)来进行运算。因此,对与资金处理相关的代码中包括的运算操作进行变异可以是对与资金处理相关的代码中包括的运算符号进行变异。
变异至少包括:增加运算操作、减少运算操作或更换运算操作。例如,以与资金处理相关的代码为“bal=bal+b”为例,其表征用户A接收转账金额b后的账户余额,则可以对其增加运算操作,得到“bal=bal+b+b”;也可以对其减少运算操作,即省去“bal=bal+b”这步运算;也可以对其更换运算操作,即将+运算替换为-运算,得到“bal=bal-b”。可以理解的,对运算操作进行变异应当保证最终得到的变异智能合约能够正常通过编译或语法检查,以便基于其执行产生的交易数据对资损监控系统进行测试。本说明书实施例通过对测试用智能合约中与资金处理相关的变量和/或代码进行修改,得到变异智能合约,使得变异智能合约大概率成为能够造成资损的智能合约,进而可以通过资损监控系统处理变异智能合约执行产生的交易数据,判断资损监控系统能否准确监控该变异智能合约发生了资损,实现对资损监控系统的完备性和有效性的测试。
步骤206,确定测试变量及其取值,向所述变异智能合约中的所述测试变量输入所述取值,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理并得到资损监控结果。在一些实施例中,步骤206可以由触发模块530执行。
在一些实施例中,智能合约的输入参数亦可作为测试变量。一般来说,智能合约包括一个或多个输入参数。在调用智能合约时(如向区块链发起执行智能合约的交易时),需要给出各输入参数的具体取值,以触发智能合约执行。在一些测试场景下,可以使智能合约具有比正式上线运行时更多的输入变量,以满足不同的测试需要。通过对智能合约中的不同变量输入相应具体取值,可以触发智能合约中不同的代码段执行。
在一些实施例中,触发模块530可以随机设置变异智能合约的测试变量的取值。通过对变异智能合约中的不同测试变量输入某一具体取值,可以触发不同的代码段执行。进一步,可以不断的调整测试变量的取值,改变代码执行覆盖范围,进而触发包含修改后的变量和/或代码的代码段执行。
在一些实施例中,触发模块530可以基于预先确定的代码段与变量对应关系,确定能够触发包含修改后的变量和/或代码的代码段的测试变量及其取值。例如,首先可以随机确定变异智能合约的测试变量及其取值,然后根据向变异智能合约中的测试变量输入取值触发变异智能合约执行后获取的执行反馈信息,确定不同的测试变量与代码段的对应关系,仅作为示例,变量a可以触发代码段A,变量b、c能够触发代码段B。其中,执行反馈信息可以反映各个不同输入是否成功触发了代码段的执行、各个不同输入对应触发了哪些代码段的执行、各个不同输入触发的代码段占所有代码的占比(即代码覆盖率)等。基于所述对应关系可以直接确定能够有效触发包含修改后的变量和/或代码的代码段的测试变量及其取值,进而提高测试效率。在一些实施例中,还可以对其他计算机程序或智能合约进行多次测试,得到变量与代码段的对应关系,并参照所述对应关系,确定当前变异智能合约的测试变量及其取值。
本说明书实施例通过自动确定智能合约的测试变量,无需人工介入或仅需要很少的人工介入的情况下,通过程序自动生成智能合约的测试变量,减少了人工的劳动力,且提高了生成的测试变量的准确性。
在一些实施例中,可以向变异智能合约的所述测试变量输入所述取值,触发智能合约执行,同时确保代码执行范围能够覆盖变异智能合约中指定的代码段,如包含修改后的变量和/或代码的代码段。变异智能合约执行后可以产生交易数据。在一些实施例中,智能合约资损监控系统可以处理所述交易数据,得到资损监控结果。在一些实施例中,资损监控系统可以是运行在处理设备(例如,服务器)中,以实现资损监控功能的软件或程序。在一些实施例中,资损监控结果可以反映是否监测到资损,即是否监测到变异智能合约执行对应的交易出现资金损失。
具体的,资损监控系统可以用于:从测试用区块链网络中获取区块数据;解析区块数据得到智能合约执行产生的交易数据;基于预设核对逻辑处理交易数据,获得资损监控结果。
如前所述,区块链是一个去中心化的分布式账本数据库。其数据可以由一串使用密码学相关联所产生的数据块(即区块)存储,每个数据块(即区块)记录了一段时间内发生的交易和状态结果。因此,区块数据可以包括交易数据、账户状态数据和交易执行过程中生成的日志数据。
在一些实施例中,解析区块数据可以是指从区块数据中筛选得到交易数据。例如,智能合约涉及的多个资金账户在智能合约执行后的账户余额。又例如,多个资金账户之间的转账金额。在一些实施例中,解析区块数据得到交易数据还可以是指得到交易数据中与预设核对逻辑相关的数据。预设核对逻辑可以根据实际场景进行具体设置。在一些实施例中,预设核对逻辑可以包括平账逻辑。例如,若区块链涉及的多个资金账户之间进行转账,且并没有新的货币产生,则平账逻辑可以包括多个资金账户的账户余额与未触发此次交易(即未触发变异智能合约此次执行)之前的账户余额相同。对应的,预设核对逻辑相关的数据可以是多个资金账户在变异智能合约执行后的账户余额。
又例如,若区块链涉及的资金账户发生了支付完成事件、退款完成事件、和确认收货时结算完成事件,则平账逻辑可以是资金账户的支付金额-退款金额=结算金额。对应的,与预设核对逻辑相关的数据可以包括资金账户的支付金额、退款金额和结算金额。应当知晓的,上述仅为预设核对逻辑的示意性举例,本说明书并不对预设核对逻辑做任何限制。
在一些实施例中,资损监控系统可以基于预设核对逻辑处理交易数据,获得资损监控结果。仍以上述示例为例,资损监控系统可以获取资金账户的账户余额,以检测多个资金账户的账户余额与未触发此次交易(即未触发变异智能合约此次执行)之前的账户余额是否相同,其中,若相同,则资损监控结果为未出现资损;若不相同,则资损监控结果为出现资损。如前所述,变异智能合约是大概率能够导致资损的合约,因此,可以理解的,若资损监控结果为出现资损,则说明资损监控系统可以准确监测智能合约是否出现资损;反之,则说明资损监控系统可能不能准确监控智能合约是否出现资损,可以对资损监控系统进行更深入的测试,以获取资损监控系统更多的监控盲点。
在一些实施例中,还可以通过资损监控系统所在服务器的其他服务器,例如,资损调度服务器,从测试用区块链网络中获取区块数据,解析区块数据得到智能合约执行产生的交易数据。其中,资损调度服务器可以是区块链网络100之外的服务器,其与区块链的节点连接。
步骤208,获取所述智能合约资损监控系统的资损监控结果,基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,直至满足预设的测试终止条件。在一些实施例中,步骤208可以由测试调整模块540执行。
在一些实施例中,测试调整模块540可以基于资损监控结果,再次修改智能合约、和/或调整测试变量和/或其取值,以再次产生交易数据供智能合约资损监控系统处理。关于再次产生交易数据供智能合约资损监控系统处理的具体细节可以参见图4及其相关描述,在此不再赘述。
本说明书实施例通过资损监控结果,可以给予再次修改智能合约的修改方向和调整测试变量的取值的调整方向,通过多次产生交易数据供资损监控系统处理得到多次资损监控结果,可以生成各种造成资损的场景来验证资损监控系统的完备性和准确性,从而实现充分测试资损监控系统。
在一些实施例中,预设的测试终止条件可以与得到的预设次数(例如,10次、20次)的资损监控结果相关。例如,预设的测试终止条件可以是:资损监控系统对变异智能合约的资损监控结果反映未监测到资损,或资损监控系统对变异智能合约和多个修改后的变异智能合约得到的交易数据,处理得到预设次数(例如,10次、20次)的资损监控结果均反映未监测到资损。由于变异智能合约和修改后的变异智能合约均为大概率可能导致资损的智能合约,因此,资损监控系统若监测不出该类型智能合约出现资损时,则证明资损监控系统有问题,其存在不完备和不准确的缺陷,变异智能合约和修改后的变异智能合约对应的资损场景是资损监控系统的监测盲点,此时可以停止测试并上报资损监控系统的问题,以便后续对资损监控系统的优化处理。可以理解的,确定多个监测盲点后再停止测试并上报,可以便于后续统一对资损监控系统的多个监测盲点进行优化处理,提升资损监控系统的优化效率。
又例如,预设的测试终止条件可以是:对变异智能合约和多个修改后的变异智能合约执行产生的交易数据,处理得到的预设次数(例如,10次、20次)的资损监控结果均反映监测到资损,则可以认为资损监控系统每次都能监测出该类型智能合约出现资损,证明资损监控系统没有问题,可以停止测试。在实际应用场景中,测试终止条件还可以是其他设定的条件,本说明书对此不作任何限制。
图3是根据本说明书的一些实施例所示的确定与资金处理相关的变量和/或代码的流程图。如图3所示,该流程300可以包括步骤302和步骤304。在一些实施例中,步骤302和步骤304可以由变异模块520执行。
步骤302,基于资损核对规则中与资金处理相关的字段记录,确定所述智能合约中与资金处理相关的一个或多个变量。
在一些实施例中,资损核对规则可以包括对资损核对逻辑以及相关字段的描述,可以根据实际需求进行具体设置。在一些实施例中,资损核对规则可以与预设核对逻辑相关。例如,资损核对规则可以包括预设核对逻辑。关于预设核对逻辑的具体描述可以参见上述步骤210及其相关描述,在此不再赘述。
在一些实施例中,与资金处理相关的字段记录可以包括字段的名称、属性、数值类型(例如,实型、整型等)等记录或描述信息。示例性地,以资损核对规则包括平账逻辑为例,则可以基于平账逻辑中与资金处理相关的字段记录,确定一个或多个变量。例如,资损核对规则中包含“目的账户”这一字段,则可以确定智能合约中与“目的账户”字段对应的变量“T-account”为与资金处理相关的变量。
步骤304,基于所述一个或多个变量,利用数据流分析技术确定所述智能合约中与资金处理相关的其他变量和/或代码。
在一些实施例中,数据流分析技术可以是识别与变量相关的其他变量和/或代码的方式。通过数据流分析,可以不必实际运行程序就能够发现程序运行时的行为。具体的,可以首先确定智能合约中的起点(如步骤302确定的某个变量)并对其进行标记;然后前向或后向确定起点数据依赖“代码路径”,得到与起点数据具有依赖和被依赖关系的变量或代码集合。示例性地,步骤302确定与资金处理相关的变量为账户A的余额,将账户A的余额作为起点数据并在智能合约中对其进行标记,通过数据流分析,确定出与该账户余额所涉及的变量和/或代码还包括账户A向账户B转账的账户B的余额、对账户A转出金额进行汇率转换的代码、记录汇率转换结果的变量以及实现转账操作的代码,进一步可以汇率转换结果作为另一个起点再次进行数据流分析,依次类推,最终确定出智能合约中与资金处理相关的所有变量和/或代码。
图4是根据本说明书的一些实施例所示的再次产生交易数据供智能合约资损监控系统处理的流程图。如图4所示,该流程400可以包括步骤402和步骤404。在一些实施例中,步骤402和步骤404可以由测试调整模块540执行。
步骤402,若所述资损监控结果反映监测到资损,则调整所述测试变量中至少一个的取值,得到调整后的测试变量的取值,以增加与资金处理相关的变量和/或代码的执行覆盖率,或增加与资金处理相关的变量和/或代码的程序行为覆盖率。
如前所述,变异智能合约为大概率可能导致资损的智能合约,当资损监控系统的资损监控结果反映监测到资损时,可以证明资损监控系统是有效的。由于此前确定的测试变量及其取值可能只触发包含部分修改后的变量和/或代码的代码段执行。因此,为了使变异智能合约执行所有修改后的变量和/或代码的代码段,以全面测试资损监控系统。在一些实施例中,测试调整模块540可以调整测试变量中至少一个的取值,得到调整后的测试变量的取值,以增加与资金处理相关的变量和/或代码的执行覆盖率。
示例性的,可以对测试变量中部分或全部测试变量的取值进行变化,以再次触发智能合约执行。所述执行覆盖率可以理解为,一次测试中,被执行覆盖的代码段中,与资金处理相关的变量和/或代码的占比;或者一次测试中,被执行覆盖的与资金处理相关的变量和/或代码,占总代码的比率;又或者,已经完成的多次测试中,在各次测试中被执行覆盖的与资金处理相关的变量和/或代码的并集占总代码的比率。其中,确定智能合约各测试变量对应的具体取值,并输入以触发智能合约完成一次执行,这一过程可以看作一次测试。
除此之外,还可以改变变异智能合约中与资金处理相关的变量和/或代码的程序行为,以创造出更多的智能合约资损场景,进而对资损监控系统进行全面测试。在一些实施例中,测试调整模块540可以调整测试变量中至少一个的取值,以增加与资金处理相关的变量和/或代码的程序行为覆盖率。
程序行为可以反映执行过程中程序的变量状态或者程序执行结束后的输出数据状态。以智能合约为例,程序行为可以反映智能合约执行时其相关变量的取值状态,或者反应智能合约执行完后对世界状态的改变,例如,对世界状态中存储的变量的取值的改变。示例性地,以与资金处理相关的代码“Y=bal+b”为例,其中,bal表征用户A的当前余额,b为转账金额,且与测试变量a相关;若在第一次测试时测试变量a=1,变量b=1;若在第二次测试时测试变量a=2,变量b=0;可以认为通过改变测试变量a的取值,改变了智能合约中变量b的取值状态,进而认为改变了智能合约或智能合约中与资金处理相关的变量和/或代码的程序行为。
对应的,所述与资金处理相关的变量和/或代码的程序行为覆盖率可以与,已完成的多次测试中,与资金处理相关的变量的取值状态数量,正相关。其中,一种与资金处理相关的变量的取值组合可以被看作一种取值状态。如,第一次测试得到的与资金处理相关的变量的取值组合与第二次测试得到的与资金处理相关的变量的取值组合不同,则状态数量为2;又如,第一次测试得到的与资金处理相关的变量的取值组合与第二次测试得到的与资金处理相关的变量的取值组合不同,但与第三次测试得到的与资金处理相关的变量的取值组合相同,则状态数量依然为2。增加与资金处理相关的变量和/或代码的程序行为覆盖率可以是改变测试变量的部分或全部的取值,以至少增加与资金处理相关的变量的取值状态数量。
可以理解,代码的执行覆盖率的变化一般会导致程序行为的变化,但在一些场景中,代码的执行覆盖率不变的情况下,程序行为也可能变化。例如,当改变测试变量中部分或全部的取值后,智能合约执行时触发的代码与上一次测试相同,但是相关变量的取值状态却发生了变化。
步骤404,将调整后的测试变量的取值输入到所述变异智能合约对应的测试变量中,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理。
在一些实施例中,测试调整模块540可以将调整后的测试变量的取值输入到变异智能合约对应的测试变量中,以触发变异智能合约执行。例如,将调整后的测试变量的取值2.5输入到变异智能合约的测试变量a中,以触发变异智能合约执行。可以理解的,未调整的测试变量的取值保持上一次的取值,或为默认值。
对应的,智能合约资损监控系统可以对变异智能合约执行产生的交易数据进行处理,得到资损监控结果。关于得到资损监控结果的具体细节可以参见上述步骤206及其相关描述,在此不再赘述。
在一些替代性实施例中,测试调整模块540还可以在资损监控结果反映监测到资损时,对变异智能合约中除被修改的变量和/或代码以外的其他变量和/或其他代码进行修改;确定测试变量及其取值;将测试变量的取值输入到修改后的变异智能合约的测试变量中,以触发修改后的变异智能合约执行并产生交易数据供智能合约资损监控系统处理。
在一些实施例中,其他变量和/或其他代码可以是除被修改的变量和/或被修改的代码以外的任意变量和/或任意代码。例如,可以是与被修改后的变量和/或被修改后的代码间隔代码行数不超过设定阈值的变量和/或代码。在一些实施例中,设定阈值可以根据实际需求进行具体设置。例如,1行、3行或5行等。示例地,仍以上述变异智能合约中被修改的变量bal,被修改的代码bal=bal+b为例,则其他变量可以是除变量bal以外的任意变量,其他代码可以是除代码bal=bal+b以外的任意代码;除此之外,其他变量也可以是变量bal向上间隔3行的其他变量,其他代码可以是代码bal=bal+b向上间隔3行的其他代码。关于对其他变量和/或代码进行修改的修改方式可以参见上述步骤204及其相关描述,在此不再赘述。
在一些实施例中,可以基于预先确定的代码段与变量对应关系,确定测试变量及其取值,即确定能够触发包含修改的其他变量和/或代码的代码段的测试变量及其取值。关于确定测试变量及其取值的具体细节可以参见步骤206及其相关描述,在此不再赘述。对应的,测试调整模块540可以将测试变量的取值输入到修改后的变异智能合约对应的测试变量中,以触发修改后的变异智能合约执行并产生交易数据供智能合约资损监控系统处理,得到资损监控系统的资损监控结果。关于得到资损监控结果的具体细节可以参见上述步骤206及其相关描述,在此不再赘述。
本说明书实施例通过对变异智能合约多次进行修改,可以从造成资损的多个变异方向对资损监控系统进行测试,实现对资损监控系统的充分测试。
图5是根据本说明书的一些实施例所示的智能合约资损监控系统的测试系统的模块图。
如图5所示,该系统500可以包括获取模块510、变异模块520、触发模块530、以及测试调整模块540。
获取模块510可以用于获取测试用智能合约。在一些实施例中,所述智能合约部署于测试用区块链网络的节点上。
变异模块520可以用于确定所述智能合约中与资金处理相关的变量和/或代码,并对所述变量和/或代码进行修改,得到变异智能合约。在一些实施例中,所述与资金处理相关的变量包括资金转账操作或者资金金额运算涉及的变量,与资金处理相关的代码包括实现资金转账操作或者资金金额运算的代码。在一些实施例中,所述修改包括以下中的一种或多种的组合:对所述与资金处理相关的变量重新赋值和对所述与资金处理相关的代码中包括的运算操作进行变异;其中,所述变异至少包括:增加运算操作、减少运算操作或更换运算操作。
在一些实施例中,所述变异模块520进一步用于:基于资损核对规则中与资金处理相关的字段记录,确定所述智能合约中与资金处理相关的一个或多个变量;基于所述一个或多个变量,利用数据流分析技术确定所述智能合约中与资金处理相关的其他变量和/或代码。
触发模块530可以用于确定测试变量及其取值,向所述变异智能合约中的所述测试变量输入所述取值,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理并得到资损监控结果。
在一些实施例中,所述触发模块530进一步用于:基于预先确定的代码段与变量对应关系,确定能够触发包含修改后的变量和/或代码的代码段的测试变量及其取值。
在一些实施例中,所述资损监控系统用于:从所述测试用区块链网络中获取区块数据;解析所述区块数据得到智能合约执行产生的交易数据;基于预设核对逻辑处理所述交易数据,获得所述资损监控结果。
测试调整模块540可以用于获取所述智能合约资损监控系统的资损监控结果,基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,直至满足预设的测试终止条件。
在一些实施例中,所述测试调整模块540进一步用于:若所述资损监控结果反映监测到资损,则调整所述测试变量中至少一个的取值,得到调整后的测试变量的取值,以增加与资金处理相关的变量和/或代码的执行覆盖率,或增加与资金处理相关的变量和/或代码的程序行为覆盖率;将调整后的测试变量的取值输入到所述变异智能合约对应的测试变量中,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理。
在一些实施例中,所述测试调整模块540进一步用于:若所述资损监控结果反映监测到资损,则对所述变异智能合约中除被修改的变量和/或代码以外的其他变量和/或其他代码进行修改;确定测试变量及其取值;将所述测试变量的取值输入到修改后的变异智能合约的所述测试变量中,以触发修改后的变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理。
应当理解,图5所示的系统及其模块可以利用各种方式来实现。例如,在一些实施例中,系统及其模块可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域技术人员可以理解上述的方法和系统可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本说明书的系统及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。
需要注意的是,以上对于智能合约资损监控系统的测试系统500及其模块的描述,仅为描述方便,并不能把本说明书限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解该系统的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子系统与其他模块连接。例如,图5中披露的获取模块510、变异模块520、触发模块530、以及测试调整模块540可以是一个系统中的不同模块,也可以是一个模块实现上述的两个模块的功能。又例如,智能合约资损监控系统的测试系统500中各个模块可以共用一个存储模块,各个模块也可以分别具有各自的存储模块。诸如此类的变形,均在本说明书的保护范围之内。
本说明书实施例还提供一种智能合约资损监控系统的测试装置,包括至少一个存储介质和至少一个处理器,所述至少一个存储介质用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令以实现如前任一项所述的智能合约资损监控系统的测试方法。
本说明书实施例可能带来的有益效果包括但不限于:(1)对资损监控系统进行测试,能够有效避免由于资损监控系统的监控不当,在智能合约在实际交易处理过程中发生不可挽回的资金损失,进一步提高区块链网络的可靠性;(2)通过资损监控结果为修改智能合约、和/或调整测试变量的取值提供方向,可以高效生成各种资损场景,以充分验证资损监控系统的完备性和正确性。需要说明的是,不同实施例可能产生的有益效果不同,在不同的实施例里,可能产生的有益效果可以是以上任意一种或几种的组合,也可以是其他任何可能获得的有益效果。
上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
此外,本领域技术人员可以理解,本说明书的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、RF、或类似介质,或任何上述介质的组合。
本说明书各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、Visual Basic、Fortran2003、Perl、COBOL2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或处理设备上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(SaaS)。
此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的处理设备或移动设备上安装所描述的系统。
同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有±20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本说明书一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。
针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。
Claims (11)
1.一种智能合约资损监控系统的测试方法,所述资损监控系统用于基于智能合约执行而产生的交易数据进行资损监控,所述方法包括:
获取测试用智能合约;
确定所述智能合约中与资金处理相关的变量和/或代码,并对所述变量和/或代码进行修改,得到变异智能合约;
确定测试变量及其取值,向所述变异智能合约中的所述测试变量输入所述取值,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理并得到资损监控结果;
获取所述智能合约资损监控系统的资损监控结果,基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,直至满足预设的测试终止条件。
2.如权利要求1所述的方法,所述确定所述智能合约中与资金处理相关的变量和/或代码,包括:
基于资损核对规则中与资金处理相关的字段记录,确定所述智能合约中与资金处理相关的一个或多个变量;
基于所述一个或多个变量,利用数据流分析技术确定所述智能合约中与资金处理相关的其他变量和/或代码。
3.如权利要求1所述的方法,所述修改包括以下中的一种或多种的组合:对所述与资金处理相关的变量重新赋值和对所述与资金处理相关的代码中包括的运算操作进行变异;其中,所述变异至少包括:增加运算操作、减少运算操作或更换运算操作。
4.如权利要求1所述的方法,所述基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,包括:
若所述资损监控结果反映监测到资损,则调整所述测试变量中至少一个的取值,得到调整后的测试变量的取值,以增加与资金处理相关的变量和/或代码的执行覆盖率,或增加与资金处理相关的变量和/或代码的程序行为覆盖率;
将调整后的测试变量的取值输入到所述变异智能合约对应的测试变量中,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理。
5.如权利要求1所述的方法,所述确定测试变量及其取值,包括:
基于预先确定的代码段与变量对应关系,确定能够触发包含修改后的变量和/或代码的代码段的测试变量及其取值。
6.如权利要求5所述的方法,所述基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,包括:
若所述资损监控结果反映监测到资损,则对所述变异智能合约中除被修改的变量和/或代码以外的其他变量和/或其他代码进行修改;
确定测试变量及其取值;
将所述测试变量的取值输入到修改后的变异智能合约的所述测试变量中,以触发修改后的变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理。
7.如权利要求1所述的方法,所述智能合约部署于测试用区块链网络的节点上。
8.如权利要求7所述的方法,所述资损监控系统用于:
从所述测试用区块链网络中获取区块数据;
解析所述区块数据得到智能合约执行产生的交易数据;
基于预设核对逻辑处理所述交易数据,获得所述资损监控结果。
9.如权利要求1所述的方法,所述与资金处理相关的变量包括资金转账操作或者资金金额运算涉及的变量,与资金处理相关的代码包括实现资金转账操作或者资金金额运算的代码。
10.一种智能合约资损监控系统的测试系统,所述资损监控系统用于基于智能合约执行而产生的交易数据进行资损监控,所述系统包括:
获取模块,用于获取测试用智能合约;
变异模块,用于确定所述智能合约中与资金处理相关的变量和/或代码,并对所述变量和/或代码进行修改,得到变异智能合约;
触发模块,用于确定测试变量及其取值,向所述变异智能合约中的所述测试变量输入所述取值,以触发所述变异智能合约执行并产生交易数据供所述智能合约资损监控系统处理并得到资损监控结果;
测试调整模块,用于获取所述智能合约资损监控系统的资损监控结果,基于所述资损监控结果,再次修改智能合约、和/或调整所述测试变量中至少一个的取值,以再次产生交易数据供所述智能合约资损监控系统处理,直至满足预设的测试终止条件。
11.一种智能合约资损监控系统的测试装置,包括至少一个存储介质和至少一个处理器,所述至少一个存储介质用于存储计算机指令;所述至少一个处理器用于执行所述计算机指令以实现如权利要求1~9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110086391.3A CN112884475A (zh) | 2021-01-22 | 2021-01-22 | 一种智能合约资损监控系统的测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110086391.3A CN112884475A (zh) | 2021-01-22 | 2021-01-22 | 一种智能合约资损监控系统的测试方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112884475A true CN112884475A (zh) | 2021-06-01 |
Family
ID=76050051
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110086391.3A Pending CN112884475A (zh) | 2021-01-22 | 2021-01-22 | 一种智能合约资损监控系统的测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112884475A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080978A (zh) * | 2022-05-20 | 2022-09-20 | 南方科技大学 | 一种基于模糊测试的运行时漏洞检测方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140013164A1 (en) * | 2012-07-05 | 2014-01-09 | Electronics & Telecommunications Research Institute | Fault-based software testing method and system |
CN110162470A (zh) * | 2019-04-28 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 一种区块链的测试方法和装置 |
CN110287002A (zh) * | 2019-06-19 | 2019-09-27 | 清华大学 | 一种以太坊虚拟机缺陷检测方法及系统 |
CN111259395A (zh) * | 2020-01-16 | 2020-06-09 | 图灵人工智能研究院(南京)有限公司 | 智能合约的利用程序获取方法、装置及存储介质 |
CN111797010A (zh) * | 2020-06-23 | 2020-10-20 | 河海大学 | 一种应用改进遗传算法的智能合约测试用例生成方法 |
CN112131115A (zh) * | 2020-09-23 | 2020-12-25 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
-
2021
- 2021-01-22 CN CN202110086391.3A patent/CN112884475A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140013164A1 (en) * | 2012-07-05 | 2014-01-09 | Electronics & Telecommunications Research Institute | Fault-based software testing method and system |
CN110162470A (zh) * | 2019-04-28 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 一种区块链的测试方法和装置 |
CN110287002A (zh) * | 2019-06-19 | 2019-09-27 | 清华大学 | 一种以太坊虚拟机缺陷检测方法及系统 |
CN111259395A (zh) * | 2020-01-16 | 2020-06-09 | 图灵人工智能研究院(南京)有限公司 | 智能合约的利用程序获取方法、装置及存储介质 |
CN111797010A (zh) * | 2020-06-23 | 2020-10-20 | 河海大学 | 一种应用改进遗传算法的智能合约测试用例生成方法 |
CN112131115A (zh) * | 2020-09-23 | 2020-12-25 | 腾讯科技(深圳)有限公司 | 一种智能合约模糊测试的方法、装置及存储介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080978A (zh) * | 2022-05-20 | 2022-09-20 | 南方科技大学 | 一种基于模糊测试的运行时漏洞检测方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10657025B2 (en) | Systems and methods for dynamically identifying data arguments and instrumenting source code | |
US11194550B2 (en) | System and method for migrating legacy software to a system common architecture | |
US11520686B2 (en) | System and method for facilitating performance testing | |
CN112181804A (zh) | 一种参数校验方法、设备以及存储介质 | |
CN112286828B (zh) | 一种区块链智能合约的测试方法和系统 | |
CN112380255A (zh) | 一种业务处理方法、装置、设备和存储介质 | |
CN112148278A (zh) | 可视化的区块链智能合约框架及智能合约开发部署方法 | |
CN112819621B (zh) | 一种智能合约资损测试方法及系统 | |
CN112884475A (zh) | 一种智能合约资损监控系统的测试方法及系统 | |
CN111831532A (zh) | 构建测试场景的方法以及信息处理设备 | |
CN117495544A (zh) | 一种基于沙箱的风控评估方法、系统、终端及存储介质 | |
CN112613275A (zh) | 单据生成方法、装置、计算机设备和存储介质 | |
US11790249B1 (en) | Automatically evaluating application architecture through architecture-as-code | |
CN116957512A (zh) | 支付平台报文管理方法、设备及计算机可读存储介质 | |
CN112967059A (zh) | 一种测试资损监控系统的变异智能合约生成方法和系统 | |
CN117667643A (zh) | 测试用例集的演化方法、装置、计算设备集群及存储介质 | |
CN112433939B (zh) | 智能合约的测试方法、装置 | |
CN114174983B (zh) | 用于高级构造的优化的自动验证的方法和系统 | |
US11210087B2 (en) | System and method for interprocedural analysis | |
Popić et al. | The benefits of the coding standards enforcement and it's influence on the developers' coding behaviour: A case study on two small projects | |
CN112000366B (zh) | 基于代码生成器的系统参数配置方法及装置 | |
CN114677186B (zh) | 金融产品的报价计算方法、装置、计算机设备和存储介质 | |
CA3107004C (en) | System and method for facilitating performance testing | |
Lin et al. | Justifying the transition from trustworthiness to resiliency via generation of safety cases | |
Verma et al. | Fake Image Detection System Using Deep Learning and Neural Networks |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210601 |
|
RJ01 | Rejection of invention patent application after publication |