reth_node_core/args/
engine.rs
1use clap::Args;
4use reth_engine_primitives::TreeConfig;
5
6use crate::node_config::{
7 DEFAULT_CROSS_BLOCK_CACHE_SIZE_MB, DEFAULT_MAX_PROOF_TASK_CONCURRENCY,
8 DEFAULT_MEMORY_BLOCK_BUFFER_TARGET, DEFAULT_PERSISTENCE_THRESHOLD, DEFAULT_RESERVED_CPU_CORES,
9};
10
11#[derive(Debug, Clone, Args, PartialEq, Eq)]
13#[command(next_help_heading = "Engine")]
14pub struct EngineArgs {
15 #[arg(long = "engine.persistence-threshold", default_value_t = DEFAULT_PERSISTENCE_THRESHOLD)]
17 pub persistence_threshold: u64,
18
19 #[arg(long = "engine.memory-block-buffer-target", default_value_t = DEFAULT_MEMORY_BLOCK_BUFFER_TARGET)]
21 pub memory_block_buffer_target: u64,
22
23 #[arg(long = "engine.legacy-state-root", default_value = "false")]
25 pub legacy_state_root_task_enabled: bool,
26
27 #[arg(long = "engine.caching-and-prewarming", default_value = "true")]
30 pub caching_and_prewarming_enabled: bool,
31
32 #[arg(long = "engine.disable-caching-and-prewarming")]
34 pub caching_and_prewarming_disabled: bool,
35
36 #[arg(long = "engine.cross-block-cache-size", default_value_t = DEFAULT_CROSS_BLOCK_CACHE_SIZE_MB)]
38 pub cross_block_cache_size: u64,
39
40 #[arg(long = "engine.state-root-task-compare-updates")]
43 pub state_root_task_compare_updates: bool,
44
45 #[arg(long = "engine.accept-execution-requests-hash")]
47 pub accept_execution_requests_hash: bool,
48
49 #[arg(long = "engine.max-proof-task-concurrency", default_value_t = DEFAULT_MAX_PROOF_TASK_CONCURRENCY)]
51 pub max_proof_task_concurrency: u64,
52
53 #[arg(long = "engine.reserved-cpu-cores", default_value_t = DEFAULT_RESERVED_CPU_CORES)]
55 pub reserved_cpu_cores: usize,
56}
57
58impl Default for EngineArgs {
59 fn default() -> Self {
60 Self {
61 persistence_threshold: DEFAULT_PERSISTENCE_THRESHOLD,
62 memory_block_buffer_target: DEFAULT_MEMORY_BLOCK_BUFFER_TARGET,
63 legacy_state_root_task_enabled: false,
64 state_root_task_compare_updates: false,
65 caching_and_prewarming_enabled: true,
66 caching_and_prewarming_disabled: false,
67 cross_block_cache_size: DEFAULT_CROSS_BLOCK_CACHE_SIZE_MB,
68 accept_execution_requests_hash: false,
69 max_proof_task_concurrency: DEFAULT_MAX_PROOF_TASK_CONCURRENCY,
70 reserved_cpu_cores: DEFAULT_RESERVED_CPU_CORES,
71 }
72 }
73}
74
75impl EngineArgs {
76 pub fn tree_config(&self) -> TreeConfig {
78 TreeConfig::default()
79 .with_persistence_threshold(self.persistence_threshold)
80 .with_memory_block_buffer_target(self.memory_block_buffer_target)
81 .with_legacy_state_root(self.legacy_state_root_task_enabled)
82 .without_caching_and_prewarming(self.caching_and_prewarming_disabled)
83 .with_always_compare_trie_updates(self.state_root_task_compare_updates)
84 .with_cross_block_cache_size(self.cross_block_cache_size * 1024 * 1024)
85 .with_max_proof_task_concurrency(self.max_proof_task_concurrency)
86 .with_reserved_cpu_cores(self.reserved_cpu_cores)
87 }
88}
89
90#[cfg(test)]
91mod tests {
92 use super::*;
93 use clap::Parser;
94
95 #[derive(Parser)]
97 struct CommandParser<T: Args> {
98 #[command(flatten)]
99 args: T,
100 }
101
102 #[test]
103 fn test_parse_engine_args() {
104 let default_args = EngineArgs::default();
105 let args = CommandParser::<EngineArgs>::parse_from(["reth"]).args;
106 assert_eq!(args, default_args);
107 }
108}