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_storageRangeAtdebug_getBadBlocksdebug_accountRangedebug_getModifiedAccountsByNumberanddebug_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:
| Network | Chain ID | Debug | Trace |
|---|---|---|---|
| Ethereum | 1 | Yes | Yes |
| BNB Smart Chain | 56 | Yes | Yes |
| Avalanche C-Chain | 43114 | Yes | No |
| Base | 8453 | Yes | Yes |
| Arbitrum One | 42161 | Yes | No |
| Optimism | 10 | Yes | Yes |
| Robinhood Chain | 4663 | Yes | No |
| Arc Mainnet | 5042 | Yes | Yes |
| Polygon PoS | 137 | Yes | No |
| Sonic | 146 | Yes | Yes |
| Fantom Opera | 250 | Yes | Yes |
| HyperEVM | 999 | Yes | Yes |
| Plasma | 9745 | Yes | Yes |
| ZKsync Era | 324 | Yes | No |
| Linea | 59144 | Yes | No |
| Scroll | 534352 | Yes | No |
| Gnosis | 100 | Yes | Yes |
| Celo | 42220 | Yes | No |
| Blast | 81457 | Yes | No |
| Mantle | 5000 | Yes | No |
| Manta Pacific | 169 | Yes | No |
| Boba Network | 288 | Yes | No |
| Berachain | 80094 | Yes | Yes |
| Chiliz | 88888 | Yes | No |
| Ink | 57073 | Yes | Yes |
| IoTeX | 4689 | Yes | No |
| Lisk | 1135 | Yes | Yes |
| MegaETH | 4326 | Yes | Yes |
| Monad | 143 | No | No |
| opBNB | 204 | No | No |
| Immutable zkEVM | 13371 | Yes | No |
| PulseChain | 369 | Yes | No |
| Ronin | 2020 | Yes | Yes |
| Cronos | 25 | Yes | No |
| Stable | 988 | Yes | No |
| Tempo | 4217 | Yes | Yes |
| Unichain | 130 | Yes | No |
| Viction | 88 | Yes | No |
| World Chain | 480 | Yes | Yes |
| XDC Network | 50 | Yes | No |
| ZetaChain | 7000 | No | No |
| Zora | 7777777 | Yes | No |
| Flow EVM | 747 | Yes | No |
| Ethereum Sepolia | 11155111 | Yes | Yes |
| Base Sepolia | 84532 | Yes | Yes |
| Arbitrum Sepolia | 421614 | Yes | No |
| Arc Testnet | 5042002 | Yes | Yes |
| Optimism Sepolia | 11155420 | Yes | Yes |
| Polygon Amoy | 80002 | Yes | No |
| BNB Smart Chain Testnet | 97 | No | No |
| Gnosis Chiado | 10200 | Yes | Yes |
| Berachain Bepolia | 80069 | Yes | Yes |
| Chiliz Spicy | 88882 | Yes | No |
| Flow EVM Testnet | 545 | Yes | No |
| Lisk Sepolia | 4202 | Yes | Yes |
| Mantle Sepolia | 5003 | Yes | No |
| Monad Testnet | 10143 | No | No |
| opBNB Testnet | 5611 | Yes | No |
| PulseChain Testnet v4 | 943 | Yes | No |
| Ronin Saigon | 202601 | Yes | Yes |
| Unichain Sepolia | 1301 | Yes | No |
| Zora Sepolia | 999999999 | Yes | No |
| Avalanche Fuji C-Chain | 43113 | Yes | No |
| Ethereum Hoodi | 560048 | Yes | Yes |
| HyperEVM Testnet | 998 | Yes | Yes |
| Plasma Testnet | 9746 | Yes | Yes |
| Robinhood Testnet | 46630 | Yes | No |
| Sonic Testnet | 14601 | Yes | Yes |
| Tempo Moderato | 42431 | Yes | Yes |
| ZKsync Sepolia | 300 | Yes | No |
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:
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:
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.