snarkos_cli/commands/
clean.rs1use snarkos_node::bft::helpers::proposal_cache_path;
17use snarkvm::console::network::{CanaryV0, MainnetV0, Network};
18
19use aleo_std::StorageMode;
20use anyhow::{Result, bail};
21use clap::Parser;
22use colored::Colorize;
23use std::path::PathBuf;
24
25#[derive(Debug, Parser)]
27pub struct Clean {
28 #[clap(default_value_t=MainnetV0::ID, long = "network", value_parser = clap::value_parser!(u16).range((MainnetV0::ID as i64)..=(CanaryV0::ID as i64)))]
30 pub network: u16,
31 #[clap(long)]
33 pub dev: Option<u16>,
34 #[clap(long = "path")]
37 pub path: Option<PathBuf>,
38}
39
40impl Clean {
41 pub fn parse(self) -> Result<String> {
43 let storage_mode = match self.path {
45 Some(path) => StorageMode::Custom(path),
46 None => match self.dev {
47 Some(id) => StorageMode::Development(id),
48 None => StorageMode::Production,
49 },
50 };
51
52 let proposal_cache_path = proposal_cache_path(self.network, &storage_mode);
54 if proposal_cache_path.exists() {
55 if let Err(err) = std::fs::remove_file(&proposal_cache_path) {
56 bail!("Failed to remove the current proposal cache file at {}: {err}", proposal_cache_path.display());
57 }
58 }
59 Self::remove_ledger(self.network, &storage_mode)
61 }
62
63 pub(crate) fn remove_ledger(network: u16, mode: &StorageMode) -> Result<String> {
65 let path = aleo_std::aleo_ledger_dir(network, mode);
67
68 let path_string = format!("(in \"{}\")", path.display()).dimmed();
70
71 if path.exists() {
73 match std::fs::remove_dir_all(&path) {
75 Ok(_) => Ok(format!("✅ Cleaned the snarkOS node storage {path_string}")),
76 Err(error) => {
77 bail!("Failed to remove the snarkOS node storage {path_string}\n{}", error.to_string().dimmed())
78 }
79 }
80 } else {
81 Ok(format!("✅ No snarkOS node storage was found {path_string}"))
82 }
83 }
84}