eth_estimateGas

eth_estimateGas(callObject, blockTag?) → quantity

주어진 블록에서 트랜잭션을 실행했을 때 필요한 가스 양의 추정치를 반환합니다. 노드가 호출을 시뮬레이션하여 (상태 변경 없이) 사용 가스를 측정합니다. 서명 전에 호출하여 적절한 gas 필드 값을 설정하는 데 사용하며, 시뮬레이션과 실제 블록 포함 사이에 상태가 변할 수 있으므로 프로덕션 트랜잭션에서는 결과에 20~30%의 여유를 더하는 것이 일반적입니다.

파라미터

이름 타입 필수 설명
callObject object 트랜잭션 호출 객체입니다. 주요 필드: from(발신자 주소), to(대상 주소 — 컨트랙트 생성 시에는 생략), value(전달할 aokrw 양, 16진수), data(16진수 콜데이터), gasPrice / maxFeePerGas / maxPriorityFeePerGas(선택 — base fee 인식 시뮬레이션에 사용).
blockTag string - 시뮬레이션 기준 블록입니다. latest(기본값), earliest, pending, safe, finalized 또는 16진수 블록 번호를 지정합니다. 마루는 CometBFT 합의로 즉시 finality를 제공하므로 safefinalized는 가장 최근 커밋 블록으로 해석됩니다.

반환값

타입: string

추정 가스 양을 0x 접두사가 붙은 16진수로 반환합니다(예: 단순 전송은 0x5208 = 21,000).

에러

코드 이름 설명
-32000 execution reverted 시뮬레이션된 호출이 revert되었습니다(대상 컨트랙트의 throw, PCL 정책 거부 등). 에러 데이터에 원본 revert 사유가 담겨 있으므로 디코드하여 호출이 실제로 실패하는지 확인합니다.
-32000 gas required exceeds allowance 추정 가스가 블록 가스 한도를 초과하여 트랜잭션을 포함할 수 없습니다. 호출이 무한 루프이거나 무제한 데이터 구조에 접근하는 경우가 일반적입니다.
-32602 Invalid params callObject의 형식이 잘못되었습니다(예: from 누락, 주소 형식 오류, value/data의 16진수 오류).

예제

ethers.js v6 — 전송 전 견적

ethers.js는 내부적으로 eth_estimateGas를 호출합니다. 컨트랙트 호출 시에는 iface.encodeFunctionData(...)로 생성한 data를 전달합니다.

import { JsonRpcProvider, parseEther } from "ethers";

const provider = new JsonRpcProvider("https://rpc-testnet.maroo.io");

const gas = await provider.estimateGas({
  from:  "0xSenderAddress",
  to:    "0xRecipientAddress",
  value: parseEther("1500000"),  // 1,500,000 OKRW
});
console.log("Estimated gas:", gas.toString());

// Pad by ~25% for headroom in production.
const safeGas = (gas * 125n) / 100n;

cURL로 직접 호출

0x13DA329B6336471800000는 1.5 × 10^24 aokrw, 즉 1,500,000 OKRW에 해당합니다. 단순 전송에 대해 { jsonrpc, id, result: "0x5208" }(21,000 가스)를 반환합니다.

curl -X POST https://rpc-testnet.maroo.io \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_estimateGas",
    "params": [{
      "from":  "0xSenderAddress",
      "to":    "0xRecipientAddress",
      "value": "0x13DA329B6336471800000"
    }, "latest"],
    "id": 1
  }'
소스: maroo
ESC
검색어를 입력하세요