From 70cff6cd9a5cb83acb4cefb52c8fc165864a9087 Mon Sep 17 00:00:00 2001 From: tmcgroul Date: Mon, 8 Jun 2026 13:51:20 +0300 Subject: [PATCH 1/2] allow to filter traces by call type --- .../queries/trace_call_type/query.json | 25 +++++++++++++++++++ .../queries/trace_call_type/result.json | 3 +++ crates/query/src/query/eth.rs | 2 ++ 3 files changed, 30 insertions(+) create mode 100644 crates/query/fixtures/ethereum/queries/trace_call_type/query.json create mode 100644 crates/query/fixtures/ethereum/queries/trace_call_type/result.json diff --git a/crates/query/fixtures/ethereum/queries/trace_call_type/query.json b/crates/query/fixtures/ethereum/queries/trace_call_type/query.json new file mode 100644 index 0000000..4d9b96b --- /dev/null +++ b/crates/query/fixtures/ethereum/queries/trace_call_type/query.json @@ -0,0 +1,25 @@ +{ + "type": "evm", + "fromBlock": 17881390, + "toBlock": 17881870, + "fields": { + "trace": { + "callFrom": true, + "callType": true, + "transactionIndex": true, + "traceAddress": true, + "type": true + }, + "block": { + "number": true, + "hash": true, + "parentHash": true + } + }, + "traces": [ + { + "callFrom": ["0x58df81babdf15276e761808e872a3838cbecbcf9"], + "callType": ["staticcall"] + } + ] +} \ No newline at end of file diff --git a/crates/query/fixtures/ethereum/queries/trace_call_type/result.json b/crates/query/fixtures/ethereum/queries/trace_call_type/result.json new file mode 100644 index 0000000..c0b284e --- /dev/null +++ b/crates/query/fixtures/ethereum/queries/trace_call_type/result.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:542a37a1fca0ed0c472a50bc4a05fc99b2ec0b4464adea6fdb81e57b7c2b86b5 +size 578038 diff --git a/crates/query/src/query/eth.rs b/crates/query/src/query/eth.rs index b67d9e8..70e6d66 100644 --- a/crates/query/src/query/eth.rs +++ b/crates/query/src/query/eth.rs @@ -574,6 +574,7 @@ request! { pub call_from: Option>, pub call_to: Option>, pub call_sighash: Option>, + pub call_type: Option>, pub suicide_address: Option>, pub suicide_refund_address: Option>, pub reward_author: Option>, @@ -592,6 +593,7 @@ impl TraceRequest { p.col_in_list("call_from", to_lowercase_list(&self.call_from)); p.col_in_list("call_to", to_lowercase_list(&self.call_to)); p.col_in_list("call_sighash", to_lowercase_list(&self.call_sighash)); + p.col_in_list("call_type", self.call_type.as_deref()); p.col_in_list("suicide_address", to_lowercase_list(&self.suicide_address)); p.col_in_list( "suicide_refund_address", From 86cd97e68f1b318e1e7f32b86ad6c9d16d788b7d Mon Sep 17 00:00:00 2001 From: tmcgroul Date: Mon, 8 Jun 2026 18:31:07 +0300 Subject: [PATCH 2/2] allow to filter out zero value traces --- .../queries/trace_value_non_zero/query.json | 38 +++++++++++++++++++ .../queries/trace_value_non_zero/result.json | 3 ++ crates/query/src/query/eth.rs | 16 ++++++++ 3 files changed, 57 insertions(+) create mode 100644 crates/query/fixtures/ethereum/queries/trace_value_non_zero/query.json create mode 100644 crates/query/fixtures/ethereum/queries/trace_value_non_zero/result.json diff --git a/crates/query/fixtures/ethereum/queries/trace_value_non_zero/query.json b/crates/query/fixtures/ethereum/queries/trace_value_non_zero/query.json new file mode 100644 index 0000000..56c1acb --- /dev/null +++ b/crates/query/fixtures/ethereum/queries/trace_value_non_zero/query.json @@ -0,0 +1,38 @@ +{ + "type": "evm", + "fromBlock": 17881390, + "toBlock": 17881870, + "fields": { + "trace": { + "callType": true, + "callSighash": true, + "callValue": true, + "createResultAddress": true, + "createValue": true, + "suicideRefundAddress": true, + "suicideBalance": true, + "rewardValue": true, + "transactionIndex": true, + "traceAddress": true, + "type": true + }, + "block": { + "number": true, + "hash": true, + "parentHash": true + } + }, + "traces": [ + { + "createValueNonZero": true + }, + { + "callType": ["call"], + "callSighash": ["0x3598d8ab"], + "callValueNonZero": true + }, + { + "suicideBalanceNonZero": true + } + ] +} \ No newline at end of file diff --git a/crates/query/fixtures/ethereum/queries/trace_value_non_zero/result.json b/crates/query/fixtures/ethereum/queries/trace_value_non_zero/result.json new file mode 100644 index 0000000..6303410 --- /dev/null +++ b/crates/query/fixtures/ethereum/queries/trace_value_non_zero/result.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02c2c84a41eec2e10ec66ee53628660a9b067694d07abd165fb076492889742c +size 33225 diff --git a/crates/query/src/query/eth.rs b/crates/query/src/query/eth.rs index 70e6d66..943be07 100644 --- a/crates/query/src/query/eth.rs +++ b/crates/query/src/query/eth.rs @@ -571,13 +571,17 @@ request! { pub r#type: Option>, pub create_from: Option>, pub create_result_address: Option>, + pub create_value_non_zero: bool, pub call_from: Option>, pub call_to: Option>, pub call_sighash: Option>, pub call_type: Option>, + pub call_value_non_zero: bool, pub suicide_address: Option>, pub suicide_refund_address: Option>, + pub suicide_balance_non_zero: bool, pub reward_author: Option>, + pub reward_value_non_zero: bool, pub transaction: bool, pub transaction_logs: bool, pub subtraces: bool, @@ -600,6 +604,18 @@ impl TraceRequest { to_lowercase_list(&self.suicide_refund_address) ); p.col_in_list("reward_author", to_lowercase_list(&self.reward_author)); + if self.call_value_non_zero { + p.col_gt_eq("call_value", Some("0x1")); + } + if self.create_value_non_zero { + p.col_gt_eq("create_value", Some("0x1")); + } + if self.suicide_balance_non_zero { + p.col_gt_eq("suicide_balance", Some("0x1")); + } + if self.reward_value_non_zero { + p.col_gt_eq("reward_value", Some("0x1")); + } } fn relations(&self, scan: &mut ScanBuilder) {