debug_traceCall
curl --request POST \
--url https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/ \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [
{
"to": "0x20c0000000000000000000000000000000000000",
"data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
},
"latest",
{}
],
"id": 1
}
'import requests
url = "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload = {
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [{
"to": "0x20c0000000000000000000000000000000000000",
"data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
}, "latest", {}],
"id": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'debug_traceCall',
params: [
{
to: '0x20c0000000000000000000000000000000000000',
data: '0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294'
},
'latest',
{}
],
id: 1
})
};
fetch('https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'method' => 'debug_traceCall',
'params' => [
[
'to' => '0x20c0000000000000000000000000000000000000',
'data' => '0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294'
],
'latest',
[
]
],
'id' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x20c0000000000000000000000000000000000000\",\n \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n },\n \"latest\",\n {}\n ],\n \"id\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x20c0000000000000000000000000000000000000\",\n \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n },\n \"latest\",\n {}\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x20c0000000000000000000000000000000000000\",\n \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n },\n \"latest\",\n {}\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Tempo node API
debug_traceCall | Tempo
Tempo API method that traces the execution of a call without creating a transaction on the blockchain. Chainstack Tempo reference.
POST
/
debug_traceCall
curl --request POST \
--url https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/ \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [
{
"to": "0x20c0000000000000000000000000000000000000",
"data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
},
"latest",
{}
],
"id": 1
}
'import requests
url = "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload = {
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [{
"to": "0x20c0000000000000000000000000000000000000",
"data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
}, "latest", {}],
"id": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'debug_traceCall',
params: [
{
to: '0x20c0000000000000000000000000000000000000',
data: '0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294'
},
'latest',
{}
],
id: 1
})
};
fetch('https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'method' => 'debug_traceCall',
'params' => [
[
'to' => '0x20c0000000000000000000000000000000000000',
'data' => '0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294'
],
'latest',
[
]
],
'id' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x20c0000000000000000000000000000000000000\",\n \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n },\n \"latest\",\n {}\n ],\n \"id\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x20c0000000000000000000000000000000000000\",\n \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n },\n \"latest\",\n {}\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x20c0000000000000000000000000000000000000\",\n \"data\": \"0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294\"\n },\n \"latest\",\n {}\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Tempo API method that traces the execution of a call without creating a transaction on the blockchain. This is useful for debugging contract interactions before sending actual transactions.
The following example traces a
Get your 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 addressto— recipient addressgas— (optional) gas limitgasPrice— (optional) gas pricevalue— (optional) value to senddata— (optional) call data
blockParameter— the block number (hex) or tag (latest,earliest,pending)tracerConfig— (optional) tracer configuration object:tracer— tracer type (e.g.,callTracer,prestateTracer)
Response
result— the trace result object, format depends on the tracer used
gas— gas usedfailed— whether the call failedreturnValue— return datastructLogs— array of execution steps
debug_traceCall 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 () => {
// Using default tracer
const trace = await provider.send("debug_traceCall", [
{
to: PATHUSD,
data: data
},
"latest",
{}
]);
console.log("Gas used:", trace.gas);
console.log("Failed:", trace.failed);
console.log("Return value:", trace.returnValue);
console.log("Execution steps:", trace.structLogs.length);
};
traceCall();
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
# pathUSD token address
PATHUSD = "0x20c0000000000000000000000000000000000000"
TARGET_ADDRESS = "0x9729187D9E8Bbefa8295F39f5634cA454dd9d294"
# balanceOf(address) calldata
data = "0x70a08231000000000000000000000000" + TARGET_ADDRESS[2:].lower()
result = web3.provider.make_request("debug_traceCall", [
{
"to": PATHUSD,
"data": data
},
"latest",
{}
])
trace = result['result']
print(f"Gas used: {trace['gas']}")
print(f"Failed: {trace['failed']}")
print(f"Return value: {trace['returnValue']}")
print(f"Execution steps: {len(trace['structLogs'])}")
curl -X POST "CHAINSTACK_NODE_URL" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [
{
"to": "0x20c0000000000000000000000000000000000000",
"data": "0x70a082310000000000000000000000009729187d9e8bbefa8295f39f5634ca454dd9d294"
},
"latest",
{}
],
"id": 1
}'
Last modified on July 7, 2026
Was this page helpful?
⌘I