-more DB prep work towards reserve auditing with p2p payments

This commit is contained in:
Christian Grothoff 2022-06-15 20:49:39 +02:00
parent 83be3173d4
commit eccf37e450
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 370 additions and 4 deletions

View File

@ -1308,6 +1308,111 @@ verify_reserve_balance (void *cls,
} }
/**
* Function called with details about purse deposits that have been made, with
* the goal of auditing the deposit's execution.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @param deposit deposit details
* @param denom_pub denomination public key of @a coin_pub
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
static enum GNUNET_GenericReturnValue
handle_purse_deposits (
void *cls,
uint64_t rowid,
const struct TALER_EXCHANGEDB_PurseDeposit *deposit,
const struct TALER_DenominationPublicKey *denom_pub)
{
GNUNET_break (0); // FIXME
/* Credit purse value (if last op)! */
return GNUNET_SYSERR;
}
/**
* Function called with details about purse
* merges that have been made, with
* the goal of auditing the purse merge execution.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
static enum GNUNET_GenericReturnValue
handle_purse_merged (
void *cls,
uint64_t rowid,
const char *partner_base_url,
const struct TALER_Amount *amount,
enum TALER_WalletAccountMergeFlags flags,
const struct TALER_PurseMergePublicKeyP *merge_pub,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_PurseMergeSignatureP *merge_sig,
const struct TALER_PurseContractPublicKeyP *purse_pub,
struct GNUNET_TIME_Timestamp merge_timestamp)
{
GNUNET_break (0); // FIXME
/* Credit purse value (if last op)! */
return GNUNET_SYSERR;
}
/**
* Function called with details about
* account merge requests that have been made, with
* the goal of auditing the account merge execution.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
static enum GNUNET_GenericReturnValue
handle_account_merged (
void *cls,
uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_PurseContractPublicKeyP *purse_pub,
const struct TALER_PrivateContractHashP *h_contract_terms,
struct GNUNET_TIME_Timestamp purse_expiration,
const struct TALER_Amount *amount,
uint32_t min_age,
enum TALER_WalletAccountMergeFlags flags,
const struct TALER_Amount *purse_fee,
struct GNUNET_TIME_Timestamp merge_timestamp,
struct TALER_ReserveSignatureP *reserve_sig)
{
GNUNET_break (0); // FIXME
/* Debit purse fee */
return GNUNET_SYSERR;
}
/**
* Function called with details about
* history requests that have been made, with
* the goal of auditing the history request execution.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
static enum GNUNET_GenericReturnValue
handle_history_request (
void *cls,
uint64_t rowid,
const struct TALER_Amount *history_fee,
const struct GNUNET_TIME_Timestamp ts,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_ReserveSignatureP *reserve_sig)
{
GNUNET_break (0); // FIXME
/* Debit purse fee */
return GNUNET_SYSERR;
}
/** /**
* Analyze reserves for being well-formed. * Analyze reserves for being well-formed.
* *
@ -1410,10 +1515,10 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs); GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs; return qs;
} }
#if FIXME /* Credit purse value (if last op)! */
qs = TALER_ARL_edb->select_purse_merges_above_serial_id ( qs = TALER_ARL_edb->select_purse_merges_above_serial_id (
TALER_ARL_edb->cls, TALER_ARL_edb->cls,
ppr.last_purse_merge_serial_id, ppr.last_purse_merges_serial_id,
&handle_purse_merged, &handle_purse_merged,
&rc); &rc);
if (qs < 0) if (qs < 0)
@ -1421,7 +1526,6 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs); GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs; return qs;
} }
qs = TALER_ARL_edb->select_purse_deposits_above_serial_id ( qs = TALER_ARL_edb->select_purse_deposits_above_serial_id (
TALER_ARL_edb->cls, TALER_ARL_edb->cls,
ppr.last_purse_deposits_serial_id, ppr.last_purse_deposits_serial_id,
@ -1432,9 +1536,10 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs); GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs; return qs;
} }
/* Charge purse fee! */
qs = TALER_ARL_edb->select_account_merges_above_serial_id ( qs = TALER_ARL_edb->select_account_merges_above_serial_id (
TALER_ARL_edb->cls, TALER_ARL_edb->cls,
ppr.last_account_merge_serial_id, ppr.last_account_merges_serial_id,
&handle_account_merged, &handle_account_merged,
&rc); &rc);
if (qs < 0) if (qs < 0)
@ -1442,6 +1547,7 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs); GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs; return qs;
} }
/* Charge history fee! */
qs = TALER_ARL_edb->select_history_requests_above_serial_id ( qs = TALER_ARL_edb->select_history_requests_above_serial_id (
TALER_ARL_edb->cls, TALER_ARL_edb->cls,
ppr.last_history_requests_serial_id, ppr.last_history_requests_serial_id,
@ -1452,6 +1558,8 @@ analyze_reserves (void *cls)
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs); GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs; return qs;
} }
#if FIXME
/* TODO: do we even care about these? */
qs = TALER_ARL_edb->select_close_requests_above_serial_id ( qs = TALER_ARL_edb->select_close_requests_above_serial_id (
TALER_ARL_edb->cls, TALER_ARL_edb->cls,
ppr.last_close_requests_serial_id, ppr.last_close_requests_serial_id,

View File

@ -1521,6 +1521,71 @@ prepare_statements (struct PostgresClosure *pg)
" )" " )"
" ORDER BY purse_deposit_serial_id ASC;", " ORDER BY purse_deposit_serial_id ASC;",
1), 1),
GNUNET_PQ_make_prepare (
"audit_get_account_merges_incr",
"SELECT"
" am.account_merge_request_serial_id"
",am.reserve_pub"
",am.purse_pub"
",pr.h_contract_terms"
",pr.purse_expiration"
",pr.amount_with_fee_val"
",pr.amount_with_fee_frac"
",pr.age_limit"
",pr.flags"
",pr.purse_fee_val"
",pr.purse_fee_frac"
",pm.merge_timestamp"
",am.reserve_sig"
" FROM account_merges am"
" JOIN purse_requests pr USING (purse_pub)"
" JOIN purse_merges pm USING (purse_pub)"
" WHERE ("
" (account_merge_request_serial_id>=$1)"
" )"
" ORDER BY account_merge_request_serial_id ASC;",
1),
GNUNET_PQ_make_prepare (
"audit_get_purse_merges_incr",
"SELECT"
" pm.purse_merge_request_serial_id"
",partner_base_url"
",pr.amount_with_fee_val"
",pr.amount_with_fee_frac"
",pr.flags"
",pr.merge_pub"
",pm.reserve_pub"
",pm.merge_sig"
",pm.purse_pub"
",pm.merge_timestamp"
" FROM purse_merges pm"
" JOIN purse_requests pr USING (purse_pub)"
" LEFT JOIN partners USING (partner_serial_id)"
" WHERE ("
" (purse_merge_request_serial_id>=$1)"
" )"
" ORDER BY purse_merge_request_serial_id ASC;",
1),
GNUNET_PQ_make_prepare (
"audit_get_history_requests_incr",
"SELECT"
" history_request_serial_id"
",history_fee_val"
",history_fee_frac"
",request_timestamp"
",reserve_pub"
",reserve_sig"
" FROM history_requests"
" WHERE ("
" (history_request_serial_id>=$1)"
" )"
" ORDER BY history_request_serial_id ASC;",
1),
GNUNET_PQ_make_prepare ( GNUNET_PQ_make_prepare (
"audit_get_purse_deposits_by_purse", "audit_get_purse_deposits_by_purse",
"SELECT" "SELECT"
@ -10558,6 +10623,72 @@ postgres_select_purse_deposits_above_serial_id (
} }
/**
* Select account merges above @a serial_id in monotonically increasing
* order.
*
* @param cls closure
* @param serial_id highest serial ID to exclude (select strictly larger)
* @param cb function to call on each result
* @param cb_cls closure for @a cb
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
postgres_select_account_merges_above_serial_id (
void *cls,
uint64_t serial_id,
TALER_EXCHANGEDB_AccountMergeCallback cb,
void *cb_cls)
{
GNUNET_break (0); // FIXME: not implemented
return GNUNET_DB_STATUS_HARD_ERROR;
}
/**
* Select purse merges deposits above @a serial_id in monotonically increasing
* order.
*
* @param cls closure
* @param serial_id highest serial ID to exclude (select strictly larger)
* @param cb function to call on each result
* @param cb_cls closure for @a cb
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
postgres_select_purse_merges_above_serial_id (
void *cls,
uint64_t serial_id,
TALER_EXCHANGEDB_PurseMergeCallback cb,
void *cb_cls)
{
GNUNET_break (0); // FIXME: not implemented
return GNUNET_DB_STATUS_HARD_ERROR;
}
/**
* Select history requests above @a serial_id in monotonically increasing
* order.
*
* @param cls closure
* @param serial_id highest serial ID to exclude (select strictly larger)
* @param cb function to call on each result
* @param cb_cls closure for @a cb
* @return transaction status code
*/
static enum GNUNET_DB_QueryStatus
postgres_select_history_requests_above_serial_id (
void *cls,
uint64_t serial_id,
TALER_EXCHANGEDB_HistoryRequestCallback cb,
void *cb_cls)
{
GNUNET_break (0); // FIXME: not implemented
return GNUNET_DB_STATUS_HARD_ERROR;
}
/** /**
* Closure for #purse_refund_serial_helper_cb(). * Closure for #purse_refund_serial_helper_cb().
*/ */
@ -15553,6 +15684,12 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
= &postgres_select_deposits_above_serial_id; = &postgres_select_deposits_above_serial_id;
plugin->select_purse_deposits_above_serial_id plugin->select_purse_deposits_above_serial_id
= &postgres_select_purse_deposits_above_serial_id; = &postgres_select_purse_deposits_above_serial_id;
plugin->select_account_merges_above_serial_id
= &postgres_select_account_merges_above_serial_id;
plugin->select_purse_merges_above_serial_id
= &postgres_select_purse_merges_above_serial_id;
plugin->select_history_requests_above_serial_id
= &postgres_select_history_requests_above_serial_id;
plugin->select_purse_refunds_above_serial_id plugin->select_purse_refunds_above_serial_id
= &postgres_select_purse_refunds_above_serial_id; = &postgres_select_purse_refunds_above_serial_id;
plugin->select_purse_deposits_by_purse plugin->select_purse_deposits_by_purse

View File

@ -2001,6 +2001,73 @@ typedef enum GNUNET_GenericReturnValue
const struct TALER_DenominationPublicKey *denom_pub); const struct TALER_DenominationPublicKey *denom_pub);
/**
* Function called with details about
* account merge requests that have been made, with
* the goal of auditing the account merge execution.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
typedef enum GNUNET_GenericReturnValue
(*TALER_EXCHANGEDB_AccountMergeCallback)(
void *cls,
uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_PurseContractPublicKeyP *purse_pub,
const struct TALER_PrivateContractHashP *h_contract_terms,
struct GNUNET_TIME_Timestamp purse_expiration,
const struct TALER_Amount *amount,
uint32_t min_age,
enum TALER_WalletAccountMergeFlags flags,
const struct TALER_Amount *purse_fee,
struct GNUNET_TIME_Timestamp merge_timestamp,
struct TALER_ReserveSignatureP *reserve_sig);
/**
* Function called with details about purse
* merges that have been made, with
* the goal of auditing the purse merge execution.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
typedef enum GNUNET_GenericReturnValue
(*TALER_EXCHANGEDB_PurseMergeCallback)(
void *cls,
uint64_t rowid,
const char *partner_base_url,
const struct TALER_Amount *amount,
enum TALER_WalletAccountMergeFlags flags,
const struct TALER_PurseMergePublicKeyP *merge_pub,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_PurseMergeSignatureP *merge_sig,
const struct TALER_PurseContractPublicKeyP *purse_pub,
struct GNUNET_TIME_Timestamp merge_timestamp);
/**
* Function called with details about
* history requests that have been made, with
* the goal of auditing the history request execution.
*
* @param cls closure
* @param rowid unique serial ID for the deposit in our DB
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
typedef enum GNUNET_GenericReturnValue
(*TALER_EXCHANGEDB_HistoryRequestCallback)(
void *cls,
uint64_t rowid,
const struct TALER_Amount *history_fee,
const struct GNUNET_TIME_Timestamp ts,
const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_ReserveSignatureP *reserve_sig);
/** /**
* Function called with details about purse refunds that have been made, with * Function called with details about purse refunds that have been made, with
* the goal of auditing the purse refund's execution. * the goal of auditing the purse refund's execution.
@ -4101,6 +4168,60 @@ struct TALER_EXCHANGEDB_Plugin
void *cb_cls); void *cb_cls);
/**
* Select account merges above @a serial_id in monotonically increasing
* order.
*
* @param cls closure
* @param serial_id highest serial ID to exclude (select strictly larger)
* @param cb function to call on each result
* @param cb_cls closure for @a cb
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
(*select_account_merges_above_serial_id)(
void *cls,
uint64_t serial_id,
TALER_EXCHANGEDB_AccountMergeCallback cb,
void *cb_cls);
/**
* Select purse merges deposits above @a serial_id in monotonically increasing
* order.
*
* @param cls closure
* @param serial_id highest serial ID to exclude (select strictly larger)
* @param cb function to call on each result
* @param cb_cls closure for @a cb
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
(*select_purse_merges_above_serial_id)(
void *cls,
uint64_t serial_id,
TALER_EXCHANGEDB_PurseMergeCallback cb,
void *cb_cls);
/**
* Select history requests above @a serial_id in monotonically increasing
* order.
*
* @param cls closure
* @param serial_id highest serial ID to exclude (select strictly larger)
* @param cb function to call on each result
* @param cb_cls closure for @a cb
* @return transaction status code
*/
enum GNUNET_DB_QueryStatus
(*select_history_requests_above_serial_id)(
void *cls,
uint64_t serial_id,
TALER_EXCHANGEDB_HistoryRequestCallback cb,
void *cb_cls);
/** /**
* Select purse refunds above @a serial_id in monotonically increasing * Select purse refunds above @a serial_id in monotonically increasing
* order. * order.