solution ...issues/#10 avoid generating dividend_payout virtual operations for zero-size payouts

This commit is contained in:
Roman Olearski 2016-11-26 16:03:33 +01:00
parent 9bbf73a96a
commit 59c64efb5a

View file

@ -964,6 +964,7 @@ void schedule_pending_dividend_balances(database& db,
} }
for (const auto& pending_payout : pending_payout_balance_index.indices()) for (const auto& pending_payout : pending_payout_balance_index.indices())
if (pending_payout.pending_balance.value)
dlog("Pending payout: ${account_name} -> ${amount}", dlog("Pending payout: ${account_name} -> ${amount}",
("account_name", pending_payout.owner(db).name) ("account_name", pending_payout.owner(db).name)
("amount", asset(pending_payout.pending_balance, pending_payout.dividend_payout_asset_type))); ("amount", asset(pending_payout.pending_balance, pending_payout.dividend_payout_asset_type)));
@ -1118,7 +1119,7 @@ void process_dividend_assets(database& db)
{ {
const pending_dividend_payout_balance_for_holder_object& pending_balance_object = *pending_balance_object_iter; const pending_dividend_payout_balance_for_holder_object& pending_balance_object = *pending_balance_object_iter;
if (last_holder_account_id && *last_holder_account_id != pending_balance_object.owner) if (last_holder_account_id && *last_holder_account_id != pending_balance_object.owner && payouts_for_this_holder.size())
{ {
// we've moved on to a new account, generate the dividend payment virtual op for the previous one // we've moved on to a new account, generate the dividend payment virtual op for the previous one
db.push_applied_operation(asset_dividend_distribution_operation(dividend_holder_asset_obj.id, db.push_applied_operation(asset_dividend_distribution_operation(dividend_holder_asset_obj.id,
@ -1130,7 +1131,8 @@ void process_dividend_assets(database& db)
} }
if (is_authorized_asset(db, pending_balance_object.owner(db), pending_balance_object.dividend_payout_asset_type(db)) && if (pending_balance_object.pending_balance.value &&
is_authorized_asset(db, pending_balance_object.owner(db), pending_balance_object.dividend_payout_asset_type(db)) &&
is_asset_approved_for_distribution_account(pending_balance_object.dividend_payout_asset_type)) is_asset_approved_for_distribution_account(pending_balance_object.dividend_payout_asset_type))
{ {
dlog("Processing payout of ${asset} to account ${account}", dlog("Processing payout of ${asset} to account ${account}",
@ -1153,7 +1155,7 @@ void process_dividend_assets(database& db)
++pending_balance_object_iter; ++pending_balance_object_iter;
} }
// we will always be left with the last holder's data, generate the virtual op for it now. // we will always be left with the last holder's data, generate the virtual op for it now.
if (last_holder_account_id) if (last_holder_account_id && payouts_for_this_holder.size())
{ {
// we've moved on to a new account, generate the dividend payment virtual op for the previous one // we've moved on to a new account, generate the dividend payment virtual op for the previous one
db.push_applied_operation(asset_dividend_distribution_operation(dividend_holder_asset_obj.id, db.push_applied_operation(asset_dividend_distribution_operation(dividend_holder_asset_obj.id,