SON118-Add Budget for SON

This commit is contained in:
Personal 2019-10-04 21:02:23 +10:00
parent 324923b7b6
commit 4271954eb1
4 changed files with 26 additions and 1 deletions

View file

@ -415,6 +415,18 @@ void database::process_budget()
rec.witness_budget = witness_budget;
available_funds -= witness_budget;
// Before making a budget we should pay out SONs for the last day
// To be implemented once son base code is available
// This function should check if its time to pay sons
// and modify the global son funds accordingly, whatever is left is passed on to next budget
//pay_sons()
share_type son_budget = gpo.parameters.son_pay_daily_max();
son_budget = std::min(son_budget, available_funds);
rec.son_budget = son_budget;
rec.leftover_son_funds = dpo.son_budget;
available_funds += rec.leftover_son_funds;
available_funds -= son_budget;
fc::uint128_t worker_budget_u128 = gpo.parameters.worker_budget_per_day.value;
worker_budget_u128 *= uint64_t(time_to_maint);
worker_budget_u128 /= 60*60*24;
@ -434,9 +446,11 @@ void database::process_budget()
rec.supply_delta = rec.witness_budget
+ rec.worker_budget
+ rec.son_budget
- rec.leftover_worker_funds
- rec.from_accumulated_fees
- rec.from_unused_witness_budget;
- rec.from_unused_witness_budget
- rec.leftover_son_funds;
modify(core, [&]( asset_dynamic_data_object& _core )
{
@ -445,9 +459,11 @@ void database::process_budget()
assert( rec.supply_delta ==
witness_budget
+ worker_budget
+ son_budget
- leftover_worker_funds
- _core.accumulated_fees
- dpo.witness_budget
- dpo.son_budget
);
_core.accumulated_fees = 0;
});
@ -458,6 +474,7 @@ void database::process_budget()
// available_funds, we replace it with witness_budget
// instead of adding it.
_dpo.witness_budget = witness_budget;
_dpo.son_budget = son_budget;
_dpo.last_budget_time = now;
});

View file

@ -46,9 +46,11 @@ struct budget_record
// sinks of budget, should sum up to total_budget
share_type witness_budget = 0;
share_type worker_budget = 0;
share_type son_budget = 0;
// unused budget
share_type leftover_worker_funds = 0;
share_type leftover_son_funds = 0;
// change in supply due to budget operations
share_type supply_delta = 0;

View file

@ -229,3 +229,4 @@
#define GPOS_PERIOD (60*60*24*30*6) // 6 months
#define GPOS_SUBPERIOD (60*60*24*30) // 1 month
#define MIN_SON_MEMBER_COUNT 15
#define MIN_SON_PAY_DAILY_MAX 200

View file

@ -44,6 +44,7 @@ namespace graphene { namespace chain {
optional < uint32_t > gpos_subperiod;
optional < uint32_t > gpos_period_start;
optional < uint16_t > son_count;
optional < uint32_t > son_pay_daily_max;
};
struct chain_parameters
@ -125,6 +126,9 @@ namespace graphene { namespace chain {
inline uint16_t son_count()const {
return extensions.value.son_count.valid() ? *extensions.value.son_count : MIN_SON_MEMBER_COUNT;
}
inline uint16_t son_pay_daily_max()const {
return extensions.value.son_pay_daily_max.valid() ? *extensions.value.son_pay_daily_max : MIN_SON_PAY_DAILY_MAX;
}
};
} } // graphene::chain
@ -139,6 +143,7 @@ FC_REFLECT( graphene::chain::parameter_extension,
(gpos_subperiod)
(gpos_period_start)
(son_count)
(son_pay_daily_max)
)
FC_REFLECT( graphene::chain::chain_parameters,