// Copyright 2018-2020 Parity Technologies (UK) Ltd. // This file is part of Substrate. // Substrate 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. // Substrate 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 Substrate. If not, see . //! Substrate CLI library. //! //! This package has two Cargo features: //! //! - `cli` (default): exposes functions that parse command-line options, then start and run the //! node as a CLI application. //! //! - `browser`: exposes the content of the `browser` module, which consists of exported symbols //! that are meant to be passed through the `wasm-bindgen` utility and called from JavaScript. //! Despite its name the produced WASM can theoretically also be used from NodeJS, although this //! hasn't been tested. #![warn(missing_docs)] pub mod chain_spec; #[macro_use] mod service; #[cfg(feature = "browser")] mod browser; #[cfg(feature = "cli")] mod cli; #[cfg(feature = "cli")] mod factory_impl; #[cfg(feature = "cli")] mod command; #[cfg(feature = "browser")] pub use browser::*; #[cfg(feature = "cli")] pub use cli::*; #[cfg(feature = "cli")] pub use command::*; /// The chain specification option. #[derive(Clone, Debug, PartialEq)] pub enum ChainSpec { /// Whatever the current runtime is, with just Alice as an auth. Development, /// Whatever the current runtime is, with simple Alice/Bob auths. LocalTestnet, /// The Flaming Fir testnet. FlamingFir, /// Whatever the current runtime is with the "global testnet" defaults. StagingTestnet, } /// Get a chain config from a spec setting. impl ChainSpec { pub(crate) fn load(self) -> Result { Ok(match self { ChainSpec::FlamingFir => chain_spec::flaming_fir_config()?, ChainSpec::Development => chain_spec::development_config(), ChainSpec::LocalTestnet => chain_spec::local_testnet_config(), ChainSpec::StagingTestnet => chain_spec::staging_testnet_config(), }) } pub(crate) fn from(s: &str) -> Option { match s { "dev" => Some(ChainSpec::Development), "local" => Some(ChainSpec::LocalTestnet), "" | "fir" | "flaming-fir" => Some(ChainSpec::FlamingFir), "staging" => Some(ChainSpec::StagingTestnet), _ => None, } } } fn load_spec(id: &str) -> Result, String> { Ok(match ChainSpec::from(id) { Some(spec) => Box::new(spec.load()?), None => Box::new(chain_spec::ChainSpec::from_json_file(std::path::PathBuf::from(id))?), }) }