debug_traceCall
curl --request POST \
--url https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [
{
"to": "0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701",
"data": "0x06fdde03"
},
"latest",
{
"tracer": "callTracer"
}
]
}
'import requests
url = "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [{
"to": "0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701",
"data": "0x06fdde03"
}, "latest", { "tracer": "callTracer" }]
}
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({
id: 1,
jsonrpc: '2.0',
method: 'debug_traceCall',
params: [
{to: '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701', data: '0x06fdde03'},
'latest',
{tracer: 'callTracer'}
]
})
};
fetch('https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/', 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://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/",
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([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'debug_traceCall',
'params' => [
[
'to' => '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701',
'data' => '0x06fdde03'
],
'latest',
[
'tracer' => 'callTracer'
]
]
]),
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://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701\",\n \"data\": \"0x06fdde03\"\n },\n \"latest\",\n {\n \"tracer\": \"callTracer\"\n }\n ]\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://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701\",\n \"data\": \"0x06fdde03\"\n },\n \"latest\",\n {\n \"tracer\": \"callTracer\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
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 \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701\",\n \"data\": \"0x06fdde03\"\n },\n \"latest\",\n {\n \"tracer\": \"callTracer\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Monad node API
debug_traceCall | Monad
Monad API method that traces a call without creating a transaction on the blockchain. Available on Monad via Chainstack JSON-RPC nodes.
POST
/
debug_traceCall
curl --request POST \
--url https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [
{
"to": "0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701",
"data": "0x06fdde03"
},
"latest",
{
"tracer": "callTracer"
}
]
}
'import requests
url = "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceCall",
"params": [{
"to": "0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701",
"data": "0x06fdde03"
}, "latest", { "tracer": "callTracer" }]
}
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({
id: 1,
jsonrpc: '2.0',
method: 'debug_traceCall',
params: [
{to: '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701', data: '0x06fdde03'},
'latest',
{tracer: 'callTracer'}
]
})
};
fetch('https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/', 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://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/",
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([
'id' => 1,
'jsonrpc' => '2.0',
'method' => 'debug_traceCall',
'params' => [
[
'to' => '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701',
'data' => '0x06fdde03'
],
'latest',
[
'tracer' => 'callTracer'
]
]
]),
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://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload := strings.NewReader("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701\",\n \"data\": \"0x06fdde03\"\n },\n \"latest\",\n {\n \"tracer\": \"callTracer\"\n }\n ]\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://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
.header("Content-Type", "application/json")
.body("{\n \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701\",\n \"data\": \"0x06fdde03\"\n },\n \"latest\",\n {\n \"tracer\": \"callTracer\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/")
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 \"id\": 1,\n \"jsonrpc\": \"2.0\",\n \"method\": \"debug_traceCall\",\n \"params\": [\n {\n \"to\": \"0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701\",\n \"data\": \"0x06fdde03\"\n },\n \"latest\",\n {\n \"tracer\": \"callTracer\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": {}
}Monad API method that traces a call without creating a transaction on the blockchain. This method is similar to
eth_call but returns detailed execution traces, making it useful for debugging contract calls before sending actual transactions.
Monad-specific behavior:
- The trace options object parameter must be explicitly provided. Unlike standard EVM clients where this parameter is optional, Monad RPC will return an error (
-32602 Invalid params) if the parameter is omitted. Always include the trace options, even if empty ({}). - When an empty trace options object
{}is provided, Monad defaults tocallTracerinstead of struct logs, because Monad does not currently support opcode-level struct logs at the VM level.
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
object— the transaction call object:from(optional) — address the transaction is sent fromto— address the transaction is directed togas(optional) — gas provided for the callgasPrice(optional) — gas price for the callvalue(optional) — value sent with the calldata(optional) — hash of the method signature and encoded parameters
quantity|tag— the block number as a hexadecimal string, or block tag (latest,earliest,pending).object(optional) — the tracer options:tracer— the tracer to use (e.g.,callTracer,prestateTracer)tracerConfig— configuration options for the tracertimeout— timeout for the trace operation
Response
result— the trace result object. The structure depends on the tracer used:- For
callTracer:type— the call type (CALL, CREATE, etc.)from— sender addressto— recipient addressvalue— value transferredgas— gas providedgasUsed— gas usedinput— call dataoutput— return datacalls— nested calls
- For
debug_traceCall code examples
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider("CHAINSTACK_NODE_URL");
async function traceCall() {
// Trace name() call on Wrapped Monad (WMON) contract
const tx = {
to: "0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701",
data: "0x06fdde03" // name()
};
const trace = await provider.send("debug_traceCall", [
tx,
"latest",
{ tracer: "callTracer" }
]);
console.log("Call trace:", JSON.stringify(trace, null, 2));
}
traceCall();
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
# Trace name() call on Wrapped Monad (WMON) contract
tx = {
'to': '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701',
'data': '0x06fdde03' # name()
}
trace = web3.provider.make_request('debug_traceCall', [tx, 'latest', {'tracer': 'callTracer'}])
print(f'Call trace: {trace["result"]}')
Use case
A practical use case fordebug_traceCall is simulating complex contract interactions before sending transactions to understand the execution path, identify potential failures, and verify expected behavior without spending gas.Last modified on June 22, 2026
Was this page helpful?