From 9445343ec5c35a79b8cd8a2a15e92ca7435bda46 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 27 Mar 2020 09:34:58 +0100 Subject: consider that deposit fee is discounted when refund fee is applied --- src/exchangedb/exchangedb_transactions.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/exchangedb/exchangedb_transactions.c b/src/exchangedb/exchangedb_transactions.c index c862f5a0b..ade7f9cf2 100644 --- a/src/exchangedb/exchangedb_transactions.c +++ b/src/exchangedb/exchangedb_transactions.c @@ -40,10 +40,13 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( { struct TALER_Amount spent = *off; struct TALER_Amount refunded; + struct TALER_Amount deposit_fee; + int have_refund; GNUNET_assert (GNUNET_OK == TALER_amount_get_zero (spent.currency, &refunded)); + have_refund = GNUNET_NO; for (struct TALER_EXCHANGEDB_TransactionList *pos = tl; NULL != pos; pos = pos->next) @@ -60,6 +63,7 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( GNUNET_break (0); return GNUNET_SYSERR; } + deposit_fee = pos->details.deposit->deposit_fee; break; case TALER_EXCHANGEDB_TT_MELT: /* spent += pos->amount_with_fee */ @@ -83,13 +87,14 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( return GNUNET_SYSERR; } if (GNUNET_OK != - TALER_amount_subtract (&refunded, - &refunded, - &pos->details.refund->refund_fee)) + TALER_amount_add (&spent, + &spent, + &pos->details.refund->refund_fee)) { GNUNET_break (0); return GNUNET_SYSERR; } + have_refund = GNUNET_YES; break; case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP: /* refunded += pos->value */ @@ -126,6 +131,18 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( break; } } + if (have_refund) + { + /* If we gave any refund, also discount ONE deposit fee */ + if (GNUNET_OK != + TALER_amount_add (&refunded, + &refunded, + &deposit_fee)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + } /* spent = spent - refunded */ if (GNUNET_SYSERR == TALER_amount_subtract (&spent, -- cgit v1.2.3