debug_traceCall

Runs an eth_call within the context of the given block execution using the final state of parent block as the base.

Parameters

  1. Object - Transaction object with the following fields:
    • from - string, 20 Bytes - The address the transaction is sent from.
    • to - string, [required] 20 Bytes - The address the transaction is directed to
    • gasPrice - string, 20 Bytes - Integer of the gasPrices used for each paid gas.
    • value - string, 20 Bytes - Integer of the value sent with this transaction
    • data - string, 20 Bytes - Hash of the method signature and encoded parameters
  2. String - One of the following options:
    1. block hash
    2. block number (in hex)
    3. block tag (one of the following):
  • pending - A sample next block built by the client on top of latest and containing the set of transactions usually taken from local mempool. Intuitively, you can think of these as blocks that have not been mined yet.
  • latest - The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions.
  • safe - The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. Intuitively, this block is “unlikely” to be re-orged. Only available on Ethereum Goerli.
  • finalized - The most recent crypto-economically secure block, that has been accepted by >2/3 of validators. Cannot be re-orged outside of manual intervention driven by community coordination. Intuitively, this block is very unlikely to be re-orged. Only available on Ethereum Goerli.
  • earliest - The lowest numbered block the client has available. Intuitively, you can think of this as the first block created.
  1. tracer Object - Currently only supports callTracer (see below for definition).

Returns

  • Array - Block traces

Request

curl --request POST \
     --url https://eth-mainnet.alchemyapi.io/v2/demo \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
     "id": 1,
     "jsonrpc": "2.0",
     "method": "debug_traceCall",
     "params": [
          {
               "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567"
          },
          "finalized",
          {
               "tracer": "callTracer"
          }
     ]
}
'

Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "type": "CALL",
    "from": "0x0000000000000000000000000000000000000000",
    "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
    "value": "0x0",
    "gas": "0x7fffffffffffadf7",
    "gasUsed": "0x0",
    "input": "0x",
    "output": "0x"
  }
}

callTracer

The callTracer tracks all the call frames executed during a transaction, including depth 0. The result will be a nested list of call frames, resembling how EVM works. They form a tree with the top-level call at root and sub-calls as children of the higher levels. Each call frame has the following fields:

field

type

description

type

string

CALL or CREATE

from

string

address

to

string

address

value

string

hex-encoded amount of value transfer

gas

string

hex-encoded gas provided for call

gasUsed

string

hex-encoded gas used during call

input

string

call data

output

string

return data

error

string

error, if any

revertReason

string

Solidity revert reason, if any

calls

[]callframe

list of sub-calls

Things to note about the call tracer:

  • Calls to precompiles are also included in the result
  • In case a frame reverts, the field output will contain the raw return data
  • In case the top level frame reverts, its revertReason field will contain the parsed reason of revert as returned by the Solidity contract
Language
Click Try It! to start a request and see the response here!