CN111090581B - 智能合约测试方法、装置、计算机设备和存储介质 - Google Patents
智能合约测试方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111090581B CN111090581B CN201911157165.9A CN201911157165A CN111090581B CN 111090581 B CN111090581 B CN 111090581B CN 201911157165 A CN201911157165 A CN 201911157165A CN 111090581 B CN111090581 B CN 111090581B
- Authority
- CN
- China
- Prior art keywords
- contract
- test
- account address
- message
- tested
- 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.)
- Active
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 453
- 238000000034 method Methods 0.000 claims abstract description 164
- 238000012546 transfer Methods 0.000 claims description 142
- 238000004590 computer program Methods 0.000 claims description 11
- 230000006870 function Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 16
- 238000007726 management method Methods 0.000 description 7
- 238000013515 script Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 238000010998 test method Methods 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000012550 audit Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 239000000956 alloy Substances 0.000 description 1
- 229910045601 alloy Inorganic materials 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000000446 fuel Substances 0.000 description 1
- 230000003862 health status Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012954 risk control Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请涉及一种智能合约测试方法、装置、计算机设备和存储介质,所述方法包括:接收测试合约调用消息;获取所述测试合约调用消息对应的测试智能合约;执行所述测试智能合约,以根据所述测试智能合约向对应的被测智能合约发送被测合约调用消息,所述被测合约调用消息携带合约执行参数,所述测试智能合约以及所述被测智能合约部署于区块链中;所述被测智能合约根据所述合约执行参数执行合约方法,得到合约执行结果;所述测试智能合约获取所述合约执行结果,根据所述合约执行结果得到所述被测智能合约的合约测试结果。上述方法可以提高智能合约测试效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及智能合约测试方法、装置、计算机设备和存储介质。
背景技术
区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议,允许在没有第三方的情况下进行可信交易,在区块链环境里,智能合约表现为可执行代码。可以将智能合约以数字化的形式写入区块链中,可保障对智能合约的存储、读取以及执行整个过程透明可跟踪。目前,可采用测试脚本对智能合约对应的代码进行测试,但经常出现测试脚本与智能合约不匹配,导致无法检测,智能合约检测效率低的问题。
发明内容
基于此,有必要针对上述智能合约检测效率低的问题,提供一种智能合约测试方法、装置、计算机设备和存储介质。
一种智能合约测试方法,所述方法包括:接收测试合约调用消息;获取所述测试合约调用消息对应的测试智能合约;执行所述测试智能合约,以根据所述测试智能合约向对应的被测智能合约发送被测合约调用消息,所述被测合约调用消息携带合约执行参数,所述测试智能合约以及所述被测智能合约部署于区块链中;所述被测智能合约根据所述合约执行参数执行合约方法,得到合约执行结果;所述测试智能合约获取所述合约执行结果,根据所述合约执行结果得到所述被测智能合约的合约测试结果。
一种智能合约测试装置,所述装置包括:调用消息接收模块,用于接收测试合约调用消息;测试智能合约获取模块,用于获取所述测试合约调用消息对应的测试智能合约;测试模块,用于执行所述测试智能合约,以根据所述测试智能合约向对应的被测智能合约发送被测合约调用消息,所述被测合约调用消息携带合约执行参数,所述测试智能合约以及所述被测智能合约部署于区块链中;合约方法执行模块,用于所述被测智能合约根据所述合约执行参数执行合约方法,得到合约执行结果;测试结果得到模块,用于所述测试智能合约获取所述合约执行结果,根据所述合约执行结果得到所述被测智能合约的合约测试结果。
在一些实施例中,所述测试模块用于:所述测试智能合约获取第二账户地址,向所述第二账户地址对应的被测智能合约发送被测合约调用消息。
在一些实施例中,所述测试模块用于:从所述测试合约调用消息中提取得到第二账户地址;或者从所述测试智能合约中获取第二账户地址。
在一些实施例中,所述装置还包括:第一消息接收模块,用于接收消息发送节点发送的第一消息;部署模块,用于当确定所述第一消息中的消息接收方地址为空时,提取所述区块链消息中的所述被测智能合约,将所述被测智能合约部署于区块链中;账户地址返回模块,用于向所述消息发送节点返回所述第二账户地址,所述第二账户地址根据所述消息发送节点的第三账户地址以及所述第三账户地址的消息发送数量计算得到。
在一些实施例中,所述测试结果得到模块用于:所述测试智能合约获取标准执行结果,将所述标准执行结果与所述合约执行结果进行对比;当对比一致时,确认所述被测智能合约的合约测试结果为通过。
在一些实施例中,所述测试结果得到模块用于:获取所述第二账户地址对应的原始资源数值;根据所述目标资源转移数值以及所述原始资源数值计算得到标准执行结果。
在一些实施例中,所述合约方法包括资源转移方法,所述被测合约调用消息携带所述第一资源转移数值、所述测试智能合约对应的第一账户地址以及所述资源转移方法对应的方法标识;所述合约方法执行模块用于:所述被测智能合约根据所述方法标识确定资源转移方法,根据所述资源转移方法向所述第一账户地址转移所述第一资源转移数值的虚拟资源。
在一些实施例中,所述测试合约调用消息携带第二资源转移数值,所述测试模块用于:向所述测试智能合约对应的第一账户地址转移所述第二资源转移数值的虚拟资源;所述被测合约调用消息携带所述第二资源转移数值、所述被测智能合约对应的第二账户地址以及所述资源转移方法对应的方法标识,所述合约方法执行模块用于:所述被测智能合约根据所述方法标识确定资源转移方法,根据所述资源转移方法,从所述第一账户地址向所述第二账户地址转移所述第二资源转移数值的虚拟资源。
在一些实施例中,所述测试合约调用消息携带消息接收方账户地址,所述消息接收方账户地址为所述测试智能合约对应的第一账户地址,所述测试智能合约获取模块用于:获取所述第一账户地址对应的智能合约,作为测试智能合约。
在一些实施例中,所述测试合约调用消息携带消息发送方对应的第一账户地址,所述装置还包括测试结果返回模块,用于向所述第一账户地址对应的节点发送所述合约测试结果。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述智能合约测试方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述智能合约测试方法的步骤。
上述智能合约测试方法、装置、计算机设备和存储介质,可通过在区块链中部署测试智能合约以及被测智能合约,通过执行测试合约时,调用被测智能合约的合约方法根据合约执行参数得到合约执行结果,根据合约执行结果得到合约测试结果,由于是在区块链中部署测试智能合约对智能合约进行测试,因此可以通过智能合约间的合约调用消息执行合约测试,提高了测试智能合约与被测智能合约的匹配度。而且在区块链环境中执行测试,能够更准确的检测出智能合约存在的问题,因此提高了智能合约测试的效率。
附图说明
图1为一些实施例中提供的智能合约测试方法的应用环境图;
图2为一些实施例中智能合约测试方法的流程图;
图3为一些实施例中智能合约测试方法的流程图;
图4为一些实施例中测试结果的界面示意图;
图5为一些实施例中智能合约测试方法的流程图;
图6为一些实施例中部署被测智能合约A的界面示意图;
图7为一些实施例中测试请求发送节点上的界面示意图;
图8为一些实施例中执行智能合约测试方法的时序图;
图9为一些实施例中智能合约测试装置的结构框图;
图10为一些实施例中计算机设备的内部结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但除非特别说明,这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本申请的范围的情况下,可以将第一账户地址称为第二账户地址,且类似地,可将第二账户地址称为第一账户地址。
图1为一些实施例中提供的智能合约测试方法的应用环境图,如图1所示,该应用环境包括测试请求发送节点、属于同一区块链的认证中心1、认证中心2、认证中心3以及认证中心4。各个区块链节点可以部署有测试智能合约以及被测智能合约,当需要对被测智能合约进行测试时,测试请求发送节点向认证中心1发送测试合约调用消息,测试合约调用消息携带被测智能合约的账户地址,认证中心1可以根据测试合约调用消息执行本申请实施例提供的智能合约调用方法,得到合约测试结果。可以理解,由于认证中心1可以广播测试合约调用消息,因此认证中心2、3以及4也可以执行本申请实施例提供的智能合约测试方法。测试请求发送节点也可以是区块链中的节点。
各个区块链节点之间可以利用网络进行连接,以进行共识认证,测试请求发送节点与区块链节点可以通过网络进行连接。各个区块链节点可以是独立的物理服务器或终端,也可以是多个物理服务器构成的服务器集群,可以是提供云服务器、云数据库、云存储和CDN等基础云计算服务的云服务器。测试请求发送节点可以是独立的物理服务器或终端,也可以是多个物理服务器构成的服务器集群,可以是提供云服务器、云数据库、云存储和CDN等基础云计算服务的云服务器。
在一些实施例中,本申请实施例提供的智能合约测试方法可以是在私有链中执行的,例如可以是在测试环境中执行的,因此区块链节点可以只有1个。该区块链节点中同时部署有测试智能合约以及被测智能合约。例如可以通过以太坊的web.3j执行智能合约的测试。web.3j是以太坊提供的对外API(Application Programming Interface,应用程序接口)。
区块链节点是区块链网络中的一个数据处理节点。区块链网络是运行区块链技术的载体和组织方式。区块链技术(Blockchain Technology,BT),也被称为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据记录。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求(例如合约测试请求),基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。
平台产品服务层提供典型应用的基本能力和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。
如图2所示,在一些实施例中,提出了一种智能合约测试方法,本实施例主要以该方法应用于上述图1中的区块链节点来举例说明。具体可以包括以下步骤:
步骤S202,接收测试合约调用消息。
具体地,测试合约调用消息用于请求调用测试智能合约,以对被测智能合约进行测试。智能合约可以包括代码和数据,例如可以包括变量以及对应的合约方法,可以通过执行合约方法实现对应的功能。在以太坊中,智能合约可以是以编译成EVM(environmentvirtual machine,以太坊虚拟机)字节码形式存储的。测试智能合约是指用于进行测试的智能合约,测试智能合约中可以包括根据测试用例编写的测试脚本。被测智能合约是指被测的智能合约,需要通过测试,确认该智能合约是否存在问题。测试智能合约以及被测智能合约可以是利用同一语言编写的,例如可以是利用solidity编程语言编写,solidity编程语言是一种面向智能合约的高级语言,可以用于编写在EVM上执行的机器级代码。
测试请求发送节点上可以安装有对应的区块链客户端,例如可以通过以太坊的API客户端接入区块链网络,当需要对智能合约进行测试时,用户可以通过操作API客户端,向区块链节点发送测试合约调用消息。
在一些实施例中,测试合约调用消息中可以携带消息发送方的账户地址以及消息接收方的账户地址,消息接收方的账户地址为需要调用的测试智能合约的账户地址,以表示该测试合约调用消息是发送给该账户地址对应的测试智能合约的。消息发送方的账户地址可以是外部账户地址,例如为在测试请求发送节点上的API客户端中登录的用户的账户地址。其中,以太坊中的账户地址可以包括外部账户地址以及合约账户地址。外部账户地址指用户的账户地址,用户的账户地址可以根据用户的私钥得到,用于标识用户。合约账户地址是智能合约的账户地址,用于标识智能合约。
在一些实施例中,测试合约调用消息还可以携带测试相关的参数,例如还可以携带所要测试的智能合约的账户地址以及合约执行参数,以使得测试智能合约可以根据第二账户地址确定需要被测试的智能合约,可以根据合约执行参数执行被测智能合约。合约执行参数根据被测智能合约的类型确定。例如,如果被测智能合约包括转账方法,则合约执行参数可以包括转账金额。如果被测智能合约包括签名认证方法,则合约执行参数可以包括签名数据。
在一些实施例中,测试合约调用消息还可以包括合约执行费用的上限以及合约执行的价格,可以通过“gas”表示,gas指运行以太坊虚拟机的燃料。合约执行费用的上限用于表示为了执行智能合约所愿意花费的费用最大值。合约执行的价格表示gas的单位价格。
在一些实施例中,测试合约调用消息可以是通过交易消息的方式发送的。因此测试合约调用消息还可以包括交易手续费用,表示为了执行交易所愿意花费的费用。
步骤S204,获取测试合约调用消息对应的测试智能合约。
具体地,测试合约调用消息中可以携带消息接收方的地址,即测试智能合约的第一账户地址。因此可以根据测试智能合约的第一账户地址确定测试智能合约。
在一些实施例中,测试智能合约中可以包括合约执行参数、被测智能合约的账户地址、测试结果确定策略或者所要调用的合约方法中的一个或多个。合约执行参数是对被测智能合约进行测试时,需要输入到被测智能合约中的参数,被测智能合约的账户地址用于确定所被测试的智能合约。测试结果确定策略用于确定被测智能合约的合约测试结果。例如当合约执行参数为资源转移数量时,测试结果确定策略可以为:对于转出资源的账户,当转移前的资源数量等于转移后的资源数量加上资源转移数量时;对于接收资源的账户,当转移前的资源数量等于转移后的资源数量减去资源转移数量时,则测试结果为通过。
一个智能合约中可以包括一个或多个方法,例如可以为资源转移方法、数量计算方法或者共识方法。通过在测试智能合约中写入合约执行参数、被测智能合约的账户地址、测试结果确定策略或者所要调用的合约方法的一个或多个,则在执行测试智能合约时,可以直接获取这些写入的参数进行测试,方便快捷。
在一些实施例中,也可以是在测试合约调用消息携带合约执行参数、被测智能合约的账户地址、测试结果确定策略或者所要调用的合约方法的一个或多个,即可以将这些参数作为执行测试智能合约时所要传入的参数,在需要测试时再发送给测试智能合约,这样,用户可以根据测试策略确定具体的参数,灵活性高。例如,当被测智能合约的账户地址是作为参数传入时,用户可以根据需要确定需要测试哪个智能合约。
步骤S206,执行测试智能合约,以根据测试智能合约向对应的被测智能合约发送被测合约调用消息,被测合约调用消息携带合约执行参数,测试智能合约以及被测智能合约部署于区块链中。
具体地,被测合约调用消息用于调用被测智能合约。被测合约调用消息中可以包括消息发送方的账户地址、消息接收方的账户地址。消息发送方的账户地址可以为测试智能合约的账户地址,即第一账户地址。消息接收方的账户地址为被测智能合约的账户地址,即第二账户地址,用于表示该消息是发送给被测智能合约的。
在执行智能合约时,可以将智能合约加载在以太坊虚拟机中执行。以太坊虚拟机是智能合约的运行环境。智能合约的代码是编译后可以在以太坊虚拟机上运行的字节码。测试智能合约可以获取第二账户地址,即被测智能合约对应的账户地址,向第二账户地址对应的被测智能合约发送被测合约调用消息。
测试智能合约以及被测智能合约可以预先部署于区块链节点所在的区块链中。例如,可以编写被测智能合约,对该被测智能合约进行编译后。向区块链节点发送部署请求,部署请求中携带被测智能合约,区块链节点提取得到被测智能合约,根据测试署请求发送节点的账户地址以及测试请求发送节点发送消息的数量进行哈希计算,将得到的哈希值作为被测智能合约的账户地址,将该账户地址发送给测试请求发送节点。测试请求发送节点可以采用同样的方式部署测试智能合约,得到测试智能合约的账户地址。
在一些实施例中,测试智能合约中可以引入(import)被测智能合约的源代码。通过引入被测智能合约的源代码,可以给测试智能合约提供被测智能合约A的接口定义,便于测试智能合约调用被测智能合约的功能接口进行测试。
在一些实施例,测试智能合约以及被测智能合约通过编译器进行编译后部署于区块链。测试智能合约的编译器版本不低于被测智能合约定义的编译器版本,且不超过被测智能合约定义的编译器大版本,以提高测试效率。编译器的版本中,可以分为大版本以及小版本两个层级,小版本的序号可以表示大版本的修改次数。大版本下包括多个小版本。例如0.4.24以及0.4.24属于第4个大版本,但0.4.24表示对第4个大版本进行第24次修改后得到的版本。0.4.25表示对第4个大版本进行第25次修改后的版本。例如,如果被测智能合A使用0.4.24版本编译器,则测试智能合约采用的编译器版本可以选择0.4.24或者0.2.25,但不是0.5.x版本的。
步骤S208,被测智能合约根据合约执行参数执行合约方法得到合约执行结果。
具体地,被测智能合约包含可以调用的函数,即合约方法,被测智能合约可以包括一个或多个合约方法。可以是执行所有的合约方法,也可以是执行部分合约方法,例如,被测合约调用消息中可以携带所要调用方法的方法标识,可以根据方法标识执行对应的合约方法。
合约执行结果是指执行被测智能合约的合约方法得到的结果。例如,当合约方法为资源转移方法时,则合约执行结果为资源转移后,账户中的资源数量。当合约方法为签名验证算法时,则合约执行结果为签名验证结果,签名验证结果可以是通过或者不通过。
步骤S210,测试智能合约获取合约执行结果,根据合约执行结果得到被测智能合约的合约测试结果。
具体地,合约测试结果可为测试通过或者不通过。还可以包括测试不通过的合约方法的方法标识。得到合约执行结果后,可以根据合约执行结果确定合约的测试结果。例如可以将合约执行结果与预期的测试结果对比,如果对比一致,则认为测试通过。如果不一致,则测试不通过。
在一些实施例中,根据合约执行结果得到被测智能合约的合约测试结果包括:测试智能合约获取标准执行结果,将标准执行结果与合约执行结果进行对比;当对比一致时,确认合约测试结果为通过。
具体地,标准执行结果是指根据合约执行参数执行正确的合约方法后,预期得到的结果,相当于标准答案。即是在合约方法不存在问题时,合约方法所应该输出的结果。标准执行结果可以是计算得到的,也可以是在测试合约调用消息携带的。例如,对于资源转移方法,则对于转出资源的账户,标准执行结果为:执行资源转移方法后,该账户的账户余额等于转出前的账户余额减去资源转移的数量。对于签名认证算法,标准执行结果是测试合约调用消息中携带的,用户可以设置根据合约执行参数执行合约方法的标准执行结果,测试请求发送节点在测试合约调用消息中携带标准执行结果。
当标准执行结果与合约执行结果一致时,则确认合约测试结果为通过。否则,则合约测试结果为不通过。
在一些实施例中,测试合约调用消息携带消息发送方对应的第一账户地址,如图3,智能合约测试方法还包括步骤S302:向第一账户地址对应的节点发送合约测试结果。具体地,当区块链节点得到合约测试结果后,可以获取发送测试合约调用消息的消息发送方的账户地址,并向该账户地址发送合约测试结果,即区块链节点可以向测试请求发送节点返回合约测试结果。合约测试结果可以通过预设字符表示,例如,如果返回值为“true”,则表示合约测试结果为通过。如果返回值为“false”,则表示合约测试结果为不通过。
如图4所示,为一些实施例中,测试结果的界面示意图。其中,图4中,status表示“测试状态”,测试状态可以为“测试完成”、“测试失败”或者“测试中”。“Transaction hash”表示“交易标识”,测试合约调用消息可以是通过交易消息的方式发送的,交易消息对应有交易标识。“from”表示发送测试合约调用消息的外部账户地址。“to”表示测试智能合约的账户地址。“gas limit”表示gas的最大上限。“Transaction cost”表示交易的手续费。“execution cost”表示执行智能合约的费用。“input”表示输入,可以为被测智能合约的账户地址。“Decoded input”是指解码后的输入。“Decoded output”表示解码后的输出,如果是“true”,则表示合约测试结果为通过,如果是“false”,则表示合约测试结果为不通过。“logs”表示执行被测智能合约的日志,以方便通过日志确定合约测试不通过的原因。“Value”包括合约执行参数,例如可以是资源转移数值。
上述智能合约测试方法,可通过在区块链中部署测试智能合约以及被测智能合约,通过执行测试合约时,调用被测智能合约的合约方法根据合约执行参数得到合约执行结果,再根据合约执行结果得到合约测试结果,由于是在区块链中部署测试智能合约对智能合约进行测试,因此可以通过智能合约间的合约调用消息执行合约测试,提高了测试智能合约与被测智能合约的匹配度。而且在区块链环境中执行测试,能够更准确的检测出智能合约存在的问题,因此提高了智能合约测试的效率。
在一些实施例中,合约方法包括资源转移方法,合约执行参数包括目标资源转移数值,测试智能合约获取标准执行结果包括:获取第二账户地址对应的原始资源数值;根据目标资源转移数值以及原始资源数值计算得到标准执行结果。
具体地,资源可以是虚拟资源,可以是电子货币例如可以是以太币也可以是游戏币。资源转移数值是指所要转移的资源的数量,例如可是3元。原始资源数值是指执行资源转移方法前,第二账户地址所拥有的资源数量。标准执行结果是根据目标资源转移数值以及原始资源数值计算得到的。当第二账户地址为接收资源的地址时,则标准执行结果为目标资源转移数值以及原始资源数值相加得到的值。当第二账户地址为转出资源的地址时,则标准执行结果为原始资源数值减去目标资源转移数值以及得到的值。
在一些实施例中,测试智能合约在发送被测合约调用消息时,获取被测智能合约的账户地址即第二账户地址的方法可以包括:从测试合约调用消息中提取得到第二账户地址;或者从测试智能合约中获取第二账户地址。
具体地,第二账户地址可以是写入到测试智能合约中的,这样可以直接对被智能进行测试,效率高。例如,可以在测试智能合约中定义类型为address(地址)的全局变量,将被测合约的实际地址,直接写到代码中,如代码(1)所示。也可定义类型为address的全局变量:address addrA,然后编写构造函数,在部署测试智能合约时,通过传入被测智能合约地址给addrA赋值,如代码(2)所示。
测试合约调用消息中可以携带有第二账户地址,因此可从测试合约调用消息中提取得到第二账户地址,例如可以在每个测试用例函数中,将被测智能合约的地址作为参数传给要调用被测智能合约的方法,这样可以根据测试需要灵活改变被测智能合约的账户地址,灵活性高。例如,测试智能合约中,对应的代码可以如代码(3)表示,对应的含义为:对于“pay to contract(转账给智能合约)并check_balance(检查余额)”这个测试智能合约,对应的被测智能合约的账户地址为传入的“addr”参数。其中,“TestA”表示测试智能合约。“Constructor”表示构造函数。“public payable”表示该构造函数的声明是可以支付的,则测试智能合约可以进行资源的转移。
Contract TestA{
Address ContractAddr=“123456789abcde”//被测智能合约的账户地址为“123456789abcde” (1)Contract TestA{
address addrA;
Constructor(address addr)public payable
addrA=addr; (2)
function test_pay_to_contract_and_check_balance(address addr)publicreturns(bool){
address addr=addr; (3)
在一些实施例中,被测智能合约预先部署于区块链中,可以通过发送区块链消息的方式对被测智能合约进行部署,因此,如图5所示,智能合约测试方法还可以包括以下步骤:
步骤S502,接收消息发送节点发送的第一消息。
具体地,消息发送节点可以是测试请求发送节点,也可以是不同的节点。第一消息可以是外部账户发送的交易消息。例如,区块链的交易消息可以是一个外部账户发往其他账户的报文结构体。可以包括消息接收方的账户地址、发送方的签名、交易金额、gas的上限以及gas的价格等。
步骤S504,当确定第一消息中的消息接收方地址为空时,提取区块链消息中的被测智能合约,将被测智能合约部署于区块链中。
具体地。当接收方地址为空时,说明该消息并不是发送给外部账户或者合约账户的,而是需要在区块链中部署智能合约。因此可以确定第一消息中包括被测智能合约,可以从第一消息中例如预设位置中提取得到被测智能合约,将被测智能合约部署于区块链中。
步骤S506,向消息发送节点返回第二账户地址,第二账户地址根据消息发送节点的第三账户地址以及第三账户地址的消息发送数量计算得到。
具体地,第三账户地址的消息发送数量是指第三方账户地址为消息发送方的消息的数量。例如,假设第三方账户地址发送了8条消息,则消息发送数量为8。可以对第三账户地址以及第三账户地址的消息发送数量进行哈希计算,将得到的哈希值作为第二账户地址。本申请实施例中,通过将消息接收方地址为空的消息作为部署智能合约的消息,可以提高部署智能合约的效率。由于第三方账户地址具有唯一性,而且一个账户地址发送的消息的数量是不断增长的,因此可以保证第二账户地址的唯一性。
例如,对于一个消息发送节点,当发送部署第一个智能合约的消息时,消息发送数量可以是1。当发送部署第二个智能合约的消息时,消息发送数量可以是2,因此,即使该消息发送节点需要部署多个智能合约,也能够保证每个智能合约的账户地址的唯一性。而对于不同的消息发送节点,即使消息发送数量一样,但因为消息发送节点的账户地址不一样,因此计算得到的哈希值也是不一样的,保证了智能合约的地址的唯一性。
如图6所示,为一些实施例中部署被测智能合约A的界面示意图。其中602为合约选择框,可以在合约选择框选择要部署的智能合约的名称,例如“A”,当点击“部署”按键后,该节点向区块链节点发送部署请求,区块链节点返回智能合约“A”的账户地址“1234abcd”,该账户地址显示在账户地址显示框604中。
可以理解,部署测试智能合约时也可以参考步骤S502~S506,在此不再赘述。
当在区块链节点中部署测试智能合约以及被测智能合约后,需要测试时,则可以发送测试合约调用消息,如图7所示,为一些实施例中,测试请求发送节点上的界面示意图。其中,“gas limit”表示合约执行费用的上限,单位可以为以太坊计量单位“wei”。“value”表示资源转移的数量。从图7可以看出,该界面中可以包括输入“gas limit”的第一输入框702、输入资源转移数值的第二输入框704、输入测试智能合约名称的第三输入框706以及输入被测智能合约地址的第四输入框708。可以理解,第三输入框706也可以用于输入测试智能合约的账户地址,第四输入框708也可以用于输入被测智能合约的名称。测试请求发送节点可以根据合约的名称确定账户地址,当点击“开始测试”按键后,测试请求发送节点发送测试合约调用信息。由图7可以看出,gas limit可以是3000000wei,资源转移数值例如以太币转移数量可以是10000。测试智能合约名称为“testA”,被测智能合约的地址为“123abcd”。
在一些实施例中,如果被测智能合约中包括资源转移方法,需要对资源转移方法进行测试。则可以向测试智能合约进行资源转移,以使得被测智能合约与测试智能合约之间可以进行资源的转移,从而完成对被测智能合约的资源转移方法的测试。其中可以采用以下四种方式中的一种或者多种向测试智能合约进行资源转移:
第一种:测试智能合约的构造函数增加可进行资源转移的声明,在部署测试智能合约的时候,通过外部账户向合约账户转账。其中,可资源转移的声明可以通过增加预设关键字例如“payable”来表示。第一种方式对应的代码可以如代码(5)所示。
Constructor(address addr)public payable(5)
第二种:测试智能合约中可以增加fall back(回退)函数,并声明为可以进行资源转移。这样可以随时通过外部账户向测试智能合约账户进行资源转移。回退函数是智能合约里的特殊函数,可以没有名字、参数以及返回值。当调用的函数找不到时,就会默认调用回退函数。因此,当调用回退函数时,由于该回退函数可以进行资源转移,故可以向测试智能合约的账户地址进行资源转移。第二种方式对应的代码可以如代码(6)所示。“Function”表示函数。
Function()public payable。(6)
第三种:合约执行参数可以包括第一资源转移数值,因此被测合约调用消息可以携带第一资源转移数值、测试智能合约对应的第一账户地址以及资源转移方法对应的方法标识。这样,被测智能合约根据方法标识调用资源转移方法,根据资源转移方法,向第一账户地址转移第一资源转移数值的虚拟资源。
其中,方法标识用于标识合约方法,例如可以是合约方法的名称,资源转移方法的名称可以为“pay”,表示该方法为转账方法。第一资源转移数值可以设置在测试智能合约中,也可以是测试合约调用消息中携带的,将该第一资源转移数值作为目标资源转移数值,即要转移的资源的数量。被测合约调用消息用于指示调用资源转移方法进行资源转移时,资源接收方地址为第一账户地址。因此,执行资源转移方法时,被测智能合约可以从第二账户地址向第一账户地址转移第一资源转移数值的虚拟资源。第三种方式对应的代码可以如代码(7)所示。第三种方式中,通过调用被测智能合约的转账方法向测试智能合约进行资源转移,既能实现对测试智能合约进行资源转移,又能实现对被测智能合约进行测试,减少了测试步骤,因此提高了测试的效率。
举个实际的例子,被测合约调用消息可以包括交易消息,交易消息的资源转出方地址是被测智能合约的地址,交易金额可以是1000元,资源接收方地址是测试智能合约的账户地址,因此被测智能合约接收到被测合约调用消息时,可以向测试智能合约的账户地址转账1000。
Function pay()public payable{}。(7)
第四种:测试合约调用消息可以携带第二资源转移数值,因此执行测试智能合约时,可以向测试智能合约对应的第一账户地址转移第二资源转移数值的虚拟资源;其中,被测合约调用消息携带第二资源转移数值、被测智能合约对应的第二账户地址以及资源转移方法对应的方法标识,故被测智能合约可以根据方法标识调用资源转移方法,根据资源转移方法,从第一账户地址向第二账户地址转移第二资源转移数值的虚拟资源。。
具体地,可以在测试智能合约的测试用例中,增加可以进行资源转移的声明。因此在测试请求发送节点请求对智能合约的测试时,携带第二资源转移数值。将该第一资源转移数值作为目标资源转移数值,即要转移的资源的数量。即测试合约调用消息还可以指示向测试智能合约转移虚拟资源。故执行测试智能合约时,可以从用户的外部账户地址向第一账户地址转移第二资源转移数值的虚拟资源。测试智能合约在接收到第二资源转移数值的虚拟资源后,由于账户中已经拥有第二资源转移数值的虚拟资源,因此可以向被测智能合约转移对应数量的虚拟资源。这样,通过携带第二资源转移数值,就可以将外部账户的资源转移到第一账户地址,再从第一账户地址转移到第二账户地址,从而实现对被测智能合约的测试。第四种方式对应的代码可以如代码(8)所示。
function test_pay_to_contract_and_check_balance(address addr)publicreturns(bool){
MyContract MyContract=MyContract(Contractaddr) (8)
本申请实施例提供的测试智能合约可以是基于Solidity语言开发的自动化测试脚本,根据测试用例编写得到,可以包括对被测智能合约测试时需要输入的测试参数、测试步骤、预期结果以及结果判断策略。在测试时,可以在测试函数中实例被测智能合约,作为实例化后的对象,通过该对象实现对被测智能合约的调用,因此可以自动的执行测试。当然测试参数也可以是在测试合约调用消息携带的。
如果通过非智能合约来对测试智能合约进行测试,则需要学习其他的测试语言,得到的测试脚本也经常出现调用接口时,不符合智能合约的接口定义的情况。智能合约在区块链中一般是用于验证或者执行交易合同,与交易相关,以允许在没有第三方的情况下进行可信交易。而本申请实施例中,通过在区块链中引入用于进行测试的测试智能合约,该测试智能合约可以是一个或测试用例的脚本整合在一起得到的,因此可以利用智能合约来测试智能合约,减少智能合约开发人员学习新的测试语言的成本。在一些实施例中,测试智能合约的代码以及对应的解释可以如下,其中“//”后面的文字是对代码的解释。
以下以一个具体实施例对本申请提供的智能合约测试方法进行说明,如图8所示,为一些实施例中执行智能合约测试方法的时序图。包括以下步骤:
S1:发送被测智能合约部署请求。
具体地,被测智能合约部署请求中携带有被测智能合约,其中被测智能合约部署请求中,接收方账户地址为空。
S2:将被测智能合约部署于区块链中。
具体地,区块链节点检测到被测智能合约部署请求中的接收方账户地址为空时,确定该请求的类型为合约部署请求,因此可以将被测智能合约存储于区块链中,并根据测试请求发送节点的账户地址以及该账户地址的消息发送数量生成被测智能合约的账户地址,即第二账户地址。
S3:返回第二账户地址。
具体地,区块链节点向测试请求发送节点返回第二账户地址,通知测试请求发送节点智能合约已经部署成功。
S4:发送测试智能合约部署请求。
具体地,测试智能合约部署请求中携带有测试智能合约,测试智能合约是根据测试用例编写得到的测试脚本。其中测试智能合约部署请求中的接收方账户地址为空。
S5:将测试智能合约部署于区块链中。
具体地,区块链节点检测到测试智能合约部署请求的接收方账户地址为空时,确定该请求的类型为合约部署请求,因此可以将测试智能合约存储于区块链中,并根据测试请求发送节点的账户地址以及该账户地址的消息发送数量生成测试智能合约的账户地址,即第一账户地址。
S6:返回第一账户地址。
具体地,区块链节点向测试请求发送节点返回第一账户地址,通知测试请求发送节点智能合约已经部署成功。
可以理解,也可以是先部署测试智能合约,再部署被测智能合约。
S7:发送测试合约调用消息。
具体地,测试合约调用消息中携带消息接收方的地址,为测试智能合约的第一账户地址。表示该消息是发送给测试智能合约的,为请求对被测智能合约进行测试的消息。测试合约调用消息中还携带第二账户地址以及资源转移数值,表示需要被测试的智能合约为第二账户地址对应的智能合约,合约执行参数为该资源转移数值。
S8:确定测试智能合约。
具体地,区块链节点根据第一账户地址确定对应的测试智能合约。
S9:执行测试智能合约,以发送被测智能合约调用消息。
具体地,被测智能合约调用消息中携带资源转移数值以及被调用的合约方法的方法标识。
S10:执行被测智能合约。
具体地,接收到被测智能合约调用消息后,区块链节点根据方法表示执行被测智能合约中的合约方法,以得到合约执行结果。
S11:确定合约测试结果。
具体地,区块链节点根据合约执行结果以及标准执行结果确定测试是通过还是不通过。
S12:返回合约测试结果。
具体地,区块链节点向测试请求发送节点发送合约测试结果。如果合约测试结果为不通过,则测试人员可以对被测智能合约进行分析,以确定不通过的原因,并对被测智能合约进行修改。
如图9所示,在一些实施例中,提供了一种智能合约测试装置,该智能合约测试装置可以集成于上述的区块链节点中,具体可以包括调用消息接收模块902、测试智能合约获取模块904、测试模块906、合约方法执行模块908以及测试结果得到模块910。
调用消息接收模块902,用于接收测试合约调用消息;
测试智能合约获取模块904,用于获取测试合约调用消息对应的测试智能合约;
测试模块906,用于执行测试智能合约,以根据测试智能合约向对应的被测智能合约发送被测合约调用消息,被测合约调用消息携带合约执行参数,测试智能合约以及被测智能合约部署于区块链中;
合约方法执行模块908,用于被测智能合约根据合约执行参数执行合约方法,得到合约执行结果;
测试结果得到模块910,用于测试智能合约获取合约执行结果,根据合约执行结果得到被测智能合约的合约测试结果。
在一些实施例中,测试模块906用于:测试智能合约获取第二账户地址,向第二账户地址对应的被测智能合约发送被测合约调用消息。
在一些实施例中,测试模块906用于:从测试合约调用消息中提取得到第二账户地址;或者从测试智能合约中获取第二账户地址。
在一些实施例中,智能合约测试装置还包括:
第一消息接收模块,用于接收消息发送节点发送的第一消息;
部署模块,用于当确定第一消息中的消息接收方地址为空时,提取区块链消息中的被测智能合约,将被测智能合约部署于区块链中;
账户地址返回模块,用于向消息发送节点返回第二账户地址,第二账户地址根据消息发送节点的第三账户地址以及第三账户地址的消息发送数量计算得到。
在一些实施例中,测试结果得到模块910用于:测试智能合约获取标准执行结果,将标准执行结果与合约执行结果进行对比;当对比一致时,确认被测智能合约的合约测试结果为通过。
在一些实施例中,测试结果得到模块910用于:获取第二账户地址对应的原始资源数值;根据目标资源转移数值以及原始资源数值计算得到标准执行结果。
在一些实施例中,合约方法包括资源转移方法,被测合约调用消息携带第一资源转移数值、测试智能合约对应的第一账户地址以及资源转移方法对应的方法标识;合约方法执行模块908用于:被测智能合约根据方法标识确定资源转移方法,根据资源转移方法向第一账户地址转移第一资源转移数值的虚拟资源。
在一些实施例中,测试合约调用消息携带第二资源转移数值,测试模块用于:向测试智能合约对应的第一账户地址转移第二资源转移数值的虚拟资源;被测合约调用消息携带第二资源转移数值、被测智能合约对应的第二账户地址以及资源转移方法对应的方法标识,合约方法执行模块908用于:被测智能合约根据方法标识确定资源转移方法,根据资源转移方法,从第一账户地址向第二账户地址转移第二资源转移数值的虚拟资源。
在一些实施例中,测试合约调用消息携带消息接收方账户地址,消息接收方账户地址为测试智能合约对应的第一账户地址,测试智能合约获取模块904用于:获取第一账户地址对应的智能合约,作为测试智能合约。
在一些实施例中,测试合约调用消息携带消息发送方对应的第一账户地址,装置还包括测试结果返回模块,用于向第一账户地址对应的节点发送合约测试结果。
图10示出了一些实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的区块链节点。如图10所示,该计算机设备包括通过***总线连接的处理器、存储器以及网络接口。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现智能合约测试方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行智能合约测试方法。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一些实施例中,本申请提供的智能合约测试装置可以实现为一种计算机程序的形式,计算机程序可在如图10所示的计算机设备上运行。计算机设备的存储器中可存储组成该智能合约测试装置的各个程序模块,比如,图9所示的调用消息接收模块902、测试智能合约获取模块904、测试模块906、合约方法执行模块908以及测试结果得到模块910。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的智能合约测试方法中的步骤。
例如,图10所示的计算机设备可以通过如图9所示的智能合约测试装置中的调用消息接收模块902接收测试合约调用消息;通过测试智能合约获取模块904获取测试合约调用消息对应的测试智能合约;通过测试模块906执行测试智能合约,以根据测试智能合约向对应的被测智能合约发送被测合约调用消息,被测合约调用消息携带合约执行参数,测试智能合约以及被测智能合约部署于区块链中;通过合约方法执行模块908被测智能合约根据合约执行参数执行合约方法,得到合约执行结果;通过测试结果得到模块910测试智能合约获取合约执行结果,根据合约执行结果得到被测智能合约的合约测试结果。。
在一些实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述智能合约测试方法的步骤。此处智能合约测试方法的步骤可以是上述各个实施例的智能合约测试方法中的步骤。
在一些实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述智能合约测试方法的步骤。此处智能合约测试方法的步骤可以是上述各个实施例的智能合约测试方法中的步骤。
应该理解的是,虽然本申请各实施例的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各实施例中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (20)
1.一种智能合约测试方法,所述方法包括:
接收测试合约调用消息;
获取所述测试合约调用消息对应的测试智能合约;
执行所述测试智能合约,以根据所述测试智能合约向对应的被测智能合约发送被测合约调用消息,所述被测合约调用消息携带合约执行参数,所述测试智能合约以及所述被测智能合约部署于区块链中;
所述被测智能合约根据所述合约执行参数执行合约方法,得到合约执行结果;
所述测试智能合约获取所述合约执行结果,根据所述合约执行结果得到所述被测智能合约的合约测试结果;
在所述执行所述测试智能合约,以根据所述测试智能合约向对应的被测智能合约发送被测合约调用消息之前,所述方法还包括:
接收消息发送节点发送的第一消息;
当确定所述第一消息中的消息接收方地址为空时,提取区块链消息中的所述被测智能合约,将所述被测智能合约部署于区块链中;
向所述消息发送节点返回第二账户地址,所述第二账户地址为所述被测智能合约的账户地址,所述第二账户地址根据所述消息发送节点的第三账户地址以及所述第三账户地址的消息发送数量计算得到。
2.根据权利要求1所述的方法,其特征在于,所述根据所述测试智能合约向对应的被测智能合约发送被测合约调用消息包括:
所述测试智能合约获取第二账户地址,向所述第二账户地址对应的被测智能合约发送被测合约调用消息。
3.根据权利要求2所述的方法,其特征在于,所述测试智能合约获取第二账户地址包括:
从所述测试合约调用消息中提取得到第二账户地址;或者
从所述测试智能合约中获取第二账户地址。
4.根据权利要求1所述的方法,其特征在于,所述根据所述合约执行结果得到所述被测智能合约的合约测试结果包括:
所述测试智能合约获取标准执行结果,将所述标准执行结果与所述合约执行结果进行对比;
当对比一致时,确认所述被测智能合约的合约测试结果为通过。
5.根据权利要求4所述的方法,其特征在于,所述合约方法包括资源转移方法,所述合约执行参数包括目标资源转移数值,所述测试智能合约获取标准执行结果包括:
获取所述第二账户地址对应的原始资源数值;
根据所述目标资源转移数值以及所述原始资源数值计算得到标准执行结果。
6.根据权利要求1所述的方法,其特征在于,所述合约方法包括资源转移方法,所述被测合约调用消息携带第一资源转移数值、所述测试智能合约对应的第一账户地址以及所述资源转移方法对应的方法标识;
所述被测智能合约根据所述合约执行参数执行合约方法,得到合约执行结果包括:
所述被测智能合约根据所述方法标识确定资源转移方法,根据所述资源转移方法向所述第一账户地址转移所述第一资源转移数值的虚拟资源。
7.根据权利要求1所述的方法,其特征在于,所述测试合约调用消息携带第二资源转移数值,所述执行所述测试智能合约还包括:
向所述测试智能合约对应的第一账户地址转移所述第二资源转移数值的虚拟资源;
所述被测合约调用消息携带所述第二资源转移数值、所述被测智能合约对应的第二账户地址以及资源转移方法对应的方法标识,所述被测智能合约根据所述合约执行参数执行合约方法包括:
所述被测智能合约根据所述方法标识确定资源转移方法,根据所述资源转移方法,从所述第一账户地址向所述第二账户地址转移所述第二资源转移数值的虚拟资源。
8.根据权利要求1所述的方法,其特征在于,所述测试合约调用消息携带消息接收方账户地址,所述消息接收方账户地址为所述测试智能合约对应的第一账户地址,所述获取所述测试合约调用消息对应的测试智能合约包括:
获取所述第一账户地址对应的智能合约,作为测试智能合约。
9.根据权利要求1所述的方法,其特征在于,所述测试合约调用消息携带消息发送方对应的第一账户地址,所述方法还包括:
向所述第一账户地址对应的节点发送所述合约测试结果。
10.一种智能合约测试装置,所述装置包括:
调用消息接收模块,用于接收测试合约调用消息;
测试智能合约获取模块,用于获取所述测试合约调用消息对应的测试智能合约;
测试模块,用于执行所述测试智能合约,以根据所述测试智能合约向对应的被测智能合约发送被测合约调用消息,所述被测合约调用消息携带合约执行参数,所述测试智能合约以及所述被测智能合约部署于区块链中;
合约方法执行模块,用于所述被测智能合约根据所述合约执行参数执行合约方法,得到合约执行结果;
测试结果得到模块,用于所述测试智能合约获取所述合约执行结果,根据所述合约执行结果得到所述被测智能合约的合约测试结果;
第一消息接收模块,用于接收消息发送节点发送的第一消息;
部署模块,用于当确定所述第一消息中的消息接收方地址为空时,提取区块链消息中的所述被测智能合约,将所述被测智能合约部署于区块链中;
账户地址返回模块,用于向所述消息发送节点返回第二账户地址,所述第二账户地址为所述被测智能合约的账户地址,所述第二账户地址根据所述消息发送节点的第三账户地址以及所述第三账户地址的消息发送数量计算得到。
11.根据权利要求10所述的装置,其特征在于,所述测试模块用于:
所述测试智能合约获取第二账户地址,向所述第二账户地址对应的被测智能合约发送被测合约调用消息。
12.根据权利要求11所述的装置,其特征在于,所述测试模块用于:
从所述测试合约调用消息中提取得到第二账户地址;或者
从所述测试智能合约中获取第二账户地址。
13.根据权利要求10所述的装置,其特征在于,所述测试结果得到模块用于:所述测试智能合约获取标准执行结果,将所述标准执行结果与所述合约执行结果进行对比;当对比一致时,确认所述被测智能合约的合约测试结果为通过。
14.根据权利要求13所述的装置,其特征在于,所述合约方法包括资源转移方法,所述合约执行参数包括目标资源转移数值,所述测试结果得到模块用于:获取所述第二账户地址对应的原始资源数值;根据所述目标资源转移数值以及所述原始资源数值计算得到标准执行结果。
15.根据权利要求10所述的装置,其特征在于,所述合约方法包括资源转移方法,所述被测合约调用消息携带第一资源转移数值、所述测试智能合约对应的第一账户地址以及所述资源转移方法对应的方法标识;所述合约方法执行模块用于:所述被测智能合约根据所述方法标识确定资源转移方法,根据所述资源转移方法向所述第一账户地址转移所述第一资源转移数值的虚拟资源。
16.根据权利要求10所述的装置,其特征在于,所述测试合约调用消息携带第二资源转移数值,所述测试模块用于:向所述测试智能合约对应的第一账户地址转移所述第二资源转移数值的虚拟资源;所述被测合约调用消息携带所述第二资源转移数值、所述被测智能合约对应的第二账户地址以及资源转移方法对应的方法标识,所述合约方法执行模块用于:所述被测智能合约根据所述方法标识确定资源转移方法,根据所述资源转移方法,从所述第一账户地址向所述第二账户地址转移所述第二资源转移数值的虚拟资源。
17.根据权利要求10所述的装置,其特征在于,所述测试合约调用消息携带消息接收方账户地址,所述消息接收方账户地址为所述测试智能合约对应的第一账户地址,所述测试智能合约获取模块用于:获取所述第一账户地址对应的智能合约,作为测试智能合约。
18.根据权利要求10所述的装置,其特征在于,所述测试合约调用消息携带消息发送方对应的第一账户地址,所述智能合约测试装置还包括测试结果返回模块,用于向所述第一账户地址对应的节点发送所述合约测试结果。
19.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1至9中任一项权利要求所述智能合约测试方法的步骤。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行权利要求1至9中任一项权利要求所述智能合约测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911157165.9A CN111090581B (zh) | 2019-11-22 | 2019-11-22 | 智能合约测试方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911157165.9A CN111090581B (zh) | 2019-11-22 | 2019-11-22 | 智能合约测试方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111090581A CN111090581A (zh) | 2020-05-01 |
CN111090581B true CN111090581B (zh) | 2024-02-09 |
Family
ID=70393827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911157165.9A Active CN111090581B (zh) | 2019-11-22 | 2019-11-22 | 智能合约测试方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111090581B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111865907A (zh) * | 2020-06-08 | 2020-10-30 | 深圳前海益链网络科技有限公司 | 单点执行单点验证区块链智能合约***、实现方法及装置 |
CN111986029A (zh) * | 2020-08-28 | 2020-11-24 | 数网金融有限公司 | 一种数据处理方法、装置及电子设备 |
CN113010409B (zh) * | 2020-09-16 | 2023-09-15 | 腾讯科技(深圳)有限公司 | 智能合约测试方法及装置、电子设备、存储介质 |
WO2022171275A1 (en) * | 2021-02-10 | 2022-08-18 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and system for testing smart contracts |
CN112785439A (zh) * | 2021-03-19 | 2021-05-11 | 中国工商银行股份有限公司 | 测试被部署在区块链节点上的智能合约的方法及装置 |
CN113282501A (zh) * | 2021-06-03 | 2021-08-20 | 网易(杭州)网络有限公司 | 区块链测试的方法、装置和电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107943691A (zh) * | 2017-11-17 | 2018-04-20 | 深圳圣马歌科技有限公司 | 一种自动产生智能合约的功能测试页面的方法及装置 |
CN109408373A (zh) * | 2018-09-26 | 2019-03-01 | 深圳壹账通智能科技有限公司 | 智能合约的测试方法、计算机可读存储介质及测试终端 |
CN109543457A (zh) * | 2018-11-07 | 2019-03-29 | 泰康保险集团股份有限公司 | 管控智能合约之间调用的方法及装置 |
CN109829013A (zh) * | 2018-12-27 | 2019-05-31 | 上海点融信息科技有限责任公司 | 用于在区块链网络中运行智能合约的方法、存储介质、计算设备 |
US20190317936A1 (en) * | 2018-11-09 | 2019-10-17 | Innoplexus Ag | System and method for interoperability of blockchains |
-
2019
- 2019-11-22 CN CN201911157165.9A patent/CN111090581B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107943691A (zh) * | 2017-11-17 | 2018-04-20 | 深圳圣马歌科技有限公司 | 一种自动产生智能合约的功能测试页面的方法及装置 |
CN109408373A (zh) * | 2018-09-26 | 2019-03-01 | 深圳壹账通智能科技有限公司 | 智能合约的测试方法、计算机可读存储介质及测试终端 |
CN109543457A (zh) * | 2018-11-07 | 2019-03-29 | 泰康保险集团股份有限公司 | 管控智能合约之间调用的方法及装置 |
US20190317936A1 (en) * | 2018-11-09 | 2019-10-17 | Innoplexus Ag | System and method for interoperability of blockchains |
CN109829013A (zh) * | 2018-12-27 | 2019-05-31 | 上海点融信息科技有限责任公司 | 用于在区块链网络中运行智能合约的方法、存储介质、计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111090581A (zh) | 2020-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111090581B (zh) | 智能合约测试方法、装置、计算机设备和存储介质 | |
Al-Bassam et al. | Chainspace: A sharded smart contracts platform | |
CN113468602B (zh) | 一种数据检验方法、装置及设备 | |
CN108804336A (zh) | 交互***测试方法、装置、计算机设备和存储介质 | |
CN108776936A (zh) | 保险理赔方法、装置、计算机设备和存储介质 | |
CN109656778B (zh) | 数据获取方法、装置、计算机设备和存储介质 | |
CN112101938B (zh) | 基于区块链的数字***使用方法、装置及电子设备 | |
CN112801658B (zh) | 跨境资源转移真实性审核方法、装置及电子设备 | |
CN110633963A (zh) | 电子票据处理方法、装置、计算机可读存储介质和设备 | |
CN111314172B (zh) | 基于区块链的数据处理方法、装置、设备及存储介质 | |
CN112200569B (zh) | 基于区块链的数字***使用方法、装置及电子设备 | |
CN113609219A (zh) | 一种基于区块链验证文件的方法、***、装置和存储介质 | |
CN111949531B (zh) | 区块链网络的测试方法、装置、介质及电子设备 | |
CN113010861B (zh) | 一种基于区块链的融资事务中的身份验证方法和*** | |
CN111814193B (zh) | 一种信息共享方法、装置及设备 | |
CN110602051B (zh) | 基于共识协议的信息处理方法及相关装置 | |
CN110458541B (zh) | 基于区块链的对象置换方法及装置 | |
CN112256799A (zh) | 基于区块链的数据处理方法、装置、服务器及存储介质 | |
Bakaul et al. | The Implementation of Blockchain in Banking System using Ethereum | |
CN115701078B (zh) | 跨链交易处理方法、装置、电子设备以及存储介质 | |
CN110535664B (zh) | 基于区块链的数据处理方法、装置、服务器及存储介质 | |
CN113761496A (zh) | 一种基于区块链的身份校验方法及装置和电子设备 | |
CN113469811A (zh) | 区块链交易处理方法及装置 | |
CN112766971A (zh) | 在区块链中发送交易和执行交易的方法和装置 | |
CN112380128A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |