배포하는 동안 '마이그레이션'에서 잘못된 opcode가 발견되었습니다. 시도해 보세요:
내 migration.sol 코드
으아아아내 트러플 config.js 파일
// 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; } }
P粉9249157872024-03-27 20:10:04
이는 solc
版本 0.8.20 开始引入了新的操作码 PUSH0
의 최근 변경사항으로 인한 것일 수 있습니다.
전체 목록은 "각 opcode는 언제 EVM에 추가되나요?"를 참조하세요. p> 기본적으로 귀하의 Solidity 컴파일러 버전은 배포하려는 네트워크보다 "앞에" 있습니다. 즉,
는 opcode가 포함된 바이트코드를 출력하지만 네트워크에는 아직 opcode가 없습니다. 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
opcode인 경우 PUSH0
操作码,这将解决您的问题,因为 solc
solc
settings: { evmVersion: 'london' }
solc
部分以添加新属性:settings: { evmVersion: 'london' }
evmVersion: 'shanghai'
,这意味着它可以输出PUSH0
evmVersion: 'london'
을 대상으로 재정의하면 실제로는 PUSH0
을 출력합니다. evmVersion: 'london'
,这是第二个最新的目标 EVM 版本(截至 2023 年 6 月),那么您实际上是在告诉 solc
避免输出PUSH0
PUSH0
opcode인 경우 이를 출력하지 말라고 PUSH0
操作码,这将解决您的问题,因为 solc