프로그래밍/트러블슈팅(trouble shooting)

[truffle] truffle migration 오류(TypeError: Cannot read properties of undefined (reading 'call') at lastCompletedMigration)

싯타마 2023. 3. 8. 03:43

Dapp을 만들기 위한 학습을 하던 중 truffle migration을 사용하려고 하자 오류가 발생하였다.

 

 

1.  Node.js 버전 변경 시도

처음엔 관련 오류가 난 곳의 문서들이 node_modules와 관련되어 있어서, node의 버전이 문제인가 싶어서 stack-over flow의 글을 참고하여 node의 버전을 최신 LTS버전으로 바꾸어주었다.

https://stackoverflow.com/questions/71081725/this-version-of-%C2%B5ws-is-not-compatible-with-your-node-js-bu ild-error-node-loade

 

This version of µWS is not compatible with your Node.js build: Error: node-loader. while running "truffle console"

I'm working on a Blockchain project where I use Truffle. when I run the Truffle Console command I face this issue. Complete Log: This version of µWS is not compatible with your Node.js build: Error...

stackoverflow.com

 

nvm use --lts //최신 lts버전을 사용하겠다.

하지만 문제는 해결되지 않았다.

 

(버전만 바뀌었다.)

2. 최신의 depedencies 다운로드

혹시 몰라서 truffle을 사용하기 위한 dependencies들을 docs에 따라 최신으로 다운로드하여줬지만 이 또한 해결되지 않았다.

https://trufflesuite.com/docs/vscode-ext/how-to/install-dependencies/

 

Install Truffle for VSCode - Truffle Suite

Install the Truffle for VSCode dependencies This page provides instructions for installing the Truffle for VSCode dependencies on Windows, MacOS, and Ubuntu. Once the dependencies are installed, when you restart VSCode the requirements page no longer appea

trufflesuite.com

 

하지만 생각해 보니 truffle compile과 test는 성공적으로 이루어졌다. 따라서 node.js의 문제는 아닐 것이라고 판단했고, 다시 구글링을 해본 결과 방법을 찾아냈다.

 

3. truffle migrate --reset 시도

https://github.com/trufflesuite/truffle/issues/849

 

TypeError: Cannot read property 'call' of undefined at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:175527:50 · Iss

I've asked for help in the Truffle Gitter before filing this issue. Issue Whenever I try to deploy a set of migrations with a pre-existing build folder, I get the error: TypeError: Cannot read ...

github.com

 

이분은 나와 코드는 다르지만 같은 이름의 오류를 겪고 있었다. 

찾은 해결방법은 migration을 reset 하는 거였다.

 

잦은 마이그레이션과 테스팅으로 연동되어 있던 Ganache를 사용하여 테스팅 주소를 여러 번 만들어 냈는데, 그러던 중 전에 사용했던 migration기록이 남아있어서 이를 자꾸 덮어쓰다 보니 생긴 문제인 듯했다.

 

오류 설명을 자세히 들여다보니 

TypeError: Cannot read properties of undefined (reading 'call') at lastCompletedMigration 부분을 해석해 보니  최근 완료한 마이그레이션에서 오류가 발생했음을 알 수 있었다.

 

- 명령어

truffle migrate --reset

위의 명령어를 입력하니 기존에 있던 마이그레이션이 삭제되고 새로운 마이그레이션을 성공적으로 할 수 있었다.

이미 배포된 컨트랙트를 수정하고 다시 배포할 때 쓰는 명령어이니 알아두면 좋을 것 같다.