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;
|
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;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue