summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-03-22 16:20:03 +0100
committerChristian Grothoff <christian@grothoff.org>2015-03-22 16:20:03 +0100
commit41478aea76fdcbd11f0fb2225aae4b184053ab5f (patch)
tree326e5ee7bebe70b02bc3352b1539e2f92aa511ac
parent3fe9a76098607656d95b6d9843dc77bc948a46a2 (diff)
downloadexchange-41478aea76fdcbd11f0fb2225aae4b184053ab5f.tar.gz
exchange-41478aea76fdcbd11f0fb2225aae4b184053ab5f.tar.bz2
exchange-41478aea76fdcbd11f0fb2225aae4b184053ab5f.zip
move deposit fee check to earlier
-rw-r--r--src/mint/taler-mint-httpd_db.c13
-rw-r--r--src/mint/taler-mint-httpd_deposit.c12
2 files changed, 14 insertions, 11 deletions
diff --git a/src/mint/taler-mint-httpd_db.c b/src/mint/taler-mint-httpd_db.c
index f99a9859..43b226e6 100644
--- a/src/mint/taler-mint-httpd_db.c
+++ b/src/mint/taler-mint-httpd_db.c
@@ -105,7 +105,6 @@ TALER_MINT_db_execute_deposit (struct MHD_Connection *connection,
struct TALER_MINT_DB_TransactionList *tl;
struct TALER_Amount spent;
struct TALER_Amount value;
- struct TALER_Amount fee_deposit;
struct MintKeyState *mks;
struct TALER_MINT_DenomKeyIssuePriv *dki;
int ret;
@@ -134,8 +133,6 @@ TALER_MINT_db_execute_deposit (struct MHD_Connection *connection,
deposit->coin.denom_pub);
TALER_amount_ntoh (&value,
&dki->issue.value);
- TALER_amount_ntoh (&fee_deposit,
- &dki->issue.fee_deposit);
TALER_MINT_key_state_release (mks);
if (GNUNET_OK !=
@@ -147,14 +144,6 @@ TALER_MINT_db_execute_deposit (struct MHD_Connection *connection,
}
/* fee for THIS transaction */
spent = deposit->amount_with_fee;
- if (TALER_amount_cmp (&fee_deposit,
- &spent) < 0)
- {
- return (MHD_YES ==
- TALER_MINT_reply_external_error (connection,
- "deposited amount smaller than depositing fee"))
- ? GNUNET_NO : GNUNET_SYSERR;
- }
/* add cost of all previous transactions */
tl = plugin->get_coin_transactions (plugin->cls,
session,
@@ -168,6 +157,8 @@ TALER_MINT_db_execute_deposit (struct MHD_Connection *connection,
tl);
return TALER_MINT_reply_internal_db_error (connection);
}
+ /* Check that cost of all transactions is smaller than
+ the value of the coin. */
if (0 < TALER_amount_cmp (&spent,
&value))
{
diff --git a/src/mint/taler-mint-httpd_deposit.c b/src/mint/taler-mint-httpd_deposit.c
index 647cd824..810d1c32 100644
--- a/src/mint/taler-mint-httpd_deposit.c
+++ b/src/mint/taler-mint-httpd_deposit.c
@@ -59,6 +59,7 @@ verify_and_execute_deposit (struct MHD_Connection *connection,
struct MintKeyState *key_state;
struct TALER_DepositRequest dr;
struct TALER_MINT_DenomKeyIssuePriv *dki;
+ struct TALER_Amount fee_deposit;
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_DEPOSIT);
dr.purpose.size = htonl (sizeof (struct TALER_DepositRequest));
@@ -97,6 +98,17 @@ verify_and_execute_deposit (struct MHD_Connection *connection,
TALER_MINT_key_state_release (key_state);
return TALER_MINT_reply_coin_invalid (connection);
}
+ TALER_amount_ntoh (&fee_deposit,
+ &dki->issue.fee_deposit);
+ if (TALER_amount_cmp (&fee_deposit,
+ &deposit->amount_with_fee) < 0)
+ {
+ TALER_MINT_key_state_release (key_state);
+ return (MHD_YES ==
+ TALER_MINT_reply_external_error (connection,
+ "deposited amount smaller than depositing fee"))
+ ? GNUNET_NO : GNUNET_SYSERR;
+ }
TALER_MINT_key_state_release (key_state);
return TALER_MINT_db_execute_deposit (connection,