summaryrefslogtreecommitdiff
path: root/src/auditor
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-03-27 10:43:49 +0100
committerChristian Grothoff <christian@grothoff.org>2020-03-27 10:43:49 +0100
commit9c6aa53c8c076b5f93570d49683a685c0d7d6b21 (patch)
treeea7e9cf271a8b75d2409ffe6a8a5d9e9066eb5a3 /src/auditor
parent6906538c12e7f0143d474d14a11c7cc8ca44bff1 (diff)
downloadexchange-9c6aa53c8c076b5f93570d49683a685c0d7d6b21.tar.gz
exchange-9c6aa53c8c076b5f93570d49683a685c0d7d6b21.tar.bz2
exchange-9c6aa53c8c076b5f93570d49683a685c0d7d6b21.zip
improve coin audit logic
Diffstat (limited to 'src/auditor')
-rw-r--r--src/auditor/taler-helper-auditor-coins.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/src/auditor/taler-helper-auditor-coins.c b/src/auditor/taler-helper-auditor-coins.c
index 6c5134518..7c5ce4b14 100644
--- a/src/auditor/taler-helper-auditor-coins.c
+++ b/src/auditor/taler-helper-auditor-coins.c
@@ -241,9 +241,14 @@ get_cached_history (const struct TALER_CoinSpendPublicKeyP *coin_pub)
{
unsigned int i = coin_history_index (coin_pub);
- if (GNUNET_memcmp (coin_pub,
- &coin_histories[i].coin_pub))
+ if (0 == GNUNET_memcmp (coin_pub,
+ &coin_histories[i].coin_pub))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Found verification of %s in cache\n",
+ TALER_B2S (coin_pub));
return coin_histories[i].tl;
+ }
return NULL;
}
@@ -559,6 +564,15 @@ check_coin_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
&total))
{
/* spent > total: bad */
+ struct TALER_Amount loss;
+
+ TALER_amount_subtract (&loss,
+ &spent,
+ &total);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Loss detected for coin %s - %s\n",
+ TALER_B2S (coin_pub),
+ TALER_amount2s (&loss));
report_amount_arithmetic_inconsistency (operation,
rowid,
&spent,
@@ -1925,6 +1939,7 @@ refund_cb (void *cls,
* and update the denomination's losses accordingly.
*
* @param cc the context with details about the coin
+ * @param operation name of the operation matching @a rowid
* @param rowid row identifier used to uniquely identify the recoup operation
* @param amount how much should be added back to the reserve
* @param coin public information about the coin
@@ -1935,6 +1950,7 @@ refund_cb (void *cls,
*/
static int
check_recoup (struct CoinContext *cc,
+ const char *operation,
uint64_t rowid,
const struct TALER_Amount *amount,
const struct TALER_CoinPublicInfo *coin,
@@ -1952,7 +1968,7 @@ check_recoup (struct CoinContext *cc,
{
TALER_ARL_report (report_bad_sig_losses,
json_pack ("{s:s, s:I, s:o, s:o}",
- "operation", "recoup",
+ "operation", operation,
"row", (json_int_t) rowid,
"loss", TALER_JSON_from_amount (amount),
"key_pub", GNUNET_JSON_from_data_auto (
@@ -1966,7 +1982,7 @@ check_recoup (struct CoinContext *cc,
&issue);
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
- report_row_inconsistency ("recoup",
+ report_row_inconsistency (operation,
rowid,
"denomination key not found");
return GNUNET_OK;
@@ -1979,7 +1995,7 @@ check_recoup (struct CoinContext *cc,
cc->qs = qs;
return GNUNET_SYSERR;
}
- qs = check_known_coin ("recoup",
+ qs = check_known_coin (operation,
issue,
rowid,
&coin->coin_pub,
@@ -2008,7 +2024,7 @@ check_recoup (struct CoinContext *cc,
{
TALER_ARL_report (report_bad_sig_losses,
json_pack ("{s:s, s:I, s:o, s:o}",
- "operation", "recoup",
+ "operation", operation,
"row", (json_int_t) rowid,
"loss", TALER_JSON_from_amount (amount),
"coin_pub", GNUNET_JSON_from_data_auto (
@@ -2035,9 +2051,11 @@ check_recoup (struct CoinContext *cc,
{
/* Woopsie, we allowed recoup on non-revoked denomination!? */
TALER_ARL_report (report_bad_sig_losses,
- json_pack ("{s:s, s:I, s:o, s:o}",
+ json_pack ("{s:s, s:s, s:I, s:o, s:o}",
"operation",
- "recoup (denomination not revoked)",
+ operation,
+ "hint",
+ "denomination not revoked",
"row", (json_int_t) rowid,
"loss", TALER_JSON_from_amount (amount),
"coin_pub", GNUNET_JSON_from_data_auto (
@@ -2092,6 +2110,7 @@ recoup_cb (void *cls,
(void) timestamp;
(void) reserve_pub;
return check_recoup (cc,
+ "recoup",
rowid,
amount,
coin,
@@ -2183,6 +2202,7 @@ recoup_refresh_cb (void *cls,
}
return check_recoup (cc,
+ "recoup-refresh",
rowid,
amount,
coin,