diff options
author | Christian Grothoff <christian@grothoff.org> | 2020-03-27 09:34:58 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-03-27 09:34:58 +0100 |
commit | 9445343ec5c35a79b8cd8a2a15e92ca7435bda46 (patch) | |
tree | e0dc7e6a07d3bcb510509606611cdd3c358a24c7 /src/exchangedb | |
parent | f052527ea50e9e6b1de165833e83d7f191a121d1 (diff) |
consider that deposit fee is discounted when refund fee is applied
Diffstat (limited to 'src/exchangedb')
-rw-r--r-- | src/exchangedb/exchangedb_transactions.c | 23 |
1 files 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, |