implement postges_get_old_coin_by_h_blind for #5777

This commit is contained in:
Christian Grothoff 2019-07-23 20:27:41 +02:00
parent 334498a298
commit 7d43ad56d3
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 66 additions and 6 deletions

View File

@ -247,13 +247,10 @@ payback_transaction (void *cls,
reserve / account the money should go */ reserve / account the money should go */
if (pc->refreshed) if (pc->refreshed)
{ {
GNUNET_assert (0); // FIXME #5777: not implemented in DB!
#if 0
qs = TEH_plugin->get_old_coin_by_h_blind (TEH_plugin->cls, qs = TEH_plugin->get_old_coin_by_h_blind (TEH_plugin->cls,
session, session,
&pc->h_blind, &pc->h_blind,
&pc->target.old_coin_pub); &pc->target.old_coin_pub);
#endif
if (0 > qs) if (0 > qs)
{ {
if (GNUNET_DB_STATUS_HARD_ERROR == qs) if (GNUNET_DB_STATUS_HARD_ERROR == qs)

View File

@ -1761,6 +1761,17 @@ postgres_prepare (PGconn *db_conn)
" LIMIT 1" " LIMIT 1"
" FOR UPDATE;", " FOR UPDATE;",
1), 1),
/* Used in #postgres_get_old_coin_by_h_blind() */
GNUNET_PQ_make_prepare ("old_coin_by_h_blind",
"SELECT"
" rcom.old_coin_pub"
" FROM refresh_revealed_coins"
" JOIN refresh_commitments rcom"
" USING (rc)"
" WHERE coin_ev=$1"
" LIMIT 1"
" FOR UPDATE;",
1),
/* used in #postgres_commit */ /* used in #postgres_commit */
GNUNET_PQ_make_prepare ("do_commit", GNUNET_PQ_make_prepare ("do_commit",
"COMMIT", "COMMIT",
@ -7156,9 +7167,42 @@ postgres_get_reserve_by_h_blind (void *cls,
}; };
return GNUNET_PQ_eval_prepared_singleton_select (session->conn, return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
"reserve_by_h_blind", "reserve_by_h_blind",
params, params,
rs); rs);
}
/**
* Obtain information about which old coin a coin was refreshed
* given the hash of the blinded (fresh) coin.
*
* @param cls closure
* @param session a session
* @param h_blind_ev hash of the blinded coin
* @param[out] reserve_pub set to information about the reserve (on success only)
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
postgres_get_old_coin_by_h_blind (void *cls,
struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *h_blind_ev,
struct TALER_CoinSpendPublicKeyP *old_coin_pub)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (h_blind_ev),
GNUNET_PQ_query_param_end
};
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_auto_from_type ("old_coin_pub",
old_coin_pub),
GNUNET_PQ_result_spec_end
};
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
"old_coin_by_h_blind",
params,
rs);
} }
@ -7764,6 +7808,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
= &postgres_insert_payback_refresh_request; = &postgres_insert_payback_refresh_request;
plugin->get_reserve_by_h_blind plugin->get_reserve_by_h_blind
= &postgres_get_reserve_by_h_blind; = &postgres_get_reserve_by_h_blind;
plugin->get_old_coin_by_h_blind
= &postgres_get_old_coin_by_h_blind;
plugin->insert_denomination_revocation plugin->insert_denomination_revocation
= &postgres_insert_denomination_revocation; = &postgres_insert_denomination_revocation;
plugin->get_denomination_revocation plugin->get_denomination_revocation

View File

@ -2429,6 +2429,23 @@ struct TALER_EXCHANGEDB_Plugin
struct TALER_ReservePublicKeyP *reserve_pub); struct TALER_ReservePublicKeyP *reserve_pub);
/**
* Obtain information about which old coin a coin was refreshed
* given the hash of the blinded (fresh) coin.
*
* @param cls closure
* @param session a session
* @param h_blind_ev hash of the blinded coin
* @param[out] old_coin_pub set to information about the old coin (on success only)
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
(*get_old_coin_by_h_blind)(void *cls,
struct TALER_EXCHANGEDB_Session *session,
const struct GNUNET_HashCode *h_blind_ev,
struct TALER_CoinSpendPublicKeyP *old_coin_pub);
/** /**
* Store information that a denomination key was revoked * Store information that a denomination key was revoked
* in the database. * in the database.