diff options
| author | Sree Harsha Totakura <sreeharsha@totakura.in> | 2015-03-18 13:50:03 +0100 | 
|---|---|---|
| committer | Sree Harsha Totakura <sreeharsha@totakura.in> | 2015-03-18 13:50:03 +0100 | 
| commit | e6b13123d78c7da4fdcb2cf0e7eb5fafe1f62975 (patch) | |
| tree | 25cf5f56ec26682c52097499098ce026c66bdec6 /src/mint | |
| parent | 08958c73e8ba6ad30e98a30968077cdf55bc86e8 (diff) | |
update reserve summary when withdraws are made through insert_collectible_blindcoin
Diffstat (limited to 'src/mint')
| -rw-r--r-- | src/mint/mint_db.c | 22 | ||||
| -rw-r--r-- | src/mint/mint_db.h | 3 | ||||
| -rw-r--r-- | src/mint/taler-mint-httpd_db.c | 1 | ||||
| -rw-r--r-- | src/mint/test_mint_db.c | 9 | 
4 files changed, 34 insertions, 1 deletions
| diff --git a/src/mint/mint_db.c b/src/mint/mint_db.c index 6ed7193e..250acf54 100644 --- a/src/mint/mint_db.c +++ b/src/mint/mint_db.c @@ -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); diff --git a/src/mint/mint_db.h b/src/mint/mint_db.h index 4a9ec152..cec243c9 100644 --- a/src/mint/mint_db.h +++ b/src/mint/mint_db.h @@ -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); diff --git a/src/mint/taler-mint-httpd_db.c b/src/mint/taler-mint-httpd_db.c index df68b657..c5c121d5 100644 --- a/src/mint/taler-mint-httpd_db.c +++ b/src/mint/taler-mint-httpd_db.c @@ -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); diff --git a/src/mint/test_mint_db.c b/src/mint/test_mint_db.c index 01041613..6a55a1d3 100644 --- a/src/mint/test_mint_db.c +++ b/src/mint/test_mint_db.c @@ -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)); | 
