gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated (1acc851d -> 62444504)


From: gnunet
Subject: [taler-exchange] branch master updated (1acc851d -> 62444504)
Date: Tue, 21 Dec 2021 10:25:42 +0100

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

grothoff pushed a change to branch master
in repository exchange.

    from 1acc851d -fix recoup ugliness
     new 527d9036 add new wrappers around merchant hash codes for tips and 
pickups
     new 62444504 denormalize reserve_pub in reserve tables to enable sharding

The 2 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_withdraw.c |   6 +-
 src/exchangedb/exchange-0001.sql             |  56 ++++++-----
 src/exchangedb/irbt_callbacks.c              |   9 +-
 src/exchangedb/lrbt_callbacks.c              |  18 ++--
 src/exchangedb/plugin_exchangedb_postgres.c  | 145 +++++++++------------------
 src/exchangedb/test_exchangedb.c             |   4 +-
 src/include/taler_crypto_lib.h               |  24 +++++
 src/include/taler_exchangedb_plugin.h        |  14 ++-
 8 files changed, 128 insertions(+), 148 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_withdraw.c 
b/src/exchange/taler-exchange-httpd_withdraw.c
index 2c5cb4d7..dfd10b5e 100644
--- a/src/exchange/taler-exchange-httpd_withdraw.c
+++ b/src/exchange/taler-exchange-httpd_withdraw.c
@@ -140,7 +140,6 @@ withdraw_transaction (void *cls,
   enum GNUNET_DB_QueryStatus qs;
   bool found = false;
   bool balance_ok = false;
-  uint64_t reserve_uuid;
   struct GNUNET_TIME_Timestamp now;
 
   now = GNUNET_TIME_timestamp_get ();
@@ -151,8 +150,7 @@ withdraw_transaction (void *cls,
                                 now,
                                 &found,
                                 &balance_ok,
-                                &wc->kyc,
-                                &reserve_uuid);
+                                &wc->kyc);
   if (0 > qs)
   {
     if (GNUNET_DB_STATUS_HARD_ERROR == qs)
@@ -234,7 +232,7 @@ withdraw_transaction (void *cls,
 
     qs2 = TEH_plugin->do_withdraw_limit_check (
       TEH_plugin->cls,
-      reserve_uuid,
+      &wc->collectable.reserve_pub,
       GNUNET_TIME_absolute_subtract (now.abs_time,
                                      TEH_kyc_config.withdraw_period),
       &TEH_kyc_config.withdraw_limit,
diff --git a/src/exchangedb/exchange-0001.sql b/src/exchangedb/exchange-0001.sql
index a267fe13..dcd0cb09 100644
--- a/src/exchangedb/exchange-0001.sql
+++ b/src/exchangedb/exchange-0001.sql
@@ -87,13 +87,15 @@ COMMENT ON COLUMN wire_targets.external_id
 
 
 CREATE TABLE IF NOT EXISTS reserves
-  (reserve_uuid BIGSERIAL UNIQUE
+  (reserve_uuid BIGSERIAL
   ,reserve_pub BYTEA PRIMARY KEY CHECK(LENGTH(reserve_pub)=32)
   ,current_balance_val INT8 NOT NULL
   ,current_balance_frac INT4 NOT NULL
   ,expiration_date INT8 NOT NULL
   ,gc_date INT8 NOT NULL
-  );
+  )
+  PARTITION BY HASH (reserve_pub);
+
 COMMENT ON TABLE reserves
   IS 'Summarizes the balance of a reserve. Updated when new funds are added or 
withdrawn.';
 COMMENT ON COLUMN reserves.expiration_date
@@ -101,6 +103,17 @@ COMMENT ON COLUMN reserves.expiration_date
 COMMENT ON COLUMN reserves.gc_date
   IS 'Used to forget all information about a reserve during garbage 
collection';
 
+CREATE TABLE reserves_0 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 0);
+CREATE TABLE reserves_1 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 1);
+CREATE TABLE reserves_2 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 2);
+CREATE TABLE reserves_3 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 3);
+CREATE TABLE reserves_4 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 4);
+CREATE TABLE reserves_5 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 5);
+CREATE TABLE reserves_6 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 6);
+CREATE TABLE reserves_7 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, 
REMAINDER 7);
+
+
+
 CREATE INDEX IF NOT EXISTS reserves_expiration_index
   ON reserves
   (expiration_date
@@ -119,14 +132,14 @@ COMMENT ON INDEX reserves_gc_index
 
 CREATE TABLE IF NOT EXISTS reserves_in
   (reserve_in_serial_id BIGSERIAL UNIQUE
-  ,reserve_uuid INT8 NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE 
CASCADE
+  ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE 
CASCADE
   ,wire_reference INT8 NOT NULL
   ,credit_val INT8 NOT NULL
   ,credit_frac INT4 NOT NULL
   ,wire_source_serial_id INT8 NOT NULL REFERENCES wire_targets 
(wire_target_serial_id)
   ,exchange_account_section TEXT NOT NULL
   ,execution_date INT8 NOT NULL
-  ,PRIMARY KEY (reserve_uuid, wire_reference)
+  ,PRIMARY KEY (reserve_pub, wire_reference)
   );
 COMMENT ON TABLE reserves_in
   IS 'list of transfers of funds into the reserves, one per incoming wire 
transfer';
@@ -144,9 +157,10 @@ CREATE INDEX IF NOT EXISTS 
reserves_in_exchange_account_serial
   );
 
 
+
 CREATE TABLE IF NOT EXISTS reserves_close
   (close_uuid BIGSERIAL PRIMARY KEY
-  ,reserve_uuid INT8 NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE 
CASCADE
+  ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE 
CASCADE
   ,execution_date INT8 NOT NULL
   ,wtid BYTEA NOT NULL CHECK (LENGTH(wtid)=32)
   ,wire_target_serial_id INT8 NOT NULL REFERENCES wire_targets 
(wire_target_serial_id)
@@ -161,7 +175,7 @@ COMMENT ON COLUMN reserves_close.wire_target_serial_id
 
 CREATE INDEX IF NOT EXISTS reserves_close_by_uuid
   ON reserves_close
-  (reserve_uuid);
+  (reserve_pub);
 
 
 CREATE TABLE IF NOT EXISTS reserves_out
@@ -169,7 +183,7 @@ CREATE TABLE IF NOT EXISTS reserves_out
   ,h_blind_ev BYTEA PRIMARY KEY CHECK (LENGTH(h_blind_ev)=64)
   ,denominations_serial INT8 NOT NULL REFERENCES denominations 
(denominations_serial)
   ,denom_sig BYTEA NOT NULL
-  ,reserve_uuid INT8 NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE 
CASCADE
+  ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE 
CASCADE
   ,reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)
   ,execution_date INT8 NOT NULL
   ,amount_with_fee_val INT8 NOT NULL
@@ -182,10 +196,10 @@ COMMENT ON COLUMN reserves_out.h_blind_ev
 COMMENT ON COLUMN reserves_out.denominations_serial
   IS 'We do not CASCADE ON DELETE here, we may keep the denomination data 
alive';
 
-CREATE INDEX IF NOT EXISTS reserves_out_reserve_uuid_index
+CREATE INDEX IF NOT EXISTS reserves_out_reserve_pub_index
   ON reserves_out
-  (reserve_uuid);
-COMMENT ON INDEX reserves_out_reserve_uuid_index
+  (reserve_pub);
+COMMENT ON INDEX reserves_out_reserve_pub_index
   IS 'for get_reserves_out';
 
 CREATE INDEX IF NOT EXISTS reserves_out_execution_date
@@ -710,7 +724,6 @@ CREATE OR REPLACE FUNCTION exchange_do_withdraw(
   OUT reserve_found BOOLEAN,
   OUT balance_ok BOOLEAN,
   OUT kycok BOOLEAN,
-  OUT ruuid INT8,
   OUT account_uuid INT8)
 LANGUAGE plpgsql
 AS $$
@@ -734,21 +747,18 @@ THEN
   reserve_found=FALSE;
   balance_ok=FALSE;
   kycok=FALSE;
-  ruuid=0;
   account_uuid=0;
   ASSERT false, 'denomination unknown';
   RETURN;
 END IF;
 
 SELECT
-   reserves.reserve_uuid
-  ,current_balance_val
+   current_balance_val
   ,current_balance_frac
   ,expiration_date
   ,gc_date
  INTO
-   ruuid
-  ,reserve_val
+   reserve_val
   ,reserve_frac
   ,reserve_gc
   FROM reserves
@@ -770,7 +780,7 @@ INSERT INTO reserves_out
   (h_blind_ev
   ,denominations_serial
   ,denom_sig
-  ,reserve_uuid
+  ,reserve_pub
   ,reserve_sig
   ,execution_date
   ,amount_with_fee_val
@@ -779,7 +789,7 @@ VALUES
   (h_coin_envelope
   ,denom_serial
   ,denom_sig
-  ,ruuid
+  ,rpub
   ,reserve_sig
   ,now
   ,amount_val
@@ -830,7 +840,7 @@ UPDATE reserves SET
  ,current_balance_val=reserve_val
  ,current_balance_frac=reserve_frac
 WHERE
-  reserves.reserve_uuid=ruuid;
+  reserves.reserve_pub=rpub;
 
 reserve_found=TRUE;
 balance_ok=TRUE;
@@ -845,7 +855,7 @@ SELECT
   ,account_uuid
   FROM reserves_in
   JOIN wire_targets ON (wire_source_serial_id = wire_target_serial_id)
- WHERE reserve_uuid=ruuid
+ WHERE reserve_pub=rpub
  LIMIT 1; -- limit 1 should not be required (without p2p transfers)
 
 END $$;
@@ -856,7 +866,7 @@ COMMENT ON FUNCTION exchange_do_withdraw(INT8, INT4, BYTEA, 
BYTEA, BYTEA, BYTEA,
 
 
 CREATE OR REPLACE FUNCTION exchange_do_withdraw_limit_check(
-  IN ruuid INT8,
+  IN rpub BYTEA,
   IN start_time INT8,
   IN upper_limit_val INT8,
   IN upper_limit_frac INT4,
@@ -876,7 +886,7 @@ SELECT
    total_val
   ,total_frac
   FROM reserves_out
- WHERE reserves_out.reserve_uuid=ruuid
+ WHERE reserves_out.reserve_pub=rpub
    AND execution_date > start_time;
 
 -- normalize result
@@ -889,7 +899,7 @@ below_limit = (total_val < upper_limit_val) OR
               (total_frac <= upper_limit_frac) );
 END $$;
 
-COMMENT ON FUNCTION exchange_do_withdraw_limit_check(INT8, INT8, INT8, INT4)
+COMMENT ON FUNCTION exchange_do_withdraw_limit_check(BYTEA, INT8, INT8, INT4)
   IS 'Check whether the withdrawals from the given reserve since the given 
time are below the given threshold';
 
 
diff --git a/src/exchangedb/irbt_callbacks.c b/src/exchangedb/irbt_callbacks.c
index 47606ebc..ffccbef3 100644
--- a/src/exchangedb/irbt_callbacks.c
+++ b/src/exchangedb/irbt_callbacks.c
@@ -174,7 +174,7 @@ irbt_cb_table_reserves_in (struct PostgresClosure *pg,
       td->details.reserves_in.exchange_account_section),
     GNUNET_PQ_query_param_timestamp (
       &td->details.reserves_in.execution_date),
-    GNUNET_PQ_query_param_uint64 (&td->details.reserves_in.reserve_uuid),
+    GNUNET_PQ_query_param_auto_from_type 
(&td->details.reserves_in.reserve_pub),
     GNUNET_PQ_query_param_end
   };
 
@@ -204,7 +204,8 @@ irbt_cb_table_reserves_close (struct PostgresClosure *pg,
       &td->details.reserves_close.wire_target_serial_id),
     TALER_PQ_query_param_amount (&td->details.reserves_close.amount),
     TALER_PQ_query_param_amount (&td->details.reserves_close.closing_fee),
-    GNUNET_PQ_query_param_uint64 (&td->details.reserves_close.reserve_uuid),
+    GNUNET_PQ_query_param_auto_from_type (
+      &td->details.reserves_close.reserve_pub),
     GNUNET_PQ_query_param_end
   };
 
@@ -232,8 +233,8 @@ irbt_cb_table_reserves_out (struct PostgresClosure *pg,
       &td->details.reserves_out.denominations_serial),
     TALER_PQ_query_param_blinded_denom_sig (
       &td->details.reserves_out.denom_sig),
-    GNUNET_PQ_query_param_uint64 (
-      &td->details.reserves_out.reserve_uuid),
+    GNUNET_PQ_query_param_auto_from_type (
+      &td->details.reserves_out.reserve_pub),
     GNUNET_PQ_query_param_auto_from_type (
       &td->details.reserves_out.reserve_sig),
     GNUNET_PQ_query_param_timestamp (
diff --git a/src/exchangedb/lrbt_callbacks.c b/src/exchangedb/lrbt_callbacks.c
index 6dc990dc..4711ac86 100644
--- a/src/exchangedb/lrbt_callbacks.c
+++ b/src/exchangedb/lrbt_callbacks.c
@@ -277,9 +277,9 @@ lrbt_cb_table_reserves_in (void *cls,
       GNUNET_PQ_result_spec_uint64 (
         "serial",
         &td.serial),
-      GNUNET_PQ_result_spec_uint64 (
-        "reserve_uuid",
-        &td.details.reserves_in.reserve_uuid),
+      GNUNET_PQ_result_spec_auto_from_type (
+        "reserve_pub",
+        &td.details.reserves_in.reserve_pub),
       GNUNET_PQ_result_spec_uint64 (
         "wire_reference",
         &td.details.reserves_in.wire_reference),
@@ -338,9 +338,9 @@ lrbt_cb_table_reserves_close (void *cls,
       GNUNET_PQ_result_spec_uint64 (
         "serial",
         &td.serial),
-      GNUNET_PQ_result_spec_uint64 (
-        "reserve_uuid",
-        &td.details.reserves_close.reserve_uuid),
+      GNUNET_PQ_result_spec_auto_from_type (
+        "reserve_pub",
+        &td.details.reserves_close.reserve_pub),
       GNUNET_PQ_result_spec_timestamp (
         "execution_date",
         &td.details.reserves_close.execution_date),
@@ -408,9 +408,9 @@ lrbt_cb_table_reserves_out (void *cls,
       TALER_PQ_result_spec_blinded_denom_sig (
         "denom_sig",
         &td.details.reserves_out.denom_sig),
-      GNUNET_PQ_result_spec_uint64 (
-        "reserve_uuid",
-        &td.details.reserves_out.reserve_uuid),
+      GNUNET_PQ_result_spec_auto_from_type (
+        "reserve_pub",
+        &td.details.reserves_out.reserve_pub),
       GNUNET_PQ_result_spec_auto_from_type (
         "reserve_sig",
         &td.details.reserves_out.reserve_sig),
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index 99ebd7c7..5ac344c2 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -378,7 +378,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",kyc_ok"
       ",wire_target_serial_id AS payment_target_uuid"
       " FROM reserves"
-      " JOIN reserves_in ri USING (reserve_uuid)"
+      " JOIN reserves_in ri USING (reserve_pub)"
       " JOIN wire_targets wt "
       "  ON (ri.wire_source_serial_id = wt.wire_target_serial_id)"
       " WHERE reserve_pub=$1"
@@ -467,7 +467,7 @@ prepare_statements (struct PostgresClosure *pg)
     GNUNET_PQ_make_prepare (
       "reserves_close_insert",
       "INSERT INTO reserves_close "
-      "(reserve_uuid"
+      "(reserve_pub"
       ",execution_date"
       ",wtid"
       ",wire_target_serial_id"
@@ -475,9 +475,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",amount_frac"
       ",closing_fee_val"
       ",closing_fee_frac"
-      ") SELECT reserve_uuid, $2, $3, $4, $5, $6, $7, $8"
-      "  FROM reserves"
-      "  WHERE reserve_pub=$1;",
+      ") VALUES ($1, $2, $3, $4, $5, $6, $7, $8);",
       8),
     /* Used in #reserves_update() when the reserve is updated */
     GNUNET_PQ_make_prepare (
@@ -494,23 +492,21 @@ prepare_statements (struct PostgresClosure *pg)
     GNUNET_PQ_make_prepare (
       "reserves_in_add_transaction",
       "INSERT INTO reserves_in "
-      "(reserve_uuid"
+      "(reserve_pub"
       ",wire_reference"
       ",credit_val"
       ",credit_frac"
       ",exchange_account_section"
       ",wire_source_serial_id"
       ",execution_date"
-      ") SELECT reserve_uuid, $2, $3, $4, $5, $6, $7"
-      "  FROM reserves"
-      "  WHERE reserve_pub=$1"
+      ") VALUES ($1, $2, $3, $4, $5, $6, $7)"
       " ON CONFLICT DO NOTHING;",
       7),
     /* Used in #postgres_reserves_in_insert() to store transaction details */
     GNUNET_PQ_make_prepare (
-      "reserves_in_add_by_uuid",
+      "reserves_in_add_by_pub",
       "INSERT INTO reserves_in "
-      "(reserve_uuid"
+      "(reserve_pub"
       ",wire_reference"
       ",credit_val"
       ",credit_frac"
@@ -545,7 +541,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",reserve_in_serial_id"
       " FROM reserves_in"
       " JOIN reserves"
-      "   USING (reserve_uuid)"
+      "   USING (reserve_pub)"
       " JOIN wire_targets"
       "   ON (wire_source_serial_id = wire_target_serial_id)"
       " WHERE reserve_in_serial_id>=$1"
@@ -565,7 +561,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",reserve_in_serial_id"
       " FROM reserves_in"
       " JOIN reserves "
-      "   USING (reserve_uuid)"
+      "   USING (reserve_pub)"
       " JOIN wire_targets"
       "   ON (wire_source_serial_id = wire_target_serial_id)"
       " WHERE reserve_in_serial_id>=$1 AND exchange_account_section=$2"
@@ -584,10 +580,7 @@ prepare_statements (struct PostgresClosure *pg)
       " FROM reserves_in"
       " JOIN wire_targets"
       "   ON (wire_source_serial_id = wire_target_serial_id)"
-      " WHERE reserve_uuid="
-      " (SELECT reserve_uuid "
-      "   FROM reserves"
-      "   WHERE reserve_pub=$1);",
+      " WHERE reserve_pub=$1;",
       1),
     /* Lock withdraw table; NOTE: we may want to eventually shard the
        deposit table to avoid this lock being the main point of
@@ -619,7 +612,6 @@ prepare_statements (struct PostgresClosure *pg)
       " reserve_found"
       ",balance_ok"
       ",kycok AS kyc_ok"
-      ",ruuid AS reserve_uuid"
       ",account_uuid AS payment_target_uuid"
       " FROM exchange_do_withdraw"
       " ($1,$2,$3,$4,$5,$6,$7,$8,$9);",
@@ -643,23 +635,18 @@ prepare_statements (struct PostgresClosure *pg)
        authorizing the withdrawal. */
     GNUNET_PQ_make_prepare (
       "insert_withdraw_info",
-      "WITH ds AS"
-      " (SELECT denominations_serial"
-      "    FROM denominations"
-      "   WHERE denom_pub_hash=$2)"
       "INSERT INTO reserves_out "
       "(h_blind_ev"
       ",denominations_serial"
       ",denom_sig"
-      ",reserve_uuid"
+      ",reserve_pub"
       ",reserve_sig"
       ",execution_date"
       ",amount_with_fee_val"
       ",amount_with_fee_frac"
-      ") SELECT $1, ds.denominations_serial, $3, reserve_uuid, $5, $6, $7, $8"
-      "    FROM reserves"
-      "    CROSS JOIN ds"
-      "    WHERE reserve_pub=$4;",
+      ") SELECT $1, denominations_serial, $3, $4, $5, $6, $7, $8"
+      "    FROM denominations"
+      "    WHERE denom_pub_hash=$2;",
       8),
     /* Used in #postgres_get_withdraw_info() to
        locate the response for a /reserve/withdraw request
@@ -679,7 +666,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",denom.fee_withdraw_frac"
       " FROM reserves_out"
       "    JOIN reserves"
-      "      USING (reserve_uuid)"
+      "      USING (reserve_pub)"
       "    JOIN denominations denom"
       "      USING (denominations_serial)"
       " WHERE h_blind_ev=$1;",
@@ -703,10 +690,7 @@ prepare_statements (struct PostgresClosure *pg)
       " FROM reserves_out"
       "    JOIN denominations denom"
       "      USING (denominations_serial)"
-      " WHERE reserve_uuid="
-      "   (SELECT reserve_uuid"
-      "      FROM reserves"
-      "     WHERE reserve_pub=$1);",
+      " WHERE reserve_pub=$1;",
       1),
     /* Used in #postgres_select_withdrawals_above_serial_id() */
     GNUNET_PQ_make_prepare (
@@ -722,7 +706,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",reserve_out_serial_id"
       " FROM reserves_out"
       "    JOIN reserves"
-      "      USING (reserve_uuid)"
+      "      USING (reserve_pub)"
       "    JOIN denominations denom"
       "      USING (denominations_serial)"
       " WHERE reserve_out_serial_id>=$1"
@@ -1531,7 +1515,7 @@ prepare_statements (struct PostgresClosure *pg)
       "    JOIN reserves_out ro"
       "      USING (reserve_out_serial_id)"
       "    JOIN reserves"
-      "      USING (reserve_uuid)"
+      "      USING (reserve_pub)"
       "    JOIN denominations denoms"
       "      ON (coins.denominations_serial = denoms.denominations_serial)"
       " WHERE recoup_uuid>=$1"
@@ -1589,7 +1573,7 @@ prepare_statements (struct PostgresClosure *pg)
       "   JOIN wire_targets"
       "     USING (wire_target_serial_id)"
       "   JOIN reserves"
-      "     USING (reserve_uuid)"
+      "     USING (reserve_pub)"
       " WHERE close_uuid>=$1"
       " ORDER BY close_uuid ASC;",
       1),
@@ -1613,10 +1597,7 @@ prepare_statements (struct PostgresClosure *pg)
       "      USING (denominations_serial)"
       "    JOIN reserves_out ro"
       "      USING (reserve_out_serial_id)"
-      " WHERE ro.reserve_uuid="
-      "   (SELECT reserve_uuid"
-      "     FROM reserves"
-      "    WHERE reserve_pub=$1);",
+      " WHERE ro.reserve_pub=$1;",
       1),
     /* Used in #postgres_get_coin_transactions() to obtain recoup transactions
        affecting old coins of refreshed coins */
@@ -1661,10 +1642,7 @@ prepare_statements (struct PostgresClosure *pg)
       " FROM reserves_close"
       "   JOIN wire_targets"
       "     USING (wire_target_serial_id)"
-      " WHERE reserve_uuid="
-      "   (SELECT reserve_uuid"
-      "     FROM reserves"
-      "    WHERE reserve_pub=$1);",
+      " WHERE reserve_pub=$1;",
       1),
     /* Used in #postgres_get_expired_reserves() */
     GNUNET_PQ_make_prepare (
@@ -1677,7 +1655,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",current_balance_frac"
       " FROM reserves"
       "   JOIN reserves_in ri"
-      "     USING (reserve_uuid)"
+      "     USING (reserve_pub)"
       "   JOIN wire_targets wt"
       "     ON (ri.wire_source_serial_id = wt.wire_target_serial_id)"
       " WHERE expiration_date<=$1"
@@ -1703,7 +1681,7 @@ prepare_statements (struct PostgresClosure *pg)
       " JOIN reserves_out ro"
       "   USING (reserve_out_serial_id)"
       " JOIN reserves"
-      "   USING (reserve_uuid)"
+      "   USING (reserve_pub)"
       " JOIN known_coins coins"
       "   USING (known_coin_id)"
       " JOIN denominations denoms"
@@ -1744,7 +1722,7 @@ prepare_statements (struct PostgresClosure *pg)
       " reserves.reserve_pub"
       " FROM reserves_out"
       " JOIN reserves"
-      "   USING (reserve_uuid)"
+      "   USING (reserve_pub)"
       " WHERE h_blind_ev=$1"
       " LIMIT 1;",
       1),
@@ -1952,10 +1930,7 @@ prepare_statements (struct PostgresClosure *pg)
       " amount_with_fee_val"
       ",amount_with_fee_frac"
       " FROM reserves_out"
-      " WHERE reserve_uuid="
-      "   (SELECT reserve_uuid"
-      "      FROM reserves"
-      "     WHERE reserve_pub=$1)"
+      " WHERE reserve_pub=$1"
       "  AND execution_date > $2;",
       2),
     /* used in #postgres_lookup_wire_fee_by_time() */
@@ -2199,7 +2174,7 @@ prepare_statements (struct PostgresClosure *pg)
       "select_above_serial_by_table_reserves_in",
       "SELECT"
       " reserve_in_serial_id AS serial"
-      ",reserve_uuid"
+      ",reserve_pub"
       ",wire_reference"
       ",credit_val"
       ",credit_frac"
@@ -2214,7 +2189,7 @@ prepare_statements (struct PostgresClosure *pg)
       "select_above_serial_by_table_reserves_close",
       "SELECT"
       " close_uuid AS serial"
-      ",reserve_uuid"
+      ",reserve_pub"
       ",execution_date"
       ",wtid"
       ",wire_target_serial_id"
@@ -2233,7 +2208,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",h_blind_ev"
       ",denominations_serial"
       ",denom_sig"
-      ",reserve_uuid"
+      ",reserve_pub"
       ",reserve_sig"
       ",execution_date"
       ",amount_with_fee_val"
@@ -2504,7 +2479,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",wire_source_serial_id"
       ",exchange_account_section"
       ",execution_date"
-      ",reserve_uuid"
+      ",reserve_pub"
       ") VALUES "
       "($1, $2, $3, $4, $5, $6, $7, $8);",
       8),
@@ -2519,7 +2494,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",amount_frac"
       ",closing_fee_val"
       ",closing_fee_frac"
-      ",reserve_uuid"
+      ",reserve_pub"
       ") VALUES "
       "($1, $2, $3, $4, $5, $6, $7, $8, $9);",
       9),
@@ -2530,7 +2505,7 @@ prepare_statements (struct PostgresClosure *pg)
       ",h_blind_ev"
       ",denominations_serial"
       ",denom_sig"
-      ",reserve_uuid"
+      ",reserve_pub"
       ",reserve_sig"
       ",execution_date"
       ",amount_with_fee_val"
@@ -4249,41 +4224,21 @@ postgres_reserves_in_insert (void *cls,
       return qs3;
     }
     GNUNET_assert (0 != kyc.payment_target_uuid);
-    if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs1)
-    {
-      /* We do not have the UUID, so insert by public key */
-      struct GNUNET_PQ_QueryParam params[] = {
-        GNUNET_PQ_query_param_auto_from_type (&reserve.pub),
-        GNUNET_PQ_query_param_uint64 (&wire_ref),
-        TALER_PQ_query_param_amount (balance),
-        GNUNET_PQ_query_param_string (exchange_account_section),
-        GNUNET_PQ_query_param_uint64 (&kyc.payment_target_uuid),
-        GNUNET_PQ_query_param_timestamp (&execution_time),
-        GNUNET_PQ_query_param_end
-      };
-
-      qs2 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
-                                                "reserves_in_add_transaction",
-                                                params);
-    }
-    else
-    {
-      /* We do have the UUID, use that for the insert */
-      struct GNUNET_PQ_QueryParam params[] = {
-        GNUNET_PQ_query_param_uint64 (&reserve_uuid),
-        GNUNET_PQ_query_param_uint64 (&wire_ref),
-        TALER_PQ_query_param_amount (balance),
-        GNUNET_PQ_query_param_string (exchange_account_section),
-        GNUNET_PQ_query_param_uint64 (&kyc.payment_target_uuid),
-        GNUNET_PQ_query_param_timestamp (&execution_time),
-        GNUNET_PQ_query_param_end
-      };
+    /* We do not have the UUID, so insert by public key */
+    struct GNUNET_PQ_QueryParam params[] = {
+      GNUNET_PQ_query_param_auto_from_type (&reserve.pub),
+      GNUNET_PQ_query_param_uint64 (&wire_ref),
+      TALER_PQ_query_param_amount (balance),
+      GNUNET_PQ_query_param_string (exchange_account_section),
+      GNUNET_PQ_query_param_uint64 (&kyc.payment_target_uuid),
+      GNUNET_PQ_query_param_timestamp (&execution_time),
+      GNUNET_PQ_query_param_end
+    };
 
-      qs2 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
-                                                "reserves_in_add_by_uuid",
-                                                params);
-    }
-    /* qs2 could be 0 as both statements used 'ON CONFLICT DO NOTHING' */
+    qs2 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
+                                              "reserves_in_add_transaction",
+                                              params);
+    /* qs2 could be 0 as statement used 'ON CONFLICT DO NOTHING' */
     if (0 >= qs2)
     {
       if ( (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs2) &&
@@ -4558,7 +4513,6 @@ postgres_do_check_coin_balance (
  * @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] kyc_ok set to true if the kyc status of the reserve is satisfied
- * @param[out] reserve_uuid set to the UUID of the reserve
  * @return query execution status
  */
 static enum GNUNET_DB_QueryStatus
@@ -4568,8 +4522,7 @@ postgres_do_withdraw (
   struct GNUNET_TIME_Timestamp now,
   bool *found,
   bool *balance_ok,
-  struct TALER_EXCHANGEDB_KycStatus *kyc,
-  uint64_t *reserve_uuid)
+  struct TALER_EXCHANGEDB_KycStatus *kyc)
 {
   struct PostgresClosure *pg = cls;
   struct GNUNET_TIME_Timestamp gc;
@@ -4591,8 +4544,6 @@ postgres_do_withdraw (
                                 balance_ok),
     GNUNET_PQ_result_spec_bool ("kyc_ok",
                                 &kyc->ok),
-    GNUNET_PQ_result_spec_uint64 ("reserve_uuid",
-                                  reserve_uuid),
     GNUNET_PQ_result_spec_uint64 ("payment_target_uuid",
                                   &kyc->payment_target_uuid),
     GNUNET_PQ_result_spec_end
@@ -4624,14 +4575,14 @@ postgres_do_withdraw (
 static enum GNUNET_DB_QueryStatus
 postgres_do_withdraw_limit_check (
   void *cls,
-  uint64_t reserve_uuid,
+  const struct TALER_ReservePublicKeyP *reserve_pub,
   struct GNUNET_TIME_Absolute withdraw_start,
   const struct TALER_Amount *upper_limit,
   bool *below_limit)
 {
   struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_uint64 (&reserve_uuid),
+    GNUNET_PQ_query_param_auto_from_type (reserve_pub),
     GNUNET_PQ_query_param_absolute_time (&withdraw_start),
     TALER_PQ_query_param_amount (upper_limit),
     GNUNET_PQ_query_param_end
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c
index 65689d87..6d334d3c 100644
--- a/src/exchangedb/test_exchangedb.c
+++ b/src/exchangedb/test_exchangedb.c
@@ -1674,7 +1674,6 @@ run (void *cls)
     bool found;
     bool balance_ok;
     struct TALER_EXCHANGEDB_KycStatus kyc;
-    uint64_t ruuid;
 
     FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
             plugin->do_withdraw (plugin->cls,
@@ -1682,8 +1681,7 @@ run (void *cls)
                                  now,
                                  &found,
                                  &balance_ok,
-                                 &kyc,
-                                 &ruuid));
+                                 &kyc));
     GNUNET_assert (found);
     GNUNET_assert (balance_ok);
     GNUNET_assert (! kyc.ok);
diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index 5292cd09..5895d121 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -518,6 +518,30 @@ struct TALER_CoinPubHash
 };
 
 
+/**
+ * @brief Value that uniquely identifies a tip.
+ */
+struct TALER_TipIdentifierP
+{
+  /**
+   * The tip identifier is a SHA-512 hash code.
+   */
+  struct GNUNET_HashCode hash;
+};
+
+
+/**
+ * @brief Value that uniquely identifies a tip pick up operation.
+ */
+struct TALER_PickupIdentifierP
+{
+  /**
+   * The pickup identifier is a SHA-512 hash code.
+   */
+  struct GNUNET_HashCode hash;
+};
+
+
 GNUNET_NETWORK_STRUCT_END
 
 
diff --git a/src/include/taler_exchangedb_plugin.h 
b/src/include/taler_exchangedb_plugin.h
index ad840fc9..eacc13a9 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -239,12 +239,12 @@ struct TALER_EXCHANGEDB_TableData
       uint64_t sender_account;
       char *exchange_account_section;
       struct GNUNET_TIME_Timestamp execution_date;
-      uint64_t reserve_uuid;
+      struct TALER_ReservePublicKeyP reserve_pub;
     } reserves_in;
 
     struct
     {
-      uint64_t reserve_uuid;
+      struct TALER_ReservePublicKeyP reserve_pub;
       struct GNUNET_TIME_Timestamp execution_date;
       struct TALER_WireTransferIdentifierRawP wtid;
       uint64_t wire_target_serial_id;
@@ -257,7 +257,7 @@ struct TALER_EXCHANGEDB_TableData
       struct TALER_BlindedCoinHash h_blind_ev;
       uint64_t denominations_serial;
       struct TALER_BlindedDenominationSignature denom_sig;
-      uint64_t reserve_uuid;
+      struct TALER_ReservePublicKeyP reserve_pub;
       struct TALER_ReserveSignatureP reserve_sig;
       struct GNUNET_TIME_Timestamp execution_date;
       struct TALER_Amount amount_with_fee;
@@ -2537,7 +2537,6 @@ struct TALER_EXCHANGEDB_Plugin
    * @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] kyc set to the KYC status of the reserve
-   * @param[out] reserve_uuid set to the UUID of the reserve
    * @return query execution status
    */
   enum GNUNET_DB_QueryStatus
@@ -2547,8 +2546,7 @@ struct TALER_EXCHANGEDB_Plugin
     struct GNUNET_TIME_Timestamp now,
     bool *found,
     bool *balance_ok,
-    struct TALER_EXCHANGEDB_KycStatus *kyc_ok,
-    uint64_t *reserve_uuid);
+    struct TALER_EXCHANGEDB_KycStatus *kyc_ok);
 
 
   /**
@@ -2556,7 +2554,7 @@ struct TALER_EXCHANGEDB_Plugin
    * checks after withdraw operation.
    *
    * @param cls the `struct PostgresClosure` with the plugin-specific state
-   * @param reserve_uuid reserve to check
+   * @param reserve_pub reserve to check
    * @param withdraw_start starting point to accumulate from
    * @param upper_limit maximum amount allowed
    * @param[out] below_limit set to true if the limit was not exceeded
@@ -2565,7 +2563,7 @@ struct TALER_EXCHANGEDB_Plugin
   enum GNUNET_DB_QueryStatus
   (*do_withdraw_limit_check)(
     void *cls,
-    uint64_t reserve_uuid,
+    const struct TALER_ReservePublicKeyP *reserve_pub,
     struct GNUNET_TIME_Absolute withdraw_start,
     const struct TALER_Amount *upper_limit,
     bool *below_limit);

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