由于笔者最近在做智能合约相关的实验,使用了Mythril工具来检测智能合约,并在使用的过程中遇到了一系列的问题,这里给大家一点建议。
其中Mythril检测智能合约时的合约缺陷分类如下所示
SWC ID:116----------表示该漏洞的分类编号
Severity:Low----------表示该漏洞的严重程度
Contarct:Roulette----------表示检测的合约名称
Function name:fallback----------表示发现漏洞的函数名称
PC address:70----------表示程序计数器,Program Counter的简称
一、Mythril的检测方法问题
myhtril检测智能合约分为两种形式,一种根据智能合约样本的源文件.sol来检测,另一种则是通过智能合约的地址来检测
1、根据.sol来检测
$ myth analyze <solidity-file>
2、通过地址来进行检测
$ myth analyze -a <contract-address>
这边通过docker下载Mythril之后发现通过第一种情况来检测是可以的,但是通过第二种情况来检测就不行了,可能需要通过pip3来下载Mythril,但是pip3下载Mythril特别繁琐且会让安装很多包,笔者最后放弃了,大家可以试试。如果下载成功的话可以通过语句:
myth --version
来检测是否通过pip3下载mythril成功(注意:如果是通过docker来下载的,这边检查myth版本时会显示失败,但是却可以使用第一种方式来检测合约(非常离谱!震惊!))
还有一种可能就是需要通过翻墙才行,但是笔者试了试没效果,各位也可以尝试一下
二、通过.sol来检测合约速度太慢
这边提供一些通过Mythril检测合约的一些补充语句:
通常检测语句:
sudo docker run -v $(pwd):/home/test mythril/myth analyze /home/test/test.sol
补充语句:
sudo docker run -v $(pwd):/home/test mythril/myth analyze /home/test/test.sol --solv 0.4.25 --solver-timeout 60 --execution-timeout 60 -o text -t 3
其中:
- solv 是指定solidity编译版本
- solver-timeout solidity版本下载超时时间
- execution-timeout,执行超时时间
- o 输出格式,可选text/markdown/json/jsonv2
- t 交易个数
当我们通过第一种方式即源文件.sol方式来检测时可能会出现2-4个小时才出结果的情况,这个时候我们就可以使用execution-timeout的方式,例如:
sudo docker run -v $(pwd):/home/test mythril/myth analyze --execution-timeout 60 /home/test/test.sol
将时间控制在60s之内。
这样子检测的效率会大大提升。
三、网络不稳定
检测合约时,一定要保持在一个稳定的网络环境下,网络不稳定对检测影响很大,可能会出现下面的情况。文章来源:https://www.toymoban.com/news/detail-427213.html
文章来源地址https://www.toymoban.com/news/detail-427213.html
到了这里,关于Mythril测试智能合约遇到的一些问题与解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!