[Trouble Shooting] invalid opcode while deploying
1. 발생한 오류
truffle migrate 명령어를 사용하여 ganache 테스트 네트워크에 스마트 컨트랙트를 배포할 때 발생 (컴파일은 정상 동작)
2. 해결 방법 검색
"Migrations" hit an invalid opcode while deploying on deploy Migrations.sol with Truffle
An error occurs when truffle migrate try to deploy Migrations.sol contract, i don't understand why pragma solidity >=0.4.21 <0.6.0; contract Migrations { address public owner; uint public
ethereum.stackexchange.com
버전 문제인건가...?
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
ganache-cli
<p align="center"> <em>NOTICE</em>: <code>testrpc</code> is now <code>ganache-cli</code>. Use it just as you would <code>testrpc</code>. </p> <hr/>. Latest version: 6.12.2, last published: 2 years ago. Start using ganache-cli in your project by running `np
www.npmjs.com
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",
},
},