update reserve summary when withdraws are made through insert_collectible_blindcoin

This commit is contained in:
Sree Harsha Totakura 2015-03-18 13:50:03 +01:00
parent 08958c73e8
commit e6b13123d7
4 changed files with 34 additions and 1 deletions

View File

@ -1030,6 +1030,8 @@ TALER_MINT_DB_get_collectable_blindcoin (PGconn *db_conn,
*
* @param db_conn database connection to use
* @param h_blind hash of the blinded message
* @param withdraw amount by which the reserve will be withdrawn with this
* transaction
* @param collectable corresponding collectable coin (blind signature)
* if a coin is found
* @return #GNUNET_SYSERR on internal error
@ -1039,9 +1041,11 @@ TALER_MINT_DB_get_collectable_blindcoin (PGconn *db_conn,
int
TALER_MINT_DB_insert_collectable_blindcoin (PGconn *db_conn,
const struct GNUNET_HashCode *h_blind,
struct TALER_Amount withdraw,
const struct CollectableBlindcoin *collectable)
{
PGresult *result;
struct Reserve reserve;
char *denom_pub_enc = NULL;
char *denom_sig_enc = NULL;
size_t denom_pub_enc_size;
@ -1063,16 +1067,32 @@ TALER_MINT_DB_insert_collectable_blindcoin (PGconn *db_conn,
TALER_DB_QUERY_PARAM_PTR (&collectable->reserve_sig),
TALER_DB_QUERY_PARAM_END
};
if (GNUNET_OK != TALER_MINT_DB_transaction (db_conn))
goto cleanup;
result = TALER_DB_exec_prepared (db_conn,
"insert_collectable_blindcoin",
params);
if (PGRES_COMMAND_OK != PQresultStatus (result))
{
QUERY_ERR (result);
goto rollback;
}
reserve.pub = (struct GNUNET_CRYPTO_EddsaPublicKey *)
&collectable->reserve_pub;
if (GNUNET_OK != TALER_MINT_DB_reserve_get (db_conn,
&reserve))
goto rollback;
reserve.balance = TALER_amount_subtract (reserve.balance, withdraw);
if (GNUNET_OK != reserves_update (db_conn, &reserve))
goto rollback;
if (GNUNET_OK == TALER_MINT_DB_commit (db_conn))
{
ret = GNUNET_OK;
goto cleanup;
}
ret = GNUNET_OK;
rollback:
TALER_MINT_DB_rollback(db_conn);
cleanup:
PQclear (result);
GNUNET_free_non_null (denom_pub_enc);

View File

@ -252,6 +252,8 @@ TALER_MINT_DB_get_collectable_blindcoin (PGconn *db_conn,
*
* @param db_conn database connection to use
* @param h_blind hash of the blinded message
* @param withdraw amount by which the reserve will be withdrawn with this
* transaction
* @param collectable corresponding collectable coin (blind signature)
* if a coin is found
* @return #GNUNET_SYSERR on internal error
@ -261,6 +263,7 @@ TALER_MINT_DB_get_collectable_blindcoin (PGconn *db_conn,
int
TALER_MINT_DB_insert_collectable_blindcoin (PGconn *db_conn,
const struct GNUNET_HashCode *h_blind,
struct TALER_Amount withdraw,
const struct CollectableBlindcoin *collectable);

View File

@ -386,6 +386,7 @@ TALER_MINT_db_execute_withdraw_sign (struct MHD_Connection *connection,
if (GNUNET_OK !=
TALER_MINT_DB_insert_collectable_blindcoin (db_conn,
&h_blind,
amount_required,
&collectable))
{
GNUNET_break (0);

View File

@ -194,9 +194,18 @@ run (void *cls, char *const *args, const char *cfgfile,
cbc.denom_pub = dkp->pub;
cbc.sig = GNUNET_CRYPTO_rsa_sign (dkp->priv, &h_blind, sizeof (h_blind));
(void) memcpy (&cbc.reserve_pub, &reserve_pub, sizeof (reserve_pub));
amount.value--;
amount.fraction--;
FAILIF (GNUNET_OK != TALER_MINT_DB_insert_collectable_blindcoin (db,
&h_blind,
amount,
&cbc));
FAILIF (GNUNET_OK != check_reserve (db,
&reserve_pub,
amount.value,
amount.fraction,
amount.currency,
expiry.abs_value_us));
FAILIF (GNUNET_YES != TALER_MINT_DB_get_collectable_blindcoin (db,
&h_blind,
&cbc2));