1use clap::Parser;
20use sc_cli::SubstrateCli;
21use std::path::PathBuf;
22
23#[derive(Debug, Parser)]
25pub enum Subcommand {
26 #[command(name = "export-genesis-state")]
28 ExportGenesisState(ExportGenesisHeadCommand),
29
30 #[command(name = "export-genesis-wasm")]
32 ExportGenesisWasm(ExportGenesisWasmCommand),
33}
34
35#[derive(Debug, Parser)]
37pub struct ExportGenesisHeadCommand {
38 #[arg()]
40 pub output: Option<PathBuf>,
41
42 #[arg(long, default_value_t = 100)]
44 pub parachain_id: u32,
45
46 #[arg(long, default_value_t = 1024)]
48 pub pov_size: usize,
49
50 #[arg(long, default_value_t = 1)]
53 pub pvf_complexity: u32,
54}
55
56#[derive(Debug, Parser)]
58pub struct ExportGenesisWasmCommand {
59 #[arg()]
61 pub output: Option<PathBuf>,
62}
63
64#[derive(Debug, Parser, Clone, PartialEq, clap::ValueEnum)]
66pub enum MalusType {
67 None,
69 DuplicateCollations,
71}
72
73#[allow(missing_docs)]
74#[derive(Debug, Parser)]
75#[group(skip)]
76pub struct RunCmd {
77 #[allow(missing_docs)]
78 #[clap(flatten)]
79 pub base: sc_cli::RunCmd,
80
81 #[arg(long, default_value_t = 2000)]
83 pub parachain_id: u32,
84
85 #[arg(long, default_value_t = 1024)]
87 pub pov_size: usize,
88
89 #[arg(long, default_value_t = 1)]
92 pub pvf_complexity: u32,
93
94 #[arg(long, value_enum, default_value_t = MalusType::None)]
96 pub malus_type: MalusType,
97
98 #[arg(long)]
100 pub experimental_send_approved_peer: bool,
101}
102
103#[allow(missing_docs)]
104#[derive(Debug, Parser)]
105pub struct Cli {
106 #[command(subcommand)]
107 pub subcommand: Option<Subcommand>,
108
109 #[clap(flatten)]
110 pub run: RunCmd,
111}
112
113impl SubstrateCli for Cli {
114 fn impl_name() -> String {
115 "Parity Zombienet/Undying".into()
116 }
117
118 fn impl_version() -> String {
119 env!("CARGO_PKG_VERSION").into()
120 }
121
122 fn description() -> String {
123 env!("CARGO_PKG_DESCRIPTION").into()
124 }
125
126 fn author() -> String {
127 env!("CARGO_PKG_AUTHORS").into()
128 }
129
130 fn support_url() -> String {
131 "https://github.com/paritytech/polkadot-sdk/issues/new".into()
132 }
133
134 fn copyright_start_year() -> i32 {
135 2022
136 }
137
138 fn executable_name() -> String {
139 "undying-collator".into()
140 }
141
142 fn load_spec(&self, id: &str) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
143 let id = if id.is_empty() { "rococo" } else { id };
144 Ok(match id {
145 "rococo-staging" =>
146 Box::new(polkadot_service::chain_spec::rococo_staging_testnet_config()?),
147 "rococo-local" =>
148 Box::new(polkadot_service::chain_spec::rococo_local_testnet_config()?),
149 "rococo" => Box::new(polkadot_service::chain_spec::rococo_config()?),
150 path => {
151 let path = std::path::PathBuf::from(path);
152 Box::new(polkadot_service::RococoChainSpec::from_json_file(path)?)
153 },
154 })
155 }
156}