Skip to main content

debug_traceCall

In this section, we will discuss how we can use Bitquery APIs as an alternative to the debug_traceCall JSON RPC method, which runs an eth_call within the context of the given block execution using the final state of parent block as the base.

Trace Calls with Reciever Address

Using this query, you can trace all the calls sent to the address, and get details like the following.

  • Chain ID
  • From
  • To
  • Input
  • Output
  • Gas - Available Gas in WEI.
  • Gas Used - Gas utilised in WEI.
  • Value - Value sent in the call in WEI.
  • Create - Whether the Call is create or not.

query MyQuery {
EVM(dataset: combined) {
Calls(
where: {
Call: {
To: {
is: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}
}
}
){
ChainId
Call {
From
Gas
GasUsed
Input
Output
To
Value
Create
}
}
}
}

Additional Filters

Just like the debug_traceCall method, we can provide additional filters like the following.

Trace Call with Known Sender

This API provides an option to trace out the calls from a known address, which is, 0xebfb684dd2b01e698ca6c14f10e4f289934a54d6 in this example.


query MyQuery {
EVM(dataset: combined) {
Calls(
where: {
Call: {
From:{
is: "0xebfb684dd2b01e698ca6c14f10e4f289934a54d6"
},
To: {
is: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}
}
}
) {
ChainId
Call {
From
Gas
GasUsed
Input
Output
To
Value
Create
}
}
}
}

Filtering Calls by Value

Unlike the JSON RPC method where the value the value has to be fixed, we provide flexible options like the listed below.

  • eq - Equal To.
  • ne - Not Equal To.
  • ge - Greater Than or Equal To.
  • le - Less Than or Equal To.
  • gt - Greater Than.
  • lt - Less Than.

This query returns the calls where the value is non-zero.


query MyQuery {
EVM(dataset: combined) {
Calls(
where: {
Call: {
Value:{
ne: "0"
},
To: {
is: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}
}
}
) {
ChainId
Call {
From
Gas
GasUsed
Input
Output
To
Value
Create
}
}
}
}