extend auditordb API with function to store deposit confirmations
This commit is contained in:
parent
9d18caa006
commit
4f37950a40
@ -1,6 +1,6 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2014-2017 GNUnet e.V.
|
||||
Copyright (C) 2014-2018 GNUnet e.V.
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the Free Software
|
||||
@ -361,6 +361,24 @@ postgres_create_tables (void *cls)
|
||||
")"),
|
||||
GNUNET_PQ_make_try_execute ("CREATE INDEX auditor_historic_reserve_summary_by_master_pub_start_date "
|
||||
"ON auditor_historic_reserve_summary(master_pub,start_date)"),
|
||||
|
||||
/* Table with deposit confirmation sent to us by merchants;
|
||||
we must check that the exchange reported these properly. */
|
||||
GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS deposit_confirmations "
|
||||
"(master_pub BYTEA NOT NULL CHECK (LENGTH(master_pub)=32)"
|
||||
",h_contract_terms BYTEA PRIMARY KEY CHECK (LENGTH(h_contract_terms_hash)=64)"
|
||||
",h_wire BYTEA PRIMARY KEY CHECK (LENGTH(h_wire)=64)"
|
||||
",timestamp INT8 NOT NULL"
|
||||
",refund_deadline INT8 NOT NULL"
|
||||
",amount_with_fee_val INT8 NOT NULL"
|
||||
",amount_with_fee_frac INT4 NOT NULL"
|
||||
",amount_with_fee_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||
",coin_pub BYTEA PRIMARY KEY CHECK (LENGTH(coin_pub)=32)"
|
||||
",merchant BYTEA PRIMARY KEY CHECK (LENGTH(coin_pub)=32)"
|
||||
",exchange_sig BYTEA PRIMARY KEY CHECK (LENGTH(coin_pub)=32)"
|
||||
",exchange_pub BYTEA PRIMARY KEY CHECK (LENGTH(coin_pub)=32)"
|
||||
",master_sig BYTEA PRIMARY KEY CHECK (LENGTH(coin_pub)=32)"
|
||||
")"),
|
||||
/* Table with historic business ledger; basically, when the exchange
|
||||
operator decides to use operating costs for anything but wire
|
||||
transfers to merchants, it goes in here. This happens when the
|
||||
@ -475,6 +493,22 @@ postgres_prepare (PGconn *db_conn)
|
||||
" WHERE master_pub=$1;",
|
||||
1),
|
||||
/* Used in #postgres_insert_auditor_progress() */
|
||||
GNUNET_PQ_make_prepare ("auditor_deposit_confirmation_insert",
|
||||
"INSERT INTO deposit_confirmations "
|
||||
"(master_pub"
|
||||
",h_contract_terms"
|
||||
",h_wire"
|
||||
",timestamp"
|
||||
",refund_deadline"
|
||||
",amount_without_fee"
|
||||
",coin_pub"
|
||||
",merchant"
|
||||
",exchange_sig"
|
||||
",exchange_pub"
|
||||
",master_sig" /* master_sig could be normalized... */
|
||||
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11);",
|
||||
11),
|
||||
/* Used in #postgres_insert_auditor_progress() */
|
||||
GNUNET_PQ_make_prepare ("auditor_progress_insert",
|
||||
"INSERT INTO auditor_progress "
|
||||
"(master_pub"
|
||||
@ -1047,6 +1081,42 @@ postgres_gc (void *cls)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Insert information about a deposit confirmation into the database.
|
||||
*
|
||||
* @param cls the @e cls of this struct with the plugin-specific state
|
||||
* @param session connection to the database
|
||||
* @param dc deposit confirmation information to store
|
||||
* @return query result status
|
||||
*/
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_insert_deposit_confirmation (void *cls,
|
||||
struct TALER_AUDITORDB_Session *session,
|
||||
const struct TALER_AUDITORDB_DepositConfirmation *dc)
|
||||
{
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->master_public_key),
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->h_contract_terms),
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->h_wire),
|
||||
TALER_PQ_query_param_absolute_time (&dc->timestamp),
|
||||
TALER_PQ_query_param_absolute_time (&dc->refund_deadline),
|
||||
TALER_PQ_query_param_amount (&dc->amount_without_fee),
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->coin_pub),
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->merchant),
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->exchange_sig),
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->exchange_pub),
|
||||
GNUNET_PQ_query_param_auto_from_type (&dc->master_sig),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
|
||||
return GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||
"auditor_deposit_confirmation_insert",
|
||||
params);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Insert information about a denomination key and in particular
|
||||
* the properties (value, fees, expiration times) the coins signed
|
||||
@ -2625,6 +2695,8 @@ libtaler_plugin_auditordb_postgres_init (void *cls)
|
||||
plugin->rollback = &postgres_rollback;
|
||||
plugin->gc = &postgres_gc;
|
||||
|
||||
plugin->insert_deposit_confirmation = &postgres_insert_deposit_confirmation;
|
||||
|
||||
plugin->select_denomination_info = &postgres_select_denomination_info;
|
||||
plugin->insert_denomination_info = &postgres_insert_denomination_info;
|
||||
|
||||
|
@ -186,6 +186,81 @@ struct TALER_AUDITORDB_ProgressPoint
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Information about a deposit confirmation we received from
|
||||
* a merchant.
|
||||
*/
|
||||
struct TALER_AUDITORDB_DepositConfirmation
|
||||
{
|
||||
|
||||
/**
|
||||
* Hash over the contract for which this deposit is made.
|
||||
*/
|
||||
struct GNUNET_HashCode h_contract_terms;
|
||||
|
||||
/**
|
||||
* Hash over the wiring information of the merchant.
|
||||
*/
|
||||
struct GNUNET_HashCode h_wire;
|
||||
|
||||
/**
|
||||
* Time when this confirmation was generated.
|
||||
*/
|
||||
struct GNUNET_TIME_Absolute timestamp;
|
||||
|
||||
/**
|
||||
* How much time does the @e merchant have to issue a refund
|
||||
* request? Zero if refunds are not allowed. After this time, the
|
||||
* coin cannot be refunded. Note that the wire transfer will not be
|
||||
* performed by the exchange until the refund deadline. This value
|
||||
* is taken from the original deposit request.
|
||||
*/
|
||||
struct GNUNET_TIME_Absolute refund_deadline;
|
||||
|
||||
/**
|
||||
* Amount to be deposited, excluding fee. Calculated from the
|
||||
* amount with fee and the fee from the deposit request.
|
||||
*/
|
||||
struct TALER_Amount amount_without_fee;
|
||||
|
||||
/**
|
||||
* The coin's public key. This is the value that must have been
|
||||
* signed (blindly) by the Exchange. The deposit request is to be
|
||||
* signed by the corresponding private key (using EdDSA).
|
||||
*/
|
||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||
|
||||
/**
|
||||
* The Merchant's public key. Allows the merchant to later refund
|
||||
* the transaction or to inquire about the wire transfer identifier.
|
||||
*/
|
||||
struct TALER_MerchantPublicKeyP merchant;
|
||||
|
||||
/**
|
||||
* Signature from the exchange of type
|
||||
* #TALER_SIGNATURE_EXCHANGE_CONFIRM_DEPOSIT.
|
||||
*/
|
||||
struct TALER_ExchangeSignatureP exchange_sig;
|
||||
|
||||
/**
|
||||
* Public signing key from the exchange matching @e exchange_sig.
|
||||
*/
|
||||
struct TALER_ExchangeSignatureP exchange_pub;
|
||||
|
||||
/**
|
||||
* Exchange master signature over @e exchange_sig.
|
||||
*/
|
||||
struct TALER_MasterSignatureP master_sig;
|
||||
|
||||
/**
|
||||
* Master public key of the exchange corresponding to @e master_sig.
|
||||
* Identifies the exchange this is about.
|
||||
*/
|
||||
struct TALER_MasterPublicKeyP master_public_key;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Handle for one session with the database.
|
||||
*/
|
||||
@ -291,6 +366,20 @@ struct TALER_AUDITORDB_Plugin
|
||||
(*gc) (void *cls);
|
||||
|
||||
|
||||
/**
|
||||
* Insert information about a deposit confirmation into the database.
|
||||
*
|
||||
* @param cls the @e cls of this struct with the plugin-specific state
|
||||
* @param session connection to the database
|
||||
* @param dc deposit confirmation information to store
|
||||
* @return query result status
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*insert_deposit_confirmation) (void *cls,
|
||||
struct TALER_AUDITORDB_Session *session,
|
||||
const struct TALER_AUDITORDB_DepositConfirmation *dc);
|
||||
|
||||
|
||||
/**
|
||||
* Insert information about a denomination key and in particular
|
||||
* the properties (value, fees, expiration times) the coins signed
|
||||
|
Loading…
Reference in New Issue
Block a user