debug_traceBlockByNumber
curl --request POST \
--url https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceBlockByNumber",
"params": [
"latest",
{
"tracer": "callTracer"
}
]
}
'import requests
url = "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceBlockByNumber",
"params": ["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_traceBlockByNumber',
params: ['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_traceBlockByNumber',
'params' => [
'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_traceBlockByNumber\",\n \"params\": [\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_traceBlockByNumber\",\n \"params\": [\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_traceBlockByNumber\",\n \"params\": [\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_traceBlockByNumber | Monad
Monad API method that returns traces for all transactions in a block specified by block number. Available on Monad via Chainstack.
POST
/
debug_traceBlockByNumber
curl --request POST \
--url https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/ \
--header 'Content-Type: application/json' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceBlockByNumber",
"params": [
"latest",
{
"tracer": "callTracer"
}
]
}
'import requests
url = "https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/"
payload = {
"id": 1,
"jsonrpc": "2.0",
"method": "debug_traceBlockByNumber",
"params": ["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_traceBlockByNumber',
params: ['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_traceBlockByNumber',
'params' => [
'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_traceBlockByNumber\",\n \"params\": [\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_traceBlockByNumber\",\n \"params\": [\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_traceBlockByNumber\",\n \"params\": [\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 returns traces for all transactions in a block specified by block number. This method is useful for analyzing all transaction executions within a single block.
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
quantity|tag— the block number as a hexadecimal string, or one of the following block tags:latest— the most recent block in the canonical chainearliest— the genesis blockpending— the pending state/transactions
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— an array of trace results, one for each transaction in the block. The structure of each trace depends on the tracer used.
debug_traceBlockByNumber code examples
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider("CHAINSTACK_NODE_URL");
async function traceBlock() {
const blockNumber = "latest"; // Or use hex like "0x1234"
const traces = await provider.send("debug_traceBlockByNumber", [
blockNumber,
{ tracer: "callTracer" }
]);
console.log(`Traced ${traces.length} transactions`);
traces.forEach((trace, i) => {
console.log(`Transaction ${i}:`, trace.result?.type || 'unknown');
});
}
traceBlock();
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
traces = web3.provider.make_request('debug_traceBlockByNumber', ['latest', {'tracer': 'callTracer'}])
print(f'Traced {len(traces["result"])} transactions')
for i, trace in enumerate(traces['result']):
print(f'Transaction {i}: {trace.get("result", {}).get("type", "unknown")}')
Use case
A practical use case fordebug_traceBlockByNumber is building block analysis tools that need to understand the complete execution flow of all transactions in a block, such as MEV detection or security monitoring systems.Last modified on June 22, 2026
Was this page helpful?