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; rec.witness_budget = witness_budget;
available_funds -= 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; fc::uint128_t worker_budget_u128 = gpo.parameters.worker_budget_per_day.value;
worker_budget_u128 *= uint64_t(time_to_maint); worker_budget_u128 *= uint64_t(time_to_maint);
worker_budget_u128 /= 60*60*24; worker_budget_u128 /= 60*60*24;
@ -434,9 +446,11 @@ void database::process_budget()
rec.supply_delta = rec.witness_budget rec.supply_delta = rec.witness_budget
+ rec.worker_budget + rec.worker_budget
+ rec.son_budget
- rec.leftover_worker_funds - rec.leftover_worker_funds
- rec.from_accumulated_fees - 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 ) modify(core, [&]( asset_dynamic_data_object& _core )
{ {
@ -445,9 +459,11 @@ void database::process_budget()
assert( rec.supply_delta == assert( rec.supply_delta ==
witness_budget witness_budget
+ worker_budget + worker_budget
+ son_budget
- leftover_worker_funds - leftover_worker_funds
- _core.accumulated_fees - _core.accumulated_fees
- dpo.witness_budget - dpo.witness_budget
- dpo.son_budget
); );
_core.accumulated_fees = 0; _core.accumulated_fees = 0;
}); });
@ -458,6 +474,7 @@ void database::process_budget()
// available_funds, we replace it with witness_budget // available_funds, we replace it with witness_budget
// instead of adding it. // instead of adding it.
_dpo.witness_budget = witness_budget; _dpo.witness_budget = witness_budget;
_dpo.son_budget = son_budget;
_dpo.last_budget_time = now; _dpo.last_budget_time = now;
}); });

View file

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

View file

@ -229,3 +229,4 @@
#define GPOS_PERIOD (60*60*24*30*6) // 6 months #define GPOS_PERIOD (60*60*24*30*6) // 6 months
#define GPOS_SUBPERIOD (60*60*24*30) // 1 month #define GPOS_SUBPERIOD (60*60*24*30) // 1 month
#define MIN_SON_MEMBER_COUNT 15 #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_subperiod;
optional < uint32_t > gpos_period_start; optional < uint32_t > gpos_period_start;
optional < uint16_t > son_count; optional < uint16_t > son_count;
optional < uint32_t > son_pay_daily_max;
}; };
struct chain_parameters struct chain_parameters
@ -125,6 +126,9 @@ namespace graphene { namespace chain {
inline uint16_t son_count()const { inline uint16_t son_count()const {
return extensions.value.son_count.valid() ? *extensions.value.son_count : MIN_SON_MEMBER_COUNT; 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 } } // graphene::chain
@ -139,6 +143,7 @@ FC_REFLECT( graphene::chain::parameter_extension,
(gpos_subperiod) (gpos_subperiod)
(gpos_period_start) (gpos_period_start)
(son_count) (son_count)
(son_pay_daily_max)
) )
FC_REFLECT( graphene::chain::chain_parameters, FC_REFLECT( graphene::chain::chain_parameters,