debug_traceCallMany
Debug and Trace | Ethereum
debug_traceCallMany | Ethereum
Ethereum API method that executes a list of bundles and returns an execution trace for each call, without creating transactions on the blockchain.
POST
debug_traceCallMany
Ethereum API method that executes one or more bundles—each a list of transactions—against a given block and returns an execution trace for each call, without creating transactions on the blockchain. Calls within a bundle execute in sequence, so each call sees the state changes made by the calls before it. This method is akin to eth_call batched across multiple transactions, but it returns detailed execution traces, making it invaluable for debugging complex multi-transaction interactions.
Combining tracers with
Learn how to deploy a node with the debug and trace API methods enabled.
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
debug_traceCallMany takes three positional parameters:
array— a list of bundles to execute. Each bundle is an object with:transactions— an array of transaction call objects. Each object accepts the same fields as debug_traceCall:from(optional),to,gas,gasPrice,value, anddata.blockOverrides— (optional) an object that overrides fields of the execution block header, such asnumber,time, orbaseFeePerGas.
object— the simulation context that pins where the bundles execute:blockNumber— the block number or tag (for example,latest) to execute against.transactionIndex— (optional) the index within the block at which to start;-1runs after all transactions in the block.
object— (optional) the trace configuration. Settracerto one of the native tracers and pass tracer-specific options intracerConfig.
Find the complete list of available native tracers in the debug and trace overview.
Combining tracers with muxTracer
muxTracer runs several native tracers in a single pass, which is the most efficient way to collect more than one trace type for a bundle. Pass a tracerConfig object keyed by tracer name, and each tracer’s result is returned under its own key:
muxTracer config
Response
result— an array with one entry per bundle. Each entry is an array holding one trace per transaction in the bundle, in execution order. WhenmuxTraceris used, each trace is an object keyed by tracer name—for example,callTracerandprestateTracer—each holding that tracer’s output.
Use case
debug_traceCallMany is essential for:
- Simulating a sequence of dependent transactions—such as an approval followed by a swap—and inspecting how each call changes state before committing anything on-chain.
- Forensic analysis of transaction bundles, where you need both the call tree and the prestate diff in one round trip via
muxTracer. - MEV and risk tooling that pre-screens bundles against the current chain state.
Body
application/json
An array with three elements: the bundles to execute, the simulation context, and the trace configuration. The trace configuration below uses muxTracer to run callTracer and prestateTracer in a single pass.
Response
200 - application/json
Detailed execution traces for each call in each bundle. With muxTracer, every trace object is keyed by the name of each sub-tracer.
Last modified on June 13, 2026