foundry_config/
invariant.rs1use crate::fuzz::{FuzzCorpusConfig, FuzzDictionaryConfig};
4use serde::{Deserialize, Serialize};
5use std::path::PathBuf;
6
7#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
9pub struct InvariantConfig {
10 pub runs: u32,
12 pub depth: u32,
14 pub fail_on_revert: bool,
16 pub call_override: bool,
19 #[serde(flatten)]
21 pub dictionary: FuzzDictionaryConfig,
22 pub shrink_run_limit: u32,
24 pub max_assume_rejects: u32,
27 pub gas_report_samples: u32,
29 #[serde(flatten)]
31 pub corpus: FuzzCorpusConfig,
32 pub failure_persist_dir: Option<PathBuf>,
34 pub show_metrics: bool,
36 pub timeout: Option<u32>,
38 pub show_solidity: bool,
40}
41
42impl Default for InvariantConfig {
43 fn default() -> Self {
44 Self {
45 runs: 256,
46 depth: 500,
47 fail_on_revert: false,
48 call_override: false,
49 dictionary: FuzzDictionaryConfig { dictionary_weight: 80, ..Default::default() },
50 shrink_run_limit: 5000,
51 max_assume_rejects: 65536,
52 gas_report_samples: 256,
53 corpus: FuzzCorpusConfig::default(),
54 failure_persist_dir: None,
55 show_metrics: true,
56 timeout: None,
57 show_solidity: false,
58 }
59 }
60}
61
62impl InvariantConfig {
63 pub fn new(cache_dir: PathBuf) -> Self {
65 Self {
66 runs: 256,
67 depth: 500,
68 fail_on_revert: false,
69 call_override: false,
70 dictionary: FuzzDictionaryConfig { dictionary_weight: 80, ..Default::default() },
71 shrink_run_limit: 5000,
72 max_assume_rejects: 65536,
73 gas_report_samples: 256,
74 corpus: FuzzCorpusConfig::default(),
75 failure_persist_dir: Some(cache_dir),
76 show_metrics: true,
77 timeout: None,
78 show_solidity: false,
79 }
80 }
81}