parity-zcash/pbtc/commands/import.rs

37 lines
1.1 KiB
Rust

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> {
let db = open_db(&cfg);
// TODO: this might be unnecessary here!
try!(init_db(&cfg, &db));
let blk_path = matches.value_of("PATH").expect("PATH is required in cli.yml; qed");
let skip_verification = matches.is_present("skip-verification");
let mut writer = create_sync_blocks_writer(db, cfg.magic, !skip_verification);
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 {
info!(target: "sync", "Imported {} blocks", counter);
}
}
Err(Error::TooManyOrphanBlocks) => return Err("Too many orphan (unordered) blocks".into()),
Err(_) => return Err("Cannot append block".into()),
}
}
info!("Finished import of {} blocks", counter);
Ok(())
}