commit daf1c9adbf4b9785926a93ad3ee477f71792e2d9
parent ab36fb1f5795be052fd8d986a6a3075934459e93
Author: Christian Grothoff <christian@grothoff.org>
Date: Wed, 18 Mar 2026 14:17:20 +0100
process increments before decrements to avoid false-positives
Diffstat:
1 file changed, 50 insertions(+), 43 deletions(-)
diff --git a/src/auditor/taler-helper-auditor-coins.c b/src/auditor/taler-helper-auditor-coins.c
@@ -232,7 +232,7 @@ report_emergency_by_amount (
.value = *&issue->value
};
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Reporting emergency on denomination `%s' over loss of %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (loss));
@@ -289,7 +289,7 @@ report_emergency_by_count (
.value = issue->value
};
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Reporting emergency on denomination `%s' with issued %lu vs known %lu over risk of %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
num_issued,
@@ -699,7 +699,7 @@ init_denomination (const struct TALER_DenominationHashP *denom_hash,
TALER_amount_set_zero (TALER_ARL_currency,
&ds->dcd.recoup_loss));
}
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Starting balance for denomination `%s' is %s (%llu)\n",
GNUNET_h2s (&denom_hash->hash),
TALER_amount2s (&ds->dcd.denom_balance),
@@ -847,7 +847,7 @@ sync_denomination (void *cls,
(! TALER_amount_is_zero (&ds->dcd.denom_balance)) )
{
/* book denom_balance coin expiration profits! */
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Denomination `%s' expired, booking %s in expiration profits\n",
GNUNET_h2s (denom_hash),
TALER_amount2s (&ds->dcd.denom_balance));
@@ -872,7 +872,7 @@ sync_denomination (void *cls,
to auditor database for next iteration */
long long cnt;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Final balance for denomination `%s' is %s (%llu)\n",
GNUNET_h2s (denom_hash),
TALER_amount2s (&ds->dcd.denom_balance),
@@ -1054,11 +1054,11 @@ withdraw_cb (
return GNUNET_SYSERR;
}
ds->dcd.num_issued++;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Issued coin in denomination `%s' of total value %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (&issue->value));
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"New balance of denomination `%s' after withdraw is %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (&ds->dcd.denom_balance));
@@ -1185,6 +1185,10 @@ reduce_denom_balance (struct DenominationSummary *dso,
&dso->dcd.denom_balance,
amount_with_fee))
{
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Emergency: failed to reduce balance of denomination `%s' by %s\n",
+ GNUNET_h2s (&dso->issue->denom_hash.hash),
+ TALER_amount2s (amount_with_fee));
TALER_ARL_amount_add (&dso->dcd.denom_loss,
&dso->dcd.denom_loss,
amount_with_fee);
@@ -1197,6 +1201,9 @@ reduce_denom_balance (struct DenominationSummary *dso,
if (-1 == TALER_amount_cmp (&TALER_ARL_USE_AB (total_escrowed),
amount_with_fee))
{
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Failed to total escrow by %s\n",
+ TALER_amount2s (amount_with_fee));
/* This can theoretically happen if for example the exchange
never issued any coins (i.e. escrow balance is zero), but
accepted a forged coin (i.e. emergency situation after
@@ -1221,7 +1228,7 @@ reduce_denom_balance (struct DenominationSummary *dso,
&TALER_ARL_USE_AB (total_escrowed),
amount_with_fee);
}
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"New balance of denomination `%s' is %s\n",
GNUNET_h2s (&dso->issue->denom_hash.hash),
TALER_amount2s (&dso->dcd.denom_balance));
@@ -1440,7 +1447,7 @@ refresh_session_cb (void *cls,
}
else
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Created fresh coin in denomination `%s' of value %s\n",
GNUNET_h2s (&ni->denom_hash.hash),
TALER_amount2s (&ni->value));
@@ -1451,7 +1458,7 @@ refresh_session_cb (void *cls,
TALER_ARL_amount_add (&dsi->dcd.denom_risk,
&dsi->dcd.denom_risk,
&ni->value);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"New balance of denomination `%s' after refresh_reveal is %s\n",
GNUNET_h2s (&ni->denom_hash.hash),
TALER_amount2s (&dsi->dcd.denom_balance));
@@ -1637,7 +1644,7 @@ deposit_cb (void *cls,
return GNUNET_OK;
}
}
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Deposited coin %s in denomination `%s' of value %s\n",
TALER_B2S (&deposit->coin.coin_pub),
GNUNET_h2s (&issue->denom_hash.hash),
@@ -1794,7 +1801,7 @@ refund_cb (void *cls,
return GNUNET_OK;
}
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Refunding coin %s in denomination `%s' value %s\n",
TALER_B2S (coin_pub),
GNUNET_h2s (&issue->denom_hash.hash),
@@ -1829,7 +1836,7 @@ refund_cb (void *cls,
TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
&TALER_ARL_USE_AB (coin_balance_risk),
&amount_without_fee);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"New balance of denomination `%s' after refund is %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (&ds->dcd.denom_balance));
@@ -1893,7 +1900,7 @@ purse_refund_coin_cb (
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return GNUNET_SYSERR;
}
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Aborted purse-deposit of coin %s in denomination `%s' value %s\n",
TALER_B2S (coin_pub),
GNUNET_h2s (&issue->denom_hash.hash),
@@ -1928,7 +1935,7 @@ purse_refund_coin_cb (
TALER_ARL_amount_add (&TALER_ARL_USE_AB (coin_balance_risk),
&TALER_ARL_USE_AB (coin_balance_risk),
amount_with_fee);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"New balance of denomination `%s' after purse-refund is %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (&ds->dcd.denom_balance));
@@ -2300,7 +2307,7 @@ recoup_refresh_cb (void *cls,
TALER_ARL_amount_add (&dso->dcd.denom_balance,
&dso->dcd.denom_balance,
amount);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"New balance of denomination `%s' after refresh-recoup is %s\n",
GNUNET_h2s (&issue->denom_hash.hash),
TALER_amount2s (&dso->dcd.denom_balance));
@@ -2689,13 +2696,12 @@ analyze_coins (void *cls)
qs = cc.qs;
goto cleanup;
}
-#if FIXME_9828
- /* process recoups */
+ /* process refreshes */
if (0 >
- (qs = TALER_ARL_edb->select_recoup_refresh_above_serial_id (
+ (qs = TALER_ARL_edb->select_refreshes_above_serial_id (
TALER_ARL_edb->cls,
- TALER_ARL_USE_PP (coins_recoup_refresh_serial_id),
- &recoup_refresh_cb,
+ TALER_ARL_USE_PP (coins_melt_serial_id),
+ &refresh_session_cb,
&cc)))
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2706,13 +2712,12 @@ analyze_coins (void *cls)
qs = cc.qs;
goto cleanup;
}
-#endif
- /* process deposits */
+ /* process refunds */
if (0 >
- (qs = TALER_ARL_edb->select_coin_deposits_above_serial_id (
+ (qs = TALER_ARL_edb->select_refunds_above_serial_id (
TALER_ARL_edb->cls,
- TALER_ARL_USE_PP (coins_deposit_serial_id),
- &deposit_cb,
+ TALER_ARL_USE_PP (coins_refund_serial_id),
+ &refund_cb,
&cc)))
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2723,12 +2728,13 @@ analyze_coins (void *cls)
qs = cc.qs;
goto cleanup;
}
- /* process purse_deposits */
+#if FIXME_9828
+ /* process recoups */
if (0 >
- (qs = TALER_ARL_edb->select_purse_deposits_above_serial_id (
+ (qs = TALER_ARL_edb->select_recoup_refresh_above_serial_id (
TALER_ARL_edb->cls,
- TALER_ARL_USE_PP (coins_purse_deposits_serial_id),
- &purse_deposit_cb,
+ TALER_ARL_USE_PP (coins_recoup_refresh_serial_id),
+ &recoup_refresh_cb,
&cc)))
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2739,12 +2745,13 @@ analyze_coins (void *cls)
qs = cc.qs;
goto cleanup;
}
- /* process refunds */
+#endif
+ /* process deposits */
if (0 >
- (qs = TALER_ARL_edb->select_refunds_above_serial_id (
+ (qs = TALER_ARL_edb->select_coin_deposits_above_serial_id (
TALER_ARL_edb->cls,
- TALER_ARL_USE_PP (coins_refund_serial_id),
- &refund_cb,
+ TALER_ARL_USE_PP (coins_deposit_serial_id),
+ &deposit_cb,
&cc)))
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2755,13 +2762,12 @@ analyze_coins (void *cls)
qs = cc.qs;
goto cleanup;
}
- /* process purse_refunds */
+ /* process purse_deposits */
if (0 >
- (qs = TALER_ARL_edb->select_purse_decisions_above_serial_id (
+ (qs = TALER_ARL_edb->select_purse_deposits_above_serial_id (
TALER_ARL_edb->cls,
- TALER_ARL_USE_PP (coins_purse_refunds_serial_id),
- true, /* only go for refunds! */
- &purse_refund_cb,
+ TALER_ARL_USE_PP (coins_purse_deposits_serial_id),
+ &purse_deposit_cb,
&cc)))
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2772,12 +2778,13 @@ analyze_coins (void *cls)
qs = cc.qs;
goto cleanup;
}
- /* process refreshes */
+ /* process purse_refunds */
if (0 >
- (qs = TALER_ARL_edb->select_refreshes_above_serial_id (
+ (qs = TALER_ARL_edb->select_purse_decisions_above_serial_id (
TALER_ARL_edb->cls,
- TALER_ARL_USE_PP (coins_melt_serial_id),
- &refresh_session_cb,
+ TALER_ARL_USE_PP (coins_purse_refunds_serial_id),
+ true, /* only go for refunds! */
+ &purse_refund_cb,
&cc)))
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);