検索

ホームページ  >  に質問  >  本文

Solidity で「デプロイ中に移行で無効なオペコードが発生しました」エラーを修正するにはどうすればよいですか?

「移行」は、デプロイ中に無効なオペコードを検出しました。試す:###

私のmigration.solコード

リーリー

私の truffle config.js ファイル

ああああ

P粉523625080P粉523625080244日前381

全員に返信(1)返信します

  • P粉924915787

    P粉9249157872024-03-27 20:10:04

    これは、solc バージョン 0.8.20 以降、新しいオペコード PUSH0 が最近導入されたことが原因である可能性があります。

    完全なリストについては、「各オペコードが EVM に追加されたのはいつですか?」を参照してください。 p> 本質的に、Solidity コンパイラのバージョンは、展開しようとしているネットワークよりも「先」にあります。言い換えれば、

    solc はオペコードを含むバイトコードを出力しますが、ネットワークにはまだそれがありません。

    考えられる解決策は 3 つあります:

      ターゲット ネットワークが新しいオペコードをサポートするまで待つか、別のネットワークを使用してください。
      • あなたの truffle 設定は
      • 127.0.0.1:8545 に接続していることを示しているので、これはローカルで実行しているネットワーク (例: Ganache) の最新バージョンにアップグレードできることを意味します。問題を解く# ## 以前のバージョンの
      • solc
      • にダウングレードします。 Solidity ファイルの
      • solc
      • バージョンを変更します: pragma Solidity 0.8.19;
      truffle 設定ファイルの
    • solc
    • バージョンを変更します: version: "0.8.19" エラーの根本原因が実際に
        PUSH0
      • オペコードである場合、solc バージョン 0.8.19 ではこれが出力されないため、これで問題は解決します。
      最新の
    • solc
    • バージョンを引き続き使用しますが、最新ではないターゲット EVM バージョンを指定します truffle 構成ファイルの
        solc
      • セクションを更新して、新しいプロパティを追加します: settings: { evmVersion: 'london' } 0.8.20 はデフォルトで
      • evmVersion: 'shanghai'
      • をターゲットとすることに注意してください。これは、PUSH0 を出力できることを意味します。 ただし、2 番目に新しいターゲット EVM バージョン (2023 年 6 月時点) である
      • evmVersion: 'london'
      • をターゲットにオーバーライドすると、実際には solc を伝えることになります。 出力 PUSH0 を避けてください。 エラーの根本原因が実際に PUSH0
      • オペコードである場合、
      • solc はこれを出力しないように指示されているため、これで問題は解決します。
    • 参考文献:

    https://github.com/ethereum/solidity/releases/tag /v0.8.20https://docs.soliditylang.org/en/v0.8.20/using-the-compiler.html#setting-the-evm-version-to-targethttps://trufflesuite.com/docs/truffle/reference/configuration/ #solc
  • キャンセル返事