Skip to content
Snippets Groups Projects
Select Git revision
  • master
1 result

index.html

Blame
  • cli.rs 3.14 KiB
    // Copyright 2021 Axiom-Team
    //
    // This file is part of Substrate-Libre-Currency.
    //
    // Substrate-Libre-Currency is free software: you can redistribute it and/or modify
    // it under the terms of the GNU Affero General Public License as published by
    // the Free Software Foundation, version 3 of the License.
    //
    // Substrate-Libre-Currency 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 Affero General Public License for more details.
    //
    // You should have received a copy of the GNU Affero General Public License
    // along with Substrate-Libre-Currency. If not, see <https://www.gnu.org/licenses/>.
    
    pub mod key;
    pub mod utils;
    
    use sc_cli::RunCmd;
    use std::str::FromStr;
    use structopt::StructOpt;
    
    #[derive(Debug, StructOpt)]
    pub struct Cli {
        #[structopt(subcommand)]
        pub subcommand: Option<Subcommand>,
    
        #[structopt(flatten)]
        pub run: RunCmd,
    
        /// How blocks should be sealed
        ///
        /// Options are "production", "instant", "manual", or timer interval in milliseconds
        #[structopt(long, default_value = "production")]
        pub sealing: Sealing,
    }
    
    #[derive(Debug, StructOpt)]
    pub enum Subcommand {
        /// Key management cli utilities
        Key(key::KeySubcommand),
        /// Build a chain specification.
        BuildSpec(sc_cli::BuildSpecCmd),
    
        /// Validate blocks.
        CheckBlock(sc_cli::CheckBlockCmd),
    
        /// Export blocks.
        ExportBlocks(sc_cli::ExportBlocksCmd),
    
        /// Export the state of a given block into a chain spec.
        ExportState(sc_cli::ExportStateCmd),
    
        /// Import blocks.
        ImportBlocks(sc_cli::ImportBlocksCmd),
    
        /// Remove the whole chain.
        PurgeChain(sc_cli::PurgeChainCmd),
    
        /// Revert the chain to a previous state.
        Revert(sc_cli::RevertCmd),
    
        /// Some tools for developers and advanced testers
        Utils(utils::UtilsSubCommand),
    
        /// The custom benchmark subcommmand benchmarking runtime pallets.
        #[structopt(name = "benchmark", about = "Benchmark runtime pallets.")]
        Benchmark(frame_benchmarking_cli::BenchmarkCmd),
    }
    
    /// Block authoring scheme to be used by the node
    #[derive(Clone, Copy, Debug, PartialEq, Eq)]
    pub enum Sealing {
        /// Author a block using normal runtime behavior (mandatory for production networks)
        Production,
        /// Author a block immediately upon receiving a transaction into the transaction pool
        Instant,
        /// Author a block upon receiving an RPC command
        Manual,
        /// Author blocks at a regular interval specified in milliseconds
        Interval(u64),
    }
    
    impl Sealing {
        pub fn is_manual_consensus(self) -> bool {
            self != Self::Production
        }
    }
    
    impl FromStr for Sealing {
        type Err = String;
    
        fn from_str(s: &str) -> Result<Self, Self::Err> {
            Ok(match s {
                "production" => Self::Production,
                "instant" => Self::Instant,
                "manual" => Self::Manual,
                s => {
                    let millis = s
                        .parse::<u64>()
                        .map_err(|_| "couldn't decode sealing param")?;
                    Self::Interval(millis)
                }
            })
        }
    }