2016-11-03 09:19:35 -07:00
|
|
|
use clap::ArgMatches;
|
|
|
|
use sync::{create_sync_blocks_writer, Error};
|
|
|
|
use config::Config;
|
|
|
|
use util::{open_db, init_db};
|
|
|
|
|
|
|
|
pub fn import(cfg: Config, matches: &ArgMatches) -> Result<(), String> {
|
2016-11-07 01:15:15 -08:00
|
|
|
let db = open_db(&cfg);
|
2016-11-03 09:19:35 -07:00
|
|
|
// TODO: this might be unnecessary here!
|
2016-11-07 02:20:27 -08:00
|
|
|
try!(init_db(&cfg, &db));
|
2016-11-03 09:19:35 -07:00
|
|
|
|
|
|
|
let blk_path = matches.value_of("PATH").expect("PATH is required in cli.yml; qed");
|
2016-12-13 11:49:41 -08:00
|
|
|
let skip_verification = matches.is_present("skip-verification");
|
|
|
|
|
2017-08-07 23:52:54 -07:00
|
|
|
let mut writer = create_sync_blocks_writer(db, cfg.consensus, !skip_verification);
|
2016-12-13 11:49:41 -08:00
|
|
|
|
2016-11-03 09:19:35 -07:00
|
|
|
let blk_dir = try!(::import::open_blk_dir(blk_path).map_err(|_| "Import directory does not exist".to_owned()));
|
|
|
|
let mut counter = 0;
|
|
|
|
for blk in blk_dir {
|
|
|
|
// TODO: verify magic!
|
|
|
|
let blk = try!(blk.map_err(|_| "Cannot read block".to_owned()));
|
|
|
|
match writer.append_block(blk.block) {
|
|
|
|
Ok(_) => {
|
|
|
|
counter += 1;
|
|
|
|
if counter % 1000 == 0 {
|
2016-12-13 11:49:41 -08:00
|
|
|
info!(target: "sync", "Imported {} blocks", counter);
|
2016-11-03 09:19:35 -07:00
|
|
|
}
|
|
|
|
}
|
2016-11-30 01:16:29 -08:00
|
|
|
Err(Error::TooManyOrphanBlocks) => return Err("Too many orphan (unordered) blocks".into()),
|
2016-11-08 02:51:34 -08:00
|
|
|
Err(_) => return Err("Cannot append block".into()),
|
2016-11-03 09:19:35 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-11-30 01:16:29 -08:00
|
|
|
info!("Finished import of {} blocks", counter);
|
2016-11-03 09:19:35 -07:00
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|