git.delta.rocks / unique-network / refs/commits / 011ebf22fd46

difftreelog

source

node/cli/src/cli.rs5.1 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use crate::chain_spec;18use std::{path::PathBuf, env};19use clap::Parser;2021const NODE_NAME_ENV: &str = "UNIQUE_NODE_NAME";2223/// Sub-commands supported by the collator.24#[derive(Debug, Parser)]25pub enum Subcommand {26	/// Export the genesis state of the parachain.27	#[clap(name = "export-genesis-state")]28	ExportGenesisState(ExportGenesisStateCommand),2930	/// Export the genesis wasm of the parachain.31	#[clap(name = "export-genesis-wasm")]32	ExportGenesisWasm(ExportGenesisWasmCommand),3334	/// Build a chain specification.35	BuildSpec(sc_cli::BuildSpecCmd),3637	/// Validate blocks.38	CheckBlock(sc_cli::CheckBlockCmd),3940	/// Export blocks.41	ExportBlocks(sc_cli::ExportBlocksCmd),4243	/// Export the state of a given block into a chain spec.44	ExportState(sc_cli::ExportStateCmd),4546	/// Import blocks.47	ImportBlocks(sc_cli::ImportBlocksCmd),4849	/// Remove the whole chain.50	PurgeChain(cumulus_client_cli::PurgeChainCmd),5152	/// Revert the chain to a previous state.53	Revert(sc_cli::RevertCmd),5455	/// The custom benchmark subcommmand benchmarking runtime pallets.56	#[clap(subcommand)]57	Benchmark(frame_benchmarking_cli::BenchmarkCmd),5859	/// Try runtime60	TryRuntime(try_runtime_cli::TryRuntimeCmd),61}6263/// Command for exporting the genesis state of the parachain64#[derive(Debug, Parser)]65pub struct ExportGenesisStateCommand {66	/// Output file name or stdout if unspecified.67	#[clap(parse(from_os_str))]68	pub output: Option<PathBuf>,6970	/// Id of the parachain this state is for.71	///72	/// Default: 10073	#[clap(long, conflicts_with = "chain")]74	pub parachain_id: Option<u32>,7576	/// Write output in binary. Default is to write in hex.77	#[clap(short, long)]78	pub raw: bool,7980	/// The name of the chain for that the genesis state should be exported.81	#[clap(long, conflicts_with = "parachain-id")]82	pub chain: Option<String>,83}8485/// Command for exporting the genesis wasm file.86#[derive(Debug, Parser)]87pub struct ExportGenesisWasmCommand {88	/// Output file name or stdout if unspecified.89	#[clap(parse(from_os_str))]90	pub output: Option<PathBuf>,9192	/// Write output in binary. Default is to write in hex.93	#[clap(short, long)]94	pub raw: bool,9596	/// The name of the chain for that the genesis wasm file should be exported.97	#[clap(long)]98	pub chain: Option<String>,99}100101#[derive(Debug, Parser)]102#[clap(args_conflicts_with_subcommands = true, subcommand_negates_reqs = true)]103pub struct Cli {104	#[structopt(subcommand)]105	pub subcommand: Option<Subcommand>,106107	#[structopt(flatten)]108	pub run: cumulus_client_cli::RunCmd,109110	/// When running the node in the `--dev` mode and111	/// there is no transaction in the transaction pool,112	/// an empty block will be sealed automatically113	/// after the `--idle-autoseal-interval` milliseconds.114	///115	/// The default interval is 500 milliseconds116	#[structopt(default_value = "500", long)]117	pub idle_autoseal_interval: u64,118119	/// Disable automatic hardware benchmarks.120	///121	/// By default these benchmarks are automatically ran at startup and measure122	/// the CPU speed, the memory bandwidth and the disk speed.123	///124	/// The results are then printed out in the logs, and also sent as part of125	/// telemetry, if telemetry is enabled.126	#[clap(long)]127	pub no_hardware_benchmarks: bool,128129	/// Relaychain arguments130	#[structopt(raw = true)]131	pub relaychain_args: Vec<String>,132}133134impl Cli {135	pub fn node_name() -> String {136		match env::var(NODE_NAME_ENV).ok() {137			Some(name) => name,138			None => {139				if cfg!(feature = "unique-runtime") {140					"Unique"141				} else if cfg!(feature = "quartz-runtime") {142					"Quartz"143				} else {144					"Opal"145				}146			}147			.into(),148		}149	}150}151152#[derive(Debug)]153pub struct RelayChainCli {154	/// The actual relay chain cli object.155	pub base: polkadot_cli::RunCmd,156157	/// Optional chain id that should be passed to the relay chain.158	pub chain_id: Option<String>,159160	/// The base path that should be used by the relay chain.161	pub base_path: Option<PathBuf>,162}163164impl RelayChainCli {165	/// Parse the relay chain CLI parameters using the para chain `Configuration`.166	pub fn new<'a>(167		para_config: &sc_service::Configuration,168		relay_chain_args: impl Iterator<Item = &'a String>,169	) -> Self {170		let extension = chain_spec::Extensions::try_get(&*para_config.chain_spec);171		let chain_id = extension.map(|e| e.relay_chain.clone());172		let base_path = para_config173			.base_path174			.as_ref()175			.map(|x| x.path().join("polkadot"));176		Self {177			base_path,178			chain_id,179			base: polkadot_cli::RunCmd::parse_from(relay_chain_args),180		}181	}182}