93 lines
2.7 KiB
Rust
93 lines
2.7 KiB
Rust
//! Configuration for semantic verification which is run in parallel.
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
/// Configuration for parallel semantic verification:
|
|
/// <https://zebra.zfnd.org/dev/rfcs/0002-parallel-verification.html#definitions>
|
|
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
|
|
#[serde(
|
|
deny_unknown_fields,
|
|
default,
|
|
from = "InnerConfig",
|
|
into = "InnerConfig"
|
|
)]
|
|
pub struct Config {
|
|
/// Should Zebra make sure that it follows the consensus chain while syncing?
|
|
/// This is a developer-only option.
|
|
///
|
|
/// # Security
|
|
///
|
|
/// Disabling this option leaves your node vulnerable to some kinds of chain-based attacks.
|
|
/// Zebra regularly updates its checkpoints to ensure nodes are following the best chain.
|
|
///
|
|
/// # Details
|
|
///
|
|
/// This option is `true` by default, because it prevents some kinds of chain attacks.
|
|
///
|
|
/// Disabling this option makes Zebra start full validation earlier.
|
|
/// It is slower and less secure.
|
|
///
|
|
/// Zebra requires some checkpoints to simplify validation of legacy network upgrades.
|
|
/// Required checkpoints are always active, even when this option is `false`.
|
|
///
|
|
/// # Deprecation
|
|
///
|
|
/// For security reasons, this option might be deprecated or ignored in a future Zebra
|
|
/// release.
|
|
pub checkpoint_sync: bool,
|
|
}
|
|
|
|
impl From<InnerConfig> for Config {
|
|
fn from(
|
|
InnerConfig {
|
|
checkpoint_sync, ..
|
|
}: InnerConfig,
|
|
) -> Self {
|
|
Self { checkpoint_sync }
|
|
}
|
|
}
|
|
|
|
impl From<Config> for InnerConfig {
|
|
fn from(Config { checkpoint_sync }: Config) -> Self {
|
|
Self {
|
|
checkpoint_sync,
|
|
_debug_skip_parameter_preload: false,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Inner consensus configuration for backwards compatibility with older `zebrad.toml` files,
|
|
/// which contain fields that have been removed.
|
|
///
|
|
/// Rust API callers should use [`Config`].
|
|
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
|
|
#[serde(deny_unknown_fields, default)]
|
|
pub struct InnerConfig {
|
|
/// See [`Config`] for more details.
|
|
pub checkpoint_sync: bool,
|
|
|
|
#[serde(skip_serializing, rename = "debug_skip_parameter_preload")]
|
|
/// Unused config field for backwards compatibility.
|
|
pub _debug_skip_parameter_preload: bool,
|
|
}
|
|
|
|
// we like our default configs to be explicit
|
|
#[allow(unknown_lints)]
|
|
#[allow(clippy::derivable_impls)]
|
|
impl Default for Config {
|
|
fn default() -> Self {
|
|
Self {
|
|
checkpoint_sync: true,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Default for InnerConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
checkpoint_sync: Config::default().checkpoint_sync,
|
|
_debug_skip_parameter_preload: false,
|
|
}
|
|
}
|
|
}
|