CN114510420B - 一种基于蜕变测试的区块链智能合约测试方法 - Google Patents
一种基于蜕变测试的区块链智能合约测试方法 Download PDFInfo
- Publication number
- CN114510420B CN114510420B CN202210106024.XA CN202210106024A CN114510420B CN 114510420 B CN114510420 B CN 114510420B CN 202210106024 A CN202210106024 A CN 202210106024A CN 114510420 B CN114510420 B CN 114510420B
- Authority
- CN
- China
- Prior art keywords
- relation
- metamorphic
- intelligent contract
- input
- output
- 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 104
- 238000000034 method Methods 0.000 claims abstract description 23
- 230000007547 defect Effects 0.000 claims abstract description 15
- 238000010998 test method Methods 0.000 claims abstract description 4
- 238000012546 transfer Methods 0.000 claims description 22
- 238000010276 construction Methods 0.000 claims description 4
- 238000002474 experimental method Methods 0.000 abstract description 3
- 238000012795 verification Methods 0.000 abstract description 2
- 238000006243 chemical reaction Methods 0.000 description 3
- 239000003999 initiator Substances 0.000 description 3
- 238000013522 software testing Methods 0.000 description 2
- 101000872081 Danio rerio Delta-like protein A Proteins 0.000 description 1
- 101000872084 Danio rerio Delta-like protein B Proteins 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification 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
-
- 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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- 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/3684—Test management for test design, e.g. generating new test cases
-
- 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/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于蜕变测试的区块链智能合约测试方法,属于软件工程领域。包括:步骤1,基于智能合约,分析调用的函数及其参数的编码;步骤2,根据调用的函数以及相应的参数分析智能合约参数之间的必要属性;步骤3,根据必要属性中输入与输出的关系确定蜕变关系(MRs),包括输入的蜕变关系input relation以及输出的蜕变关系output relation;步骤4,使用随机测试方法生成原始测试用例,并根据input relation生成后续测试用例,将两组测试用例分别在智能合约中运行,通过判断输出的结果是否满足相应的output relation验证结果的正确性。本方法在测试智能合约安全缺陷的同时缓解了智能合约测试中的oracle问题,通过对现有的智能合约漏洞进行测试实验,验证了提出方法的有效性和优势。
Description
技术领域
本发明属于软件测试中蜕变测试技术领域,涉及一种面向区块链智能合约安全缺陷的蜕变测试方法
背景技术
以太坊智能合约(在区块链上运行的自治程序)通常控制金融和知识产权交易。由于它们发挥着至关重要的作用,因此智能合约需要完整、全面和有效的测试方法。在软件测试中,理想的测试判定(test oracle)能够对测试结果是否正确给出确定的判定。然而,这种理想的测试判定通常并不容易得到,或者获取的成本远远超出了软件本身的价值,这个问题被称为测试判定难题(test oracle problem)。目前,测试判定难题已经成为制约软件测试技术发展的瓶颈。蜕变测试(metamorphic testing)通过验证多个测试用例的测试结果是否满足蜕变关系来确定测试用例执行是否正确。虽然这种方法不能确定单个测试结果的正确性,即不能彻底解决测试判定难题,但是当蜕变关系不满足时,可以判定被测软件中一定存在着故障。本方法介绍了一种面向区块链智能合约安全缺陷的蜕变测试方法,它可以针对区块链智能合约中具体的漏洞生成测试用例以检测区块链智能合约中可能会出现的漏洞。
发明内容
为了解决区块链中智能合约测试中存在的oracle问题,本发明提出了一种面向区块链智能合约安全缺陷的蜕变测试方法(Smart contract-MT),在检测智能合约是否存在漏洞的前提下,缓解测试中出现的oracle问题,减少获取判定的成本,从而提高测试效率。并且将本方法针对具体出现漏洞的智能合约进行实验测试,验证了提出方法的有效性和优势。
本发明的技术方案如下:
步骤1,获取被测智能合约中调用的参数及函数的编码,确定构建蜕变关系必要属性的函数关系;
步骤2,根据调用的函数及其相应的参数确定区块链智能合约蜕变关系的构造中依赖的必要属性;
步骤3,根据必要属性中输入与输出的关系确定蜕变关系(MR),包括输入的蜕变关系input relation以及输出的蜕变关系output relation;
步骤4,使用随机测试方法和蜕变关系生成原始测试用例e和后续测试用例e’,将两组测试用例分别在智能合约中运行,通过判断输出的结果是否满足相应的蜕变关系验证智能合约的正确性。
进一步方案,上述步骤1的具体步骤如下:
步骤1.1,查找智能合约中调用的函数,在智能合约涉及的各个参数中,TXDATA为调用函数的编码,根据调用函数得到影响输入和输出结果的参数;
步骤1.2,智能合约的调用中涉及到的参数包括<SENDER ADDRESS,TO CONTRACT,VALUE,GAS USED,GAS LIMIT,GAS PRICE>,其中SENDER ADDRESS是调用合约时发起转账的用户合约地址,TO-CONTRACT是接收用户的合约地址,VALUE是转账金额,GAS-USED是合约消耗的汽油费,GAS-LIMIT是用户调用合约预计消耗的汽油费最大值,GAS-PRICE是汽油费单位数量的价格。收集其中涉及影响调用函数结果的参数。
进一步方案,上述步骤2的具体步骤如下:
步骤2.1,将收集到的函数及其相应参数进行分析。
步骤2.2,确定输入的参数以及输出的参数之间对应函数关系确定其存在的数值、算法、几何等必要属性。
进一步方案,上述步骤3的具体步骤如下:
步骤3.1,在满足必要属性的条件下通过控制变量构建输入蜕变关系inputrelation。
步骤3.2,根据输入的蜕变关系以及相应的必要属性确定输出应该满足的蜕变关系output relation。
进一步方案,上述步骤4的具体步骤如下:
步骤4.1,在输入域范围内随机生成n个原始测试用例A;
步骤4.2,根据input relation以及原始测试用例生成n个后续测试用例A’;
步骤4.3,将两组测试用例分别在待测智能合约中运行;
步骤4.4,若运行结果满足input relation,方法结束,进行下一组结果验证。
步骤4.5,若运行结果不满足output relation,记录测试数据,方法结束。
与现有技术相比,本发明的有益效果:
1、面向区块链智能合约安全缺陷的蜕变测试方法(Smart contract-MT),能对智能合约涉及的具体功能全面分析,确定智能合约中调用的函数以及参数类型,测试过程中出现的漏洞可以更高效的确定漏洞位置。构建蜕变关系可以用最小的代价检测智能合约相关功能存在的漏洞,改善了传统的智能合约测试方法需要智能合约历史中出现的漏洞案例来对测试程序库进行完善而引起代价过大的问题。
2、面向区块链智能合约安全缺陷的蜕变测试方法(Smart contract-MT),通过验证多个测试用例的测试结果是否满足蜕变关系来确定测试用例执行是否正确,从而缓解了软件测试中理想的测试判定通常并不容易得到,或者获取的成本远远超出了软件本身的价值的判定问题(test oracle problem)。
附图说明
图1是本发明提出了一种面向区块链智能合约安全缺陷的蜕变测试方法(Smartcontract-MT)流程图。
图2是构建蜕变关系的流程图。
图3是根据原始测试用例和蜕变关系生成后续测试用例的流程图。
图4是验证原始测试用例和后续测试用例结果是否符合蜕变关系的流程图。
具体实施方式
为了能够更清楚地理解本发明一种面向区块链智能合约安全缺陷的蜕变测试方法(Smart contract-MT)的技术内容,下面结合附图和具体实施案例对本发明作进一步说明,须指出的是,所描述给出的实施案例旨在便于对本发明的理解,而对其没有任何限定要求。
本发明给出的一种面向区块链智能合约安全缺陷的蜕变测试方法(Smartcontract-MT)的流程图如图1所示,第一步获取智能合约中调用的函数及参数的编码;第二步根据获取到的智能合约中调用的函数及其相应的参数分析智能合约中参数之间的必要属性;第三步根据必要属性中输入与输出的关系确定蜕变关系(MR),包括输入的蜕变关系input relation以及输出的蜕变关系output relation;第四步使用随机测试方法和蜕变关系生成原始测试用例e;第五步根据原始测试用例和蜕变关系(MR)生成后续测试用例e’;第六步将两组测试用例分别在智能合约中运行,通过判断输出的结果是否满足相应的蜕变关系,如果不满足,记录实验数据,结束方法,如果满足进行第七步;第七步返回第一步继续匹配操作。
下面第一步的智能合约调用函数为function sendcoin,mapping;涉及参数包含indexed_from,indexed_to,_type,_value,sender,receiver,transfertype,amount;
参照图2,构建蜕变关系过程如下:
步骤201将收集到的函数及其相应参数进行分析,在这个例子中调用的函数功能实现了将发送方钱包地址中的代币进行转账操作,转账到目标账户接收方的钱包地址中,涉及的参数分别为A:转账交易的发送方钱包地址(类型:10位长整数),B:转账交易的接收方钱包地址(类型:10位长整数),P:转账类型(类型:Integer),M:转账交易金额(类型:0~50000的整数)△A:A账户交易前和交易后余额的差额,△B:B账户交易后和交易前的余额之差。步骤202是确定输入的参数以及输出的参数之间对应函数关系确定其存在的数值、算法、几何等必要属性,根据确定的函数以及参数类型,可以确定转账操作发起方和接受方的钱包地址影响操作过程中代币的流向,转账金额、手续费定义、以及交易类型影响转账操作前后发起方和接收方钱包地址余额的差值,由此确定数值必要属性,即交易操作前后发起方的余额差值和接受方的余额差值之差为交易类型决定的手续费金额。步骤203是输入蜕变关系input relation在满足必要属性的条件下通过控制变量构建,在本例中定义源输入Source input:As,Bs,Ps,Ms,其中As是转账交易的发送方钱包地址,Bs是转账交易的接收方钱包地址,Ps是转账类型,Ms是转账交易金额,后续输入Follow-up input:Af,Bf,Pf,Mf,其中Af是转账交易的发送方钱包地址,Bf是转账交易的接收方钱包地址,Pf是转账类型,Mf是转账交易金额,输入的蜕变关系为:Input relation:Af=As Bf=Bs Pf=Ps Mf=2Ms,即原始测试用例和后续测试用例中转账发送方和接收方的钱包地址相等,交易类型相等,后续测试用例的交易金额为原始测试用例交易金额的两倍。步骤204是输出蜕变关系的构建,在本例中定义源输出Source output:△As,△Bs,其中△As是在原始测试用例输入的情况下A账户交易前后余额的差额,△Bs是在原始测试用例输入的情况下B账户在交易前后的余额差额;后续输出Follow-up output:△Af,△Bf,其中△Af是在后续测试用例输入的情况下A账户交易前后余额的差额,△Bf是在后续测试用例输入的情况下B账户交易前后余额的差额;输出的蜕变关系为:Output relation:△Af≥2△As,即后续测试用例的A账户交易前后余额的差值大于等于两倍的原始测试用例的A账户交易前后的余额差值、△Bf=2△Bs,即后续测试用例的B账户交易前后余额的差值等于两倍原始测试用例的B账户交易前后余额的差值,方法结束。
参照图3,根据原始测试用例和蜕变关系生成后续测试用例的过程如下:步骤301用随机的测试用例生成策略在输入域范围内生成n个测试用例作为原始测试用例e;步骤302根据生成的原始测试用例和构建的输入蜕变关系得到后续测试用例e’。
参照图4,验证原始测试用例和后续测试用例结果是否符合蜕变关系的过程如下:
步骤401将原始测试用例和后续测试用例分别在待测智能合约中运行;步骤402,判断测试用例e和e’的输出结果E和E’是否符合输出的蜕变关系如果不符合,至步骤步骤403说明智能合约存在安全缺陷,收集测试数据,步骤404,如果符合,方法结束,进行下一组测试用例的测试。
为验证本方法的有效性,收集了存在安全缺陷的智能合约作为实验对象进行实验,试验中相关的变量名及其类型和含义如表1所示,试验结果如表2所示,结果验证了本方法在验证智能合约安全缺陷,缓解oracle问题上的有效性。
表1变量名及其含义
表2测试异常结果以及测试用例编号数据
以上所述仅用于清楚表述本发明具体实施例,并不用于限定保护范围,在不违背本发明实质内容和精神前提下,所作任何修改、润饰等都将落入本发明保护范围内。
Claims (2)
1.一种面向区块链智能合约安全缺陷的蜕变测试方法,其特征在于,包括如下步骤:
步骤1,获取被测区块链智能合约中调用的参数及函数的编码,确定构建蜕变关系必要属性的函数关系;
步骤2,根据调用的函数及其相应的参数确定区块链智能合约蜕变关系的构造中依赖的必要属性;
步骤3,根据必要属性中输入与输出的关系确定蜕变关系(MR),包括输入的蜕变关系input relation以及输出的蜕变关系output relation;
步骤4,使用随机测试方法和蜕变关系生成原始测试用例e和后续测试用例e’,将两组测试用例分别在智能合约中运行,通过判断输出的结果是否满足相应的蜕变关系验证智能合约的正确性;
所述步骤2的具体实现包括如下步骤:
步骤2.1,将收集到的函数及其相应参数进行分析;
步骤2.2,确定输入的参数以及输出的参数之间对应函数关系确定其必要属性,必要属性包括数值属性、算法属性、几何属性;
所述步骤3的具体实现包括如下步骤:
步骤3.1,在满足必要属性的条件下通过控制变量构建输入蜕变关系input relation;
步骤3.2,根据输入的蜕变关系以及相应的必要属性确定输出应该满足的蜕变关系output relation;
所述步骤4的具体实现包括如下步骤:
步骤4.1,在输入域范围内随机生成n个原始测试用例A;
步骤4.2,根据input relation以及原始测试用例生成n个后续测试用例A’;
步骤4.3,将两组测试用例分别在待测智能合约中运行;
步骤4.4,若运行结果满足input relation,方法结束,进行下一组结果验证;
步骤4.5,若运行结果不满足output relation,记录测试数据,方法结束。
2.根据权利要求1所述的一种面向区块链智能合约安全缺陷的蜕变测试方法,其特征在于,所述步骤1的具体实现包括如下步骤:
步骤1.1,查找智能合约中调用的函数,在智能合约涉及的各个参数中,TXDATA为调用函数的编码,根据调用函数得到影响输入和输出结果的参数;
步骤1.2,智能合约的调用中涉及到的参数包括<SENDER ADDRESS,TO CONTRACT,VALUE,GAS USED,GAS LIMIT,GAS PRICE>,其中SENDER ADDRESS是调用合约时发起转账的用户合约地址,TO-CONTRACT是接收用户的合约地址,VALUE是转账金额,GAS-USED是合约消耗的汽油费,GAS-LIMIT是用户调用合约预计消耗的汽油费最大值,GAS-PRICE是汽油费单位数量的价格,收集其中涉及影响调用函数结果的参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210106024.XA CN114510420B (zh) | 2022-01-28 | 2022-01-28 | 一种基于蜕变测试的区块链智能合约测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210106024.XA CN114510420B (zh) | 2022-01-28 | 2022-01-28 | 一种基于蜕变测试的区块链智能合约测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114510420A CN114510420A (zh) | 2022-05-17 |
CN114510420B true CN114510420B (zh) | 2024-05-10 |
Family
ID=81550156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210106024.XA Active CN114510420B (zh) | 2022-01-28 | 2022-01-28 | 一种基于蜕变测试的区块链智能合约测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114510420B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444092A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 智能合约的测试方法、装置、电子设备及存储介质 |
CN111563742A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 智能合约交易顺序依赖漏洞变异模糊测试方法 |
KR102160379B1 (ko) * | 2020-04-20 | 2020-09-25 | 이화여자대학교 산학협력단 | 블록체인 기반 분산 애플리케이션 테스트 방법 및 테스트 장치 |
CN112860588A (zh) * | 2021-04-07 | 2021-05-28 | 中国科学技术大学 | 一种针对智能合约跨合约漏洞的模糊测试方法 |
CN113934631A (zh) * | 2021-10-14 | 2022-01-14 | 南京大学 | 一种基于蜕变关系匹配的组合测试方法 |
-
2022
- 2022-01-28 CN CN202210106024.XA patent/CN114510420B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444092A (zh) * | 2020-03-24 | 2020-07-24 | 腾讯科技(深圳)有限公司 | 智能合约的测试方法、装置、电子设备及存储介质 |
KR102160379B1 (ko) * | 2020-04-20 | 2020-09-25 | 이화여자대학교 산학협력단 | 블록체인 기반 분산 애플리케이션 테스트 방법 및 테스트 장치 |
CN111563742A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 智能合约交易顺序依赖漏洞变异模糊测试方法 |
CN112860588A (zh) * | 2021-04-07 | 2021-05-28 | 中国科学技术大学 | 一种针对智能合约跨合约漏洞的模糊测试方法 |
CN113934631A (zh) * | 2021-10-14 | 2022-01-14 | 南京大学 | 一种基于蜕变关系匹配的组合测试方法 |
Non-Patent Citations (1)
Title |
---|
蜕变测试技术综述;董国伟;徐宝文;陈林;聂长海;王璐璐;;计算机科学与探索;20090315(02) * |
Also Published As
Publication number | Publication date |
---|---|
CN114510420A (zh) | 2022-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Liao et al. | Soliaudit: Smart contract vulnerability assessment based on machine learning and fuzz testing | |
JP6918245B2 (ja) | 本人確認方法および装置 | |
CN111563742B (zh) | 智能合约交易顺序依赖漏洞变异模糊测试方法 | |
CN102510337A (zh) | 一种量化风险和收益自适应的动态多因子认证方法 | |
CN110365678B (zh) | 一种基于反样本的工控网络协议漏洞挖掘方法 | |
CN105740667A (zh) | 一种基于用户行为的信息识别方法及装置 | |
CN114996126A (zh) | 一种针对eosio智能合约的漏洞检测方法及系统 | |
CN114510420B (zh) | 一种基于蜕变测试的区块链智能合约测试方法 | |
CN110008987B (zh) | 分类器鲁棒性的测试方法、装置、终端及存储介质 | |
US20220046039A1 (en) | Method, device, and computer program product for abnormality detection | |
CN114356755A (zh) | 一种智能合约模糊测试系统 | |
CN113761536B (zh) | 一种基于业务逻辑的安全检测方法及系统 | |
CN114792007A (zh) | 代码检测方法、装置、设备、存储介质和计算机程序产品 | |
CN111815455B (zh) | 一种交易执行方法、系统及装置 | |
CN115811425B (zh) | 一种两安一体化仪表风险迭代设计方法 | |
CN118153017B (zh) | 一种基于ai和大数据的业务管理方法 | |
CN114528550B (zh) | 一种应用于电商大数据威胁识别的信息处理方法及系统 | |
CN115630754B (zh) | 智能网联汽车信息安全的预测方法、装置、设备及介质 | |
CN113610633B (zh) | 身份审核方式的设置方法及装置 | |
CN114154154A (zh) | 一种基于长短期记忆网络的智能合约模糊测试方法及系统 | |
CN115906094A (zh) | 一种软件安全性评估方法、系统及可读存储介质 | |
CN115935374A (zh) | 一种应用安全逻辑漏洞半自动化检测方法、系统及设备 | |
Gloaguen et al. | Discovering Clues of Spoofed LM Watermarks | |
Bani-Hani et al. | Vulnerability Detection and Classification of Ethereum Smart Contracts Using Deep Learning. | |
Geng et al. | Network Intrusion Detection Method Based on Conditional Generative Adversarial Network Integrating Multi-Scale CNN |
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 |