> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainstack.com/llms.txt
> Use this file to discover all available pages before exploring further.

# trace transaction | Fantom

> Fantom trace_transaction method — get a complete trace of all internal calls and state changes for a specific transaction. Available on Erigon nodes only.

## Parameters

* `hash` — the hash identifying a transaction

## JSON-RPC example

```shell theme={"system"}
curl https://fantom-mainnet.core.chainstack.com/4ab982aa70a7baead515ffdb5915df3f \
-X POST \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","id":1,"method":"trace_transaction","params":["0xa2b1e35f59d184da1996b37803ed2e8e81057be7d07a93af48a410fd9338d616"]}'
```

## Response

* `action` — an object that describes the action taken by the transaction:

  * `from` — the address of the sender who initiated the transaction.

  * `callType` — the type of call, `call` or `delegatecall`, two ways to invoke a function in a smart contract. `call` creates a new environment for the function to work in, so changes made in that function won't affect the environment where the function was called. `delegatecall` doesn't create a new environment. Instead, it runs the function within the environment of the caller, so changes made in that function will affect the caller's environment.

  * `gas` — the units of gas included in the transaction by the sender.

  * `input` — the optional input data sent with the transaction, usually used to interact with smart contracts.

  * `to` — the address of the recipient of the transaction if it was a transaction to an address. For contract creation transactions, this field is null.

  * `value` — the value of the native token transferred along with the transaction, in Wei.

  * `blockHash` — the hash of the block in which the transaction was included.

  * `blockNumber` — the number of the block in which the transaction was included.

  * `error` — a string that indicates whether the transaction was successful or not. `null` if successful, `Reverted` if not.

  * `result` — an object that contains additional data about the execution of the transaction:

    * `gasUsed` — the total used gas by the call, encoded as hexadecimal.
    * `output` — the return value of the call, encoded as a hexadecimal string.

  * `subtraces` — the number of sub-traces created during execution. When a transaction is executed on the EVM, it may trigger additional sub-executions, such as when a smart contract calls another smart contract or when an external account is accessed.

  * `traceAddress` — an array that indicates the position of the transaction in the trace.

  * `transactionHash` — the hash of the transaction.

  * `transactionPosition` — the position of the transaction in the block.

  * `type` — the type of action taken by the transaction, `call` or `create`. `call `is the most common type of trace and occurs when a smart contract invokes another contract's function. `create` represents the creation of a new smart contract. This type of trace occurs when a smart contract is deployed to the blockchain.

## `trace_transaction` code examples

<CodeGroup>
  ```javascript ethers.js theme={"system"}
  const ethers = require('ethers');
  const NODE_URL = "CHAINSTACK_NODE_URL";
  const provider = new ethers.JsonRpcProvider(NODE_URL);

  const traceTransaction = async (txHash) => {
    const traces = await provider.send("trace_transaction", [txHash]);
    console.log(traces);
  };

  traceTransaction("0xa2b1e35f59d184da1996b37803ed2e8e81057be7d07a93af48a410fd9338d616")
  ```

  ```python web3.py theme={"system"}
  from web3 import Web3
  node_url = "CHAINSTACK_NODE_URL"
  web3 = Web3.HTTPProvider(node_url)

  tx_hash = "0xa2b1e35f59d184da1996b37803ed2e8e81057be7d07a93af48a410fd9338d616"

  traces = web3.provider.make_request('trace_transaction', [tx_hash])
  print(traces)
  ```
</CodeGroup>

## Use case

A practical use case of the `trace_transaction` method can inspect NFT transfers, allowing you to identify internal transactions, the sender and receiver, and the amounts transferred. This can be especially useful when analyzing an ERC-721 token purchase on a marketplace like Opensea, where funds transfer is not always straightforward due to multiple internal calls for transferring funds to the NFT owner, paying royalties to the creator, and other factors. By using `trace_transaction`, you can gain a more comprehensive understanding of the transaction flow.

## Try the `trace_transaction` RPC method yourself
