SON118-Add Budget for SON
This commit is contained in:
parent
324923b7b6
commit
4271954eb1
4 changed files with 26 additions and 1 deletions
|
|
@ -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;
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue