> For a complete page index, fetch https://docs.conduit.xyz/llms.txt

# debug_traceBlockByHash

POST https://rpc.plume.org/YOUR_API_KEY
Content-Type: application/json

**Availability:** Access to the `debug` namespace depends on your endpoint's method allowlist. Starting **August 4, 2026 at 12:00 PM PST**, all `debug_*` methods require an API key appended to the RPC URL — unauthenticated calls are rejected. If you receive `-32601 method not found` or `method not supported` errors, contact Conduit support to confirm your endpoint's configuration.

Returns trace results for every transaction in the block with the given hash. Result shape depends on the `tracer` chosen in the config object. See `debug_traceCall` for the full config object schema and tracer reference.

⚡ Compute Units: [300 CU](https://docs.conduit.xyz/rpc-nodes/information/compute-units)

Reference: https://docs.conduit.xyz/rpc-nodes/json-rpc-reference/debug-trace-block-by-hash

## Request

### Body (application/json)

This endpoint expects an object.

- `blockHash` (string, required) — 32-byte hash of the block
- `config` (TraceConfig, optional) — Trace configuration. Shared shape across all debug_trace* methods; see the TraceConfig schema.

## Response

### 200

Array of per-transaction trace results, in block-execution order. Each entry is a CallTrace when using callTracer; other tracers return other shapes.

- `list of DebugTraceBlockByHashResultItems`

## Types

### TraceConfig

Trace configuration used by every `debug_trace*` method. `tracer` selects the tracer; `tracerConfig` is the tracer-specific options object whose shape depends on `tracer`.

- `tracer` (string, optional) — Tracer name. Common values: `callTracer` (nested call tree — the most useful), `prestateTracer` (pre/post state diff), `4byteTracer`, `noopTracer`, `muxTracer`, `flatCallTracer`. Geth also accepts arbitrary JS tracer source as a string. When omitted, Geth defaults to the structured-opcode tracer (very verbose).
- `tracerConfig` (TraceConfigTracerConfig, optional) — Tracer-specific options. For `callTracer`: `{onlyTopCall: bool, withLog: bool}`. For `prestateTracer`: `{diffMode: bool}`. Shape varies per tracer — see Geth or Reth docs for the active tracer.
- `timeout` (string, optional) — Maximum execution time as a Go duration string, e.g. `"5s"`. Defaults to 5 seconds.
- `disableStack` (boolean, optional) — Only meaningful for the default opcode tracer; omits stack info in steps.
- `disableStorage` (boolean, optional) — Only meaningful for the default opcode tracer; omits storage info in steps.
- `enableMemory` (boolean, optional) — Only meaningful for the default opcode tracer; includes memory info in steps.
- `enableReturnData` (boolean, optional) — Only meaningful for the default opcode tracer; includes returnData.
- `stateOverrides` (StateOverride, optional) — Per-address state overrides applied before the traced call executes (`debug_traceCall` only).
- `blockOverrides` (BlockOverride, optional) — Block-header field overrides applied to the traced call (`debug_traceCall` only).

### DebugTraceBlockByHashResultItems

### TraceConfigTracerConfig

Tracer-specific options. For `callTracer`: `{onlyTopCall: bool, withLog: bool}`. For `prestateTracer`: `{diffMode: bool}`. Shape varies per tracer — see Geth or Reth docs for the active tracer.

### StateOverride

- `balance` (string, optional) — Override the account's balance (wei, hex-encoded).
- `nonce` (string, optional) — Override the account's nonce.
- `code` (string, optional) — Override the account's contract code (raw bytes, hex-encoded).
- `state` (map from string to string, optional) — Replace the account's storage entirely. Map of 32-byte slot key to 32-byte value (both hex). Any slot not listed reads as zero.
- `stateDiff` (map from string to string, optional) — Overlay specific storage slots without clearing the rest. Map of 32-byte slot key to 32-byte value.

### BlockOverride

Block-header field overrides applied during simulation. All fields optional. Forwarded to the backend as-is; the backend honors them during execution.

- `number` (string, optional) — Override block number.
- `difficulty` (string, optional) — Override block difficulty (pre-Merge concept; ignored on post-Merge chains).
- `time` (string, optional) — Override block timestamp (Unix seconds).
- `gasLimit` (string, optional) — Override block gas limit.
- `feeRecipient` (string, optional) — Override block fee recipient (formerly coinbase / miner).
- `prevRandao` (string, optional) — Override prevRandao (post-Merge replacement for difficulty).
- `baseFeePerGas` (string, optional) — Override block base fee per gas.
- `blobBaseFee` (string, optional) — Override block blob base fee (EIP-4844).
- `beaconRoot` (string, optional) — Override the EIP-4788 parent beacon block root.
- `withdrawals` (list of Withdrawal, optional) — Override the block's withdrawals (EIP-4895).

### CallTrace

Nested call-tree entry returned by the `callTracer`. The top-level object describes the outermost call; each entry's `calls` array contains sub-calls in execution order.

- `type` (string, optional) — Call opcode: `CALL`, `STATICCALL`, `DELEGATECALL`, `CALLCODE`, `CREATE`, `CREATE2`, or `SELFDESTRUCT`.
- `from` (string, optional)
- `to` (string, optional)
- `value` (string, optional) — ETH value transferred, in wei.
- `gas` (string, optional) — Gas provided to the call.
- `gasUsed` (string, optional) — Gas actually consumed by the call (including sub-calls).
- `input` (string, optional) — Calldata (or init code, for CREATE/CREATE2).
- `output` (string, optional) — Return data (or deployed bytecode, for CREATE/CREATE2). Absent when the call reverted with no return data.
- `error` (string, optional) — Present if the call reverted or errored. Common values: `execution reverted`, `out of gas`, `invalid opcode`.
- `revertReason` (string, optional) — Human-readable revert reason (decoded from `Error(string)` if present).
- `logs` (list of Log, optional) — Only present when the tracer was configured with `withLog: true`.
- `calls` (list of CallTrace, optional) — Sub-calls made from this frame, in execution order.

### Withdrawal

A validator withdrawal object, as introduced by EIP-4895 (Shanghai)

- `index` (string, required) — Monotonically increasing withdrawal index, hex-encoded
- `validatorIndex` (string, required) — Index of the validator that generated the withdrawal, hex-encoded
- `address` (string, required) — 20-byte recipient address for the withdrawn ether
- `amount` (string, required) — Withdrawal amount in gwei, hex-encoded

### Log

- `transactionHash` (string, required)
- `removed` (boolean, optional)
- `logIndex` (string, optional)
- `transactionIndex` (string, optional)
- `blockHash` (string, optional)
- `blockNumber` (string, optional)
- `blockTimestamp` (string, optional)
- `address` (string, optional)
- `data` (string, optional)
- `topics` (list of string, optional)

## Examples

**Request**

```json
[
  "0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83",
  {
    "tracer": "callTracer"
  }
]
```

**Response**

```json
{
  "id": "1",
  "jsonrpc": "2.0",
  "result": [
    {
      "result": {
        "afterEVMTransfers": [],
        "beforeEVMTransfers": [],
        "from": "0x00000000000000000000000000000000000a4b05",
        "gas": "0x0",
        "gasUsed": "0x0",
        "input": "0x6bf6a42d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016e1bd900000000000000000000000000000000000000000000000000000000028401d20000000000000000000000000000000000000000000000000000000000000000",
        "to": "0x00000000000000000000000000000000000a4b05",
        "type": "CALL",
        "value": "0x0"
      },
      "txHash": "0x809db1d96a2a7f42ba7736e691c5c8f22940c2e2072f2bf54dab3776934714cf"
    },
    {
      "result": {
        "afterEVMTransfers": [
          {
            "from": null,
            "purpose": "gasRefund",
            "to": "0xee03f376aD26948D24c2E3ae76C8D95C77930763",
            "value": "0x104c88c9117c000"
          },
          {
            "from": null,
            "purpose": "feeCollection",
            "to": "0x60BE7a0C29c00250AA592A554547d48d60E3F7fD",
            "value": "0xed0ef187486000"
          },
          {
            "from": null,
            "purpose": "feeCollection",
            "to": "0xa4B00000000000000000000000000000000000F6",
            "value": "0x0"
          }
        ],
        "beforeEVMTransfers": [
          {
            "from": "0xee03f376aD26948D24c2E3ae76C8D95C77930763",
            "purpose": "feePayment",
            "to": null,
            "value": "0x1f1d77e18602000"
          }
        ],
        "calls": [
          {
            "from": "0x42b18785ce0aed7bf7ca43a39471ed4c0a3e0bb5",
            "gas": "0x16b6b",
            "gasUsed": "0x4f82",
            "input": "0x23b872dd000000000000000000000000ee03f376ad26948d24c2e3ae76c8d95c7793076300000000000000000000000042b18785ce0aed7bf7ca43a39471ed4c0a3e0bb5000000000000000000000000000000000000000000000000000000000000c351",
            "output": "0x0000000000000000000000000000000000000000000000000000000000000001",
            "to": "0xdddd73f5df1f0dc31373357beac77545dc5a6f3f",
            "type": "CALL",
            "value": "0x0"
          }
        ],
        "from": "0xee03f376ad26948d24c2e3ae76c8d95c77930763",
        "gas": "0x22362",
        "gasUsed": "0x104a6",
        "input": "0x20b76e81000000000000000000000000dddd73f5df1f0dc31373357beac77545dc5a6f3f000000000000000000000000593ccca4c4bf58b7526a4c164ceef4003c6388db0000000000000000000000007824e4b3e21678f143ce22308adfd48d1d3160fb0000000000000000000000007420302ddd469031cd2282cd64225ccd46f581ea0000000000000000000000000000000000000000000000000cb2bba6f17b800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a37805cda000000000000000000000000ee03f376ad26948d24c2e3ae76c8d95c7793076300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000117e",
        "output": "0x000000000000000000000000000000000000000000000000000000000000c3510000000000000000000000000000000000000000000000000000000a37805cda",
        "to": "0x42b18785ce0aed7bf7ca43a39471ed4c0a3e0bb5",
        "type": "CALL",
        "value": "0x0"
      },
      "txHash": "0x85681434491f687150b2ff934554f149b284839eafc579b6abffb54f7df3b42c"
    },
    {
      "result": {
        "afterEVMTransfers": [
          {
            "from": null,
            "purpose": "gasRefund",
            "to": "0xaA923BBe2941EbD52057cAA0ad493BB86d767090",
            "value": "0x2678eb0a45d000"
          },
          {
            "from": null,
            "purpose": "feeCollection",
            "to": "0x60BE7a0C29c00250AA592A554547d48d60E3F7fD",
            "value": "0x4b2dd140179000"
          },
          {
            "from": null,
            "purpose": "feeCollection",
            "to": "0xa4B00000000000000000000000000000000000F6",
            "value": "0x0"
          }
        ],
        "beforeEVMTransfers": [
          {
            "from": "0xaA923BBe2941EbD52057cAA0ad493BB86d767090",
            "purpose": "feePayment",
            "to": null,
            "value": "0x71a6bc4a5d6000"
          }
        ],
        "from": "0xaa923bbe2941ebd52057caa0ad493bb86d767090",
        "gas": "0x7cf6",
        "gasUsed": "0x52a9",
        "input": "0x5c36b186",
        "to": "0xee96619e247f69cf5ee49df56ce44a10514074ba",
        "type": "CALL",
        "value": "0x0"
      },
      "txHash": "0x4e85bcc5c314352bb64377eb4ce23b35b427783e2ebe06402e6c51a842760b7d"
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://rpc.plume.org/YOUR_API_KEY"

payload = ["0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83", { "tracer": "callTracer" }]
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://rpc.plume.org/YOUR_API_KEY';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '["0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83",{"tracer":"callTracer"}]'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://rpc.plume.org/YOUR_API_KEY"

	payload := strings.NewReader("[\n  \"0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83\",\n  {\n    \"tracer\": \"callTracer\"\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(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://rpc.plume.org/YOUR_API_KEY")

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  \"0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83\",\n  {\n    \"tracer\": \"callTracer\"\n  }\n]"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://rpc.plume.org/YOUR_API_KEY")
  .header("Content-Type", "application/json")
  .body("[\n  \"0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83\",\n  {\n    \"tracer\": \"callTracer\"\n  }\n]")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://rpc.plume.org/YOUR_API_KEY', [
  'body' => '[
  "0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83",
  {
    "tracer": "callTracer"
  }
]',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://rpc.plume.org/YOUR_API_KEY");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  \"0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83\",\n  {\n    \"tracer\": \"callTracer\"\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = ["0x7b99b97aa538547a6e4e38f011f250da6d05675461e92d25819f08c756872f83", ["tracer": "callTracer"]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://rpc.plume.org/YOUR_API_KEY")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```