diff --git a/src/blockchain_converter/blockchain_import.cpp b/src/blockchain_converter/blockchain_import.cpp index 41e92957..6777cc8f 100644 --- a/src/blockchain_converter/blockchain_import.cpp +++ b/src/blockchain_converter/blockchain_import.cpp @@ -169,7 +169,7 @@ int pop_blocks(FakeCore& simple_core, int num_blocks) } template -int import_from_file(FakeCore& simple_core, std::string& import_file_path) +int import_from_file(FakeCore& simple_core, std::string& import_file_path, uint64_t stop_height=0) { #if !defined(BLOCKCHAIN_DB) static_assert(std::is_same::value || std::is_same::value, @@ -230,9 +230,10 @@ int import_from_file(FakeCore& simple_core, std::string& import_file_path) // Note that a new blockchain will start with block number 0 (total blocks: 1) // due to genesis block being added at initialization. - // CONFIG - // TODO: can expand on this, e.g. with --block-number option - uint64_t stop_height = total_source_blocks - 1; + if (! stop_height) + { + stop_height = total_source_blocks - 1; + } // These are what we'll try to use, and they don't have to be a determination // from source and destination blockchains, but those are the defaults. @@ -530,6 +531,7 @@ int main(int argc, char* argv[]) uint32_t log_level = LOG_LEVEL_0; uint64_t num_blocks = 0; + uint64_t block_height = 0; std::string dirname; std::string db_arg_str; @@ -539,6 +541,7 @@ int main(int argc, char* argv[]) po::options_description desc_cmd_only("Command line options"); po::options_description desc_cmd_sett("Command line options and settings options"); const command_line::arg_descriptor arg_log_level = {"log-level", "", log_level}; + const command_line::arg_descriptor arg_block_height = {"block-number", "stop at block number", block_height}; const command_line::arg_descriptor arg_batch_size = {"batch-size", "", db_batch_size}; const command_line::arg_descriptor arg_pop_blocks = {"pop-blocks", "", num_blocks}; const command_line::arg_descriptor arg_testnet_on = { @@ -565,6 +568,7 @@ int main(int argc, char* argv[]) command_line::add_arg(desc_cmd_sett, command_line::arg_data_dir, default_data_path.string()); command_line::add_arg(desc_cmd_sett, command_line::arg_testnet_data_dir, default_testnet_data_path.string()); command_line::add_arg(desc_cmd_sett, arg_log_level); + command_line::add_arg(desc_cmd_sett, arg_block_height); command_line::add_arg(desc_cmd_sett, arg_batch_size); command_line::add_arg(desc_cmd_sett, arg_pop_blocks); command_line::add_arg(desc_cmd_sett, arg_testnet_on); @@ -598,6 +602,7 @@ int main(int argc, char* argv[]) opt_verify = command_line::get_arg(vm, arg_verify); opt_batch = command_line::get_arg(vm, arg_batch); opt_resume = command_line::get_arg(vm, arg_resume); + block_height = command_line::get_arg(vm, arg_block_height); db_batch_size = command_line::get_arg(vm, arg_batch_size); if (command_line::get_arg(vm, command_line::arg_help)) @@ -629,6 +634,11 @@ int main(int argc, char* argv[]) db_batch_size = db_batch_size_verify; } } + uint64_t stop_height = 0; + if (! vm["block-number"].defaulted()) + { + stop_height = block_height; + } std::vector db_engines {"memory", "lmdb"}; @@ -702,12 +712,12 @@ int main(int argc, char* argv[]) if (db_engine == "lmdb") { fake_core_lmdb simple_core(dirname, opt_testnet, opt_batch, mdb_flags); - import_from_file(simple_core, import_file_path); + import_from_file(simple_core, import_file_path, stop_height); } else if (db_engine == "memory") { fake_core_memory simple_core(dirname, opt_testnet); - import_from_file(simple_core, import_file_path); + import_from_file(simple_core, import_file_path, stop_height); } else { @@ -737,7 +747,7 @@ int main(int argc, char* argv[]) exit(0); } - import_from_file(simple_core, import_file_path); + import_from_file(simple_core, import_file_path, stop_height); #endif }