'migrate' a rencontré un opcode invalide lors du déploiement. Essayez :
Mon code migration.sol
// SPDX-License-Identifier: UNLICENSED //the version of solidity that is compatible pragma solidity ^0.8.0; contract Migrations { address public owner = msg.sender; uint public last_completed_migration; modifier restricted() { require( msg.sender == owner, "This function is restricted to the contract's owner" ); _; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } }
Mon fichier config.js Truffle
const path = require("path"); module.exports = { // See <http://truffleframework.com/docs/advanced/configuration> // to customize your Truffle configuration! contracts_build_directory: path.join(__dirname, "/build"), networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*" //Match any network id } }, plugins: ["truffle-contract-size"], compilers: { solc: { version: "^0.8.0" } }, solidity: { version: "0.8.3", settings: { optimizer: { enabled: true, runs: 1000, }, }, }, };
Cela peut être dû à des changements récents de
solc
版本 0.8.20 开始引入了新的操作码PUSH0
.Pour une liste complète, voir "Quand chaque opcode sera-t-il ajouté à l'EVM ?" p> Essentiellement, votre version du compilateur Solidity est "en avance" sur le réseau sur lequel vous essayez de déployer. En d'autres termes,
génère un bytecode qui contient l'opcode, mais le réseau ne l'a pas encore.
Vous avez 3 solutions potentielles :solc
Attendez que votre réseau cible prenne en charge le nouvel opcode ou utilisez un autre réseau.-
Changez la version - dans le fichier de configuration de truffe :
Continuez à utiliser la dernière version - , mais spécifiez une version EVM cible qui n'est pas la dernière
Puisque votre configuration truffle indique que vous vous connectez à- , cela signifie que vous pouvez passer à la dernière version du réseau que vous utilisez localement (par exemple Ganache), peut-être que cela résoudra le problème
Rétrograder vers une version antérieure de - .
Changez la version - dans vos fichiers Solidity :
127.0.0.1:8545
solc
pragma Solidity 0.8.19;
solc
版本:pragma Solidity 0.8.19;
version : "0.8.19"
solc
版本:version: "0.8.19"
Si la cause première de l'erreur est effectivement l'opcode- la version 0.8.19 ne le produit pas.
PUSH0
, cela résoudra votre problème, carPUSH0
操作码,这将解决您的问题,因为solc
solc
Mettez à jour la section- dans le fichier de configuration de Truffle pour ajouter la nouvelle propriété :
Remarque, cibles 0.8.20 -
Cependant, si vous le remplacez pour cibler - Évitersortie
Si la cause première de l'erreur est effectivement l'opcode - on vous a dit de ne pas afficher cela.
settings : { evmVersion : 'london' }
solc
部分以添加新属性:settings: { evmVersion: 'london' }
evmVersion: 'shanghai'
,这意味着它可以输出PUSH0
par défautevmVersion : 'london'
, qui est la deuxième dernière version cible d'EVM (en juin 2023), alors vous dites en faitPUSH0
.evmVersion: 'london'
,这是第二个最新的目标 EVM 版本(截至 2023 年 6 月),那么您实际上是在告诉solc
避免输出PUSH0
PUSH0
, cela résoudra votre problème puisquePUSH0
操作码,这将解决您的问题,因为solc
Référence :