Skip to main content
POST
/
debug_traceBlockByHash
curl --request POST \
  --url https://monad-testnet.core.chainstack.com/9c5b265f20b3ea5df4f54f70eb74b800/ \
  --header 'Content-Type: application/json' \
  --data '{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "debug_traceBlockByHash",
  "params": [
    "0x1229782398dacbea4db9c732db74aacbc7f919800ab82c79daefbbcee07a86de",
    {
      "tracer": "callTracer"
    }
  ]
}'
{
  "jsonrpc": "<string>",
  "id": 123,
  "result": [
    {}
  ]
}
Monad API method that returns traces for all transactions in a block specified by block hash. This method is useful for analyzing all transaction executions within a specific block when you have its hash.
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 to callTracer instead of struct logs, because Monad does not currently support opcode-level struct logs at the VM level.
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

  • data — the 32-byte hash of the block.
  • object (optional) — the tracer options:
    • tracer — the tracer to use (e.g., callTracer, prestateTracer)
    • tracerConfig — configuration options for the tracer
    • timeout — 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_traceBlockByHash code examples

const { ethers } = require("ethers");

const provider = new ethers.JsonRpcProvider("CHAINSTACK_NODE_URL");

async function traceBlock() {
  const blockHash = "0x1229782398dacbea4db9c732db74aacbc7f919800ab82c79daefbbcee07a86de";
  const traces = await provider.send("debug_traceBlockByHash", [
    blockHash,
    { tracer: "callTracer" }
  ]);
  console.log(`Traced ${traces.length} transactions`);
  traces.forEach((trace, i) => {
    console.log(`Transaction ${i}:`, trace.result?.type || 'unknown');
  });
}

traceBlock();

Use case

A practical use case for debug_traceBlockByHash is investigating specific blocks identified through external sources (like block explorers or incident reports) to understand the exact execution flow of all transactions they contain.

Body

application/json
id
integer
default:1
jsonrpc
string
default:2.0
method
string
default:debug_traceBlockByHash
params
any[]

Response

200 - application/json

Array of trace results for each transaction.

jsonrpc
string
id
integer
result
object[]