foundry_evm_symbolic/consts.rs
1use alloy_primitives::{Address, address};
2use std::time::Duration;
3
4// HD wallet key derivation
5pub(crate) const DEFAULT_DERIVATION_PATH_PREFIX: &str = "m/44'/60'/0'/0/";
6pub(crate) const MAX_REMEMBER_KEYS: u32 = 64;
7pub(crate) const SYMBOLIC_VM_COMPAT_ADDRESS: Address =
8 address!("0xF3993A62377BCd56AE39D773740A5390411E8BC9");
9
10// Symbolic exponentiation limits
11pub(crate) const SYMBOLIC_EXP_CONCRETE_EXPONENT_LIMIT: u64 = 32;
12pub(crate) const CONCRETE_BASE_SYMBOLIC_EXPONENT_LIMIT: u64 = 256;
13
14// ABI encoding lengths
15pub(crate) const ERROR_DATA_MIN_LEN: usize = 68; // selector (4) + offset (32) + length (32)
16
17// Precompile address layout
18pub(crate) const PRECOMPILE_ADDRESS_LEADING_ZEROS: usize = 19;
19
20// Solver subprocess supervision.
21pub(crate) const SOLVER_CANCEL_CHECK_INTERVAL: Duration = Duration::from_millis(50);
22
23// Portfolio scheduler launch delays.
24pub(crate) const SECOND_PORTFOLIO_SOLVER_DELAY: Duration = Duration::from_millis(100);
25pub(crate) const RESCUE_PORTFOLIO_SOLVER_DELAY: Duration = Duration::from_millis(500);
26
27// Portfolio scheduler tuning
28pub(crate) const PORTFOLIO_SCHEDULER_HISTORY: usize = 8;
29pub(crate) const PORTFOLIO_SCHEDULER_MIN_RECENCY_WEIGHT: i64 = 1;
30pub(crate) const PORTFOLIO_SCHEDULER_SPEED_BONUS_CAP_MS: u128 = 100;
31pub(crate) const PORTFOLIO_SCHEDULER_MAX_SPEED_BONUS: i64 = 100;
32
33// Solver query cache limits
34pub(crate) const SYMBOLIC_SOLVER_SAT_CACHE_MAX_ENTRIES: usize = 4096;
35pub(crate) const SYMBOLIC_SOLVER_MODEL_CACHE_MAX_ENTRIES: usize = 512;
36
37// Bounded witness search limits.
38pub(crate) const HARD_ARITH_FALLBACK_MAX_VARS: usize = 4;
39pub(crate) const HARD_ARITH_FALLBACK_MAX_ASSIGNMENTS: usize = 50_000;
40pub(crate) const FALLBACK_MODEL_MAX_VARS: usize = 5;
41pub(crate) const FALLBACK_MODEL_MAX_CANDIDATES_PER_VAR: usize = 24;
42pub(crate) const FALLBACK_MODEL_MAX_ASSIGNMENTS: usize =
43 FALLBACK_MODEL_MAX_CANDIDATES_PER_VAR * FALLBACK_MODEL_MAX_CANDIDATES_PER_VAR;