gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -implement DB logic for forcing


From: gnunet
Subject: [taler-exchange] branch master updated: -implement DB logic for forcing reserve close
Date: Mon, 04 Jul 2022 23:40:53 +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 615b4621 -implement DB logic for forcing reserve close
615b4621 is described below

commit 615b4621e3637db8ea32b0a17803101044adb594
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Mon Jul 4 23:40:49 2022 +0200

    -implement DB logic for forcing reserve close
---
 src/exchangedb/exchange-0001-part.sql       | 41 +++++++++++++++++-
 src/exchangedb/plugin_exchangedb_postgres.c | 64 +++++++++--------------------
 src/include/taler_exchangedb_plugin.h       | 20 +--------
 3 files changed, 62 insertions(+), 63 deletions(-)

diff --git a/src/exchangedb/exchange-0001-part.sql 
b/src/exchangedb/exchange-0001-part.sql
index cc34b6be..e2412995 100644
--- a/src/exchangedb/exchange-0001-part.sql
+++ b/src/exchangedb/exchange-0001-part.sql
@@ -3605,6 +3605,7 @@ END $$;
 
 CREATE OR REPLACE FUNCTION exchange_do_close_request(
   IN in_reserve_pub BYTEA,
+  IN in_close_timestamp INT8,
   IN in_reserve_sig BYTEA,
   OUT out_final_balance_val INT8,
   OUT out_final_balance_frac INT4,
@@ -3613,7 +3614,45 @@ CREATE OR REPLACE FUNCTION exchange_do_close_request(
 LANGUAGE plpgsql
 AS $$
 BEGIN
-  -- FIXME
+
+  SELECT
+    current_balance_val
+   ,current_balance_frac
+  INTO
+    out_final_balance_val
+   ,out_final_balance_frac
+  FROM reserves
+  WHERE reserve_pub=in_reserve_pub;
+
+  IF NOT FOUND
+  THEN
+    out_final_balance_val=0;
+    out_final_balance_frac=0;
+    out_balance_ok = FALSE;
+    out_conflict = FALSE;
+  END IF;
+
+  INSERT INTO close_requests
+    (reserve_pub
+    ,close_timestamp
+    ,reserve_sig
+    ,close_val
+    ,close_frac)
+    VALUES
+    (in_reserve_pub
+    ,in_close_timestamp
+    ,in_reserve_sig
+    ,out_final_balance_val
+    ,out_final_balance_frac)
+  ON CONFLICT DO NOTHING;
+  out_conflict = NOT FOUND;
+
+  UPDATE reserves SET
+    current_balance_val=0
+   ,current_balance_frac=0
+  WHERE reserve_pub=in_reserve_pub;
+  out_balance_ok = TRUE;
+
 END $$;
 
 
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index 5985fa95..cbacebbd 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -741,22 +741,6 @@ prepare_statements (struct PostgresClosure *pg)
       ") VALUES ($1, $2, $3, $4, $5, $6, $7)"
       " ON CONFLICT DO NOTHING;",
       7),
-#if FIXME_DEAD
-    /* Used in #postgres_reserves_in_insert() to store transaction details */
-    GNUNET_PQ_make_prepare (
-      "reserves_in_add_by_pub",
-      "INSERT INTO reserves_in "
-      "(reserve_pub"
-      ",wire_reference"
-      ",credit_val"
-      ",credit_frac"
-      ",exchange_account_section"
-      ",wire_source_h_payto"
-      ",execution_date"
-      ") VALUES ($1, $2, $3, $4, $5, $6, $7)"
-      " ON CONFLICT DO NOTHING;",
-      7),
-#endif
     /* Used in postgres_select_reserves_in_above_serial_id() to obtain inbound
        transactions for reserves with serial id '\geq' the given parameter */
     GNUNET_PQ_make_prepare (
@@ -4268,8 +4252,8 @@ prepare_statements (struct PostgresClosure *pg)
       " out_final_balance_val"
       ",out_final_balance_frac"
       " FROM exchange_do_close_request"
-      "  ($1, $2)",
-      2),
+      "  ($1, $2, $3)",
+      3),
 
     GNUNET_PQ_PREPARED_STATEMENT_END
   };
@@ -15868,28 +15852,6 @@ postgres_select_purse_merge (
 }
 
 
-/**
- * Function called to approve merging of a purse with
- * an account, made by the receiving account.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub public key of the purse being merged
- * @param reserve_pub public key of the account being credited
- * @param reserve_sig signature of the account holder affirming the merge
- * @return transaction status code
- */
-static enum GNUNET_DB_QueryStatus
-postgres_do_account_merge (
-  void *cls,
-  const struct TALER_PurseContractPublicKeyP *purse_pub,
-  const struct TALER_ReservePublicKeyP *reserve_pub,
-  const struct TALER_ReserveSignatureP *reserve_sig)
-{
-  GNUNET_break (0); // FIXME: Function dead, eliminate? (DCE)
-  return GNUNET_DB_STATUS_HARD_ERROR;
-}
-
-
 /**
  * Function called to persist a signature that
  * prove that the client requested an
@@ -15953,10 +15915,26 @@ postgres_insert_close_request (
   void *cls,
   const struct TALER_ReservePublicKeyP *reserve_pub,
   const struct TALER_ReserveSignatureP *reserve_sig,
+  struct GNUNET_TIME_Timestamp request_timestamp,
   struct TALER_Amount *final_balance)
 {
-  GNUNET_break (0); // FIXME
-  return GNUNET_DB_STATUS_HARD_ERROR;
+  struct PostgresClosure *pg = cls;
+  struct GNUNET_PQ_QueryParam params[] = {
+    GNUNET_PQ_query_param_auto_from_type (reserve_pub),
+    GNUNET_PQ_query_param_timestamp (&request_timestamp),
+    GNUNET_PQ_query_param_auto_from_type (reserve_sig),
+    GNUNET_PQ_query_param_end
+  };
+  struct GNUNET_PQ_ResultSpec rs[] = {
+    TALER_PQ_RESULT_SPEC_AMOUNT ("out_final_balance",
+                                 final_balance),
+    GNUNET_PQ_result_spec_end
+  };
+
+  return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
+                                                   "call_account_close",
+                                                   params,
+                                                   rs);
 }
 
 
@@ -16272,8 +16250,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
     = &postgres_do_reserve_purse;
   plugin->select_purse_merge
     = &postgres_select_purse_merge;
-  plugin->do_account_merge
-    = &postgres_do_account_merge;
   plugin->insert_history_request
     = &postgres_insert_history_request;
   plugin->insert_close_request
diff --git a/src/include/taler_exchangedb_plugin.h 
b/src/include/taler_exchangedb_plugin.h
index 4ec2b6c7..23b2702e 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -5462,24 +5462,6 @@ struct TALER_EXCHANGEDB_Plugin
     struct TALER_ReservePublicKeyP *reserve_pub);
 
 
-  /**
-   * Function called to approve merging of a purse with
-   * an account, made by the receiving account.
-   *
-   * @param cls the @e cls of this struct with the plugin-specific state
-   * @param purse_pub public key of the purse being merged
-   * @param reserve_pub public key of the account being credited
-   * @param reserve_sig signature of the account holder affirming the merge
-   * @return transaction status code
-   */
-  enum GNUNET_DB_QueryStatus
-  (*do_account_merge)(
-    void *cls,
-    const struct TALER_PurseContractPublicKeyP *purse_pub,
-    const struct TALER_ReservePublicKeyP *reserve_pub,
-    const struct TALER_ReserveSignatureP *reserve_sig);
-
-
   /**
    * Function called to persist a signature that
    * prove that the client requested an
@@ -5513,6 +5495,7 @@ struct TALER_EXCHANGEDB_Plugin
    * @param cls the @e cls of this struct with the plugin-specific state
    * @param reserve_pub public key of the account to close
    * @param reserve_sig signature affiming that the account is to be closed
+   * @param request_timestamp timestamp of the close request
    * @param[out] final_balance set to the final balance in the account that 
will be wired back to the origin account
    * @return transaction status code
    */
@@ -5520,6 +5503,7 @@ struct TALER_EXCHANGEDB_Plugin
   (*insert_close_request)(void *cls,
                           const struct TALER_ReservePublicKeyP *reserve_pub,
                           const struct TALER_ReserveSignatureP *reserve_sig,
+                          struct GNUNET_TIME_Timestamp request_timestamp,
                           struct TALER_Amount *final_balance);
 
 

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