基于函数签名相似度计算的智能合约测试种子推荐方法技术

技术编号:30405087 阅读:22 留言:0更新日期:2021-10-20 11:06
本发明专利技术公开了基于函数签名相似度计算的智能合约测试种子推荐方法,从以太坊区块中获取历史交易中出现的执行函数与相应输入并存入数据文件,随后对待测合约的函数进行函数签名的提取,将每一个函数签名与数据文件中出现的执行函数的函数签名进行比对,借助对文本的编码以及机器学习模型BERT获取每一对函数的相似度系数,从中挑选与待测合约函数最相似的k个执行函数的输入作为测试种子,来有效地测试智能合约。本发明专利技术方法能够高效产生一些符合实际意义、优质的测试种子,缓解了进行智能合约测试时缺失优质种子而无法深入检测合约缺陷和漏洞的问题。陷和漏洞的问题。陷和漏洞的问题。

【技术实现步骤摘要】
基于函数签名相似度计算的智能合约测试种子推荐方法


[0001]本专利技术涉及基于函数签名相似度计算的智能合约测试种子推荐方法,属于智能合约开发与测试


技术介绍

[0002]自从出现了去中心化的区块链技术用来进行加密货币的交易,智能合约技术也逐渐受到了工业界和学术界的关注。智能合约给交易的参与者提供了一种可信交易机制,不需要中心机构的帮助就能够避免许多可能的交易异常和损失。智能合约是一种能够自我执行的程序,它同时为区块链平台增添更多可能的功能与应用,比如众筹、游戏等。例如在全球大型开源去中心化应用平台以太坊上,就包含了数以百计的智能合约,每一份智能合约都可以存储大量以太币,它是一种能在以太坊上进行交易的加密货币。
[0003]由于智能合约的执行往往牵涉金钱交易,智能合约中存在的安全问题往往会导致恐怖的经济损失,例如历史上臭名昭著的DAO攻击导致了以太坊巨大的货币损失,并且影响了以太坊社区的公平性。像这类事件说明了在智能合约部署之前提升合约代码质量的重要性,但是实际检测合约漏洞是非常困难的,因为用作编写智能合约的语言语义十分复杂。不过由于智能合约相比于普通的应用软件,其篇幅较小且功能相对单一,因此在现实世界中许多智能合约代码相似度极高,功能也几乎相同,例如基于以太坊发行的代币、投票等。
[0004]在之前的研究中有很多测试智能合约的方法依赖于模糊测试和变异,因为模糊测试和变异可以产生大量的测试用例,可以高吞吐地尝试使用多次测试来检测异常以及获得产生异常的输入。但是目前的方法主要存在的问题在于:(1)比较依赖于现有存在的输入,例如通过变异来生成更优质的种子,往往依靠先前已经存在的较为优质的种子,但是无法保证初始测试种子的质量;(2)产生种子的过程十分随机,这样导致了巨大的搜索空间,不利于高效地测试并检测漏洞。例如在对智能合约中整数类型的数据进行测试时,搜索空间达到了2
256
,这会产生大量无效数据;(3)由于随机产生测试种子,很多产生的测试用例缺乏真实性,是难以出现在现实交易中的。目前的研究较少关注此类问题。

技术实现思路

[0005]本专利技术所要解决的技术问题是:提供基于函数签名相似度计算的智能合约测试种子推荐方法,该方法可以高效产生一些符合实际意义、优质的测试种子,并且缓解了测试过程中种子搜索空间大的问题,同时保证了效率和吞吐率。
[0006]本专利技术为解决上述技术问题采用以下技术方案:
[0007]基于函数签名相似度计算的智能合约测试种子推荐方法,包括如下步骤:
[0008]步骤1,从以太坊公有链的区块上获取所有的交易信息T
i
,1≤i≤n,其中n表示公有链上交易的总数,对于每一个交易T
i
,获取交易中触发的智能合约执行函数每一个执行函数带有触发该执行函数的输入则有执行函数和输入对将所有交易的执行函数与输入对保存起来,形成数据文件
[0009]步骤2,对数据文件D中各个执行函数解析得到执行函数的函数签名则解析后数据文件
[0010]步骤3,对待测合约,获取其待测函数序列f1,f2,...,f
m
,其中m表示待测合约中总共存在的待测函数个数,对每个待测函数f
j
解析得到待测函数的函数签名sig
j
,1≤j≤m;
[0011]步骤4,对每一个待测函数的函数签名sig
j
进行编码得到待测函数编码e
j
;同理对每一个执行函数的函数签名进行编码得到执行函数编码E
i

[0012]步骤5,对于待测函数f
j
,使用待测函数编码e
j
与每一个执行函数编码E
i
计算相似度值similarity_value,并将所有相似度值按由大到小的顺序进行排序,选择排序前k的相似度值,这些相似度值对应的执行函数的输入作为用来测试待测函数f
j
的种子输入。
[0013]作为本专利技术的一种优选方案,步骤2所述执行函数的函数签名,其具体结构为:(funcName,parameterType1,parameterType2,...,parameterTypeN),其中,funcName表示执行函数的函数名,parameterType表示执行函数的输入参数的类型,N表示输入参数的类型总数。
[0014]作为本专利技术的一种优选方案,所述步骤3所述待测函数的函数签名,其具体结构为:(funcName,parameterType1,parameterType2,...,parameterTypeM),其中,funcName表示待测函数的函数名,parameterType表示待测函数的输入参数的类型,M表示输入参数的类型总数。
[0015]作为本专利技术的一种优选方案,步骤4所述对每一个待测函数的函数签名sig
j
进行编码得到待测函数编码e
j
中,编码采用自然语言处理模型BERT,且模型BERT的输入需要使用待测函数的函数签名的文本表示方式,即funcName parameterType1 parameterType2

parameterTypeM,在输入之前将文本表示方式进行分词;模型BERT的输出为一个m
×
p的向量,其中m为待测函数个数,p为模型BERT内部设置的向量长度参数。
[0016]作为本专利技术的一种优选方案,步骤5所述相似度值similarity_value的计算公式如下:
[0017]similarity_value=cos(e
j
,E
i
)
[0018]其中,e
j
表示待测函数编码,E
i
表示执行函数编码。
[0019]本专利技术采用以上技术方案与现有技术相比,具有以下技术效果:
[0020]本专利技术通过提出一种基于函数签名相似度计算的智能合约测试种子推荐方法,自动化地帮助开发者提供待测合约的测试用例,同时缓解了一些测试工具无法快速获得优质初始种子的问题,一定程度上缩小了种子的搜索空间。另外,由于现实生活中的智能合约代码相似度极高,因此该方法具有较高的通用性和扩展性,并且产生的测试种子贴合待测合约的语义信息。本专利技术可以提高智能合约开发以及代码测试与漏洞检测的效率。
附图说明
[0021]图1是本专利技术基于函数签名相似度计算的智能合约测试种子推荐方法的流程图。
具体实施方式
[0022]下面详细描述本专利技术的实施方式,所述实施方式的示例在附图中示出。下面通过
参考附图描述的实施方式是示例性的,仅用于解释本专利技术,而不能解释为对本专利技术的限制。
[0023]针对智能合约缺乏优质并且真实的测试种子,本专利技术提出了一种基于函数签名相似度计算的智能合约测试种子推荐方法,使用现实世界中的真实的交易执行函数与相关的输入,通过计算待测函数签名与执本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于函数签名相似度计算的智能合约测试种子推荐方法,其特征在于,包括如下步骤:步骤1,从以太坊公有链的区块上获取所有的交易信息T
i
,1≤i≤n,其中n表示公有链上交易的总数,对于每一个交易T
i
,获取交易中触发的智能合约执行函数每一个执行函数带有触发该执行函数的输入则有执行函数和输入对将所有交易的执行函数与输入对保存起来,形成数据文件步骤2,对数据文件D中各个执行函数解析得到执行函数的函数签名则解析后数据文件步骤3,对待测合约,获取其待测函数序列f1,f2,...,f
m
,其中m表示待测合约中总共存在的待测函数个数,对每个待测函数f
j
解析得到待测函数的函数签名sig
j
,1≤j≤m;步骤4,对每一个待测函数的函数签名sig
j
进行编码得到待测函数编码e
j
;同理对每一个执行函数的函数签名进行编码得到执行函数编码E
i
;步骤5,对于待测函数f
j
,使用待测函数编码e
j
与每一个执行函数编码E
i
计算相似度值similarity_value,并将所有相似度值按由大到小的顺序进行排序,选择排序前k的相似度值,这些相似度值对应的执行函数的输入作为用来测试待测函数f
j
的种子输入。2.根据权利要求1所述基于函数签名相似度计算的智能合约测试种子推荐方法,其特征在于,步骤2所述执行函数的函数签名,其具体结构为:(funcName,parameterType1,parameterType2,...,pa...

【专利技术属性】
技术研发人员:刘哲周滕
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1