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를 제공하므로 safe와 finalized는 가장 최근 커밋 블록으로 해석됩니다. |
반환값
타입:
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
}'