diff --git a/crates/engine/primitives/src/config.rs b/crates/engine/primitives/src/config.rs index aecf92eb48..0acd4425e4 100644 --- a/crates/engine/primitives/src/config.rs +++ b/crates/engine/primitives/src/config.rs @@ -34,6 +34,11 @@ fn default_account_worker_count() -> usize { /// The size of proof targets chunk to spawn in one multiproof calculation. pub const DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE: usize = 60; +/// The size of proof targets chunk to spawn in one multiproof calculation when V2 proofs are +/// enabled. This is 4x the default chunk size to take advantage of more efficient V2 proof +/// computation. +pub const DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE_V2: usize = DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE * 4; + /// Default number of reserved CPU cores for non-reth processes. /// /// This will be deducted from the thread count of main reth global threadpool. @@ -143,8 +148,8 @@ pub struct TreeConfig { storage_worker_count: usize, /// Number of account proof worker threads. account_worker_count: usize, - /// Whether to enable V2 storage proofs. - enable_proof_v2: bool, + /// Whether to disable V2 storage proofs. + disable_proof_v2: bool, /// Whether to disable cache metrics recording (can be expensive with large cached state). disable_cache_metrics: bool, } @@ -174,7 +179,7 @@ impl Default for TreeConfig { allow_unwind_canonical_header: false, storage_worker_count: default_storage_worker_count(), account_worker_count: default_account_worker_count(), - enable_proof_v2: false, + disable_proof_v2: false, disable_cache_metrics: false, } } @@ -206,7 +211,7 @@ impl TreeConfig { allow_unwind_canonical_header: bool, storage_worker_count: usize, account_worker_count: usize, - enable_proof_v2: bool, + disable_proof_v2: bool, disable_cache_metrics: bool, ) -> Self { Self { @@ -232,7 +237,7 @@ impl TreeConfig { allow_unwind_canonical_header, storage_worker_count, account_worker_count, - enable_proof_v2, + disable_proof_v2, disable_cache_metrics, } } @@ -272,6 +277,18 @@ impl TreeConfig { self.multiproof_chunk_size } + /// Return the multiproof task chunk size, using the V2 default if V2 proofs are enabled + /// and the chunk size is at the default value. + pub const fn effective_multiproof_chunk_size(&self) -> usize { + if !self.disable_proof_v2 && + self.multiproof_chunk_size == DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE + { + DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE_V2 + } else { + self.multiproof_chunk_size + } + } + /// Return the number of reserved CPU cores for non-reth processes pub const fn reserved_cpu_cores(&self) -> usize { self.reserved_cpu_cores @@ -502,14 +519,14 @@ impl TreeConfig { self } - /// Return whether V2 storage proofs are enabled. - pub const fn enable_proof_v2(&self) -> bool { - self.enable_proof_v2 + /// Return whether V2 storage proofs are disabled. + pub const fn disable_proof_v2(&self) -> bool { + self.disable_proof_v2 } - /// Setter for whether to enable V2 storage proofs. - pub const fn with_enable_proof_v2(mut self, enable_proof_v2: bool) -> Self { - self.enable_proof_v2 = enable_proof_v2; + /// Setter for whether to disable V2 storage proofs. + pub const fn with_disable_proof_v2(mut self, disable_proof_v2: bool) -> Self { + self.disable_proof_v2 = disable_proof_v2; self } diff --git a/crates/engine/tree/src/tree/payload_processor/mod.rs b/crates/engine/tree/src/tree/payload_processor/mod.rs index 5d5fac93ee..d856c3ba7b 100644 --- a/crates/engine/tree/src/tree/payload_processor/mod.rs +++ b/crates/engine/tree/src/tree/payload_processor/mod.rs @@ -238,7 +238,7 @@ where let (to_multi_proof, from_multi_proof) = crossbeam_channel::unbounded(); // Extract V2 proofs flag early so we can pass it to prewarm - let v2_proofs_enabled = config.enable_proof_v2(); + let v2_proofs_enabled = !config.disable_proof_v2(); // Handle BAL-based optimization if available let prewarm_handle = if let Some(bal) = bal { diff --git a/crates/node/core/src/args/engine.rs b/crates/node/core/src/args/engine.rs index 9c3864b367..75407b2773 100644 --- a/crates/node/core/src/args/engine.rs +++ b/crates/node/core/src/args/engine.rs @@ -35,7 +35,7 @@ pub struct DefaultEngineValues { allow_unwind_canonical_header: bool, storage_worker_count: Option, account_worker_count: Option, - enable_proof_v2: bool, + disable_proof_v2: bool, cache_metrics_disabled: bool, } @@ -161,9 +161,9 @@ impl DefaultEngineValues { self } - /// Set whether to enable proof V2 by default - pub const fn with_enable_proof_v2(mut self, v: bool) -> Self { - self.enable_proof_v2 = v; + /// Set whether to disable proof V2 by default + pub const fn with_disable_proof_v2(mut self, v: bool) -> Self { + self.disable_proof_v2 = v; self } @@ -195,7 +195,7 @@ impl Default for DefaultEngineValues { allow_unwind_canonical_header: false, storage_worker_count: None, account_worker_count: None, - enable_proof_v2: false, + disable_proof_v2: false, cache_metrics_disabled: false, } } @@ -317,9 +317,9 @@ pub struct EngineArgs { #[arg(long = "engine.account-worker-count", default_value = Resettable::from(DefaultEngineValues::get_global().account_worker_count.map(|v| v.to_string().into())))] pub account_worker_count: Option, - /// Enable V2 storage proofs for state root calculations - #[arg(long = "engine.enable-proof-v2", default_value_t = DefaultEngineValues::get_global().enable_proof_v2)] - pub enable_proof_v2: bool, + /// Disable V2 storage proofs for state root calculations + #[arg(long = "engine.disable-proof-v2", default_value_t = DefaultEngineValues::get_global().disable_proof_v2)] + pub disable_proof_v2: bool, /// Disable cache metrics recording, which can take up to 50ms with large cached state. #[arg(long = "engine.disable-cache-metrics", default_value_t = DefaultEngineValues::get_global().cache_metrics_disabled)] @@ -348,7 +348,7 @@ impl Default for EngineArgs { allow_unwind_canonical_header, storage_worker_count, account_worker_count, - enable_proof_v2, + disable_proof_v2, cache_metrics_disabled, } = DefaultEngineValues::get_global().clone(); Self { @@ -374,7 +374,7 @@ impl Default for EngineArgs { allow_unwind_canonical_header, storage_worker_count, account_worker_count, - enable_proof_v2, + disable_proof_v2, cache_metrics_disabled, } } @@ -410,7 +410,7 @@ impl EngineArgs { config = config.with_account_worker_count(count); } - config = config.with_enable_proof_v2(self.enable_proof_v2); + config = config.with_disable_proof_v2(self.disable_proof_v2); config = config.without_cache_metrics(self.cache_metrics_disabled); config @@ -462,7 +462,7 @@ mod tests { allow_unwind_canonical_header: true, storage_worker_count: Some(16), account_worker_count: Some(8), - enable_proof_v2: false, + disable_proof_v2: false, cache_metrics_disabled: true, }; diff --git a/docs/vocs/docs/pages/cli/op-reth/node.mdx b/docs/vocs/docs/pages/cli/op-reth/node.mdx index 3fe597815c..ad3c8eff2b 100644 --- a/docs/vocs/docs/pages/cli/op-reth/node.mdx +++ b/docs/vocs/docs/pages/cli/op-reth/node.mdx @@ -1001,8 +1001,8 @@ Engine: --engine.account-worker-count Configure the number of account proof workers in the Tokio blocking pool. If not specified, defaults to the same count as storage workers - --engine.enable-proof-v2 - Enable V2 storage proofs for state root calculations + --engine.disable-proof-v2 + Disable V2 storage proofs for state root calculations --engine.disable-cache-metrics Disable cache metrics recording, which can take up to 50ms with large cached state diff --git a/docs/vocs/docs/pages/cli/reth/node.mdx b/docs/vocs/docs/pages/cli/reth/node.mdx index 31896c640a..6105ff7f00 100644 --- a/docs/vocs/docs/pages/cli/reth/node.mdx +++ b/docs/vocs/docs/pages/cli/reth/node.mdx @@ -1001,8 +1001,8 @@ Engine: --engine.account-worker-count Configure the number of account proof workers in the Tokio blocking pool. If not specified, defaults to the same count as storage workers - --engine.enable-proof-v2 - Enable V2 storage proofs for state root calculations + --engine.disable-proof-v2 + Disable V2 storage proofs for state root calculations --engine.disable-cache-metrics Disable cache metrics recording, which can take up to 50ms with large cached state