From d4175ca6c60af5956754236ff3bd5374507221bc Mon Sep 17 00:00:00 2001 From: Joseph Mark Date: Wed, 12 Jul 2017 16:03:21 +0700 Subject: [PATCH] Add preset command to parity CLI Preset configs are loaded from bundled toml files and overridden by CLI options. --- parity/cli/mod.rs | 3 + parity/cli/presets/config.poa.toml | 145 +--------------------------- parity/cli/presets/config.pow.toml | 147 +---------------------------- parity/cli/presets/mod.rs | 23 +++++ parity/cli/usage.rs | 44 +++++---- parity/cli/usage.txt | 1 + 6 files changed, 60 insertions(+), 303 deletions(-) diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 009a6dc38..afd6f5a19 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -16,6 +16,7 @@ #[macro_use] mod usage; +mod presets; use dir; usage! { @@ -42,12 +43,14 @@ usage! { cmd_hash: bool, cmd_kill: bool, cmd_db: bool, + cmd_preset: bool, // Arguments arg_pid_file: String, arg_file: Option, arg_path: Vec, arg_id: Option, + arg_preset: String, // Flags // -- Legacy Options diff --git a/parity/cli/presets/config.poa.toml b/parity/cli/presets/config.poa.toml index 624c0ccdf..af245fdb0 100644 --- a/parity/cli/presets/config.poa.toml +++ b/parity/cli/presets/config.poa.toml @@ -1,146 +1,7 @@ [parity] -mode = "last" -mode_timeout = 300 -mode_alarm = 3600 -auto_update = "none" -release_track = "current" -public_node = false -no_download = false -no_consensus = false -no_persistent_txqueue = false - -chain = "homestead" -base_path = "$HOME/.parity" -db_path = "$HOME/.parity/chains" -keys_path = "$HOME/.parity/keys" -identity = "" -light = false - -[account] -unlock = ["0xdeadbeefcafe0000000000000000000000000000"] -password = ["~/.safe/password.file"] -keys_iterations = 10240 - -[ui] -force = false -disable = false -port = 8180 -interface = "127.0.0.1" -path = "$HOME/.parity/signer" - -[network] -port = 30303 -min_peers = 25 -max_peers = 50 -nat = "any" -id = 1 -bootnodes = [] -discovery = true -warp = true -allow_ips = "all" -snapshot_peers = 0 -max_pending_peers = 64 -no_serve_light = false - -reserved_only = false -reserved_peers = "./path_to_file" - -[rpc] -disable = false -port = 8545 -interface = "local" -cors = "null" -apis = ["web3", "eth", "net", "parity", "traces", "rpc", "secretstore"] -hosts = ["none"] - -[websockets] -disable = false -port = 8546 -interface = "local" -origins = ["none"] -apis = ["web3", "eth", "net", "parity", "traces", "rpc", "secretstore"] -hosts = ["none"] - -[ipc] -disable = false -path = "$HOME/.parity/jsonrpc.ipc" -apis = ["web3", "eth", "net", "parity", "parity_accounts", "personal", "traces", "rpc", "secretstore"] - -[dapps] -disable = false -port = 8080 -interface = "local" -hosts = ["none"] -path = "$HOME/.parity/dapps" -# authorization: -user = "test_user" -pass = "test_pass" - -[secretstore] -disable = false -nodes = [] -http_interface = "local" -http_port = 8082 -interface = "local" -port = 8083 -path = "$HOME/.parity/secretstore" - -[ipfs] -enable = false -port = 5001 -interface = "local" -cors = "null" -hosts = ["none"] +mode = "dark" +chain = "kovan" [mining] -author = "0xdeadbeefcafe0000000000000000000000000001" -engine_signer = "0xdeadbeefcafe0000000000000000000000000001" force_sealing = true -reseal_on_txs = "all" -reseal_min_period = 4000 -reseal_max_period = 60000 -work_queue_size = 20 -relay_set = "cheap" -usd_per_tx = "0.0025" -usd_per_eth = "auto" -price_update_period = "hourly" -gas_floor_target = "4700000" -gas_cap = "6283184" -tx_queue_size = 1024 -tx_queue_gas = "auto" -tx_queue_strategy = "gas_factor" -tx_queue_ban_count = 1 -tx_queue_ban_time = 180 #s -tx_gas_limit = "6283184" -tx_time_limit = 100 #ms -extra_data = "Parity" -remove_solved = false -notify_work = ["http://localhost:3001"] -refuse_service_transactions = false - -[footprint] -tracing = "auto" -pruning = "auto" -pruning_history = 64 -pruning_memory = 500 -cache_size_db = 64 -cache_size_blocks = 8 -cache_size_queue = 50 -cache_size_state = 25 -cache_size = 128 # Overrides above caches with total size -fast_and_loose = false -db_compaction = "ssd" -fat_db = "auto" -scale_verifiers = true -num_verifiers = 6 - -[snapshots] -disable_periodic = false - -[vm] -jit = false - -[misc] -logging = "own_tx=trace" -log_file = "/var/log/parity.log" -color = true +reseal_min_period = 2000 \ No newline at end of file diff --git a/parity/cli/presets/config.pow.toml b/parity/cli/presets/config.pow.toml index 624c0ccdf..a3001e727 100644 --- a/parity/cli/presets/config.pow.toml +++ b/parity/cli/presets/config.pow.toml @@ -1,146 +1,3 @@ [parity] -mode = "last" -mode_timeout = 300 -mode_alarm = 3600 -auto_update = "none" -release_track = "current" -public_node = false -no_download = false -no_consensus = false -no_persistent_txqueue = false - -chain = "homestead" -base_path = "$HOME/.parity" -db_path = "$HOME/.parity/chains" -keys_path = "$HOME/.parity/keys" -identity = "" -light = false - -[account] -unlock = ["0xdeadbeefcafe0000000000000000000000000000"] -password = ["~/.safe/password.file"] -keys_iterations = 10240 - -[ui] -force = false -disable = false -port = 8180 -interface = "127.0.0.1" -path = "$HOME/.parity/signer" - -[network] -port = 30303 -min_peers = 25 -max_peers = 50 -nat = "any" -id = 1 -bootnodes = [] -discovery = true -warp = true -allow_ips = "all" -snapshot_peers = 0 -max_pending_peers = 64 -no_serve_light = false - -reserved_only = false -reserved_peers = "./path_to_file" - -[rpc] -disable = false -port = 8545 -interface = "local" -cors = "null" -apis = ["web3", "eth", "net", "parity", "traces", "rpc", "secretstore"] -hosts = ["none"] - -[websockets] -disable = false -port = 8546 -interface = "local" -origins = ["none"] -apis = ["web3", "eth", "net", "parity", "traces", "rpc", "secretstore"] -hosts = ["none"] - -[ipc] -disable = false -path = "$HOME/.parity/jsonrpc.ipc" -apis = ["web3", "eth", "net", "parity", "parity_accounts", "personal", "traces", "rpc", "secretstore"] - -[dapps] -disable = false -port = 8080 -interface = "local" -hosts = ["none"] -path = "$HOME/.parity/dapps" -# authorization: -user = "test_user" -pass = "test_pass" - -[secretstore] -disable = false -nodes = [] -http_interface = "local" -http_port = 8082 -interface = "local" -port = 8083 -path = "$HOME/.parity/secretstore" - -[ipfs] -enable = false -port = 5001 -interface = "local" -cors = "null" -hosts = ["none"] - -[mining] -author = "0xdeadbeefcafe0000000000000000000000000001" -engine_signer = "0xdeadbeefcafe0000000000000000000000000001" -force_sealing = true -reseal_on_txs = "all" -reseal_min_period = 4000 -reseal_max_period = 60000 -work_queue_size = 20 -relay_set = "cheap" -usd_per_tx = "0.0025" -usd_per_eth = "auto" -price_update_period = "hourly" -gas_floor_target = "4700000" -gas_cap = "6283184" -tx_queue_size = 1024 -tx_queue_gas = "auto" -tx_queue_strategy = "gas_factor" -tx_queue_ban_count = 1 -tx_queue_ban_time = 180 #s -tx_gas_limit = "6283184" -tx_time_limit = 100 #ms -extra_data = "Parity" -remove_solved = false -notify_work = ["http://localhost:3001"] -refuse_service_transactions = false - -[footprint] -tracing = "auto" -pruning = "auto" -pruning_history = 64 -pruning_memory = 500 -cache_size_db = 64 -cache_size_blocks = 8 -cache_size_queue = 50 -cache_size_state = 25 -cache_size = 128 # Overrides above caches with total size -fast_and_loose = false -db_compaction = "ssd" -fat_db = "auto" -scale_verifiers = true -num_verifiers = 6 - -[snapshots] -disable_periodic = false - -[vm] -jit = false - -[misc] -logging = "own_tx=trace" -log_file = "/var/log/parity.log" -color = true +mode = "passive" +chain = "homestead" \ No newline at end of file diff --git a/parity/cli/presets/mod.rs b/parity/cli/presets/mod.rs index e69de29bb..c13bb788c 100644 --- a/parity/cli/presets/mod.rs +++ b/parity/cli/presets/mod.rs @@ -0,0 +1,23 @@ +// Copyright 2015-2017 Parity Technologies (UK) Ltd. +// This file is part of Parity. + +// Parity 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. + +// Parity 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 Parity. If not, see . + +pub fn preset_config_string(arg: &str) -> Result<&'static str, &str> { + match arg.to_lowercase().as_ref() { + "poa" => Ok(include_str!("./config.poa.toml")), + "pow" => Ok(include_str!("./config.pow.toml")), + _ => Err(arg.clone()) + } +} \ No newline at end of file diff --git a/parity/cli/usage.rs b/parity/cli/usage.rs index 26f697ed8..37ea209b8 100644 --- a/parity/cli/usage.rs +++ b/parity/cli/usage.rs @@ -61,6 +61,7 @@ macro_rules! usage { Docopt(DocoptError), Decode(toml::de::Error), Config(String, io::Error), + Preset(String), } impl ArgsError { @@ -77,6 +78,10 @@ macro_rules! usage { println_stderr!("{}", e); process::exit(2) }, + ArgsError::Preset(a) => { + println_stderr!("Invalid preset argument: {}", a); + process::exit(2) + } } } } @@ -149,22 +154,29 @@ macro_rules! usage { return Ok(raw_args.into_args(Config::default())); } - let config_file = raw_args.flag_config.clone().unwrap_or_else(|| raw_args.clone().into_args(Config::default()).flag_config); - let config_file = replace_home(&::dir::default_data_path(), &config_file); - let config = match (fs::File::open(&config_file), raw_args.flag_config.is_some()) { - // Load config file - (Ok(mut file), _) => { - println_stderr!("Loading config file from {}", &config_file); - let mut config = String::new(); - file.read_to_string(&mut config).map_err(|e| ArgsError::Config(config_file, e))?; - Self::parse_config(&config)? - }, - // Don't display error in case default config cannot be loaded. - (Err(_), false) => Config::default(), - // Config set from CLI (fail with error) - (Err(e), true) => { - return Err(ArgsError::Config(config_file, e)); - }, + let config = if raw_args.cmd_preset { + match presets::preset_config_string(&raw_args.arg_preset) { + Ok(s) => Self::parse_config(&s)?, + Err(e) => return Err(ArgsError::Preset(e.to_string())) + } + } else { + let config_file = raw_args.flag_config.clone().unwrap_or_else(|| raw_args.clone().into_args(Config::default()).flag_config); + let config_file = replace_home(&::dir::default_data_path(), &config_file); + match (fs::File::open(&config_file), raw_args.flag_config.is_some()) { + // Load config file + (Ok(mut file), _) => { + println_stderr!("Loading config file from {}", &config_file); + let mut config = String::new(); + file.read_to_string(&mut config).map_err(|e| ArgsError::Config(config_file, e))?; + Self::parse_config(&config)? + }, + // Don't display error in case default config cannot be loaded. + (Err(_), false) => Config::default(), + // Config set from CLI (fail with error) + (Err(e), true) => { + return Err(ArgsError::Config(config_file, e)); + }, + } }; Ok(raw_args.into_args(config)) diff --git a/parity/cli/usage.txt b/parity/cli/usage.txt index 5020f00ba..296fb8a27 100644 --- a/parity/cli/usage.txt +++ b/parity/cli/usage.txt @@ -20,6 +20,7 @@ Usage: parity restore [ ] [options] parity tools hash parity db kill [options] + parity preset [options] Operating Options: --mode MODE Set the operating mode. MODE can be one of: