eth_estimateGas¶
估算交易的 energy 消耗(即 Tron 中 gas 的对应物)。
- 源码:
framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java#estimateGas - 端口:FullNode
8545/ Solidity8555
请求参数¶
| 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|
params[0] |
object | 是 | CallArguments(同 eth_call),其中 from / to / value / data / input 用于推断合约类型 |
CallArguments.getContractType 推断规则:
to为空且 calldata 非空 →CreateSmartContractto是合约地址 →TriggerSmartContractto是普通账户且value非空 →TransferContract(直接返回0x0,不进入 EVM 估算)- 其它情形 → 抛
-32600 invalid json request[: invalid value]
# 例:估算 Nile testnet 上一笔 TRX 转账的 energy 消耗
curl -X POST https://nile.trongrid.io/jsonrpc \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0","id":1,"method":"eth_estimateGas",
"params":[{
"from":"0xdd791d6b49e190062d650e6a23c575510d35f2f9",
"to":"0xb06b4139895c9f51c967c9f3d9089ca721e8e34c",
"value":"0xf4240"
}]
}'
响应¶
energy 用量的 hex 编码:
- 普通 TRX 转账(
TransferContract)→0x0 - 合约调用 / 部署 → 视节点配置:
node.supportEstimateEnergy = true时返回EstimateEnergyMessage.energyRequired- 默认(false)→ 返回
TransactionExtention.energyUsed(一次 constant-call 的实际用量)
下例为上面 curl 调用 Nile testnet 抓回的真实响应(TRX 转账走 TransferContract 路径,直接返回 0x0,不进入 EVM):
{ "jsonrpc": "2.0", "id": 1, "result": "0x0" }
异常响应¶
| 触发条件 | 错误码 | message |
|---|---|---|
from 非法 hex / 长度不对 |
-32602 |
透传 addressCompatibleToByteArray 异常 message |
to 非法 hex / 长度不对 |
-32602 |
透传 addressCompatibleToByteArray 异常 message |
to 为空,且解析后的 calldata 缺失、为 "" 或为 "0x"(input 非 null 时优先于 data) |
-32600 |
invalid json request |
to 不是合约且 value 未传 |
-32600 |
invalid json request: invalid value |
合约校验失败(ContractValidateException) |
-32600 |
透传 message(fallback invalid contract) |
EVM 执行 REVERT |
-32000 |
message + 解析后的 revert string;error.data 携带原始 revert hex |
input 不是严格 hex |
-32602 |
透传 JsonRpcApiUtil.requireValidHex 校验信息 |
data 不是合法的宽松 hex |
-32602 |
透传 JsonRpcApiUtil.requireValidHex 校验信息 |
普通转账路径上的 value 不是合法的非负 hex long |
-32602 |
invalid param value: invalid hex number 或 invalid param value: negative |
合约调用或部署路径上的 value 不是合法的非负 hex long |
-32000 |
透传解析异常的 message |
| 合约调用或部署估算期间的其他内部异常 | -32000 |
透传 message(双引号被替换为单引号) |