Added getter for witness schedule object

This commit is contained in:
abitmore 2018-07-05 13:05:23 -04:00 committed by gladcow
parent 04102d549c
commit dcc6902720
5 changed files with 16 additions and 18 deletions

View file

@ -149,5 +149,9 @@ const account_statistics_object& database::get_account_stats_by_owner( account_i
return *itr; return *itr;
} }
const witness_schedule_object& database::get_witness_schedule_object()const
{
return *_p_witness_schedule_obj;
}
} } } }

View file

@ -921,7 +921,7 @@ void database::init_genesis(const genesis_state_type& genesis_state)
}); });
// Set active witnesses // Set active witnesses
modify(get_global_properties(), [&](global_property_object& p) { modify(get_global_properties(), [&genesis_state](global_property_object& p) {
for( uint32_t i = 1; i <= genesis_state.initial_active_witnesses; ++i ) for( uint32_t i = 1; i <= genesis_state.initial_active_witnesses; ++i )
{ {
p.active_witnesses.insert(witness_id_type(i)); p.active_witnesses.insert(witness_id_type(i));
@ -929,10 +929,7 @@ void database::init_genesis(const genesis_state_type& genesis_state)
}); });
// Initialize witness schedule // Initialize witness schedule
#ifndef NDEBUG _p_witness_schedule_obj = & create<witness_schedule_object>([this](witness_schedule_object& _wso)
const witness_schedule_object& wso =
#endif
create<witness_schedule_object>([&](witness_schedule_object& _wso)
{ {
// for scheduled // for scheduled
memset(_wso.rng_seed.begin(), 0, _wso.rng_seed.size()); memset(_wso.rng_seed.begin(), 0, _wso.rng_seed.size());
@ -956,19 +953,13 @@ void database::init_genesis(const genesis_state_type& genesis_state)
for( const witness_id_type& wid : get_global_properties().active_witnesses ) for( const witness_id_type& wid : get_global_properties().active_witnesses )
_wso.current_shuffled_witnesses.push_back( wid ); _wso.current_shuffled_witnesses.push_back( wid );
}); });
assert( wso.id == witness_schedule_id_type() ); FC_ASSERT( _p_witness_schedule_obj->id == witness_schedule_id_type() );
// Enable fees // Enable fees
modify(get_global_properties(), [&genesis_state](global_property_object& p) { modify(get_global_properties(), [&genesis_state](global_property_object& p) {
p.parameters.current_fees = genesis_state.initial_parameters.current_fees; p.parameters.current_fees = genesis_state.initial_parameters.current_fees;
}); });
// Create witness scheduler
//create<witness_schedule_object>([&]( witness_schedule_object& wso )
//{
// for( const witness_id_type& wid : get_global_properties().active_witnesses )
// wso.current_shuffled_witnesses.push_back( wid );
//});
// Create FBA counters // Create FBA counters
create<fba_accumulator_object>([&]( fba_accumulator_object& acc ) create<fba_accumulator_object>([&]( fba_accumulator_object& acc )

View file

@ -220,6 +220,7 @@ void database::open(
_p_global_prop_obj = &get( global_property_id_type() ); _p_global_prop_obj = &get( global_property_id_type() );
_p_chain_property_obj = &get( chain_property_id_type() ); _p_chain_property_obj = &get( chain_property_id_type() );
_p_dyn_global_prop_obj = &get( dynamic_global_property_id_type() ); _p_dyn_global_prop_obj = &get( dynamic_global_property_id_type() );
_p_witness_schedule_obj = &get( witness_schedule_id_type() );
} }
fc::optional<block_id_type> last_block = _block_id_to_block.last_id(); fc::optional<block_id_type> last_block = _block_id_to_block.last_id();

View file

@ -38,14 +38,14 @@ witness_id_type database::get_scheduled_witness( uint32_t slot_num )const
if (gpo.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SHUFFLED_ALGORITHM) if (gpo.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SHUFFLED_ALGORITHM)
{ {
const dynamic_global_property_object& dpo = get_dynamic_global_properties(); const dynamic_global_property_object& dpo = get_dynamic_global_properties();
const witness_schedule_object& wso = witness_schedule_id_type()(*this); const witness_schedule_object& wso = get_witness_schedule_object();;
uint64_t current_aslot = dpo.current_aslot + slot_num; uint64_t current_aslot = dpo.current_aslot + slot_num;
return wso.current_shuffled_witnesses[ current_aslot % wso.current_shuffled_witnesses.size() ]; return wso.current_shuffled_witnesses[ current_aslot % wso.current_shuffled_witnesses.size() ];
} }
if (gpo.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SCHEDULED_ALGORITHM && if (gpo.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SCHEDULED_ALGORITHM &&
slot_num != 0 ) slot_num != 0 )
{ {
const witness_schedule_object& wso = witness_schedule_id_type()(*this); const witness_schedule_object& wso = get_witness_schedule_object();;
// ask the near scheduler who goes in the given slot // ask the near scheduler who goes in the given slot
bool slot_is_near = wso.scheduler.get_slot(slot_num-1, wid); bool slot_is_near = wso.scheduler.get_slot(slot_num-1, wid);
if(! slot_is_near) if(! slot_is_near)
@ -113,7 +113,7 @@ uint32_t database::get_slot_at_time(fc::time_point_sec when)const
void database::update_witness_schedule() void database::update_witness_schedule()
{ {
const witness_schedule_object& wso = witness_schedule_id_type()(*this); const witness_schedule_object& wso = get_witness_schedule_object();
const global_property_object& gpo = get_global_properties(); const global_property_object& gpo = get_global_properties();
if( head_block_num() % gpo.active_witnesses.size() == 0 ) if( head_block_num() % gpo.active_witnesses.size() == 0 )
@ -148,7 +148,7 @@ void database::update_witness_schedule()
vector<witness_id_type> database::get_near_witness_schedule()const vector<witness_id_type> database::get_near_witness_schedule()const
{ {
const witness_schedule_object& wso = witness_schedule_id_type()(*this); const witness_schedule_object& wso = get_witness_schedule_object();
vector<witness_id_type> result; vector<witness_id_type> result;
result.reserve(wso.scheduler.size()); result.reserve(wso.scheduler.size());
@ -165,7 +165,7 @@ void database::update_witness_schedule(const signed_block& next_block)
{ {
auto start = fc::time_point::now(); auto start = fc::time_point::now();
const global_property_object& gpo = get_global_properties(); const global_property_object& gpo = get_global_properties();
const witness_schedule_object& wso = get(witness_schedule_id_type()); const witness_schedule_object& wso = get_witness_schedule_object();
uint32_t schedule_needs_filled = gpo.active_witnesses.size(); uint32_t schedule_needs_filled = gpo.active_witnesses.size();
uint32_t schedule_slot = get_slot_at_time(next_block.timestamp); uint32_t schedule_slot = get_slot_at_time(next_block.timestamp);
@ -252,7 +252,7 @@ uint32_t database::witness_participation_rate()const
} }
if (gpo.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SCHEDULED_ALGORITHM) if (gpo.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SCHEDULED_ALGORITHM)
{ {
const witness_schedule_object& wso = get(witness_schedule_id_type()); const witness_schedule_object& wso = get_witness_schedule_object();
return uint64_t(GRAPHENE_100_PERCENT) * wso.recent_slots_filled.popcount() / 128; return uint64_t(GRAPHENE_100_PERCENT) * wso.recent_slots_filled.popcount() / 128;
} }
return 0; return 0;

View file

@ -280,6 +280,7 @@ namespace graphene { namespace chain {
const std::vector<uint32_t> get_winner_numbers( asset_id_type for_asset, uint32_t count_members, uint8_t count_winners ) const; const std::vector<uint32_t> get_winner_numbers( asset_id_type for_asset, uint32_t count_members, uint8_t count_winners ) const;
std::vector<uint32_t> get_seeds( asset_id_type for_asset, uint8_t count_winners )const; std::vector<uint32_t> get_seeds( asset_id_type for_asset, uint8_t count_winners )const;
uint64_t get_random_bits( uint64_t bound ); uint64_t get_random_bits( uint64_t bound );
const witness_schedule_object& get_witness_schedule_object()const;
time_point_sec head_block_time()const; time_point_sec head_block_time()const;
uint32_t head_block_num()const; uint32_t head_block_num()const;
@ -595,6 +596,7 @@ namespace graphene { namespace chain {
const global_property_object* _p_global_prop_obj = nullptr; const global_property_object* _p_global_prop_obj = nullptr;
const dynamic_global_property_object* _p_dyn_global_prop_obj = nullptr; const dynamic_global_property_object* _p_dyn_global_prop_obj = nullptr;
const chain_property_object* _p_chain_property_obj = nullptr; const chain_property_object* _p_chain_property_obj = nullptr;
const witness_schedule_object* _p_witness_schedule_obj = nullptr;
///@} ///@}
}; };