Skip to main content
POST
trace_call
curl --request POST \
  --url https://tempo-moderato.core.chainstack.com/a25a421add2280d53fdbc23417055501/ \
  --header 'Content-Type: application/json' \
  --data '
{
  "jsonrpc": "2.0",
  "method": "trace_call",
  "params": [
    {
      "to": "0x20c0000000000000000000000000000000000000",
      "data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
    },
    [
      "trace"
    ],
    "latest"
  ],
  "id": 1
}
'
{
  "jsonrpc": "<string>",
  "id": 123,
  "result": {}
}
Tempo API method that traces a call without creating a transaction. This provides detailed execution traces using the Parity/OpenEthereum trace format.
Get you own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.

Parameters

  • callObject — the call object:
    • from — (optional) sender address
    • to — recipient address
    • gas — (optional) gas limit
    • gasPrice — (optional) gas price
    • value — (optional) value to send
    • data — (optional) call data
  • traceTypes — array of trace types to include:
    • trace — basic execution trace
    • vmTrace — full VM execution trace
    • stateDiff — state changes
  • blockParameter — the block number (hex) or tag (latest, earliest, pending)

Response

  • result — the trace result object:
    • output — return data from the call
    • trace — array of trace objects (if requested)
    • vmTrace — VM execution trace (if requested)
    • stateDiff — state differences (if requested)

trace_call code examples

The following example traces a balanceOf call on the pathUSD token:
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);

// pathUSD token address
const PATHUSD = "0x20c0000000000000000000000000000000000000";
const TARGET_ADDRESS = "0x9729187D9E8Bbefa8295F39f5634cA454dd9d294";

// Encode balanceOf(address)
const iface = new ethers.Interface(["function balanceOf(address) view returns (uint256)"]);
const data = iface.encodeFunctionData("balanceOf", [TARGET_ADDRESS]);

const traceCall = async () => {
    const result = await provider.send("trace_call", [
      {
        to: PATHUSD,
        data: data
      },
      ["trace", "stateDiff"],
      "latest"
    ]);

    console.log("Output:", result.output);
    console.log("Traces:", result.trace.length);

    if (result.stateDiff) {
      console.log("State changes:", Object.keys(result.stateDiff).length, "addresses affected");
    }
  };

traceCall();

Body

application/json
jsonrpc
string
default:2.0
method
string
default:trace_call
params
any[]

Call object, trace types array, and block parameter

id
integer
default:1

Response

200 - application/json

Trace result

jsonrpc
string
id
integer
result
object

Trace result object containing output, trace, stateDiff, and vmTrace

Last modified on January 28, 2026