Sei

debug_traceBlockByNumber
The debug_traceBlockByNumber method returns a full trace of all invoked opcodes of all transactions included in the specified block, identified by its block number. This method provides detailed low-level execution information useful for debugging and analyzing transaction behavior.
Use Cases
- Debugging failed transactions in a specific block
- Analyzing smart contract execution flow
- Gas usage optimization and profiling
- Security auditing of deployed contracts
- Transaction behavior verification
- Understanding complex contract interactions
- Analyzing historical blocks by their number
- Monitoring transaction execution patterns
- Finding edge cases in contract design
- Verifying deterministic execution across nodes
Method Details
This method traces the execution of all transactions in a block, identified by its number, at the opcode level.
Response Example (Simplified)
Using callTracer Format
When using the callTracer option, the response is formatted as a call graph:
Block Number Tag Options
The blockNumber parameter accepts several special tags:
latest: Most recent block that has been confirmed by the networkearliest: Genesis block (block 0)pending: Pending block with transactions in the mempool (not yet mined)
Custom Tracers
The debug_traceBlockByNumber method supports several built-in tracers:
- callTracer: Captures the call graph of each transaction execution.
- prestateTracer: Captures the pre-state of the contracts involved.
- 4byteTracer: Collects function selectors (first 4 bytes of calldata).
- noopTracer: Simply traces without collecting data (for performance testing).
Important Notes
- This method is computationally intensive and may take time to complete
- Requires debug APIs to be enabled on the Ethereum node
- Not all Ethereum clients support this method
- The response can be very large for blocks with complex transactions
- Consider using trace options to reduce response size if needed
- Specifying a block far in the past may require an archive node
- For regular block information without tracing, use eth_getBlockByNumber
- Different clients may expose different tracer options
- Custom tracers can significantly improve performance for specific analysis needs
- Historical traces might not be available beyond certain block ages on some nodes
See also
- debug_traceBlock - Trace transactions in a block using RLP-encoded block
- debug_traceBlockByHash - Trace transactions in a block using block hash
- debug_traceTransaction - Trace a single transaction by hash
Parameters
Block number in hex or tag (latest, earliest, finalized…)
JSON tracer options: { tracer?, timeout?, tracerConfig? }