スマート コントラクトのテスト中に Mythril が遭遇したいくつかの問題と解決策

著者は最近、スマート コントラクトを検出するために Mythril ツールを使用して、スマート コントラクトに関連する実験を行っており、その使用過程で一連の問題に遭遇したため、ここで皆さんにいくつかの提案をします。

 

ミスリルがスマートコントラクトを検出した場合の契約欠陥の分類は以下の通り

SWC ID: 116----------脆弱性の分類番号を示します。

重大度: 低----------脆弱性の重大度を示します。

契約: ルーレット----------検出された契約の名前を示します

関数名: fallback----------脆弱性を発見した関数名を示します。

PCアドレス:70----------プログラムカウンタを示します。Program Counterの略です。 

1. ミスリルの検出方法

Myhtril は 2 つの形式でスマート コントラクトを検出します。1 つはスマート コントラクト サンプルのソース ファイル .sol に基づいて検出され、もう 1 つはスマート コントラクトのアドレスを通じて検出されます。

1. .sol に従って検出します

$ mythanalyze <solidity-file>

2. アドレスによる検出

$ mythanalyze -a <契約アドレス> 

ここの docker を通じて Mythril をダウンロードした後、最初のケースでは検出できるが、2 番目のケースでは検出できないことがわかりました。 pip3 経由で Mythril を ダウンロードする必要があるかもしれませんが、pip3 で Mythril をダウンロードするのは非常に面倒で、インストールパッケージ、作者は最終的にあきらめたので、試してみてください。ダウンロードが成功した場合は、次のステートメントを渡すことができます。

神話 --バージョン

mythril が pip3 経由で正常にダウンロードされたかどうかを検出するには (注: docker 経由でダウンロードされた場合、ここで myth バージョンをチェックすると失敗が表示されますが、最初の方法を使用してコントラクトを検出できます (非常に法外! 衝撃的!)) 

もう 1 つの可能性は、壁を通過する必要があるということですが、作者はそれを試しましたが、うまくいきませんでした。

2. .solを介して契約速度を検出するには遅すぎます

Mythril を介して契約を検出するための補足説明をいくつか示します。

通常、検出ステートメントは次のとおりです。

sudo docker run -v $(pwd):/home/test mythril/mythanalyze /home/test/test.sol

補足説明:

sudo docker run -v $(pwd):/home/test mythril/mythanalyze /home/test/test.sol --solv 0.4.25 --solver-timeout 60 --execution-timeout 60 -o text -t 3

の:

  • solv は指定された Solidity のコンパイルされたバージョンです
  • ソルバータイムアウト Solidity バージョンのダウンロードタイムアウト
  • 実行タイムアウト、実行タイムアウト
  • o 出力形式、オプションの text/markdown/json/jsonv2
  • t トランザクション数

最初の方法、つまりソース file.sol メソッドを使用して検出する場合、結果を取得するまでに 2 ~ 4 時間かかる場合がありますが、この時点では、次のような実行タイムアウトメソッドを使用できます。

 sudo docker run -v $(pwd):/home/test mythril/mythanalyze --execution-timeout 60 /home/test/test.sol

時間を60秒以内にコントロールしてください。

このようにして、検出効率が大幅に向上します。

3. ネットワークが不安定です 

契約のテストを行う場合には、安定したネットワーク環境を維持する必要がありますが、ネットワークの不安定性は検出に大きな影響を与え、以下のような状況が発生する可能性があります。

47d3993a14e04adda4c2e93cf8dfbf5b.png

おすすめ

転載: blog.csdn.net/qq_45138078/article/details/127695308