1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use clap::ArgMatches;
use sync::{create_sync_blocks_writer, Error};
use config::Config;
use util::init_db;

pub fn import(cfg: Config, matches: &ArgMatches) -> Result<(), String> {
	try!(init_db(&cfg));

	let blk_path = matches.value_of("PATH").expect("PATH is required in cli.yml; qed");

	let mut writer = create_sync_blocks_writer(cfg.db, cfg.consensus, cfg.verification_params);

	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(())
}