anvil_zksync_core/node/traces/
decoder.rs1use std::sync::OnceLock;
2
3use alloy::json_abi::Event;
4use anvil_zksync_console::{ds, hh};
5use anvil_zksync_traces::decode::{CallTraceDecoder, CallTraceDecoderBuilderBase};
6
7pub struct CallTraceDecoderBuilder;
8
9impl CallTraceDecoderBuilder {
10 #[inline]
13 pub fn default() -> CallTraceDecoderBuilderBase {
14 static INIT: OnceLock<CallTraceDecoder> = OnceLock::new();
15 CallTraceDecoderBuilderBase::new(
16 INIT.get_or_init(|| {
17 CallTraceDecoder::new(
18 hh::abi::functions()
19 .into_values()
20 .flatten()
21 .map(|func| (func.selector(), vec![func]))
22 .collect(),
23 ds::abi::events()
24 .into_values()
25 .flatten()
26 .map(|event| ((event.selector(), indexed_inputs(&event)), vec![event]))
27 .collect(),
28 )
29 })
30 .clone(),
31 )
32 }
33}
34
35fn indexed_inputs(event: &Event) -> usize {
36 event.inputs.iter().filter(|param| param.indexed).count()
37}