use crate::{CKBAppConfig, MemoryTrackerConfig, MinerConfig};
use ckb_chain_spec::consensus::Consensus;
use ckb_jsonrpc_types::{Either, ScriptHashType};
use ckb_pow::PowEngine;
use ckb_systemtime::unix_time_as_millis;
use ckb_types::packed::Byte32;
use ckb_verification_traits::Switch;
use std::path::PathBuf;
use std::sync::Arc;
pub enum ExportTarget {
Path(PathBuf),
Stdout,
}
pub struct ExportArgs {
pub config: Box<CKBAppConfig>,
pub consensus: Consensus,
pub target: ExportTarget,
pub from: Option<Either<u64, String>>,
pub to: Option<Either<u64, String>>,
}
#[derive(Debug)]
pub struct DaemonArgs {
pub check: bool,
pub stop: bool,
pub pid_file: PathBuf,
}
pub enum ImportSource {
Path(PathBuf),
Stdin,
}
pub struct ImportArgs {
pub config: Box<CKBAppConfig>,
pub consensus: Consensus,
pub source: ImportSource,
pub switch: Switch,
pub num_threads: usize,
}
pub struct RunArgs {
pub config: Box<CKBAppConfig>,
pub consensus: Consensus,
pub block_assembler_advanced: bool,
pub skip_chain_spec_check: bool,
pub overwrite_chain_spec: bool,
pub chain_spec_hash: Byte32,
pub indexer: bool,
pub rich_indexer: bool,
#[cfg(not(target_os = "windows"))]
pub daemon: bool,
}
pub type ProfileArgs = Option<(Option<u64>, Option<u64>)>;
pub struct ReplayArgs {
pub config: Box<CKBAppConfig>,
pub consensus: Consensus,
pub tmp_target: PathBuf,
pub profile: ProfileArgs,
pub sanity_check: bool,
pub full_verification: bool,
}
pub struct MinerArgs {
pub config: MinerConfig,
pub pow_engine: Arc<dyn PowEngine>,
pub memory_tracker: MemoryTrackerConfig,
pub limit: u128,
}
pub struct StatsArgs {
pub config: Box<CKBAppConfig>,
pub consensus: Consensus,
pub from: Option<u64>,
pub to: Option<u64>,
}
pub struct InitArgs {
pub interactive: bool,
pub root_dir: PathBuf,
pub chain: String,
pub rpc_port: String,
pub p2p_port: String,
pub log_to_file: bool,
pub log_to_stdout: bool,
pub list_chains: bool,
pub force: bool,
pub block_assembler_code_hash: Option<String>,
pub block_assembler_args: Vec<String>,
pub block_assembler_hash_type: ScriptHashType,
pub block_assembler_message: Option<String>,
pub import_spec: Option<String>,
pub customize_spec: CustomizeSpec,
}
pub struct CustomizeSpec {
pub genesis_message: Option<String>,
}
pub struct ResetDataArgs {
pub force: bool,
pub all: bool,
pub database: bool,
pub indexer: bool,
pub rich_indexer: bool,
pub network: bool,
pub network_peer_store: bool,
pub network_secret_key: bool,
pub logs: bool,
pub data_dir: PathBuf,
pub db_path: PathBuf,
pub indexer_path: PathBuf,
pub rich_indexer_path: PathBuf,
pub network_dir: PathBuf,
pub network_peer_store_path: PathBuf,
pub network_secret_key_path: PathBuf,
pub logs_dir: Option<PathBuf>,
}
pub struct PeerIDArgs {
pub peer_id: secio::PeerId,
}
pub struct MigrateArgs {
pub config: Box<CKBAppConfig>,
pub consensus: Consensus,
pub check: bool,
pub force: bool,
pub include_background: bool,
}
impl CustomizeSpec {
pub fn is_unset(&self) -> bool {
self.genesis_message.is_none()
}
pub fn key_value_pairs(&self) -> Vec<(&'static str, String)> {
let mut vec = Vec::new();
let genesis_message = self
.genesis_message
.clone()
.unwrap_or_else(|| unix_time_as_millis().to_string());
vec.push(("genesis_message", genesis_message));
vec
}
}