Debug and trace APIs
Overview
Debug and trace APIs allow Web3 developers to monitor, trace, and debug the activities that occur within blockchain networks. They provide detailed information about transactions, blocks, and smart contracts execution making it easier to identify and resolve issues within decentralized applications.
By using debug and trace APIs, developers can build more reliable and secure DApps with improved user experience and thus contribute to the overall health of a network.
Historical states limitations
To debug and trace transactions, you need to have historical states on the node. Full nodes of different protocols can store different amount of historical states. At the same time, archive nodes keep historical states for the entire chain.
Protocols with debug and trace APIs
Ethereum
Elastic nodes
To enable debug and trace APIs on your elastic Ethereum node, you must have the Business plan or higher and deploy the node in the archive mode. Your node will run the Erigon client and will expose the debug_*
and trace_*
methods. Learn how to deploy your elastic Ethereum node with debug and trace APIs enabled.
Dedicated nodes
To enable debug and trace APIs on your dedicated Ethereum node, you must have the Growth plan or higher. Dedicated nodes can be deployed either as the Geth or Erigon client implementation for the full and archive modes respectively, however, they slightly differ from each other:
- With a node running on Geth, only
debug_*
namespace is exposed. - With a node running on Erigon, both
debug_*
andtrace_*
namespaces are exposed.
Learn how to deploy your dedicated Ethereum node run on different clients with debug and trace APIs enabled.
For the full list of the available debug and trace API methods, see:
Polygon
Elastic nodes
To enable debug and trace APIs on your elastic Polygon node, you must have the Business plan or higher and deploy the node in the archive mode. Your node will run the Erigon client and will expose the debug_*
and trace_*
methods.
Dedicated nodes
To enable debug and trace APIs on your dedicated Polygon node, you must have the Growth plan or higher. Dedicated nodes can be deployed either as the Bor or Erigon client implementation for the full and archive modes respectively, however, they slightly differ from each other:
- With a node running on Bor, only
debug_*
namespace is exposed. - With a node running on Erigon, both
debug_*
andtrace_*
namespaces are exposed.
For the full list of the available debug and trace API methods, see: Erigon: RPC implementation status
BNB Smart Chain
Elastic nodes
To enable debug and trace APIs on your elastic BNB Smart Chain node, you must have the Business plan or higher and deploy the node in the archive mode. Your node will run the Erigon client and will expose the debug_*
and trace_*
methods.
Dedicated nodes
To enable debug and trace APIs on your dedicated BNB Smart Chain node, you must have the Business plan or higher. Dedicated nodes can be deployed either as the Geth or Erigon client implementation for the full and archive modes respectively, however, they slightly differ from each other:
- With a node running on Geth, only
debug_*
namespace is exposed. - With a node running on Erigon, both
debug_*
andtrace_*
namespaces are exposed.
For the full list of the available debug and trace API methods, see:
To enable debug and trace APIs on your BNB Smart Chain node, you have the following deploy options.
Avalanche
You can deploy an elastic Avalanche archive node with debug and trace APIs enabled as an AvalancheGo client, which is the Go language implementation of an Avalanche node. Avalanche offers an API interface identical to Geth's API, but with a limited set of services that include debug_trace*
.
For a full list of the Geth debug API methods, see the Debug namespace section of the Geth documentation.
You can deploy a dedicated Avalanche node starting from the Business plan.
Arbitrum
Elastic nodes
To enable debug and trace APIs on your elastic Arbitrum node, you must have the Business plan or higher and deploy the node in the archive mode.
Dedicated nodes
To enable debug and trace APIs on your dedicated Arbitrum node, you must have the Growth plan or higher.
Avalaible methods
Both elastic and dedicated Arbitrum nodes with debug and trace APIs enabled will expose the debug_*
and arbtrace_*
methods.
Blocks older than 22,207,815th were added to the chain before Nitro migration and cannot be queried with Geth methods. Starting from block 22,207,815, Arbitrum migrated to Nitro which made Geth debug_*
methods available for newer blocks.
Use the following methods for calling on blocks prior to 22,207,815:
- arbtrace_call
- arbtrace_callMany
- arbtrace_replayBlockTransactions
- arbtrace_replayTransaction
- arbtrace_transaction
- arbtrace_get
- arbtrace_block
- arbtrace_filter
For the full list of the available debug_*
, see Geth documentation.
Optimism
To enable debug and trace APIs on your Optimism node, you must deploy a dedicated node in the full or archive mode. The node will expose the debug_*
API methods.
For the full list of the available debug and trace API methods, see Debug namespace.
Gnosis Chain
To enable debug and trace APIs on your Gnosis Chain node, you must deploy a dedicated node in the full or archive mode. The node will expose the debug_*
and trace_*
API methods.
For the full list of the available debug and trace API methods, see Nethermind documentation.
Fantom
To enable debug and trace APIs on your Fantom node, you must deploy a dedicated node in the full or archive mode. The node will expose the debug_*
API methods.
For the full list of the available debug and trace API methods, see Debug namespace.
Harmony
To enable debug and trace APIs on your Harmony node, you must deploy a dedicated node in the full or archive mode. The node will expose the debug_*
API methods.
For the full list of the available debug and trace API methods, see Debug namespace.
Fuse
To enable debug and trace APIs on your Fuse node, you must deploy a dedicated node in the full or archive mode. The node will expose the debug_*
and trace_*
API methods.
For the full list of the available debug and trace API methods, see Nethermind documentation.
Usage examples
You can debug and trace transactions by replaying them in the Ethereum Virtual Machine to get the execution details in the exact same way as they happened on the chain.
debug_traceBlockByNumber
Trace all transactions included in a block with debug_traceBlockByNumber
in block 14,976,695:
curl 'YOUR_CHAINSTACK_ENDPOINT' \
-H 'Content-Type: application/json' \
-d '{"id": 1, "method": "debug_traceBlockByNumber", "params": ["0xE486B7", {"tracer": "callTracer"}]}'
where
0xE486B7
โ the number of the block to get the traces of included transactions. For Geth, you need to provide the block number in hex.- YOUR_CHAINSTACK_ENDPOINT โ your Chainstack node HTTPS endpoint. See View node access and credentials.
See a reverted transaction in the output:
"calls": [
{
"type": "DELEGATECALL",
"from": "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45",
"to": "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45",
"gas": "0x38ed0",
"gasUsed": "0x31147",
"input": "0x472b43f30000000000000000000000000000000000000000000000000429d069189e00000000000000000000000000000000000000000000000000160d962fcdfd0bb02400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000b5ec97d9a8a9941a28a88084a1f670c62bd8bf40000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b00b2e950d7ef8bdc49377c49676d1550deab982",
"error": "execution reverted"
trace_block
Trace all transactions included in a block with trace_block
in block 14,976,695:
curl 'YOUR_CHAINSTACK_ENDPOINT' \
-H 'Content-Type: application/json' \
-d '{"id": 1, "method": "trace_block", "params": ["14976695"]}'
where
14976695
โ the number of the block to get the traces of included transactions- YOUR_CHAINSTACK_ENDPOINT โ your Chainstack node HTTPS endpoint. See View node access and credentials.
See a reverted transaction in the output:
"action": {
"from": "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45",
"callType": "delegatecall",
"gas": "0x38ed0",
"input": "0x472b43f30000000000000000000000000000000000000000000000000429d069189e00000000000000000000000000000000000000000000000000160d962fcdfd0bb02400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000b5ec97d9a8a9941a28a88084a1f670c62bd8bf40000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b00b2e950d7ef8bdc49377c49676d1550deab982",
"to": "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45",
"value": "0x429d069189e0000"
},
"blockHash": "0x03a83bf066e81498804f26caf5d49e47820f6a0e92fd1c9cb7dc3b87bf46cf0f",
"blockNumber": 14976695,
"error": "Reverted"
Updated 21 days ago