Add option for overwrite last hardfork

This commit is contained in:
hirunda 2022-05-11 22:57:29 +02:00
parent cb3302160b
commit d6be9a176f
3 changed files with 29 additions and 0 deletions

View file

@ -796,6 +796,11 @@ public:
} }
virtual fc::time_point_sec get_last_known_hardfork_time() override { virtual fc::time_point_sec get_last_known_hardfork_time() override {
if( _additional_test_hardfork > _chain_db->_hardfork_times[_chain_db->_hardfork_times.size() - 1] )
{
return _additional_test_hardfork;
}
return _chain_db->_hardfork_times[_chain_db->_hardfork_times.size() - 1]; return _chain_db->_hardfork_times[_chain_db->_hardfork_times.size() - 1];
} }
@ -844,6 +849,11 @@ public:
std::map<string, std::shared_ptr<abstract_plugin>> _available_plugins; std::map<string, std::shared_ptr<abstract_plugin>> _available_plugins;
bool _is_finished_syncing = false; bool _is_finished_syncing = false;
// it's used only for testing. It should be deleted once testing
// for non compatible witnesses is done
fc::time_point_sec _additional_test_hardfork;
}; };
} // namespace detail } // namespace detail
@ -1006,6 +1016,10 @@ void graphene::app::application::add_available_plugin(std::shared_ptr<graphene::
my->_available_plugins[p->plugin_name()] = p; my->_available_plugins[p->plugin_name()] = p;
} }
void graphene::app::application::add_additional_hardfork(fc::time_point_sec hardfork) {
my->_additional_test_hardfork = hardfork;
}
void application::shutdown_plugins() { void application::shutdown_plugins() {
for (auto &entry : my->_active_plugins) for (auto &entry : my->_active_plugins)
entry.second->plugin_shutdown(); entry.second->plugin_shutdown();

View file

@ -73,6 +73,8 @@ public:
} }
std::shared_ptr<abstract_plugin> get_plugin(const string &name) const; std::shared_ptr<abstract_plugin> get_plugin(const string &name) const;
void add_additional_hardfork(fc::time_point_sec hardfork);
template <typename PluginType> template <typename PluginType>
std::shared_ptr<PluginType> get_plugin(const string &name) const { std::shared_ptr<PluginType> get_plugin(const string &name) const {
std::shared_ptr<abstract_plugin> abs_plugin = get_plugin(name); std::shared_ptr<abstract_plugin> abs_plugin = get_plugin(name);

View file

@ -74,6 +74,7 @@ void witness_plugin::plugin_set_program_options(
("ID of witness controlled by this node (e.g. " + witness_id_example + ", quotes are required, may specify multiple times)").c_str()) ("ID of witness controlled by this node (e.g. " + witness_id_example + ", quotes are required, may specify multiple times)").c_str())
("witness-ids,W", bpo::value<string>(), ("witness-ids,W", bpo::value<string>(),
("IDs of multiple witnesses controlled by this node (e.g. [" + witness_id_example + ", " + witness_id_example2 + "], quotes are required)").c_str()) ("IDs of multiple witnesses controlled by this node (e.g. [" + witness_id_example + ", " + witness_id_example2 + "], quotes are required)").c_str())
("hardfork", bpo::value<string>())
("private-key", bpo::value<vector<string>>()->composing()->multitoken()-> ("private-key", bpo::value<vector<string>>()->composing()->multitoken()->
DEFAULT_VALUE_VECTOR(std::make_pair(chain::public_key_type(default_priv_key.get_public_key()), graphene::utilities::key_to_wif(default_priv_key))), DEFAULT_VALUE_VECTOR(std::make_pair(chain::public_key_type(default_priv_key.get_public_key()), graphene::utilities::key_to_wif(default_priv_key))),
"Tuple of [PublicKey, WIF private key] (may specify multiple times)") "Tuple of [PublicKey, WIF private key] (may specify multiple times)")
@ -120,6 +121,18 @@ void witness_plugin::plugin_initialize(const boost::program_options::variables_m
_private_keys[key_id_to_wif_pair.first] = *private_key; _private_keys[key_id_to_wif_pair.first] = *private_key;
} }
} }
if ( options.count("hardfork") )
{
if (options.count("hardfork") > 1 )
{
FC_THROW("Please define only one hardfork ahead for the witness");
}
std::string hardfork_string = options["hardfork"].as<std::string>();
app().add_additional_hardfork(fc::time_point_sec::from_iso_string(hardfork_string));
}
ilog("witness plugin: plugin_initialize() end"); ilog("witness plugin: plugin_initialize() end");
} FC_LOG_AND_RETHROW() } } FC_LOG_AND_RETHROW() }