// Copyright (C) Parity Technologies (UK) Ltd. and Dijital Kurdistan Tech Institute
// This file is part of Pezcumulus.
// Pezcumulus is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Pezcumulus is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Pezcumulus. If not, see .
use clap::ValueEnum;
use pezcumulus_client_cli::{ExportGenesisHeadCommand, ExportGenesisWasmCommand};
use pezkuwi_service::{ChainSpec, ParaId, PrometheusConfig};
use pezsc_cli::{
BizinikiwiCli, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams,
NetworkParams, Result as CliResult, RpcEndpoint, SharedParams,
};
use pezsc_service::BasePath;
use std::{
fmt::{Display, Formatter},
path::PathBuf,
};
#[derive(Debug, clap::Parser)]
#[command(
version,
propagate_version = true,
args_conflicts_with_subcommands = true,
subcommand_negates_reqs = true
)]
pub struct TestCollatorCli {
#[command(subcommand)]
pub subcommand: Option,
#[command(flatten)]
pub run: pezcumulus_client_cli::RunCmd,
/// Relay chain arguments
#[arg(raw = true)]
pub relaychain_args: Vec,
#[arg(long)]
pub disable_block_announcements: bool,
#[arg(long)]
pub fail_pov_recovery: bool,
/// Authoring style to use.
#[arg(long, default_value_t = AuthoringPolicy::Lookahead)]
pub authoring: AuthoringPolicy,
}
/// Collator implementation to use.
#[derive(PartialEq, Debug, ValueEnum, Clone, Copy)]
pub enum AuthoringPolicy {
/// Use the lookahead collator. Builds blocks once per relay chain block,
/// builds on relay chain forks.
Lookahead,
/// Use the slot-based collator which can handle elastic-scaling. Builds blocks based on time
/// and can utilize multiple cores, always builds on the best relay chain block available.
SlotBased,
}
impl Display for AuthoringPolicy {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
AuthoringPolicy::Lookahead => write!(f, "lookahead"),
AuthoringPolicy::SlotBased => write!(f, "slot-based"),
}
}
}
#[derive(Debug, clap::Subcommand)]
pub enum Subcommand {
/// Build a chain specification.
/// DEPRECATED: `build-spec` command will be removed after 1/04/2026. Use `export-chain-spec`
/// command instead.
#[deprecated(
note = "build-spec command will be removed after 1/04/2026. Use export-chain-spec command instead"
)]
BuildSpec(pezsc_cli::BuildSpecCmd),
/// Export the chain specification.
ExportChainSpec(pezsc_cli::ExportChainSpecCmd),
/// Export the genesis state of the teyrchain.
#[command(alias = "export-genesis-state")]
ExportGenesisHead(ExportGenesisHeadCommand),
/// Export the genesis wasm of the teyrchain.
ExportGenesisWasm(ExportGenesisWasmCommand),
}
#[derive(Debug)]
pub struct RelayChainCli {
/// The actual relay chain cli object.
pub base: pezkuwi_cli::RunCmd,
/// Optional chain id that should be passed to the relay chain.
pub chain_id: Option,
/// The base path that should be used by the relay chain.
pub base_path: Option,
}
impl RelayChainCli {
/// Parse the relay chain CLI parameters using the para chain `Configuration`.
pub fn new<'a>(
para_config: &pezsc_service::Configuration,
relay_chain_args: impl Iterator,
) -> Self {
let base_path = para_config.base_path.path().join("pezkuwi");
Self {
base_path: Some(base_path),
chain_id: None,
base: clap::Parser::parse_from(relay_chain_args),
}
}
}
impl CliConfiguration for RelayChainCli {
fn shared_params(&self) -> &SharedParams {
self.base.base.shared_params()
}
fn import_params(&self) -> Option<&ImportParams> {
self.base.base.import_params()
}
fn network_params(&self) -> Option<&NetworkParams> {
self.base.base.network_params()
}
fn keystore_params(&self) -> Option<&KeystoreParams> {
self.base.base.keystore_params()
}
fn base_path(&self) -> CliResult