From 39a6c895b99fef2f2e60a0a0f1a9c6a1d9eb0c9f Mon Sep 17 00:00:00 2001 From: Sandip Patel Date: Mon, 26 Aug 2019 13:40:57 +0530 Subject: [PATCH] Fixed committee member update issue --- libraries/chain/db_maint.cpp | 22 +++++++++++++++++++++- libraries/chain/hardfork.d/1002.hf | 5 +++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/libraries/chain/db_maint.cpp b/libraries/chain/db_maint.cpp index 06e15a19..c7b02670 100644 --- a/libraries/chain/db_maint.cpp +++ b/libraries/chain/db_maint.cpp @@ -253,7 +253,13 @@ void database::update_active_witnesses() void database::update_active_committee_members() { try { assert( _committee_count_histogram_buffer.size() > 0 ); - share_type stake_target = (_total_voting_stake-_witness_count_histogram_buffer[0]) / 2; + share_type stake_target = (_total_voting_stake-_committee_count_histogram_buffer[0]) / 2; + share_type old_stake_target = (_total_voting_stake-_witness_count_histogram_buffer[0]) / 2; + // TODO + // all the stuff about old_stake_target can *hopefully* be removed after the + // hardfork date has passed + if( stake_target != old_stake_target ) + ilog( "Different stake targets: ${old} / ${new}", ("old",old_stake_target)("new",stake_target) ); /// accounts that vote for 0 or 1 witness do not get to express an opinion on /// the number of witnesses to have (they abstain and are non-voting accounts) @@ -264,6 +270,20 @@ void database::update_active_committee_members() && (stake_tally <= stake_target) ) stake_tally += _committee_count_histogram_buffer[++committee_member_count]; + if( stake_target != old_stake_target && old_stake_target > 0 && head_block_time() < fc::time_point_sec(HARDFORK_1002_TIME) ) + { + uint64_t old_stake_tally = 0; + size_t old_committee_member_count = 0; + while( (old_committee_member_count < _committee_count_histogram_buffer.size() - 1) + && (old_stake_tally <= old_stake_target) ) + old_stake_tally += _committee_count_histogram_buffer[++old_committee_member_count]; + if( old_committee_member_count != committee_member_count ) + { + ilog( "Committee member count mismatch ${old} / ${new}", ("old",old_committee_member_count)("new", committee_member_count) ); + committee_member_count = old_committee_member_count; + } + } + const chain_property_object& cpo = get_chain_properties(); auto committee_members = sort_votable_objects(std::max(committee_member_count*2+1, (size_t)cpo.immutable_parameters.min_committee_member_count)); diff --git a/libraries/chain/hardfork.d/1002.hf b/libraries/chain/hardfork.d/1002.hf index 0598729f..b4d217e5 100644 --- a/libraries/chain/hardfork.d/1002.hf +++ b/libraries/chain/hardfork.d/1002.hf @@ -1,4 +1,5 @@ // added transaction size check +// Bug fix of update commitee member update #ifndef HARDFORK_1002_TIME -#define HARDFORK_1002_TIME (fc::time_point_sec( 1566797400 )) //Monday, 26 August 2019 05:30:00 GMT -#endif +#define HARDFORK_1002_TIME (fc::time_point_sec( 1566893013 )) //Tuesday, 27 August 2019 08:03:33 GMT +#endif \ No newline at end of file