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

2、通过地址来进行检测

$ myth analyze -a  

 这边通过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之内。

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

三、网络不稳定 

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

Mythril测试智能合约遇到的一些问题与解决方法_第1张图片

梦想是不会发光的,发光的是追梦的我们,翻过这座山,他们就会听到你的故事。不管故事的结局是什么,当某人询问你时,你可以慷慨的向她描述来时路上的一路生花。或许,你也是某人翘首以盼的惊喜,你未来的样子都藏在了现在的努力里,那么不妨大胆一点,“少年者,思无邪,而大道就在脚下,走!”

你可能感兴趣的:(智能合约工具Mythril,智能合约,docker,ubuntu)