Gas estimation failed

안녕하세요,
저희가 커스텀하게 작성한 컨트랙트를 baobab 테스트넷에 배포하고 정의된 function을 실행하려는데 아래와 같이 에러가 발생하네요

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Returned error: gas required exceeds allowance or always failing transaction

아래가 컨트랙트 코드 일부이고 setGrid function 실행시에 오류가 발생합니다.

contract SampleGrid {
    struct Grid {
        address gridId;
        address payable gridOwner;
        uint gridCurrentPrice;
        uint updateTime;
        uint auctionEnd;
        string imageUrl;
    }
    ...
    function setGrid(address gridId, uint auctionEndTime) public {
        require(msg.sender == ADMIN_WALLET_ID);

        gridInfo[gridId] = Grid({
        gridId: gridId,
        gridOwner: msg.sender,
        gridCurrentPrice: INIT_GRID_PRICE,
        updateTime: now,
        auctionEnd: auctionEndTime,
        imageUrl: ''
        });
    }
   
}

정확히 무슨 이슈인지 파악이 안되어서 확인중인데… Gas 설정 이슈로 추정을 하고 Klaytn IDE에서 여러가지 gas 관련 설정을 변경해봤는데도 동일한 현상이 재현되네요.
IDE에 연동된 지갑 계정에 Faucet을 통해 klay도 넉넉하게 충전이 된 상황입니다.

+) klaytnscope에서 조회해보니 스마트 컨트랙트 address에서 balance 항목이 있던데 이 항목이 의미하는 바는 무엇일까요?

도움 부탁드립니다.

안녕하세요. 우선 클레이튼 포럼에 질문을 주셔서 감사합니다.
질문자님의 질문 내용은 정리하면 크게 2가지로 요약할 수 있을 것 같은데요.

  1. 컨트랙트 실행 에러가 난 이유

에러 코드를 살펴보면 0x09 ErrExecutionReverted 에러가 발생한 것을 알 수 있습니다.
0x09 에러가 발생할 수 있는 원인은 여러가지가 있는데요, 다음과 같은 예상 문제점들이 있습니다.

  • gas 부족
  • 스마트 컨트랙트 실행 중 require()문에서 실패

예상되는 문제점들로는 INIT_GRID_PRICE를 가져오는 함수의 구현에 문제가 있다던지, ADMIN_WALLET_ID require 부분에서 오류가 발생했을 가능성이 있습니다. 꼭 Gas 설정 관련 이슈가 아닐 가능성이 있으니 함수 구현 부분을 한번 확인해 보시기 바랍니다.

  1. 스마트컨트랙트 balance가 의미하는 바

크게 신경쓰시지 않아도 되는 부분입니다. EOA 계정의 경우 보유하고 있는 자금의 양을 보여주기 위해 Balance 필드가 존재하고, 스마트컨트랙트 주소의 경우도 klay를 보유할 수 있습니다.

2 Likes