gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated (acbee867 -> 89a9224c)


From: gnunet
Subject: [taler-exchange] branch master updated (acbee867 -> 89a9224c)
Date: Sat, 22 Apr 2023 15:41:37 +0200

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

oec pushed a change to branch master
in repository exchange.

    from acbee867 simplify batch insert: no cursor where not required, replace 
out_reserve_found with ruuid being allowed to remain NULL
     new 37dd5bed -added FIXME
     new 12681dfa WiP: age-withdraw, adjust schema and DB-handlers, cleanup 
FIXME's, 8/n
     new 89a9224c Merge branch 'master' of ssh://git.taler.net/exchange

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/exchange/taler-exchange-httpd_age-withdraw.c   |  6 +-
 .../taler-exchange-httpd_age-withdraw_reveal.c     | 64 ++++++++++++++++++----
 src/exchangedb/0002-refresh_revealed_coins.sql     |  3 +
 src/exchangedb/0003-withdraw_age_commitments.sql   |  9 +--
 src/exchangedb/0003-withdraw_age_reveals.sql       | 51 ++++++++++++-----
 src/exchangedb/pg_get_age_withdraw_info.c          |  8 +--
 src/exchangedb/pg_insert_records_by_table.c        | 54 ++++++++++++------
 src/exchangedb/pg_lookup_records_by_table.c        | 54 ++++++++++++------
 src/exchangedb/pg_lookup_serial_by_table.c         | 12 ++--
 src/exchangedb/plugin_exchangedb_postgres.c        |  1 +
 src/include/taler_exchangedb_plugin.h              | 23 ++++----
 11 files changed, 187 insertions(+), 98 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_age-withdraw.c 
b/src/exchange/taler-exchange-httpd_age-withdraw.c
index 170cd06a..0978421a 100644
--- a/src/exchange/taler-exchange-httpd_age-withdraw.c
+++ b/src/exchange/taler-exchange-httpd_age-withdraw.c
@@ -222,7 +222,6 @@ age_withdraw_transaction (void *cls,
   awc->kyc.ok = true;
   qs = TEH_plugin->do_age_withdraw (TEH_plugin->cls,
                                     &awc->commitment,
-                                    awc->now,
                                     &found,
                                     &balance_ok,
                                     &ruuid);
@@ -312,7 +311,7 @@ TEH_handler_age_withdraw (struct TEH_RequestContext *rc,
                           const json_t *root)
 {
   MHD_RESULT mhd_ret;
-  struct AgeWithdrawContext awc;
+  struct AgeWithdrawContext awc = {0};
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_fixed_auto ("reserve_sig",
                                  &awc.commitment.reserve_sig),
@@ -321,12 +320,11 @@ TEH_handler_age_withdraw (struct TEH_RequestContext *rc,
     TALER_JSON_spec_amount ("amount",
                             TEH_currency,
                             &awc.commitment.amount_with_fee),
-    GNUNET_JSON_spec_uint32 ("max_age",
+    GNUNET_JSON_spec_uint16 ("max_age",
                              &awc.commitment.max_age),
     GNUNET_JSON_spec_end ()
   };
 
-  memset (&awc, 0, sizeof (awc));
   awc.commitment.reserve_pub = *reserve_pub;
 
 
diff --git a/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c 
b/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
index 50d524a2..31ff57c6 100644
--- a/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
+++ b/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
@@ -306,7 +306,7 @@ find_original_commitment (
     break;
 
   case GNUNET_DB_STATUS_SOFT_ERROR:
-  /* FIXME:oec: Do we queue a result in this case or retry? */
+  /* FIXME oec: Do we queue a result in this case or retry? */
   default:
     GNUNET_break (0);       /* should be impossible */
     *result = TALER_MHD_reply_with_error (connection,
@@ -564,7 +564,7 @@ verify_commitment_and_max_age (
   {
     size_t k = 0; /* either 0 or 1, to index into coin_evs */
 
-    for (size_t idx = 0; idx<3; idx++)
+    for (size_t idx = 0; idx<TALER_CNC_KAPPA; idx++)
     {
       if (idx == (size_t) noreveal_idx)
       {
@@ -576,12 +576,13 @@ verify_commitment_and_max_age (
       {
         /* FIXME:oec: Refactor this block out into its own function */
 
-        size_t j = 2 * c + k; /* Index into disclosed_coin_secrets[] */
+        size_t j = (TALER_CNC_KAPPA - 1) * c + k; /* Index into 
disclosed_coin_secrets[] */
         const struct TALER_PlanchetMasterSecretP *secret;
         struct TALER_AgeCommitmentHash ach;
+        struct TALER_BlindedCoinHashP bch;
 
         GNUNET_assert (k<2);
-        GNUNET_assert (num_coins * (TALER_CNC_KAPPA - 1) > j);
+        GNUNET_assert ((TALER_CNC_KAPPA - 1) * num_coins  > j);
 
         secret = &disclosed_coin_secrets[j];
         k++;
@@ -614,7 +615,6 @@ verify_commitment_and_max_age (
         {
           struct TALER_CoinPubHashP c_hash;
           struct TALER_PlanchetDetail detail;
-          struct TALER_BlindedCoinHashP bch;
           struct TALER_CoinSpendPrivateKeyP coin_priv;
           union TALER_DenominationBlindingKeyP bks;
           struct TALER_ExchangeWithdrawValues alg_values = {
@@ -640,9 +640,7 @@ verify_commitment_and_max_age (
                                                    false,
                                                    &alg_values.details.
                                                    cs_values);
-
-#pragma message ("FIXME:oec: return value of needs handling!")
-              /* FIXME:oec: Handle error */
+              /* FIXME Handle error? */
               GNUNET_assert (TALER_EC_NONE == ec);
             }
           }
@@ -692,10 +690,13 @@ verify_commitment_and_max_age (
             return ret;
           }
 
-          GNUNET_CRYPTO_hash_context_read (hash_context,
-                                           &detail.blinded_planchet,
-                                           sizeof(detail.blinded_planchet));
         }
+
+        /* Continue the running hash of all coin hashes with the calculated
+         * hash-value of the current, disclosed coin */
+        GNUNET_CRYPTO_hash_context_read (hash_context,
+                                         &bch,
+                                         sizeof(bch));
       }
     }
   }
@@ -722,6 +723,37 @@ verify_commitment_and_max_age (
 }
 
 
+/**
+ * @brief Signs and persists the undisclosed coins
+ *
+ * @param connection HTTP-connection to the client
+ * @param h_commitment_orig Original commitment
+ * @param num_coins Number of coins
+ * @param coin_evs The Hashes of the undisclosed, blinded coins, @a num_coins 
many
+ * @param denom_keys The array of denomination keys, @a num_coins. Needed to 
detect Clause-Schnorr-based denominations
+ * @param[out] result On error, a HTTP-response will be queued and result set 
accordingly
+ * @return GNUNET_OK on success, GNUNET_SYSERR otherwise
+ */
+static enum GNUNET_GenericReturnValue
+sign_and_persist_blinded_coins (
+  struct MHD_Connection *connection,
+  const struct TALER_AgeWithdrawCommitmentHashP *h_commitment_orig,
+  const uint32_t num_coins,
+  const struct TALER_BlindedCoinHashP *coin_evs,
+  const struct TEH_DenominationKey *denom_keys,
+  MHD_RESULT *result)
+{
+  enum GNUNET_GenericReturnValue ret = GNUNET_SYSERR;
+
+  /* TODO[oec]:
+   * - sign the planchets
+   * - in a transaction: save the coins.
+   */
+  #pragma message "FIXME[oec]: implement sign_and_persist_blinded_coins"
+  return ret;
+}
+
+
 MHD_RESULT
 TEH_handler_age_withdraw_reveal (
   struct TEH_RequestContext *rc,
@@ -803,7 +835,15 @@ TEH_handler_age_withdraw_reveal (
           &result))
       break;
 
-    /* TODO:oec: sign the coins */
+    /* Finally, sign and persist the coins */
+    if (GNUNET_OK != sign_and_persist_blinded_coins (
+          rc->connection,
+          &actx.commitment.h_commitment,
+          actx.num_coins,
+          actx.coin_evs,
+          actx.denom_keys,
+          &result))
+      break;
 
   } while(0);
 
diff --git a/src/exchangedb/0002-refresh_revealed_coins.sql 
b/src/exchangedb/0002-refresh_revealed_coins.sql
index 912e4bbb..5fd315ba 100644
--- a/src/exchangedb/0002-refresh_revealed_coins.sql
+++ b/src/exchangedb/0002-refresh_revealed_coins.sql
@@ -62,6 +62,9 @@ BEGIN
     ,table_name
     ,partition_suffix
   );
+  --
+  -- FIXME: Add comment for link_sig
+  --
   PERFORM comment_partitioned_column(
      'envelope of the new coin to be signed'
     ,'coin_ev'
diff --git a/src/exchangedb/0003-withdraw_age_commitments.sql 
b/src/exchangedb/0003-withdraw_age_commitments.sql
index 6c153598..b8451129 100644
--- a/src/exchangedb/0003-withdraw_age_commitments.sql
+++ b/src/exchangedb/0003-withdraw_age_commitments.sql
@@ -33,7 +33,6 @@ BEGIN
       ',reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)'
       ',reserve_sig BYTEA CHECK (LENGTH(reserve_sig)=64)'
       ',noreveal_index INT4 NOT NULL'
-      ',timestamp INT8 NOT NULL'
     ') %s ;'
     ,table_name
     ,'PARTITION BY HASH (reserve_pub)'
@@ -51,7 +50,7 @@ BEGIN
     ,partition_suffix
   );
   PERFORM comment_partitioned_column(
-     'The maximum age that the client commits to with this request'
+     'The maximum age (in years) that the client commits to with this request'
     ,'max_age'
     ,table_name
     ,partition_suffix
@@ -74,12 +73,6 @@ BEGIN
     ,table_name
     ,partition_suffix
   );
-  PERFORM comment_partitioned_column(
-     'Timestamp with the time when the withdraw-age request was received by 
the exchange'
-    ,'timestamp'
-    ,table_name
-    ,partition_suffix
-  );
 END
 $$;
 
diff --git a/src/exchangedb/0003-withdraw_age_reveals.sql 
b/src/exchangedb/0003-withdraw_age_reveals.sql
index 3353d936..af66eab7 100644
--- a/src/exchangedb/0003-withdraw_age_reveals.sql
+++ b/src/exchangedb/0003-withdraw_age_reveals.sql
@@ -14,22 +14,25 @@
 -- TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 --
 
-CREATE FUNCTION create_table_withdraw_age_reveals(
+CREATE FUNCTION create_table_withdraw_age_revealed_coins(
   IN partition_suffix VARCHAR DEFAULT NULL
 )
 RETURNS VOID
 LANGUAGE plpgsql
 AS $$
 DECLARE
-  table_name VARCHAR DEFAULT 'withdraw_age_reveals';
+  table_name VARCHAR DEFAULT 'withdraw_age_revealed_coins';
 BEGIN
   PERFORM create_partitioned_table(
     'CREATE TABLE %I'
-      '(withdraw_age_reveals_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- 
UNIQUE
-      ',h_commitment BYTEA NOT NULL CHECK (LENGTH(h_commitment)=32)'
+      '(withdraw_age_revealed_coins_id BIGINT GENERATED BY DEFAULT AS 
IDENTITY' -- UNIQUE
+      ',h_commitment BYTEA NOT NULL CHECK (LENGTH(h_commitment)=64)'
       ',freshcoin_index INT4 NOT NULL'
       ',denominations_serial INT8 NOT NULL'
-      ',h_coin_ev BYTEA CHECK (LENGTH(h_coin_ev)=32)'
+      ',coin_ev BYTEA NOT NULL'
+      ',h_coin_ev BYTEA CHECK (LENGTH(h_coin_ev)=64)'
+      ',ev_sig BYTEA NOT NULL'
+      ',ewv BYTEA NOT NULL'
     ') %s ;'
     ,table_name
     ,'PARTITION BY HASH (h_commitment)'
@@ -59,29 +62,47 @@ BEGIN
     ,partition_suffix
   );
   PERFORM comment_partitioned_column(
-     'Hash of the blinded coins'
+     'Envelope of the new coin to be signed'
+    ,'coin_ev'
+    ,table_name
+    ,partition_suffix
+  );
+  PERFORM comment_partitioned_column(
+     'Hash of the envelope of the new coin to be signed (for lookups)'
     ,'h_coin_ev'
     ,table_name
     ,partition_suffix
   );
+  PERFORM comment_partitioned_column(
+     'Exchange signature over the envelope'
+    ,'ev_sig'
+    ,table_name
+    ,partition_suffix
+  );
+  PERFORM comment_partitioned_column(
+     'Exchange contributed values in the creation of the fresh coin (see /csr)'
+    ,'ewv'
+    ,table_name
+    ,partition_suffix
+  );
 END
 $$;
 
-CREATE FUNCTION constrain_table_withdraw_age_reveals(
+CREATE FUNCTION constrain_table_withdraw_age_revealed_coins(
   IN partition_suffix VARCHAR
 )
 RETURNS void
 LANGUAGE plpgsql
 AS $$
 DECLARE
-  table_name VARCHAR DEFAULT 'withdraw_age_reveals';
+  table_name VARCHAR DEFAULT 'withdraw_age_revealed_coins';
 BEGIN
   table_name = concat_ws('_', table_name, partition_suffix);
 
   EXECUTE FORMAT (
     'ALTER TABLE ' || table_name ||
-    ' ADD CONSTRAINT ' || table_name || '_withdraw_age_reveals_id_key'
-    ' UNIQUE (withdraw_age_reveals_id);'
+    ' ADD CONSTRAINT ' || table_name || '_withdraw_age_revealed_coins_id_key'
+    ' UNIQUE (withdraw_age_revealed_coins_id);'
   );
   EXECUTE FORMAT (
     'ALTER TABLE ' || table_name ||
@@ -91,12 +112,12 @@ BEGIN
 END
 $$;
 
-CREATE FUNCTION foreign_table_withdraw_age_reveals()
+CREATE FUNCTION foreign_table_withdraw_age_revealed_coins()
 RETURNS void
 LANGUAGE plpgsql
 AS $$
 DECLARE
-  table_name VARCHAR DEFAULT 'withdraw_age_reveals';
+  table_name VARCHAR DEFAULT 'withdraw_age_revealed_coins';
 BEGIN
   EXECUTE FORMAT (
     'ALTER TABLE ' || table_name ||
@@ -121,17 +142,17 @@ INSERT INTO exchange_tables
     ,partitioned
     ,by_range)
   VALUES
-    ('withdraw_age_reveals'
+    ('withdraw_age_revealed_coins'
     ,'exchange-0003'
     ,'create'
     ,TRUE
     ,FALSE),
-    ('withdraw_age_reveals'
+    ('withdraw_age_revealed_coins'
     ,'exchange-0003'
     ,'constrain'
     ,TRUE
     ,FALSE),
-    ('withdraw_age_reveals'
+    ('withdraw_age_revealed_coins'
     ,'exchange-0003'
     ,'foreign'
     ,TRUE
diff --git a/src/exchangedb/pg_get_age_withdraw_info.c 
b/src/exchangedb/pg_get_age_withdraw_info.c
index 02ccc84a..754b572c 100644
--- a/src/exchangedb/pg_get_age_withdraw_info.c
+++ b/src/exchangedb/pg_get_age_withdraw_info.c
@@ -35,6 +35,7 @@ TEH_PG_get_age_withdraw_info (
 {
   struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
+    GNUNET_PQ_query_param_auto_from_type (reserve_pub),
     GNUNET_PQ_query_param_auto_from_type (ach),
     GNUNET_PQ_query_param_end
   };
@@ -45,14 +46,12 @@ TEH_PG_get_age_withdraw_info (
                                           &awc->reserve_sig),
     GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
                                           &awc->reserve_pub),
-    GNUNET_PQ_result_spec_uint32 ("max_age",
+    GNUNET_PQ_result_spec_uint16 ("max_age",
                                   &awc->max_age),
     TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
                                  &awc->amount_with_fee),
     GNUNET_PQ_result_spec_uint32 ("noreveal_index",
                                   &awc->noreveal_index),
-    GNUNET_PQ_result_spec_timestamp ("timtestamp",
-                                     &awc->timestamp),
     GNUNET_PQ_result_spec_end
   };
 
@@ -70,9 +69,8 @@ TEH_PG_get_age_withdraw_info (
            ",amount_with_fee_val"
            ",amount_with_fee_frac"
            ",noreveal_index"
-           ",timestamp"
            " FROM withdraw_age_commitments"
-           " WHERE h_commitment=$1;");
+           " WHERE reserve_pub=$1 and h_commitment=$2;");
   return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
                                                    "get_age_withdraw_info",
                                                    params,
diff --git a/src/exchangedb/pg_insert_records_by_table.c 
b/src/exchangedb/pg_insert_records_by_table.c
index 5f6de25d..3ec9c77c 100644
--- a/src/exchangedb/pg_insert_records_by_table.c
+++ b/src/exchangedb/pg_insert_records_by_table.c
@@ -19,8 +19,9 @@
  */
 /**
  * @file exchangedb/pg_insert_records_by_table.c
- * @brief insert_records_by_table implementation
+ * @brief replicate_records_by_table implementation
  * @author Christian Grothoff
+ * @author Özgür Kesim
  */
 #include "platform.h"
 #include "taler_error_codes.h"
@@ -28,6 +29,7 @@
 #include "taler_pq_lib.h"
 #include "pg_insert_records_by_table.h"
 #include "pg_helper.h"
+#include <gnunet/gnunet_pq_lib.h>
 
 
 /**
@@ -2110,40 +2112,56 @@ irbt_cb_table_withdraw_age_commitments (struct 
PostgresClosure *pg,
 
 
 /**
- * Function called with withdraw_age_reveals records to insert into table.
+ * Function called with withdraw_age_revealed_coins records to insert into 
table.
  *
  * @param pg plugin context
  * @param td record to insert
  */
 static enum GNUNET_DB_QueryStatus
-irbt_cb_table_withdraw_age_reveals (struct PostgresClosure *pg,
-                                    const struct TALER_EXCHANGEDB_TableData 
*td)
+irbt_cb_table_withdraw_age_revealed_coins (struct PostgresClosure *pg,
+                                           const struct
+                                           TALER_EXCHANGEDB_TableData *td)
 {
+  struct GNUNET_HashCode h_coin_ev;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&td->serial),
-#if FIXME_OEC
     GNUNET_PQ_query_param_auto_from_type (
-      &td->details.withdraw_age_reveals.h_commitment),
-#endif
+      &td->details.withdraw_age_revealed_coins.h_commitment),
     GNUNET_PQ_query_param_uint32 (
-      &td->details.withdraw_age_reveals.freshcoin_index),
+      &td->details.withdraw_age_revealed_coins.freshcoin_index),
     GNUNET_PQ_query_param_uint64 (
-      &td->details.withdraw_age_reveals.denominations_serial),
+      &td->details.withdraw_age_revealed_coins.denominations_serial),
+    GNUNET_PQ_query_param_fixed_size (
+      td->details.withdraw_age_revealed_coins.coin_ev,
+      td->details.withdraw_age_revealed_coins.coin_ev_size),
+    GNUNET_PQ_query_param_auto_from_type (&h_coin_ev),
+    TALER_PQ_query_param_blinded_denom_sig (
+      &td->details.withdraw_age_revealed_coins.ev_sig),
+    TALER_PQ_query_param_exchange_withdraw_values (
+      &td->details.withdraw_age_revealed_coins.ewv),
     GNUNET_PQ_query_param_end
   };
 
   PREPARE (pg,
-           "insert_into_table_withdraw_age_reveals",
-           "INSERT INTO withdraw_age_reveals"
-           "(withdraw_age_reveals_id"
-           ",FIXME_OEC"
+           "insert_into_table_withdraw_age_revealed_coins",
+           "INSERT INTO withdraw_age_revealed_coins"
+           "(withdraw_age_revealed_coins_id"
+           ",h_commitment"
            ",freshcoin_index"
            ",denominations_serial"
-           ",FIXME_OEC"
+           ",coin_ev"
+           ",h_coin_ev"
+           ",ev_sig"
+           ",ewv"
            ") VALUES "
-           "($1, $2, $3, $4, $5);");
+           "($1, $2, $3, $4, $5, $6, $7, $8);");
+
+  GNUNET_CRYPTO_hash (td->details.withdraw_age_revealed_coins.coin_ev,
+                      td->details.withdraw_age_revealed_coins.coin_ev_size,
+                      &h_coin_ev);
+
   return GNUNET_PQ_eval_prepared_non_select (pg->conn,
-                                             
"insert_into_table_withdraw_age_reveals",
+                                             
"insert_into_table_withdraw_age_revealed_coins",
                                              params);
 }
 
@@ -2298,8 +2316,8 @@ TEH_PG_insert_records_by_table (void *cls,
   case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_COMMITMENTS:
     rh = &irbt_cb_table_withdraw_age_commitments;
     break;
-  case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS:
-    rh = &irbt_cb_table_withdraw_age_reveals;
+  case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS:
+    rh = &irbt_cb_table_withdraw_age_revealed_coins;
     break;
   }
   if (NULL == rh)
diff --git a/src/exchangedb/pg_lookup_records_by_table.c 
b/src/exchangedb/pg_lookup_records_by_table.c
index 51894f23..2e157360 100644
--- a/src/exchangedb/pg_lookup_records_by_table.c
+++ b/src/exchangedb/pg_lookup_records_by_table.c
@@ -21,6 +21,7 @@
  * @file exchangedb/pg_lookup_records_by_table.c
  * @brief implementation of lookup_records_by_table
  * @author Christian Grothoff
+ * @author Özgür Kesim
  */
 #include "platform.h"
 #include "taler_error_codes.h"
@@ -2807,9 +2808,6 @@ lrbt_cb_table_withdraw_age_commitments (void *cls,
       GNUNET_PQ_result_spec_uint32 (
         "noreveal_index",
         &td.details.withdraw_age_commitments.noreveal_index),
-      GNUNET_PQ_result_spec_absolute_time (
-        "timestamp",
-        &td.details.withdraw_age_commitments.timestamp),
       GNUNET_PQ_result_spec_end
     };
 
@@ -2830,40 +2828,48 @@ lrbt_cb_table_withdraw_age_commitments (void *cls,
 
 
 /**
- * Function called with withdraw_age_reveals table entries.
+ * Function called with withdraw_age_revealed_coins table entries.
  *
  * @param cls closure
  * @param result the postgres result
  * @param num_results the number of results in @a result
  */
 static void
-lrbt_cb_table_withdraw_age_reveals (void *cls,
-                                    PGresult *result,
-                                    unsigned int num_results)
+lrbt_cb_table_withdraw_age_revealed_coins (void *cls,
+                                           PGresult *result,
+                                           unsigned int num_results)
 {
   struct LookupRecordsByTableContext *ctx = cls;
   struct TALER_EXCHANGEDB_TableData td = {
-    .table = TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS
+    .table = TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS
   };
 
   for (unsigned int i = 0; i<num_results; i++)
   {
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_uint64 (
-        "withdraw_age_reveals_serial_id",
+        "withdraw_age_revealed_coins_id",
         &td.serial),
-#if FIXME_OEC
       GNUNET_PQ_result_spec_auto_from_type (
         "h_commitment",
-        &td.details.withdraw_age_reveals.h_commitment),
-#endif
+        &td.details.withdraw_age_revealed_coins.h_commitment),
       GNUNET_PQ_result_spec_uint32 (
         "freshcoin_index",
-        &td.details.withdraw_age_reveals.freshcoin_index),
+        &td.details.withdraw_age_revealed_coins.freshcoin_index),
       GNUNET_PQ_result_spec_uint64 (
         "denominations_serial",
-        &td.details.withdraw_age_reveals.denominations_serial),
-      /* FIXME-Oec; h_coin_ev, or coin_ev? */
+        &td.details.withdraw_age_revealed_coins.denominations_serial),
+      /* Note: h_coin_ev is recalculated */
+      GNUNET_PQ_result_spec_variable_size (
+        "coin_ev",
+        (void **) &td.details.withdraw_age_revealed_coins.coin_ev,
+        &td.details.withdraw_age_revealed_coins.coin_ev_size),
+      TALER_PQ_result_spec_blinded_denom_sig (
+        "ev_sig",
+        &td.details.refresh_revealed_coins.ev_sig),
+      TALER_PQ_result_spec_exchange_withdraw_values (
+        "ewv",
+        &td.details.refresh_revealed_coins.ewv),
       GNUNET_PQ_result_spec_end
     };
 
@@ -3602,13 +3608,27 @@ TEH_PG_lookup_records_by_table (void *cls,
               ",reserve_pub"
               ",reserve_sig"
               ",noreveal_index"
-              ",timestamp"
               " FROM withdraw_age_commitments"
               " WHERE withdraw_age_commitment_id > $1"
               " ORDER BY withdraw_age_commitment_id ASC;");
     rh = &lrbt_cb_table_withdraw_age_commitments;
     break;
-
+  case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS:
+    XPREPARE ("select_above_serial_by_table_withdraw_age_revealed_coins",
+              "SELECT"
+              " withdraw_age_revealed_coins_serial_id"
+              ",h_commitment"
+              ",freshcoin_index"
+              ",denominations_serial"
+              ",coin_ev"
+              ",h_coin_ev"
+              ",ev_sig"
+              ",ewv"
+              " FROM withdraw_age_revealed_coins"
+              " WHERE withdraw_age_revealed_coins_serial_id > $1"
+              " ORDER BY withdraw_age_revealed_coins_serial_id ASC;");
+    rh = &lrbt_cb_table_withdraw_age_revealed_coins;
+    break;
   }
   if (NULL == rh)
   {
diff --git a/src/exchangedb/pg_lookup_serial_by_table.c 
b/src/exchangedb/pg_lookup_serial_by_table.c
index d2554af2..c98b4539 100644
--- a/src/exchangedb/pg_lookup_serial_by_table.c
+++ b/src/exchangedb/pg_lookup_serial_by_table.c
@@ -435,14 +435,14 @@ TEH_PG_lookup_serial_by_table (void *cls,
               " LIMIT 1;");
     statement = "select_serial_by_table_withdraw_age_commitments";
     break;
-  case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS:
-    XPREPARE ("select_serial_by_table_withdraw_age_reveals",
+  case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS:
+    XPREPARE ("select_serial_by_table_withdraw_age_revealed_coins",
               "SELECT"
-              " withdraw_age_reveals_id AS serial"
-              " FROM withdraw_age_reveals"
-              " ORDER BY withdraw_age_reveals_id DESC"
+              " withdraw_age_revealed_coins_id AS serial"
+              " FROM withdraw_age_revealed_coins"
+              " ORDER BY withdraw_age_revealed_coins_id DESC"
               " LIMIT 1;");
-    statement = "select_serial_by_table_withdraw_age_reveals";
+    statement = "select_serial_by_table_withdraw_age_revealed_coins";
     break;
   }
   if (NULL == statement)
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index 7e3aa2b1..b3ebc754 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -21,6 +21,7 @@
  * @author Christian Grothoff
  * @author Sree Harsha Totakura
  * @author Marcello Stanisci
+ * @author Özgür Kesim
  */
 #include "platform.h"
 #include <poll.h>
diff --git a/src/include/taler_exchangedb_plugin.h 
b/src/include/taler_exchangedb_plugin.h
index f60c3cf0..5b724953 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -18,6 +18,7 @@
  * @brief Low-level (statement-level) database access for the exchange
  * @author Florian Dold
  * @author Christian Grothoff
+ * @author Özgür Kesim
  */
 #ifndef TALER_EXCHANGEDB_PLUGIN_H
 #define TALER_EXCHANGEDB_PLUGIN_H
@@ -283,7 +284,7 @@ enum TALER_EXCHANGEDB_ReplicatedTable
   TALER_EXCHANGEDB_RT_KYC_ATTRIBUTES,
   TALER_EXCHANGEDB_RT_PURSE_DELETION,
   TALER_EXCHANGEDB_RT_WITHDRAW_AGE_COMMITMENTS,
-  TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS,
+  TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS,
 };
 
 
@@ -764,11 +765,14 @@ struct TALER_EXCHANGEDB_TableData
     struct
     {
       struct TALER_AgeWithdrawCommitmentHashP h_commitment;
-      // FIXME-Oec: h_commitment --- schema says it is 32 byte, but it was 64 
above??!?
       uint32_t freshcoin_index;
       uint64_t denominations_serial;
-      // FIXME-Oec: h_coin_ev --- schema says it is 32 byte!?
-    } withdraw_age_reveals;
+      void *coin_ev;
+      size_t coin_ev_size;
+      struct TALER_ExchangeWithdrawValues ewv;
+      // h_coin_ev omitted, to be recomputed!
+      struct TALER_BlindedDenominationSignature ev_sig;
+    } withdraw_age_revealed_coins;
 
   } details;
 
@@ -1175,9 +1179,8 @@ struct TALER_EXCHANGEDB_AgeWithdrawCommitment
 
   /**
    * Maximum age that the coins are restricted to.
-   * FIXME-Oec: use 16-bit integer (see DB schema!)
    */
-  uint32_t max_age;
+  uint16_t max_age;
 
   /**
    * The hash of the commitment of all n*kappa coins
@@ -1206,11 +1209,6 @@ struct TALER_EXCHANGEDB_AgeWithdrawCommitment
    * The exchange's signature of the response.
    */
   struct TALER_ExchangeSignatureP sig;
-
-  /**
-   * Timestamp of the request being made
-   */
-  struct GNUNET_TIME_Timestamp timestamp;
 };
 
 
@@ -3794,7 +3792,6 @@ struct TALER_EXCHANGEDB_Plugin
    *
    * @param cls the `struct PostgresClosure` with the plugin-specific state
    * @param commitment corresponding commitment for the age-withdraw
-   * @param now current time (rounded)
    * @param[out] found set to true if the reserve was found
    * @param[out] balance_ok set to true if the balance was sufficient
    * @param[out] ruuid set to the reserve's UUID (reserves table row)
@@ -3804,7 +3801,6 @@ struct TALER_EXCHANGEDB_Plugin
   (*do_age_withdraw)(
     void *cls,
     const struct TALER_EXCHANGEDB_AgeWithdrawCommitment *commitment,
-    struct GNUNET_TIME_Timestamp now,
     bool *found,
     bool *balance_ok,
     uint64_t *ruuid);
@@ -5787,6 +5783,7 @@ struct TALER_EXCHANGEDB_Plugin
    * Insert record set into @a table.  Used in exchange-auditor database
    * replication.
    *
+  memset (&awc, 0, sizeof (awc));
    * @param cls closure
    * @param tb table data to insert
    * @return transaction status code, #GNUNET_DB_STATUS_HARD_ERROR if

-- 
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]