Mythril测试智能合约遇到的一些问题与解决方法

由于笔者最近在做智能合约相关的实验,使用了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之内。

这样子检测的效率会大大提升。

三、网络不稳定 

检测合约时,一定要保持在一个稳定的网络环境下,网络不稳定对检测影响很大,可能会出现下面的情况。

47d3993a14e04adda4c2e93cf8dfbf5b.png

猜你喜欢

转载自blog.csdn.net/qq_45138078/article/details/127695308