move gpos global parameters to extensions

This commit is contained in:
Alfredo 2019-01-22 22:40:15 -03:00
parent 610266481b
commit d602e71601
4 changed files with 43 additions and 33 deletions

View file

@ -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();
});
}
}

View file

@ -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)
)

View file

@ -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 {

View file

@ -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()));