「移行」は、デプロイ中に無効なオペコードを検出しました。試す:###
リーリー
ああああ
これは、solc バージョン 0.8.20 以降、新しいオペコード PUSH0 が最近導入されたことが原因である可能性があります。
solc
PUSH0
完全なリストについては、「各オペコードが EVM に追加されたのはいつですか?」を参照してください。 p> 本質的に、Solidity コンパイラのバージョンは、展開しようとしているネットワークよりも「先」にあります。言い換えれば、
solc はオペコードを含むバイトコードを出力しますが、ネットワークにはまだそれがありません。
はオペコードを含むバイトコードを出力しますが、ネットワークにはまだそれがありません。
に接続していることを示しているので、これはローカルで実行しているネットワーク (例: Ganache) の最新バージョンにアップグレードできることを意味します。問題を解く# ##
pragma Solidity 0.8.19;
version: "0.8.19"
settings: { evmVersion: 'london' }
を出力できることを意味します。
出力
エラーの根本原因が実際に
はこれを出力しないように指示されているため、これで問題は解決します。
これは、
solc
バージョン 0.8.20 以降、新しいオペコードPUSH0
が最近導入されたことが原因である可能性があります。完全なリストについては、「各オペコードが EVM に追加されたのはいつですか?」を参照してください。 p> 本質的に、Solidity コンパイラのバージョンは、展開しようとしているネットワークよりも「先」にあります。言い換えれば、
solc
考えられる解決策は 3 つあります:はオペコードを含むバイトコードを出力しますが、ネットワークにはまだそれがありません。
ターゲット ネットワークが新しいオペコードをサポートするまで待つか、別のネットワークを使用してください。-
solc- バージョンを変更します:
エラーの根本原因が実際に solc- バージョンを引き続き使用しますが、最新ではないターゲット EVM バージョンを指定します
truffle 構成ファイルの 参考文献:
あなたの truffle 設定は- 127.0.0.1:8545
solc- にダウングレードします。
Solidity ファイルの solc- バージョンを変更します:
truffle 設定ファイルのに接続していることを示しているので、これはローカルで実行しているネットワーク (例: Ganache) の最新バージョンにアップグレードできることを意味します。問題を解く# ##
以前のバージョンのpragma Solidity 0.8.19;
version: "0.8.19"
PUSH0- オペコードである場合、
最新のsolc
バージョン 0.8.19 ではこれが出力されないため、これで問題は解決します。solc- セクションを更新して、新しいプロパティを追加します:
0.8.20 はデフォルトで evmVersion: 'shanghai'- をターゲットとすることに注意してください。これは、
evmVersion: 'london'- をターゲットにオーバーライドすると、実際には
オペコードである場合、- solc
settings: { evmVersion: 'london' }
PUSH0
を出力できることを意味します。
ただし、2 番目に新しいターゲット EVM バージョン (2023 年 6 月時点) であるsolc
を伝えることになります。出力
PUSH0 を避けてください。エラーの根本原因が実際に
PUSH0はこれを出力しないように指示されているため、これで問題は解決します。
https://github.com/ethereum/solidity/releases/tag /v0.8.20
-
https://docs.soliditylang.org/en/v0.8.20/using-the-compiler.html#setting-the-evm-version-to-target-
https://trufflesuite.com/docs/truffle/reference/configuration/ #solc