Skip to main content
RPC operator referenceHTTPS / WSS · JSON-RPC 2.0

Tracing

Trace and debug methods run on chains whose serving clients expose those namespaces and are included in every plan, at the same price as any other method.

What's included

The whole trace_* namespace, a subset of debug_* (below), and ots_* and erigon_* methods, each on the chains whose node client implements the family (per-chain coverage below). There is no tracing add-on and no separate tier, every plan, including Free, can trace.

Supported debug_ methods

The gateway allows exactly these debug_ methods:

  • everything matching debug_trace*: debug_traceTransaction, debug_traceCall, debug_traceBlockByNumber, debug_traceBlockByHash, …
  • everything matching debug_getRaw*: debug_getRawBlock, debug_getRawTransaction, debug_getRawReceipts, …
  • debug_storageRangeAt
  • debug_getBadBlocks
  • debug_accountRange
  • debug_getModifiedAccountsByNumber and debug_getModifiedAccountsByHash

Every other debug_ method, setters, profiling, node control, returns JSON-RPC -32601 and is never billed. See the error reference.

Supported chains

Method support is independent of full/archive coverage. The live catalog below is authoritative for each chain:

NetworkChain IDDebugTrace
Ethereum1YesYes
BNB Smart Chain56YesYes
Avalanche C-Chain43114YesNo
Base8453YesYes
Arbitrum One42161YesNo
Optimism10YesYes
Robinhood Chain4663YesNo
Arc Mainnet5042YesYes
Polygon PoS137YesNo
Sonic146YesYes
Fantom Opera250YesYes
HyperEVM999YesYes
Plasma9745YesYes
ZKsync Era324YesNo
Linea59144YesNo
Scroll534352YesNo
Gnosis100YesYes
Celo42220YesNo
Blast81457YesNo
Mantle5000YesNo
Manta Pacific169YesNo
Boba Network288YesNo
Berachain80094YesYes
Chiliz88888YesNo
Ink57073YesYes
IoTeX4689YesNo
Lisk1135YesYes
MegaETH4326YesYes
Monad143NoNo
opBNB204NoNo
Immutable zkEVM13371YesNo
PulseChain369YesNo
Ronin2020YesYes
Cronos25YesNo
Stable988YesNo
Tempo4217YesYes
Unichain130YesNo
Viction88YesNo
World Chain480YesYes
XDC Network50YesNo
ZetaChain7000NoNo
Zora7777777YesNo
Flow EVM747YesNo
Ethereum Sepolia11155111YesYes
Base Sepolia84532YesYes
Arbitrum Sepolia421614YesNo
Arc Testnet5042002YesYes
Optimism Sepolia11155420YesYes
Polygon Amoy80002YesNo
BNB Smart Chain Testnet97NoNo
Gnosis Chiado10200YesYes
Berachain Bepolia80069YesYes
Chiliz Spicy88882YesNo
Flow EVM Testnet545YesNo
Lisk Sepolia4202YesYes
Mantle Sepolia5003YesNo
Monad Testnet10143NoNo
opBNB Testnet5611YesNo
PulseChain Testnet v4943YesNo
Ronin Saigon202601YesYes
Unichain Sepolia1301YesNo
Zora Sepolia999999999YesNo
Avalanche Fuji C-Chain43113YesNo
Ethereum Hoodi560048YesYes
HyperEVM Testnet998YesYes
Plasma Testnet9746YesYes
Robinhood Testnet46630YesNo
Sonic Testnet14601YesYes
Tempo Moderato42431YesYes
ZKsync Sepolia300YesNo

Per-chain coverage is on the networks page.

Timeouts and retries

Trace and debug methods get a 45s server-side budget (standard methods get 30s). A failed attempt can retry another eligible upstream when one is available within that budget. Traces are not hedged, running every multi-second trace twice would halve node capacity.

When the budget is exhausted you get HTTP 504. Set your client timeout to 60s or more so the server-side budget, not your client, decides when a heavy trace fails. A trace ending in 504 is not billed and its quota reservation is refunded.

Cost

Every completed trace or HTTP 200 JSON-RPC error is 1 response. A debug_traceTransaction that returns megabytes of call frames costs the same as eth_blockNumber. HTTP 5xx failures, including 504, are free. See pricing.

Examples

debug_traceTransaction with the callTracer, the call tree of a transaction:

Request example
curl https://rpc.solidrpc.io/YOUR_API_KEY/evm/1 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["0xTRANSACTION_HASH",{"tracer":"callTracer"}],"id":1}'

trace_block, every trace in a block:

Request example
curl https://rpc.solidrpc.io/YOUR_API_KEY/evm/1 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"trace_block","params":["latest"],"id":1}'

Method availability varies by client

Different chains run different node clients, and not every client implements every namespace, some implement debug_trace* but not trace_*. When a node does not implement a method, its own -32601 passes through to you unchanged. If you depend on a specific method on a specific chain, ask us before you build on it.

One deliberate exception. On Arbitrum One (42161) and Robinhood Chain (4663) net_listening is not part of the chain's native RPC surface — the chain's own public RPC returns -32601 for it, and so would ours without this exception. SolidRPC answers it for you with true. Read that as “this endpoint is serving your request”: it is not a health check for the chain behind us, and it does not test upstream freshness or whether your next call will succeed — for that, call eth_blockNumber and check the head is advancing. It matters if you rank endpoints client-side, because viem's fallback transport pings net_listening by default when rank: true is set. The call is metered and billed like any other.

We do not do this for net_peerCount. A peer count belongs to one specific node behind a rotating pool, so any number we returned would be invented. It still returns the client's own -32601 on those chains.