Retrieve Internal Transactions from a Transaction Hash

Internal transactions, also known as “subcalls” or “contract calls,” represent interactions between smart contracts during the execution of a blockchain transaction.

These transactions can be accessed using the debug_traceTransaction method in an Ethereum-compatible RPC interface.

Using "debug_traceTransaction"

The debug_traceTransaction method provides detailed information about all opcodes executed during the transaction. While this is comprehensive, it may be excessive if you only need internal transactions. By passing the parameter { "tracer": "callTracer" } , you can limit the output to only the internal transactions.

Example Request

Below is an example of how to retrieve internal transactions using the debug_traceTransaction method with the callTracer parameter:

curl --location 'https://ethereum-mainnet.gateway.tatum.io' \
--header 'Content-Type: application/json' \
--header 'x-api-key: {YOUR_API_KEY}' \
--data '{
    "jsonrpc": "2.0",
    "method": "debug_traceTransaction",
    "params": [
        "0xa5d0113fc4d10ec85005c686305d762a2320478b0809fd3718c1e2caecb4f92e",
        {
            "tracer": "callTracer"
        }
    ],
    "id": 1
}'
//Response:
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "from": "0x7830c87c02e56aff27fa8ab1241711331fa86f43",
        "gas": "0x1e8480",
        "gasUsed": "0x6bd4a",
        "to": "0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43",
        "input": "...",
        "calls": [
            {
                "from": "0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43",
                "gas": "0x15f90",
                "gasUsed": "0x0",
                "to": "0x9fefd35420f40222aaeafafd3721086ce381bdd5",
                "input": "0x",
                "value": "0x1311e50bc2c800",
                "type": "CALL"
            },
            {
                "from": "0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43",
                "gas": "0x15f90",
                "gasUsed": "0x0",
                "to": "0x147b12c06d9e8e3837280f783fd8070848d4412e",
                "input": "0x",
                "value": "0x143ac7788dfdcc000",
                "type": "CALL"
            }
            // Additional internal transactions are listed here...
        ]
    }
}

Key Fields in the Response

  • from: The address initiating the internal transaction.
  • to: The recipient address of the internal transaction.
  • gas: The gas allocated for the internal transaction.
  • gasUsed: The gas used by the internal transaction.
  • value: The amount of Ether (or equivalent) transferred.
  • type: The type of call (e.g., CALL, DELEGATECALL).

Good to Know

  • The debug_traceTransaction method requires an archive node, as it accesses historical state data.
  • The callTracer is efficient for extracting internal transactions but may still be resource-intensive for large transactions.