From 04985c2624d0c09ae62454fcaac89da56e31016c Mon Sep 17 00:00:00 2001 From: Roman Olearski Date: Tue, 18 Jul 2017 19:17:13 +0200 Subject: [PATCH] improving cancel_all_bets operation --- libraries/chain/betting_market_evaluator.cpp | 2 +- libraries/chain/db_bet.cpp | 9 ++++++--- libraries/chain/include/graphene/chain/database.hpp | 3 ++- tests/betting/betting_tests.cpp | 10 ++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/libraries/chain/betting_market_evaluator.cpp b/libraries/chain/betting_market_evaluator.cpp index d350c49a..75665583 100644 --- a/libraries/chain/betting_market_evaluator.cpp +++ b/libraries/chain/betting_market_evaluator.cpp @@ -264,7 +264,7 @@ void_result betting_market_group_cancel_all_bets_evaluator::do_evaluate(const be void_result betting_market_group_cancel_all_bets_evaluator::do_apply(const betting_market_group_cancel_all_bets_operation& op) { try { - db().resolve_betting_market_group(*_betting_market_group, {}); + db().resolve_betting_market_group(*_betting_market_group, {}, true); return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/libraries/chain/db_bet.cpp b/libraries/chain/db_bet.cpp index 80a01e5d..bbeae4a2 100644 --- a/libraries/chain/db_bet.cpp +++ b/libraries/chain/db_bet.cpp @@ -61,7 +61,8 @@ void database::validate_betting_market_group_resolutions(const betting_market_gr } void database::resolve_betting_market_group(const betting_market_group_object& betting_market_group, - const std::map& resolutions) + const std::map& resolutions, + bool do_not_remove) { bool cancel = resolutions.size() == 0; @@ -174,9 +175,11 @@ void database::resolve_betting_market_group(const betting_market_group_object& b { const betting_market_object& betting_market = *betting_market_itr; ++betting_market_itr; - remove(betting_market); + if (!do_not_remove) + remove(betting_market); } - remove(betting_market_group); + if (!do_not_remove) + remove(betting_market_group); } #if 0 diff --git a/libraries/chain/include/graphene/chain/database.hpp b/libraries/chain/include/graphene/chain/database.hpp index 571dd384..d8f69ab1 100644 --- a/libraries/chain/include/graphene/chain/database.hpp +++ b/libraries/chain/include/graphene/chain/database.hpp @@ -384,7 +384,8 @@ namespace graphene { namespace chain { void validate_betting_market_group_resolutions(const betting_market_group_object& betting_market_group, const std::map& resolutions); void resolve_betting_market_group(const betting_market_group_object& betting_market_group, - const std::map& resolutions); + const std::map& resolutions, + bool do_not_remove = false); /** * @brief Process a new bet * @param new_bet_object The new bet to process diff --git a/tests/betting/betting_tests.cpp b/tests/betting/betting_tests.cpp index 3d333e73..f47ae4f6 100644 --- a/tests/betting/betting_tests.cpp +++ b/tests/betting/betting_tests.cpp @@ -205,6 +205,16 @@ BOOST_AUTO_TEST_CASE( cancel_betting_group_test ) BOOST_CHECK_EQUAL(get_balance(alice_id, asset_id_type()), 10000000); BOOST_CHECK_EQUAL(get_balance(bob_id, asset_id_type()), 10000000); + // bet again + // have bob lay a bet for 1M (+20k fees) at 1:1 odds + place_bet(bob_id, capitals_win_market.id, bet_type::lay, asset(2000000, asset_id_type()), 2 * GRAPHENE_BETTING_ODDS_PRECISION, 1000000 / 50 /* chain defaults to 2% fees */); + // have alice back a matching bet at 1:1 odds (also costing 1.02M) + place_bet(alice_id, capitals_win_market.id, bet_type::back, asset(2000000, asset_id_type()), 2 * GRAPHENE_BETTING_ODDS_PRECISION, 1000000 / 50 /* chain defaults to 2% fees */); + + BOOST_CHECK_EQUAL(get_balance(alice_id, asset_id_type()), 10000000 - 2000000 - 20000); + BOOST_CHECK_EQUAL(get_balance(bob_id, asset_id_type()), 10000000 - 2000000 - 20000); + + } FC_LOG_AND_RETHROW() }