Merge pull request #243 from peerplays-network/feature/BLOCKBACK-186-Bug-Fix
[BLOCKBACK-186] Withdraw vesting bug fix
This commit is contained in:
commit
b1f2ba5ba6
2 changed files with 40 additions and 2 deletions
|
|
@ -191,7 +191,7 @@ void_result vesting_balance_withdraw_evaluator::do_apply( const vesting_balance_
|
||||||
std::for_each(vesting_range.first, vesting_range.second,
|
std::for_each(vesting_range.first, vesting_range.second,
|
||||||
[&ids, now](const vesting_balance_object& balance) {
|
[&ids, now](const vesting_balance_object& balance) {
|
||||||
if(balance.balance.amount > 0 && balance.balance_type == vesting_balance_type::gpos
|
if(balance.balance.amount > 0 && balance.balance_type == vesting_balance_type::gpos
|
||||||
&& balance.balance.asset_id == asset_id_type())
|
&& balance.is_withdraw_allowed(now, balance.balance.amount) && balance.balance.asset_id == asset_id_type())
|
||||||
ids.emplace_back(balance.id);
|
ids.emplace_back(balance.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -202,8 +202,8 @@ void_result vesting_balance_withdraw_evaluator::do_apply( const vesting_balance_
|
||||||
if(total_withdraw_amount.amount > vbo.balance.amount)
|
if(total_withdraw_amount.amount > vbo.balance.amount)
|
||||||
{
|
{
|
||||||
total_withdraw_amount.amount -= vbo.balance.amount;
|
total_withdraw_amount.amount -= vbo.balance.amount;
|
||||||
d.modify( vbo, [&]( vesting_balance_object& vbo ) {vbo.withdraw( now, vbo.balance );} );
|
|
||||||
d.adjust_balance( op.owner, vbo.balance );
|
d.adjust_balance( op.owner, vbo.balance );
|
||||||
|
d.modify( vbo, [&]( vesting_balance_object& vbo ) {vbo.withdraw( now, vbo.balance );} );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1049,6 +1049,7 @@ BOOST_AUTO_TEST_CASE( Withdraw_gpos_vesting_balance )
|
||||||
|
|
||||||
ACTORS((alice)(bob));
|
ACTORS((alice)(bob));
|
||||||
|
|
||||||
|
graphene::app::database_api db_api1(db);
|
||||||
const auto& core = asset_id_type()(db);
|
const auto& core = asset_id_type()(db);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1072,6 +1073,43 @@ BOOST_AUTO_TEST_CASE( Withdraw_gpos_vesting_balance )
|
||||||
// verify charles balance
|
// verify charles balance
|
||||||
BOOST_CHECK_EQUAL(get_balance(alice_id(db), core), 400);
|
BOOST_CHECK_EQUAL(get_balance(alice_id(db), core), 400);
|
||||||
BOOST_CHECK_EQUAL(get_balance(bob_id(db), core), 99);
|
BOOST_CHECK_EQUAL(get_balance(bob_id(db), core), 99);
|
||||||
|
|
||||||
|
// Add more 50 and 73 vesting objects and withdraw 90 from
|
||||||
|
// total vesting balance of user
|
||||||
|
create_vesting(alice_id, core.amount(50), vesting_balance_type::gpos);
|
||||||
|
create_vesting(alice_id, core.amount(73), vesting_balance_type::gpos);
|
||||||
|
generate_blocks(db.get_dynamic_global_properties().next_maintenance_time);
|
||||||
|
|
||||||
|
generate_block();
|
||||||
|
|
||||||
|
vector<vesting_balance_object> vbos = db_api1.get_vesting_balances("alice");
|
||||||
|
asset total_vesting;
|
||||||
|
for (const vesting_balance_object& vbo : vbos)
|
||||||
|
{
|
||||||
|
if (vbo.balance_type == vesting_balance_type::gpos && vbo.balance.asset_id == asset_id_type())
|
||||||
|
total_vesting += vbo.balance;
|
||||||
|
}
|
||||||
|
// total vesting balance of alice
|
||||||
|
BOOST_CHECK_EQUAL(total_vesting.amount.value, core.amount(223).amount.value);
|
||||||
|
|
||||||
|
generate_blocks(db.get_dynamic_global_properties().next_maintenance_time);
|
||||||
|
generate_blocks(db.get_global_properties().parameters.gpos_vesting_lockin_period());
|
||||||
|
BOOST_CHECK_EQUAL(get_balance(alice_id(db), core), 277);
|
||||||
|
withdraw_gpos_vesting(vbo.id, alice_id, core.amount(90), vesting_balance_type::gpos, alice_private_key);
|
||||||
|
generate_block();
|
||||||
|
// verify alice balance
|
||||||
|
BOOST_CHECK_EQUAL(get_balance(alice_id(db), core), 367);
|
||||||
|
|
||||||
|
// verify remaining vesting balance
|
||||||
|
vbos = db_api1.get_vesting_balances("alice");
|
||||||
|
asset remaining_vesting;
|
||||||
|
for (const vesting_balance_object& vbo : vbos)
|
||||||
|
{
|
||||||
|
if (vbo.balance_type == vesting_balance_type::gpos && vbo.balance.asset_id == asset_id_type())
|
||||||
|
remaining_vesting += vbo.balance;
|
||||||
|
}
|
||||||
|
// remaining vesting balance of alice
|
||||||
|
BOOST_CHECK_EQUAL(remaining_vesting.amount.value, core.amount(133).amount.value);
|
||||||
}
|
}
|
||||||
catch (fc::exception &e) {
|
catch (fc::exception &e) {
|
||||||
edump((e.to_detail_string()));
|
edump((e.to_detail_string()));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue