db_maint.cpp: Roll over leftover witness pay, see 8f739ac767 for description

This commit is contained in:
theoreticalbts 2015-06-18 16:06:42 -04:00
parent 5e475e0c15
commit 5e28a79e6f
2 changed files with 16 additions and 4 deletions

View file

@ -232,6 +232,7 @@ void database::init_genesis(const genesis_state_type& genesis_state)
});
create<dynamic_global_property_object>( [&](dynamic_global_property_object& p) {
p.time = fc::time_point_sec(GRAPHENE_GENESIS_TIMESTAMP);
p.witness_budget = 0;
});
create<block_summary_object>([&](block_summary_object& p) {
});

View file

@ -233,6 +233,9 @@ share_type database::get_max_budget( fc::time_point_sec now )const
// are available for the budget at this point, but not included
// in core.burned().
share_type reserve = core.burned(*this) + core_dd.accumulated_fees;
// Similarly, we consider leftover witness_budget to be burned
// at the BEGINNING of the maintenance interval.
reserve += dpo.witness_budget;
fc::uint128_t budget_u128 = reserve.value;
budget_u128 *= uint64_t(dt);
@ -303,16 +306,24 @@ void database::process_budget()
pay_workers(leftover_worker_funds);
available_funds += leftover_worker_funds;
share_type unused_prev_witness_budget = dpo.witness_budget;
modify(core, [&]( asset_dynamic_data_object& _core )
{
_core.current_supply = (_core.current_supply + witness_budget +
worker_budget - leftover_worker_funds -
_core.accumulated_fees);
_core.current_supply = (_core.current_supply
+ witness_budget
+ worker_budget
- leftover_worker_funds
- _core.accumulated_fees
- unused_prev_witness_budget
);
_core.accumulated_fees = 0;
});
modify(dpo, [&]( dynamic_global_property_object& _dpo )
{
_dpo.witness_budget += witness_budget;
// Since initial witness_budget was rolled into
// available_funds, we replace it with witness_budget
// instead of adding it.
_dpo.witness_budget = witness_budget;
_dpo.last_budget_time = now;
});