Solidity で「デプロイ中に移行で無効なオペコードが発生しました」エラーを修正するにはどうすればよいですか?
P粉523625080
P粉523625080 2024-03-27 00:03:27
0
1
334

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

    コンストラクターのパラメーターがすべてのアサーション条件を満たしていることを確認してください。
  • コンストラクター コードが範囲外の配列にアクセスしていないことを確認してください。
  • 理由文字列をアサーション ステートメントに追加します。このエラーを解決する方法
私のmigration.solコード

リーリー

私の truffle config.js ファイル

ああああ

P粉523625080
P粉523625080

全員に返信(1)
P粉924915787

これは、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
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!