anvil_zksync/
utils.rs

1use crate::cli::{Command, ForkUrl};
2use anvil_zksync_config::types::Genesis;
3use anvil_zksync_config::TestNodeConfig;
4use anvil_zksync_core::node::fork::ForkDetails;
5use std::fs;
6use zksync_telemetry::TelemetryProps;
7
8/// Parses the genesis file from the given path.
9pub fn parse_genesis_file(path: &str) -> Result<Genesis, String> {
10    let file_content =
11        fs::read_to_string(path).map_err(|err| format!("Failed to read file: {err}"))?;
12    serde_json::from_str(&file_content).map_err(|err| format!("Failed to parse JSON: {err}"))
13}
14
15/// Updates the configuration from fork details.
16pub async fn update_with_fork_details(config: &mut TestNodeConfig, fd: &ForkDetails) {
17    let l1_gas_price = config.l1_gas_price.or(Some(fd.l1_gas_price));
18    let l2_gas_price = config.l2_gas_price.or(Some(fd.l2_fair_gas_price));
19    let l1_pubdata_price = config.l1_pubdata_price.or(Some(fd.fair_pubdata_price));
20    let price_scale = config
21        .price_scale_factor
22        .or(Some(fd.estimate_gas_price_scale_factor));
23    let gas_limit_scale = config
24        .limit_scale_factor
25        .or(Some(fd.estimate_gas_scale_factor));
26    let chain_id = config.chain_id.or(Some(fd.chain_id.as_u64() as u32));
27
28    config
29        .update_l1_gas_price(l1_gas_price)
30        .update_l2_gas_price(l2_gas_price)
31        .update_l1_pubdata_price(l1_pubdata_price)
32        .update_price_scale(price_scale)
33        .update_gas_limit_scale(gas_limit_scale)
34        .update_chain_id(chain_id);
35}
36
37pub const TELEMETRY_SENSITIVE_VALUE: &str = "***";
38
39pub fn get_cli_command_telemetry_props(command: Option<Command>) -> Option<TelemetryProps> {
40    let get_sensitive_fork_url = |fork_url| match fork_url {
41        ForkUrl::Custom(_) => Some(TELEMETRY_SENSITIVE_VALUE.to_string()),
42        _ => Some(format!("{:?}", fork_url)),
43    };
44
45    let (command_name, command_args) = match command {
46        Some(Command::Run) => (Some("run"), None),
47        Some(Command::Fork(args)) => {
48            let command_args = TelemetryProps::new()
49                .insert_with("fork_url", args.fork_url, get_sensitive_fork_url)
50                .insert(
51                    "fork_block_number",
52                    args.fork_block_number.map(serde_json::Number::from),
53                )
54                .insert_with("fork_transaction_hash", args.fork_transaction_hash, |v| {
55                    v.map(|_| TELEMETRY_SENSITIVE_VALUE)
56                })
57                .take();
58            (Some("fork"), Some(command_args))
59        }
60        Some(Command::ReplayTx(args)) => {
61            let command_args = TelemetryProps::new()
62                .insert_with("fork_url", args.fork_url, get_sensitive_fork_url)
63                .insert_with("tx", args.tx, |_| Some(TELEMETRY_SENSITIVE_VALUE))
64                .take();
65            (Some("replay_tx"), Some(command_args))
66        }
67        None => (None, None),
68    };
69
70    command_name?;
71    Some(
72        TelemetryProps::new()
73            .insert("name", command_name)
74            .insert("args", command_args)
75            .take(),
76    )
77}