gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: make stefan_lin a float, as it s


From: gnunet
Subject: [taler-exchange] branch master updated: make stefan_lin a float, as it should have been in the first place
Date: Sat, 14 Oct 2023 00:14:08 +0200

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 8afe2a17 make stefan_lin a float, as it should have been in the first 
place
8afe2a17 is described below

commit 8afe2a17f05ce158f854d1be7af8ec058c0da08b
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Sat Oct 14 00:14:03 2023 +0200

    make stefan_lin a float, as it should have been in the first place
---
 doc/prebuilt                             |  2 +-
 src/exchange/taler-exchange-httpd.c      | 14 ++++++-------
 src/exchange/taler-exchange-httpd.h      |  2 +-
 src/exchange/taler-exchange-httpd_keys.c |  4 ++--
 src/include/taler_exchange_service.h     |  2 +-
 src/lib/exchange_api_handle.c            | 18 ++++++++--------
 src/lib/exchange_api_stefan.c            | 35 ++++++++++++++------------------
 src/lib/test_stefan.c                    | 19 ++++-------------
 8 files changed, 39 insertions(+), 57 deletions(-)

diff --git a/doc/prebuilt b/doc/prebuilt
index 1576678c..09a33a50 160000
--- a/doc/prebuilt
+++ b/doc/prebuilt
@@ -1 +1 @@
-Subproject commit 1576678c0f195e07c1e1d84a9952ccd17106c0ec
+Subproject commit 09a33a50d9b3b400f8a515082c888918cbf4e1b5
diff --git a/src/exchange/taler-exchange-httpd.c 
b/src/exchange/taler-exchange-httpd.c
index bcf5b67d..5bc118e3 100644
--- a/src/exchange/taler-exchange-httpd.c
+++ b/src/exchange/taler-exchange-httpd.c
@@ -161,7 +161,7 @@ struct TALER_Amount TEH_stefan_log;
 /**
  * Linear STEFAN parameter.
  */
-struct TALER_Amount TEH_stefan_lin;
+float TEH_stefan_lin;
 
 /**
  * Default number of fractional digits to render
@@ -2112,14 +2112,12 @@ exchange_serve_process_config (void)
                                           &TEH_stefan_log));
   }
   if (GNUNET_OK !=
-      TALER_config_get_amount (TEH_cfg,
-                               "exchange",
-                               "STEFAN_LIN",
-                               &TEH_stefan_lin))
+      GNUNET_CONFIGURATION_get_value_float (TEH_cfg,
+                                            "exchange",
+                                            "STEFAN_LIN",
+                                            &TEH_stefan_lin))
   {
-    GNUNET_assert (GNUNET_OK ==
-                   TALER_amount_set_zero (TEH_currency,
-                                          &TEH_stefan_lin));
+    TEH_stefan_lin = 0.0f;
   }
 
   if (0 != strcmp (TEH_currency,
diff --git a/src/exchange/taler-exchange-httpd.h 
b/src/exchange/taler-exchange-httpd.h
index 1ab77291..5fa942b1 100644
--- a/src/exchange/taler-exchange-httpd.h
+++ b/src/exchange/taler-exchange-httpd.h
@@ -110,7 +110,7 @@ extern struct TALER_Amount TEH_stefan_log;
 /**
  * Linear STEFAN parameter.
  */
-extern struct TALER_Amount TEH_stefan_lin;
+extern float TEH_stefan_lin;
 
 /**
  * Default ways how to render #TEH_currency amounts.
diff --git a/src/exchange/taler-exchange-httpd_keys.c 
b/src/exchange/taler-exchange-httpd_keys.c
index a0cd9441..27b9d6c7 100644
--- a/src/exchange/taler-exchange-httpd_keys.c
+++ b/src/exchange/taler-exchange-httpd_keys.c
@@ -2497,8 +2497,8 @@ create_krd (struct TEH_KeyStateHandle *ksh,
                             &TEH_stefan_abs),
     TALER_JSON_pack_amount ("stefan_log",
                             &TEH_stefan_log),
-    TALER_JSON_pack_amount ("stefan_lin",
-                            &TEH_stefan_lin),
+    GNUNET_JSON_pack_double ("stefan_lin",
+                             (double) TEH_stefan_lin),
     GNUNET_JSON_pack_string ("asset_type",
                              asset_type),
     GNUNET_JSON_pack_bool ("rewards_allowed",
diff --git a/src/include/taler_exchange_service.h 
b/src/include/taler_exchange_service.h
index bf584036..30c966d7 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -534,7 +534,7 @@ struct TALER_EXCHANGE_Keys
   /**
    * Linear STEFAN parameter.
    */
-  struct TALER_Amount stefan_lin;
+  double stefan_lin;
 
   /**
    * Length of @e accounts array.
diff --git a/src/lib/exchange_api_handle.c b/src/lib/exchange_api_handle.c
index 811120a8..50a1a9ce 100644
--- a/src/lib/exchange_api_handle.c
+++ b/src/lib/exchange_api_handle.c
@@ -933,9 +933,8 @@ decode_keys_json (const json_t *resp_obj,
           "stefan_log",
           currency,
           &key_data->stefan_log),
-        TALER_JSON_spec_amount (
+        GNUNET_JSON_spec_double (
           "stefan_lin",
-          currency,
           &key_data->stefan_lin),
         GNUNET_JSON_spec_end ()
       };
@@ -1346,10 +1345,11 @@ keys_completed_cb (void *cls,
               GNUNET_TIME_timestamp2s (gkh->expire));
   if (GNUNET_TIME_absolute_is_past (gkh->expire.abs_time))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "Exchange failed to give expiration time, assuming in %s\n",
-                GNUNET_TIME_relative2s (DEFAULT_EXPIRATION,
-                                        true));
+    if (MHD_HTTP_OK == response_code)
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "Exchange failed to give expiration time, assuming in %s\n",
+                  GNUNET_TIME_relative2s (DEFAULT_EXPIRATION,
+                                          true));
     gkh->expire
       = GNUNET_TIME_absolute_to_timestamp (
           GNUNET_TIME_relative_to_absolute (DEFAULT_EXPIRATION));
@@ -1689,7 +1689,7 @@ TALER_EXCHANGE_get_keys (
   GNUNET_break (CURLE_OK ==
                 curl_easy_setopt (eh,
                                   CURLOPT_VERBOSE,
-                                  0));
+                                  1));
   GNUNET_break (CURLE_OK ==
                 curl_easy_setopt (eh,
                                   CURLOPT_TIMEOUT,
@@ -2388,8 +2388,8 @@ TALER_EXCHANGE_keys_to_json (const struct 
TALER_EXCHANGE_Keys *kd)
                             &kd->stefan_abs),
     TALER_JSON_pack_amount ("stefan_log",
                             &kd->stefan_log),
-    TALER_JSON_pack_amount ("stefan_lin",
-                            &kd->stefan_lin),
+    GNUNET_JSON_pack_double ("stefan_lin",
+                             kd->stefan_lin),
     GNUNET_JSON_pack_string ("asset_type",
                              kd->asset_type),
     GNUNET_JSON_pack_data_auto ("master_public_key",
diff --git a/src/lib/exchange_api_stefan.c b/src/lib/exchange_api_stefan.c
index 19e8ce25..c3576cd7 100644
--- a/src/lib/exchange_api_stefan.c
+++ b/src/lib/exchange_api_stefan.c
@@ -110,7 +110,7 @@ TALER_EXCHANGE_keys_stefan_b2n (
 {
   const struct TALER_Amount *min;
   double log_d = amount_to_double (&keys->stefan_log);
-  double lin_d = amount_to_double (&keys->stefan_lin);
+  double lin_d = keys->stefan_lin;
   double abs_d = amount_to_double (&keys->stefan_abs);
   double bru_d = amount_to_double (brut);
   double min_d;
@@ -125,9 +125,7 @@ TALER_EXCHANGE_keys_stefan_b2n (
   min = get_unit (keys);
   if (NULL == min)
     return GNUNET_SYSERR;
-  if (1 != TALER_amount_cmp (min,
-                             /* <= */
-                             &keys->stefan_lin))
+  if (1.0f <= keys->stefan_lin)
   {
     /* This cannot work, linear STEFAN fee estimate always
        exceed any gross amount. */
@@ -137,7 +135,7 @@ TALER_EXCHANGE_keys_stefan_b2n (
   min_d = amount_to_double (min);
   fee_d = abs_d
           + log_d * log2 (bru_d / min_d)
-          + lin_d * (bru_d / min_d);
+          + lin_d * bru_d;
   if (fee_d > bru_d)
   {
     GNUNET_assert (GNUNET_OK ==
@@ -155,7 +153,7 @@ TALER_EXCHANGE_keys_stefan_b2n (
 
 /**
  * Our function
- * f(x) := ne + ab + lo * log2(x/mi) + li * x / mi - x
+ * f(x) := ne + ab + lo * log2(x/mi) + li * x - x
  * for #newton().
  */
 static double
@@ -166,13 +164,13 @@ eval_f (double mi,
         double ne,
         double x)
 {
-  return ne + ab + lo * log2 (x / mi) + li * (x / mi) - x;
+  return ne + ab + lo * log2 (x / mi) + li * x - x;
 }
 
 
 /**
  * Our function
- * f'(x) := lo / log(2) / x + li / mi - 1
+ * f'(x) := lo / log(2) / x + li - 1
  * for #newton().
  */
 static double
@@ -182,7 +180,7 @@ eval_fp (double mi,
          double ne,
          double x)
 {
-  return lo / log (2) / x + li / mi - 1;
+  return lo / log (2) / x + li - 1;
 }
 
 
@@ -200,24 +198,23 @@ newton (double mi,
 {
   const double eps = 0.00000001; /* max error allowed */
   double min_ab = ne + ab; /* result cannot be smaller than this! */
-  double lin_factor = (mi - li); /* how many coins do we need per coin for 
linear factor? */
   /* compute lower bounds by various heuristics */
-  double min_ab_li = min_ab + min_ab * li / lin_factor;
+  double min_ab_li = min_ab + min_ab * li;
   double min_ab_li_lo = min_ab_li + log2 (min_ab_li / mi) * lo;
   double min_ab_lo = min_ab + log2 (min_ab / mi) * lo;
-  double min_ab_lo_li = min_ab_lo + min_ab_lo * li / lin_factor;
+  double min_ab_lo_li = min_ab_lo + min_ab_lo * li;
   /* take global lower bound */
   double x_min = GNUNET_MAX (min_ab_lo_li,
                              min_ab_li_lo);
   double x = x_min; /* use lower bound as starting point */
 
   /* Objective: invert
-     ne := br - ab - lo * log2 (br/mi) - li (br/mi)
+     ne := br - ab - lo * log2 (br/mi) - li * br
      to find 'br'.
      Method: use Newton's method to find root of:
-     f(x) := ne + ab + lo * log2 (x/mi) + li * x / mi - x
+     f(x) := ne + ab + lo * log2 (x/mi) + li * x - x
      using also
-     f'(x) := lo / log(2) / x  + li / mi - 1
+     f'(x) := lo / log(2) / x  + li - 1
   */
   /* Loop to abort in case of divergence;
      100 is already very high, 2-4 is normal! */
@@ -234,7 +231,7 @@ newton (double mi,
                   i,
                   x_min,
                   x_new,
-                  x_new - ab - li * (x_new / mi) - lo * log2 (x / mi));
+                  x_new - ab - li * x_new - lo * log2 (x / mi));
       return x_new;
     }
     if (x_new < x_min)
@@ -261,7 +258,7 @@ TALER_EXCHANGE_keys_stefan_n2b (
   struct TALER_Amount *brut)
 {
   const struct TALER_Amount *min;
-  double lin_d = amount_to_double (&keys->stefan_lin);
+  double lin_d = keys->stefan_lin;
   double log_d = amount_to_double (&keys->stefan_log);
   double abs_d = amount_to_double (&keys->stefan_abs);
   double net_d = amount_to_double (net);
@@ -276,9 +273,7 @@ TALER_EXCHANGE_keys_stefan_n2b (
   min = get_unit (keys);
   if (NULL == min)
     return GNUNET_SYSERR;
-  if (1 != TALER_amount_cmp (min,
-                             /* <= */
-                             &keys->stefan_lin))
+  if (1.0f <= keys->stefan_lin)
   {
     /* This cannot work, linear STEFAN fee estimate always
        exceed any gross amount. */
diff --git a/src/lib/test_stefan.c b/src/lib/test_stefan.c
index 6941538f..838cca76 100644
--- a/src/lib/test_stefan.c
+++ b/src/lib/test_stefan.c
@@ -100,11 +100,7 @@ main (int argc,
   GNUNET_assert (GNUNET_OK ==
                  TALER_string_to_amount ("MAGIC:0.13",
                                          &keys.stefan_log));
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount ("MAGIC:0.15",
-                                         &keys.stefan_lin));
-
-  /* stefan_lin >= unit value, not allowed, test we fail */
+  keys.stefan_lin = 1.15;
   GNUNET_assert (GNUNET_OK ==
                  TALER_string_to_amount ("MAGIC:4",
                                          &brut));
@@ -123,12 +119,7 @@ main (int argc,
                  TALER_EXCHANGE_keys_stefan_n2b (&keys,
                                                  &net,
                                                  &brut));
-
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount ("MAGIC:0.13",
-                                         &keys.stefan_lin));
-
-  /* stefan_lin == unit value, not allowed, test we fail */
+  keys.stefan_lin = 1.0;
   GNUNET_assert (GNUNET_OK ==
                  TALER_string_to_amount ("MAGIC:4",
                                          &brut));
@@ -148,14 +139,12 @@ main (int argc,
                                                  &net,
                                                  &brut));
   GNUNET_assert (0 == GNUNET_get_log_skip ());
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_string_to_amount ("MAGIC:0.1",
-                                         &keys.stefan_lin));
+  keys.stefan_lin = 0.1;
 
   /* try various values for lin and log STEFAN values */
   for (unsigned int li = 1; li < 13; li += 1)
   {
-    keys.stefan_lin.fraction = li * TALER_AMOUNT_FRAC_BASE / 100;
+    keys.stefan_lin = 1.0 * li / 100.0;
 
     for (unsigned int lx = 1; lx < 100; lx += 1)
     {

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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