System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及智能合约测试领域,尤其涉及基于合约状态和日志分析的智能合约测试方法。
技术介绍
1、智能合约:智能合约是存储在区块链上的代码,它的相关存储变量会保存在区块链的状态树中。智能合约的应用二进制接口(abi)记录着它的函数的输入值格式和返回值格式。智能合约的日志即合约在运行过程中产生的由开发者事先定义好的日志,其中包含事先设计好的参数。智能合约的运行需要消耗gas,gas由交易发起者设定,当智能合约执行过程中gas耗尽,则交易中止。
2、随着区块链的广泛应用,智能合约也被广泛应用到包括金融、慈善、供应链等多个领域中,同时,智能合约能够直接控制和管理大量的资金,然而,随着智能合约的功能性以及支持的业务逐渐复杂,智能合约的代码体量随之增大,智能合约中的漏洞也呈现出多样化和复杂化的趋势,造成了数以亿计的经济损失。因此,智能合约的漏洞问题成为一个重要且急需解决的难题。
3、在传统语言的测试中,通常以程序崩溃作为测试的目标,而无需额外设置检测机制用于从运行日志中抓取漏洞,由于区块链的特性,智能合约的崩溃将会直接导致状态回滚,一般无法造成状态异常和经济损失。为此,研究人员针对各种漏洞为智能合约测试设计出相应的漏洞检测机制(后文简称“预言机”),比如“当智能合约先转移以太币给其他合约再修改相应的账本变量会导致重入漏洞”。然而,随着智能合约的发展,已有的预言机无法适配新型的漏洞模式,从而导致过高的假阳性和假阴性,为此提出一种基于合约状态和日志分析的智能合约测试方法。
技术实现思路>
1、本专利技术的目的是为了解决现有技术中存在随着智能合约的发展,已有的预言机无法适配新型的漏洞模式,从而导致过高的假阳性和假阴性的缺点,而提出的基于合约状态和日志分析的智能合约测试方法。
2、为了实现上述目的,本专利技术采用了如下技术方案:
3、基于合约状态和日志分析的智能合约测试方法,包括以下步骤:
4、a1:给定智能合约;
5、a2:初始化种子池;
6、a2.1:a1中智能合约已部署到链上,则收集该智能合约的历史交易和状态{(交易t,状态s)},将其作为测试的种子池;
7、a2.2:a1中智能合约未部署到链上,则通过智能合约的应用二进制接口(abi)随机生成交易作为种子池,状态均设为合约部署后的初始状态;
8、a3:测试交易构造,从种子池中随机选取交易进行变异和测试,所述变异即对交易t中的元素进行随机修改或者利用另一笔交易t’的元素替换交易t中的部分元素;
9、进一步的,所述a2.1中:
10、状态为智能合约在执行交易t前的状态,即智能合约相关的存储变量;
11、交易t为智能合约的输入,包含发送者、接收者、以太币数量、调用的函数以及相应的参数、区块的高度和时间戳和gas消耗的限制值。
12、进一步的,所述a3中:
13、两笔不同的交易使用t1,t2代表;
14、交易执行前合约的状态使用s0代表,交易执行后的状态使用s1、s2代表;
15、智能合约执行交易前后涉及的代币余额(包括以太币余额和erc20代币余额)使用b1,b2代表;
16、智能合约在执行过程中产生的日志使用l1,l2代表。
17、进一步的,若智能合约在执行了交易t1后,代币余额b0和代币余额b1的总额不相等,则认为智能合约存在代币余额计算错误问题,如整数溢出,为代币余额计算错误。
18、进一步的,设定交易t1与t2中的gas消耗的限定值不同,如果合约将两笔交易在相同的状态s0执行后,产生的状态s1和s2(或者代币余额b1和b2、或者日志l1和l2)不一致,则认为智能合约存在gas依赖漏洞,即智能合约的运行结果会受到gas值的影响,为gas依赖漏洞。
19、进一步的,设定交易t1与t2的区块状态(区块高度和时间戳)不同,若合约将两笔交易在相同的状态s0执行后,产生的状态s1和s2(或者代币余额b1和b2、或者日志l1和l2)不一致,则认为智能合约存在区块状态依赖漏洞,即智能合约的运行结果会受到区块状态的影响,为区块状态依赖漏洞。
20、进一步的,给定{交易t1,交易t2}和{交易t2,交易t1}两个交易序列,若合约将两笔交易序列在相同的状态s0执行后,产生的状态s1和s2(或者代币余额b1和b2、或者日志l1和l2)不一致,则认为智能合约存在交易顺序依赖漏洞,即智能合约的运行结果会受到交易顺序的影响,为交易顺序依赖漏洞。
21、与现有技术相比,本专利技术的有益效果是:
22、1.本专利技术通过智能合约的历史交易提取信息用于组建测试的种子池,使得测试能够探索到智能合约更多的运行路径,提高测试的效率。
23、2.本专利技术设计了不同的漏洞对应的合约的状态、日志和代币余额的不一致的情况作为新型的漏洞预言机,提高了漏洞检测方法的有效性。
24、3.本专利技术从合约的历史交易提取信息以构建更加高效的测试种子池,同时,通过提取智能合约在测试前后的状态、日志和代币余额等信息作为基础,进一步设计了不同漏洞的新型预言机,提高了漏洞检测方法的有效性和实用性
25、本专利技术中,测试能够探索到智能合约更多的运行路径,提高测试的效率,同时设计了不同的漏洞对应的合约的状态、日志和代币余额的不一致的情况作为新型的漏洞预言机,提高了漏洞检测方法的有效性。
本文档来自技高网...【技术保护点】
1.基于合约状态和日志分析的智能合约测试方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,所述A2.1中:
3.根据权利要求2所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,所述A3中:
4.根据权利要求3所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,若智能合约在执行了交易T1后,代币余额B0和代币余额B1的总额不相等,则认为智能合约存在代币余额计算错误问题,为代币余额计算错误。
5.根据权利要求3所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,设定交易T1与T2中的GAS消耗的限定值不同,如果合约将两笔交易在相同的状态S0执行后,产生的状态S1和S2(或者代币余额B1和B2、或者日志L1和L2)不一致,则认为智能合约存在GAS依赖漏洞,即智能合约的运行结果会受到GAS值的影响,为GAS依赖漏洞。
6.根据权利要求3所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,设定交易T1与T2的区块状态(区块高度和时间戳)
7.根据权利要求3所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,给定{交易T1,交易T2}和{交易T2,交易T1}两个交易序列,若合约将两笔交易序列在相同的状态S0执行后,产生的状态S1和S2(或者代币余额B1和B2、或者日志L1和L2)不一致,则认为智能合约存在交易顺序依赖漏洞,即智能合约的运行结果会受到交易顺序的影响,为交易顺序依赖漏洞。
...【技术特征摘要】
1.基于合约状态和日志分析的智能合约测试方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,所述a2.1中:
3.根据权利要求2所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,所述a3中:
4.根据权利要求3所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,若智能合约在执行了交易t1后,代币余额b0和代币余额b1的总额不相等,则认为智能合约存在代币余额计算错误问题,为代币余额计算错误。
5.根据权利要求3所述的基于合约状态和日志分析的智能合约测试方法,其特征在于,设定交易t1与t2中的gas消耗的限定值不同,如果合约将两笔交易在相同的状态s0执行后,产生的状态s1和s2(或者代币余额b1和b2、或者日志l1和l2)不一致,则认为智能合约存在gas依赖漏洞...
【专利技术属性】
技术研发人员:李志伟,
申请(专利权)人:广东启链科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。