diff --git a/bin/node/src/aleph_cli.rs b/bin/node/src/aleph_cli.rs index 02f71132bc..76d3a0539b 100644 --- a/bin/node/src/aleph_cli.rs +++ b/bin/node/src/aleph_cli.rs @@ -40,6 +40,12 @@ pub struct AlephCli { /// BEHAVIOUR AND PUNISHED ACCORDINGLY! #[clap(long, default_value_t = 20)] max_nonfinalized_blocks: u32, + + /// Experimental flag, allows pruning + /// + /// TURNING THIS FLAG ON, CAN LEAD TO MALICIOUS BEHAVIOUR AND CAN BE PUNISHED ACCORDINGLY! + #[clap(long, default_value_t = false)] + experimental_pruning: bool, } impl AlephCli { @@ -69,4 +75,8 @@ impl AlephCli { } self.max_nonfinalized_blocks } + + pub fn experimental_pruning(&self) -> bool { + self.experimental_pruning + } } diff --git a/bin/node/src/main.rs b/bin/node/src/main.rs index d9758ac8b3..a8d550a40a 100644 --- a/bin/node/src/main.rs +++ b/bin/node/src/main.rs @@ -10,18 +10,21 @@ use sc_service::PartialComponents; fn main() -> sc_cli::Result<()> { let mut cli = Cli::parse(); - - if cli - .run - .import_params - .pruning_params - .blocks_pruning - .is_some() - || cli.run.import_params.pruning_params.state_pruning != Some("archive".into()) - { - warn!("Pruning not supported. Switching to keeping all block bodies and states."); - cli.run.import_params.pruning_params.blocks_pruning = None; - cli.run.import_params.pruning_params.state_pruning = Some("archive".into()); + if !cli.aleph.experimental_pruning() { + if cli + .run + .import_params + .pruning_params + .blocks_pruning + .is_some() + || cli.run.import_params.pruning_params.state_pruning != Some("archive".into()) + { + warn!("Pruning not supported. Switching to keeping all block bodies and states."); + cli.run.import_params.pruning_params.blocks_pruning = None; + cli.run.import_params.pruning_params.state_pruning = Some("archive".into()); + } + } else { + warn!("Pruning not supported, but flag experimental_pruning was turned on. Usage of this flag can lead to misbehaviour, which can be punished."); } match &cli.subcommand {