[Trouble Shooting] invalid opcode while deploying

1. 발생한 오류

truffle migrate시 발생한 오류: invalid opcode?

truffle migrate 명령어를 사용하여 ganache 테스트 네트워크에 스마트 컨트랙트를 배포할 때 발생 (컴파일은 정상 동작)

2. 해결 방법 검색

https://ethereum.stackexchange.com/questions/72036/migrations-hit-an-invalid-opcode-while-deploying-on-deploy-migrations-sol-with

버전 문제인건가…?

3. 버전 확인

ganache-cli 버전 확인

$ ganache-cli --version
Ganache CLI v6.12.2 (ganache-core: 2.13.2)

truffle 버전 확인

$ truffle --version
Truffle v5.9.1 (core: 5.9.1)
Ganache v7.8.0
Solidity - 0.8.18 (solc-js)
Node v18.16.0
Web3.js v1.10.0

truffle-config.js: 컴파일러 버전

compilers: {
    solc: {
      version: "0.8.20",
    },
  },

버전 문제가 아닌 것 같기도 하고…

응급조치

아무거나 건드려 보다가 컴파일러 버전을 낮췄더니 정상적으로 배포가 된다.

compilers: {
    solc: {
      version: "0.8.19",
    },
  },

이게 끝??


근본적인 해결 방법

https://www.npmjs.com/package/ganache-cli

deprecated...?

ganache-cli 패키지가 더 이상 유지보수가 이루어지지 않음으로 인해 최신 버전(글 작성 시점 기준 0.8.20)의 솔리디티 컴파일러로 컴파일된 스마트 컨트랙트가 ganache-cli로 실행한 네트워크에 정상적으로 배포되지 못하는 문제가 발생하는 것으로 이해가 된다.

결과적으로 ganache-cli를 삭제하고 ganache를 설치해 사용하면 되는 것이다.

절차는 아래와 같다.

1. ganache-cli 삭제

$ npm rm -g ganache-cli

2. ganache 설치

$ npm i -g ganache

3. ganache 테스트 네트워크 실행

$ ganache --chain.networkId=<네트워크 아이디>

네트워크 아이디가 무작위로 생성되므로 편의를 위해 지정해주는 것이 좋다.

4. truffle-config.js 수정

networks: {
    development: {
    	host: "127.0.0.1",
    	port: <ganache 테스트 네트워크를 실행할 바인딩된 포트>,
    	network_id: "<방금 지정한 네트워크 아이디>",
  	},
  },

  compilers: {
    solc: {
    	version: "0.8.20",
    },
  },

결과

배포 성공!