EstimateGas와 Gas Used의 상관관계

(글 작성당시 가장 최신에 있는 Tx를 가져왔습니다.)

상기의 Tx의 경우 Gas Used 항목이 51,049으로 측정이 되어있는데

const caver = new Caver(‘https://public-en-cypress.klaytn.net/’);

caver.rpc.klay.estimateGas({
from:‘0x8da74BA3DB7B440264421373d2cBfca2b10E2e3b’,
to:‘0x976232eB7Eb92287fF06c5D145bD0d1C033eCA58’,
input:‘0xa9059cbb000000000000000000000000d5d6098e473993646d086b341354f83ac2a8527d00000000000000000000000000000000000000000000000a4cc799563c380000’,

}).then((res)=>console.log(Caver.utils.hexToNumberString(res)));

함수를 실행하면 51260 이라는 값이 반환 됩니다.

Finder에서 Gas Used가 산출되는 방식과
caver의 estimateGas의 산출방식이 서로 다른 부분이 있을까요?

또한, tx 를 실행하기 전 gas limit 부분에 estimateGas 메소드를 통해 얻은 값을 입력하여도 아무런 문제가 없을까요?

안녕하세요,

caver의 estimateGas는 블록체인 노드에서 산출된 값을 릴레이 해주는 함수로서 SDK안에 실제 계산 로직이 존재하는 것이 아닙니다.

말 그대로 추정값이므로 이는 실제 사용된 gasUsed값(finder에서 확인하신 값)과 차이가 날수밖에 없습니다. estimateGas를 호출하는 환경과 실제 블록체인 노드에서 트랜잭션이 실행될 때의 환경이 다르다면 컨트렉트의 조건문 등에 의해서 실제 실행되는 값이 다르게 됩니다. 즉 estimateGas 결과는 참고자료로만 사용하실 뿐 그보다 훨씬 넉넉한 값을 일반적으로 주시는게 좋습니다.

특정 gas값을 넘어가는 경우 실행이 안되도록 하시는게 아니라면 estimateGas값 또는 그보다 훨씬 큰 값을 주시면 됩니다.