mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
66 lines
2.0 KiB
Rust
66 lines
2.0 KiB
Rust
use crate::{
|
|
args::{utils::genesis_value_parser, DatabaseArgs},
|
|
dirs::{DataDirPath, MaybePlatformPath},
|
|
init::init_genesis,
|
|
};
|
|
use clap::Parser;
|
|
use reth_db::init_db;
|
|
use reth_primitives::ChainSpec;
|
|
use std::sync::Arc;
|
|
use tracing::info;
|
|
|
|
/// Initializes the database with the genesis block.
|
|
#[derive(Debug, Parser)]
|
|
pub struct InitCommand {
|
|
/// The path to the data dir for all reth files and subdirectories.
|
|
///
|
|
/// Defaults to the OS-specific data directory:
|
|
///
|
|
/// - Linux: `$XDG_DATA_HOME/reth/` or `$HOME/.local/share/reth/`
|
|
/// - Windows: `{FOLDERID_RoamingAppData}/reth/`
|
|
/// - macOS: `$HOME/Library/Application Support/reth/`
|
|
#[arg(long, value_name = "DATA_DIR", verbatim_doc_comment, default_value_t)]
|
|
datadir: MaybePlatformPath<DataDirPath>,
|
|
|
|
/// The chain this node is running.
|
|
///
|
|
/// Possible values are either a built-in chain or the path to a chain specification file.
|
|
///
|
|
/// Built-in chains:
|
|
/// - mainnet
|
|
/// - goerli
|
|
/// - sepolia
|
|
/// - holesky
|
|
#[arg(
|
|
long,
|
|
value_name = "CHAIN_OR_PATH",
|
|
verbatim_doc_comment,
|
|
default_value = "mainnet",
|
|
value_parser = genesis_value_parser
|
|
)]
|
|
chain: Arc<ChainSpec>,
|
|
|
|
#[clap(flatten)]
|
|
db: DatabaseArgs,
|
|
}
|
|
|
|
impl InitCommand {
|
|
/// Execute the `init` command
|
|
pub async fn execute(self) -> eyre::Result<()> {
|
|
info!(target: "reth::cli", "reth init starting");
|
|
|
|
// add network name to data dir
|
|
let data_dir = self.datadir.unwrap_or_chain_default(self.chain.chain);
|
|
let db_path = data_dir.db_path();
|
|
info!(target: "reth::cli", path = ?db_path, "Opening database");
|
|
let db = Arc::new(init_db(&db_path, self.db.log_level)?);
|
|
info!(target: "reth::cli", "Database opened");
|
|
|
|
info!(target: "reth::cli", "Writing genesis block");
|
|
let hash = init_genesis(db, self.chain)?;
|
|
|
|
info!(target: "reth::cli", hash = ?hash, "Genesis block written");
|
|
Ok(())
|
|
}
|
|
}
|