JavaScript[TS]

[JS] dotenv / RuntimeError: VM Exception while processing transaction: invalid opcode

viviviviviid 2022. 11. 7. 04:03
에러코드와는 큰 관련이 없으니 에러코드보고 들어왔다면, 본인 트랜잭션내에 들어가는 파라미터가 undefined로 뜨는게 있는지 확인해보라.

Anyway, 문제발생

같은기분


가나슈를 이용해서 토큰 기반 커뮤니티를 설계하던중 어느시점부터 오류가 발생하기 시작했다.

Error: Returned error: VM Exception while processing transaction: invalid opcode

트랜잭션을 처리하는동안 잘못된 opcode 탓이라는데, opcode에 대한 명확한 정의도 모르겠고 해결책도 안나오던 시점이였다.

해결책으로 가나슈 gui의 버그 중 하나라는데 gui 내부의 로그들이 꼬였을때 발생한단다. 해결책은 cli 로 갈아타면 된다한다.
결론은 안됐다. 내 문제와는 별개인듯하다.

혹여 리눅스 상위 폴더 어딘가에 꼬인 로그가 남아있을까해서, 멀티부팅으로 써왔던 우분투 파티션 날리고 윈도우상에서의 VMWARE 로 넘어왔음에도 같은 문제가 터지더라.

대환장 똥꼬쇼가 끝난 뒤, 가장 기초로 돌아가기로 했다. 그게 답이었다.

 

dotenv 선언문제

찾았다. 정말 의외의 문제였다. 트랜잭션에서 문제났다해서 그 주변만 돌아봤었는데 사실 그것보다 더 근본적인 문제였던거다.

이번 프로젝트 .env 파일 내에는 아래와 같이 컨트랙트 해쉬 내용이 들어있다.

ERC20_CONTRACT_HX= "FILL_ME_IN"


이걸 사용할때 문제가 생겼는데,

1. const contractHx = process.env.ERC20_CONTRACT_HX;
2. functionName(process.env.ERC20_CONTRACT_HX)

 

2번은 문제가 안생겼지만 1번에서 문제가 생겼다,

import dotenv 
dotenv.config()

를 해주면 1,2번 둘다 사용이 가능하지만, 안해준 상태라면 2번만 사용가능하다. 2번이 자연스럽게 돌아가길래 당연히 되는줄 알았나보다. 안해준상태에서 콘솔로 찍어보면 undefined가 등장해주니 조심하자.

 

즉 env를 이용해서 재선언을 하게된다면 저 초기 세팅이 필수적인 것이다.

 

 

22/11/08 추가 

Error: This contract object doesn't have address set yet, please set an address first.

이러한 에러가 존재했던걸 까먹고 블로깅을 안했다.
이거야말로 contractHx가 제대로 들어가지 않았기때문에 벌어진 일이다. 주소설정에 문제가 있다는데 애초에 어떤 컨트랙트를 호출할지조차 선언 안했기때문에 생긴 오류다.

이게 보인다면 컨트랙트해쉬부터 제대로 된 값을 찾아내는지 확인후 차례차례 찍어보자.