Merge branch 'feature/SONs-base' into feature/SON-322_SON-324

This commit is contained in:
Srdjan Obucina 2020-04-02 17:55:33 +02:00
commit 34cbd82d0c
4 changed files with 73 additions and 57 deletions

View file

@ -2090,6 +2090,20 @@ void database::perform_chain_maintenance(const signed_block& next_block, const g
p.pending_parameters->extensions.value.gpos_subperiod = p.parameters.extensions.value.gpos_subperiod; p.pending_parameters->extensions.value.gpos_subperiod = p.parameters.extensions.value.gpos_subperiod;
if( !p.pending_parameters->extensions.value.gpos_vesting_lockin_period.valid() ) if( !p.pending_parameters->extensions.value.gpos_vesting_lockin_period.valid() )
p.pending_parameters->extensions.value.gpos_vesting_lockin_period = p.parameters.extensions.value.gpos_vesting_lockin_period; p.pending_parameters->extensions.value.gpos_vesting_lockin_period = p.parameters.extensions.value.gpos_vesting_lockin_period;
if( !p.pending_parameters->extensions.value.son_vesting_amount.valid() )
p.pending_parameters->extensions.value.son_vesting_amount = p.parameters.extensions.value.son_vesting_amount;
if( !p.pending_parameters->extensions.value.son_vesting_period.valid() )
p.pending_parameters->extensions.value.son_vesting_period = p.parameters.extensions.value.son_vesting_period;
if( !p.pending_parameters->extensions.value.son_pay_max.valid() )
p.pending_parameters->extensions.value.son_pay_max = p.parameters.extensions.value.son_pay_max;
if( !p.pending_parameters->extensions.value.son_pay_time.valid() )
p.pending_parameters->extensions.value.son_pay_time = p.parameters.extensions.value.son_pay_time;
if( !p.pending_parameters->extensions.value.son_deregister_time.valid() )
p.pending_parameters->extensions.value.son_deregister_time = p.parameters.extensions.value.son_deregister_time;
if( !p.pending_parameters->extensions.value.son_heartbeat_frequency.valid() )
p.pending_parameters->extensions.value.son_heartbeat_frequency = p.parameters.extensions.value.son_heartbeat_frequency;
if( !p.pending_parameters->extensions.value.son_down_time.valid() )
p.pending_parameters->extensions.value.son_down_time = p.parameters.extensions.value.son_down_time;
p.parameters = std::move(*p.pending_parameters); p.parameters = std::move(*p.pending_parameters);
p.pending_parameters.reset(); p.pending_parameters.reset();
} }

View file

@ -50,13 +50,14 @@ namespace graphene { namespace chain {
optional < uint32_t > gpos_period_start = HARDFORK_GPOS_TIME.sec_since_epoch(); optional < uint32_t > gpos_period_start = HARDFORK_GPOS_TIME.sec_since_epoch();
optional < uint32_t > gpos_vesting_lockin_period = GPOS_VESTING_LOCKIN_PERIOD; optional < uint32_t > gpos_vesting_lockin_period = GPOS_VESTING_LOCKIN_PERIOD;
optional < uint32_t > son_vesting_amount; optional < uint32_t > son_vesting_amount = SON_VESTING_AMOUNT;
optional < uint32_t > son_vesting_period; optional < uint32_t > son_vesting_period = SON_VESTING_PERIOD;
optional < uint32_t > son_pay_max; optional < uint32_t > son_pay_max = SON_PAY_MAX;
optional < uint32_t > son_pay_time; optional < uint32_t > son_pay_time = SON_PAY_TIME;
optional < uint32_t > son_deregister_time; optional < uint32_t > son_deregister_time = SON_DEREGISTER_TIME;
optional < uint32_t > son_heartbeat_frequency; optional < uint32_t > son_heartbeat_frequency = SON_HEARTBEAT_FREQUENCY;
optional < uint32_t > son_down_time; optional < uint32_t > son_down_time = SON_DOWN_TIME;
optional < account_id_type > son_account; optional < account_id_type > son_account;
optional < asset_id_type > btc_asset; optional < asset_id_type > btc_asset;

View file

@ -139,7 +139,7 @@ void_result vesting_balance_withdraw_evaluator::do_evaluate( const vesting_balan
const time_point_sec now = d.head_block_time(); const time_point_sec now = d.head_block_time();
const vesting_balance_object& vbo = op.vesting_balance( d ); const vesting_balance_object& vbo = op.vesting_balance( d );
if(vbo.balance_type == vesting_balance_type::normal) if(vbo.balance_type == vesting_balance_type::normal || vbo.balance_type == vesting_balance_type::son)
{ {
FC_ASSERT( op.owner == vbo.owner, "", ("op.owner", op.owner)("vbo.owner", vbo.owner) ); FC_ASSERT( op.owner == vbo.owner, "", ("op.owner", op.owner)("vbo.owner", vbo.owner) );
FC_ASSERT( vbo.is_withdraw_allowed( now, op.amount ), "Account has insufficient ${balance_type} Vested Balance to withdraw", FC_ASSERT( vbo.is_withdraw_allowed( now, op.amount ), "Account has insufficient ${balance_type} Vested Balance to withdraw",
@ -179,7 +179,7 @@ void_result vesting_balance_withdraw_evaluator::do_apply( const vesting_balance_
//Handling all GPOS withdrawls separately from normal and SONs(future extension). //Handling all GPOS withdrawls separately from normal and SONs(future extension).
// One request/transaction would be sufficient to withdraw from multiple vesting balance ids // One request/transaction would be sufficient to withdraw from multiple vesting balance ids
const vesting_balance_object& vbo = op.vesting_balance( d ); const vesting_balance_object& vbo = op.vesting_balance( d );
if(vbo.balance_type == vesting_balance_type::normal) if(vbo.balance_type == vesting_balance_type::normal || vbo.balance_type == vesting_balance_type::son)
{ {
// Allow zero balance objects to stick around, (1) to comply // Allow zero balance objects to stick around, (1) to comply
// with the chain's "objects live forever" design principle, (2) // with the chain's "objects live forever" design principle, (2)

View file

@ -2414,8 +2414,8 @@ public:
vesting_balance_object vbo = get_object< vesting_balance_object >( *vbid ); vesting_balance_object vbo = get_object< vesting_balance_object >( *vbid );
if(vbo.balance_type != vesting_balance_type::normal) if(vbo.balance_type == vesting_balance_type::gpos)
FC_THROW("Allowed to withdraw only Normal type vest balances with this method"); FC_THROW("Allowed to withdraw only Normal and Son type vest balances with this method");
vesting_balance_withdraw_operation vesting_balance_withdraw_op; vesting_balance_withdraw_operation vesting_balance_withdraw_op;
@ -6729,7 +6729,8 @@ vesting_balance_object_with_info::vesting_balance_object_with_info( const vestin
: vesting_balance_object( vbo ) : vesting_balance_object( vbo )
{ {
allowed_withdraw = get_allowed_withdraw( now ); allowed_withdraw = get_allowed_withdraw( now );
if(vbo.balance_type == vesting_balance_type::gpos) if(vbo.balance_type == vesting_balance_type::gpos ||
((vbo.balance_type == vesting_balance_type::son) && (vbo.policy.which() == vesting_policy::tag<linear_vesting_policy>::value)))
allowed_withdraw_time = vbo.policy.get<linear_vesting_policy>().begin_timestamp + vbo.policy.get<linear_vesting_policy>().vesting_cliff_seconds; allowed_withdraw_time = vbo.policy.get<linear_vesting_policy>().begin_timestamp + vbo.policy.get<linear_vesting_policy>().vesting_cliff_seconds;
else else
allowed_withdraw_time = now; allowed_withdraw_time = now;