move gpos global parameters to extensions
This commit is contained in:
parent
610266481b
commit
d602e71601
4 changed files with 43 additions and 33 deletions
|
|
@ -733,9 +733,9 @@ double calculate_vesting_factor(const database& d, const account_object& stake_a
|
|||
|
||||
// get global data related to gpos
|
||||
const auto &gpo = d.get_global_properties();
|
||||
const auto vesting_period = gpo.parameters.gpos_period;
|
||||
const auto vesting_subperiod = gpo.parameters.gpos_subperiod;
|
||||
const auto period_start = gpo.parameters.gpos_period_start;
|
||||
const auto vesting_period = gpo.parameters.gpos_period();
|
||||
const auto vesting_subperiod = gpo.parameters.gpos_subperiod();
|
||||
const auto period_start = fc::time_point_sec(gpo.parameters.gpos_period_start());
|
||||
|
||||
// variables needed
|
||||
const fc::time_point_sec period_end = period_start + vesting_period;
|
||||
|
|
@ -830,15 +830,16 @@ void rolling_period_start(database& db)
|
|||
{
|
||||
if(db.head_block_time() >= HARDFORK_GPOS_TIME)
|
||||
{
|
||||
auto period_start = db.get_global_properties().parameters.gpos_period_start;
|
||||
auto vesting_period = db.get_global_properties().parameters.gpos_period;
|
||||
auto gpo = db.get_global_properties();
|
||||
auto period_start = db.get_global_properties().parameters.gpos_period_start();
|
||||
auto vesting_period = db.get_global_properties().parameters.gpos_period();
|
||||
|
||||
auto now = db.head_block_time();
|
||||
if(now.sec_since_epoch() > (period_start.sec_since_epoch() + vesting_period))
|
||||
if(now.sec_since_epoch() > (period_start + vesting_period))
|
||||
{
|
||||
// roll
|
||||
db.modify(db.get_global_properties(), [now](global_property_object& p) {
|
||||
p.parameters.gpos_period_start = now;
|
||||
p.parameters.extensions.value.gpos_period_start = now.sec_since_epoch();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@ namespace graphene { namespace chain {
|
|||
optional< uint16_t > betting_rake_fee_percentage;
|
||||
optional< flat_map<bet_multiplier_type, bet_multiplier_type> > permitted_betting_odds_increments;
|
||||
optional< uint16_t > live_betting_delay_time;
|
||||
/* gpos parameters */
|
||||
optional < uint32_t > gpos_period;
|
||||
optional < uint32_t > gpos_subperiod;
|
||||
optional < uint32_t > gpos_period_start;
|
||||
};
|
||||
|
||||
struct chain_parameters
|
||||
|
|
@ -88,10 +92,6 @@ namespace graphene { namespace chain {
|
|||
uint32_t maximum_tournament_start_time_in_future = TOURNAMENT_MAX_START_TIME_IN_FUTURE;
|
||||
uint32_t maximum_tournament_start_delay = TOURNAMENT_MAX_START_DELAY;
|
||||
uint16_t maximum_tournament_number_of_wins = TOURNAMENT_MAX_NUMBER_OF_WINS;
|
||||
/* gpos parameters constraints */
|
||||
uint32_t gpos_period = GPOS_PERIOD; /// toal seconds of current gpos period
|
||||
uint32_t gpos_subperiod = GPOS_SUBPERIOD; /// gpos_period % gpos_subperiod = 0
|
||||
time_point_sec gpos_period_start = HARDFORK_GPOS_TIME; /// current period start date
|
||||
extension<parameter_extension> extensions;
|
||||
|
||||
/** defined in fee_schedule.cpp */
|
||||
|
|
@ -112,6 +112,15 @@ namespace graphene { namespace chain {
|
|||
inline uint16_t live_betting_delay_time()const {
|
||||
return extensions.value.live_betting_delay_time.valid() ? *extensions.value.live_betting_delay_time : GRAPHENE_DEFAULT_LIVE_BETTING_DELAY_TIME;
|
||||
}
|
||||
inline uint32_t gpos_period()const {
|
||||
return extensions.value.gpos_period.valid() ? *extensions.value.gpos_period : GPOS_PERIOD; /// total seconds of current gpos period
|
||||
}
|
||||
inline uint32_t gpos_subperiod()const {
|
||||
return extensions.value.gpos_subperiod.valid() ? *extensions.value.gpos_subperiod : GPOS_SUBPERIOD; /// gpos_period % gpos_subperiod = 0
|
||||
}
|
||||
inline uint32_t gpos_period_start()const {
|
||||
return extensions.value.gpos_period_start.valid() ? *extensions.value.gpos_period_start : HARDFORK_GPOS_TIME.sec_since_epoch(); /// current period start date
|
||||
}
|
||||
};
|
||||
|
||||
} } // graphene::chain
|
||||
|
|
@ -122,6 +131,9 @@ FC_REFLECT( graphene::chain::parameter_extension,
|
|||
(betting_rake_fee_percentage)
|
||||
(permitted_betting_odds_increments)
|
||||
(live_betting_delay_time)
|
||||
(gpos_period)
|
||||
(gpos_subperiod)
|
||||
(gpos_period_start)
|
||||
)
|
||||
|
||||
FC_REFLECT( graphene::chain::chain_parameters,
|
||||
|
|
@ -167,8 +179,5 @@ FC_REFLECT( graphene::chain::chain_parameters,
|
|||
(maximum_tournament_start_time_in_future)
|
||||
(maximum_tournament_start_delay)
|
||||
(maximum_tournament_number_of_wins)
|
||||
(gpos_period)
|
||||
(gpos_subperiod)
|
||||
(gpos_period_start)
|
||||
(extensions)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -101,8 +101,8 @@ object_id_type vesting_balance_create_evaluator::do_apply( const vesting_balance
|
|||
// forcing gpos policy
|
||||
linear_vesting_policy p;
|
||||
p.begin_timestamp = now;
|
||||
p.vesting_cliff_seconds = gpo.parameters.gpos_subperiod;
|
||||
p.vesting_duration_seconds = gpo.parameters.gpos_subperiod;
|
||||
p.vesting_cliff_seconds = gpo.parameters.gpos_subperiod();
|
||||
p.vesting_duration_seconds = gpo.parameters.gpos_subperiod();
|
||||
obj.policy = p;
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -85,13 +85,13 @@ struct gpos_fixture: database_fixture
|
|||
void update_gpos_global(uint32_t vesting_period, uint32_t vesting_subperiod, fc::time_point_sec period_start)
|
||||
{
|
||||
db.modify(db.get_global_properties(), [vesting_period, vesting_subperiod, period_start](global_property_object& p) {
|
||||
p.parameters.gpos_period = vesting_period;
|
||||
p.parameters.gpos_subperiod = vesting_subperiod;
|
||||
p.parameters.gpos_period_start = period_start;
|
||||
p.parameters.extensions.value.gpos_period = vesting_period;
|
||||
p.parameters.extensions.value.gpos_subperiod = vesting_subperiod;
|
||||
p.parameters.extensions.value.gpos_period_start = period_start.sec_since_epoch();
|
||||
});
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period, vesting_period);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_subperiod, vesting_subperiod);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start.sec_since_epoch(), period_start.sec_since_epoch());
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period(), vesting_period);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_subperiod(), vesting_subperiod);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start(), period_start.sec_since_epoch());
|
||||
}
|
||||
void vote_for(const account_id_type account_id, const vote_id_type vote_for, const fc::ecc::private_key& key)
|
||||
{
|
||||
|
|
@ -163,9 +163,9 @@ BOOST_AUTO_TEST_CASE(gpos_vesting_type)
|
|||
// check created vesting amount and policy
|
||||
BOOST_CHECK_EQUAL(alice_vesting.balance.amount.value, 100);
|
||||
BOOST_CHECK_EQUAL(alice_vesting.policy.get<linear_vesting_policy>().vesting_duration_seconds,
|
||||
db.get_global_properties().parameters.gpos_subperiod);
|
||||
db.get_global_properties().parameters.gpos_subperiod());
|
||||
BOOST_CHECK_EQUAL(alice_vesting.policy.get<linear_vesting_policy>().vesting_cliff_seconds,
|
||||
db.get_global_properties().parameters.gpos_subperiod);
|
||||
db.get_global_properties().parameters.gpos_subperiod());
|
||||
|
||||
// bob creates a gpos vesting with his custom policy
|
||||
{
|
||||
|
|
@ -188,9 +188,9 @@ BOOST_AUTO_TEST_CASE(gpos_vesting_type)
|
|||
// policy is not the one defined by the user but default
|
||||
BOOST_CHECK_EQUAL(bob_vesting.balance.amount.value, 200);
|
||||
BOOST_CHECK_EQUAL(bob_vesting.policy.get<linear_vesting_policy>().vesting_duration_seconds,
|
||||
db.get_global_properties().parameters.gpos_subperiod);
|
||||
db.get_global_properties().parameters.gpos_subperiod());
|
||||
BOOST_CHECK_EQUAL(bob_vesting.policy.get<linear_vesting_policy>().vesting_cliff_seconds,
|
||||
db.get_global_properties().parameters.gpos_subperiod);
|
||||
db.get_global_properties().parameters.gpos_subperiod());
|
||||
|
||||
}
|
||||
catch (fc::exception& e)
|
||||
|
|
@ -347,9 +347,9 @@ BOOST_AUTO_TEST_CASE( voting )
|
|||
generate_block();
|
||||
|
||||
// default gpos values
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period, 15552000);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_subperiod, 2592000);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start.sec_since_epoch(), HARDFORK_GPOS_TIME.sec_since_epoch());
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period(), 15552000);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_subperiod(), 2592000);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start(), HARDFORK_GPOS_TIME.sec_since_epoch());
|
||||
|
||||
// update default gpos for test speed
|
||||
auto now = db.head_block_time();
|
||||
|
|
@ -357,9 +357,9 @@ BOOST_AUTO_TEST_CASE( voting )
|
|||
// 86400 = 60x60x24 = 1 day
|
||||
update_gpos_global(518400, 86400, now);
|
||||
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period, 518400);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_subperiod, 86400);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start.sec_since_epoch(), now.sec_since_epoch());
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period(), 518400);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_subperiod(), 86400);
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start(), now.sec_since_epoch());
|
||||
// end global changes
|
||||
|
||||
generate_block();
|
||||
|
|
@ -464,7 +464,7 @@ BOOST_AUTO_TEST_CASE( rolling_period_start )
|
|||
generate_block();
|
||||
|
||||
// period start rolled
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start.sec_since_epoch(), now.sec_since_epoch());
|
||||
BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start(), now.sec_since_epoch());
|
||||
}
|
||||
catch (fc::exception &e) {
|
||||
edump((e.to_detail_string()));
|
||||
|
|
|
|||
Loading…
Reference in a new issue