From b8b2bcf97e51ee24fe15864259fc61be2244a9f0 Mon Sep 17 00:00:00 2001 From: theoreticalbts Date: Wed, 9 Sep 2015 17:36:36 -0400 Subject: [PATCH] Implement --dbg-init-key command line option to take control of init witnesses for debugging #307 --- libraries/app/application.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libraries/app/application.cpp b/libraries/app/application.cpp index c9783d53..a55db76e 100644 --- a/libraries/app/application.cpp +++ b/libraries/app/application.cpp @@ -219,6 +219,15 @@ namespace detail { fc::remove_all(_data_dir / "blockchain/dblock"); } + void set_dbg_init_key( genesis_state_type& genesis, const std::string& init_key ) + { + flat_set< std::string > initial_witness_names; + public_key_type init_pubkey( init_key ); + for( uint64_t i=0; icount("genesis-json") ) { genesis_state_type genesis = fc::json::from_file(_options->at("genesis-json").as()).as(); + bool modified_genesis = false; if( _options->count("genesis-timestamp") ) { genesis.initial_timestamp = fc::time_point_sec( graphene::time::now() ) + genesis.initial_parameters.block_interval + _options->at("genesis-timestamp").as(); genesis.initial_timestamp -= genesis.initial_timestamp.sec_since_epoch() % genesis.initial_parameters.block_interval; + modified_genesis = true; std::cerr << "Used genesis timestamp: " << genesis.initial_timestamp.to_iso_string() << " (PLEASE RECORD THIS)\n"; } + if( _options->count("dbg-init-key") ) + { + std::string init_key = _options->at( "dbg-init-key" ).as(); + FC_ASSERT( genesis.initial_witness_candidates.size() >= genesis.initial_active_witnesses ); + set_dbg_init_key( genesis, init_key ); + modified_genesis = true; + std::cerr << "Set init witness key to " << init_key << "\n"; + } + if( modified_genesis ) + { + std::cerr << "WARNING: GENESIS WAS MODIFIED, YOUR CHAIN ID MAY BE DIFFERENT\n"; + } return genesis; } else @@ -610,6 +633,7 @@ void application::set_program_options(boost::program_options::options_descriptio ("server-pem,p", bpo::value()->implicit_value("server.pem"), "The TLS certificate file for this server") ("server-pem-password,P", bpo::value()->implicit_value(""), "Password for this certificate") ("genesis-json", bpo::value(), "File to read Genesis State from") + ("dbg-init-key", bpo::value(), "Block signing key to use for init witnesses, overrides genesis file") ("api-access", bpo::value(), "JSON file specifying API permissions") ; command_line_options.add(configuration_file_options);