gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated (2a4aa9eb -> b001046a)


From: gnunet
Subject: [taler-exchange] branch master updated (2a4aa9eb -> b001046a)
Date: Tue, 03 Jan 2023 11:28:58 +0100

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

joseph-xu pushed a change to branch master
in repository exchange.

    from 2a4aa9eb -missed a file during last commit
     new 1c104ddf insert
     new b001046a some modifications for batch update

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:
 contrib/gana                                       |   2 +-
 src/exchangedb/Makefile.am                         |   3 +-
 .../exchange_do_batch_reserves_update.sql          |   2 +-
 src/exchangedb/pg_batch2_reserves_in_insert.c      |  11 +-
 src/exchangedb/test_exchangedb_populate_table.c    | 289 +++++++++++++++++----
 5 files changed, 242 insertions(+), 65 deletions(-)

diff --git a/contrib/gana b/contrib/gana
index df1d1989..3e659ed5 160000
--- a/contrib/gana
+++ b/contrib/gana
@@ -1 +1 @@
-Subproject commit df1d198918cbdd03c18723d818979c8d09f8f231
+Subproject commit 3e659ed54023230dd45dbec5664f176e1763d260
diff --git a/src/exchangedb/Makefile.am b/src/exchangedb/Makefile.am
index 2f650027..303f04fb 100644
--- a/src/exchangedb/Makefile.am
+++ b/src/exchangedb/Makefile.am
@@ -297,6 +297,7 @@ check_PROGRAMS = \
   test-exchangedb-by-j-postgres\
   test-exchangedb-batch-reserves-in-insert-postgres\
   test-exchangedb-populate-table-postgres
+
 AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export 
PATH=$${TALER_PREFIX:-@prefix@}/bin:$$PATH;
 TESTS = \
   test-exchangedb-postgres\
@@ -305,7 +306,6 @@ TESTS = \
   test-exchangedb-batch-reserves-in-insert-postgres\
   test-exchangedb-populate-table-postgres
 
-
 test_exchangedb_postgres_SOURCES = \
   test_exchangedb.c
 test_exchangedb_postgres_LDADD = \
@@ -399,5 +399,6 @@ bench_db_postgres_LDADD = \
   -lgnunetutil \
   $(XLIB)
 
+
 EXTRA_test_exchangedb_postgres_DEPENDENCIES = \
   libtaler_plugin_exchangedb_postgres.la
diff --git a/src/exchangedb/exchange_do_batch_reserves_update.sql 
b/src/exchangedb/exchange_do_batch_reserves_update.sql
index af5d358f..05dd1876 100644
--- a/src/exchangedb/exchange_do_batch_reserves_update.sql
+++ b/src/exchangedb/exchange_do_batch_reserves_update.sql
@@ -79,7 +79,7 @@ BEGIN
     PERFORM pg_notify(in_notify, NULL);
   ELSE
     CLOSE curs;
-    IF ! out_reserve_found
+    IF NOT in_reserve_found
     THEN
       ROLLBACK;
     END IF;
diff --git a/src/exchangedb/pg_batch2_reserves_in_insert.c 
b/src/exchangedb/pg_batch2_reserves_in_insert.c
index 219261cc..08d3ee8e 100644
--- a/src/exchangedb/pg_batch2_reserves_in_insert.c
+++ b/src/exchangedb/pg_batch2_reserves_in_insert.c
@@ -819,15 +819,13 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
   }
 
   enum GNUNET_DB_QueryStatus qs3;
-  PREPARE (pg,
-           "reserves_update",
-           "CALL exchange_do_batch_reserves_update"
-           " ($1,$2,$3,$4,$5,$6,$7,$8,$9);");
+
   for (unsigned int i = 0; i<reserves_length; i++)
   {
 
     if (! conflicts[i])
       continue;
+    //   fprintf(stdout, "%d\n", conflicts[i]);
     {
       //      const struct TALER_EXCHANGEDB_ReserveInInfo *reserve = 
&reserves[i];
       struct GNUNET_PQ_QueryParam params[] = {
@@ -841,7 +839,10 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
         GNUNET_PQ_query_param_string (notify_s[i]),
         GNUNET_PQ_query_param_end
       };
-
+      PREPARE (pg,
+               "reserves_update",
+               "CALL exchange_do_batch_reserves_update"
+               " ($1,$2,$3,$4,$5,$6,$7,$8,$9);");
       qs3 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
                                                 "reserves_update",
                                                 params);
diff --git a/src/exchangedb/test_exchangedb_populate_table.c 
b/src/exchangedb/test_exchangedb_populate_table.c
index ed30894b..e286f168 100644
--- a/src/exchangedb/test_exchangedb_populate_table.c
+++ b/src/exchangedb/test_exchangedb_populate_table.c
@@ -63,7 +63,7 @@ static int result;
  */
 #define MELT_NEW_COINS 5
 
-
+#define NUMBER_DEPOSIT 10
 /**
  * How big do we make the RSA keys?
  */
@@ -75,7 +75,7 @@ static int result;
  */
 static struct TALER_EXCHANGEDB_Plugin *plugin;
 static struct TALER_DenomFeeSet fees;
-
+static struct TALER_MerchantWireHashP h_wire_wt;
 
 struct DenomKeyPair
 {
@@ -177,6 +177,87 @@ create_denom_key_pair (unsigned int size,
   return dkp;
 }
 
+/**
+ * Here we store the hash of the payto URI.
+ */
+static struct TALER_PaytoHashP wire_target_h_payto;
+/**
+ * Counter used in auditor-related db functions. Used to count
+ * expected rows.
+ */
+static unsigned int auditor_row_cnt;
+/**
+ * Callback for #select_deposits_above_serial_id ()
+ *
+ * @param cls closure
+ * @param rowid unique serial ID for the deposit in our DB
+ * @param exchange_timestamp when did the deposit happen
+ * @param deposit deposit details
+ * @param denom_pub denomination of the @a coin_pub
+ * @param done flag set if the deposit was already executed (or not)
+ * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
+ */
+static enum GNUNET_GenericReturnValue
+audit_deposit_cb (void *cls,
+                  uint64_t rowid,
+                  struct GNUNET_TIME_Timestamp exchange_timestamp,
+                  const struct TALER_EXCHANGEDB_Deposit *deposit,
+                  const struct TALER_DenominationPublicKey *denom_pub,
+                  bool done)
+{
+  (void) cls;
+  (void) rowid;
+  (void) exchange_timestamp;
+  (void) deposit;
+  (void) denom_pub;
+  (void) done;
+  auditor_row_cnt++;
+  return GNUNET_OK;
+}
+/**
+ * Function called on deposits that are past their due date
+ * and have not yet seen a wire transfer.
+ *
+ * @param cls closure a `struct TALER_EXCHANGEDB_Deposit *`
+ * @param rowid deposit table row of the coin's deposit
+ * @param coin_pub public key of the coin
+ * @param amount value of the deposit, including fee
+ * @param payto_uri where should the funds be wired
+ * @param deadline what was the requested wire transfer deadline
+ * @param done did the exchange claim that it made a transfer?
+ */
+static void
+wire_missing_cb (void *cls,
+                 uint64_t rowid,
+                 const struct TALER_CoinSpendPublicKeyP *coin_pub,
+                 const struct TALER_Amount *amount,
+                 const char *payto_uri,
+                 struct GNUNET_TIME_Timestamp deadline,
+                 bool done)
+{
+  const struct TALER_EXCHANGEDB_Deposit *deposit = cls;
+
+  (void) payto_uri;
+  (void) deadline;
+  (void) rowid;
+  if (done)
+  {
+    GNUNET_break (0);
+    result = 66;
+  }
+  if (0 != TALER_amount_cmp (amount,
+                             &deposit->amount_with_fee))
+  {
+    GNUNET_break (0);
+    result = 66;
+  }
+  if (0 != GNUNET_memcmp (coin_pub,
+                          &deposit->coin.coin_pub))
+  {
+    GNUNET_break (0);
+    result = 66;
+  }
+}
 
 
 
@@ -194,24 +275,27 @@ run (void *cls)
   const uint32_t num_partitions = 10;
   struct DenomKeyPair *dkp = NULL;
   struct GNUNET_TIME_Timestamp ts;
-  struct TALER_EXCHANGEDB_Deposit depos;
-  struct GNUNET_TIME_Timestamp ts_deadline;
+  struct TALER_EXCHANGEDB_Deposit depos[NUMBER_DEPOSIT];
+  struct GNUNET_TIME_Timestamp deadline;
   struct TALER_Amount value;
   union TALER_DenominationBlindingKeyP bks;
   struct TALER_CoinPubHashP c_hash;
   struct TALER_EXCHANGEDB_CollectableBlindcoin cbc;
+  struct TALER_EXCHANGEDB_CollectableBlindcoin cbc2;
   struct TALER_ExchangeWithdrawValues alg_values = {
     .cipher = TALER_DENOMINATION_RSA
     };
   struct TALER_PlanchetMasterSecretP ps;
   struct TALER_ReservePublicKeyP reserve_pub;
+  struct TALER_EXCHANGEDB_Refund ref;
 
   ZR_BLK (&cbc);
+  ZR_BLK (&cbc2);
   RND_BLK (&reserve_pub);
 
-  memset (&depos,
+  memset (&ref,
           0,
-          sizeof (depos));
+          sizeof (ref));
 
   if (NULL ==
       (plugin = TALER_EXCHANGEDB_plugin_load (cfg)))
@@ -253,13 +337,13 @@ run (void *cls)
   GNUNET_assert (GNUNET_OK ==
                  TALER_string_to_amount (CURRENCY ":0.000010",
                                          &fees.refund));
-
   ts = GNUNET_TIME_timestamp_get ();
-
+  deadline = GNUNET_TIME_timestamp_get ();
   dkp = create_denom_key_pair (RSA_KEY_SIZE,
                                ts,
                                &value,
                                &fees);
+
   GNUNET_assert (NULL != dkp);
   TALER_denom_pub_hash (&dkp->pub,
                         &cbc.denom_pub_hash);
@@ -314,65 +398,156 @@ run (void *cls)
   GNUNET_assert (GNUNET_OK ==
                  TALER_amount_set_zero (CURRENCY,
                                         &cbc.withdraw_fee));
+  for (unsigned int i=0; i< NUMBER_DEPOSIT; i++)
+    {
+      fprintf(stdout, "%d\n", i);
+      depos[i].deposit_fee = fees.deposit;
 
+      RND_BLK (&depos[i].coin.coin_pub);
 
-
-
-  ts_deadline = GNUNET_TIME_timestamp_get ();
-
-  depos.deposit_fee = fees.deposit;
-
-  RND_BLK (&depos.coin.coin_pub);
-  TALER_denom_pub_hash (&dkp->pub,
-                        &depos.coin.denom_pub_hash);
-  GNUNET_assert (GNUNET_OK ==
-                 TALER_denom_sig_unblind (&depos.coin.denom_sig,
-                                          &cbc.sig,
-                                          &bks,
-                                          &c_hash,
-                                          &alg_values,
-                                          &dkp->pub));
-  {
-    uint64_t known_coin_id;
-    struct TALER_DenominationHashP dph;
-    struct TALER_AgeCommitmentHash agh;
-
-    FAILIF (TALER_EXCHANGEDB_CKS_ADDED !=
-            plugin->ensure_coin_known (plugin->cls,
-                                       &depos.coin,
-                                       &known_coin_id,
-                                       &dph,
-                                       &agh));
-  }
-  {
-    TALER_denom_sig_free (&depos.coin.denom_sig);
-    struct GNUNET_TIME_Timestamp now;
-    RND_BLK (&depos.merchant_pub);
-    RND_BLK (&depos.csig);
-    RND_BLK (&depos.h_contract_terms);
-    RND_BLK (&depos.wire_salt);
-    depos.amount_with_fee = value;
-    depos.refund_deadline = ts_deadline;
-    depos.wire_deadline = ts_deadline;
-    depos.receiver_wire_account =
-      "payto://iban/DE67830654080004822650?receiver-name=Test";
-    depos.timestamp = ts;
-
-    now = GNUNET_TIME_timestamp_get ();
+      TALER_denom_pub_hash (&dkp->pub,
+                            &depos[i].coin.denom_pub_hash);
+      // TALER_denom_pub_hash (&dkp->pub,
+      //                    &ref.coin.denom_pub_hash);
+      GNUNET_assert (GNUNET_OK ==
+                     TALER_denom_sig_unblind (&depos[i].coin.denom_sig,
+                                              &cbc.sig,
+                                              &bks,
+                                              &c_hash,
+                                              &alg_values,
+                                              &dkp->pub));
+
+      RND_BLK (&depos[i].merchant_pub);
+      RND_BLK (&depos[i].csig);
+      RND_BLK (&depos[i].h_contract_terms);
+      RND_BLK (&depos[i].wire_salt);
+      depos[i].amount_with_fee = value;
+      depos[i].refund_deadline = deadline;
+      depos[i].wire_deadline = deadline;
+      depos[i].receiver_wire_account =
+        "payto://iban/DE67830654080004822650?receiver-name=Test";
+      TALER_merchant_wire_signature_hash (
+                                          
"payto://iban/DE67830654080004822650?receiver-name=Test",
+                                          &depos[i].wire_salt,
+                                          &h_wire_wt);
+      depos[i].timestamp = ts;
+      result = 8;
+        {
+          uint64_t known_coin_id;
+          struct TALER_DenominationHashP dph;
+          struct TALER_AgeCommitmentHash agh;
+          FAILIF (TALER_EXCHANGEDB_CKS_ADDED !=
+                  plugin->ensure_coin_known (plugin->cls,
+                                             &depos[i].coin,
+                                             &known_coin_id,
+                                             &dph,
+                                             &agh));
+        }
+
+        /*wire + deposit for get_ready_deposit*/
+
+        /*STORE INTO DEPOSIT*/
+        {
+          struct GNUNET_TIME_Timestamp now;
+          struct GNUNET_TIME_Timestamp r;
+          struct TALER_Amount deposit_fee;
+          struct TALER_MerchantWireHashP h_wire;
+
+          now = GNUNET_TIME_timestamp_get ();
+          FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
+                  plugin->insert_deposit (plugin->cls,
+                                          now,
+                                          &depos[i]));
+          TALER_merchant_wire_signature_hash (depos[i].receiver_wire_account,
+                                              &depos[i].wire_salt,
+                                              &h_wire);
+          FAILIF (1 !=
+                  plugin->have_deposit2 (plugin->cls,
+                                         &depos[i].h_contract_terms,
+                                         &h_wire,
+                                         &depos[i].coin.coin_pub,
+                                         &depos[i].merchant_pub,
+                                         depos[i].refund_deadline,
+                                         &deposit_fee,
+                                         &r));
+          FAILIF (GNUNET_TIME_timestamp_cmp (now,
+                                             !=,
+                                             r));
+        }
+        {
+          struct GNUNET_TIME_Timestamp start_range;
+          struct GNUNET_TIME_Timestamp end_range;
+
+          start_range = GNUNET_TIME_absolute_to_timestamp (
+                                                           
GNUNET_TIME_absolute_subtract (deadline.abs_time,
+                                                                               
           GNUNET_TIME_UNIT_SECONDS));
+          end_range = GNUNET_TIME_absolute_to_timestamp (
+                                                         
GNUNET_TIME_absolute_add (deadline.abs_time,
+                                                                               
    GNUNET_TIME_UNIT_SECONDS));
+          /*Aborted*/
+          FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
+                  plugin->select_deposits_missing_wire (plugin->cls,
+                                                        start_range,
+                                                        end_range,
+                                                        &wire_missing_cb,
+                                                        &depos[i]));
+
+          FAILIF (8 != result);
+        }
+        auditor_row_cnt = 0;
+        FAILIF (0 >=
+                plugin->select_deposits_above_serial_id (plugin->cls,
+                                                         0,
+                                                         &audit_deposit_cb,
+                                                         NULL));
+        FAILIF (0 == auditor_row_cnt);
+        result = 8;
+        sleep (2);
+        /*CREATE DEPOSIT*/
+        {
+          struct TALER_MerchantPublicKeyP merchant_pub2;
+          char *payto_uri2;
+
+          FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
+                  plugin->get_ready_deposit (plugin->cls,
+                                             0,
+                                       INT32_MAX,
+                                             &merchant_pub2,
+                                             &payto_uri2));
+          FAILIF (0 != GNUNET_memcmp (&merchant_pub2,
+                                      &depos[i].merchant_pub));
+          FAILIF (0 != strcmp (payto_uri2,
+                               depos[i].receiver_wire_account));
+          TALER_payto_hash (payto_uri2,
+                            &wire_target_h_payto);
+          GNUNET_free (payto_uri2);
+        }
+  /* {
+    RND_BLK (&ref.details.merchant_pub);
+    RND_BLK(&ref.details.merchant_sig);
+    ref.details.h_contract_terms = depos.h_contract_terms;
+    ref.coin.coin_pub = depos.coin.coin_pub;
+    ref.details.rtransaction_id = 1;
+    ref.details.refund_amount = value;
+    ref.details.refund_fee = fees.refund;
     FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-            plugin->insert_deposit (plugin->cls,
-                                    now,
-                                    &depos));
-  }
+            plugin->insert_refund (plugin->cls,
+                                   &ref));
+                                   }*/
+
+    }
 
   result = 0;
-  drop:
+drop:
   GNUNET_break (GNUNET_OK ==
   plugin->drop_tables (plugin->cls));
 cleanup:
   if (NULL != dkp)
     destroy_denom_key_pair (dkp);
-  TALER_denom_sig_free (&depos.coin.denom_sig);
+  for (unsigned int i=0; i<NUMBER_DEPOSIT; i++){
+    TALER_denom_sig_free (&depos[i].coin.denom_sig);}
+
+  TALER_denom_sig_free (&ref.coin.denom_sig);
   TALER_blinded_denom_sig_free (&cbc.sig);
   dkp = NULL;
   TALER_EXCHANGEDB_plugin_unload (plugin);

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