Merge branch 'feature/SONs-base' into feature/SON-322_SON-324
This commit is contained in:
commit
34cbd82d0c
4 changed files with 73 additions and 57 deletions
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue