trace_call
Note
Served only when
traceis named in--http.apior--ws.api; see Enabling Namespaces.
Warning
Fee fields at
latestandpendingAt
latestandpendingthis method prices the call against the block header’s base fee, not the worker’s current epoch base fee thateth_callandeth_estimateGasuse. A request that setsgasPrice,maxFeePerGasormaxPriorityFeePerGascan therefore be accepted byeth_calland rejected here, or the reverse; requests without fee fields are unaffected. Tracked in #1587.
Executes a call on the state of a block without creating a transaction, and returns the trace types requested: the call frames, the executed instructions, the state changes, or any combination. Nothing is sent or stored.
Parameters
Object - The transaction call object, as for eth_call:
from:DATA, 20 bytes - (optional) The address the call is sent from.to:DATA, 20 bytes - The address the call is directed to. Leave it out to simulate a contract creation.gas:QUANTITY- (optional) The gas limit for the call. The top-level trace’saction.gasis this limit minus the call’s intrinsic gas.gasPrice:QUANTITY- (optional) The price paid per unit of gas, for a legacy-style call.maxFeePerGas:QUANTITY- (optional) The most, in wei, the sender pays per unit of gas, base fee and priority fee together.maxPriorityFeePerGas:QUANTITY- (optional) The most, in wei, the sender pays per unit of gas above the base fee.value:QUANTITY- (optional) The value sent with the call, in wei.input:DATA- (optional) The call data.datais accepted as an alias.
Array - The trace types to return, any of "trace", "vmTrace" and "stateDiff".
QUANTITY|TAG|DATA - (optional) The block whose state the call runs on: a hexadecimal block number, a 32-byte block hash, or one of the string tags latest, earliest, safe or finalized. See the default block parameter. Defaults to latest.
Object - (optional) State overrides, keyed by account address. Each entry may set balance, nonce, code, state (replaces the account’s whole storage) or stateDiff (overrides single storage slots).
Object - (optional) Block overrides for the block the call runs in, such as number, time, gasLimit, coinbase or baseFee.
Returns
Object - The requested traces:
output:DATA- The return data of the top-level call;0xfor a plain transfer.stateDiff:Object- WithstateDiffrequested, the state changes keyed by account address; otherwisenull. Each account hasbalance,code,nonceandstorage(keyed by slot). Each value is"="when unchanged,{"+": value}when created,{"-": value}when removed, or{"*": {"from": old, "to": new}}when changed.trace:Array- Withtracerequested, the call frames, top-level first; otherwise[]. Each frame hastype,action,error(only when the frame failed),result,subtracesandtraceAddress, with the meanings trace_transaction gives them, and no block or transaction fields. The top-level frame’saction.gasandresult.gasUsedleave out the intrinsic gas, so for a plain transfer with a 21,000 gas limit both are0x0.vmTrace:Object- WithvmTracerequested, the instructions the top-level call executed; otherwisenull. It hascode(DATA, the code that ran) andops, one entry per instruction withcost(Number, its gas cost),pc(Number, the program counter),ex(its effects:used,pushfor the stack items it pushed,memfor a memory write andstorefor a storage write),sub(the nestedvmTraceof a CALL or CREATE, ornull), and, when present,op(the opcode name) andidx.
Example
Request
curl http://localhost:8545 \
-X POST \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"trace_call","params":[{
"from":"0xb14d3c4f5fbfbcfb98af2d330000d49c95b93aa7",
"to":"0x0000000000000000000000000000000000000000",
"gas":"0x5208",
"value":"0x64"},
["trace"],
"latest"],"id":1}'
Result
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"output": "0x",
"stateDiff": null,
"trace": [
{
"type": "call",
"action": {
"from": "0xb14d3c4f5fbfbcfb98af2d330000d49c95b93aa7",
"callType": "call",
"gas": "0x0",
"input": "0x",
"to": "0x0000000000000000000000000000000000000000",
"value": "0x64"
},
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": []
}
],
"vmTrace": null
}
}