initial light CLI
This commit is contained in:
parent
a9d75e2223
commit
c718b5618e
@ -20,7 +20,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use ethcore::block_import_error::BlockImportError;
|
use ethcore::block_import_error::BlockImportError;
|
||||||
use ethcore::block_status::BlockStatus;
|
use ethcore::block_status::BlockStatus;
|
||||||
use ethcore::client::{ClientReport, EnvInfo, DatabaseCompactionProfile};
|
use ethcore::client::{ClientReport, EnvInfo};
|
||||||
use ethcore::engines::Engine;
|
use ethcore::engines::Engine;
|
||||||
use ethcore::ids::BlockId;
|
use ethcore::ids::BlockId;
|
||||||
use ethcore::header::Header;
|
use ethcore::header::Header;
|
||||||
@ -31,7 +31,8 @@ use ethcore::service::ClientIoMessage;
|
|||||||
use ethcore::encoded;
|
use ethcore::encoded;
|
||||||
use io::IoChannel;
|
use io::IoChannel;
|
||||||
|
|
||||||
use util::{H256, Mutex, RwLock, KeyValueDB};
|
use util::{H256, Mutex, RwLock};
|
||||||
|
use util::kvdb::{KeyValueDB, CompactionProfile};
|
||||||
|
|
||||||
use self::header_chain::{AncestryIter, HeaderChain};
|
use self::header_chain::{AncestryIter, HeaderChain};
|
||||||
|
|
||||||
@ -50,7 +51,7 @@ pub struct Config {
|
|||||||
/// Database cache size. `None` => rocksdb default.
|
/// Database cache size. `None` => rocksdb default.
|
||||||
pub db_cache_size: Option<usize>,
|
pub db_cache_size: Option<usize>,
|
||||||
/// State db compaction profile
|
/// State db compaction profile
|
||||||
pub db_compaction: DatabaseCompactionProfile,
|
pub db_compaction: CompactionProfile,
|
||||||
/// Should db have WAL enabled?
|
/// Should db have WAL enabled?
|
||||||
pub db_wal: bool,
|
pub db_wal: bool,
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ impl Service {
|
|||||||
db_config.set_cache(db::COL_LIGHT_CHAIN, size);
|
db_config.set_cache(db::COL_LIGHT_CHAIN, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
db_config.compaction = config.db_compaction.compaction_profile(path);
|
db_config.compaction = config.db_compaction;
|
||||||
db_config.wal = config.db_wal;
|
db_config.wal = config.db_wal;
|
||||||
|
|
||||||
let db = Arc::new(Database::open(
|
let db = Arc::new(Database::open(
|
||||||
|
@ -70,7 +70,8 @@ Operating Options:
|
|||||||
--light Experimental: run in light client mode. Light clients
|
--light Experimental: run in light client mode. Light clients
|
||||||
synchronize a bare minimum of data and fetch necessary
|
synchronize a bare minimum of data and fetch necessary
|
||||||
data on-demand from the network. Much lower in storage,
|
data on-demand from the network. Much lower in storage,
|
||||||
potentially higher in bandwidth. (default: {flag_light})
|
potentially higher in bandwidth. Has no effect with
|
||||||
|
subcommands (default: {flag_light})
|
||||||
|
|
||||||
Account Options:
|
Account Options:
|
||||||
--unlock ACCOUNTS Unlock ACCOUNTS for the duration of the execution.
|
--unlock ACCOUNTS Unlock ACCOUNTS for the duration of the execution.
|
||||||
|
@ -30,7 +30,7 @@ use ethcore::migrations::Extract;
|
|||||||
/// Database is assumed to be at default version, when no version file is found.
|
/// Database is assumed to be at default version, when no version file is found.
|
||||||
const DEFAULT_VERSION: u32 = 5;
|
const DEFAULT_VERSION: u32 = 5;
|
||||||
/// Current version of database models.
|
/// Current version of database models.
|
||||||
const CURRENT_VERSION: u32 = 11;
|
const CURRENT_VERSION: u32 = 12;
|
||||||
/// First version of the consolidated database.
|
/// First version of the consolidated database.
|
||||||
const CONSOLIDATION_VERSION: u32 = 9;
|
const CONSOLIDATION_VERSION: u32 = 9;
|
||||||
/// Defines how many items are migrated to the new version of database at once.
|
/// Defines how many items are migrated to the new version of database at once.
|
||||||
@ -147,6 +147,7 @@ fn consolidated_database_migrations(compaction_profile: &CompactionProfile) -> R
|
|||||||
let mut manager = MigrationManager::new(default_migration_settings(compaction_profile));
|
let mut manager = MigrationManager::new(default_migration_settings(compaction_profile));
|
||||||
manager.add_migration(migrations::ToV10::new()).map_err(|_| Error::MigrationImpossible)?;
|
manager.add_migration(migrations::ToV10::new()).map_err(|_| Error::MigrationImpossible)?;
|
||||||
manager.add_migration(migrations::TO_V11).map_err(|_| Error::MigrationImpossible)?;
|
manager.add_migration(migrations::TO_V11).map_err(|_| Error::MigrationImpossible)?;
|
||||||
|
manager.add_migration(migrations::TO_V12).map_err(|_| Error::MigrationImpossible)?;
|
||||||
Ok(manager)
|
Ok(manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,6 +154,89 @@ impl ::local_store::NodeInfo for FullNodeInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// helper for light execution.
|
||||||
|
fn execute_light(cmd: RunCmd, can_restart: bool, _logger: Arc<RotatingLogger>) -> Result<(bool, Option<String>), String> {
|
||||||
|
use light::client as light_client;
|
||||||
|
use ethsync::{LightSyncParams, LightSync, ManageNetwork};
|
||||||
|
use util::RwLock;
|
||||||
|
|
||||||
|
let panic_handler = PanicHandler::new_in_arc();
|
||||||
|
|
||||||
|
// load spec
|
||||||
|
let spec = cmd.spec.spec()?;
|
||||||
|
|
||||||
|
// load genesis hash
|
||||||
|
let genesis_hash = spec.genesis_header().hash();
|
||||||
|
|
||||||
|
// database paths
|
||||||
|
let db_dirs = cmd.dirs.database(genesis_hash, cmd.spec.legacy_fork_name(), spec.data_dir.clone());
|
||||||
|
|
||||||
|
// user defaults path
|
||||||
|
let user_defaults_path = db_dirs.user_defaults_path();
|
||||||
|
|
||||||
|
// load user defaults
|
||||||
|
let user_defaults = UserDefaults::load(&user_defaults_path)?;
|
||||||
|
|
||||||
|
// select pruning algorithm
|
||||||
|
let algorithm = cmd.pruning.to_algorithm(&user_defaults);
|
||||||
|
|
||||||
|
let compaction = cmd.compaction.compaction_profile(db_dirs.db_root_path().as_path());
|
||||||
|
|
||||||
|
// execute upgrades
|
||||||
|
execute_upgrades(&cmd.dirs.base, &db_dirs, algorithm, compaction.clone())?;
|
||||||
|
|
||||||
|
// create dirs used by parity
|
||||||
|
cmd.dirs.create_dirs(cmd.dapps_conf.enabled, cmd.signer_conf.enabled, cmd.secretstore_conf.enabled)?;
|
||||||
|
|
||||||
|
info!("Starting {}", Colour::White.bold().paint(version()));
|
||||||
|
info!("Running in experimental {} mode.", Colour::Blue.bold().paint("Light Client"));
|
||||||
|
|
||||||
|
// start client and create transaction queue.
|
||||||
|
let mut config = light_client::Config {
|
||||||
|
queue: Default::default(),
|
||||||
|
chain_column: ::ethcore::db::COL_LIGHT_CHAIN,
|
||||||
|
db_cache_size: Some(cmd.cache_config.blockchain() as usize * 1024 * 1024),
|
||||||
|
db_compaction: compaction,
|
||||||
|
db_wal: cmd.wal,
|
||||||
|
};
|
||||||
|
|
||||||
|
config.queue.max_mem_use = cmd.cache_config.queue() as usize * 1024 * 1024;
|
||||||
|
config.queue.verifier_settings = cmd.verifier_settings;
|
||||||
|
|
||||||
|
let service = light_client::Service::start(config, &spec, &db_dirs.client_path(algorithm))
|
||||||
|
.map_err(|e| format!("Error starting light client: {}", e))?;
|
||||||
|
let txq = Arc::new(RwLock::new(::light::transaction_queue::TransactionQueue::default()));
|
||||||
|
let provider = ::light::provider::LightProvider::new(service.client().clone(), txq);
|
||||||
|
|
||||||
|
// start network.
|
||||||
|
// set up bootnodes
|
||||||
|
let mut net_conf = cmd.net_conf;
|
||||||
|
if !cmd.custom_bootnodes {
|
||||||
|
net_conf.boot_nodes = spec.nodes.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
// set network path.
|
||||||
|
net_conf.net_config_path = Some(db_dirs.network_path().to_string_lossy().into_owned());
|
||||||
|
let sync_params = LightSyncParams {
|
||||||
|
network_config: net_conf.into_basic().map_err(|e| format!("Failed to produce network config: {}", e))?,
|
||||||
|
client: Arc::new(provider),
|
||||||
|
network_id: cmd.network_id.unwrap_or(spec.network_id()),
|
||||||
|
subprotocol_name: ::ethsync::LIGHT_PROTOCOL,
|
||||||
|
};
|
||||||
|
let light_sync = LightSync::new(sync_params).map_err(|e| format!("Error starting network: {}", e))?;
|
||||||
|
light_sync.start_network();
|
||||||
|
|
||||||
|
// start RPCs.
|
||||||
|
let passwords = passwords_from_files(&cmd.acc_conf.password_files)?;
|
||||||
|
|
||||||
|
// prepare account provider
|
||||||
|
let _account_provider = Arc::new(prepare_account_provider(&cmd.spec, &cmd.dirs, &spec.data_dir, cmd.acc_conf, &passwords)?);
|
||||||
|
// rest TODO
|
||||||
|
|
||||||
|
// wait for ctrl-c.
|
||||||
|
Ok(wait_for_exit(panic_handler, None, None, can_restart))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> Result<(bool, Option<String>), String> {
|
pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> Result<(bool, Option<String>), String> {
|
||||||
if cmd.ui && cmd.dapps_conf.enabled {
|
if cmd.ui && cmd.dapps_conf.enabled {
|
||||||
// Check if Parity is already running
|
// Check if Parity is already running
|
||||||
@ -163,12 +246,17 @@ pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> R
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set up panic handler
|
|
||||||
let panic_handler = PanicHandler::new_in_arc();
|
|
||||||
|
|
||||||
// increase max number of open files
|
// increase max number of open files
|
||||||
raise_fd_limit();
|
raise_fd_limit();
|
||||||
|
|
||||||
|
// run as light client.
|
||||||
|
if cmd.light {
|
||||||
|
return execute_light(cmd, can_restart, logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set up panic handler
|
||||||
|
let panic_handler = PanicHandler::new_in_arc();
|
||||||
|
|
||||||
// load spec
|
// load spec
|
||||||
let spec = cmd.spec.spec()?;
|
let spec = cmd.spec.spec()?;
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ pub const WARP_SYNC_PROTOCOL_ID: ProtocolId = *b"par";
|
|||||||
/// Ethereum sync protocol
|
/// Ethereum sync protocol
|
||||||
pub const ETH_PROTOCOL: ProtocolId = *b"eth";
|
pub const ETH_PROTOCOL: ProtocolId = *b"eth";
|
||||||
/// Ethereum light protocol
|
/// Ethereum light protocol
|
||||||
pub const LIGHT_PROTOCOL: ProtocolId = *b"plp";
|
pub const LIGHT_PROTOCOL: ProtocolId = *b"pip";
|
||||||
|
|
||||||
/// Sync configuration
|
/// Sync configuration
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
Loading…
Reference in New Issue
Block a user