Pay the rake fee to the dividend account of the core asset, not
the dividend account of the buy-in asset
This commit is contained in:
parent
8ef5335a70
commit
06a297d811
2 changed files with 29 additions and 33 deletions
|
|
@ -304,53 +304,51 @@ namespace graphene { namespace chain {
|
||||||
const tournament_details_object& details = tournament_obj.tournament_details_id(event.db);
|
const tournament_details_object& details = tournament_obj.tournament_details_id(event.db);
|
||||||
share_type total_prize = 0;
|
share_type total_prize = 0;
|
||||||
for (const auto& payer_pair : details.payers)
|
for (const auto& payer_pair : details.payers)
|
||||||
{
|
total_prize += payer_pair.second;
|
||||||
total_prize += payer_pair.second;
|
|
||||||
}
|
|
||||||
assert(total_prize == tournament_obj.prize_pool);
|
assert(total_prize == tournament_obj.prize_pool);
|
||||||
#endif
|
#endif
|
||||||
assert(event.match.match_winners.size() == 1);
|
assert(event.match.match_winners.size() == 1);
|
||||||
const account_id_type& winner = *event.match.match_winners.begin();
|
const account_id_type& winner = *event.match.match_winners.begin();
|
||||||
uint16_t rake_fee_percentage = event.db.get_global_properties().parameters.rake_fee_percentage;
|
uint16_t rake_fee_percentage = event.db.get_global_properties().parameters.rake_fee_percentage;
|
||||||
|
|
||||||
|
// check whether the core asset pays dividends. If so, we transfer the rake fee
|
||||||
|
// to the core asset's dividend account
|
||||||
|
const asset_object& core_asset_obj = asset_id_type()(event.db);
|
||||||
|
optional<asset_dividend_data_id_type> dividend_id = core_asset_obj.dividend_data_id;
|
||||||
|
|
||||||
share_type rake_amount = 0;
|
share_type rake_amount = 0;
|
||||||
|
if (dividend_id)
|
||||||
const asset_object & asset_obj = tournament_obj.options.buy_in.asset_id(event.db);
|
rake_amount = (fc::uint128_t(tournament_obj.prize_pool.value) * rake_fee_percentage / GRAPHENE_1_PERCENT / 100).to_uint64();
|
||||||
optional<asset_dividend_data_id_type> dividend_id = asset_obj.dividend_data_id;
|
|
||||||
|
|
||||||
if (dividend_id.valid())
|
|
||||||
{
|
|
||||||
rake_amount = (fc::uint128_t(tournament_obj.prize_pool.value) * rake_fee_percentage / GRAPHENE_1_PERCENT / 100).to_uint64();
|
|
||||||
}
|
|
||||||
asset won_prize(tournament_obj.prize_pool - rake_amount, tournament_obj.options.buy_in.asset_id);
|
asset won_prize(tournament_obj.prize_pool - rake_amount, tournament_obj.options.buy_in.asset_id);
|
||||||
tournament_payout_operation op;
|
tournament_payout_operation op;
|
||||||
|
|
||||||
if (won_prize.amount.value)
|
if (won_prize.amount.value)
|
||||||
{
|
{
|
||||||
// Adjusting balance of winner
|
// Adjusting balance of winner
|
||||||
event.db.adjust_balance(winner, won_prize);
|
event.db.adjust_balance(winner, won_prize);
|
||||||
|
|
||||||
// Generating a virtual operation that shows the payment
|
// Generating a virtual operation that shows the payment
|
||||||
op.tournament_id = tournament_obj.id;
|
op.tournament_id = tournament_obj.id;
|
||||||
op.payout_amount = won_prize;
|
op.payout_amount = won_prize;
|
||||||
op.payout_account_id = winner;
|
op.payout_account_id = winner;
|
||||||
op.type = payout_type::prize_award;
|
op.type = payout_type::prize_award;
|
||||||
event.db.push_applied_operation(op);
|
event.db.push_applied_operation(op);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dividend_id.valid() && rake_amount.value)
|
if (dividend_id && rake_amount.value)
|
||||||
{
|
{
|
||||||
// Adjusting balance of dividend_distribution_account
|
// Adjusting balance of dividend_distribution_account
|
||||||
const asset_dividend_data_id_type& asset_dividend_data_id_= *dividend_id;
|
const asset_dividend_data_id_type& asset_dividend_data_id_= *dividend_id;
|
||||||
const asset_dividend_data_object& dividend_obj = asset_dividend_data_id_(event.db);
|
const asset_dividend_data_object& dividend_obj = asset_dividend_data_id_(event.db);
|
||||||
const account_id_type& rake_account_id = dividend_obj.dividend_distribution_account;
|
const account_id_type& rake_account_id = dividend_obj.dividend_distribution_account;
|
||||||
asset rake(rake_amount, tournament_obj.options.buy_in.asset_id);
|
asset rake(rake_amount, tournament_obj.options.buy_in.asset_id);
|
||||||
event.db.adjust_balance(rake_account_id, rake);
|
event.db.adjust_balance(rake_account_id, rake);
|
||||||
|
|
||||||
// Generating a virtual operation that shows the payment
|
// Generating a virtual operation that shows the payment
|
||||||
op.payout_amount = rake;
|
op.payout_amount = rake;
|
||||||
op.payout_account_id = rake_account_id;
|
op.payout_account_id = rake_account_id;
|
||||||
op.type = payout_type::rake_fee;
|
op.type = payout_type::rake_fee;
|
||||||
event.db.push_applied_operation(op);
|
event.db.push_applied_operation(op);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -410,8 +410,6 @@ BOOST_AUTO_TEST_CASE(binned_order_books)
|
||||||
idump((*bet_iter));
|
idump((*bet_iter));
|
||||||
++bet_iter;
|
++bet_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue