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
}
}
}
}