more work on coin/denomination audit

This commit is contained in:
Christian Grothoff 2017-03-17 17:17:07 +01:00
parent 78bfa7d077
commit 8ea9b0dad7
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 383 additions and 146 deletions

View File

@ -41,6 +41,7 @@
#include <gnunet/gnunet_util_lib.h>
#include "taler_auditordb_plugin.h"
#include "taler_exchangedb_plugin.h"
#include "taler_json_lib.h"
#include "taler_signatures.h"
@ -526,7 +527,8 @@ handle_reserve_in (void *cls,
/**
* Function called with details about withdraw operations.
* Function called with details about withdraw operations. Verifies
* the signature and updates the reserve's balance.
*
* @param cls our `struct ReserveContext`
* @param rowid unique serial ID for the refresh session in our DB
@ -956,21 +958,6 @@ struct DenominationSummary
*/
struct TALER_Amount denom_balance;
/**
* Total amount of deposit fees made.
*/
struct TALER_Amount deposit_fee_balance;
/**
* Total amount of melt fees made.
*/
struct TALER_Amount melt_fee_balance;
/**
* Total amount of refund fees made.
*/
struct TALER_Amount refund_fee_balance;
/**
* Up to which point have we processed reserves_out?
*/
@ -1074,9 +1061,6 @@ init_denomination (const struct GNUNET_HashCode *denom_hash,
asession,
denom_hash,
&ds->denom_balance,
&ds->deposit_fee_balance,
&ds->melt_fee_balance,
&ds->refund_fee_balance,
&ds->last_reserve_out_serial_id,
&ds->last_deposit_serial_id,
&ds->last_melt_serial_id,
@ -1094,15 +1078,6 @@ init_denomination (const struct GNUNET_HashCode *denom_hash,
GNUNET_assert (GNUNET_OK ==
TALER_amount_get_zero (currency,
&ds->denom_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_get_zero (currency,
&ds->deposit_fee_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_get_zero (currency,
&ds->melt_fee_balance));
GNUNET_assert (GNUNET_OK ==
TALER_amount_get_zero (currency,
&ds->refund_fee_balance));
return GNUNET_OK;
}
@ -1171,9 +1146,6 @@ sync_denomination (void *cls,
asession,
denom_hash,
&ds->denom_balance,
&ds->deposit_fee_balance,
&ds->melt_fee_balance,
&ds->refund_fee_balance,
ds->last_reserve_out_serial_id,
ds->last_deposit_serial_id,
ds->last_melt_serial_id,
@ -1183,9 +1155,6 @@ sync_denomination (void *cls,
asession,
denom_hash,
&ds->denom_balance,
&ds->deposit_fee_balance,
&ds->melt_fee_balance,
&ds->refund_fee_balance,
ds->last_reserve_out_serial_id,
ds->last_deposit_serial_id,
ds->last_melt_serial_id,
@ -1232,13 +1201,129 @@ free_coin (void *cls,
}
/**
* Check coin's transaction history for plausibility. Does NOT check
* the signatures (those are checked independently), but does check
* that the amounts add up to a plausible overall picture.
*
* FIXME: is it wise to do this here? Maybe better to do this during
* processing of payments to the merchants...
*
* @param coin_pub public key of the coin (for reporting)
* @param dki denomination information about the coin
* @param tl_head head of transaction history to verify
*/
static void
check_transaction_history (const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki,
const struct TALER_EXCHANGEDB_TransactionList *tl_head)
{
struct TALER_Amount expenditures;
struct TALER_Amount refunds;
struct TALER_Amount fees;
struct TALER_Amount final_expenditures;
GNUNET_assert (NULL != tl_head);
TALER_amount_get_zero (currency,
&expenditures);
TALER_amount_get_zero (currency,
&refunds);
TALER_amount_get_zero (currency,
&fees);
for (const struct TALER_EXCHANGEDB_TransactionList *tl = tl_head;NULL != tl;tl = tl->next)
{
const struct TALER_Amount *amount_with_fee;
const struct TALER_Amount *fee;
const struct TALER_AmountNBO *fee_dki;
struct TALER_Amount *add_to;
struct TALER_Amount tmp;
add_to = NULL;
switch (tl->type) {
case TALER_EXCHANGEDB_TT_DEPOSIT:
amount_with_fee = &tl->details.deposit->amount_with_fee;
fee = &tl->details.deposit->deposit_fee;
fee_dki = &dki->properties.fee_deposit;
add_to = &expenditures;
break;
case TALER_EXCHANGEDB_TT_REFRESH_MELT:
amount_with_fee = &tl->details.melt->amount_with_fee;
fee = &tl->details.melt->melt_fee;
fee_dki = &dki->properties.fee_refresh;
add_to = &expenditures;
break;
case TALER_EXCHANGEDB_TT_REFUND:
amount_with_fee = &tl->details.refund->refund_amount;
fee = &tl->details.refund->refund_fee;
fee_dki = &dki->properties.fee_refund;
add_to = &refunds;
// FIXME: where do we check that the refund(s)
// of the coin match the deposit(s) of the coin (by merchant, timestamp, etc.)?
break;
}
GNUNET_assert (NULL != add_to); /* check switch was exhaustive */
if (GNUNET_OK !=
TALER_amount_add (add_to,
add_to,
amount_with_fee))
{
/* overflow in history already!? inconceivable! Bad DB! */
GNUNET_break (0);
// FIXME: report!
return;
}
TALER_amount_ntoh (&tmp,
fee_dki);
if (0 !=
TALER_amount_cmp (&tmp,
fee))
{
/* Disagreement in fee structure within DB! */
GNUNET_break (0);
// FIXME: report!
return;
}
if (GNUNET_OK !=
TALER_amount_add (&fees,
&fees,
fee))
{
/* overflow in fee total? inconceivable! Bad DB! */
GNUNET_break (0);
// FIXME: report!
return;
}
} /* for 'tl' */
/* Finally, calculate total balance change, i.e. expenditures minus refunds */
if (GNUNET_OK !=
TALER_amount_subtract (&final_expenditures,
&expenditures,
&refunds))
{
/* refunds above expenditures? inconceivable! Bad DB! */
GNUNET_break (0);
// FIXME: report!
return;
}
}
/**
* Obtain information about the coin from the cache or the database.
*
* If we obtain this information for the first time, also check that
* the coin's transaction history is internally consistent.
*
* @param cc caching information
* @param coin_pub public key of the coin to get information about
* @return NULL on error
*/
// FIXME: move this to _outgoing_ transaction checking,
// replace HERE by something that just gets the denomination hash!
// (avoids confusion on checking coin's transaction history AND
// makes this part WAY more efficient!)
static struct CoinSummary *
get_coin_summary (struct CoinContext *cc,
const struct TALER_CoinSpendPublicKeyP *coin_pub)
@ -1247,7 +1332,9 @@ get_coin_summary (struct CoinContext *cc,
struct GNUNET_HashCode chash;
struct TALER_EXCHANGEDB_TransactionList *tl;
const struct TALER_CoinPublicInfo *coin;
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki;
/* Check cache */
GNUNET_CRYPTO_hash (coin_pub,
sizeof (*coin_pub),
&chash);
@ -1255,6 +1342,8 @@ get_coin_summary (struct CoinContext *cc,
&chash);
if (NULL != cs)
return cs; /* cache hit */
/* Get transaction history of @a coin_pub from DB */
tl = edb->get_coin_transactions (edb->cls,
esession,
coin_pub);
@ -1263,6 +1352,8 @@ get_coin_summary (struct CoinContext *cc,
GNUNET_break (0);
return NULL;
}
/* Obtain general denomination information about the coin */
coin = NULL;
switch (tl->type)
{
@ -1279,7 +1370,7 @@ get_coin_summary (struct CoinContext *cc,
GNUNET_assert (NULL != coin); /* hard check that switch worked */
if (GNUNET_OK !=
get_denomination_info (&coin->denom_pub,
&cs->dki,
&dki,
NULL))
{
GNUNET_break (0);
@ -1288,6 +1379,11 @@ get_coin_summary (struct CoinContext *cc,
return NULL;
}
/* verify that the transaction history we are given is reasonable */
check_transaction_history (coin_pub,
dki,
tl);
/* allocate coin slot in ring buffer */
if (MAX_COIN_SUMMARIES >= cc->summaries_off)
cc->summaries_off = 0;
@ -1301,6 +1397,7 @@ get_coin_summary (struct CoinContext *cc,
cs->coin_pub = *coin_pub;
cs->coin_hash = chash;
cs->tl = tl;
cs->dki = dki;
GNUNET_assert (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_put (cc->coins,
&cs->coin_hash,
@ -1312,6 +1409,11 @@ get_coin_summary (struct CoinContext *cc,
/**
* Function called with details about all withdraw operations.
* Updates the denomination balance and the overall balance as
* we now have additional coins that have been issued.
*
* Note that the signature was already checked in
* #handle_reserve_out(), so we do not check it again here.
*
* @param cls our `struct CoinContext`
* @param rowid unique serial ID for the refresh session in our DB
@ -1339,6 +1441,7 @@ withdraw_cb (void *cls,
struct DenominationSummary *ds;
struct GNUNET_HashCode dh;
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki;
struct TALER_Amount value;
if (GNUNET_OK !=
get_denomination_info (denom_pub,
@ -1350,16 +1453,35 @@ withdraw_cb (void *cls,
}
ds = get_denomination_summary (cc,
&dh);
// FIXME: use ds, dki, etc.
// FIXME: update 'cc'
TALER_amount_ntoh (&value,
&dki->properties.value);
if (GNUNET_OK !=
TALER_amount_add (&ds->denom_balance,
&ds->denom_balance,
&value))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
TALER_amount_add (&cc->denom_balance,
&cc->denom_balance,
&value))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
return GNUNET_OK;
}
/**
* Function called with details about coins that were melted,
* with the goal of auditing the refresh's execution.
* Function called with details about coins that were melted, with the
* goal of auditing the refresh's execution. Verifies the signature
* and updates our information about coins outstanding (the old coin's
* denomination has less, the fresh coins increased outstanding
* balances). As a side-effect, #get_coin_summary will report
* inconsistencies in the melted coin's balance.
*
* @param cls closure
* @param rowid unique serial ID for the refresh session in our DB
@ -1385,6 +1507,8 @@ refresh_session_cb (void *cls,
struct TALER_RefreshMeltCoinAffirmationPS rmc;
struct CoinSummary *cs;
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki;
struct DenominationSummary *dso;
struct TALER_Amount amount_without_fee;
cs = get_coin_summary (cc,
coin_pub);
@ -1394,6 +1518,8 @@ refresh_session_cb (void *cls,
return GNUNET_SYSERR;
}
dki = cs->dki;
/* verify melt signature */
rmc.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_MELT);
rmc.purpose.size = htonl (sizeof (rmc));
rmc.session_hash = *session_hash;
@ -1413,8 +1539,149 @@ refresh_session_cb (void *cls,
return GNUNET_OK;
}
// TODO: update risk, denomination outstanding amounts, etc.
{
struct TALER_DenominationPublicKey new_dp[num_newcoins];
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *new_dki[num_newcoins];
struct TALER_Amount refresh_cost;
GNUNET_assert (GNUNET_OK ==
TALER_amount_get_zero (amount_with_fee->currency,
&refresh_cost));
/* Update outstanding amounts for all new coin's denominations, and check
that the resulting amounts are consistent with the value being refreshed. */
for (unsigned int i=0;i<num_newcoins;i++)
{
/* lookup new coin denomination key */
if (GNUNET_OK !=
edb->get_refresh_order (edb->cls,
esession,
session_hash,
i,
&new_dp[i]))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
get_denomination_info (&new_dp[i],
&new_dki[i],
NULL))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
/* update cost of refresh */
{
struct TALER_Amount fee;
struct TALER_Amount value;
TALER_amount_ntoh (&fee,
&new_dki[i]->properties.fee_withdraw);
TALER_amount_ntoh (&value,
&new_dki[i]->properties.value);
if ( (GNUNET_OK !=
TALER_amount_add (&refresh_cost,
&refresh_cost,
&fee)) ||
(GNUNET_OK !=
TALER_amount_add (&refresh_cost,
&refresh_cost,
&value)) )
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
}
}
/* compute contribution of old coin */
{
struct TALER_Amount melt_fee;
TALER_amount_ntoh (&melt_fee,
&dki->properties.fee_refresh);
if (GNUNET_OK !=
TALER_amount_subtract (&amount_without_fee,
amount_with_fee,
&melt_fee))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
}
/* check old coin covers complete expenses */
if (1 == TALER_amount_cmp (&refresh_cost,
&amount_without_fee))
{
/* refresh_cost > amount_without_fee */
report_row_inconsistency ("melt",
rowid,
"refresh costs exceed value of melt");
return GNUNET_OK;
}
/* update outstanding denomination amounts */
for (unsigned int i=0;i<num_newcoins;i++)
{
struct DenominationSummary *dsi;
struct TALER_Amount value;
dsi = get_denomination_summary (cc,
&new_dki[i]->properties.denom_hash);
TALER_amount_ntoh (&value,
&new_dki[i]->properties.value);
if (GNUNET_OK !=
TALER_amount_add (&dsi->denom_balance,
&dsi->denom_balance,
&value))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
TALER_amount_add (&cc->denom_balance,
&cc->denom_balance,
&value))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
}
}
/* update old coin's denomination balance */
dso = get_denomination_summary (cc,
&dki->properties.denom_hash);
if (GNUNET_OK !=
TALER_amount_subtract (&dso->denom_balance,
&dso->denom_balance,
amount_with_fee))
{
// FIXME: trigger EMERGENCY PROTOCOL HERE! Exchange has been compromised!
GNUNET_break (0);
return GNUNET_SYSERR;
}
/* update global up melt fees */
{
struct TALER_Amount rfee;
TALER_amount_ntoh (&rfee,
&dki->properties.fee_refresh);
if (GNUNET_OK !=
TALER_amount_add (&cc->melt_fee_balance,
&cc->melt_fee_balance,
&rfee))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
}
/* We're good! */
return GNUNET_OK;
}
@ -1423,6 +1690,9 @@ refresh_session_cb (void *cls,
* Function called with details about deposits that have been made,
* with the goal of auditing the deposit's execution.
*
* As a side-effect, #get_coin_summary will report
* inconsistencies in the deposited coin's balance.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @param timestamp when did the deposit happen
@ -1456,6 +1726,7 @@ deposit_cb (void *cls,
struct CoinContext *cc = cls;
struct CoinSummary *cs;
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki;
struct DenominationSummary *ds;
struct TALER_DepositRequestPS dr;
cs = get_coin_summary (cc,
@ -1467,6 +1738,7 @@ deposit_cb (void *cls,
}
dki = cs->dki;
/* Verify deposit signature */
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
dr.purpose.size = htonl (sizeof (dr));
dr.h_proposal_data = *h_proposal_data;
@ -1496,14 +1768,47 @@ deposit_cb (void *cls,
return GNUNET_OK;
}
// TODO: update expected amounts in 'cc'
/* update old coin's denomination balance */
ds = get_denomination_summary (cc,
&dki->properties.denom_hash);
if (GNUNET_OK !=
TALER_amount_subtract (&ds->denom_balance,
&ds->denom_balance,
amount_with_fee))
{
// FIXME: trigger EMERGENCY PROTOCOL HERE! Exchange has been compromised!
GNUNET_break (0);
return GNUNET_SYSERR;
}
/* update global up melt fees */
{
struct TALER_Amount dfee;
TALER_amount_ntoh (&dfee,
&dki->properties.fee_deposit);
if (GNUNET_OK !=
TALER_amount_add (&cc->deposit_fee_balance,
&cc->deposit_fee_balance,
&dfee))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
}
return GNUNET_OK;
}
/**
* Function called with details about coins that were refunding,
* with the goal of auditing the refund's execution.
* with the goal of auditing the refund's execution. Adds the
* refunded amount back to the outstanding balance of the respective
* denomination.
*
* As a side-effect, #get_coin_summary will report
* inconsistencies in the refunded coin's balance.
*
* @param cls closure
* @param rowid unique serial ID for the refund in our DB
@ -1528,6 +1833,7 @@ refund_cb (void *cls,
struct CoinContext *cc = cls;
struct CoinSummary *cs;
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki;
struct TALER_RefundRequestPS rr;
cs = get_coin_summary (cc,
coin_pub);
@ -1538,7 +1844,29 @@ refund_cb (void *cls,
}
dki = cs->dki;
// TODO: verify signature
/* verify refund signature */
rr.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_REFUND);
rr.purpose.size = htonl (sizeof (rr));
rr.h_proposal_data = *h_proposal_data;
rr.coin_pub = *coin_pub;
rr.merchant = *merchant_pub;
rr.rtransaction_id = GNUNET_htonll (rtransaction_id);
TALER_amount_hton (&rr.refund_amount,
amount_with_fee);
rr.refund_fee = dki->properties.fee_refund;
if (GNUNET_OK !=
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MERCHANT_REFUND,
&rr.purpose,
&merchant_sig->eddsa_sig,
&merchant_pub->eddsa_pub))
{
report_row_inconsistency ("deposit",
rowid,
"invalid signature for coin deposit");
return GNUNET_OK;
}
// TODO: update denomination key balance!
// TODO: update expected amounts in 'cc'
return GNUNET_OK;
@ -1559,6 +1887,7 @@ analyze_coins (void *cls)
int rret;
/* setup 'cc' */
// FIXME: FIX misnomer "denomination_summary", as this is no longer exactly about denominations!
dret = adb->get_denomination_summary (adb->cls,
asession,
&master_pub,
@ -1674,6 +2003,8 @@ analyze_coins (void *cls)
&master_pub,
&cc.risk);
// FIXME: handle error in 'rret'!
// FIXME: FIX misnomer "denomination_summary", as this is no longer about denominations!
if (GNUNET_YES == dret)
dret = adb->update_denomination_summary (adb->cls,
asession,

View File

@ -330,15 +330,6 @@ postgres_create_tables (void *cls)
",denom_balance_val INT8 NOT NULL"
",denom_balance_frac INT4 NOT NULL"
",denom_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
",deposit_fee_balance_val INT8 NOT NULL"
",deposit_fee_balance_frac INT4 NOT NULL"
",deposit_fee_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
",melt_fee_balance_val INT8 NOT NULL"
",melt_fee_balance_frac INT4 NOT NULL"
",melt_fee_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
",refund_fee_balance_val INT8 NOT NULL"
",refund_fee_balance_frac INT4 NOT NULL"
",refund_fee_balance_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
",last_reserve_out_serial_id INT8 NOT NULL"
",last_deposit_serial_id INT8 NOT NULL"
",last_melt_serial_id INT8 NOT NULL"
@ -703,21 +694,12 @@ postgres_prepare (PGconn *db_conn)
",denom_balance_val"
",denom_balance_frac"
",denom_balance_curr"
",deposit_fee_balance_val"
",deposit_fee_balance_frac"
",deposit_fee_balance_curr"
",melt_fee_balance_val"
",melt_fee_balance_frac"
",melt_fee_balance_curr"
",refund_fee_balance_val"
",refund_fee_balance_frac"
",refund_fee_balance_curr"
",last_reserve_out_serial_id"
",last_deposit_serial_id"
",last_melt_serial_id"
",last_refund_serial_id"
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17);",
17, NULL);
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8);",
11, NULL);
/* Used in #postgres_update_denomination_balance() */
PREPARE ("denomination_pending_update",
@ -725,21 +707,12 @@ postgres_prepare (PGconn *db_conn)
" denom_balance_val=$1"
",denom_balance_frac=$2"
",denom_balance_curr=$3"
",deposit_fee_balance_val=$4"
",deposit_fee_balance_frac=$5"
",deposit_fee_balance_curr=$6"
",melt_fee_balance_val=$7"
",melt_fee_balance_frac=$8"
",melt_fee_balance_curr=$9"
",refund_fee_balance_val=$10"
",refund_fee_balance_frac=$11"
",refund_fee_balance_curr=$12"
",last_reserve_out_serial_id=$13"
",last_deposit_serial_id=$14"
",last_melt_serial_id=$15"
",last_refund_serial_id=$16"
" WHERE denom_pub_hash=$17",
18, NULL);
",last_reserve_out_serial_id=$4"
",last_deposit_serial_id=$5"
",last_melt_serial_id=$6"
",last_refund_serial_id=$7"
" WHERE denom_pub_hash=$8",
8, NULL);
/* Used in #postgres_get_denomination_balance() */
PREPARE ("denomination_pending_select",
@ -747,15 +720,6 @@ postgres_prepare (PGconn *db_conn)
" denom_balance_val"
",denom_balance_frac"
",denom_balance_curr"
",deposit_fee_balance_val"
",deposit_fee_balance_frac"
",deposit_fee_balance_curr"
",melt_fee_balance_val"
",melt_fee_balance_frac"
",melt_fee_balance_curr"
",refund_fee_balance_val"
",refund_fee_balance_frac"
",refund_fee_balance_curr"
",last_reserve_out_serial_id"
",last_deposit_serial_id"
",last_melt_serial_id"
@ -1895,9 +1859,6 @@ postgres_get_reserve_summary (void *cls,
* @param session connection to use
* @param denom_pub_hash hash of the denomination public key
* @param denom_balance value of coins outstanding with this denomination key
* @param deposit_fee_balance total deposit fees collected for this DK
* @param melt_fee_balance total melt fees collected for this DK
* @param refund_fee_balance total refund fees collected for this DK
* @param last_reserve_out_serial_id up to which point did we consider
* withdrawals for the above information
* @param last_deposit_serial_id up to which point did we consider
@ -1913,9 +1874,6 @@ postgres_insert_denomination_balance (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
const struct TALER_Amount *deposit_fee_balance,
const struct TALER_Amount *melt_fee_balance,
const struct TALER_Amount *refund_fee_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
@ -1926,9 +1884,6 @@ postgres_insert_denomination_balance (void *cls,
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
TALER_PQ_query_param_amount (denom_balance),
TALER_PQ_query_param_amount (deposit_fee_balance),
TALER_PQ_query_param_amount (melt_fee_balance),
TALER_PQ_query_param_amount (refund_fee_balance),
GNUNET_PQ_query_param_uint64 (&last_reserve_out_serial_id),
GNUNET_PQ_query_param_uint64 (&last_deposit_serial_id),
GNUNET_PQ_query_param_uint64 (&last_melt_serial_id),
@ -1936,18 +1891,6 @@ postgres_insert_denomination_balance (void *cls,
GNUNET_PQ_query_param_end
};
GNUNET_assert (GNUNET_YES ==
TALER_amount_cmp_currency (denom_balance,
deposit_fee_balance));
GNUNET_assert (GNUNET_YES ==
TALER_amount_cmp_currency (denom_balance,
melt_fee_balance));
GNUNET_assert (GNUNET_YES ==
TALER_amount_cmp_currency (denom_balance,
refund_fee_balance));
result = GNUNET_PQ_exec_prepared (session->conn,
"denomination_pending_insert",
params);
@ -1973,9 +1916,6 @@ postgres_insert_denomination_balance (void *cls,
* @param session connection to use
* @param denom_pub_hash hash of the denomination public key
* @param denom_balance value of coins outstanding with this denomination key
* @param deposit_fee_balance total deposit fees collected for this DK
* @param melt_fee_balance total melt fees collected for this DK
* @param refund_fee_balance total refund fees collected for this DK
* @param last_reserve_out_serial_id up to which point did we consider
* withdrawals for the above information
* @param last_deposit_serial_id up to which point did we consider
@ -1991,9 +1931,6 @@ postgres_update_denomination_balance (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
const struct TALER_Amount *deposit_fee_balance,
const struct TALER_Amount *melt_fee_balance,
const struct TALER_Amount *refund_fee_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
@ -2003,9 +1940,6 @@ postgres_update_denomination_balance (void *cls,
int ret;
struct GNUNET_PQ_QueryParam params[] = {
TALER_PQ_query_param_amount (denom_balance),
TALER_PQ_query_param_amount (deposit_fee_balance),
TALER_PQ_query_param_amount (melt_fee_balance),
TALER_PQ_query_param_amount (refund_fee_balance),
GNUNET_PQ_query_param_uint64 (&last_reserve_out_serial_id),
GNUNET_PQ_query_param_uint64 (&last_deposit_serial_id),
GNUNET_PQ_query_param_uint64 (&last_melt_serial_id),
@ -2038,9 +1972,6 @@ postgres_update_denomination_balance (void *cls,
* @param session connection to use
* @param denom_pub_hash hash of the denomination public key
* @param[out] denom_balance value of coins outstanding with this denomination key
* @param[out] deposit_fee_balance total deposit fees collected for this DK
* @param[out] melt_fee_balance total melt fees collected for this DK
* @param[out] refund_fee_balance total refund fees collected for this DK
* @param[out] last_reserve_out_serial_id up to which point did we consider
* withdrawals for the above information
* @param[out] last_deposit_serial_id up to which point did we consider
@ -2056,9 +1987,6 @@ postgres_get_denomination_balance (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
struct TALER_Amount *denom_balance,
struct TALER_Amount *deposit_fee_balance,
struct TALER_Amount *melt_fee_balance,
struct TALER_Amount *refund_fee_balance,
uint64_t *last_reserve_out_serial_id,
uint64_t *last_deposit_serial_id,
uint64_t *last_melt_serial_id,
@ -2093,10 +2021,6 @@ postgres_get_denomination_balance (void *cls,
struct GNUNET_PQ_ResultSpec rs[] = {
TALER_PQ_result_spec_amount ("denom_balance", denom_balance),
TALER_PQ_result_spec_amount ("deposit_fee_balance", deposit_fee_balance),
TALER_PQ_result_spec_amount ("melt_fee_balance", melt_fee_balance),
TALER_PQ_result_spec_amount ("refund_fee_balance", refund_fee_balance),
GNUNET_PQ_result_spec_uint64 ("last_reserve_out_serial_id", last_reserve_out_serial_id),
GNUNET_PQ_result_spec_uint64 ("last_deposit_serial_id", last_deposit_serial_id),
GNUNET_PQ_result_spec_uint64 ("last_melt_serial_id", last_melt_serial_id),

View File

@ -523,9 +523,6 @@ struct TALER_AUDITORDB_Plugin
* @param session connection to use
* @param denom_pub_hash hash of the denomination public key
* @param denom_balance value of coins outstanding (or issued?) with this denomination key
* @param deposit_fee_balance total deposit fees collected for this DK
* @param melt_fee_balance total melt fees collected for this DK
* @param refund_fee_balance total refund fees collected for this DK
* @param last_reserve_out_serial_id up to which point did we consider
* withdrawals for the above information
* @param last_deposit_serial_id up to which point did we consider
@ -541,9 +538,6 @@ struct TALER_AUDITORDB_Plugin
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
const struct TALER_Amount *deposit_fee_balance,
const struct TALER_Amount *melt_fee_balance,
const struct TALER_Amount *refund_fee_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
@ -558,9 +552,6 @@ struct TALER_AUDITORDB_Plugin
* @param session connection to use
* @param denom_pub_hash hash of the denomination public key
* @param denom_balance value of coins outstanding (or issued?) with this denomination key
* @param deposit_fee_balance total deposit fees collected for this DK
* @param melt_fee_balance total melt fees collected for this DK
* @param refund_fee_balance total refund fees collected for this DK
* @param last_reserve_out_serial_id up to which point did we consider
* withdrawals for the above information
* @param last_deposit_serial_id up to which point did we consider
@ -576,9 +567,6 @@ struct TALER_AUDITORDB_Plugin
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
const struct TALER_Amount *deposit_fee_balance,
const struct TALER_Amount *melt_fee_balance,
const struct TALER_Amount *refund_fee_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
@ -592,9 +580,6 @@ struct TALER_AUDITORDB_Plugin
* @param session connection to use
* @param denom_pub_hash hash of the denomination public key
* @param[out] denom_balance value of coins outstanding (or issued?) with this denomination key
* @param[out] deposit_fee_balance total deposit fees collected for this DK
* @param[out] melt_fee_balance total melt fees collected for this DK
* @param[out] refund_fee_balance total refund fees collected for this DK
* @param[out] last_reserve_out_serial_id up to which point did we consider
* withdrawals for the above information
* @param[out] last_deposit_serial_id up to which point did we consider
@ -610,9 +595,6 @@ struct TALER_AUDITORDB_Plugin
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
struct TALER_Amount *denom_balance,
struct TALER_Amount *deposit_fee_balance,
struct TALER_Amount *melt_fee_balance,
struct TALER_Amount *refund_fee_balance,
uint64_t *last_reserve_out_serial_id,
uint64_t *last_deposit_serial_id,
uint64_t *last_melt_serial_id,