trace_rawTransaction
Note
Served only when
traceis named in--http.apior--ws.api; see Enabling Namespaces.
Warning
Fee fields at
latestandpendingAt
latestandpendingthis method checks the transaction’s fee cap against the block header’s base fee, not the worker’s current epoch base fee that the transaction pool andeth_calluse. A signed transaction always carries a fee cap, so a transaction the node would accept can fail here with a fee-cap error, or the reverse. Tracing against a numbered block avoids the difference. Tracked in #1587.
Executes a signed raw transaction on the state of a block and returns the trace types requested, without sending it to the transaction pool. The node recovers the sender from the signature, so the transaction must be signed; to trace an unsigned call, use trace_call.
The example traces the transfer that block 1 holds against the state at block 0x0, which is the state block 1 executed it on.
Parameters
DATA - The signed transaction, EIP-2718 encoded, as eth_sendRawTransaction takes it.
Array - The trace types to return, any of "trace", "vmTrace" and "stateDiff".
QUANTITY|TAG|DATA - (optional) The block whose state the transaction 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.
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_rawTransaction","params":["0x02f8648207e18080078252089400000000000000000000000000000000000000006480c080a094e74c15812b53176f8000333c19c62852cf6f4e465adc9ce79f467f13a35736a005b01594de729950fc2153a8768ee98c0c2eb20b6e8c501903ca540083890429",["trace"],"0x0"],"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
}
}