simplify auditordb API to match actual requirements better

This commit is contained in:
Christian Grothoff 2017-03-18 22:06:27 +01:00
parent 9cfe47493c
commit a9f9161c3a
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 128 additions and 517 deletions

View File

@ -27,8 +27,6 @@
* TODO:
* - COMPLETE: implement misc. FIXMEs
* - COMPLETE: deal with risk / expired denomination keys in #sync_denomination
* - SANITY: modify auditordb to track risk with balances and fees (and rename callback
* to clarify what it is)
* - SANITY: rename operations to better describe what they do!
* - OPTIMIZE/SIMPLIFY: modify auditordb to return DK when we inquire about deposit/refresh/refund,
* so we can avoid the costly #get_coin_summary with the transaction history building
@ -939,20 +937,20 @@ analyze_reserves (void *cls)
pp.last_reserve_in_serial_id,
&handle_reserve_in,
&rc))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
edb->select_reserves_out_above_serial_id (edb->cls,
esession,
pp.last_reserve_out_serial_id,
&handle_reserve_out,
&rc))
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
/* TODO: iterate over table for reserve expiration refunds! (#4956) */
GNUNET_CONTAINER_multihashmap_iterate (rc.reserves,
@ -979,7 +977,11 @@ analyze_reserves (void *cls)
&rc.total_balance,
&rc.total_fee_balance);
}
// FIXME: handle error in 'ret'!
if (GNUNET_OK != ret)
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
report_reserve_balance (&rc.total_balance,
&rc.total_fee_balance);
return GNUNET_OK;
@ -1029,26 +1031,6 @@ struct DenominationSummary
*/
struct TALER_Amount denom_balance;
/**
* Up to which point have we processed reserves_out?
*/
uint64_t last_reserve_out_serial_id;
/**
* Up to which point have we processed deposits?
*/
uint64_t last_deposit_serial_id;
/**
* Up to which point have we processed melts?
*/
uint64_t last_melt_serial_id;
/**
* Up to which point have we processed refunds?
*/
uint64_t last_refund_serial_id;
/**
* #GNUNET_YES if this record already existed in the DB.
* Used to decide between insert/update in
@ -1138,11 +1120,7 @@ init_denomination (const struct GNUNET_HashCode *denom_hash,
ret = adb->get_denomination_balance (adb->cls,
asession,
denom_hash,
&ds->denom_balance,
&ds->last_reserve_out_serial_id,
&ds->last_deposit_serial_id,
&ds->last_melt_serial_id,
&ds->last_refund_serial_id);
&ds->denom_balance);
if (GNUNET_OK == ret)
{
ds->in_db = GNUNET_YES;
@ -1214,27 +1192,33 @@ sync_denomination (void *cls,
struct DenominationSummary *ds = value;
int ret;
// FIXME: if expired, insert remaining balance historic denomination revenue,
// DELETE denomination balance, and REDUCE cc->risk exposure!
if (ds->in_db)
ret = adb->update_denomination_balance (adb->cls,
asession,
denom_hash,
&ds->denom_balance,
ds->last_reserve_out_serial_id,
ds->last_deposit_serial_id,
ds->last_melt_serial_id,
ds->last_refund_serial_id);
if (0)
{
ret = adb->del_denomination_balance (adb->cls,
asession,
denom_hash);
if (GNUNET_OK == ret)
{
// FIXME: reduce RISK
// FIXME: book denomination expiration profits!
}
}
else
ret = adb->insert_denomination_balance (adb->cls,
asession,
denom_hash,
&ds->denom_balance,
ds->last_reserve_out_serial_id,
ds->last_deposit_serial_id,
ds->last_melt_serial_id,
ds->last_refund_serial_id);
{
if (ds->in_db)
ret = adb->update_denomination_balance (adb->cls,
asession,
denom_hash,
&ds->denom_balance);
else
ret = adb->insert_denomination_balance (adb->cls,
asession,
denom_hash,
&ds->denom_balance);
}
if (GNUNET_OK != ret)
{
GNUNET_break (0);
@ -1883,7 +1867,6 @@ analyze_coins (void *cls)
{
struct CoinContext cc;
int dret;
int rret;
/* setup 'cc' */
cc.ret = GNUNET_OK;
@ -1895,7 +1878,8 @@ analyze_coins (void *cls)
&cc.denom_balance,
&cc.deposit_fee_balance,
&cc.melt_fee_balance,
&cc.refund_fee_balance);
&cc.refund_fee_balance,
&cc.risk);
if (GNUNET_SYSERR == dret)
{
GNUNET_break (0);
@ -1915,18 +1899,6 @@ analyze_coins (void *cls)
GNUNET_assert (GNUNET_OK ==
TALER_amount_get_zero (currency,
&cc.refund_fee_balance));
}
rret = adb->get_risk_summary (adb->cls,
asession,
&master_pub,
&cc.risk);
if (GNUNET_SYSERR == dret)
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
if (GNUNET_NO == dret)
{
GNUNET_assert (GNUNET_OK ==
TALER_amount_get_zero (currency,
&cc.risk));
@ -1995,24 +1967,7 @@ analyze_coins (void *cls)
&cc);
GNUNET_CONTAINER_multihashmap_destroy (cc.coins);
if (GNUNET_YES == rret)
rret = adb->update_risk_summary (adb->cls,
asession,
&master_pub,
&cc.risk);
else
rret = adb->insert_risk_summary (adb->cls,
asession,
&master_pub,
&cc.risk);
if (GNUNET_OK != rret)
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
// FIXME: FIX misnomer "denomination_summary", as this is no longer about denominations!
// FIXME: maybe combine with 'risk' above...
if (GNUNET_YES == dret)
dret = adb->update_denomination_summary (adb->cls,
asession,
@ -2020,7 +1975,8 @@ analyze_coins (void *cls)
&cc.denom_balance,
&cc.deposit_fee_balance,
&cc.melt_fee_balance,
&cc.refund_fee_balance);
&cc.refund_fee_balance,
&cc.risk);
else
dret = adb->insert_denomination_summary (adb->cls,
asession,
@ -2028,7 +1984,8 @@ analyze_coins (void *cls)
&cc.denom_balance,
&cc.deposit_fee_balance,
&cc.melt_fee_balance,
&cc.refund_fee_balance);
&cc.refund_fee_balance,
&cc.risk);
if (GNUNET_OK != dret)
{
GNUNET_break (0);

View File

@ -330,10 +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"
",last_reserve_out_serial_id INT8 NOT NULL"
",last_deposit_serial_id INT8 NOT NULL"
",last_melt_serial_id INT8 NOT NULL"
",last_refund_serial_id INT8 NOT NULL"
")");
/* Table with the sum of the outstanding coins from
@ -356,17 +352,6 @@ postgres_create_tables (void *cls)
",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"
")");
/* Table with the sum of the generated coins all denomination keys.
This represents the maximum additional total financial risk of
the exchange in case that all denomination keys are compromised
(and all of the deposits so far were done by the successful
attacker). So this is strictly an upper bound on the risk
exposure of the exchange. (Note that this risk is in addition to
the known total_liabilities.) */
SQLEXEC ("CREATE TABLE IF NOT EXISTS total_risk"
"(master_pub BYTEA PRIMARY KEY CHECK (LENGTH(master_pub)=32)"
",risk_val INT8 NOT NULL"
",risk_frac INT4 NOT NULL"
",risk_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
@ -694,12 +679,8 @@ postgres_prepare (PGconn *db_conn)
",denom_balance_val"
",denom_balance_frac"
",denom_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);",
11, NULL);
") VALUES ($1,$2,$3,$4);",
4, NULL);
/* Used in #postgres_update_denomination_balance() */
PREPARE ("denomination_pending_update",
@ -707,12 +688,8 @@ postgres_prepare (PGconn *db_conn)
" denom_balance_val=$1"
",denom_balance_frac=$2"
",denom_balance_curr=$3"
",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);
" WHERE denom_pub_hash=$4",
4, NULL);
/* Used in #postgres_get_denomination_balance() */
PREPARE ("denomination_pending_select",
@ -720,10 +697,6 @@ postgres_prepare (PGconn *db_conn)
" denom_balance_val"
",denom_balance_frac"
",denom_balance_curr"
",last_reserve_out_serial_id"
",last_deposit_serial_id"
",last_melt_serial_id"
",last_refund_serial_id"
" FROM denomination_pending"
" WHERE denom_pub_hash=$1",
1, NULL);
@ -744,8 +717,11 @@ postgres_prepare (PGconn *db_conn)
",refund_fee_balance_val"
",refund_fee_balance_frac"
",refund_fee_balance_curr"
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13);",
13, NULL);
",risk_val"
",risk_frac"
",risk_curr"
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16);",
16, NULL);
/* Used in #postgres_update_denomination_summary() */
PREPARE ("total_liabilities_update",
@ -762,8 +738,11 @@ postgres_prepare (PGconn *db_conn)
",refund_fee_balance_val=$10"
",refund_fee_balance_frac=$11"
",refund_fee_balance_curr=$12"
" WHERE master_pub=$13;",
13, NULL);
",risk_val=$13"
",risk_frac=$14"
",risk_curr=$15"
" WHERE master_pub=$16;",
16, NULL);
/* Used in #postgres_get_denomination_summary() */
PREPARE ("total_liabilities_select",
@ -780,40 +759,13 @@ postgres_prepare (PGconn *db_conn)
",refund_fee_balance_val"
",refund_fee_balance_frac"
",refund_fee_balance_curr"
" FROM total_liabilities"
" WHERE master_pub=$1;",
1, NULL);
/* Used in #postgres_insert_risk_summary() */
PREPARE ("total_risk_insert",
"INSERT INTO total_risk"
"(master_pub"
",risk_val"
",risk_frac"
",risk_curr"
") VALUES ($1,$2,$3,$4);",
4, NULL);
/* Used in #postgres_update_risk_summary() */
PREPARE ("total_risk_update",
"UPDATE total_risk SET "
" risk_val=$1"
",risk_frac=$2"
",risk_curr=$3"
" WHERE master_pub=$4;",
4, NULL);
/* Used in #postgres_get_risk_summary() */
PREPARE ("total_risk_select",
"SELECT"
" risk_val"
",risk_frac"
",risk_curr"
" FROM total_risk"
" FROM total_liabilities"
" WHERE master_pub=$1;",
1, NULL);
/* Used in #postgres_insert_historic_denom_revenue() */
PREPARE ("historic_denomination_revenue_insert",
"INSERT INTO historic_denomination_revenue"
@ -1859,35 +1811,19 @@ 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 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
* deposits for the above information
* @param last_melt_serial_id up to which point did we consider
* melts for the above information
* @param last_refund_serial_id up to which point did we consider
* refunds for the above information
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
static int
postgres_insert_denomination_balance (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
uint64_t last_refund_serial_id)
const struct TALER_Amount *denom_balance)
{
PGresult *result;
int ret;
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
TALER_PQ_query_param_amount (denom_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),
GNUNET_PQ_query_param_uint64 (&last_refund_serial_id),
GNUNET_PQ_query_param_end
};
@ -1916,34 +1852,18 @@ 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 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
* deposits for the above information
* @param last_melt_serial_id up to which point did we consider
* melts for the above information
* @param last_refund_serial_id up to which point did we consider
* refunds for the above information
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
static int
postgres_update_denomination_balance (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
uint64_t last_refund_serial_id)
const struct TALER_Amount *denom_balance)
{
PGresult *result;
int ret;
struct GNUNET_PQ_QueryParam params[] = {
TALER_PQ_query_param_amount (denom_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),
GNUNET_PQ_query_param_uint64 (&last_refund_serial_id),
GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
GNUNET_PQ_query_param_end
};
@ -1972,25 +1892,13 @@ 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] 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
* deposits for the above information
* @param[out] last_melt_serial_id up to which point did we consider
* melts for the above information
* @param[out] last_refund_serial_id up to which point did we consider
* refunds for the above information
* @return #GNUNET_OK on success; #GNUNET_NO if no record found, #GNUNET_SYSERR on failure
*/
static int
postgres_get_denomination_balance (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
struct TALER_Amount *denom_balance,
uint64_t *last_reserve_out_serial_id,
uint64_t *last_deposit_serial_id,
uint64_t *last_melt_serial_id,
uint64_t *last_refund_serial_id)
struct TALER_Amount *denom_balance)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),
@ -2021,11 +1929,6 @@ postgres_get_denomination_balance (void *cls,
struct GNUNET_PQ_ResultSpec rs[] = {
TALER_PQ_result_spec_amount ("denom_balance", denom_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),
GNUNET_PQ_result_spec_uint64 ("last_refund_serial_id", last_refund_serial_id),
GNUNET_PQ_result_spec_end
};
if (GNUNET_OK !=
@ -2051,6 +1954,7 @@ postgres_get_denomination_balance (void *cls,
* @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 risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
static int
@ -2060,7 +1964,8 @@ postgres_insert_denomination_summary (void *cls,
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)
const struct TALER_Amount *refund_fee_balance,
const struct TALER_Amount *risk)
{
PGresult *result;
int ret;
@ -2070,6 +1975,7 @@ postgres_insert_denomination_summary (void *cls,
TALER_PQ_query_param_amount (deposit_fee_balance),
TALER_PQ_query_param_amount (melt_fee_balance),
TALER_PQ_query_param_amount (refund_fee_balance),
TALER_PQ_query_param_amount (risk),
GNUNET_PQ_query_param_end
};
@ -2113,6 +2019,7 @@ postgres_insert_denomination_summary (void *cls,
* @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 risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
static int
@ -2122,7 +2029,8 @@ postgres_update_denomination_summary (void *cls,
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)
const struct TALER_Amount *refund_fee_balance,
const struct TALER_Amount *risk)
{
PGresult *result;
int ret;
@ -2131,6 +2039,7 @@ postgres_update_denomination_summary (void *cls,
TALER_PQ_query_param_amount (deposit_fee_balance),
TALER_PQ_query_param_amount (melt_fee_balance),
TALER_PQ_query_param_amount (refund_fee_balance),
TALER_PQ_query_param_amount (risk),
GNUNET_PQ_query_param_auto_from_type (master_pub),
GNUNET_PQ_query_param_end
};
@ -2162,6 +2071,7 @@ postgres_update_denomination_summary (void *cls,
* @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] risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_NO if there is no entry
* for this @a master_pub; #GNUNET_SYSERR on failure
*/
@ -2172,7 +2082,8 @@ postgres_get_denomination_summary (void *cls,
struct TALER_Amount *denom_balance,
struct TALER_Amount *deposit_fee_balance,
struct TALER_Amount *melt_fee_balance,
struct TALER_Amount *refund_fee_balance)
struct TALER_Amount *refund_fee_balance,
struct TALER_Amount *risk)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (master_pub),
@ -2206,149 +2117,7 @@ postgres_get_denomination_summary (void *cls,
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_end
};
if (GNUNET_OK !=
GNUNET_PQ_extract_result (result, rs, 0))
{
GNUNET_break (0);
PQclear (result);
return GNUNET_SYSERR;
}
PQclear (result);
return GNUNET_OK;
}
/**
* Insert information about an exchange's risk exposure. There
* must not be an existing record for the exchange.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to use
* @param master_pub master key of the exchange
* @param risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
static int
postgres_insert_risk_summary (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_Amount *risk)
{
PGresult *result;
int ret;
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (master_pub),
TALER_PQ_query_param_amount (risk),
GNUNET_PQ_query_param_end
};
result = GNUNET_PQ_exec_prepared (session->conn,
"total_risk_insert",
params);
if (PGRES_COMMAND_OK != PQresultStatus (result))
{
ret = GNUNET_SYSERR;
BREAK_DB_ERR (result);
}
else
{
ret = GNUNET_OK;
}
PQclear (result);
return ret;
}
/**
* Update information about an exchange's risk exposure. There
* must be an existing record for the exchange.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to use
* @param master_pub master key of the exchange
* @param risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
static int
postgres_update_risk_summary (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_Amount *risk)
{
PGresult *result;
int ret;
struct GNUNET_PQ_QueryParam params[] = {
TALER_PQ_query_param_amount (risk),
GNUNET_PQ_query_param_auto_from_type (master_pub),
GNUNET_PQ_query_param_end
};
result = GNUNET_PQ_exec_prepared (session->conn,
"total_risk_update",
params);
if (PGRES_COMMAND_OK != PQresultStatus (result))
{
ret = GNUNET_SYSERR;
BREAK_DB_ERR (result);
}
else
{
ret = GNUNET_OK;
}
PQclear (result);
return ret;
}
/**
* Get information about an exchange's risk exposure.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to use
* @param master_pub master key of the exchange
* @param[out] risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure;
* #GNUNET_NO if we have no records for the @a master_pub
*/
static int
postgres_get_risk_summary (void *cls,
struct TALER_AUDITORDB_Session *session,
const struct TALER_MasterPublicKeyP *master_pub,
struct TALER_Amount *risk)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (master_pub),
GNUNET_PQ_query_param_end
};
PGresult *result;
result = GNUNET_PQ_exec_prepared (session->conn,
"total_risk_select",
params);
if (PGRES_TUPLES_OK !=
PQresultStatus (result))
{
BREAK_DB_ERR (result);
PQclear (result);
return GNUNET_SYSERR;
}
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_risk_summary() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
GNUNET_assert (1 == nrows);
struct GNUNET_PQ_ResultSpec rs[] = {
TALER_PQ_result_spec_amount ("risk", risk),
GNUNET_PQ_result_spec_end
};
if (GNUNET_OK !=
@ -3003,10 +2772,6 @@ libtaler_plugin_auditordb_postgres_init (void *cls)
plugin->update_denomination_summary = &postgres_update_denomination_summary;
plugin->insert_denomination_summary = &postgres_insert_denomination_summary;
plugin->get_risk_summary = &postgres_get_risk_summary;
plugin->update_risk_summary = &postgres_update_risk_summary;
plugin->insert_risk_summary = &postgres_insert_risk_summary;
plugin->select_historic_denom_revenue = &postgres_select_historic_denom_revenue;
plugin->insert_historic_denom_revenue = &postgres_insert_historic_denom_revenue;

View File

@ -358,6 +358,7 @@ run (void *cls)
struct TALER_Amount denom_balance, deposit_fee_balance, melt_fee_balance, refund_fee_balance;
struct TALER_Amount denom_balance2, deposit_fee_balance2, melt_fee_balance2, refund_fee_balance2;
struct TALER_Amount rbalance, rbalance2;
GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (CURRENCY ":12.345678",
@ -371,16 +372,15 @@ run (void *cls)
GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (CURRENCY ":45.678901",
&refund_fee_balance));
GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (CURRENCY ":13.57986",
&rbalance));
FAILIF (GNUNET_OK !=
plugin->insert_denomination_balance (plugin->cls,
session,
&denom_pub_hash,
&denom_balance,
pp.last_reserve_out_serial_id,
pp.last_deposit_serial_id,
pp.last_melt_serial_id,
pp.last_refund_serial_id));
&denom_balance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: update_denomination_balance\n");
@ -394,12 +394,7 @@ run (void *cls)
plugin->update_denomination_balance (plugin->cls,
session,
&denom_pub_hash,
&denom_balance,
pp.last_reserve_out_serial_id,
pp.last_deposit_serial_id,
pp.last_melt_serial_id,
pp.last_refund_serial_id));
&denom_balance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: get_denomination_balance\n");
@ -407,17 +402,10 @@ run (void *cls)
plugin->get_denomination_balance (plugin->cls,
session,
&denom_pub_hash,
&denom_balance2,
&pp2.last_reserve_out_serial_id,
&pp2.last_deposit_serial_id,
&pp2.last_melt_serial_id,
&pp2.last_refund_serial_id));
&denom_balance2));
FAILIF (0 != memcmp (&denom_balance2, &denom_balance, sizeof (denom_balance)));
FAILIF (0 != memcmp (&denom_balance2, &denom_balance, sizeof (denom_balance))
|| pp2.last_reserve_out_serial_id != pp.last_reserve_out_serial_id
|| pp2.last_deposit_serial_id != pp.last_deposit_serial_id
|| pp2.last_melt_serial_id != pp.last_melt_serial_id
|| pp2.last_refund_serial_id != pp.last_refund_serial_id);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: insert_denomination_summary\n");
@ -429,7 +417,8 @@ run (void *cls)
&refund_fee_balance,
&melt_fee_balance,
&deposit_fee_balance,
&denom_balance));
&denom_balance,
&rbalance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: update_denomination_summary\n");
@ -441,7 +430,8 @@ run (void *cls)
&denom_balance,
&deposit_fee_balance,
&melt_fee_balance,
&refund_fee_balance));
&refund_fee_balance,
&rbalance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: get_denomination_summary\n");
@ -450,6 +440,7 @@ run (void *cls)
ZR_BLK (&deposit_fee_balance2);
ZR_BLK (&melt_fee_balance2);
ZR_BLK (&refund_fee_balance2);
ZR_BLK (&rbalance2);
FAILIF (GNUNET_OK !=
plugin->get_denomination_summary (plugin->cls,
@ -458,51 +449,15 @@ run (void *cls)
&denom_balance2,
&deposit_fee_balance2,
&melt_fee_balance2,
&refund_fee_balance2));
&refund_fee_balance2,
&rbalance2));
FAILIF (0 != memcmp (&denom_balance2, &denom_balance, sizeof (denom_balance))
|| 0 != memcmp (&deposit_fee_balance2, &deposit_fee_balance, sizeof (deposit_fee_balance))
|| 0 != memcmp (&melt_fee_balance2, &melt_fee_balance, sizeof (melt_fee_balance))
|| 0 != memcmp (&refund_fee_balance2, &refund_fee_balance, sizeof (refund_fee_balance)));
FAILIF (0 != memcmp (&rbalance2, &rbalance, sizeof (rbalance)));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: insert_risk_summary\n");
struct TALER_Amount balance, balance2;
GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (CURRENCY ":13.57986",
&balance));
FAILIF (GNUNET_OK !=
plugin->insert_risk_summary (plugin->cls,
session,
&master_pub,
&balance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: update_risk_summary\n");
GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (CURRENCY ":57.310986",
&balance));
FAILIF (GNUNET_OK !=
plugin->update_risk_summary (plugin->cls,
session,
&master_pub,
&balance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: get_risk_summary\n");
FAILIF (GNUNET_OK !=
plugin->get_risk_summary (plugin->cls,
session,
&master_pub,
&balance2));
FAILIF (0 != memcmp (&balance2, &balance, sizeof (balance)));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: insert_historic_denom_revenue\n");
@ -513,7 +468,7 @@ run (void *cls)
&master_pub,
&denom_pub_hash,
past,
&balance,
&rbalance,
&deposit_fee_balance,
&melt_fee_balance,
&refund_fee_balance));
@ -524,7 +479,7 @@ run (void *cls)
&master_pub,
&rnd_hash,
now,
&balance,
&rbalance,
&deposit_fee_balance,
&melt_fee_balance,
&refund_fee_balance));
@ -552,7 +507,7 @@ run (void *cls)
&& 0 != memcmp (&revenue_timestamp2, &now, sizeof (now)))
|| (0 != memcmp (denom_pub_hash2, &denom_pub_hash, sizeof (denom_pub_hash))
&& 0 != memcmp (denom_pub_hash2, &rnd_hash, sizeof (rnd_hash)))
|| 0 != memcmp (revenue_balance2, &balance, sizeof (balance))
|| 0 != memcmp (revenue_balance2, &rbalance, sizeof (rbalance))
|| 0 != memcmp (deposit_fee_balance2, &deposit_fee_balance, sizeof (deposit_fee_balance))
|| 0 != memcmp (melt_fee_balance2, &melt_fee_balance, sizeof (melt_fee_balance))
|| 0 != memcmp (refund_fee_balance2, &refund_fee_balance, sizeof (refund_fee_balance)))
@ -581,7 +536,7 @@ run (void *cls)
&master_pub,
&denom_pub_hash,
past,
&balance));
&rbalance));
FAILIF (GNUNET_OK !=
plugin->insert_historic_losses (plugin->cls,
@ -589,7 +544,7 @@ run (void *cls)
&master_pub,
&rnd_hash,
past,
&balance));
&rbalance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: select_historic_losses\n");
@ -611,7 +566,7 @@ run (void *cls)
&& 0 != memcmp (&loss_timestamp2, &now, sizeof (now)))
|| (0 != memcmp (denom_pub_hash2, &denom_pub_hash, sizeof (denom_pub_hash))
&& 0 != memcmp (denom_pub_hash2, &rnd_hash, sizeof (rnd_hash)))
|| 0 != memcmp (loss_balance2, &balance, sizeof (balance)))
|| 0 != memcmp (loss_balance2, &rbalance, sizeof (rbalance)))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"select_historic_denom_revenue_result: result does not match\n");
@ -695,20 +650,20 @@ run (void *cls)
plugin->insert_predicted_result (plugin->cls,
session,
&master_pub,
&balance));
&rbalance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: update_predicted_result\n");
GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (CURRENCY ":78.901234",
&balance));
&rbalance));
FAILIF (GNUNET_OK !=
plugin->update_predicted_result (plugin->cls,
session,
&master_pub,
&balance));
&rbalance));
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Test: get_predicted_balance\n");
@ -717,9 +672,9 @@ run (void *cls)
plugin->get_predicted_balance (plugin->cls,
session,
&master_pub,
&balance2));
&rbalance2));
FAILIF (0 != memcmp (&balance2, &balance, sizeof (balance)));
FAILIF (0 != memcmp (&rbalance2, &rbalance, sizeof (rbalance)));
result = 0;

View File

@ -523,25 +523,14 @@ 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 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
* deposits for the above information
* @param last_melt_serial_id up to which point did we consider
* melts for the above information
* @param last_refund_serial_id up to which point did we consider
* refunds for the above information
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
int
(*insert_denomination_balance)(void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
uint64_t last_refund_serial_id);
const struct TALER_Amount *denom_balance);
/**
@ -552,25 +541,13 @@ 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 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
* deposits for the above information
* @param last_melt_serial_id up to which point did we consider
* melts for the above information
* @param last_refund_serial_id up to which point did we consider
* refunds for the above information
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
int
(*update_denomination_balance)(void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
const struct TALER_Amount *denom_balance,
uint64_t last_reserve_out_serial_id,
uint64_t last_deposit_serial_id,
uint64_t last_melt_serial_id,
uint64_t last_refund_serial_id);
const struct TALER_Amount *denom_balance);
/**
@ -580,25 +557,27 @@ 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] 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
* deposits for the above information
* @param[out] last_melt_serial_id up to which point did we consider
* melts for the above information
* @param[out] last_refund_serial_id up to which point did we consider
* refunds for the above information
* @return #GNUNET_OK on success; #GNUNET_NO if no record found, #GNUNET_SYSERR on failure
*/
int
(*get_denomination_balance)(void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash,
struct TALER_Amount *denom_balance,
uint64_t *last_reserve_out_serial_id,
uint64_t *last_deposit_serial_id,
uint64_t *last_melt_serial_id,
uint64_t *last_refund_serial_id);
struct TALER_Amount *denom_balance);
/**
* Delete information about a denomination key's balances.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to use
* @param denom_pub_hash hash of the denomination public key
* @return #GNUNET_OK on success; #GNUNET_NO if no record found, #GNUNET_SYSERR on failure
*/
int
(*del_denomination_balance)(void *cls,
struct TALER_AUDITORDB_Session *session,
const struct GNUNET_HashCode *denom_pub_hash);
/**
@ -612,6 +591,7 @@ struct TALER_AUDITORDB_Plugin
* @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 risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
int
@ -621,7 +601,8 @@ struct TALER_AUDITORDB_Plugin
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);
const struct TALER_Amount *refund_fee_balance,
const struct TALER_Amount *risk);
/**
@ -635,6 +616,7 @@ struct TALER_AUDITORDB_Plugin
* @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 risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
int
@ -644,7 +626,8 @@ struct TALER_AUDITORDB_Plugin
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);
const struct TALER_Amount *refund_fee_balance,
const struct TALER_Amount *risk);
/**
@ -657,6 +640,7 @@ struct TALER_AUDITORDB_Plugin
* @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] risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_NO if there is no entry
* for this @a master_pub; #GNUNET_SYSERR on failure
*/
@ -667,58 +651,8 @@ struct TALER_AUDITORDB_Plugin
struct TALER_Amount *denom_balance,
struct TALER_Amount *deposit_fee_balance,
struct TALER_Amount *melt_fee_balance,
struct TALER_Amount *refund_fee_balance);
/**
* Insert information about an exchange's risk exposure. There
* must not be an existing record for the exchange.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to use
* @param master_pub master key of the exchange
* @param risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
int
(*insert_risk_summary)(void *cls,
struct TALER_AUDITORDB_Session *session,
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_Amount *risk);
/**
* Update information about an exchange's risk exposure. There
* must be an existing record for the exchange.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to use
* @param master_pub master key of the exchange
* @param risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
*/
int
(*update_risk_summary)(void *cls,
struct TALER_AUDITORDB_Session *session,
const struct TALER_MasterPublicKeyP *master_pub,
const struct TALER_Amount *risk);
/**
* Get information about an exchange's risk exposure.
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param session connection to use
* @param master_pub master key of the exchange
* @param[out] risk maximum risk exposure of the exchange
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure;
* #GNUNET_NO if we have no records for the @a master_pub
*/
int
(*get_risk_summary)(void *cls,
struct TALER_AUDITORDB_Session *session,
const struct TALER_MasterPublicKeyP *master_pub,
struct TALER_Amount *risk);
struct TALER_Amount *refund_fee_balance,
struct TALER_Amount *risk);
/**