fix risk/fee calculations in auditor
This commit is contained in:
parent
3fde028650
commit
1ce5651373
@ -25,7 +25,6 @@
|
|||||||
* given in the 'wire_out' table. This needs to be checked separately!
|
* given in the 'wire_out' table. This needs to be checked separately!
|
||||||
*
|
*
|
||||||
* KNOWN BUGS:
|
* KNOWN BUGS:
|
||||||
* - risk is not calculated correctly
|
|
||||||
* - calculate, store and report aggregation fee balance!
|
* - calculate, store and report aggregation fee balance!
|
||||||
* - error handling if denomination keys are used that are not known to the
|
* - error handling if denomination keys are used that are not known to the
|
||||||
* auditor is, eh, awful / non-existent. We just throw the DB's constraint
|
* auditor is, eh, awful / non-existent. We just throw the DB's constraint
|
||||||
@ -260,10 +259,10 @@ report_reserve_balance (const struct TALER_Amount *total_balance,
|
|||||||
{
|
{
|
||||||
// TODO: implement proper reporting logic writing to file.
|
// TODO: implement proper reporting logic writing to file.
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
|
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
|
||||||
"Total escrow balance to be held for reserves: %s\n",
|
_("Total escrow balance to be held for reserves is %s\n"),
|
||||||
TALER_amount2s (total_balance));
|
TALER_amount2s (total_balance));
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
|
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
|
||||||
"Total profits made from reserves: %s\n",
|
_("Total withdraw fees are at %s\n"),
|
||||||
TALER_amount2s (total_fee_balance));
|
TALER_amount2s (total_fee_balance));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -864,6 +863,38 @@ verify_reserve_balance (void *cls,
|
|||||||
such transfers...) */
|
such transfers...) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Add withdraw fees we encountered to totals */
|
||||||
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
|
"Reserve reserve `%s' made %s in withdraw fees\n",
|
||||||
|
TALER_B2S (&rs->reserve_pub),
|
||||||
|
TALER_amount2s (&rs->total_fee));
|
||||||
|
if (GNUNET_YES !=
|
||||||
|
TALER_amount_add (&rs->a_withdraw_fee_balance,
|
||||||
|
&rs->a_withdraw_fee_balance,
|
||||||
|
&rs->total_fee))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
ret = GNUNET_SYSERR;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if ( (GNUNET_YES !=
|
||||||
|
TALER_amount_add (&rc->total_balance,
|
||||||
|
&rc->total_balance,
|
||||||
|
&rs->total_in)) ||
|
||||||
|
(GNUNET_SYSERR ==
|
||||||
|
TALER_amount_subtract (&rc->total_balance,
|
||||||
|
&rc->total_balance,
|
||||||
|
&rs->total_out)) ||
|
||||||
|
(GNUNET_YES !=
|
||||||
|
TALER_amount_add (&rc->total_fee_balance,
|
||||||
|
&rc->total_fee_balance,
|
||||||
|
&rs->total_fee)) )
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
ret = GNUNET_SYSERR;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
if ( (0ULL == balance.value) &&
|
if ( (0ULL == balance.value) &&
|
||||||
(0U == balance.fraction) )
|
(0U == balance.fraction) )
|
||||||
{
|
{
|
||||||
@ -906,16 +937,6 @@ verify_reserve_balance (void *cls,
|
|||||||
TALER_B2S (&rs->reserve_pub),
|
TALER_B2S (&rs->reserve_pub),
|
||||||
TALER_amount2s (&balance));
|
TALER_amount2s (&balance));
|
||||||
|
|
||||||
/* Add withdraw fees we encountered to totals */
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TALER_amount_add (&rs->a_withdraw_fee_balance,
|
|
||||||
&rs->a_withdraw_fee_balance,
|
|
||||||
&rs->total_fee))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
ret = GNUNET_SYSERR;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
if (rs->had_ri)
|
if (rs->had_ri)
|
||||||
ret = adb->update_reserve_info (adb->cls,
|
ret = adb->update_reserve_info (adb->cls,
|
||||||
asession,
|
asession,
|
||||||
@ -933,25 +954,6 @@ verify_reserve_balance (void *cls,
|
|||||||
&rs->a_withdraw_fee_balance,
|
&rs->a_withdraw_fee_balance,
|
||||||
rs->a_expiration_date);
|
rs->a_expiration_date);
|
||||||
|
|
||||||
if ( (GNUNET_YES !=
|
|
||||||
TALER_amount_add (&rc->total_balance,
|
|
||||||
&rc->total_balance,
|
|
||||||
&rs->total_in)) ||
|
|
||||||
(GNUNET_SYSERR ==
|
|
||||||
TALER_amount_subtract (&rc->total_balance,
|
|
||||||
&rc->total_balance,
|
|
||||||
&rs->total_out)) ||
|
|
||||||
(GNUNET_YES !=
|
|
||||||
TALER_amount_add (&rc->total_fee_balance,
|
|
||||||
&rc->total_fee_balance,
|
|
||||||
&rs->total_fee)) )
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
ret = GNUNET_SYSERR;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
GNUNET_assert (GNUNET_YES ==
|
GNUNET_assert (GNUNET_YES ==
|
||||||
GNUNET_CONTAINER_multihashmap_remove (rc->reserves,
|
GNUNET_CONTAINER_multihashmap_remove (rc->reserves,
|
||||||
@ -1954,7 +1956,6 @@ sync_denomination (void *cls,
|
|||||||
This is really, really bad. */
|
This is really, really bad. */
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
cc->ret = GNUNET_SYSERR;
|
cc->ret = GNUNET_SYSERR;
|
||||||
return GNUNET_OK;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( (GNUNET_OK == ret) &&
|
if ( (GNUNET_OK == ret) &&
|
||||||
@ -1977,7 +1978,6 @@ sync_denomination (void *cls,
|
|||||||
/* Failed to store profits? Bad database */
|
/* Failed to store profits? Bad database */
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
cc->ret = GNUNET_SYSERR;
|
cc->ret = GNUNET_SYSERR;
|
||||||
return GNUNET_OK;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2010,7 +2010,7 @@ sync_denomination (void *cls,
|
|||||||
denom_hash,
|
denom_hash,
|
||||||
ds));
|
ds));
|
||||||
GNUNET_free (ds);
|
GNUNET_free (ds);
|
||||||
return GNUNET_OK;
|
return cc->ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2090,6 +2090,22 @@ withdraw_cb (void *cls,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_amount_add (&cc->risk,
|
||||||
|
&cc->risk,
|
||||||
|
&value))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_amount_add (&ds->denom_risk,
|
||||||
|
&ds->denom_risk,
|
||||||
|
&value))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2282,6 +2298,14 @@ refresh_session_cb (void *cls,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_amount_add (&dsi->denom_risk,
|
||||||
|
&dsi->denom_risk,
|
||||||
|
&value))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"New balance of denomination `%s' is %s\n",
|
"New balance of denomination `%s' is %s\n",
|
||||||
GNUNET_h2s (&new_dki[i]->properties.denom_hash),
|
GNUNET_h2s (&new_dki[i]->properties.denom_hash),
|
||||||
@ -2294,6 +2318,14 @@ refresh_session_cb (void *cls,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_amount_add (&cc->risk,
|
||||||
|
&cc->risk,
|
||||||
|
&value))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2310,6 +2342,17 @@ refresh_session_cb (void *cls,
|
|||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
dso->denom_balance = tmp;
|
dso->denom_balance = tmp;
|
||||||
|
if (GNUNET_SYSERR ==
|
||||||
|
TALER_amount_subtract (&cc->total_denom_balance,
|
||||||
|
&cc->total_denom_balance,
|
||||||
|
amount_with_fee))
|
||||||
|
{
|
||||||
|
/* This should not be possible, unless the AUDITOR
|
||||||
|
has a bug in tracking total balance. */
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"New balance of denomination `%s' after melt is %s\n",
|
"New balance of denomination `%s' after melt is %s\n",
|
||||||
GNUNET_h2s (&dki->properties.denom_hash),
|
GNUNET_h2s (&dki->properties.denom_hash),
|
||||||
@ -2441,6 +2484,17 @@ deposit_cb (void *cls,
|
|||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
ds->denom_balance = tmp;
|
ds->denom_balance = tmp;
|
||||||
|
if (GNUNET_SYSERR ==
|
||||||
|
TALER_amount_subtract (&cc->total_denom_balance,
|
||||||
|
&cc->total_denom_balance,
|
||||||
|
amount_with_fee))
|
||||||
|
{
|
||||||
|
/* This should not be possible, unless the AUDITOR
|
||||||
|
has a bug in tracking total balance. */
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"New balance of denomination `%s' after deposit is %s\n",
|
"New balance of denomination `%s' after deposit is %s\n",
|
||||||
GNUNET_h2s (&dki->properties.denom_hash),
|
GNUNET_h2s (&dki->properties.denom_hash),
|
||||||
@ -2569,6 +2623,31 @@ refund_cb (void *cls,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_amount_add (&ds->denom_risk,
|
||||||
|
&ds->denom_risk,
|
||||||
|
&amount_without_fee))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_amount_add (&cc->total_denom_balance,
|
||||||
|
&cc->total_denom_balance,
|
||||||
|
&amount_without_fee))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_amount_add (&cc->risk,
|
||||||
|
&cc->risk,
|
||||||
|
&amount_without_fee))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"New balance of denomination `%s' after refund is %s\n",
|
"New balance of denomination `%s' after refund is %s\n",
|
||||||
GNUNET_h2s (&dki->properties.denom_hash),
|
GNUNET_h2s (&dki->properties.denom_hash),
|
||||||
@ -2691,7 +2770,11 @@ analyze_coins (void *cls)
|
|||||||
&sync_denomination,
|
&sync_denomination,
|
||||||
&cc);
|
&cc);
|
||||||
GNUNET_CONTAINER_multihashmap_destroy (cc.denom_summaries);
|
GNUNET_CONTAINER_multihashmap_destroy (cc.denom_summaries);
|
||||||
|
if (GNUNET_OK != cc.ret)
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
if (GNUNET_YES == dret)
|
if (GNUNET_YES == dret)
|
||||||
dret = adb->update_balance_summary (adb->cls,
|
dret = adb->update_balance_summary (adb->cls,
|
||||||
asession,
|
asession,
|
||||||
@ -2710,18 +2793,17 @@ analyze_coins (void *cls)
|
|||||||
&cc.melt_fee_balance,
|
&cc.melt_fee_balance,
|
||||||
&cc.refund_fee_balance,
|
&cc.refund_fee_balance,
|
||||||
&cc.risk);
|
&cc.risk);
|
||||||
report_denomination_balance (&cc.total_denom_balance,
|
|
||||||
&cc.risk,
|
|
||||||
&cc.deposit_fee_balance,
|
|
||||||
&cc.melt_fee_balance,
|
|
||||||
&cc.refund_fee_balance);
|
|
||||||
if (GNUNET_OK != dret)
|
if (GNUNET_OK != dret)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
report_denomination_balance (&cc.total_denom_balance,
|
||||||
return cc.ret;
|
&cc.risk,
|
||||||
|
&cc.deposit_fee_balance,
|
||||||
|
&cc.melt_fee_balance,
|
||||||
|
&cc.refund_fee_balance);
|
||||||
|
return GNUNET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2770,7 +2852,7 @@ incremental_processing (Analysis analysis,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
_("Resuming audit at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n"),
|
_("Resuming audit at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n"),
|
||||||
(unsigned long long) pp.last_reserve_in_serial_id,
|
(unsigned long long) pp.last_reserve_in_serial_id,
|
||||||
(unsigned long long) pp.last_reserve_out_serial_id,
|
(unsigned long long) pp.last_reserve_out_serial_id,
|
||||||
@ -2783,7 +2865,7 @@ incremental_processing (Analysis analysis,
|
|||||||
ret = analysis (analysis_cls);
|
ret = analysis (analysis_cls);
|
||||||
if (GNUNET_OK != ret)
|
if (GNUNET_OK != ret)
|
||||||
{
|
{
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||||
"Analysis phase failed, not recording progress\n");
|
"Analysis phase failed, not recording progress\n");
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
@ -2802,7 +2884,7 @@ incremental_processing (Analysis analysis,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
_("Concluded audit step at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n\n"),
|
_("Concluded audit step at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n\n"),
|
||||||
(unsigned long long) pp.last_reserve_in_serial_id,
|
(unsigned long long) pp.last_reserve_in_serial_id,
|
||||||
(unsigned long long) pp.last_reserve_out_serial_id,
|
(unsigned long long) pp.last_reserve_out_serial_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user