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
8pub 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
15pub 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}