Maison > Questions et réponses > le corps du texte
'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, }, }, }, };
P粉9249157872024-03-27 20:10:04
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. solc
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"
PUSH0
, cela résoudra votre problème, car PUSH0
操作码,这将解决您的问题,因为 solc
solc
settings : { evmVersion : 'london' }
solc
部分以添加新属性:settings: { evmVersion: 'london' }
evmVersion: 'shanghai'
,这意味着它可以输出PUSH0
par défaut
evmVersion : 'london'
, qui est la deuxième dernière version cible d'EVM (en juin 2023), alors vous dites en fait PUSH0
. evmVersion: 'london'
,这是第二个最新的目标 EVM 版本(截至 2023 年 6 月),那么您实际上是在告诉 solc
避免输出PUSH0
PUSH0
, cela résoudra votre problème puisque PUSH0
操作码,这将解决您的问题,因为 solc