안녕하세요?
smart contract들을 deploy하여 대량의 transaction을 발생시키는 시험 중 transaction error code: 0x9 가 발생하는 상황이 빈번하게 발생되어 문의 드립니다.
혹시 error code: 0x9가 발생하는 경우의 예시를 좀 들어주실 수 있으면 많은 도움이 될 것 같습니다.
감사합니다.
안녕하세요. Transaction error code 0x09는 트랜잭션 실행 도중 실행에 에러가 난 경우입니다. 발생하는 원인은 다음과 같이 여러 가지가 가능합니다.
- gas 부족
- 스마트 컨트랙트 실행 중 require()문에서 실패
- 코드 실행 중 잘못된 실행 코드
해당 트랜잭션을 debug해보시면 좀 더 자세한 원인분석이 가능할 것입니다.
감사합니다.
답변 감사드립니다.
트랜젝션을 발행하고 블록에 실려 receipt 를 확인 한 후 다음 트렌젝션을 발행하는 , 즉 한 블록에 한개의 transaction만 쓰는 경우에서는 문제 없이 정상동작 하는데,
한 블록에 여러 개의 transaction을 넣으려고 하면 위와 같이 txError: 0x9가 좀 빈번하게 발생하는 상황입니다. (매 transaction마다 오류가 발생하는 것은 아님)
혹시 위와 같은 case가 발생할 수 있는 경우의 수를 알려주신다면 개발에 많은 도움이 될 것 같습니다.
감사드립니다.
한 블록에 여러 트랜잭션을 보낼 때만 문제가 발생하는 것이라면, gas 부족 문제 일 가능성이 있습니다.
제가 종현님의 스마트컨트랙트 코드를 몰라 정확한 답변은 드리기 힘드나,
만약 종현님이 internal tx을 사용하고 있으시다면, internal tx 내부에서 발생한 out of gas는 상위 stack으로 자동 전파되지 않습니다. 이 경우, 개발 방식에 의해 0x07이 아닌 0x09로 에러처리 될 수 있습니다.
그외 다양한 가능성들이 있으니, vm Tracing을 통해 트랜잭션을 디버깅 해보시는 방법을 추천드립니다.
별도의 EN을 띄우시고 계시다면 다음 API를 통해 revert 메세지를 자세하게 확인하실 수 있습니다.
> debug.traceTransaction("txhash", {tracer: "revertTracer"})