Rumah > Soal Jawab > teks badan
'hijrah' menemui kod op yang tidak sah semasa digunakan. Cuba:
Kod migrasi.sol saya
// 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; } }
Fail Truffle config.js saya
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
Ini mungkin disebabkan oleh perubahan terkini daripada solc
版本 0.8.20 开始引入了新的操作码 PUSH0
.
Untuk senarai lengkap, lihat "Bilakah setiap opcode akan ditambahkan pada EVM?" p> Pada asasnya, versi pengkompil Solidity anda "mendahului" rangkaian yang anda cuba gunakan. Dalam erti kata lain,
mengeluarkan bytecode yang mengandungi opcode, tetapi rangkaian belum memilikinya lagi. solc
127.0.0.1:8545
solc
pragma Solidity 0.8.19;
solc
版本:pragma Solidity 0.8.19;
versi: "0.8.19"
solc
版本: version: "0.8.19"
PUSH0
, ini akan menyelesaikan masalah anda, kerana PUSH0
操作码,这将解决您的问题,因为 solc
solc
setting: { evmVersion: 'london' }
solc
部分以添加新属性:settings: { evmVersion: 'london' }
evmVersion: 'shanghai'
,这意味着它可以输出PUSH0
secara lalai
evmVersion: 'london'
, iaitu versi EVM sasaran kedua terkini (sehingga Jun 2023), maka anda sebenarnya memberitahu PUSH0
. evmVersion: 'london'
,这是第二个最新的目标 EVM 版本(截至 2023 年 6 月),那么您实际上是在告诉 solc
避免输出PUSH0
PUSH0
, ini akan menyelesaikan masalah anda kerana PUSH0
操作码,这将解决您的问题,因为 solc