From d1e425e3c9b3f44ee66320a0db9a92777b3e7525 Mon Sep 17 00:00:00 2001 From: Davor Hirunda Date: Fri, 18 Mar 2022 22:36:31 +0000 Subject: [PATCH] Fix update son parameters on maintenance --- libraries/chain/db_maint.cpp | 11 ++------ libraries/chain/hardfork.d/SON3.hf | 7 +++++ programs/cli_wallet/main.cpp | 7 ++--- tests/tests/block_tests.cpp | 41 ++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 14 deletions(-) create mode 100644 libraries/chain/hardfork.d/SON3.hf diff --git a/libraries/chain/db_maint.cpp b/libraries/chain/db_maint.cpp index bdf1d858..56ac6fd0 100644 --- a/libraries/chain/db_maint.cpp +++ b/libraries/chain/db_maint.cpp @@ -2034,18 +2034,11 @@ void database::perform_son_tasks() void update_son_params(database& db) { - if( db.head_block_time() >= HARDFORK_SON2_TIME ) + if( (db.head_block_time() >= HARDFORK_SON2_TIME) && (db.head_block_time() < HARDFORK_SON3_TIME) ) { const auto& gpo = db.get_global_properties(); - const asset_object& btc_asset = gpo.parameters.btc_asset()(db); - if( btc_asset.is_transfer_restricted() ) { - db.modify( btc_asset, []( asset_object& ao ) { - ao.options.flags = asset_issuer_permission_flags::charge_market_fee | - asset_issuer_permission_flags::override_authority; - }); - } db.modify( gpo, []( global_property_object& gpo ) { - gpo.parameters.extensions.value.maximum_son_count = 7; + gpo.parameters.extensions.value.maximum_son_count = 7; }); } } diff --git a/libraries/chain/hardfork.d/SON3.hf b/libraries/chain/hardfork.d/SON3.hf new file mode 100644 index 00000000..36347c09 --- /dev/null +++ b/libraries/chain/hardfork.d/SON3.hf @@ -0,0 +1,7 @@ +#ifndef HARDFORK_SON3_TIME +#ifdef BUILD_PEERPLAYS_TESTNET +#define HARDFORK_SON3_TIME (fc::time_point_sec::from_iso_string("2022-05-31T00:00:00")) +#else +#define HARDFORK_SON3_TIME (fc::time_point_sec::from_iso_string("2022-05-31T00:00:00")) +#endif +#endif diff --git a/programs/cli_wallet/main.cpp b/programs/cli_wallet/main.cpp index e2f5a182..05f68465 100644 --- a/programs/cli_wallet/main.cpp +++ b/programs/cli_wallet/main.cpp @@ -86,8 +86,7 @@ int main(int argc, char **argv) { bpo::variables_map options; - try - { + try { bpo::parsed_options po = bpo::command_line_parser(argc, argv).options(opts).allow_unregistered().run(); std::vector unrecognized = bpo::collect_unrecognized(po.options, bpo::include_positional); if (unrecognized.size() > 0) { @@ -98,9 +97,7 @@ int main(int argc, char **argv) { return 0; } bpo::store(po, options); - } - catch (const boost::program_options::invalid_command_line_syntax & e) - { + } catch (const boost::program_options::invalid_command_line_syntax &e) { std::cout << e.what() << std::endl; return 0; } diff --git a/tests/tests/block_tests.cpp b/tests/tests/block_tests.cpp index 8bf249ed..a802aac5 100644 --- a/tests/tests/block_tests.cpp +++ b/tests/tests/block_tests.cpp @@ -1012,6 +1012,47 @@ BOOST_FIXTURE_TEST_CASE( prevent_missconfiguration_blockchain_param, database_fi } FC_LOG_AND_RETHROW() } +BOOST_FIXTURE_TEST_CASE( hardfork_son2_time, database_fixture ) +{ try { + + db.modify(db.get_global_properties(), [](global_property_object& p) { + p.parameters.committee_proposal_review_period = fc::hours(1).to_seconds(); + }); + + generate_block(); + // check that maximum_son_count are not yet updated on 7, it should + // be updated on HARDFORK_SON2_TIME + BOOST_CHECK_EQUAL(db.get_global_properties().parameters.maximum_son_count(), GRAPHENE_DEFAULT_MAX_SONS); + + generate_blocks(HARDFORK_SON2_TIME); + + // check that flags for assets are set after hardfork_son2_time + asset_object btc_asset = get_asset("BTC"); + uint16_t check_flags{0}; + check_flags |= asset_issuer_permission_flags::charge_market_fee | asset_issuer_permission_flags::override_authority; + uint16_t result = btc_asset.options.flags & check_flags; + BOOST_CHECK_EQUAL( result, check_flags); + + // move on next maintenance interval and check that maximum_son_count is updated to 7 + generate_blocks(db.get_dynamic_global_properties().next_maintenance_time); + generate_block(); // get the maintenance skip slots out of the way*/ + BOOST_CHECK_EQUAL(db.get_global_properties().parameters.maximum_son_count(), 7); + + generate_blocks(HARDFORK_SON3_TIME); + // after this hardfork maximum son account should not reset the value + // on 7 after maintenance interval anymore. So change the global parameters + // and check the value after maintenance interval + db.modify(db.get_global_properties(), [](global_property_object& p) { + p.parameters.extensions.value.maximum_son_count = 13; + }); + + generate_blocks(db.get_dynamic_global_properties().next_maintenance_time); + generate_block(); + + BOOST_CHECK_EQUAL(db.get_global_properties().parameters.maximum_son_count(), 13); + +} FC_LOG_AND_RETHROW() } + BOOST_FIXTURE_TEST_CASE( pop_block_twice, database_fixture ) { try