This commit is contained in:
Christian Grothoff 2015-06-11 12:30:14 +02:00
parent ed2b1c1b6f
commit 8bd6465325
4 changed files with 41 additions and 44 deletions

View File

@ -743,7 +743,7 @@ struct TALER_MINTDB_Plugin
* #GNUNET_YES on success
*/
int
(*get_collectable_blindcoin) (void *cls,
(*get_withdraw_info) (void *cls,
struct TALER_MINTDB_Session *sesssion,
const struct GNUNET_HashCode *h_blind,
struct TALER_MINTDB_CollectableBlindcoin *collectable);
@ -767,7 +767,7 @@ struct TALER_MINTDB_Plugin
* #GNUNET_YES on success
*/
int
(*insert_collectable_blindcoin) (void *cls,
(*insert_withdraw_info) (void *cls,
struct TALER_MINTDB_Session *sesssion,
const struct GNUNET_HashCode *h_blind,
struct TALER_Amount withdraw,
@ -1106,7 +1106,7 @@ struct TALER_MINTDB_Plugin
* @return #GNUNET_OK on success
*/
int
(*insert_refresh_collectable) (void *cls,
(*insert_refresh_out) (void *cls,
struct TALER_MINTDB_Session *sesssion,
const struct GNUNET_HashCode *session_hash,
uint16_t newcoin_index,

View File

@ -293,7 +293,7 @@ TMH_DB_execute_withdraw_sign (struct MHD_Connection *connection,
GNUNET_break (0);
return TMH_RESPONSE_reply_internal_db_error (connection);
}
res = TMH_plugin->get_collectable_blindcoin (TMH_plugin->cls,
res = TMH_plugin->get_withdraw_info (TMH_plugin->cls,
session,
&h_blind,
&collectable);
@ -452,7 +452,7 @@ TMH_DB_execute_withdraw_sign (struct MHD_Connection *connection,
&collectable.h_coin_envelope);
collectable.reserve_sig = *signature;
if (GNUNET_OK !=
TMH_plugin->insert_collectable_blindcoin (TMH_plugin->cls,
TMH_plugin->insert_withdraw_info (TMH_plugin->cls,
session,
&h_blind,
amount_required,
@ -1026,7 +1026,7 @@ refresh_mint_coin (struct MHD_Connection *connection,
return ev_sig;
}
if (GNUNET_OK !=
TMH_plugin->insert_refresh_collectable (TMH_plugin->cls,
TMH_plugin->insert_refresh_out (TMH_plugin->cls,
session,
session_hash,
coin_off,

View File

@ -193,7 +193,6 @@ postgres_create_tables (void *cls,
{
TALER_LOG_ERROR ("Database connection failed: %s\n",
PQerrorMessage (conn));
GNUNET_break (0);
PQfinish (conn);
return GNUNET_SYSERR;
}
@ -267,13 +266,12 @@ postgres_create_tables (void *cls,
key, as (broken) clients that use a non-random coin and blinding factor
should fail to even withdraw, as otherwise the coins will fail to deposit
(as they really must be unique). */
/* TODO: maybe rename to "reserves_out"? #3810
TODO: maybe add withdraw fee and amount_with_fee explicitly to table,
/* TODO: maybe add withdraw fee and amount_with_fee explicitly to table,
so we can init those fields on select? #3825
TODO: maybe add timestamp of when the operation was performed, so we
can influence the reserves' expiration_date not just based on
incoming but also based on outgoing transactions? */
SQLEXEC ("CREATE TABLE IF NOT EXISTS collectable_blindcoins"
SQLEXEC ("CREATE TABLE IF NOT EXISTS reserves_out"
"(h_blind_ev BYTEA PRIMARY KEY"
",denom_pub BYTEA NOT NULL REFERENCES denominations (pub)"
",denom_sig BYTEA NOT NULL"
@ -281,8 +279,8 @@ postgres_create_tables (void *cls,
",reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)"
");");
/* Index blindcoins(reserve_pub) for get_reserves_blindcoins statement */
SQLEXEC_INDEX ("CREATE INDEX collectable_blindcoins_reserve_pub_index ON"
" collectable_blindcoins (reserve_pub)");
SQLEXEC_INDEX ("CREATE INDEX reserves_out_reserve_pub_index ON"
" reserves_out (reserve_pub)");
/* Table with coins that have been (partially) spent, used to track
coin information only once.
TODO: maybe eliminate, this might be over-normalization (#3811) */
@ -369,9 +367,8 @@ postgres_create_tables (void *cls,
")");
/* Table with the signatures over coins generated during a refresh
operation. Needed to answer /refresh/link queries later. Stores
the coin signatures under the respective session hash and index.
NOTE: maybe rename the table to explain better what it is for? (#3810) */
SQLEXEC("CREATE TABLE IF NOT EXISTS refresh_collectable "
the coin signatures under the respective session hash and index. */
SQLEXEC("CREATE TABLE IF NOT EXISTS refresh_out "
"(session_hash BYTEA NOT NULL CHECK(LENGTH(session_hash)=64) REFERENCES refresh_sessions (session_hash) "
",newcoin_index INT2 NOT NULL"
",ev_sig BYTEA NOT NULL"
@ -518,15 +515,15 @@ postgres_prepare (PGconn *db_conn)
" FROM reserves_in"
" WHERE reserve_pub=$1",
1, NULL);
/* Used in #postgres_insert_collectable_blindcoin() to store
/* Used in #postgres_insert_withdraw_info() to store
the signature of a blinded coin with the blinded coin's
details before returning it during /withdraw/sign. We store
the coin's denomination information (public key, signature)
and the blinded message as well as the reserve that the coin
is being withdrawn from and the signature of the message
authorizing the withdrawal. */
PREPARE ("insert_collectable_blindcoin",
"INSERT INTO collectable_blindcoins "
PREPARE ("insert_withdraw_info",
"INSERT INTO reserves_out "
"(h_blind_ev"
",denom_pub"
",denom_sig"
@ -535,17 +532,17 @@ postgres_prepare (PGconn *db_conn)
") VALUES "
"($1, $2, $3, $4, $5);",
5, NULL);
/* Used in #postgres_get_collectable_blindcoin() to
/* Used in #postgres_get_withdraw_info() to
locate the response for a /withdraw/sign request
using the hash of the blinded message. Used to
make sure /withdraw/sign requests are idempotent. */
PREPARE ("get_collectable_blindcoin",
PREPARE ("get_withdraw_info",
"SELECT"
" denom_pub"
",denom_sig"
",reserve_sig"
",reserve_pub"
" FROM collectable_blindcoins"
" FROM reserves_out"
" WHERE h_blind_ev=$1",
1, NULL);
/* Used during #postgres_get_reserve_history() to
@ -558,7 +555,7 @@ postgres_prepare (PGconn *db_conn)
",denom_pub"
",denom_sig"
",reserve_sig"
" FROM collectable_blindcoins"
" FROM reserves_out"
" WHERE reserve_pub=$1;",
1, NULL);
/* Used in #postgres_get_refresh_session() to fetch
@ -649,11 +646,11 @@ postgres_prepare (PGconn *db_conn)
2, NULL);
/* FIXME: should have a way to query the 'refresh_melts' by
coin public key (#3813) */
/* FIXME: 'get_refresh_collectable' is not used anywhere!
/* FIXME: 'get_refresh_out' is not used anywhere!
Should be needed for /refresh/link at least. */
PREPARE ("get_refresh_collectable",
PREPARE ("get_refresh_out",
"SELECT ev_sig "
"FROM refresh_collectable "
"FROM refresh_out "
"WHERE session_hash=$1 AND newcoin_index=$2",
2, NULL);
/* Used in #postgres_insert_refresh_commit_links() to
@ -756,10 +753,10 @@ postgres_prepare (PGconn *db_conn)
" WHERE coin_pub=$1",
1, NULL);
/* Used in #postgres_insert_refresh_collectable() to store the
/* Used in #postgres_insert_refresh_out() to store the
generated signature(s) for future requests, i.e. /refresh/link */
PREPARE ("insert_refresh_collectable",
"INSERT INTO refresh_collectable "
PREPARE ("insert_refresh_out",
"INSERT INTO refresh_out "
"(session_hash"
",newcoin_index"
",ev_sig"
@ -776,7 +773,7 @@ postgres_prepare (PGconn *db_conn)
" JOIN refresh_order ro USING (session_hash)"
" JOIN refresh_commit_coin rcc USING (session_hash)"
" JOIN refresh_sessions rs USING (session_hash)"
" JOIN refresh_collectable rc USING (session_hash)"
" JOIN refresh_out rc USING (session_hash)"
" WHERE rm.coin_pub=$1"
" AND ro.newcoin_index=rcc.newcoin_index"
" AND ro.newcoin_index=rc.newcoin_index"
@ -1275,7 +1272,7 @@ postgres_reserves_in_insert (void *cls,
* #GNUNET_YES on success
*/
static int
postgres_get_collectable_blindcoin (void *cls,
postgres_get_withdraw_info (void *cls,
struct TALER_MINTDB_Session *session,
const struct GNUNET_HashCode *h_blind,
struct TALER_MINTDB_CollectableBlindcoin *collectable)
@ -1291,7 +1288,7 @@ postgres_get_collectable_blindcoin (void *cls,
ret = GNUNET_SYSERR;
result = TALER_PQ_exec_prepared (session->conn,
"get_collectable_blindcoin",
"get_withdraw_info",
params);
if (PGRES_TUPLES_OK != PQresultStatus (result))
@ -1351,7 +1348,7 @@ postgres_get_collectable_blindcoin (void *cls,
* #GNUNET_YES on success
*/
static int
postgres_insert_collectable_blindcoin (void *cls,
postgres_insert_withdraw_info (void *cls,
struct TALER_MINTDB_Session *session,
const struct GNUNET_HashCode *h_blind,
struct TALER_Amount withdraw,
@ -1376,7 +1373,7 @@ postgres_insert_collectable_blindcoin (void *cls,
return GNUNET_SYSERR;
}
result = TALER_PQ_exec_prepared (session->conn,
"insert_collectable_blindcoin",
"insert_withdraw_info",
params);
if (PGRES_COMMAND_OK != PQresultStatus (result))
{
@ -2456,7 +2453,7 @@ postgres_get_melt_commitment (void *cls,
* @return #GNUNET_OK on success
*/
static int
postgres_insert_refresh_collectable (void *cls,
postgres_insert_refresh_out (void *cls,
struct TALER_MINTDB_Session *session,
const struct GNUNET_HashCode *session_hash,
uint16_t newcoin_index,
@ -2471,7 +2468,7 @@ postgres_insert_refresh_collectable (void *cls,
};
result = TALER_PQ_exec_prepared (session->conn,
"insert_refresh_collectable",
"insert_refresh_out",
params);
if (PGRES_COMMAND_OK != PQresultStatus (result))
{
@ -2785,8 +2782,8 @@ libtaler_plugin_mintdb_postgres_init (void *cls)
plugin->insert_denomination = &postgres_insert_denomination;
plugin->reserve_get = &postgres_reserve_get;
plugin->reserves_in_insert = &postgres_reserves_in_insert;
plugin->get_collectable_blindcoin = &postgres_get_collectable_blindcoin;
plugin->insert_collectable_blindcoin = &postgres_insert_collectable_blindcoin;
plugin->get_withdraw_info = &postgres_get_withdraw_info;
plugin->insert_withdraw_info = &postgres_insert_withdraw_info;
plugin->get_reserve_history = &postgres_get_reserve_history;
plugin->free_reserve_history = &common_free_reserve_history;
plugin->have_deposit = &postgres_have_deposit;
@ -2805,7 +2802,7 @@ libtaler_plugin_mintdb_postgres_init (void *cls)
plugin->get_refresh_commit_links = &postgres_get_refresh_commit_links;
plugin->get_melt_commitment = &postgres_get_melt_commitment;
plugin->free_melt_commitment = &common_free_melt_commitment;
plugin->insert_refresh_collectable = &postgres_insert_refresh_collectable;
plugin->insert_refresh_out = &postgres_insert_refresh_out;
plugin->get_link_data_list = &postgres_get_link_data_list;
plugin->free_link_data_list = &common_free_link_data_list;
plugin->get_transfer = &postgres_get_transfer;

View File

@ -334,7 +334,7 @@ run (void *cls,
amount.value--;
amount.fraction--;
FAILIF (GNUNET_OK !=
plugin->insert_collectable_blindcoin (plugin->cls,
plugin->insert_withdraw_info (plugin->cls,
session,
&h_blind,
amount,
@ -347,7 +347,7 @@ run (void *cls,
amount.currency,
expiry.abs_value_us));
FAILIF (GNUNET_YES !=
plugin->get_collectable_blindcoin (plugin->cls,
plugin->get_withdraw_info (plugin->cls,
session,
&h_blind,
&cbc2));