Solidity에서 "배포하는 동안 마이그레이션에서 잘못된 opcode가 발생했습니다" 오류를 수정하는 방법은 무엇입니까?
P粉523625080
P粉523625080 2024-03-27 00:03:27
0
1
410

배포하는 동안 '마이그레이션'에서 잘못된 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粉523625080
P粉523625080

모든 응답(1)
P粉924915787

이는 solc 版本 0.8.20 开始引入了新的操作码 PUSH0의 최근 변경사항으로 인한 것일 수 있습니다.

전체 목록은 "각 opcode는 언제 EVM에 추가되나요?"를 참조하세요. p> 기본적으로 귀하의 Solidity 컴파일러 버전은 배포하려는 네트워크보다 "앞에" 있습니다. 즉,

는 opcode가 포함된 바이트코드를 출력하지만 네트워크에는 아직 opcode가 없습니다. solc

3가지 잠재적인 솔루션이 있습니다:

    대상 네트워크가 새 opcode를 지원할 때까지 기다리거나 다른 네트워크를 사용하세요.
    • 트러플 구성에
    • 에 연결 중이라고 표시되어 있으므로 이는 로컬에서 실행 중인 네트워크(예: Ganache)의 최신 버전으로 업그레이드할 수 있음을 의미합니다. 그렇게 하면 문제가 해결될 수도 있습니다 127.0.0.1:8545
    • 이전 버전의
    • 로 다운그레이드하세요. solc
    • Solidity 파일의
    • 버전을 변경하세요: pragma Solidity 0.8.19;solc 版本:pragma Solidity 0.8.19;
  • 트러플 구성 파일에서
  • 버전을 변경합니다: version: "0.8.19" solc 版本: version: "0.8.19"
      오류의 근본 원인이 실제로 PUSH0 opcode인 경우
    • 버전 0.8.19에서는 이를 출력하지 않으므로 문제가 해결됩니다. PUSH0 操作码,这将解决您的问题,因为 solc
  • 최신
  • 버전을 계속 사용하되 최신이 아닌 대상 EVM 버전을 지정하세요. solc
      트러플 구성 파일의
    • 섹션을 업데이트하여 새 속성을 추가하세요: settings: { evmVersion: 'london' }solc 部分以添加新属性:settings: { evmVersion: 'london' }
    • 참고, 기본적으로 0.8.20 대상
    • evmVersion: 'shanghai',这意味着它可以输出PUSH0
    • 그러나 두 번째 최신 대상 EVM 버전(2023년 6월 현재)인 evmVersion: 'london'을 대상으로 재정의하면 실제로는
    • 피하십시오라고 말하는 것입니다. >PUSH0을 출력합니다. evmVersion: 'london',这是第二个最新的目标 EVM 版本(截至 2023 年 6 月),那么您实际上是在告诉 solc 避免输出PUSH0
    • 오류의 근본 원인이 실제로 PUSH0 opcode인 경우 이를 출력하지 말라고
    • 안내받았으므로 이렇게 하면 문제가 해결됩니다. PUSH0 操作码,这将解决您的问题,因为 solc

참조:

  • 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
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿