From d6be9a176fcfdbfa1f3182e2db7880f7bd19cc7e Mon Sep 17 00:00:00 2001 From: hirunda Date: Wed, 11 May 2022 22:57:29 +0200 Subject: [PATCH] Add option for overwrite last hardfork --- libraries/app/application.cpp | 14 ++++++++++++++ libraries/app/include/graphene/app/application.hpp | 2 ++ libraries/plugins/witness/witness.cpp | 13 +++++++++++++ 3 files changed, 29 insertions(+) diff --git a/libraries/app/application.cpp b/libraries/app/application.cpp index 56878eaf..f21e8208 100644 --- a/libraries/app/application.cpp +++ b/libraries/app/application.cpp @@ -796,6 +796,11 @@ public: } 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]; } @@ -844,6 +849,11 @@ public: std::map> _available_plugins; 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 @@ -1006,6 +1016,10 @@ void graphene::app::application::add_available_plugin(std::shared_ptr_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() { for (auto &entry : my->_active_plugins) entry.second->plugin_shutdown(); diff --git a/libraries/app/include/graphene/app/application.hpp b/libraries/app/include/graphene/app/application.hpp index 7bf52212..d9b598b9 100644 --- a/libraries/app/include/graphene/app/application.hpp +++ b/libraries/app/include/graphene/app/application.hpp @@ -73,6 +73,8 @@ public: } std::shared_ptr get_plugin(const string &name) const; + void add_additional_hardfork(fc::time_point_sec hardfork); + template std::shared_ptr get_plugin(const string &name) const { std::shared_ptr abs_plugin = get_plugin(name); diff --git a/libraries/plugins/witness/witness.cpp b/libraries/plugins/witness/witness.cpp index d535ca3b..b01b8dd2 100644 --- a/libraries/plugins/witness/witness.cpp +++ b/libraries/plugins/witness/witness.cpp @@ -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()) ("witness-ids,W", bpo::value(), ("IDs of multiple witnesses controlled by this node (e.g. [" + witness_id_example + ", " + witness_id_example2 + "], quotes are required)").c_str()) + ("hardfork", bpo::value()) ("private-key", bpo::value>()->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))), "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; } } + + 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(); + app().add_additional_hardfork(fc::time_point_sec::from_iso_string(hardfork_string)); + } + ilog("witness plugin: plugin_initialize() end"); } FC_LOG_AND_RETHROW() }