exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 382e3dfedbf3384065fc19b3ea561aed754b402f
parent 8ea9b0dad7a67f0e04debcd1f6e6621538c0613f
Author: Christian Grothoff <christian@grothoff.org>
Date:   Fri, 17 Mar 2017 17:49:55 +0100

implement more audit checks for refunds

Diffstat:
Msrc/auditor/taler-auditor.c | 43+++++++++++++++++++++++++++++++++++++++----
Msrc/include/taler_exchangedb_plugin.h | 3+++
2 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/src/auditor/taler-auditor.c b/src/auditor/taler-auditor.c @@ -1833,7 +1833,10 @@ refund_cb (void *cls, struct CoinContext *cc = cls; struct CoinSummary *cs; const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki; + struct DenominationSummary *ds; struct TALER_RefundRequestPS rr; + struct TALER_Amount amount_without_fee; + struct TALER_Amount refund_fee; cs = get_coin_summary (cc, coin_pub); @@ -1860,15 +1863,47 @@ refund_cb (void *cls, &merchant_sig->eddsa_sig, &merchant_pub->eddsa_pub)) { - report_row_inconsistency ("deposit", + report_row_inconsistency ("refund", rowid, - "invalid signature for coin deposit"); + "invalid signature for refund"); return GNUNET_OK; } - // TODO: update denomination key balance! + TALER_amount_ntoh (&refund_fee, + &dki->properties.fee_refund); + if (GNUNET_OK != + TALER_amount_subtract (&amount_without_fee, + amount_with_fee, + &refund_fee)) + { + report_row_inconsistency ("refund", + rowid, + "refunded amount smaller than refund fee"); + return GNUNET_OK; + } + + /* update coin's denomination balance */ + ds = get_denomination_summary (cc, + &dki->properties.denom_hash); + if (GNUNET_OK != + TALER_amount_add (&ds->denom_balance, + &ds->denom_balance, + &amount_without_fee)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + /* update total refund fee balance */ + if (GNUNET_OK != + TALER_amount_add (&cc->refund_fee_balance, + &cc->refund_fee_balance, + &refund_fee)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } - // TODO: update expected amounts in 'cc' return GNUNET_OK; } diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h @@ -1738,6 +1738,9 @@ struct TALER_EXCHANGEDB_Plugin /** + * FIXME: this is NOT the API we want here, as we cannot exactly determine the + * important WTID from the callback! + * * Function called to select all wire transfers the exchange * executed or plans to execute. *