clean up PQ tables (renamings, remove redunant column), and primarily fix #4751
This commit is contained in:
parent
e140b418d3
commit
2c6956f32a
@ -1,3 +1,12 @@
|
|||||||
|
Fri Jul 14 17:38:54 CEST 2017
|
||||||
|
Fix #4751 by not allowing denomination deletion (GC)
|
||||||
|
to cascade into reserve_out table (and tolerating such
|
||||||
|
deletion failures). This way, denominations will be kept
|
||||||
|
around until the last reserve that references them (or
|
||||||
|
known_coins derived from them) is closed. Naturally, in
|
||||||
|
most case we expect reserves to be closed much faster
|
||||||
|
than DKs, so in practice this should rarely apply. -CG
|
||||||
|
|
||||||
Sun Jun 11 17:03:56 CEST 2017
|
Sun Jun 11 17:03:56 CEST 2017
|
||||||
Finish implementation and testing of automated refunding
|
Finish implementation and testing of automated refunding
|
||||||
of expired reserves (#4956). -CG
|
of expired reserves (#4956). -CG
|
||||||
|
@ -32,6 +32,7 @@ taler_auditor_sign_SOURCES = \
|
|||||||
taler_auditor_sign_LDADD = \
|
taler_auditor_sign_LDADD = \
|
||||||
$(LIBGCRYPT_LIBS) \
|
$(LIBGCRYPT_LIBS) \
|
||||||
$(top_builddir)/src/util/libtalerutil.la \
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
|
$(top_builddir)/src/auditordb/libtalerauditordb.la \
|
||||||
$(top_builddir)/src/exchangedb/libtalerexchangedb.la \
|
$(top_builddir)/src/exchangedb/libtalerexchangedb.la \
|
||||||
-lgnunetutil $(XLIB)
|
-lgnunetutil $(XLIB)
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include "taler_exchangedb_lib.h"
|
#include "taler_exchangedb_lib.h"
|
||||||
|
#include "taler_auditordb_lib.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,6 +60,11 @@ static struct TALER_MasterPublicKeyP master_public_key;
|
|||||||
*/
|
*/
|
||||||
static struct GNUNET_CONFIGURATION_Handle *cfg;
|
static struct GNUNET_CONFIGURATION_Handle *cfg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle to access the auditor's database.
|
||||||
|
*/
|
||||||
|
static struct TALER_AUDITORDB_Plugin *adb;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print denomination key details for diagnostics.
|
* Print denomination key details for diagnostics.
|
||||||
@ -180,7 +186,6 @@ main (int argc,
|
|||||||
unsigned int dks_len;
|
unsigned int dks_len;
|
||||||
struct TALER_ExchangeKeyValidityPS kv;
|
struct TALER_ExchangeKeyValidityPS kv;
|
||||||
off_t in_size;
|
off_t in_size;
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_OK ==
|
GNUNET_assert (GNUNET_OK ==
|
||||||
GNUNET_log_setup ("taler-auditor-sign",
|
GNUNET_log_setup ("taler-auditor-sign",
|
||||||
@ -223,7 +228,8 @@ main (int argc,
|
|||||||
"Auditor URL not given in neither configuration nor command-line\n");
|
"Auditor URL not given in neither configuration nor command-line\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (GNUNET_YES != GNUNET_DISK_file_test (auditor_key_file))
|
if (GNUNET_YES !=
|
||||||
|
GNUNET_DISK_file_test (auditor_key_file))
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Auditor private key `%s' does not exist yet, creating it!\n",
|
"Auditor private key `%s' does not exist yet, creating it!\n",
|
||||||
auditor_key_file);
|
auditor_key_file);
|
||||||
@ -277,9 +283,18 @@ main (int argc,
|
|||||||
"Denomination list has length zero, signature not produced.\n");
|
"Denomination list has length zero, signature not produced.\n");
|
||||||
GNUNET_DISK_file_close (fh);
|
GNUNET_DISK_file_close (fh);
|
||||||
GNUNET_free (eddsa_priv);
|
GNUNET_free (eddsa_priv);
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (NULL ==
|
||||||
|
(adb = TALER_AUDITORDB_plugin_load (cfg)))
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to initialize auditor database plugin.\n");
|
||||||
|
GNUNET_DISK_file_close (fh);
|
||||||
|
GNUNET_free (eddsa_priv);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
kv.purpose.purpose = htonl (TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS);
|
kv.purpose.purpose = htonl (TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS);
|
||||||
kv.purpose.size = htonl (sizeof (struct TALER_ExchangeKeyValidityPS));
|
kv.purpose.size = htonl (sizeof (struct TALER_ExchangeKeyValidityPS));
|
||||||
GNUNET_CRYPTO_hash (auditor_url,
|
GNUNET_CRYPTO_hash (auditor_url,
|
||||||
@ -299,6 +314,7 @@ main (int argc,
|
|||||||
"Failed to read input file `%s': %s\n",
|
"Failed to read input file `%s': %s\n",
|
||||||
exchange_request_file,
|
exchange_request_file,
|
||||||
STRERROR (errno));
|
STRERROR (errno));
|
||||||
|
TALER_AUDITORDB_plugin_unload (adb);
|
||||||
GNUNET_DISK_file_close (fh);
|
GNUNET_DISK_file_close (fh);
|
||||||
GNUNET_free (sigs);
|
GNUNET_free (sigs);
|
||||||
GNUNET_free (dks);
|
GNUNET_free (dks);
|
||||||
@ -306,7 +322,7 @@ main (int argc,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GNUNET_DISK_file_close (fh);
|
GNUNET_DISK_file_close (fh);
|
||||||
for (i=0;i<dks_len;i++)
|
for (unsigned int i=0;i<dks_len;i++)
|
||||||
{
|
{
|
||||||
struct TALER_DenominationKeyValidityPS *dk = &dks[i];
|
struct TALER_DenominationKeyValidityPS *dk = &dks[i];
|
||||||
|
|
||||||
@ -333,11 +349,48 @@ main (int argc,
|
|||||||
{
|
{
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
"Output file not given\n");
|
"Output file not given\n");
|
||||||
|
TALER_AUDITORDB_plugin_unload (adb);
|
||||||
GNUNET_free (dks);
|
GNUNET_free (dks);
|
||||||
GNUNET_free (sigs);
|
GNUNET_free (sigs);
|
||||||
GNUNET_free (eddsa_priv);
|
GNUNET_free (eddsa_priv);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/* Update DB */
|
||||||
|
{
|
||||||
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
struct TALER_AUDITORDB_Session *session;
|
||||||
|
|
||||||
|
session = adb->get_session (adb->cls);
|
||||||
|
if (NULL == session)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to initialize database session\n");
|
||||||
|
TALER_AUDITORDB_plugin_unload (adb);
|
||||||
|
GNUNET_free (dks);
|
||||||
|
GNUNET_free (sigs);
|
||||||
|
GNUNET_free (eddsa_priv);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
for (unsigned int i=0;i<dks_len;i++)
|
||||||
|
{
|
||||||
|
const struct TALER_DenominationKeyValidityPS *dk = &dks[i];
|
||||||
|
|
||||||
|
qs = adb->insert_denomination_info (adb->cls,
|
||||||
|
session,
|
||||||
|
dk);
|
||||||
|
if (0 > qs)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to store key in auditor DB\n");
|
||||||
|
TALER_AUDITORDB_plugin_unload (adb);
|
||||||
|
GNUNET_free (dks);
|
||||||
|
GNUNET_free (sigs);
|
||||||
|
GNUNET_free (eddsa_priv);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TALER_AUDITORDB_plugin_unload (adb);
|
||||||
|
|
||||||
/* write result to disk */
|
/* write result to disk */
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
@ -357,7 +410,6 @@ main (int argc,
|
|||||||
GNUNET_free (dks);
|
GNUNET_free (dks);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GNUNET_free (sigs);
|
GNUNET_free (sigs);
|
||||||
GNUNET_free (dks);
|
GNUNET_free (dks);
|
||||||
GNUNET_free (eddsa_priv);
|
GNUNET_free (eddsa_priv);
|
||||||
|
@ -138,12 +138,12 @@ postgres_drop_tables (void *cls)
|
|||||||
{
|
{
|
||||||
struct PostgresClosure *pc = cls;
|
struct PostgresClosure *pc = cls;
|
||||||
struct GNUNET_PQ_ExecuteStatement es[] = {
|
struct GNUNET_PQ_ExecuteStatement es[] = {
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS predicted_result;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_predicted_result;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS historic_ledger;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_historic_ledger;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS historic_losses;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_historic_losses;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS historic_denomination_revenue;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_historic_denomination_revenue;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS balance_summary;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_balance_summary;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS denomination_pending;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_denomination_pending;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserve_balance;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserve_balance;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_wire_fee_balance;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_wire_fee_balance;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserves;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserves;"),
|
||||||
@ -274,9 +274,9 @@ postgres_create_tables (void *cls)
|
|||||||
last melt from "refresh_sessions" that the auditor is aware
|
last melt from "refresh_sessions" that the auditor is aware
|
||||||
of; "refund_serial_id" tells us the last entry in "refunds"
|
of; "refund_serial_id" tells us the last entry in "refunds"
|
||||||
for this denom_pub that the auditor is aware of. */
|
for this denom_pub that the auditor is aware of. */
|
||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS denomination_pending"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_denomination_pending"
|
||||||
"(denom_pub_hash BYTEA PRIMARY KEY"
|
"(denom_pub_hash BYTEA PRIMARY KEY"
|
||||||
/* " REFERENCES auditor_denominations (denom_pub_hash) ON DELETE CASCADE" // Do we want this? */
|
" REFERENCES auditor_denominations (denom_pub_hash) ON DELETE CASCADE"
|
||||||
",denom_balance_val INT8 NOT NULL"
|
",denom_balance_val INT8 NOT NULL"
|
||||||
",denom_balance_frac INT4 NOT NULL"
|
",denom_balance_frac INT4 NOT NULL"
|
||||||
",denom_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
",denom_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||||
@ -285,12 +285,12 @@ postgres_create_tables (void *cls)
|
|||||||
",denom_risk_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
",denom_risk_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||||
")"),
|
")"),
|
||||||
/* Table with the sum of the outstanding coins from
|
/* Table with the sum of the outstanding coins from
|
||||||
"denomination_pending" (denom_pubs must belong to the
|
"auditor_denomination_pending" (denom_pubs must belong to the
|
||||||
respective's exchange's master public key); it represents the
|
respective's exchange's master public key); it represents the
|
||||||
balance_summary of the exchange at this point (modulo
|
auditor_balance_summary of the exchange at this point (modulo
|
||||||
unexpected historic_loss-style events where denomination keys are
|
unexpected historic_loss-style events where denomination keys are
|
||||||
compromised) */
|
compromised) */
|
||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS balance_summary"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_balance_summary"
|
||||||
"(master_pub BYTEA PRIMARY KEY CHECK (LENGTH(master_pub)=32)"
|
"(master_pub BYTEA PRIMARY KEY CHECK (LENGTH(master_pub)=32)"
|
||||||
",denom_balance_val INT8 NOT NULL"
|
",denom_balance_val INT8 NOT NULL"
|
||||||
",denom_balance_frac INT4 NOT NULL"
|
",denom_balance_frac INT4 NOT NULL"
|
||||||
@ -317,7 +317,7 @@ postgres_create_tables (void *cls)
|
|||||||
historic_reserve_revenue); the deposit, melt and refund fees are given
|
historic_reserve_revenue); the deposit, melt and refund fees are given
|
||||||
individually; the delta to the revenue_balance is from coins that
|
individually; the delta to the revenue_balance is from coins that
|
||||||
were withdrawn but never deposited prior to expiration. */
|
were withdrawn but never deposited prior to expiration. */
|
||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS historic_denomination_revenue"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_historic_denomination_revenue"
|
||||||
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
||||||
",denom_pub_hash BYTEA PRIMARY KEY CHECK (LENGTH(denom_pub_hash)=64)"
|
",denom_pub_hash BYTEA PRIMARY KEY CHECK (LENGTH(denom_pub_hash)=64)"
|
||||||
",revenue_timestamp INT8 NOT NULL"
|
",revenue_timestamp INT8 NOT NULL"
|
||||||
@ -330,7 +330,7 @@ postgres_create_tables (void *cls)
|
|||||||
compromised, we incur a loss. These losses are totaled
|
compromised, we incur a loss. These losses are totaled
|
||||||
up here. (NOTE: the 'bankrupcy' protocol is not yet
|
up here. (NOTE: the 'bankrupcy' protocol is not yet
|
||||||
implemented, so right now this table is not used.) */
|
implemented, so right now this table is not used.) */
|
||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS historic_losses"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_historic_losses"
|
||||||
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
||||||
",denom_pub_hash BYTEA PRIMARY KEY CHECK (LENGTH(denom_pub_hash)=64)"
|
",denom_pub_hash BYTEA PRIMARY KEY CHECK (LENGTH(denom_pub_hash)=64)"
|
||||||
",loss_timestamp INT8 NOT NULL"
|
",loss_timestamp INT8 NOT NULL"
|
||||||
@ -339,9 +339,9 @@ postgres_create_tables (void *cls)
|
|||||||
",loss_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
",loss_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||||
")"),
|
")"),
|
||||||
/* Table with historic profits from reserves; we eventually
|
/* Table with historic profits from reserves; we eventually
|
||||||
GC "historic_reserve_revenue", and then store the totals
|
GC "auditor_historic_reserve_revenue", and then store the totals
|
||||||
in here (by time intervals). */
|
in here (by time intervals). */
|
||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS historic_reserve_summary"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_historic_reserve_summary"
|
||||||
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
||||||
",start_date INT8 NOT NULL"
|
",start_date INT8 NOT NULL"
|
||||||
",end_date INT8 NOT NULL"
|
",end_date INT8 NOT NULL"
|
||||||
@ -349,8 +349,8 @@ postgres_create_tables (void *cls)
|
|||||||
",reserve_profits_frac INT4 NOT NULL"
|
",reserve_profits_frac INT4 NOT NULL"
|
||||||
",reserve_profits_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
",reserve_profits_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||||
")"),
|
")"),
|
||||||
GNUNET_PQ_make_try_execute ("CREATE INDEX historic_reserve_summary_by_master_pub_start_date "
|
GNUNET_PQ_make_try_execute ("CREATE INDEX auditor_historic_reserve_summary_by_master_pub_start_date "
|
||||||
"ON historic_reserve_summary(master_pub,start_date)"),
|
"ON auditor_historic_reserve_summary(master_pub,start_date)"),
|
||||||
/* Table with historic business ledger; basically, when the exchange
|
/* Table with historic business ledger; basically, when the exchange
|
||||||
operator decides to use operating costs for anything but wire
|
operator decides to use operating costs for anything but wire
|
||||||
transfers to merchants, it goes in here. This happens when the
|
transfers to merchants, it goes in here. This happens when the
|
||||||
@ -358,12 +358,12 @@ postgres_create_tables (void *cls)
|
|||||||
is free-form but should be a human-readable wire transfer
|
is free-form but should be a human-readable wire transfer
|
||||||
identifier. This is NOT yet used and outside of the scope of
|
identifier. This is NOT yet used and outside of the scope of
|
||||||
the core auditing logic. However, once we do take fees to use
|
the core auditing logic. However, once we do take fees to use
|
||||||
operating costs, and if we still want "predicted_result" to match
|
operating costs, and if we still want "auditor_predicted_result" to match
|
||||||
the tables overall, we'll need a command-line tool to insert rows
|
the tables overall, we'll need a command-line tool to insert rows
|
||||||
into this table and update "predicted_result" accordingly.
|
into this table and update "auditor_predicted_result" accordingly.
|
||||||
(So this table for now just exists as a reminder of what we'll
|
(So this table for now just exists as a reminder of what we'll
|
||||||
need in the long term.) */
|
need in the long term.) */
|
||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS historic_ledger"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_historic_ledger"
|
||||||
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
||||||
",purpose VARCHAR NOT NULL"
|
",purpose VARCHAR NOT NULL"
|
||||||
",timestamp INT8 NOT NULL"
|
",timestamp INT8 NOT NULL"
|
||||||
@ -372,12 +372,12 @@ postgres_create_tables (void *cls)
|
|||||||
",balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
",balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||||
")"),
|
")"),
|
||||||
GNUNET_PQ_make_try_execute ("CREATE INDEX history_ledger_by_master_pub_and_time "
|
GNUNET_PQ_make_try_execute ("CREATE INDEX history_ledger_by_master_pub_and_time "
|
||||||
"ON historic_ledger(master_pub,timestamp)"),
|
"ON auditor_historic_ledger(master_pub,timestamp)"),
|
||||||
/* Table with the sum of the ledger, historic_revenue,
|
/* Table with the sum of the ledger, auditor_historic_revenue,
|
||||||
historic_losses and the auditor_reserve_balance. This is the
|
auditor_historic_losses and the auditor_reserve_balance. This is the
|
||||||
final amount that the exchange should have in its bank account
|
final amount that the exchange should have in its bank account
|
||||||
right now. */
|
right now. */
|
||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS predicted_result"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS auditor_predicted_result"
|
||||||
"(master_pub BYTEA PRIMARY KEY CHECK (LENGTH(master_pub)=32)"
|
"(master_pub BYTEA PRIMARY KEY CHECK (LENGTH(master_pub)=32)"
|
||||||
",balance_val INT8 NOT NULL"
|
",balance_val INT8 NOT NULL"
|
||||||
",balance_frac INT4 NOT NULL"
|
",balance_frac INT4 NOT NULL"
|
||||||
@ -616,8 +616,8 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" WHERE master_pub=$1;",
|
" WHERE master_pub=$1;",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_insert_denomination_balance() */
|
/* Used in #postgres_insert_denomination_balance() */
|
||||||
GNUNET_PQ_make_prepare ("denomination_pending_insert",
|
GNUNET_PQ_make_prepare ("auditor_denomination_pending_insert",
|
||||||
"INSERT INTO denomination_pending "
|
"INSERT INTO auditor_denomination_pending "
|
||||||
"(denom_pub_hash"
|
"(denom_pub_hash"
|
||||||
",denom_balance_val"
|
",denom_balance_val"
|
||||||
",denom_balance_frac"
|
",denom_balance_frac"
|
||||||
@ -628,8 +628,8 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
") VALUES ($1,$2,$3,$4,$5,$6,$7);",
|
") VALUES ($1,$2,$3,$4,$5,$6,$7);",
|
||||||
7),
|
7),
|
||||||
/* Used in #postgres_update_denomination_balance() */
|
/* Used in #postgres_update_denomination_balance() */
|
||||||
GNUNET_PQ_make_prepare ("denomination_pending_update",
|
GNUNET_PQ_make_prepare ("auditor_denomination_pending_update",
|
||||||
"UPDATE denomination_pending SET"
|
"UPDATE auditor_denomination_pending SET"
|
||||||
" denom_balance_val=$1"
|
" denom_balance_val=$1"
|
||||||
",denom_balance_frac=$2"
|
",denom_balance_frac=$2"
|
||||||
",denom_balance_curr=$3"
|
",denom_balance_curr=$3"
|
||||||
@ -639,7 +639,7 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" WHERE denom_pub_hash=$7",
|
" WHERE denom_pub_hash=$7",
|
||||||
7),
|
7),
|
||||||
/* Used in #postgres_get_denomination_balance() */
|
/* Used in #postgres_get_denomination_balance() */
|
||||||
GNUNET_PQ_make_prepare ("denomination_pending_select",
|
GNUNET_PQ_make_prepare ("auditor_denomination_pending_select",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" denom_balance_val"
|
" denom_balance_val"
|
||||||
",denom_balance_frac"
|
",denom_balance_frac"
|
||||||
@ -647,12 +647,12 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
",denom_risk_val"
|
",denom_risk_val"
|
||||||
",denom_risk_frac"
|
",denom_risk_frac"
|
||||||
",denom_risk_curr"
|
",denom_risk_curr"
|
||||||
" FROM denomination_pending"
|
" FROM auditor_denomination_pending"
|
||||||
" WHERE denom_pub_hash=$1",
|
" WHERE denom_pub_hash=$1",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_insert_balance_summary() */
|
/* Used in #postgres_insert_balance_summary() */
|
||||||
GNUNET_PQ_make_prepare ("balance_summary_insert",
|
GNUNET_PQ_make_prepare ("auditor_balance_summary_insert",
|
||||||
"INSERT INTO balance_summary "
|
"INSERT INTO auditor_balance_summary "
|
||||||
"(master_pub"
|
"(master_pub"
|
||||||
",denom_balance_val"
|
",denom_balance_val"
|
||||||
",denom_balance_frac"
|
",denom_balance_frac"
|
||||||
@ -672,8 +672,8 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16);",
|
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16);",
|
||||||
16),
|
16),
|
||||||
/* Used in #postgres_update_balance_summary() */
|
/* Used in #postgres_update_balance_summary() */
|
||||||
GNUNET_PQ_make_prepare ("balance_summary_update",
|
GNUNET_PQ_make_prepare ("auditor_balance_summary_update",
|
||||||
"UPDATE balance_summary SET"
|
"UPDATE auditor_balance_summary SET"
|
||||||
" denom_balance_val=$1"
|
" denom_balance_val=$1"
|
||||||
",denom_balance_frac=$2"
|
",denom_balance_frac=$2"
|
||||||
",denom_balance_curr=$3"
|
",denom_balance_curr=$3"
|
||||||
@ -692,7 +692,7 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" WHERE master_pub=$16;",
|
" WHERE master_pub=$16;",
|
||||||
16),
|
16),
|
||||||
/* Used in #postgres_get_balance_summary() */
|
/* Used in #postgres_get_balance_summary() */
|
||||||
GNUNET_PQ_make_prepare ("balance_summary_select",
|
GNUNET_PQ_make_prepare ("auditor_balance_summary_select",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" denom_balance_val"
|
" denom_balance_val"
|
||||||
",denom_balance_frac"
|
",denom_balance_frac"
|
||||||
@ -709,12 +709,12 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
",risk_val"
|
",risk_val"
|
||||||
",risk_frac"
|
",risk_frac"
|
||||||
",risk_curr"
|
",risk_curr"
|
||||||
" FROM balance_summary"
|
" FROM auditor_balance_summary"
|
||||||
" WHERE master_pub=$1;",
|
" WHERE master_pub=$1;",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_insert_historic_denom_revenue() */
|
/* Used in #postgres_insert_historic_denom_revenue() */
|
||||||
GNUNET_PQ_make_prepare ("historic_denomination_revenue_insert",
|
GNUNET_PQ_make_prepare ("auditor_historic_denomination_revenue_insert",
|
||||||
"INSERT INTO historic_denomination_revenue"
|
"INSERT INTO auditor_historic_denomination_revenue"
|
||||||
"(master_pub"
|
"(master_pub"
|
||||||
",denom_pub_hash"
|
",denom_pub_hash"
|
||||||
",revenue_timestamp"
|
",revenue_timestamp"
|
||||||
@ -724,19 +724,19 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
") VALUES ($1,$2,$3,$4,$5,$6);",
|
") VALUES ($1,$2,$3,$4,$5,$6);",
|
||||||
6),
|
6),
|
||||||
/* Used in #postgres_select_historic_denom_revenue() */
|
/* Used in #postgres_select_historic_denom_revenue() */
|
||||||
GNUNET_PQ_make_prepare ("historic_denomination_revenue_select",
|
GNUNET_PQ_make_prepare ("auditor_historic_denomination_revenue_select",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" denom_pub_hash"
|
" denom_pub_hash"
|
||||||
",revenue_timestamp"
|
",revenue_timestamp"
|
||||||
",revenue_balance_val"
|
",revenue_balance_val"
|
||||||
",revenue_balance_frac"
|
",revenue_balance_frac"
|
||||||
",revenue_balance_curr"
|
",revenue_balance_curr"
|
||||||
" FROM historic_denomination_revenue"
|
" FROM auditor_historic_denomination_revenue"
|
||||||
" WHERE master_pub=$1;",
|
" WHERE master_pub=$1;",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_insert_historic_losses() */
|
/* Used in #postgres_insert_historic_losses() */
|
||||||
GNUNET_PQ_make_prepare ("historic_losses_insert",
|
GNUNET_PQ_make_prepare ("auditor_historic_losses_insert",
|
||||||
"INSERT INTO historic_losses"
|
"INSERT INTO auditor_historic_losses"
|
||||||
"(master_pub"
|
"(master_pub"
|
||||||
",denom_pub_hash"
|
",denom_pub_hash"
|
||||||
",loss_timestamp"
|
",loss_timestamp"
|
||||||
@ -746,19 +746,19 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
") VALUES ($1,$2,$3,$4,$5,$6);",
|
") VALUES ($1,$2,$3,$4,$5,$6);",
|
||||||
6),
|
6),
|
||||||
/* Used in #postgres_select_historic_losses() */
|
/* Used in #postgres_select_historic_losses() */
|
||||||
GNUNET_PQ_make_prepare ("historic_losses_select",
|
GNUNET_PQ_make_prepare ("auditor_historic_losses_select",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" denom_pub_hash"
|
" denom_pub_hash"
|
||||||
",loss_timestamp"
|
",loss_timestamp"
|
||||||
",loss_balance_val"
|
",loss_balance_val"
|
||||||
",loss_balance_frac"
|
",loss_balance_frac"
|
||||||
",loss_balance_curr"
|
",loss_balance_curr"
|
||||||
" FROM historic_losses"
|
" FROM auditor_historic_losses"
|
||||||
" WHERE master_pub=$1;",
|
" WHERE master_pub=$1;",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_insert_historic_reserve_revenue() */
|
/* Used in #postgres_insert_historic_reserve_revenue() */
|
||||||
GNUNET_PQ_make_prepare ("historic_reserve_summary_insert",
|
GNUNET_PQ_make_prepare ("auditor_historic_reserve_summary_insert",
|
||||||
"INSERT INTO historic_reserve_summary"
|
"INSERT INTO auditor_historic_reserve_summary"
|
||||||
"(master_pub"
|
"(master_pub"
|
||||||
",start_date"
|
",start_date"
|
||||||
",end_date"
|
",end_date"
|
||||||
@ -768,19 +768,19 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
") VALUES ($1,$2,$3,$4,$5,$6);",
|
") VALUES ($1,$2,$3,$4,$5,$6);",
|
||||||
6),
|
6),
|
||||||
/* Used in #postgres_select_historic_reserve_revenue() */
|
/* Used in #postgres_select_historic_reserve_revenue() */
|
||||||
GNUNET_PQ_make_prepare ("historic_reserve_summary_select",
|
GNUNET_PQ_make_prepare ("auditor_historic_reserve_summary_select",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" start_date"
|
" start_date"
|
||||||
",end_date"
|
",end_date"
|
||||||
",reserve_profits_val"
|
",reserve_profits_val"
|
||||||
",reserve_profits_frac"
|
",reserve_profits_frac"
|
||||||
",reserve_profits_curr"
|
",reserve_profits_curr"
|
||||||
" FROM historic_reserve_summary"
|
" FROM auditor_historic_reserve_summary"
|
||||||
" WHERE master_pub=$1;",
|
" WHERE master_pub=$1;",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_insert_predicted_result() */
|
/* Used in #postgres_insert_predicted_result() */
|
||||||
GNUNET_PQ_make_prepare ("predicted_result_insert",
|
GNUNET_PQ_make_prepare ("auditor_predicted_result_insert",
|
||||||
"INSERT INTO predicted_result"
|
"INSERT INTO auditor_predicted_result"
|
||||||
"(master_pub"
|
"(master_pub"
|
||||||
",balance_val"
|
",balance_val"
|
||||||
",balance_frac"
|
",balance_frac"
|
||||||
@ -788,20 +788,20 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
") VALUES ($1,$2,$3,$4);",
|
") VALUES ($1,$2,$3,$4);",
|
||||||
4),
|
4),
|
||||||
/* Used in #postgres_update_predicted_result() */
|
/* Used in #postgres_update_predicted_result() */
|
||||||
GNUNET_PQ_make_prepare ("predicted_result_update",
|
GNUNET_PQ_make_prepare ("auditor_predicted_result_update",
|
||||||
"UPDATE predicted_result SET"
|
"UPDATE auditor_predicted_result SET"
|
||||||
" balance_val=$1"
|
" balance_val=$1"
|
||||||
",balance_frac=$2"
|
",balance_frac=$2"
|
||||||
",balance_curr=$3"
|
",balance_curr=$3"
|
||||||
" WHERE master_pub=$4;",
|
" WHERE master_pub=$4;",
|
||||||
4),
|
4),
|
||||||
/* Used in #postgres_get_predicted_balance() */
|
/* Used in #postgres_get_predicted_balance() */
|
||||||
GNUNET_PQ_make_prepare ("predicted_result_select",
|
GNUNET_PQ_make_prepare ("auditor_predicted_result_select",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" balance_val"
|
" balance_val"
|
||||||
",balance_frac"
|
",balance_frac"
|
||||||
",balance_curr"
|
",balance_curr"
|
||||||
" FROM predicted_result"
|
" FROM auditor_predicted_result"
|
||||||
" WHERE master_pub=$1;",
|
" WHERE master_pub=$1;",
|
||||||
1),
|
1),
|
||||||
GNUNET_PQ_PREPARED_STATEMENT_END
|
GNUNET_PQ_PREPARED_STATEMENT_END
|
||||||
@ -1668,7 +1668,7 @@ postgres_insert_denomination_balance (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"denomination_pending_insert",
|
"auditor_denomination_pending_insert",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1699,7 +1699,7 @@ postgres_update_denomination_balance (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"denomination_pending_update",
|
"auditor_denomination_pending_update",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1732,7 +1732,7 @@ postgres_get_denomination_balance (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
||||||
"denomination_pending_select",
|
"auditor_denomination_pending_select",
|
||||||
params,
|
params,
|
||||||
rs);
|
rs);
|
||||||
}
|
}
|
||||||
@ -1785,7 +1785,7 @@ postgres_insert_balance_summary (void *cls,
|
|||||||
refund_fee_balance));
|
refund_fee_balance));
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"balance_summary_insert",
|
"auditor_balance_summary_insert",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1825,7 +1825,7 @@ postgres_update_balance_summary (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"balance_summary_update",
|
"auditor_balance_summary_update",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1867,7 +1867,7 @@ postgres_get_balance_summary (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
||||||
"balance_summary_select",
|
"auditor_balance_summary_select",
|
||||||
params,
|
params,
|
||||||
rs);
|
rs);
|
||||||
}
|
}
|
||||||
@ -1904,7 +1904,7 @@ postgres_insert_historic_denom_revenue (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"historic_denomination_revenue_insert",
|
"auditor_historic_denomination_revenue_insert",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2009,7 +2009,7 @@ postgres_select_historic_denom_revenue (void *cls,
|
|||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
||||||
"historic_denomination_revenue_select",
|
"auditor_historic_denomination_revenue_select",
|
||||||
params,
|
params,
|
||||||
&historic_denom_revenue_cb,
|
&historic_denom_revenue_cb,
|
||||||
&hrc);
|
&hrc);
|
||||||
@ -2051,7 +2051,7 @@ postgres_insert_historic_losses (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"historic_losses_insert",
|
"auditor_historic_losses_insert",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2155,7 +2155,7 @@ postgres_select_historic_losses (void *cls,
|
|||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
||||||
"historic_losses_select",
|
"auditor_historic_losses_select",
|
||||||
params,
|
params,
|
||||||
&losses_cb,
|
&losses_cb,
|
||||||
&lctx);
|
&lctx);
|
||||||
@ -2193,7 +2193,7 @@ postgres_insert_historic_reserve_revenue (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"historic_reserve_summary_insert",
|
"auditor_historic_reserve_summary_insert",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2296,7 +2296,7 @@ postgres_select_historic_reserve_revenue (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
||||||
"historic_reserve_summary_select",
|
"auditor_historic_reserve_summary_select",
|
||||||
params,
|
params,
|
||||||
&historic_reserve_revenue_cb,
|
&historic_reserve_revenue_cb,
|
||||||
&hrc);
|
&hrc);
|
||||||
@ -2329,7 +2329,7 @@ postgres_insert_predicted_result (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"predicted_result_insert",
|
"auditor_predicted_result_insert",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2357,7 +2357,7 @@ postgres_update_predicted_result (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"predicted_result_update",
|
"auditor_predicted_result_update",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2388,7 +2388,7 @@ postgres_get_predicted_balance (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
||||||
"predicted_result_select",
|
"auditor_predicted_result_select",
|
||||||
params,
|
params,
|
||||||
rs);
|
rs);
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,7 @@ postgres_create_tables (void *cls)
|
|||||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS reserves_out"
|
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS reserves_out"
|
||||||
"(reserve_out_serial_id BIGSERIAL"
|
"(reserve_out_serial_id BIGSERIAL"
|
||||||
",h_blind_ev BYTEA PRIMARY KEY"
|
",h_blind_ev BYTEA PRIMARY KEY"
|
||||||
",denom_pub_hash BYTEA NOT NULL REFERENCES denominations (denom_pub_hash) ON DELETE CASCADE"
|
",denom_pub_hash BYTEA NOT NULL REFERENCES denominations (denom_pub_hash)" /* do NOT CASCADE on DELETE, we may keep the denomination key alive! */
|
||||||
",denom_sig BYTEA NOT NULL"
|
",denom_sig BYTEA NOT NULL"
|
||||||
",reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE"
|
",reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE"
|
||||||
",reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)"
|
",reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)"
|
||||||
@ -398,8 +398,7 @@ postgres_create_tables (void *cls)
|
|||||||
/* Table for /payback information */
|
/* Table for /payback information */
|
||||||
GNUNET_PQ_make_execute("CREATE TABLE IF NOT EXISTS payback "
|
GNUNET_PQ_make_execute("CREATE TABLE IF NOT EXISTS payback "
|
||||||
"(payback_uuid BIGSERIAL"
|
"(payback_uuid BIGSERIAL"
|
||||||
",reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE"
|
",coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub)" /* do NOT CASCADE on delete, we may keep the coin alive! */
|
||||||
",coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) ON DELETE CASCADE"
|
|
||||||
",coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)"
|
",coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)"
|
||||||
",coin_blind BYTEA NOT NULL CHECK(LENGTH(coin_blind)=32)"
|
",coin_blind BYTEA NOT NULL CHECK(LENGTH(coin_blind)=32)"
|
||||||
",amount_val INT8 NOT NULL"
|
",amount_val INT8 NOT NULL"
|
||||||
@ -1302,8 +1301,7 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
information */
|
information */
|
||||||
GNUNET_PQ_make_prepare ("payback_insert",
|
GNUNET_PQ_make_prepare ("payback_insert",
|
||||||
"INSERT INTO payback "
|
"INSERT INTO payback "
|
||||||
"(reserve_pub"
|
"(coin_pub"
|
||||||
",coin_pub"
|
|
||||||
",coin_sig"
|
",coin_sig"
|
||||||
",coin_blind"
|
",coin_blind"
|
||||||
",amount_val"
|
",amount_val"
|
||||||
@ -1312,14 +1310,14 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
",timestamp"
|
",timestamp"
|
||||||
",h_blind_ev"
|
",h_blind_ev"
|
||||||
") VALUES "
|
") VALUES "
|
||||||
"($1, $2, $3, $4, $5, $6, $7, $8, $9);",
|
"($1, $2, $3, $4, $5, $6, $7, $8);",
|
||||||
9),
|
8),
|
||||||
/* Used in #postgres_select_payback_above_serial_id() to obtain payback transactions */
|
/* Used in #postgres_select_payback_above_serial_id() to obtain payback transactions */
|
||||||
GNUNET_PQ_make_prepare ("payback_get_incr",
|
GNUNET_PQ_make_prepare ("payback_get_incr",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" payback_uuid"
|
" payback_uuid"
|
||||||
",timestamp"
|
",timestamp"
|
||||||
",reserve_pub"
|
",ro.reserve_pub"
|
||||||
",coin_pub"
|
",coin_pub"
|
||||||
",coin_sig"
|
",coin_sig"
|
||||||
",coin_blind"
|
",coin_blind"
|
||||||
@ -1334,6 +1332,8 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" USING (coin_pub)"
|
" USING (coin_pub)"
|
||||||
" JOIN denominations denoms"
|
" JOIN denominations denoms"
|
||||||
" USING (denom_pub_hash)"
|
" USING (denom_pub_hash)"
|
||||||
|
" JOIN reserves_out ro"
|
||||||
|
" USING (h_blind_ev)"
|
||||||
" WHERE payback_uuid>=$1"
|
" WHERE payback_uuid>=$1"
|
||||||
" ORDER BY payback_uuid ASC;",
|
" ORDER BY payback_uuid ASC;",
|
||||||
1),
|
1),
|
||||||
@ -1374,7 +1374,9 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" USING (coin_pub)"
|
" USING (coin_pub)"
|
||||||
" JOIN denominations denoms"
|
" JOIN denominations denoms"
|
||||||
" USING (denom_pub_hash)"
|
" USING (denom_pub_hash)"
|
||||||
" WHERE payback.reserve_pub=$1;",
|
" JOIN reserves_out ro"
|
||||||
|
" USING (h_blind_ev)"
|
||||||
|
" WHERE ro.reserve_pub=$1;",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_get_reserve_history() */
|
/* Used in #postgres_get_reserve_history() */
|
||||||
GNUNET_PQ_make_prepare ("close_by_reserve",
|
GNUNET_PQ_make_prepare ("close_by_reserve",
|
||||||
@ -1411,7 +1413,7 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
for a coin */
|
for a coin */
|
||||||
GNUNET_PQ_make_prepare ("payback_by_coin",
|
GNUNET_PQ_make_prepare ("payback_by_coin",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" payback.reserve_pub"
|
" ro.reserve_pub"
|
||||||
",coin_sig"
|
",coin_sig"
|
||||||
",coin_blind"
|
",coin_blind"
|
||||||
",amount_val"
|
",amount_val"
|
||||||
@ -1420,12 +1422,13 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
",timestamp"
|
",timestamp"
|
||||||
",denoms.denom_pub"
|
",denoms.denom_pub"
|
||||||
",coins.denom_sig"
|
",coins.denom_sig"
|
||||||
|
|
||||||
" FROM payback"
|
" FROM payback"
|
||||||
" JOIN known_coins coins"
|
" JOIN known_coins coins"
|
||||||
" USING (coin_pub)"
|
" USING (coin_pub)"
|
||||||
" JOIN denominations denoms"
|
" JOIN denominations denoms"
|
||||||
" USING (denom_pub_hash)"
|
" USING (denom_pub_hash)"
|
||||||
|
" JOIN reserves_out ro"
|
||||||
|
" USING (h_blind_ev)"
|
||||||
" WHERE payback.coin_pub=$1;",
|
" WHERE payback.coin_pub=$1;",
|
||||||
1),
|
1),
|
||||||
/* Used in #postgres_get_reserve_by_h_blind() */
|
/* Used in #postgres_get_reserve_by_h_blind() */
|
||||||
@ -1452,6 +1455,11 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" AND current_balance_val = 0"
|
" AND current_balance_val = 0"
|
||||||
" AND current_balance_frac = 0;",
|
" AND current_balance_frac = 0;",
|
||||||
1),
|
1),
|
||||||
|
GNUNET_PQ_make_prepare ("gc_wire_fee",
|
||||||
|
"DELETE"
|
||||||
|
" FROM wire_fee"
|
||||||
|
" WHERE end_date < $1;",
|
||||||
|
1),
|
||||||
GNUNET_PQ_PREPARED_STATEMENT_END
|
GNUNET_PQ_PREPARED_STATEMENT_END
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2267,8 +2275,8 @@ add_withdraw_coin (void *cls,
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
add_payback (void *cls,
|
add_payback (void *cls,
|
||||||
PGresult *result,
|
PGresult *result,
|
||||||
unsigned int num_results)
|
unsigned int num_results)
|
||||||
{
|
{
|
||||||
struct ReserveHistoryContext *rhc = cls;
|
struct ReserveHistoryContext *rhc = cls;
|
||||||
|
|
||||||
@ -4873,6 +4881,7 @@ postgres_gc (void *cls)
|
|||||||
{
|
{
|
||||||
struct PostgresClosure *pc = cls;
|
struct PostgresClosure *pc = cls;
|
||||||
struct GNUNET_TIME_Absolute now;
|
struct GNUNET_TIME_Absolute now;
|
||||||
|
struct GNUNET_TIME_Absolute long_ago;
|
||||||
struct GNUNET_PQ_QueryParam params_none[] = {
|
struct GNUNET_PQ_QueryParam params_none[] = {
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
@ -4880,26 +4889,46 @@ postgres_gc (void *cls)
|
|||||||
GNUNET_PQ_query_param_absolute_time (&now),
|
GNUNET_PQ_query_param_absolute_time (&now),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
|
struct GNUNET_PQ_QueryParam params_ancient_time[] = {
|
||||||
|
GNUNET_PQ_query_param_absolute_time (&long_ago),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
PGconn *conn;
|
PGconn *conn;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
now = GNUNET_TIME_absolute_get ();
|
now = GNUNET_TIME_absolute_get ();
|
||||||
|
/* Keep wire fees for 10 years, that should always
|
||||||
|
be enough _and_ they are tiny so it does not
|
||||||
|
matter to make this tight */
|
||||||
|
long_ago = GNUNET_TIME_absolute_subtract (now,
|
||||||
|
GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_YEARS,
|
||||||
|
10));
|
||||||
conn = GNUNET_PQ_connect (pc->connection_cfg_str);
|
conn = GNUNET_PQ_connect (pc->connection_cfg_str);
|
||||||
if (NULL == conn)
|
if (NULL == conn)
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
ret = postgres_prepare (conn);
|
ret = postgres_prepare (conn);
|
||||||
if (GNUNET_OK == ret)
|
if (GNUNET_OK == ret)
|
||||||
{
|
{
|
||||||
if ( (0 > GNUNET_PQ_eval_prepared_non_select (conn,
|
if (
|
||||||
|
(0 > GNUNET_PQ_eval_prepared_non_select (conn,
|
||||||
|
"gc_reserves",
|
||||||
|
params_time)) ||
|
||||||
|
(0 > GNUNET_PQ_eval_prepared_non_select (conn,
|
||||||
"gc_prewire",
|
"gc_prewire",
|
||||||
params_none)) ||
|
params_none)) ||
|
||||||
(0 > GNUNET_PQ_eval_prepared_non_select (conn,
|
(0 > GNUNET_PQ_eval_prepared_non_select (conn,
|
||||||
"gc_denominations",
|
"gc_wire_fee",
|
||||||
params_time)) ||
|
params_ancient_time))
|
||||||
(0 > GNUNET_PQ_eval_prepared_non_select (conn,
|
)
|
||||||
"gc_reserves",
|
|
||||||
params_time)) )
|
|
||||||
ret = GNUNET_SYSERR;
|
ret = GNUNET_SYSERR;
|
||||||
|
/* This one may fail due to foreign key constraints from
|
||||||
|
payback and reserves_out tables to known_coins; these
|
||||||
|
are NOT using 'ON DROP CASCADE' and might keep denomination
|
||||||
|
keys alive for a bit longer, thus causing this statement
|
||||||
|
to fail. */
|
||||||
|
(void) GNUNET_PQ_eval_prepared_non_select (conn,
|
||||||
|
"gc_denominations",
|
||||||
|
params_time);
|
||||||
}
|
}
|
||||||
PQfinish (conn);
|
PQfinish (conn);
|
||||||
return ret;
|
return ret;
|
||||||
@ -5995,7 +6024,6 @@ postgres_insert_payback_request (void *cls,
|
|||||||
struct GNUNET_TIME_Absolute expiry;
|
struct GNUNET_TIME_Absolute expiry;
|
||||||
struct TALER_EXCHANGEDB_Reserve reserve;
|
struct TALER_EXCHANGEDB_Reserve reserve;
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
GNUNET_PQ_query_param_auto_from_type (reserve_pub),
|
|
||||||
GNUNET_PQ_query_param_auto_from_type (&coin->coin_pub),
|
GNUNET_PQ_query_param_auto_from_type (&coin->coin_pub),
|
||||||
GNUNET_PQ_query_param_auto_from_type (coin_sig),
|
GNUNET_PQ_query_param_auto_from_type (coin_sig),
|
||||||
GNUNET_PQ_query_param_auto_from_type (coin_blind),
|
GNUNET_PQ_query_param_auto_from_type (coin_blind),
|
||||||
|
Loading…
Reference in New Issue
Block a user