[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-donau] branch master updated: [db] cleanup working on pg headers
From: |
gnunet |
Subject: |
[taler-donau] branch master updated: [db] cleanup working on pg headers |
Date: |
Mon, 23 Oct 2023 15:20:20 +0200 |
This is an automated email from the git hooks/post-receive script.
johannes-casaburi pushed a commit to branch master
in repository donau.
The following commit(s) were added to refs/heads/master by this push:
new 4f7290a [db] cleanup working on pg headers
new 93ed1b0 Merge remote-tracking branch 'refs/remotes/origin/master'
4f7290a is described below
commit 4f7290acd5983a7e44c543d8fe4dc5503f54aad3
Author: Casaburi Johannes <johannes.casaburi@students.bfh.ch>
AuthorDate: Mon Oct 23 15:17:35 2023 +0200
[db] cleanup working on pg headers
---
src/donaudb/pg_activate_signing_key.c | 6 +-
src/donaudb/pg_activate_signing_key.h | 6 +-
...nomination_key.c => pg_add_donation_unit_key.c} | 0
...nomination_key.h => pg_add_donation_unit_key.h} | 18 +-
src/donaudb/pg_batch_ensure_coin_known.c | 470 ----------
src/donaudb/pg_batch_ensure_coin_known.h | 47 -
src/donaudb/pg_do_batch_withdraw.c | 85 --
src/donaudb/pg_do_batch_withdraw.h | 57 --
src/donaudb/pg_do_batch_withdraw_insert.c | 77 --
src/donaudb/pg_do_batch_withdraw_insert.h | 52 --
src/donaudb/pg_do_deposit.c | 116 ---
src/donaudb/pg_do_deposit.h | 51 --
src/donaudb/pg_do_withdraw.c | 95 ---
src/donaudb/pg_do_withdraw.h | 59 --
src/donaudb/pg_ensure_coin_known.h | 5 +-
src/donaudb/pg_get_coin_denomination.c | 69 --
src/donaudb/pg_get_coin_denomination.h | 43 -
src/donaudb/pg_get_coin_transactions.c | 948 ---------------------
src/donaudb/pg_get_coin_transactions.h | 44 -
src/donaudb/pg_get_denomination_info.h | 18 +-
src/donaudb/pg_get_denomination_revocation.c | 63 --
src/donaudb/pg_get_denomination_revocation.h | 45 -
src/donaudb/pg_get_expired_reserves.c | 174 ----
src/donaudb/pg_get_expired_reserves.h | 45 -
src/donaudb/pg_get_ready_deposit.c | 74 --
src/donaudb/pg_get_ready_deposit.h | 46 -
src/donaudb/pg_get_reserve_balance.c | 55 --
src/donaudb/pg_get_reserve_balance.h | 40 -
src/donaudb/pg_get_reserve_by_h_blind.c | 63 --
src/donaudb/pg_get_reserve_by_h_blind.h | 44 -
src/donaudb/pg_get_withdraw_info.c | 79 --
src/donaudb/pg_get_withdraw_info.h | 43 -
src/donaudb/pg_have_deposit2.c | 117 ---
src/donaudb/pg_have_deposit2.h | 53 --
src/donaudb/pg_insert_denomination_info.h | 17 +-
src/donaudb/pg_insert_denomination_revocation.c | 54 --
src/donaudb/pg_insert_denomination_revocation.h | 42 -
src/donaudb/pg_insert_signkey_revocation.h | 6 +-
src/donaudb/pg_iterate_active_signkeys.c | 144 ----
src/donaudb/pg_iterate_active_signkeys.h | 43 -
src/donaudb/pg_iterate_denomination_info.c | 180 ----
src/donaudb/pg_iterate_denomination_info.h | 41 -
src/donaudb/pg_iterate_denominations.c | 172 ----
src/donaudb/pg_iterate_denominations.h | 44 -
src/donaudb/pg_lookup_signing_key.h | 2 +-
src/donaudb/pg_lookup_signkey_revocation.h | 6 +-
src/donaudb/pg_reserves_get.c | 61 --
src/donaudb/pg_reserves_get.h | 40 -
src/donaudb/pg_reserves_get_origin.c | 57 --
src/donaudb/pg_reserves_get_origin.h | 41 -
src/donaudb/pg_reserves_in_insert.c | 372 --------
src/donaudb/pg_reserves_in_insert.h | 47 -
src/donaudb/pg_reserves_update.c | 53 --
src/donaudb/pg_reserves_update.h | 40 -
src/include/taler_donaudb_plugin.h | 5 -
55 files changed, 35 insertions(+), 4639 deletions(-)
diff --git a/src/donaudb/pg_activate_signing_key.c
b/src/donaudb/pg_activate_signing_key.c
index f5a4bc4..cf7d717 100644
--- a/src/donaudb/pg_activate_signing_key.c
+++ b/src/donaudb/pg_activate_signing_key.c
@@ -29,8 +29,7 @@ enum GNUNET_DB_QueryStatus
TEH_PG_activate_signing_key (
void *cls,
const struct TALER_DonauPublicKeyP *donau_pub,
- const struct TALER_DONAUDB_SignkeyMetaData *meta,
- const struct TALER_MasterSignatureP *master_sig)
+ const struct TALER_DONAUDB_SignkeyMetaData *meta)
{
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam iparams[] = {
@@ -49,9 +48,8 @@ TEH_PG_activate_signing_key (
",valid_from"
",expire_sign"
",expire_legal"
- ",master_sig"
") VALUES "
- "($1, $2, $3, $4, $5);");
+ "($1, $2, $3, $4);");
return GNUNET_PQ_eval_prepared_non_select (pg->conn,
"insert_signkey",
iparams);
diff --git a/src/donaudb/pg_activate_signing_key.h
b/src/donaudb/pg_activate_signing_key.h
index 26fe3bc..97a30c1 100644
--- a/src/donaudb/pg_activate_signing_key.h
+++ b/src/donaudb/pg_activate_signing_key.h
@@ -16,7 +16,7 @@
/**
* @file donaudb/pg_activate_signing_key.h
* @brief implementation of the activate_signing_key function for Postgres
- * @author Christian Grothoff
+ * @author Johannes Casaburi
*/
#ifndef PG_ACTIVATE_SIGNING_KEY_H
#define PG_ACTIVATE_SIGNING_KEY_H
@@ -31,14 +31,12 @@
* @param cls closure
* @param donau_pub the donau online signing public key
* @param meta meta data about @a donau_pub
- * @param master_sig master signature to add
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
TEH_PG_activate_signing_key (
void *cls,
const struct TALER_DonauPublicKeyP *donau_pub,
- const struct TALER_DONAUDB_SignkeyMetaData *meta,
- const struct TALER_MasterSignatureP *master_sig);
+ const struct TALER_DONAUDB_SignkeyMetaData *meta);
#endif
diff --git a/src/donaudb/pg_add_denomination_key.c
b/src/donaudb/pg_add_donation_unit_key.c
similarity index 100%
rename from src/donaudb/pg_add_denomination_key.c
rename to src/donaudb/pg_add_donation_unit_key.c
diff --git a/src/donaudb/pg_add_denomination_key.h
b/src/donaudb/pg_add_donation_unit_key.h
similarity index 69%
rename from src/donaudb/pg_add_denomination_key.h
rename to src/donaudb/pg_add_donation_unit_key.h
index f2299eb..90c971d 100644
--- a/src/donaudb/pg_add_denomination_key.h
+++ b/src/donaudb/pg_add_donation_unit_key.h
@@ -16,31 +16,27 @@
/**
* @file donaudb/pg_add_denomination_key.h
* @brief implementation of the add_denomination_key function for Postgres
- * @author Christian Grothoff
+ * @author Johannes Casaburi
*/
-#ifndef PG_ADD_DENOMINATION_KEY_H
-#define PG_ADD_DENOMINATION_KEY_H
+#ifndef PG_ADD_DONATION_UNIT_KEY_H
+#define PG_ADD_DONATION_UNIT_KEY_H
#include "taler_util.h"
#include "taler_json_lib.h"
#include "taler_donaudb_plugin.h"
/**
- * Activate denomination key, turning it into a "current" or "valid"
+ * Activate donation unit key, turning it into a "current" or "valid"
* denomination key by adding the master signature.
*
* @param cls closure
- * @param h_denom_pub hash of the denomination public key
* @param denom_pub the actual denomination key
- * @param meta meta data about the denomination
- * @param master_sig master signature to add
+ * @param info information about the donation unit key
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
-TEH_PG_add_denomination_key (
+TEH_PG_add_donation_unit_key (
void *cls,
- const struct TALER_DenominationHashP *h_denom_pub,
const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DONAUDB_DenominationKeyMetaData *meta,
- const struct TALER_MasterSignatureP *master_sig);
+ const struct TALER_DONAUDB_DenominationKeyInformation *info)
#endif
diff --git a/src/donaudb/pg_batch_ensure_coin_known.c
b/src/donaudb/pg_batch_ensure_coin_known.c
deleted file mode 100644
index e8e4a5c..0000000
--- a/src/donaudb/pg_batch_ensure_coin_known.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_batch_ensure_coin_known.c
- * @brief Implementation of the batch_ensure_coin_known function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_batch_ensure_coin_known.h"
-#include "pg_helper.h"
-
-
-static enum GNUNET_DB_QueryStatus
-insert1 (struct PostgresClosure *pg,
- const struct TALER_CoinPublicInfo coin[1],
- struct TALER_DONAUDB_CoinInfo result[1])
-{
- enum GNUNET_DB_QueryStatus qs;
- bool is_denom_pub_hash_null = false;
- bool is_age_hash_null = false;
- PREPARE (pg,
- "batch1_known_coin",
- "SELECT"
- " existed1 AS existed"
- ",known_coin_id1 AS known_coin_id"
- ",denom_pub_hash1 AS denom_hash"
- ",age_commitment_hash1 AS h_age_commitment"
- " FROM donau_do_batch1_known_coin"
- " ($1, $2, $3, $4);"
- );
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&coin[0].coin_pub),
- GNUNET_PQ_query_param_auto_from_type (&coin[0].denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&coin[0].h_age_commitment),
- TALER_PQ_query_param_denom_sig (&coin[0].denom_sig),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("existed",
- &result[0].existed),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id",
- &result[0].known_coin_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &result[0].denom_hash),
- &is_denom_pub_hash_null),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
- &result[0].h_age_commitment),
- &is_age_hash_null),
- GNUNET_PQ_result_spec_end
- };
-
- qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "batch1_known_coin",
- params,
- rs);
- switch (qs)
- {
- case GNUNET_DB_STATUS_HARD_ERROR:
- GNUNET_break (0);
- return qs;
- case GNUNET_DB_STATUS_SOFT_ERROR:
- return qs;
- case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
- GNUNET_break (0); /* should be impossible */
- return GNUNET_DB_STATUS_HARD_ERROR;
- case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
- break; /* continued below */
- }
-
- if ( (! is_denom_pub_hash_null) &&
- (0 != GNUNET_memcmp (&result[0].denom_hash,
- &coin->denom_pub_hash)) )
- {
- GNUNET_break_op (0);
- result[0].denom_conflict = true;
- }
-
- if ( (! is_age_hash_null) &&
- (0 != GNUNET_memcmp (&result[0].h_age_commitment,
- &coin->h_age_commitment)) )
- {
- GNUNET_break (GNUNET_is_zero (&result[0].h_age_commitment));
- GNUNET_break_op (0);
- result[0].age_conflict = true;
- }
- return qs;
-}
-
-
-static enum GNUNET_DB_QueryStatus
-insert2 (struct PostgresClosure *pg,
- const struct TALER_CoinPublicInfo coin[2],
- struct TALER_DONAUDB_CoinInfo result[2])
-{
- enum GNUNET_DB_QueryStatus qs;
- bool is_denom_pub_hash_null = false;
- bool is_age_hash_null = false;
- bool is_denom_pub_hash_null2 = false;
- bool is_age_hash_null2 = false;
-
- PREPARE (pg,
- "batch2_known_coin",
- "SELECT"
- " existed1 AS existed"
- ",known_coin_id1 AS known_coin_id"
- ",denom_pub_hash1 AS denom_hash"
- ",age_commitment_hash1 AS h_age_commitment"
- ",existed2 AS existed2"
- ",known_coin_id2 AS known_coin_id2"
- ",denom_pub_hash2 AS denom_hash2"
- ",age_commitment_hash2 AS h_age_commitment2"
- " FROM donau_do_batch2_known_coin"
- " ($1, $2, $3, $4, $5, $6, $7, $8);"
- );
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&coin[0].coin_pub),
- GNUNET_PQ_query_param_auto_from_type (&coin[0].denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&coin[0].h_age_commitment),
- TALER_PQ_query_param_denom_sig (&coin[0].denom_sig),
-
- GNUNET_PQ_query_param_auto_from_type (&coin[1].coin_pub),
- GNUNET_PQ_query_param_auto_from_type (&coin[1].denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&coin[1].h_age_commitment),
- TALER_PQ_query_param_denom_sig (&coin[0].denom_sig),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("existed",
- &result[0].existed),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id",
- &result[0].known_coin_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &result[0].denom_hash),
- &is_denom_pub_hash_null),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
- &result[0].h_age_commitment),
- &is_age_hash_null),
- GNUNET_PQ_result_spec_bool ("existed2",
- &result[1].existed),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id2",
- &result[1].known_coin_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash2",
- &result[1].denom_hash),
- &is_denom_pub_hash_null2),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash2",
- &result[1].h_age_commitment),
- &is_age_hash_null2),
- GNUNET_PQ_result_spec_end
- };
-
- qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "batch2_known_coin",
- params,
- rs);
- switch (qs)
- {
- case GNUNET_DB_STATUS_HARD_ERROR:
- GNUNET_break (0);
- return qs;
- case GNUNET_DB_STATUS_SOFT_ERROR:
- return qs;
- case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
- GNUNET_break (0); /* should be impossible */
- return GNUNET_DB_STATUS_HARD_ERROR;
- case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
- break; /* continued below */
- }
-
- if ( (! is_denom_pub_hash_null) &&
- (0 != GNUNET_memcmp (&result[0].denom_hash,
- &coin[0].denom_pub_hash)) )
- {
- GNUNET_break_op (0);
- result[0].denom_conflict = true;
- }
-
- if ( (! is_age_hash_null) &&
- (0 != GNUNET_memcmp (&result[0].h_age_commitment,
- &coin[0].h_age_commitment)) )
- {
- GNUNET_break (GNUNET_is_zero (&result[0].h_age_commitment));
- GNUNET_break_op (0);
- result[0].age_conflict = true;
- }
- if ( (! is_denom_pub_hash_null2) &&
- (0 != GNUNET_memcmp (&result[1].denom_hash,
- &coin[1].denom_pub_hash)) )
- {
- GNUNET_break_op (0);
- result[1].denom_conflict = true;
- }
-
- if ( (! is_age_hash_null) &&
- (0 != GNUNET_memcmp (&result[1].h_age_commitment,
- &coin[1].h_age_commitment)) )
- {
- GNUNET_break (GNUNET_is_zero (&result[1].h_age_commitment));
- GNUNET_break_op (0);
- result[1].age_conflict = true;
- }
- return qs;
-}
-
-
-static enum GNUNET_DB_QueryStatus
-insert4 (struct PostgresClosure *pg,
- const struct TALER_CoinPublicInfo coin[4],
- struct TALER_DONAUDB_CoinInfo result[4])
-{
- enum GNUNET_DB_QueryStatus qs;
- bool is_denom_pub_hash_null = false;
- bool is_age_hash_null = false;
- bool is_denom_pub_hash_null2 = false;
- bool is_age_hash_null2 = false;
- bool is_denom_pub_hash_null3 = false;
- bool is_age_hash_null3 = false;
- bool is_denom_pub_hash_null4 = false;
- bool is_age_hash_null4 = false;
- PREPARE (pg,
- "batch4_known_coin",
- "SELECT"
- " existed1 AS existed"
- ",known_coin_id1 AS known_coin_id"
- ",denom_pub_hash1 AS denom_hash"
- ",age_commitment_hash1 AS h_age_commitment"
- ",existed2 AS existed2"
- ",known_coin_id2 AS known_coin_id2"
- ",denom_pub_hash2 AS denom_hash2"
- ",age_commitment_hash2 AS h_age_commitment2"
- ",existed3 AS existed3"
- ",known_coin_id3 AS known_coin_id3"
- ",denom_pub_hash3 AS denom_hash3"
- ",age_commitment_hash3 AS h_age_commitment3"
- ",existed4 AS existed4"
- ",known_coin_id4 AS known_coin_id4"
- ",denom_pub_hash4 AS denom_hash4"
- ",age_commitment_hash4 AS h_age_commitment4"
- " FROM donau_do_batch2_known_coin"
- " ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14,
$15, $16);"
- );
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&coin[0].coin_pub),
- GNUNET_PQ_query_param_auto_from_type (&coin[0].denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&coin[0].h_age_commitment),
- TALER_PQ_query_param_denom_sig (&coin[0].denom_sig),
-
- GNUNET_PQ_query_param_auto_from_type (&coin[1].coin_pub),
- GNUNET_PQ_query_param_auto_from_type (&coin[1].denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&coin[1].h_age_commitment),
- TALER_PQ_query_param_denom_sig (&coin[0].denom_sig),
-
- GNUNET_PQ_query_param_auto_from_type (&coin[2].coin_pub),
- GNUNET_PQ_query_param_auto_from_type (&coin[2].denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&coin[2].h_age_commitment),
- TALER_PQ_query_param_denom_sig (&coin[2].denom_sig),
-
- GNUNET_PQ_query_param_auto_from_type (&coin[3].coin_pub),
- GNUNET_PQ_query_param_auto_from_type (&coin[3].denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&coin[3].h_age_commitment),
- TALER_PQ_query_param_denom_sig (&coin[3].denom_sig),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("existed",
- &result[0].existed),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id",
- &result[0].known_coin_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &result[0].denom_hash),
- &is_denom_pub_hash_null),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
- &result[0].h_age_commitment),
- &is_age_hash_null),
- GNUNET_PQ_result_spec_bool ("existed2",
- &result[1].existed),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id2",
- &result[1].known_coin_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash2",
- &result[1].denom_hash),
- &is_denom_pub_hash_null2),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash2",
- &result[1].h_age_commitment),
- &is_age_hash_null2),
- GNUNET_PQ_result_spec_bool ("existed3",
- &result[2].existed),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id3",
- &result[2].known_coin_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash3",
- &result[2].denom_hash),
- &is_denom_pub_hash_null3),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash3",
- &result[2].h_age_commitment),
- &is_age_hash_null3),
- GNUNET_PQ_result_spec_bool ("existed4",
- &result[3].existed),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id4",
- &result[3].known_coin_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash4",
- &result[3].denom_hash),
- &is_denom_pub_hash_null4),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash4",
- &result[3].h_age_commitment),
- &is_age_hash_null4),
- GNUNET_PQ_result_spec_end
- };
-
- qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "batch4_known_coin",
- params,
- rs);
- switch (qs)
- {
- case GNUNET_DB_STATUS_HARD_ERROR:
- GNUNET_break (0);
- return qs;
- case GNUNET_DB_STATUS_SOFT_ERROR:
- return qs;
- case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
- GNUNET_break (0); /* should be impossible */
- return GNUNET_DB_STATUS_HARD_ERROR;
- case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
- break; /* continued below */
- }
-
- if ( (! is_denom_pub_hash_null) &&
- (0 != GNUNET_memcmp (&result[0].denom_hash,
- &coin[0].denom_pub_hash)) )
- {
- GNUNET_break_op (0);
- result[0].denom_conflict = true;
- }
- if ( (! is_age_hash_null) &&
- (0 != GNUNET_memcmp (&result[0].h_age_commitment,
- &coin[0].h_age_commitment)) )
- {
- GNUNET_break (GNUNET_is_zero (&result[0].h_age_commitment));
- GNUNET_break_op (0);
- result[0].age_conflict = true;
- }
-
- if ( (! is_denom_pub_hash_null2) &&
- (0 != GNUNET_memcmp (&result[1].denom_hash,
- &coin[1].denom_pub_hash)) )
- {
- GNUNET_break_op (0);
- result[1].denom_conflict = true;
- }
- if ( (! is_age_hash_null2) &&
- (0 != GNUNET_memcmp (&result[1].h_age_commitment,
- &coin[1].h_age_commitment)) )
- {
- GNUNET_break (GNUNET_is_zero (&result[1].h_age_commitment));
- GNUNET_break_op (0);
- result[1].age_conflict = true;
- }
-
- if ( (! is_denom_pub_hash_null3) &&
- (0 != GNUNET_memcmp (&result[2].denom_hash,
- &coin[2].denom_pub_hash)) )
- {
- GNUNET_break_op (0);
- result[2].denom_conflict = true;
- }
- if ( (! is_age_hash_null3) &&
- (0 != GNUNET_memcmp (&result[2].h_age_commitment,
- &coin[2].h_age_commitment)) )
- {
- GNUNET_break (GNUNET_is_zero (&result[2].h_age_commitment));
- GNUNET_break_op (0);
- result[2].age_conflict = true;
- }
-
- if ( (! is_denom_pub_hash_null4) &&
- (0 != GNUNET_memcmp (&result[3].denom_hash,
- &coin[3].denom_pub_hash)) )
- {
- GNUNET_break_op (0);
- result[3].denom_conflict = true;
- }
- if ( (! is_age_hash_null4) &&
- (0 != GNUNET_memcmp (&result[3].h_age_commitment,
- &coin[3].h_age_commitment)) )
- {
- GNUNET_break (GNUNET_is_zero (&result[3].h_age_commitment));
- GNUNET_break_op (0);
- result[3].age_conflict = true;
- }
- return qs;
-}
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_batch_ensure_coin_known (
- void *cls,
- const struct TALER_CoinPublicInfo *coin,
- struct TALER_DONAUDB_CoinInfo *result,
- unsigned int coin_length,
- unsigned int batch_size)
-{
- struct PostgresClosure *pg = cls;
- enum GNUNET_DB_QueryStatus qs = 0;
- unsigned int i = 0;
-
- while ( (qs >= 0) &&
- (i < coin_length) )
- {
- unsigned int bs = GNUNET_MIN (batch_size,
- coin_length - i);
- if (bs >= 4)
- {
- qs = insert4 (pg,
- &coin[i],
- &result[i]);
- i += 4;
- continue;
- }
- switch (bs)
- {
- case 3:
- case 2:
- qs = insert2 (pg,
- &coin[i],
- &result[i]);
- i += 2;
- break;
- case 1:
- qs = insert1 (pg,
- &coin[i],
- &result[i]);
- i += 1;
- break;
- case 0:
- GNUNET_assert (0);
- break;
- }
- } /* end while */
- if (qs < 0)
- return qs;
- return i;
-}
diff --git a/src/donaudb/pg_batch_ensure_coin_known.h
b/src/donaudb/pg_batch_ensure_coin_known.h
deleted file mode 100644
index 2ffb60e..0000000
--- a/src/donaudb/pg_batch_ensure_coin_known.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022, 2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_batch_ensure_coin_known.h
- * @brief implementation of the batch_ensure_coin_known function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_BATCH_ENSURE_COIN_KNOWN_H
-#define PG_BATCH_ENSURE_COIN_KNOWN_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-
-/**
- * Make sure the array of given @a coin is known to the database.
- *
- * @param cls database connection plugin state
- * @param coin array of coins that must be made known
- * @param[out] result array where to store information about each coin
- * @param coin_length length of the @a coin and @a result arraysf
- * @param batch_size desired (maximum) batch size
- * @return database transaction status, non-negative on success
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_batch_ensure_coin_known (
- void *cls,
- const struct TALER_CoinPublicInfo *coin,
- struct TALER_DONAUDB_CoinInfo *result,
- unsigned int coin_length,
- unsigned int batch_size);
-
-#endif
diff --git a/src/donaudb/pg_do_batch_withdraw.c
b/src/donaudb/pg_do_batch_withdraw.c
deleted file mode 100644
index 543e2f5..0000000
--- a/src/donaudb/pg_do_batch_withdraw.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_batch_withdraw.c
- * @brief Implementation of the do_batch_withdraw function for Postgres
- * @author Christian Grothoff
- * @author Özgür Kesim
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_do_batch_withdraw.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_batch_withdraw (
- void *cls,
- struct GNUNET_TIME_Timestamp now,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_Amount *amount,
- bool do_age_check,
- bool *found,
- bool *balance_ok,
- bool *age_ok,
- uint16_t *allowed_maximum_age,
- uint64_t *ruuid)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_TIME_Timestamp gc;
- struct GNUNET_PQ_QueryParam params[] = {
- TALER_PQ_query_param_amount (pg->conn,
- amount),
- GNUNET_PQ_query_param_auto_from_type (reserve_pub),
- GNUNET_PQ_query_param_timestamp (&now),
- GNUNET_PQ_query_param_timestamp (&gc),
- GNUNET_PQ_query_param_bool (do_age_check),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("reserve_found",
- found),
- GNUNET_PQ_result_spec_bool ("balance_ok",
- balance_ok),
- GNUNET_PQ_result_spec_bool ("age_ok",
- age_ok),
- GNUNET_PQ_result_spec_uint16 ("allowed_maximum_age",
- allowed_maximum_age),
- GNUNET_PQ_result_spec_uint64 ("ruuid",
- ruuid),
- GNUNET_PQ_result_spec_end
- };
-
- gc = GNUNET_TIME_absolute_to_timestamp (
- GNUNET_TIME_absolute_add (now.abs_time,
- pg->legal_reserve_expiration_time));
- PREPARE (pg,
- "call_batch_withdraw",
- "SELECT "
- " reserve_found"
- ",balance_ok"
- ",age_ok"
- ",allowed_maximum_age"
- ",ruuid"
- " FROM donau_do_batch_withdraw"
- " ($1,$2,$3,$4,$5);");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "call_batch_withdraw",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_do_batch_withdraw.h
b/src/donaudb/pg_do_batch_withdraw.h
deleted file mode 100644
index ea769b5..0000000
--- a/src/donaudb/pg_do_batch_withdraw.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_batch_withdraw.h
- * @brief implementation of the do_batch_withdraw function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_DO_BATCH_WITHDRAW_H
-#define PG_DO_BATCH_WITHDRAW_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Perform reserve update as part of a batch withdraw operation, checking
- * for sufficient balance. Persisting the withdrawal details is done
- * separately!
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param now current time (rounded)
- * @param reserve_pub public key of the reserve to debit
- * @param amount total amount to withdraw
- * @param age_check_required if true, fail if age requirements are set on the
reserve
- * @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] age_ok set to true if no age requirements are present on the
reserve
- * @param[out] allowed_maximum_age if @e age_ok is false, set to the maximum
allowed age when withdrawing from this reserve (client needs to call
age-withdraw)
- * @param[out] ruuid set to the reserve's UUID (reserves table row)
- * @return query execution status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_batch_withdraw (
- void *cls,
- struct GNUNET_TIME_Timestamp now,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_Amount *amount,
- bool age_check_required,
- bool *found,
- bool *balance_ok,
- bool *age_ok,
- uint16_t *allowed_maximum_age,
- uint64_t *ruuid);
-
-#endif
diff --git a/src/donaudb/pg_do_batch_withdraw_insert.c
b/src/donaudb/pg_do_batch_withdraw_insert.c
deleted file mode 100644
index 6259c94..0000000
--- a/src/donaudb/pg_do_batch_withdraw_insert.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_batch_withdraw_insert.c
- * @brief Implementation of the do_batch_withdraw_insert function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_do_batch_withdraw_insert.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_batch_withdraw_insert (
- void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_DONAUDB_CollectableBlindcoin *collectable,
- struct GNUNET_TIME_Timestamp now,
- uint64_t ruuid,
- bool *denom_unknown,
- bool *conflict,
- bool *nonce_reuse)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- NULL == nonce
- ? GNUNET_PQ_query_param_null ()
- : GNUNET_PQ_query_param_auto_from_type (nonce),
- TALER_PQ_query_param_amount (pg->conn,
- &collectable->amount_with_fee),
- GNUNET_PQ_query_param_auto_from_type (&collectable->denom_pub_hash),
- GNUNET_PQ_query_param_uint64 (&ruuid),
- GNUNET_PQ_query_param_auto_from_type (&collectable->reserve_sig),
- GNUNET_PQ_query_param_auto_from_type (&collectable->h_coin_envelope),
- TALER_PQ_query_param_blinded_denom_sig (&collectable->sig),
- GNUNET_PQ_query_param_timestamp (&now),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("denom_unknown",
- denom_unknown),
- GNUNET_PQ_result_spec_bool ("conflict",
- conflict),
- GNUNET_PQ_result_spec_bool ("nonce_reuse",
- nonce_reuse),
- GNUNET_PQ_result_spec_end
- };
-
- PREPARE (pg,
- "call_batch_withdraw_insert",
- "SELECT "
- " out_denom_unknown AS denom_unknown"
- ",out_conflict AS conflict"
- ",out_nonce_reuse AS nonce_reuse"
- " FROM donau_do_batch_withdraw_insert"
- " ($1,$2,$3,$4,$5,$6,$7,$8);");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
-
"call_batch_withdraw_insert",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_do_batch_withdraw_insert.h
b/src/donaudb/pg_do_batch_withdraw_insert.h
deleted file mode 100644
index 826dc1e..0000000
--- a/src/donaudb/pg_do_batch_withdraw_insert.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_batch_withdraw_insert.h
- * @brief implementation of the do_batch_withdraw_insert function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_DO_BATCH_WITHDRAW_INSERT_H
-#define PG_DO_BATCH_WITHDRAW_INSERT_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Perform insert as part of a batch withdraw operation, and persisting the
- * withdrawal details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param nonce client-contributed input for CS denominations that must be
checked for idempotency, or NULL for non-CS withdrawals
- * @param collectable corresponding collectable coin (blind signature)
- * @param now current time (rounded)
- * @param ruuid reserve UUID
- * @param[out] denom_unknown set if the denomination is unknown in the DB
- * @param[out] conflict if the envelope was already in the DB
- * @param[out] nonce_reuse if @a nonce was non-NULL and reused
- * @return query execution status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_batch_withdraw_insert (
- void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_DONAUDB_CollectableBlindcoin *collectable,
- struct GNUNET_TIME_Timestamp now,
- uint64_t ruuid,
- bool *denom_unknown,
- bool *conflict,
- bool *nonce_reuse);
-
-#endif
diff --git a/src/donaudb/pg_do_deposit.c b/src/donaudb/pg_do_deposit.c
deleted file mode 100644
index eaa5c04..0000000
--- a/src/donaudb/pg_do_deposit.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022-2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_deposit.c
- * @brief Implementation of the do_deposit function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_do_deposit.h"
-#include "pg_helper.h"
-#include "pg_compute_shard.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_deposit (
- void *cls,
- const struct TALER_DONAUDB_BatchDeposit *bd,
- struct GNUNET_TIME_Timestamp *donau_timestamp,
- bool *balance_ok,
- uint32_t *bad_balance_index,
- bool *ctr_conflict)
-{
- struct PostgresClosure *pg = cls;
- uint64_t deposit_shard = TEH_PG_compute_shard (&bd->charity_pub);
- const struct TALER_CoinSpendPublicKeyP *coin_pubs[GNUNET_NZL (bd->num_cdis)];
- const struct TALER_CoinSpendSignatureP *coin_sigs[GNUNET_NZL (bd->num_cdis)];
- struct TALER_Amount amounts_with_fee[GNUNET_NZL (bd->num_cdis)];
- struct GNUNET_PQ_QueryParam params[] = {
- /* data for batch_deposits */
- GNUNET_PQ_query_param_uint64 (&deposit_shard),
- GNUNET_PQ_query_param_auto_from_type (&bd->charity_pub),
- GNUNET_PQ_query_param_timestamp (&bd->wallet_timestamp),
- GNUNET_PQ_query_param_timestamp (donau_timestamp),
- GNUNET_PQ_query_param_timestamp (&bd->refund_deadline),
- GNUNET_PQ_query_param_timestamp (&bd->wire_deadline),
- GNUNET_PQ_query_param_auto_from_type (&bd->h_contract_terms),
- (bd->no_wallet_data_hash)
- ? GNUNET_PQ_query_param_null ()
- : GNUNET_PQ_query_param_auto_from_type (&bd->wallet_data_hash),
- GNUNET_PQ_query_param_auto_from_type (&bd->wire_salt),
- GNUNET_PQ_query_param_auto_from_type (&bd->wire_target_h_payto),
- (0 == bd->policy_details_serial_id)
- ? GNUNET_PQ_query_param_null ()
- : GNUNET_PQ_query_param_uint64 (&bd->policy_details_serial_id),
- GNUNET_PQ_query_param_bool (bd->policy_blocked),
- /* to create entry in wire_targets */
- GNUNET_PQ_query_param_string (bd->receiver_wire_account),
- /* arrays for coin_deposits */
- GNUNET_PQ_query_param_array_ptrs_auto_from_type (bd->num_cdis,
- coin_pubs,
- pg->conn),
- GNUNET_PQ_query_param_array_ptrs_auto_from_type (bd->num_cdis,
- coin_sigs,
- pg->conn),
- TALER_PQ_query_param_array_amount (bd->num_cdis,
- amounts_with_fee,
- pg->conn),
- GNUNET_PQ_query_param_end
- };
- bool no_time;
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_timestamp ("donau_timestamp",
- donau_timestamp),
- &no_time),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_uint32 ("insufficient_balance_coin_index",
- bad_balance_index),
- balance_ok),
- GNUNET_PQ_result_spec_bool ("conflicted",
- ctr_conflict),
- GNUNET_PQ_result_spec_end
- };
-
- for (unsigned int i = 0; i < bd->num_cdis; i++)
- {
- const struct TALER_DONAUDB_CoinDepositInformation *cdi
- = &bd->cdis[i];
-
- amounts_with_fee[i] = cdi->amount_with_fee;
- coin_pubs[i] = &cdi->coin.coin_pub;
- coin_sigs[i] = &cdi->csig;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Do deposit %u = %s\n",
- i,
- TALER_B2S (&cdi->coin.coin_pub));
- }
- PREPARE (pg,
- "call_deposit",
- "SELECT "
- " out_donau_timestamp AS donau_timestamp"
- ",out_insufficient_balance_coin_index AS
insufficient_balance_coin_index"
- ",out_conflict AS conflicted"
- " FROM donau_do_deposit"
- " ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16);");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "call_deposit",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_do_deposit.h b/src/donaudb/pg_do_deposit.h
deleted file mode 100644
index 40258ef..0000000
--- a/src/donaudb/pg_do_deposit.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_deposit.h
- * @brief implementation of the do_deposit function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_DO_DEPOSIT_H
-#define PG_DO_DEPOSIT_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-
-/**
- * Perform deposit operation, checking for sufficient balance
- * of the coins and possibly persisting the deposit details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param bd batch deposit operation details
- * @param[in,out] donau_timestamp time to use for the deposit (possibly
updated)
- * @param[out] balance_ok set to true if the balance was sufficient
- * @param[out] bad_balance_index set to the first index of a coin for which
the balance was insufficient,
- * only used if @a balance_ok is set to false.
- * @param[out] in_conflict set to true if the deposit conflicted
- * @return query execution status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_deposit (
- void *cls,
- const struct TALER_DONAUDB_BatchDeposit *bd,
- struct GNUNET_TIME_Timestamp *donau_timestamp,
- bool *balance_ok,
- uint32_t *bad_balance_index,
- bool *in_conflict);
-
-#endif
diff --git a/src/donaudb/pg_do_withdraw.c b/src/donaudb/pg_do_withdraw.c
deleted file mode 100644
index 1fa3221..0000000
--- a/src/donaudb/pg_do_withdraw.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_withdraw.c
- * @brief Implementation of the do_withdraw function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_do_withdraw.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_withdraw (
- void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_DONAUDB_CollectableBlindcoin *collectable,
- struct GNUNET_TIME_Timestamp now,
- bool do_age_check,
- bool *found,
- bool *balance_ok,
- bool *nonce_ok,
- bool *age_ok,
- uint16_t *allowed_maximum_age,
- uint64_t *ruuid)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_TIME_Timestamp gc;
- struct GNUNET_PQ_QueryParam params[] = {
- NULL == nonce
- ? GNUNET_PQ_query_param_null ()
- : GNUNET_PQ_query_param_auto_from_type (nonce),
- TALER_PQ_query_param_amount (pg->conn,
- &collectable->amount_with_fee),
- GNUNET_PQ_query_param_auto_from_type (&collectable->denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (&collectable->reserve_pub),
- GNUNET_PQ_query_param_auto_from_type (&collectable->reserve_sig),
- GNUNET_PQ_query_param_auto_from_type (&collectable->h_coin_envelope),
- TALER_PQ_query_param_blinded_denom_sig (&collectable->sig),
- GNUNET_PQ_query_param_timestamp (&now),
- GNUNET_PQ_query_param_timestamp (&gc),
- GNUNET_PQ_query_param_bool (do_age_check),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("reserve_found",
- found),
- GNUNET_PQ_result_spec_bool ("balance_ok",
- balance_ok),
- GNUNET_PQ_result_spec_bool ("nonce_ok",
- nonce_ok),
- GNUNET_PQ_result_spec_bool ("age_ok",
- age_ok),
- GNUNET_PQ_result_spec_uint16 ("allowed_maximum_age",
- allowed_maximum_age),
- GNUNET_PQ_result_spec_uint64 ("ruuid",
- ruuid),
- GNUNET_PQ_result_spec_end
- };
-
- PREPARE (pg,
- "call_withdraw",
- "SELECT "
- " reserve_found"
- ",balance_ok"
- ",nonce_ok"
- ",age_ok"
- ",allowed_maximum_age"
- ",ruuid"
- " FROM donau_do_withdraw"
- " ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10);");
- gc = GNUNET_TIME_absolute_to_timestamp (
- GNUNET_TIME_absolute_add (now.abs_time,
- pg->legal_reserve_expiration_time));
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "call_withdraw",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_do_withdraw.h b/src/donaudb/pg_do_withdraw.h
deleted file mode 100644
index 1e95100..0000000
--- a/src/donaudb/pg_do_withdraw.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_do_withdraw.h
- * @brief implementation of the do_withdraw function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_DO_WITHDRAW_H
-#define PG_DO_WITHDRAW_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Perform withdraw operation, checking for sufficient balance
- * and possibly persisting the withdrawal details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param nonce client-contributed input for CS denominations that must be
checked for idempotency, or NULL for non-CS withdrawals
- * @param[in,out] collectable corresponding collectable coin (blind signature)
if a coin is found; possibly updated if a (different) signature exists already
- * @param now current time (rounded)
- * @param do_age_check set to true if age requirements must be verified
- * @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] nonce_ok set to false if the nonce was reused
- * @param[out] age_ok set to true if age requirements are met
- * @param[out] allowed_maximum_age if @e age_ok is false, the maximum age (in
years) that is allowed during age-withdraw
- * @param[out] ruuid set to the reserve's UUID (reserves table row)
- * @return query execution status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_do_withdraw (
- void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_DONAUDB_CollectableBlindcoin *collectable,
- struct GNUNET_TIME_Timestamp now,
- bool do_age_check,
- bool *found,
- bool *balance_ok,
- bool *nonce_ok,
- bool *age_ok,
- uint16_t *allowed_maximum_age,
- uint64_t *ruuid);
-
-#endif
diff --git a/src/donaudb/pg_ensure_coin_known.h
b/src/donaudb/pg_ensure_coin_known.h
index 5194b0a..89137a7 100644
--- a/src/donaudb/pg_ensure_coin_known.h
+++ b/src/donaudb/pg_ensure_coin_known.h
@@ -25,7 +25,7 @@
#include "taler_json_lib.h"
#include "taler_donaudb_plugin.h"
/**
- * Make sure the given @a coin is known to the database.
+ * Make sure the given @a donation unit is known to the database.
*
* @param cls database connection plugin state
* @param coin the coin that must be made known
@@ -39,7 +39,6 @@ enum TALER_DONAUDB_CoinKnownStatus
TEH_PG_ensure_coin_known (void *cls,
const struct TALER_CoinPublicInfo *coin,
uint64_t *known_coin_id,
- struct TALER_DenominationHashP *denom_hash,
- struct TALER_AgeCommitmentHash *h_age_commitment);
+ struct TALER_DenominationHashP *denom_hash);
#endif
diff --git a/src/donaudb/pg_get_coin_denomination.c
b/src/donaudb/pg_get_coin_denomination.c
deleted file mode 100644
index 6253d9f..0000000
--- a/src/donaudb/pg_get_coin_denomination.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_coin_denomination.c
- * @brief Implementation of the get_coin_denomination function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_coin_denomination.h"
-#include "pg_helper.h"
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_coin_denomination (
- void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- uint64_t *known_coin_id,
- struct TALER_DenominationHashP *denom_hash)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (coin_pub),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- denom_hash),
- GNUNET_PQ_result_spec_uint64 ("known_coin_id",
- known_coin_id),
- GNUNET_PQ_result_spec_end
- };
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Getting coin denomination of coin %s\n",
- TALER_B2S (coin_pub));
-
- /* Used in #postgres_get_coin_denomination() to fetch
- the denomination public key hash for
- a coin known to the donau. */
- PREPARE (pg,
- "get_coin_denomination",
- "SELECT"
- " denominations.denom_pub_hash"
- ",known_coin_id"
- " FROM known_coins"
- " JOIN denominations USING (denominations_serial)"
- " WHERE coin_pub=$1"
- " FOR SHARE;");
-
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "get_coin_denomination",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_get_coin_denomination.h
b/src/donaudb/pg_get_coin_denomination.h
deleted file mode 100644
index 14977d5..0000000
--- a/src/donaudb/pg_get_coin_denomination.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_coin_denomination.h
- * @brief implementation of the get_coin_denomination function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_GET_COIN_DENOMINATION_H
-#define PG_GET_COIN_DENOMINATION_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Retrieve the denomination of a known coin.
- *
- * @param cls the plugin closure
- * @param coin_pub the public key of the coin to search for
- * @param[out] known_coin_id set to the ID of the coin in the known_coins table
- * @param[out] denom_hash where to store the hash of the coins denomination
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_coin_denomination (
- void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- uint64_t *known_coin_id,
- struct TALER_DenominationHashP *denom_hash);
-
-#endif
diff --git a/src/donaudb/pg_get_coin_transactions.c
b/src/donaudb/pg_get_coin_transactions.c
deleted file mode 100644
index da43771..0000000
--- a/src/donaudb/pg_get_coin_transactions.c
+++ /dev/null
@@ -1,948 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022-2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file pg_get_coin_transactions.c
- * @brief Low-level (statement-level) Postgres database access for the donau
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_coin_transactions.h"
-#include "pg_helper.h"
-#include "plugin_donaudb_common.h"
-
-
-/**
- * Closure for callbacks called from #postgres_get_coin_transactions()
- */
-struct CoinHistoryContext
-{
- /**
- * Head of the coin's history list.
- */
- struct TALER_DONAUDB_TransactionList *head;
-
- /**
- * Public key of the coin we are building the history for.
- */
- const struct TALER_CoinSpendPublicKeyP *coin_pub;
-
- /**
- * Closure for all callbacks of this database plugin.
- */
- void *db_cls;
-
- /**
- * Plugin context.
- */
- struct PostgresClosure *pg;
-
- /**
- * Set to 'true' if the transaction failed.
- */
- bool failed;
-
- /**
- * Set to 'true' if we found a deposit or melt (for invariant check).
- */
- bool have_deposit_or_melt;
-};
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_deposit (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i < num_results; i++)
- {
- struct TALER_DONAUDB_DepositListEntry *deposit;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- chc->have_deposit_or_melt = true;
- deposit = GNUNET_new (struct TALER_DONAUDB_DepositListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
- &deposit->amount_with_fee),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
- &deposit->deposit_fee),
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &deposit->h_denom_pub),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
- &deposit->h_age_commitment),
- &deposit->no_age_commitment),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("wallet_data_hash",
- &deposit->wallet_data_hash),
- &deposit->no_wallet_data_hash),
- GNUNET_PQ_result_spec_timestamp ("wallet_timestamp",
- &deposit->timestamp),
- GNUNET_PQ_result_spec_timestamp ("refund_deadline",
- &deposit->refund_deadline),
- GNUNET_PQ_result_spec_timestamp ("wire_deadline",
- &deposit->wire_deadline),
- GNUNET_PQ_result_spec_auto_from_type ("charity_pub",
- &deposit->charity_pub),
- GNUNET_PQ_result_spec_auto_from_type ("h_contract_terms",
- &deposit->h_contract_terms),
- GNUNET_PQ_result_spec_auto_from_type ("wire_salt",
- &deposit->wire_salt),
- GNUNET_PQ_result_spec_string ("payto_uri",
- &deposit->receiver_wire_account),
- GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
- &deposit->csig),
- GNUNET_PQ_result_spec_uint64 ("coin_deposit_serial_id",
- &serial_id),
- GNUNET_PQ_result_spec_auto_from_type ("done",
- &deposit->done),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (deposit);
- chc->failed = true;
- return;
- }
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_DEPOSIT;
- tl->details.deposit = deposit;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_purse_deposit (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i < num_results; i++)
- {
- struct TALER_DONAUDB_PurseDepositListEntry *deposit;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- chc->have_deposit_or_melt = true;
- deposit = GNUNET_new (struct TALER_DONAUDB_PurseDepositListEntry);
- {
- bool not_finished;
- struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
- &deposit->amount),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
- &deposit->deposit_fee),
- GNUNET_PQ_result_spec_auto_from_type ("purse_pub",
- &deposit->purse_pub),
- GNUNET_PQ_result_spec_uint64 ("purse_deposit_serial_id",
- &serial_id),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_string ("partner_base_url",
- &deposit->donau_base_url),
- NULL),
- GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
- &deposit->coin_sig),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
- &deposit->h_age_commitment),
- &deposit->no_age_commitment),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_bool ("refunded",
- &deposit->refunded),
- ¬_finished),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (deposit);
- chc->failed = true;
- return;
- }
- if (not_finished)
- deposit->refunded = false;
- deposit->no_age_commitment = GNUNET_is_zero (&deposit->h_age_commitment);
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_PURSE_DEPOSIT;
- tl->details.purse_deposit = deposit;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_melt (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_MeltListEntry *melt;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- chc->have_deposit_or_melt = true;
- melt = GNUNET_new (struct TALER_DONAUDB_MeltListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("rc",
- &melt->rc),
- /* oldcoin_index not needed */
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &melt->h_denom_pub),
- GNUNET_PQ_result_spec_auto_from_type ("old_coin_sig",
- &melt->coin_sig),
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
- &melt->amount_with_fee),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refresh",
- &melt->melt_fee),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
- &melt->h_age_commitment),
- &melt->no_age_commitment),
- GNUNET_PQ_result_spec_uint64 ("melt_serial_id",
- &serial_id),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (melt);
- chc->failed = true;
- return;
- }
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_MELT;
- tl->details.melt = melt;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_refund (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_RefundListEntry *refund;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- refund = GNUNET_new (struct TALER_DONAUDB_RefundListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("charity_pub",
- &refund->charity_pub),
- GNUNET_PQ_result_spec_auto_from_type ("charity_sig",
- &refund->charity_sig),
- GNUNET_PQ_result_spec_auto_from_type ("h_contract_terms",
- &refund->h_contract_terms),
- GNUNET_PQ_result_spec_uint64 ("rtransaction_id",
- &refund->rtransaction_id),
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
- &refund->refund_amount),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refund",
- &refund->refund_fee),
- GNUNET_PQ_result_spec_uint64 ("refund_serial_id",
- &serial_id),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (refund);
- chc->failed = true;
- return;
- }
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_REFUND;
- tl->details.refund = refund;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_purse_decision (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_PurseRefundListEntry *prefund;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- prefund = GNUNET_new (struct TALER_DONAUDB_PurseRefundListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("purse_pub",
- &prefund->purse_pub),
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
- &prefund->refund_amount),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refund",
- &prefund->refund_fee),
- GNUNET_PQ_result_spec_uint64 ("purse_decision_serial_id",
- &serial_id),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (prefund);
- chc->failed = true;
- return;
- }
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_PURSE_REFUND;
- tl->details.purse_refund = prefund;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_old_coin_recoup (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_RecoupRefreshListEntry *recoup;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- recoup = GNUNET_new (struct TALER_DONAUDB_RecoupRefreshListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
- &recoup->coin.coin_pub),
- GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
- &recoup->coin_sig),
- GNUNET_PQ_result_spec_auto_from_type ("coin_blind",
- &recoup->coin_blind),
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
- &recoup->value),
- GNUNET_PQ_result_spec_timestamp ("recoup_timestamp",
- &recoup->timestamp),
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &recoup->coin.denom_pub_hash),
- TALER_PQ_result_spec_denom_sig ("denom_sig",
- &recoup->coin.denom_sig),
- GNUNET_PQ_result_spec_uint64 ("recoup_refresh_uuid",
- &serial_id),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (recoup);
- chc->failed = true;
- return;
- }
- recoup->old_coin_pub = *chc->coin_pub;
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_OLD_COIN_RECOUP;
- tl->details.old_coin_recoup = recoup;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_recoup (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_RecoupListEntry *recoup;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- recoup = GNUNET_new (struct TALER_DONAUDB_RecoupListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
- &recoup->reserve_pub),
- GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
- &recoup->coin_sig),
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &recoup->h_denom_pub),
- GNUNET_PQ_result_spec_auto_from_type ("coin_blind",
- &recoup->coin_blind),
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
- &recoup->value),
- GNUNET_PQ_result_spec_timestamp ("recoup_timestamp",
- &recoup->timestamp),
- GNUNET_PQ_result_spec_uint64 ("recoup_uuid",
- &serial_id),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (recoup);
- chc->failed = true;
- return;
- }
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_RECOUP;
- tl->details.recoup = recoup;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_recoup_refresh (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_RecoupRefreshListEntry *recoup;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- recoup = GNUNET_new (struct TALER_DONAUDB_RecoupRefreshListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("old_coin_pub",
- &recoup->old_coin_pub),
- GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
- &recoup->coin_sig),
- GNUNET_PQ_result_spec_auto_from_type ("coin_blind",
- &recoup->coin_blind),
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount",
- &recoup->value),
- GNUNET_PQ_result_spec_timestamp ("recoup_timestamp",
- &recoup->timestamp),
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &recoup->coin.denom_pub_hash),
- TALER_PQ_result_spec_denom_sig ("denom_sig",
- &recoup->coin.denom_sig),
- GNUNET_PQ_result_spec_uint64 ("recoup_refresh_uuid",
- &serial_id),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (recoup);
- chc->failed = true;
- return;
- }
- recoup->coin.coin_pub = *chc->coin_pub;
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_RECOUP_REFRESH;
- tl->details.recoup_refresh = recoup;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct CoinHistoryContext`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-add_coin_reserve_open (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct CoinHistoryContext *chc = cls;
- struct PostgresClosure *pg = chc->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_ReserveOpenListEntry *role;
- struct TALER_DONAUDB_TransactionList *tl;
- uint64_t serial_id;
-
- role = GNUNET_new (struct TALER_DONAUDB_ReserveOpenListEntry);
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("reserve_sig",
- &role->reserve_sig),
- GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
- &role->coin_sig),
- TALER_PQ_RESULT_SPEC_AMOUNT ("contribution",
- &role->coin_contribution),
- GNUNET_PQ_result_spec_uint64 ("reserve_open_deposit_uuid",
- &serial_id),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- GNUNET_free (role);
- chc->failed = true;
- return;
- }
- }
- tl = GNUNET_new (struct TALER_DONAUDB_TransactionList);
- tl->next = chc->head;
- tl->type = TALER_DONAUDB_TT_RESERVE_OPEN;
- tl->details.reserve_open = role;
- tl->serial_id = serial_id;
- chc->head = tl;
- }
-}
-
-
-/**
- * Work we need to do.
- */
-struct Work
-{
- /**
- * SQL prepared statement name.
- */
- const char *statement;
-
- /**
- * Function to call to handle the result(s).
- */
- GNUNET_PQ_PostgresResultHandler cb;
-};
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_coin_transactions (
- void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- struct TALER_DONAUDB_TransactionList **tlp)
-{
- struct PostgresClosure *pg = cls;
- static const struct Work work[] = {
- /** #TALER_DONAUDB_TT_DEPOSIT */
- { "get_deposit_with_coin_pub",
- &add_coin_deposit },
- /** #TALER_DONAUDB_TT_MELT */
- { "get_refresh_session_by_coin",
- &add_coin_melt },
- /** #TALER_DONAUDB_TT_PURSE_DEPOSIT */
- { "get_purse_deposit_by_coin_pub",
- &add_coin_purse_deposit },
- /** #TALER_DONAUDB_TT_PURSE_REFUND */
- { "get_purse_decision_by_coin_pub",
- &add_coin_purse_decision },
- /** #TALER_DONAUDB_TT_REFUND */
- { "get_refunds_by_coin",
- &add_coin_refund },
- /** #TALER_DONAUDB_TT_OLD_COIN_RECOUP */
- { "recoup_by_old_coin",
- &add_old_coin_recoup },
- /** #TALER_DONAUDB_TT_RECOUP */
- { "recoup_by_coin",
- &add_coin_recoup },
- /** #TALER_DONAUDB_TT_RECOUP_REFRESH */
- { "recoup_by_refreshed_coin",
- &add_coin_recoup_refresh },
- /** #TALER_DONAUDB_TT_RESERVE_OPEN */
- { "reserve_open_by_coin",
- &add_coin_reserve_open },
- { NULL, NULL }
- };
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (coin_pub),
- GNUNET_PQ_query_param_end
- };
- enum GNUNET_DB_QueryStatus qs;
- struct CoinHistoryContext chc = {
- .head = NULL,
- .coin_pub = coin_pub,
- .pg = pg,
- .db_cls = cls
- };
-
- PREPARE (pg,
- "get_deposit_with_coin_pub",
- "SELECT"
- " cdep.amount_with_fee"
- ",denoms.fee_deposit"
- ",denoms.denom_pub_hash"
- ",kc.age_commitment_hash"
- ",bdep.wallet_timestamp"
- ",bdep.refund_deadline"
- ",bdep.wire_deadline"
- ",bdep.charity_pub"
- ",bdep.h_contract_terms"
- ",bdep.wallet_data_hash"
- ",bdep.wire_salt"
- ",wt.payto_uri"
- ",cdep.coin_sig"
- ",cdep.coin_deposit_serial_id"
- ",bdep.done"
- " FROM coin_deposits cdep"
- " JOIN batch_deposits bdep"
- " USING (batch_deposit_serial_id)"
- " JOIN wire_targets wt"
- " USING (wire_target_h_payto)"
- " JOIN known_coins kc"
- " ON (kc.coin_pub = cdep.coin_pub)"
- " JOIN denominations denoms"
- " USING (denominations_serial)"
- " WHERE cdep.coin_pub=$1;");
- PREPARE (pg,
- "get_refresh_session_by_coin",
- "SELECT"
- " rc"
- ",old_coin_sig"
- ",amount_with_fee"
- ",denoms.denom_pub_hash"
- ",denoms.fee_refresh"
- ",kc.age_commitment_hash"
- ",melt_serial_id"
- " FROM refresh_commitments"
- " JOIN known_coins kc"
- " ON (refresh_commitments.old_coin_pub = kc.coin_pub)"
- " JOIN denominations denoms"
- " USING (denominations_serial)"
- " WHERE old_coin_pub=$1;");
- PREPARE (pg,
- "get_purse_deposit_by_coin_pub",
- "SELECT"
- " partner_base_url"
- ",pd.amount_with_fee"
- ",denoms.fee_deposit"
- ",pd.purse_pub"
- ",kc.age_commitment_hash"
- ",pd.coin_sig"
- ",pd.purse_deposit_serial_id"
- ",pdes.refunded"
- " FROM purse_deposits pd"
- " LEFT JOIN partners"
- " USING (partner_serial_id)"
- " JOIN purse_requests pr"
- " USING (purse_pub)"
- " LEFT JOIN purse_decision pdes"
- " USING (purse_pub)"
- " JOIN known_coins kc"
- " ON (pd.coin_pub = kc.coin_pub)"
- " JOIN denominations denoms"
- " USING (denominations_serial)"
- // FIXME: use to-be-created materialized index
- // on coin_pub (query crosses partitions!)
- " WHERE pd.coin_pub=$1;");
- PREPARE (pg,
- "get_refunds_by_coin",
- "SELECT"
- " bdep.charity_pub"
- ",ref.charity_sig"
- ",bdep.h_contract_terms"
- ",ref.rtransaction_id"
- ",ref.amount_with_fee"
- ",denom.fee_refund"
- ",ref.refund_serial_id"
- " FROM refunds ref"
- " JOIN coin_deposits cdep"
- " ON (ref.coin_pub = cdep.coin_pub AND
ref.batch_deposit_serial_id = cdep.batch_deposit_serial_id)"
- " JOIN batch_deposits bdep"
- " ON (ref.batch_deposit_serial_id = bdep.batch_deposit_serial_id)"
- " JOIN known_coins kc"
- " ON (ref.coin_pub = kc.coin_pub)"
- " JOIN denominations denom"
- " USING (denominations_serial)"
- " WHERE ref.coin_pub=$1;");
- PREPARE (pg,
- "get_purse_decision_by_coin_pub",
- "SELECT"
- " pdes.purse_pub"
- ",pd.amount_with_fee"
- ",denom.fee_refund"
- ",pdes.purse_decision_serial_id"
- " FROM purse_deposits pd"
- " JOIN purse_decision pdes"
- " USING (purse_pub)"
- " JOIN known_coins kc"
- " ON (pd.coin_pub = kc.coin_pub)"
- " JOIN denominations denom"
- " USING (denominations_serial)"
- " WHERE pd.coin_pub=$1"
- " AND pdes.refunded;");
- PREPARE (pg,
- "recoup_by_old_coin",
- "SELECT"
- " coins.coin_pub"
- ",coin_sig"
- ",coin_blind"
- ",amount"
- ",recoup_timestamp"
- ",denoms.denom_pub_hash"
- ",coins.denom_sig"
- ",recoup_refresh_uuid"
- " FROM recoup_refresh"
- " JOIN known_coins coins"
- " USING (coin_pub)"
- " JOIN denominations denoms"
- " USING (denominations_serial)"
- " WHERE rrc_serial IN"
- " (SELECT rrc.rrc_serial"
- " FROM refresh_commitments"
- " JOIN refresh_revealed_coins rrc"
- " USING (melt_serial_id)"
- " WHERE old_coin_pub=$1);");
- PREPARE (pg,
- "recoup_by_coin",
- "SELECT"
- " reserves.reserve_pub"
- ",denoms.denom_pub_hash"
- ",coin_sig"
- ",coin_blind"
- ",amount"
- ",recoup_timestamp"
- ",recoup_uuid"
- " FROM recoup rcp"
- /* NOTE: suboptimal JOIN follows: crosses shards!
- Could theoretically be improved via a materialized
- index. But likely not worth it (query is rare and
- number of reserve shards might be limited) */
- " JOIN reserves_out ro"
- " USING (reserve_out_serial_id)"
- " JOIN reserves"
- " USING (reserve_uuid)"
- " JOIN known_coins coins"
- " USING (coin_pub)"
- " JOIN denominations denoms"
- " ON (denoms.denominations_serial = coins.denominations_serial)"
- " WHERE coins.coin_pub=$1;");
- /* Used in #postgres_get_coin_transactions() to obtain recoup transactions
- for a refreshed coin */
- PREPARE (pg,
- "recoup_by_refreshed_coin",
- "SELECT"
- " old_coins.coin_pub AS old_coin_pub"
- ",coin_sig"
- ",coin_blind"
- ",amount"
- ",recoup_timestamp"
- ",denoms.denom_pub_hash"
- ",coins.denom_sig"
- ",recoup_refresh_uuid"
- " FROM recoup_refresh"
- " JOIN refresh_revealed_coins rrc"
- " USING (rrc_serial)"
- " JOIN refresh_commitments rfc"
- " ON (rrc.melt_serial_id = rfc.melt_serial_id)"
- " JOIN known_coins old_coins"
- " ON (rfc.old_coin_pub = old_coins.coin_pub)"
- " JOIN known_coins coins"
- " ON (recoup_refresh.coin_pub = coins.coin_pub)"
- " JOIN denominations denoms"
- " ON (denoms.denominations_serial =
coins.denominations_serial)"
- " WHERE coins.coin_pub=$1;");
- PREPARE (pg,
- "reserve_open_by_coin",
- "SELECT"
- " reserve_open_deposit_uuid"
- ",coin_sig"
- ",reserve_sig"
- ",contribution"
- " FROM reserves_open_deposits"
- " WHERE coin_pub=$1;");
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Getting transactions for coin %s\n",
- TALER_B2S (coin_pub));
- for (unsigned int i = 0; NULL != work[i].statement; i++)
- {
- qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- work[i].statement,
- params,
- work[i].cb,
- &chc);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Coin %s yielded %d transactions of type %s\n",
- TALER_B2S (coin_pub),
- qs,
- work[i].statement);
- if ( (0 > qs) ||
- (chc.failed) )
- {
- if (NULL != chc.head)
- TEH_COMMON_free_coin_transaction_list (cls,
- chc.head);
- *tlp = NULL;
- if (chc.failed)
- qs = GNUNET_DB_STATUS_HARD_ERROR;
- return qs;
- }
- }
- *tlp = chc.head;
- if (NULL == chc.head)
- return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
- return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
-}
diff --git a/src/donaudb/pg_get_coin_transactions.h
b/src/donaudb/pg_get_coin_transactions.h
deleted file mode 100644
index d5e4556..0000000
--- a/src/donaudb/pg_get_coin_transactions.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file pg_get_coin_transactions.h
- * @brief implementation of the get_coin_transactions function
- * @author Christian Grothoff
- */
-#ifndef PG_GET_COIN_TRANSACTIONS_H
-#define PG_GET_COIN_TRANSACTIONS_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-
-/**
- * Compile a list of all (historic) transactions performed with the given coin
- * (/refresh/melt, /deposit, /refund and /recoup operations).
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param coin_pub coin to investigate
- * @param[out] tlp set to list of transactions, NULL if coin is fresh
- * @return database transaction status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_coin_transactions (
- void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- struct TALER_DONAUDB_TransactionList **tlp);
-
-#endif
diff --git a/src/donaudb/pg_get_denomination_info.h
b/src/donaudb/pg_get_denomination_info.h
index 69e4d70..7b5b0d7 100644
--- a/src/donaudb/pg_get_denomination_info.h
+++ b/src/donaudb/pg_get_denomination_info.h
@@ -16,26 +16,26 @@
/**
* @file donaudb/pg_get_denomination_info.h
* @brief implementation of the get_denomination_info function for Postgres
- * @author Christian Grothoff
+ * @author Johannes Casaburi
*/
-#ifndef PG_GET_DENOMINATION_INFO_H
-#define PG_GET_DENOMINATION_INFO_H
+#ifndef PG_GET_DONATION_UNIT_INFO_H
+#define PG_GET_DONATION_UNIT_INFO_H
#include "taler_util.h"
#include "taler_json_lib.h"
#include "taler_donaudb_plugin.h"
/**
- * Fetch information about a denomination key.
+ * Fetch information about a donation unit key.
*
* @param cls the @e cls of this struct with the plugin-specific state
- * @param denom_pub_hash hash of the public key used for signing coins of this
denomination
- * @param[out] issue set to issue information with value, fees and other info
about the coin
+ * @param donation_unit_pub_hash hash of the public key
+ * @param[out] info information with value, fees and other info about the coin
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
-TEH_PG_get_denomination_info (
+TEH_PG_get_donation_unit_info (
void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- struct TALER_DONAUDB_DenominationKeyInformation *issue);
+ const struct TALER_DonationUNitHashP *donation_unit_pub_hash,
+ struct TALER_DONAUDB_DonationUnitKeyInformation *info);
#endif
diff --git a/src/donaudb/pg_get_denomination_revocation.c
b/src/donaudb/pg_get_denomination_revocation.c
deleted file mode 100644
index 29bdf54..0000000
--- a/src/donaudb/pg_get_denomination_revocation.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_denomination_revocation.c
- * @brief Implementation of the get_denomination_revocation function for
Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_denomination_revocation.h"
-#include "pg_helper.h"
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_denomination_revocation (
- void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- struct TALER_MasterSignatureP *master_sig,
- uint64_t *rowid)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("master_sig",
- master_sig),
- GNUNET_PQ_result_spec_uint64 ("denom_revocations_serial_id",
- rowid),
- GNUNET_PQ_result_spec_end
- };
-
- PREPARE (pg,
- "denomination_revocation_get",
- "SELECT"
- " master_sig"
- ",denom_revocations_serial_id"
- " FROM denomination_revocations"
- " WHERE denominations_serial="
- " (SELECT denominations_serial"
- " FROM denominations"
- " WHERE denom_pub_hash=$1);");
-
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
-
"denomination_revocation_get",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_get_denomination_revocation.h
b/src/donaudb/pg_get_denomination_revocation.h
deleted file mode 100644
index ec4faf3..0000000
--- a/src/donaudb/pg_get_denomination_revocation.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_denomination_revocation.h
- * @brief implementation of the get_denomination_revocation function for
Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_GET_DENOMINATION_REVOCATION_H
-#define PG_GET_DENOMINATION_REVOCATION_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Obtain information about a denomination key's revocation from
- * the database.
- *
- * @param cls closure
- * @param denom_pub_hash hash of the revoked denomination key
- * @param[out] master_sig signature affirming the revocation
- * @param[out] rowid row where the information is stored
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_denomination_revocation (
- void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- struct TALER_MasterSignatureP *master_sig,
- uint64_t *rowid);
-
-#endif
diff --git a/src/donaudb/pg_get_expired_reserves.c
b/src/donaudb/pg_get_expired_reserves.c
deleted file mode 100644
index c7e0837..0000000
--- a/src/donaudb/pg_get_expired_reserves.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file pg_get_expired_reserves.c
- * @brief Low-level (statement-level) Postgres database access for the donau
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_expired_reserves.h"
-#include "pg_helper.h"
-
-
-/**
- * Closure for #reserve_expired_cb().
- */
-struct ExpiredReserveContext
-{
- /**
- * Function to call for each expired reserve.
- */
- TALER_DONAUDB_ReserveExpiredCallback rec;
-
- /**
- * Closure to give to @e rec.
- */
- void *rec_cls;
-
- /**
- * Plugin context.
- */
- struct PostgresClosure *pg;
-
- /**
- * Set to #GNUNET_SYSERR on error.
- */
- enum GNUNET_GenericReturnValue status;
-};
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-reserve_expired_cb (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct ExpiredReserveContext *erc = cls;
- struct PostgresClosure *pg = erc->pg;
- enum GNUNET_GenericReturnValue ret;
-
- ret = GNUNET_OK;
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct GNUNET_TIME_Timestamp exp_date;
- char *account_details;
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_Amount remaining_balance;
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_timestamp ("expiration_date",
- &exp_date),
- GNUNET_PQ_result_spec_string ("account_details",
- &account_details),
- GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
- &reserve_pub),
- TALER_PQ_result_spec_amount ("current_balance",
- pg->currency,
- &remaining_balance),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- ret = GNUNET_SYSERR;
- break;
- }
- ret = erc->rec (erc->rec_cls,
- &reserve_pub,
- &remaining_balance,
- account_details,
- exp_date,
- 0);
- GNUNET_PQ_cleanup_result (rs);
- if (GNUNET_OK != ret)
- break;
- }
- erc->status = ret;
-}
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_expired_reserves (void *cls,
- struct GNUNET_TIME_Timestamp now,
- TALER_DONAUDB_ReserveExpiredCallback rec,
- void *rec_cls)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_timestamp (&now),
- GNUNET_PQ_query_param_end
- };
- struct ExpiredReserveContext ectx = {
- .rec = rec,
- .rec_cls = rec_cls,
- .pg = pg,
- .status = GNUNET_OK
- };
- enum GNUNET_DB_QueryStatus qs;
-
- PREPARE (pg,
- "get_expired_reserves",
- "WITH ed AS MATERIALIZED ( "
- " SELECT * "
- " FROM reserves "
- " WHERE expiration_date <= $1 "
- " AND ((current_balance).val != 0 OR (current_balance).frac != 0)
"
- " ORDER BY expiration_date ASC "
- " LIMIT 1 "
- ") "
- "SELECT "
- " ed.expiration_date "
- " ,payto_uri AS account_details "
- " ,ed.reserve_pub "
- " ,current_balance "
- "FROM ( "
- " SELECT "
- " * "
- " FROM reserves_in "
- " WHERE reserve_pub = ( "
- " SELECT reserve_pub FROM ed) "
- " ) ri "
- "JOIN wire_targets wt ON (ri.wire_source_h_payto =
wt.wire_target_h_payto) "
- "JOIN ed ON (ri.reserve_pub = ed.reserve_pub);");
- qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- "get_expired_reserves",
- params,
- &reserve_expired_cb,
- &ectx);
- switch (ectx.status)
- {
- case GNUNET_SYSERR:
- return GNUNET_DB_STATUS_HARD_ERROR;
- case GNUNET_NO:
- return GNUNET_DB_STATUS_SOFT_ERROR;
- case GNUNET_OK:
- break;
- }
- return qs;
-}
diff --git a/src/donaudb/pg_get_expired_reserves.h
b/src/donaudb/pg_get_expired_reserves.h
deleted file mode 100644
index dfac6dd..0000000
--- a/src/donaudb/pg_get_expired_reserves.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file pg_get_expired_reserves.h
- * @brief implementation of the get_expired_reserves function
- * @author Christian Grothoff
- */
-#ifndef PG_GET_EXPIRED_RESERVES_H
-#define PG_GET_EXPIRED_RESERVES_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-
-/**
- * Obtain information about expired reserves and their
- * remaining balances.
- *
- * @param cls closure of the plugin
- * @param now timestamp based on which we decide expiration
- * @param rec function to call on expired reserves
- * @param rec_cls closure for @a rec
- * @return transaction status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_expired_reserves (void *cls,
- struct GNUNET_TIME_Timestamp now,
- TALER_DONAUDB_ReserveExpiredCallback rec,
- void *rec_cls);
-
-#endif
diff --git a/src/donaudb/pg_get_ready_deposit.c
b/src/donaudb/pg_get_ready_deposit.c
deleted file mode 100644
index 140ede1..0000000
--- a/src/donaudb/pg_get_ready_deposit.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022, 2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_ready_deposit.c
- * @brief Implementation of the get_ready_deposit function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_ready_deposit.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_ready_deposit (void *cls,
- uint64_t start_shard_row,
- uint64_t end_shard_row,
- struct TALER_CharityPublicKeyP *charity_pub,
- char **payto_uri)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_TIME_Absolute now
- = GNUNET_TIME_absolute_get ();
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_absolute_time (&now),
- GNUNET_PQ_query_param_uint64 (&start_shard_row),
- GNUNET_PQ_query_param_uint64 (&end_shard_row),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("charity_pub",
- charity_pub),
- GNUNET_PQ_result_spec_string ("payto_uri",
- payto_uri),
- GNUNET_PQ_result_spec_end
- };
- const char *query = "deposits_get_ready";
-
- PREPARE (pg,
- query,
- "SELECT"
- " wts.payto_uri"
- ",bdep.charity_pub"
- " FROM batch_deposits bdep"
- " JOIN wire_targets wts"
- " USING (wire_target_h_payto)"
- " WHERE NOT (bdep.done OR bdep.policy_blocked)"
- " AND bdep.wire_deadline<=$1"
- " AND bdep.shard >= $2"
- " AND bdep.shard <= $3"
- " ORDER BY "
- " bdep.wire_deadline ASC"
- " ,bdep.shard ASC"
- " LIMIT 1;");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- query,
- params,
- rs);
-}
diff --git a/src/donaudb/pg_get_ready_deposit.h
b/src/donaudb/pg_get_ready_deposit.h
deleted file mode 100644
index 7baa817..0000000
--- a/src/donaudb/pg_get_ready_deposit.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_ready_deposit.h
- * @brief implementation of the get_ready_deposit function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_GET_READY_DEPOSIT_H
-#define PG_GET_READY_DEPOSIT_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Obtain information about deposits that are ready to be executed. Such
- * deposits must not be marked as "done", the execution time must be
- * in the past, and the KYC status must be 'ok'.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param start_shard_row minimum shard row to select
- * @param end_shard_row maximum shard row to select (inclusive)
- * @param[out] charity_pub set to the public key of a charity with a ready
deposit
- * @param[out] payto_uri set to the account of the charity, to be freed by
caller
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_ready_deposit (void *cls,
- uint64_t start_shard_row,
- uint64_t end_shard_row,
- struct TALER_CharityPublicKeyP *charity_pub,
- char **payto_uri);
-
-#endif
diff --git a/src/donaudb/pg_get_reserve_balance.c
b/src/donaudb/pg_get_reserve_balance.c
deleted file mode 100644
index fcd2fb1..0000000
--- a/src/donaudb/pg_get_reserve_balance.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_reserve_balance.c
- * @brief Implementation of the get_reserve_balance function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_reserve_balance.h"
-#include "pg_helper.h"
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_reserve_balance (void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_Amount *balance)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (reserve_pub),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_result_spec_amount ("current_balance",
- pg->currency,
- balance),
- GNUNET_PQ_result_spec_end
- };
-
- PREPARE (pg,
- "get_reserve_balance",
- "SELECT"
- " current_balance"
- " FROM reserves"
- " WHERE reserve_pub=$1;");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "get_reserve_balance",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_get_reserve_balance.h
b/src/donaudb/pg_get_reserve_balance.h
deleted file mode 100644
index 7696769..0000000
--- a/src/donaudb/pg_get_reserve_balance.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_reserve_balance.h
- * @brief implementation of the get_reserve_balance function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_GET_RESERVE_BALANCE_H
-#define PG_GET_RESERVE_BALANCE_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Get the balance of the specified reserve.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param reserve_pub public key of the reserve
- * @param[out] balance set to the reserve balance
- * @return transaction status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_reserve_balance (void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_Amount *balance);
-
-#endif
diff --git a/src/donaudb/pg_get_reserve_by_h_blind.c
b/src/donaudb/pg_get_reserve_by_h_blind.c
deleted file mode 100644
index cd6763b..0000000
--- a/src/donaudb/pg_get_reserve_by_h_blind.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_reserve_by_h_blind.c
- * @brief Implementation of the get_reserve_by_h_blind function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_reserve_by_h_blind.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_reserve_by_h_blind (
- void *cls,
- const struct TALER_BlindedCoinHashP *bch,
- struct TALER_ReservePublicKeyP *reserve_pub,
- uint64_t *reserve_out_serial_id)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (bch),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
- reserve_pub),
- GNUNET_PQ_result_spec_uint64 ("reserve_out_serial_id",
- reserve_out_serial_id),
- GNUNET_PQ_result_spec_end
- };
- /* Used in #postgres_get_reserve_by_h_blind() */
- PREPARE (pg,
- "reserve_by_h_blind",
- "SELECT"
- " reserves.reserve_pub"
- ",reserve_out_serial_id"
- " FROM reserves_out"
- " JOIN reserves"
- " USING (reserve_uuid)"
- " WHERE h_blind_ev=$1"
- " LIMIT 1;");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "reserve_by_h_blind",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_get_reserve_by_h_blind.h
b/src/donaudb/pg_get_reserve_by_h_blind.h
deleted file mode 100644
index 3357fed..0000000
--- a/src/donaudb/pg_get_reserve_by_h_blind.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_reserve_by_h_blind.h
- * @brief implementation of the get_reserve_by_h_blind function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_GET_RESERVE_BY_H_BLIND_H
-#define PG_GET_RESERVE_BY_H_BLIND_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Obtain information about which reserve a coin was generated
- * from given the hash of the blinded coin.
- *
- * @param cls closure
- * @param bch hash that uniquely identifies the withdraw request
- * @param[out] reserve_pub set to information about the reserve (on success
only)
- * @param[out] reserve_out_serial_id set to row of the @a h_blind_ev in
reserves_out
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_reserve_by_h_blind (
- void *cls,
- const struct TALER_BlindedCoinHashP *bch,
- struct TALER_ReservePublicKeyP *reserve_pub,
- uint64_t *reserve_out_serial_id);
-
-#endif
diff --git a/src/donaudb/pg_get_withdraw_info.c
b/src/donaudb/pg_get_withdraw_info.c
deleted file mode 100644
index ed22508..0000000
--- a/src/donaudb/pg_get_withdraw_info.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_withdraw_info.c
- * @brief Implementation of the get_withdraw_info function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_get_withdraw_info.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_withdraw_info (
- void *cls,
- const struct TALER_BlindedCoinHashP *bch,
- struct TALER_DONAUDB_CollectableBlindcoin *collectable)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (bch),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &collectable->denom_pub_hash),
- TALER_PQ_result_spec_blinded_denom_sig ("denom_sig",
- &collectable->sig),
- GNUNET_PQ_result_spec_auto_from_type ("reserve_sig",
- &collectable->reserve_sig),
- GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
- &collectable->reserve_pub),
- GNUNET_PQ_result_spec_auto_from_type ("h_blind_ev",
- &collectable->h_coin_envelope),
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
- &collectable->amount_with_fee),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_withdraw",
- &collectable->withdraw_fee),
- GNUNET_PQ_result_spec_end
- };
-
- PREPARE (pg,
- "get_withdraw_info",
- "SELECT"
- " denom.denom_pub_hash"
- ",denom_sig"
- ",reserve_sig"
- ",reserves.reserve_pub"
- ",execution_date"
- ",h_blind_ev"
- ",amount_with_fee"
- ",denom.fee_withdraw"
- " FROM reserves_out"
- " JOIN reserves"
- " USING (reserve_uuid)"
- " JOIN denominations denom"
- " USING (denominations_serial)"
- " WHERE h_blind_ev=$1;");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "get_withdraw_info",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_get_withdraw_info.h
b/src/donaudb/pg_get_withdraw_info.h
deleted file mode 100644
index 5fe578b..0000000
--- a/src/donaudb/pg_get_withdraw_info.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_get_withdraw_info.h
- * @brief implementation of the get_withdraw_info function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_GET_WITHDRAW_INFO_H
-#define PG_GET_WITHDRAW_INFO_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Locate the response for a /reserve/withdraw request under the
- * key of the hash of the blinded message.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param bch hash that uniquely identifies the withdraw operation
- * @param collectable corresponding collectable coin (blind signature)
- * if a coin is found
- * @return statement execution status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_get_withdraw_info (
- void *cls,
- const struct TALER_BlindedCoinHashP *bch,
- struct TALER_DONAUDB_CollectableBlindcoin *collectable);
-
-#endif
diff --git a/src/donaudb/pg_have_deposit2.c b/src/donaudb/pg_have_deposit2.c
deleted file mode 100644
index 6f55cae..0000000
--- a/src/donaudb/pg_have_deposit2.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_have_deposit2.c
- * @brief Implementation of the have_deposit2 function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_have_deposit2.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_have_deposit2 (
- void *cls,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- const struct TALER_CharityWireHashP *h_wire,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CharityPublicKeyP *charity,
- struct GNUNET_TIME_Timestamp refund_deadline,
- struct TALER_Amount *deposit_fee,
- struct GNUNET_TIME_Timestamp *donau_timestamp)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (coin_pub),
- GNUNET_PQ_query_param_auto_from_type (h_contract_terms),
- GNUNET_PQ_query_param_auto_from_type (charity),
- GNUNET_PQ_query_param_end
- };
- struct TALER_DONAUDB_Deposit deposit2;
- struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
- &deposit2.amount_with_fee),
- GNUNET_PQ_result_spec_timestamp ("wallet_timestamp",
- &deposit2.timestamp),
- GNUNET_PQ_result_spec_timestamp ("donau_timestamp",
- donau_timestamp),
- GNUNET_PQ_result_spec_timestamp ("refund_deadline",
- &deposit2.refund_deadline),
- GNUNET_PQ_result_spec_timestamp ("wire_deadline",
- &deposit2.wire_deadline),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
- deposit_fee),
- GNUNET_PQ_result_spec_auto_from_type ("wire_salt",
- &deposit2.wire_salt),
- GNUNET_PQ_result_spec_string ("receiver_wire_account",
- &deposit2.receiver_wire_account),
- GNUNET_PQ_result_spec_end
- };
- enum GNUNET_DB_QueryStatus qs;
- struct TALER_CharityWireHashP h_wire2;
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Getting deposits for coin %s\n",
- TALER_B2S (coin_pub));
- PREPARE (pg,
- "get_deposit",
- "SELECT"
- " cdep.amount_with_fee"
- ",denominations.fee_deposit"
- ",bdep.wallet_timestamp"
- ",bdep.donau_timestamp"
- ",bdep.refund_deadline"
- ",bdep.wire_deadline"
- ",bdep.h_contract_terms"
- ",bdep.wire_salt"
- ",wt.payto_uri AS receiver_wire_account"
- " FROM coin_deposits cdep"
- " JOIN batch_deposits bdep USING (batch_deposit_serial_id)"
- " JOIN known_coins kc ON (kc.coin_pub = cdep.coin_pub)"
- " JOIN denominations USING (denominations_serial)"
- " JOIN wire_targets wt USING (wire_target_h_payto)"
- " WHERE cdep.coin_pub=$1"
- " AND bdep.charity_pub=$3"
- " AND bdep.h_contract_terms=$2;");
- /* Note: query might be made more efficient if we computed the 'shard'
- from charity_pub and included that as a constraint on bdep! */
- qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "get_deposit",
- params,
- rs);
- if (0 >= qs)
- return qs;
- TALER_charity_wire_signature_hash (deposit2.receiver_wire_account,
- &deposit2.wire_salt,
- &h_wire2);
- GNUNET_free (deposit2.receiver_wire_account);
- /* Now we check that the other information in @a deposit
- also matches, and if not report inconsistencies. */
- if ( (GNUNET_TIME_timestamp_cmp (refund_deadline,
- !=,
- deposit2.refund_deadline)) ||
- (0 != GNUNET_memcmp (h_wire,
- &h_wire2) ) )
- {
- /* Inconsistencies detected! Does not match! */
- return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
- }
- return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
-}
diff --git a/src/donaudb/pg_have_deposit2.h b/src/donaudb/pg_have_deposit2.h
deleted file mode 100644
index efcf171..0000000
--- a/src/donaudb/pg_have_deposit2.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_have_deposit2.h
- * @brief implementation of the have_deposit2 function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_HAVE_DEPOSIT2_H
-#define PG_HAVE_DEPOSIT2_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Check if we have the specified deposit already in the database.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param h_contract_terms contract to check for
- * @param h_wire wire hash to check for
- * @param coin_pub public key of the coin to check for
- * @param charity charity public key to check for
- * @param refund_deadline expected refund deadline
- * @param[out] deposit_fee set to the deposit fee the donau charged
- * @param[out] donau_timestamp set to the time when the donau received the
deposit
- * @return 1 if we know this operation,
- * 0 if this exact deposit is unknown to us,
- * otherwise transaction error status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_have_deposit2 (
- void *cls,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- const struct TALER_CharityWireHashP *h_wire,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CharityPublicKeyP *charity,
- struct GNUNET_TIME_Timestamp refund_deadline,
- struct TALER_Amount *deposit_fee,
- struct GNUNET_TIME_Timestamp *donau_timestamp);
-#endif
diff --git a/src/donaudb/pg_insert_denomination_info.h
b/src/donaudb/pg_insert_denomination_info.h
index 2f5e020..059758c 100644
--- a/src/donaudb/pg_insert_denomination_info.h
+++ b/src/donaudb/pg_insert_denomination_info.h
@@ -16,27 +16,26 @@
/**
* @file donaudb/pg_insert_denomination_info.h
* @brief implementation of the insert_denomination_info function for Postgres
- * @author Christian Grothoff
+ * @author Johannes Casaburi
*/
-#ifndef PG_INSERT_DENOMINATION_INFO_H
-#define PG_INSERT_DENOMINATION_INFO_H
+#ifndef PG_INSERT_DONATION_UNIT_INFO_H
+#define PG_INSERT_DONATION_UNIT_INFO_H
#include "taler_util.h"
#include "taler_json_lib.h"
#include "taler_donaudb_plugin.h"
/**
- * Insert a denomination key's public information into the database for
- * reference by auditors and other consistency checks.
+ * Insert a donation unit key's public information into the database
*
* @param cls the @e cls of this struct with the plugin-specific state
- * @param denom_pub the public key used for signing coins of this denomination
- * @param issue issuing information with value, fees and other info about the
coin
+ * @param donation_unit_pub the public key used for signing coins of this
denomination
+ * @param info information with value, fees and other info about the coin
* @return status of the query
*/
enum GNUNET_DB_QueryStatus
TEH_PG_insert_denomination_info (
void *cls,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DONAUDB_DenominationKeyInformation *issue);
+ const struct TALER_DonationUnitPublicKey *donation_unit_pub,
+ const struct TALER_DONAUDB_DonationUnitKeyInformation *info);
#endif
diff --git a/src/donaudb/pg_insert_denomination_revocation.c
b/src/donaudb/pg_insert_denomination_revocation.c
deleted file mode 100644
index b8017c9..0000000
--- a/src/donaudb/pg_insert_denomination_revocation.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_insert_denomination_revocation.c
- * @brief Implementation of the insert_denomination_revocation function for
Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_insert_denomination_revocation.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_insert_denomination_revocation (
- void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- const struct TALER_MasterSignatureP *master_sig)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
- GNUNET_PQ_query_param_auto_from_type (master_sig),
- GNUNET_PQ_query_param_end
- };
-
- /* Used in #postgres_insert_denomination_revocation() */
- PREPARE (pg,
- "denomination_revocation_insert",
- "INSERT INTO denomination_revocations "
- "(denominations_serial"
- ",master_sig"
- ") SELECT denominations_serial,$2"
- " FROM denominations"
- " WHERE denom_pub_hash=$1;");
- return GNUNET_PQ_eval_prepared_non_select (pg->conn,
- "denomination_revocation_insert",
- params);
-}
diff --git a/src/donaudb/pg_insert_denomination_revocation.h
b/src/donaudb/pg_insert_denomination_revocation.h
deleted file mode 100644
index 08c738c..0000000
--- a/src/donaudb/pg_insert_denomination_revocation.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_insert_denomination_revocation.h
- * @brief implementation of the insert_denomination_revocation function for
Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_INSERT_DENOMINATION_REVOCATION_H
-#define PG_INSERT_DENOMINATION_REVOCATION_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Store information that a denomination key was revoked
- * in the database.
- *
- * @param cls closure
- * @param denom_pub_hash hash of the revoked denomination key
- * @param master_sig signature affirming the revocation
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_insert_denomination_revocation (
- void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- const struct TALER_MasterSignatureP *master_sig);
-#endif
diff --git a/src/donaudb/pg_insert_signkey_revocation.h
b/src/donaudb/pg_insert_signkey_revocation.h
index 9d67e42..5152084 100644
--- a/src/donaudb/pg_insert_signkey_revocation.h
+++ b/src/donaudb/pg_insert_signkey_revocation.h
@@ -26,16 +26,14 @@
#include "taler_donaudb_plugin.h"
/**
- * Store information about a revoked online signing key.
+ * Store information about a revoked signing key.
*
* @param cls closure
* @param donau_pub donau online signing key that was revoked
- * @param master_sig signature affirming the revocation
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
TEH_PG_insert_signkey_revocation (
void *cls,
- const struct TALER_DonauPublicKeyP *donau_pub,
- const struct TALER_MasterSignatureP *master_sig);
+ const struct TALER_DonauPublicKeyP *donau_pub);
#endif
diff --git a/src/donaudb/pg_iterate_active_signkeys.c
b/src/donaudb/pg_iterate_active_signkeys.c
deleted file mode 100644
index 9624e20..0000000
--- a/src/donaudb/pg_iterate_active_signkeys.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_iterate_active_signkeys.c
- * @brief Implementation of the iterate_active_signkeys function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_iterate_active_signkeys.h"
-#include "pg_helper.h"
-
-
-/**
- * Closure for #signkeys_cb_helper()
- */
-struct SignkeysIteratorContext
-{
- /**
- * Function to call with the results.
- */
- TALER_DONAUDB_ActiveSignkeysCallback cb;
-
- /**
- * Closure to pass to @e cb
- */
- void *cb_cls;
-
-};
-
-
-/**
- * Helper function for #TEH_PG_iterate_active_signkeys().
- * Calls the callback with each signkey.
- *
- * @param cls a `struct SignkeysIteratorContext`
- * @param result db results
- * @param num_results number of results in @a result
- */
-static void
-signkeys_cb_helper (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct SignkeysIteratorContext *dic = cls;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_SignkeyMetaData meta;
- struct TALER_DonauPublicKeyP donau_pub;
- struct TALER_MasterSignatureP master_sig;
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("master_sig",
- &master_sig),
- GNUNET_PQ_result_spec_auto_from_type ("donau_pub",
- &donau_pub),
- GNUNET_PQ_result_spec_timestamp ("valid_from",
- &meta.start),
- GNUNET_PQ_result_spec_timestamp ("expire_sign",
- &meta.expire_sign),
- GNUNET_PQ_result_spec_timestamp ("expire_legal",
- &meta.expire_legal),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- return;
- }
- dic->cb (dic->cb_cls,
- &donau_pub,
- &meta,
- &master_sig);
- }
-}
-
-
-/**
- * Function called to invoke @a cb on every non-revoked donau signing key
- * that has been signed by the master key. Revoked and (for signing!)
- * expired keys are skipped. Runs in its own read-only transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each signing key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_iterate_active_signkeys (void *cls,
- TALER_DONAUDB_ActiveSignkeysCallback cb,
- void *cb_cls)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_TIME_Absolute now = {0};
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_absolute_time (&now),
- GNUNET_PQ_query_param_end
- };
- struct SignkeysIteratorContext dic = {
- .cb = cb,
- .cb_cls = cb_cls,
- };
-
- PREPARE (pg,
- "select_signkeys",
- "SELECT"
- " master_sig"
- ",donau_pub"
- ",valid_from"
- ",expire_sign"
- ",expire_legal"
- " FROM donau_sign_keys esk"
- " WHERE"
- " expire_sign > $1"
- " AND NOT EXISTS "
- " (SELECT esk_serial "
- " FROM signkey_revocations skr"
- " WHERE esk.esk_serial = skr.esk_serial);");
- now = GNUNET_TIME_absolute_get ();
- return GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- "select_signkeys",
- params,
- &signkeys_cb_helper,
- &dic);
-}
diff --git a/src/donaudb/pg_iterate_active_signkeys.h
b/src/donaudb/pg_iterate_active_signkeys.h
deleted file mode 100644
index c51c7f6..0000000
--- a/src/donaudb/pg_iterate_active_signkeys.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_iterate_active_signkeys.h
- * @brief implementation of the iterate_active_signkeys function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_ITERATE_ACTIVE_SIGNKEYS_H
-#define PG_ITERATE_ACTIVE_SIGNKEYS_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Function called to invoke @a cb on every non-revoked donau signing key
- * that has been signed by the master key. Revoked and (for signing!)
- * expired keys are skipped. Runs in its own read-only transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each signing key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_iterate_active_signkeys (void *cls,
- TALER_DONAUDB_ActiveSignkeysCallback cb,
- void *cb_cls);
-
-#endif
diff --git a/src/donaudb/pg_iterate_denomination_info.c
b/src/donaudb/pg_iterate_denomination_info.c
deleted file mode 100644
index 09734e1..0000000
--- a/src/donaudb/pg_iterate_denomination_info.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_iterate_denomination_info.c
- * @brief Implementation of the iterate_denomination_info function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_iterate_denomination_info.h"
-#include "pg_helper.h"
-
-
-/**
- * Closure for #domination_cb_helper()
- */
-struct DenomIteratorContext
-{
- /**
- * Function to call with the results.
- */
- TALER_DONAUDB_DenominationCallback cb;
-
- /**
- * Closure to pass to @e cb
- */
- void *cb_cls;
-
- /**
- * Plugin context.
- */
- struct PostgresClosure *pg;
-};
-
-
-/**
- * Helper function for #TEH_PG_iterate_denomination_info().
- * Calls the callback with each denomination key.
- *
- * @param cls a `struct DenomIteratorContext`
- * @param result db results
- * @param num_results number of results in @a result
- */
-static void
-domination_cb_helper (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct DenomIteratorContext *dic = cls;
- struct PostgresClosure *pg = dic->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_DenominationKeyInformation issue;
- struct TALER_DenominationPublicKey denom_pub;
- struct TALER_DenominationHashP denom_hash;
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("master_sig",
- &issue.signature),
- GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
- &denom_hash),
- GNUNET_PQ_result_spec_timestamp ("valid_from",
- &issue.start),
- GNUNET_PQ_result_spec_timestamp ("expire_withdraw",
- &issue.expire_withdraw),
- GNUNET_PQ_result_spec_timestamp ("expire_deposit",
- &issue.expire_deposit),
- GNUNET_PQ_result_spec_timestamp ("expire_legal",
- &issue.expire_legal),
- TALER_PQ_RESULT_SPEC_AMOUNT ("coin",
- &issue.value),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_withdraw",
- &issue.fees.withdraw),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
- &issue.fees.deposit),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refresh",
- &issue.fees.refresh),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refund",
- &issue.fees.refund),
- TALER_PQ_result_spec_denom_pub ("denom_pub",
- &denom_pub),
- GNUNET_PQ_result_spec_uint32 ("age_mask",
- &issue.age_mask.bits),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- return;
- }
-
- /* Unfortunately we have to carry the age mask in both, the
- * TALER_DenominationPublicKey and
- * TALER_DONAUDB_DenominationKeyInformation at different times.
- * Here we use _both_ so let's make sure the values are the same. */
- denom_pub.age_mask = issue.age_mask;
- TALER_denom_pub_hash (&denom_pub,
- &issue.denom_hash);
- if (0 !=
- GNUNET_memcmp (&issue.denom_hash,
- &denom_hash))
- {
- GNUNET_break (0);
- }
- else
- {
- dic->cb (dic->cb_cls,
- &denom_pub,
- &issue);
- }
- TALER_denom_pub_free (&denom_pub);
- }
-}
-
-
-/**
- * Fetch information about all known denomination keys.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each denomination key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_iterate_denomination_info (void *cls,
- TALER_DONAUDB_DenominationCallback cb,
- void *cb_cls)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_end
- };
- struct DenomIteratorContext dic = {
- .cb = cb,
- .cb_cls = cb_cls,
- .pg = pg
- };
-
- PREPARE (pg,
- "denomination_iterate",
- "SELECT"
- " master_sig"
- ",denom_pub_hash"
- ",valid_from"
- ",expire_withdraw"
- ",expire_deposit"
- ",expire_legal"
- ",coin" /* value of this denom */
- ",fee_withdraw"
- ",fee_deposit"
- ",fee_refresh"
- ",fee_refund"
- ",denom_pub"
- ",age_mask"
- " FROM denominations;");
- return GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- "denomination_iterate",
- params,
- &domination_cb_helper,
- &dic);
-}
diff --git a/src/donaudb/pg_iterate_denomination_info.h
b/src/donaudb/pg_iterate_denomination_info.h
deleted file mode 100644
index a7fbc28..0000000
--- a/src/donaudb/pg_iterate_denomination_info.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_iterate_denomination_info.h
- * @brief implementation of the iterate_denomination_info function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_ITERATE_DENOMINATION_INFO_H
-#define PG_ITERATE_DENOMINATION_INFO_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Fetch information about all known denomination keys.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each denomination key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_iterate_denomination_info (void *cls,
- TALER_DONAUDB_DenominationCallback cb,
- void *cb_cls);
-
-#endif
diff --git a/src/donaudb/pg_iterate_denominations.c
b/src/donaudb/pg_iterate_denominations.c
deleted file mode 100644
index 38d569e..0000000
--- a/src/donaudb/pg_iterate_denominations.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_iterate_denominations.c
- * @brief Implementation of the iterate_denominations function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_iterate_denominations.h"
-#include "pg_helper.h"
-
-
-/**
- * Closure for #dominations_cb_helper()
- */
-struct DenomsIteratorContext
-{
- /**
- * Function to call with the results.
- */
- TALER_DONAUDB_DenominationsCallback cb;
-
- /**
- * Closure to pass to @e cb
- */
- void *cb_cls;
-
- /**
- * Plugin context.
- */
- struct PostgresClosure *pg;
-};
-
-
-/**
- * Helper function for #TEH_PG_iterate_denominations().
- * Calls the callback with each denomination key.
- *
- * @param cls a `struct DenomsIteratorContext`
- * @param result db results
- * @param num_results number of results in @a result
- */
-static void
-dominations_cb_helper (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct DenomsIteratorContext *dic = cls;
- struct PostgresClosure *pg = dic->pg;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct TALER_DONAUDB_DenominationKeyMetaData meta = {0};
- struct TALER_DenominationPublicKey denom_pub = {0};
- struct TALER_MasterSignatureP master_sig = {0};
- struct TALER_DenominationHashP h_denom_pub = {0};
- bool revoked;
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_uint64 ("denominations_serial",
- &meta.serial),
- GNUNET_PQ_result_spec_auto_from_type ("master_sig",
- &master_sig),
- GNUNET_PQ_result_spec_bool ("revoked",
- &revoked),
- GNUNET_PQ_result_spec_timestamp ("valid_from",
- &meta.start),
- GNUNET_PQ_result_spec_timestamp ("expire_withdraw",
- &meta.expire_withdraw),
- GNUNET_PQ_result_spec_timestamp ("expire_deposit",
- &meta.expire_deposit),
- GNUNET_PQ_result_spec_timestamp ("expire_legal",
- &meta.expire_legal),
- TALER_PQ_RESULT_SPEC_AMOUNT ("coin",
- &meta.value),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_withdraw",
- &meta.fees.withdraw),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
- &meta.fees.deposit),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refresh",
- &meta.fees.refresh),
- TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refund",
- &meta.fees.refund),
- TALER_PQ_result_spec_denom_pub ("denom_pub",
- &denom_pub),
- GNUNET_PQ_result_spec_uint32 ("age_mask",
- &meta.age_mask.bits),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- return;
- }
-
- /* make sure the mask information is the same */
- denom_pub.age_mask = meta.age_mask;
-
- TALER_denom_pub_hash (&denom_pub,
- &h_denom_pub);
- dic->cb (dic->cb_cls,
- &denom_pub,
- &h_denom_pub,
- &meta,
- &master_sig,
- revoked);
- GNUNET_PQ_cleanup_result (rs);
- }
-}
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_iterate_denominations (void *cls,
- TALER_DONAUDB_DenominationsCallback cb,
- void *cb_cls)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_end
- };
- struct DenomsIteratorContext dic = {
- .cb = cb,
- .cb_cls = cb_cls,
- .pg = pg
- };
-
- PREPARE (pg,
- "select_denominations",
- "SELECT"
- " denominations_serial"
- ",denominations.master_sig"
- ",denom_revocations_serial_id IS NOT NULL AS revoked"
- ",valid_from"
- ",expire_withdraw"
- ",expire_deposit"
- ",expire_legal"
- ",coin" /* value of this denom */
- ",fee_withdraw"
- ",fee_deposit"
- ",fee_refresh"
- ",fee_refund"
- ",denom_type"
- ",age_mask"
- ",denom_pub"
- " FROM denominations"
- " LEFT JOIN "
- " denomination_revocations USING (denominations_serial);");
- return GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- "select_denominations",
- params,
- &dominations_cb_helper,
- &dic);
-}
diff --git a/src/donaudb/pg_iterate_denominations.h
b/src/donaudb/pg_iterate_denominations.h
deleted file mode 100644
index d2e4a9f..0000000
--- a/src/donaudb/pg_iterate_denominations.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_iterate_denominations.h
- * @brief implementation of the iterate_denominations function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_ITERATE_DENOMINATIONS_H
-#define PG_ITERATE_DENOMINATIONS_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Function called to invoke @a cb on every known denomination key (revoked
- * and non-revoked) that has been signed by the master key. Runs in its own
- * read-only transaction.
- *
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each denomination key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_iterate_denominations (void *cls,
- TALER_DONAUDB_DenominationsCallback cb,
- void *cb_cls);
-
-#endif
diff --git a/src/donaudb/pg_lookup_signing_key.h
b/src/donaudb/pg_lookup_signing_key.h
index e3504ca..b9cf007 100644
--- a/src/donaudb/pg_lookup_signing_key.h
+++ b/src/donaudb/pg_lookup_signing_key.h
@@ -16,7 +16,7 @@
/**
* @file donaudb/pg_lookup_signing_key.h
* @brief implementation of the lookup_signing_key function for Postgres
- * @author Christian Grothoff
+ * @author Johannes Casaburi
*/
#ifndef PG_LOOKUP_SIGNING_KEY_H
#define PG_LOOKUP_SIGNING_KEY_H
diff --git a/src/donaudb/pg_lookup_signkey_revocation.h
b/src/donaudb/pg_lookup_signkey_revocation.h
index 1290c40..a7e3b54 100644
--- a/src/donaudb/pg_lookup_signkey_revocation.h
+++ b/src/donaudb/pg_lookup_signkey_revocation.h
@@ -16,7 +16,7 @@
/**
* @file donaudb/pg_lookup_signkey_revocation.h
* @brief implementation of the lookup_signkey_revocation function for Postgres
- * @author Christian Grothoff
+ * @author Johannes Casaburi
*/
#ifndef PG_LOOKUP_SIGNKEY_REVOCATION_H
#define PG_LOOKUP_SIGNKEY_REVOCATION_H
@@ -30,13 +30,11 @@
*
* @param cls closure
* @param donau_pub donau online signing key
- * @param[out] master_sig set to signature affirming the revocation (if
revoked)
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
TEH_PG_lookup_signkey_revocation (
void *cls,
- const struct TALER_DonauPublicKeyP *donau_pub,
- struct TALER_MasterSignatureP *master_sig);
+ const struct TALER_DonauPublicKeyP *donau_pub);
#endif
diff --git a/src/donaudb/pg_reserves_get.c b/src/donaudb/pg_reserves_get.c
deleted file mode 100644
index 128cc2d..0000000
--- a/src/donaudb/pg_reserves_get.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_get.c
- * @brief Implementation of the reserves_get function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_reserves_get.h"
-#include "pg_helper.h"
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_get (void *cls,
- struct TALER_DONAUDB_Reserve *reserve)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&reserve->pub),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_result_spec_amount ("current_balance",
- pg->currency,
- &reserve->balance),
- GNUNET_PQ_result_spec_timestamp ("expiration_date",
- &reserve->expiry),
- GNUNET_PQ_result_spec_timestamp ("gc_date",
- &reserve->gc),
- GNUNET_PQ_result_spec_end
- };
- /* Used in #postgres_reserves_get() */
- PREPARE (pg,
- "reserves_get",
- "SELECT"
- " current_balance"
- ",expiration_date"
- ",gc_date"
- " FROM reserves"
- " WHERE reserve_pub=$1"
- " LIMIT 1;");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "reserves_get",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_reserves_get.h b/src/donaudb/pg_reserves_get.h
deleted file mode 100644
index dfb8ef1..0000000
--- a/src/donaudb/pg_reserves_get.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_get.h
- * @brief implementation of the reserves_get function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_RESERVES_GET_H
-#define PG_RESERVES_GET_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Get the summary of a reserve.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param[in,out] reserve the reserve data. The public key of the reserve
should be
- * set in this structure; it is used to query the database. The
balance
- * and expiration are then filled accordingly.
- * @return transaction status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_get (void *cls,
- struct TALER_DONAUDB_Reserve *reserve);
-
-#endif
diff --git a/src/donaudb/pg_reserves_get_origin.c
b/src/donaudb/pg_reserves_get_origin.c
deleted file mode 100644
index e9658bd..0000000
--- a/src/donaudb/pg_reserves_get_origin.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_get_origin.c
- * @brief Implementation of the reserves_get_origin function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_reserves_get_origin.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_get_origin (
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_PaytoHashP *h_payto)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (reserve_pub),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_auto_from_type ("wire_source_h_payto",
- h_payto),
- GNUNET_PQ_result_spec_end
- };
-
-
- PREPARE (pg,
- "get_h_wire_source_of_reserve",
- "SELECT"
- " wire_source_h_payto"
- " FROM reserves_in"
- " WHERE reserve_pub=$1");
- return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
-
"get_h_wire_source_of_reserve",
- params,
- rs);
-}
diff --git a/src/donaudb/pg_reserves_get_origin.h
b/src/donaudb/pg_reserves_get_origin.h
deleted file mode 100644
index 3770f91..0000000
--- a/src/donaudb/pg_reserves_get_origin.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_get_origin.h
- * @brief implementation of the reserves_get_origin function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_RESERVES_GET_ORIGIN_H
-#define PG_RESERVES_GET_ORIGIN_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-/**
- * Get the origin of funds of a reserve.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param reserve_pub public key of the reserve
- * @param[out] h_payto set to hash of the wire source payto://-URI
- * @return transaction status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_get_origin (
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_PaytoHashP *h_payto);
-
-#endif
diff --git a/src/donaudb/pg_reserves_in_insert.c
b/src/donaudb/pg_reserves_in_insert.c
deleted file mode 100644
index fc7d371..0000000
--- a/src/donaudb/pg_reserves_in_insert.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022-2023 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_in_insert.c
- * @brief Implementation of the reserves_in_insert function for Postgres
- * @author Christian Grothoff
- * @author Joseph Xu
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_reserves_in_insert.h"
-#include "pg_helper.h"
-#include "pg_start.h"
-#include "pg_start_read_committed.h"
-#include "pg_commit.h"
-#include "pg_preflight.h"
-#include "pg_rollback.h"
-#include "pg_reserves_get.h"
-#include "pg_reserves_update.h"
-#include "pg_setup_wire_target.h"
-#include "pg_event_notify.h"
-
-
-/**
- * Generate event notification for the reserve change.
- *
- * @param reserve_pub reserve to notfiy on
- * @return string to pass to postgres for the notification
- */
-static char *
-compute_notify_on_reserve (const struct TALER_ReservePublicKeyP *reserve_pub)
-{
- struct TALER_ReserveEventP rep = {
- .header.size = htons (sizeof (rep)),
- .header.type = htons (TALER_DBEVENT_DONAU_RESERVE_INCOMING),
- .reserve_pub = *reserve_pub
- };
-
- return GNUNET_PG_get_event_notify_channel (&rep.header);
-}
-
-
-/**
- * Closure for our helper_cb()
- */
-struct Context
-{
- /**
- * Array of reserve UUIDs to initialize.
- */
- uint64_t *reserve_uuids;
-
- /**
- * Array with entries set to 'true' for duplicate transactions.
- */
- bool *transaction_duplicates;
-
- /**
- * Array with entries set to 'true' for rows with conflicts.
- */
- bool *conflicts;
-
- /**
- * Set to #GNUNET_SYSERR on failures.
- */
- enum GNUNET_GenericReturnValue status;
-
- /**
- * Single value (no array) set to true if we need
- * to follow-up with an update.
- */
- bool needs_update;
-};
-
-
-/**
- * Helper function to be called with the results of a SELECT statement
- * that has returned @a num_results results.
- *
- * @param cls closure of type `struct Context *`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-helper_cb (void *cls,
- PGresult *result,
- unsigned int num_results)
-{
- struct Context *ctx = cls;
-
- for (unsigned int i = 0; i<num_results; i++)
- {
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool (
- "transaction_duplicate",
- &ctx->transaction_duplicates[i]),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_uint64 ("ruuid",
- &ctx->reserve_uuids[i]),
- &ctx->conflicts[i]),
- GNUNET_PQ_result_spec_end
- };
-
- if (GNUNET_OK !=
- GNUNET_PQ_extract_result (result,
- rs,
- i))
- {
- GNUNET_break (0);
- ctx->status = GNUNET_SYSERR;
- return;
- }
- if (! ctx->transaction_duplicates[i])
- ctx->needs_update |= ctx->conflicts[i];
- }
-}
-
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_in_insert (
- void *cls,
- const struct TALER_DONAUDB_ReserveInInfo *reserves,
- unsigned int reserves_length,
- enum GNUNET_DB_QueryStatus *results)
-{
- struct PostgresClosure *pg = cls;
- unsigned int dups = 0;
-
- struct TALER_PaytoHashP h_paytos[GNUNET_NZL (reserves_length)];
- char *notify_s[GNUNET_NZL (reserves_length)];
- struct TALER_ReservePublicKeyP reserve_pubs[GNUNET_NZL (reserves_length)];
- struct TALER_Amount balances[GNUNET_NZL (reserves_length)];
- struct GNUNET_TIME_Timestamp execution_times[GNUNET_NZL (reserves_length)];
- const char *sender_account_details[GNUNET_NZL (reserves_length)];
- const char *donau_account_names[GNUNET_NZL (reserves_length)];
- uint64_t wire_references[GNUNET_NZL (reserves_length)];
- uint64_t reserve_uuids[GNUNET_NZL (reserves_length)];
- bool transaction_duplicates[GNUNET_NZL (reserves_length)];
- bool conflicts[GNUNET_NZL (reserves_length)];
- struct GNUNET_TIME_Timestamp reserve_expiration
- = GNUNET_TIME_relative_to_timestamp (pg->idle_reserve_expiration_time);
- struct GNUNET_TIME_Timestamp gc
- = GNUNET_TIME_relative_to_timestamp (pg->legal_reserve_expiration_time);
- enum GNUNET_DB_QueryStatus qs;
- bool need_update;
-
- for (unsigned int i = 0; i<reserves_length; i++)
- {
- const struct TALER_DONAUDB_ReserveInInfo *reserve = &reserves[i];
-
- TALER_payto_hash (reserve->sender_account_details,
- &h_paytos[i]);
- notify_s[i] = compute_notify_on_reserve (reserve->reserve_pub);
- reserve_pubs[i] = *reserve->reserve_pub;
- balances[i] = *reserve->balance;
- execution_times[i] = reserve->execution_time;
- sender_account_details[i] = reserve->sender_account_details;
- donau_account_names[i] = reserve->donau_account_name;
- wire_references[i] = reserve->wire_reference;
- }
-
- /* NOTE: kind-of pointless to explicitly start a transaction here... */
- if (GNUNET_OK !=
- TEH_PG_preflight (pg))
- {
- GNUNET_break (0);
- qs = GNUNET_DB_STATUS_HARD_ERROR;
- goto finished;
- }
- if (GNUNET_OK !=
- TEH_PG_start_read_committed (pg,
- "READ_COMMITED"))
- {
- GNUNET_break (0);
- qs = GNUNET_DB_STATUS_HARD_ERROR;
- goto finished;
- }
- PREPARE (pg,
- "reserves_insert_with_array",
- "SELECT"
- " transaction_duplicate"
- ",ruuid"
- " FROM donau_do_array_reserves_insert"
- " ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10);");
- {
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_timestamp (&gc),
- GNUNET_PQ_query_param_timestamp (&reserve_expiration),
- GNUNET_PQ_query_param_array_auto_from_type (reserves_length,
- reserve_pubs,
- pg->conn),
- GNUNET_PQ_query_param_array_uint64 (reserves_length,
- wire_references,
- pg->conn),
- TALER_PQ_query_param_array_amount (
- reserves_length,
- balances,
- pg->conn),
- GNUNET_PQ_query_param_array_ptrs_string (
- reserves_length,
- (const char **) donau_account_names,
- pg->conn),
- GNUNET_PQ_query_param_array_timestamp (
- reserves_length,
- execution_times,
- pg->conn),
- GNUNET_PQ_query_param_array_auto_from_type (
- reserves_length,
- h_paytos,
- pg->conn),
- GNUNET_PQ_query_param_array_ptrs_string (
- reserves_length,
- (const char **) sender_account_details,
- pg->conn),
- GNUNET_PQ_query_param_array_ptrs_string (
- reserves_length,
- (const char **) notify_s,
- pg->conn),
- GNUNET_PQ_query_param_end
- };
- struct Context ctx = {
- .reserve_uuids = reserve_uuids,
- .transaction_duplicates = transaction_duplicates,
- .conflicts = conflicts,
- .needs_update = false,
- .status = GNUNET_OK
- };
-
- qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- "reserves_insert_with_array",
- params,
- &helper_cb,
- &ctx);
- if ( (qs < 0) ||
- (GNUNET_OK != ctx.status) )
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Failed to insert into reserves (%d)\n",
- qs);
- goto finished;
- }
- need_update = ctx.needs_update;
- }
-
- {
- enum GNUNET_DB_QueryStatus cs;
-
- cs = TEH_PG_commit (pg);
- if (cs < 0)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Failed to commit\n");
- qs = cs;
- goto finished;
- }
- }
-
- for (unsigned int i = 0; i<reserves_length; i++)
- {
- if (transaction_duplicates[i])
- dups++;
- results[i] = transaction_duplicates[i]
- ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
- : GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
- }
-
- if (! need_update)
- {
- qs = reserves_length;
- goto finished;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Reserve update needed for some reserves in the batch\n");
- PREPARE (pg,
- "reserves_update",
- "SELECT"
- " out_duplicate AS duplicate "
- "FROM donau_do_batch_reserves_update"
- " ($1,$2,$3,$4,$5,$6,$7);");
-
- if (GNUNET_OK !=
- TEH_PG_start (pg,
- "reserve-insert-continued"))
- {
- GNUNET_break (0);
- qs = GNUNET_DB_STATUS_HARD_ERROR;
- goto finished;
- }
-
- for (unsigned int i = 0; i<reserves_length; i++)
- {
- if (transaction_duplicates[i])
- continue;
- if (! conflicts[i])
- continue;
- {
- bool duplicate;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&reserve_pubs[i]),
- GNUNET_PQ_query_param_timestamp (&reserve_expiration),
- GNUNET_PQ_query_param_uint64 (&wire_references[i]),
- TALER_PQ_query_param_amount (pg->conn,
- &balances[i]),
- GNUNET_PQ_query_param_string (donau_account_names[i]),
- GNUNET_PQ_query_param_auto_from_type (&h_paytos[i]),
- GNUNET_PQ_query_param_string (notify_s[i]),
- GNUNET_PQ_query_param_end
- };
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_bool ("duplicate",
- &duplicate),
- GNUNET_PQ_result_spec_end
- };
- enum GNUNET_DB_QueryStatus qs;
-
- qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "reserves_update",
- params,
- rs);
- if (qs < 0)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Failed to update reserves (%d)\n",
- qs);
- results[i] = qs;
- goto finished;
- }
- results[i] = duplicate
- ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
- : GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
- }
- }
- {
- enum GNUNET_DB_QueryStatus cs;
-
- cs = TEH_PG_commit (pg);
- if (cs < 0)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Failed to commit\n");
- qs = cs;
- goto finished;
- }
- }
-finished:
- for (unsigned int i = 0; i<reserves_length; i++)
- GNUNET_free (notify_s[i]);
- if (qs < 0)
- return qs;
- GNUNET_PQ_event_do_poll (pg->conn);
- if (0 != dups)
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "%u/%u duplicates among incoming transactions. Try increasing
WIREWATCH_IDLE_SLEEP_INTERVAL in the [donau] configuration section (if this
happens a lot).\n",
- dups,
- reserves_length);
- return qs;
-}
diff --git a/src/donaudb/pg_reserves_in_insert.h
b/src/donaudb/pg_reserves_in_insert.h
deleted file mode 100644
index 4176bb8..0000000
--- a/src/donaudb/pg_reserves_in_insert.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_in_insert.h
- * @brief implementation of the reserves_in_insert function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_RESERVES_IN_INSERT_H
-#define PG_RESERVES_IN_INSERT_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-
-/**
- * Insert an incoming transaction into reserves. New reserves are also
- * created through this function. Runs its own transaction(s).
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param reserves array of reserves to insert
- * @param reserves_length length of the @a reserves array
- * @param[out] results set to query status per reserve, must be of length @a
reserves_length
- * @return transaction status code
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_in_insert (
- void *cls,
- const struct TALER_DONAUDB_ReserveInInfo *reserves,
- unsigned int reserves_length,
- enum GNUNET_DB_QueryStatus *results);
-
-
-#endif
diff --git a/src/donaudb/pg_reserves_update.c b/src/donaudb/pg_reserves_update.c
deleted file mode 100644
index 4e34d7b..0000000
--- a/src/donaudb/pg_reserves_update.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_update.c
- * @brief Implementation of the reserves_update function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_reserves_update.h"
-#include "pg_helper.h"
-
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_update (void *cls,
- const struct TALER_DONAUDB_Reserve *reserve)
-{
- struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_timestamp (&reserve->expiry),
- GNUNET_PQ_query_param_timestamp (&reserve->gc),
- TALER_PQ_query_param_amount (pg->conn,
- &reserve->balance),
- GNUNET_PQ_query_param_auto_from_type (&reserve->pub),
- GNUNET_PQ_query_param_end
- };
-
- PREPARE (pg,
- "reserve_update",
- "UPDATE reserves"
- " SET"
- " expiration_date=$1"
- ",gc_date=$2"
- ",current_balance=$3"
- " WHERE reserve_pub=$4;");
- return GNUNET_PQ_eval_prepared_non_select (pg->conn,
- "reserve_update",
- params);
-}
diff --git a/src/donaudb/pg_reserves_update.h b/src/donaudb/pg_reserves_update.h
deleted file mode 100644
index c35e175..0000000
--- a/src/donaudb/pg_reserves_update.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2022 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of CHARITYABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-/**
- * @file donaudb/pg_reserves_update.h
- * @brief implementation of the reserves_update function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_RESERVES_UPDATE_H
-#define PG_RESERVES_UPDATE_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_donaudb_plugin.h"
-
-/**
- * Updates a reserve with the data from the given reserve structure.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param reserve the reserve structure whose data will be used to update the
- * corresponding record in the database.
- * @return transaction status
- */
-enum GNUNET_DB_QueryStatus
-TEH_PG_reserves_update (void *cls,
- const struct TALER_DONAUDB_Reserve *reserve);
-
-#endif
diff --git a/src/include/taler_donaudb_plugin.h
b/src/include/taler_donaudb_plugin.h
index b5e2aa0..21e97a0 100644
--- a/src/include/taler_donaudb_plugin.h
+++ b/src/include/taler_donaudb_plugin.h
@@ -32,11 +32,6 @@
*/
struct TALER_DONAUDB_DonationUnitKeyInformation
{
- /**
- * Serial of the donation unit key as in the DB.
- */
- uint64_t serial;
-
/**
* The value of the donation unit.
*/
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-donau] branch master updated: [db] cleanup working on pg headers,
gnunet <=