gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-exchange] branch master updated: bugfixes in auditor


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] branch master updated: bugfixes in auditor and rendering
Date: Thu, 04 Jan 2018 10:38:20 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 0906696  bugfixes in auditor and rendering
0906696 is described below

commit 0906696ec2949e2c9fa7a168e3d270fae1c3a905
Author: Christian Grothoff <address@hidden>
AuthorDate: Thu Jan 4 10:38:16 2018 +0100

    bugfixes in auditor and rendering
---
 contrib/auditor-report.tex.j2              |  2 +-
 src/auditor/taler-auditor.c                | 78 ++++++++++++------------------
 src/exchange/taler-exchange-httpd_refund.c |  1 -
 3 files changed, 32 insertions(+), 49 deletions(-)

diff --git a/contrib/auditor-report.tex.j2 b/contrib/auditor-report.tex.j2
index bad7397..4c979f7 100644
--- a/contrib/auditor-report.tex.j2
+++ b/contrib/auditor-report.tex.j2
@@ -337,7 +337,7 @@ any effects on its own balance, those entries are excluded 
from the total.
   {\bf Operation} & {\bf Coin public key} & \multicolumn{2}{|c|}{ {\bf 
Exchange}} & \multicolumn{2}{|c}{ {\bf Auditor}} \\
 \endfoot
   \hline
-  {\bf Total} & &
+  \multicolumn{2}{l|}{ $\sum$ {\bf Delta (Auditor-Exchange)} } &
   {{ data.total_coin_delta_plus.value }}.{{ 
data.total_coin_delta_plus.fraction }} &
   {{ data.total_coin_delta_plus.currency }} &
   - {{ data.total_coin_delta_minus.value }}.{{ 
data.total_coin_delta_minus.fraction }} &
diff --git a/src/auditor/taler-auditor.c b/src/auditor/taler-auditor.c
index 7ce2032..e807378 100644
--- a/src/auditor/taler-auditor.c
+++ b/src/auditor/taler-auditor.c
@@ -391,7 +391,7 @@ report_amount_arithmetic_inconsistency (const char 
*operation,
                      "profitable", (json_int_t) profitable));
   if (0 != profitable)
   {
-    target = profitable
+    target = (1 == profitable)
       ? &total_arithmetic_delta_plus
       : &total_arithmetic_delta_minus;
     GNUNET_break (GNUNET_OK ==
@@ -452,7 +452,7 @@ report_coin_arithmetic_inconsistency (const char *operation,
                      "profitable", (json_int_t) profitable));
   if (0 != profitable)
   {
-    target = profitable
+    target = (1 == profitable)
       ? &total_coin_delta_plus
       : &total_coin_delta_minus;
     GNUNET_break (GNUNET_OK ==
@@ -1798,7 +1798,6 @@ struct WireCheckContext
  * @param dki denomination information about the coin
  * @param tl_head head of transaction history to verify
  * @param[out] merchant_gain amount the coin contributes to the wire transfer 
to the merchant
- * @param[out] merchant_fees fees the exchange charged the merchant for the 
transaction(s)
  * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
  */
 static int
@@ -1807,8 +1806,7 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
                            const struct TALER_MerchantPublicKeyP *merchant_pub,
                            const struct 
TALER_EXCHANGEDB_DenominationKeyInformationP *dki,
                            const struct TALER_EXCHANGEDB_TransactionList 
*tl_head,
-                           struct TALER_Amount *merchant_gain,
-                           struct TALER_Amount *merchant_fees)
+                           struct TALER_Amount *merchant_gain)
 {
   struct TALER_Amount expenditures;
   struct TALER_Amount refunds;
@@ -1816,6 +1814,8 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
   struct TALER_Amount value;
   struct TALER_Amount merchant_loss;
   struct TALER_Amount merchant_delta;
+  const struct TALER_Amount *deposit_fee;
+  int refund_deposit_fee;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Checking transaction history of coin %s\n",
@@ -1833,14 +1833,13 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
                                         merchant_gain));
   GNUNET_assert (GNUNET_OK ==
                  TALER_amount_get_zero (currency,
-                                        merchant_fees));
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_amount_get_zero (currency,
                                         &merchant_loss));
   /* Go over transaction history to compute totals; note that we do not
      know the order, so instead of subtracting we compute positive
      (deposit, melt) and negative (refund) values separately here,
      and then subtract the negative from the positive after the loop. */
+  refund_deposit_fee = GNUNET_NO;
+  deposit_fee = NULL;
   for (const struct TALER_EXCHANGEDB_TransactionList *tl = tl_head;NULL != 
tl;tl = tl->next)
   {
     const struct TALER_Amount *amount_with_fee;
@@ -1872,7 +1871,7 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
       {
         struct TALER_Amount amount_without_fee;
 
-        if (GNUNET_OK !=
+       if (GNUNET_OK !=
             TALER_amount_subtract (&amount_without_fee,
                                    amount_with_fee,
                                    fee))
@@ -1891,14 +1890,7 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                     "Detected applicable deposit of %s\n",
                     TALER_amount2s (&amount_without_fee));
-        if (GNUNET_OK !=
-            TALER_amount_add (merchant_fees,
-                              merchant_fees,
-                              fee))
-        {
-          GNUNET_break (0);
-          return GNUNET_SYSERR;
-        }
+       deposit_fee = fee;      
       }
       /* Check that the fees given in the transaction list and in dki match */
       TALER_amount_ntoh (&tmp,
@@ -1976,14 +1968,7 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                     "Detected applicable refund of %s\n",
                     TALER_amount2s (amount_with_fee));
-        if (GNUNET_OK !=
-            TALER_amount_add (merchant_fees,
-                              merchant_fees,
-                              fee))
-        {
-          GNUNET_break (0);
-          return GNUNET_SYSERR;
-        }
+       refund_deposit_fee = GNUNET_YES;
       }
       /* Check that the fees given in the transaction list and in dki match */
       TALER_amount_ntoh (&tmp,
@@ -2009,9 +1994,19 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
       }
       break;
     }
-
   } /* for 'tl' */
 
+  if ( (GNUNET_YES == refund_deposit_fee) &&
+       (NULL != deposit_fee) )
+  {
+    /* We had a /deposit operation AND a /refund operation,
+       and should thus not charge the merchant the /deposit fee */
+    GNUNET_assert (GNUNET_OK ==
+                  TALER_amount_add (merchant_gain,
+                                    merchant_gain,
+                                    deposit_fee));
+  }
+  
   /* Calculate total balance change, i.e. expenditures minus refunds */
   if (GNUNET_SYSERR ==
       TALER_amount_subtract (&spent,
@@ -2023,7 +2018,7 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
                                           coin_pub,
                                           &expenditures,
                                           &refunds,
-                                          0);
+                                          1);
     return GNUNET_SYSERR;
   }
 
@@ -2042,7 +2037,8 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
     return GNUNET_SYSERR;
   }
 
-  /* Finally, update @a merchant_gain by subtracting what he "lost" from 
refunds */
+  /* Finally, update @a merchant_gain by subtracting what he "lost"
+     from refunds */
   if (GNUNET_SYSERR ==
       TALER_amount_subtract (&merchant_delta,
                              merchant_gain,
@@ -2053,7 +2049,7 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
                                           coin_pub,
                                           merchant_gain,
                                           &merchant_loss,
-                                          0);
+                                          1);
     return GNUNET_SYSERR;
   }
   *merchant_gain = merchant_delta;
@@ -2079,7 +2075,8 @@ check_transaction_history (const struct 
TALER_CoinSpendPublicKeyP *coin_pub,
  * @param h_contract_terms which proposal was this payment about
  * @param coin_pub which public key was this payment about
  * @param coin_value amount contributed by this coin in total (with fee)
- * @param coin_fee applicable fee for this coin
+ * @param deposit_fee applicable deposit fee for this coin, actual
+ *        fees charged may differ if coin was refunded
  */
 static void
 wire_transfer_information_cb (void *cls,
@@ -2091,12 +2088,11 @@ wire_transfer_information_cb (void *cls,
                               const struct GNUNET_HashCode *h_contract_terms,
                               const struct TALER_CoinSpendPublicKeyP *coin_pub,
                               const struct TALER_Amount *coin_value,
-                              const struct TALER_Amount *coin_fee)
+                              const struct TALER_Amount *deposit_fee)
 {
   struct WireCheckContext *wcc = cls;
   const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki;
   struct TALER_Amount computed_value;
-  struct TALER_Amount computed_fees;
   struct TALER_Amount coin_value_without_fee;
   struct TALER_EXCHANGEDB_TransactionList *tl;
   const struct TALER_CoinPublicInfo *coin;
@@ -2158,18 +2154,17 @@ wire_transfer_information_cb (void *cls,
                              merchant_pub,
                              dki,
                              tl,
-                             &computed_value,
-                             &computed_fees);
+                             &computed_value);
   if (GNUNET_SYSERR ==
       TALER_amount_subtract (&coin_value_without_fee,
                              coin_value,
-                             coin_fee))
+                             deposit_fee))
   {
     wcc->qs = GNUNET_DB_STATUS_HARD_ERROR;
     report_amount_arithmetic_inconsistency ("aggregation (fee structure)",
                                             rowid,
                                             coin_value,
-                                            coin_fee,
+                                            deposit_fee,
                                             -1);
     return;
   }
@@ -2184,17 +2179,6 @@ wire_transfer_information_cb (void *cls,
                                             &computed_value,
                                             -1);
   }
-  if (0 !=
-      TALER_amount_cmp (&computed_fees,
-                        coin_fee))
-  {
-    wcc->qs = GNUNET_DB_STATUS_HARD_ERROR;
-    report_amount_arithmetic_inconsistency ("aggregation (fee)",
-                                            rowid,
-                                            coin_fee,
-                                            &computed_fees,
-                                            1);
-  }
   edb->free_coin_transaction_list (edb->cls,
                                    tl);
 
diff --git a/src/exchange/taler-exchange-httpd_refund.c 
b/src/exchange/taler-exchange-httpd_refund.c
index f0aaa65..986c9d3 100644
--- a/src/exchange/taler-exchange-httpd_refund.c
+++ b/src/exchange/taler-exchange-httpd_refund.c
@@ -285,7 +285,6 @@ refund_transaction (void *cls,
   }
 
   /* check if we already send the money for the /deposit */
-  // FIXME: DB API...
   qs = TEH_plugin->test_deposit_done (TEH_plugin->cls,
                                      session,
                                      dep);

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]