implement #3838 (as required for wire transfers)
This commit is contained in:
parent
f8a730a0ab
commit
cc47c5c701
@ -538,7 +538,7 @@ typedef int
|
|||||||
const struct TALER_Amount *deposit_fee,
|
const struct TALER_Amount *deposit_fee,
|
||||||
uint64_t transaction_id,
|
uint64_t transaction_id,
|
||||||
const struct GNUNET_HashCode *h_contract,
|
const struct GNUNET_HashCode *h_contract,
|
||||||
const char *wire);
|
const json_t *wire);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -628,23 +628,23 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Commit a transaction.
|
* Commit a transaction.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion connection to use
|
* @param session connection to use
|
||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*commit) (void *cls,
|
(*commit) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion);
|
struct TALER_MINTDB_Session *session);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abort/rollback a transaction.
|
* Abort/rollback a transaction.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion connection to use
|
* @param session connection to use
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
(*rollback) (void *cls,
|
(*rollback) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion);
|
struct TALER_MINTDB_Session *session);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -653,7 +653,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* with this key have.
|
* with this key have.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion connection to use
|
* @param session connection to use
|
||||||
* @param denom_pub the public key used for signing coins of this denomination
|
* @param denom_pub the public key used for signing coins of this denomination
|
||||||
* @param issue issuing information with value, fees and other info about the coin
|
* @param issue issuing information with value, fees and other info about the coin
|
||||||
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
|
* @return #GNUNET_OK on success; #GNUNET_SYSERR on failure
|
||||||
@ -669,7 +669,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Fetch information about a denomination key.
|
* Fetch information about a denomination key.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion connection to use
|
* @param session connection to use
|
||||||
* @param denom_pub the public key used for signing coins of this denomination
|
* @param denom_pub the public key used for signing coins of this denomination
|
||||||
* @param[out] issue set to issue information with value, fees and other info about the coin, can be NULL
|
* @param[out] issue set to issue information with value, fees and other info about the coin, can be NULL
|
||||||
* @return #GNUNET_OK on success; #GNUNET_NO if no record was found, #GNUNET_SYSERR on failure
|
* @return #GNUNET_OK on success; #GNUNET_NO if no record was found, #GNUNET_SYSERR on failure
|
||||||
@ -728,7 +728,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* key of the hash of the blinded message.
|
* key of the hash of the blinded message.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection to use
|
* @param session database connection to use
|
||||||
* @param h_blind hash of the blinded coin to be signed (will match
|
* @param h_blind hash of the blinded coin to be signed (will match
|
||||||
* `h_coin_envelope` in the @a collectable to be returned)
|
* `h_coin_envelope` in the @a collectable to be returned)
|
||||||
* @param collectable corresponding collectable coin (blind signature)
|
* @param collectable corresponding collectable coin (blind signature)
|
||||||
@ -739,7 +739,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*get_withdraw_info) (void *cls,
|
(*get_withdraw_info) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *h_blind,
|
const struct GNUNET_HashCode *h_blind,
|
||||||
struct TALER_MINTDB_CollectableBlindcoin *collectable);
|
struct TALER_MINTDB_CollectableBlindcoin *collectable);
|
||||||
|
|
||||||
@ -749,7 +749,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* hash of the blinded message.
|
* hash of the blinded message.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection to use
|
* @param session database connection to use
|
||||||
* @param collectable corresponding collectable coin (blind signature)
|
* @param collectable corresponding collectable coin (blind signature)
|
||||||
* if a coin is found
|
* if a coin is found
|
||||||
* @return #GNUNET_SYSERR on internal error
|
* @return #GNUNET_SYSERR on internal error
|
||||||
@ -758,7 +758,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*insert_withdraw_info) (void *cls,
|
(*insert_withdraw_info) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct TALER_MINTDB_CollectableBlindcoin *collectable);
|
const struct TALER_MINTDB_CollectableBlindcoin *collectable);
|
||||||
|
|
||||||
|
|
||||||
@ -767,13 +767,13 @@ struct TALER_MINTDB_Plugin
|
|||||||
* reserve.
|
* reserve.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion connection to use
|
* @param session connection to use
|
||||||
* @param reserve_pub public key of the reserve
|
* @param reserve_pub public key of the reserve
|
||||||
* @return known transaction history (NULL if reserve is unknown)
|
* @return known transaction history (NULL if reserve is unknown)
|
||||||
*/
|
*/
|
||||||
struct TALER_MINTDB_ReserveHistory *
|
struct TALER_MINTDB_ReserveHistory *
|
||||||
(*get_reserve_history) (void *cls,
|
(*get_reserve_history) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct TALER_ReservePublicKeyP *reserve_pub);
|
const struct TALER_ReservePublicKeyP *reserve_pub);
|
||||||
|
|
||||||
|
|
||||||
@ -792,7 +792,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Check if we have the specified deposit already in the database.
|
* Check if we have the specified deposit already in the database.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param deposit deposit to search for
|
* @param deposit deposit to search for
|
||||||
* @return #GNUNET_YES if we know this operation,
|
* @return #GNUNET_YES if we know this operation,
|
||||||
* #GNUNET_NO if this exact deposit is unknown to us,
|
* #GNUNET_NO if this exact deposit is unknown to us,
|
||||||
@ -800,7 +800,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*have_deposit) (void *cls,
|
(*have_deposit) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct TALER_MINTDB_Deposit *deposit);
|
const struct TALER_MINTDB_Deposit *deposit);
|
||||||
|
|
||||||
|
|
||||||
@ -808,13 +808,13 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Insert information about deposited coin into the database.
|
* Insert information about deposited coin into the database.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion connection to the database
|
* @param session connection to the database
|
||||||
* @param deposit deposit information to store
|
* @param deposit deposit information to store
|
||||||
* @return #GNUNET_OK on success, #GNUNET_SYSERR on error
|
* @return #GNUNET_OK on success, #GNUNET_SYSERR on error
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*insert_deposit) (void *cls,
|
(*insert_deposit) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct TALER_MINTDB_Deposit *deposit);
|
const struct TALER_MINTDB_Deposit *deposit);
|
||||||
|
|
||||||
|
|
||||||
@ -822,10 +822,10 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Obtain information about deposits. Iterates over all deposits
|
* Obtain information about deposits. Iterates over all deposits
|
||||||
* above a certain ID. Use a @a min_id of 0 to start at the beginning.
|
* above a certain ID. Use a @a min_id of 0 to start at the beginning.
|
||||||
* This operation is executed in its own transaction in transaction
|
* This operation is executed in its own transaction in transaction
|
||||||
* mode "READ COMMITTED", i.e. we should only see valid deposits.
|
* mode "REPEATABLE READ", i.e. we should only see valid deposits.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion connection to the database
|
* @param session connection to the database
|
||||||
* @param min_id deposit to start at
|
* @param min_id deposit to start at
|
||||||
* @param limit maximum number of transactions to fetch
|
* @param limit maximum number of transactions to fetch
|
||||||
* @param deposit_cb function to call for each deposit
|
* @param deposit_cb function to call for each deposit
|
||||||
@ -835,9 +835,9 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*iterate_deposits) (void *cls,
|
(*iterate_deposits) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
uint64_t min_id,
|
uint64_t min_id,
|
||||||
unsigned int limit,
|
uint32_t limit,
|
||||||
TALER_MINTDB_DepositIterator deposit_cb,
|
TALER_MINTDB_DepositIterator deposit_cb,
|
||||||
void *deposit_cb_cls);
|
void *deposit_cb_cls);
|
||||||
|
|
||||||
@ -846,7 +846,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Lookup refresh session data under the given @a session_hash.
|
* Lookup refresh session data under the given @a session_hash.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database handle to use
|
* @param session database handle to use
|
||||||
* @param session_hash hash over the melt to use for the lookup
|
* @param session_hash hash over the melt to use for the lookup
|
||||||
* @param[out] refresh_session where to store the result
|
* @param[out] refresh_session where to store the result
|
||||||
* @return #GNUNET_YES on success,
|
* @return #GNUNET_YES on success,
|
||||||
@ -855,7 +855,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*get_refresh_session) (void *cls,
|
(*get_refresh_session) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
struct TALER_MINTDB_RefreshSession *refresh_session);
|
struct TALER_MINTDB_RefreshSession *refresh_session);
|
||||||
|
|
||||||
@ -864,7 +864,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Store new refresh session data under the given @a session_hash.
|
* Store new refresh session data under the given @a session_hash.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database handle to use
|
* @param session database handle to use
|
||||||
* @param session_hash hash over the melt to use to locate the session
|
* @param session_hash hash over the melt to use to locate the session
|
||||||
* @param refresh_session session data to store
|
* @param refresh_session session data to store
|
||||||
* @return #GNUNET_YES on success,
|
* @return #GNUNET_YES on success,
|
||||||
@ -872,7 +872,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*create_refresh_session) (void *cls,
|
(*create_refresh_session) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
const struct TALER_MINTDB_RefreshSession *refresh_session);
|
const struct TALER_MINTDB_RefreshSession *refresh_session);
|
||||||
|
|
||||||
@ -881,7 +881,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Store the given /refresh/melt request in the database.
|
* Store the given /refresh/melt request in the database.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param oldcoin_index index of the coin to store
|
* @param oldcoin_index index of the coin to store
|
||||||
* @param melt coin melt operation details to store; includes
|
* @param melt coin melt operation details to store; includes
|
||||||
* the session hash of the melt
|
* the session hash of the melt
|
||||||
@ -890,7 +890,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*insert_refresh_melt) (void *cls,
|
(*insert_refresh_melt) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
uint16_t oldcoin_index,
|
uint16_t oldcoin_index,
|
||||||
const struct TALER_MINTDB_RefreshMelt *melt);
|
const struct TALER_MINTDB_RefreshMelt *melt);
|
||||||
|
|
||||||
@ -899,7 +899,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Get information about melted coin details from the database.
|
* Get information about melted coin details from the database.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param oldcoin_index index of the coin to retrieve
|
* @param oldcoin_index index of the coin to retrieve
|
||||||
* @param melt melt data to fill in, can be NULL
|
* @param melt melt data to fill in, can be NULL
|
||||||
@ -908,7 +908,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*get_refresh_melt) (void *cls,
|
(*get_refresh_melt) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t oldcoin_index,
|
uint16_t oldcoin_index,
|
||||||
struct TALER_MINTDB_RefreshMelt *melt);
|
struct TALER_MINTDB_RefreshMelt *melt);
|
||||||
@ -919,7 +919,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* in a given refresh operation.
|
* in a given refresh operation.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param num_newcoins number of coins to generate, size of the @a denom_pubs array
|
* @param num_newcoins number of coins to generate, size of the @a denom_pubs array
|
||||||
* @param denom_pubs array denominations of the coins to create
|
* @param denom_pubs array denominations of the coins to create
|
||||||
@ -928,7 +928,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*insert_refresh_order) (void *cls,
|
(*insert_refresh_order) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t num_newcoins,
|
uint16_t num_newcoins,
|
||||||
const struct TALER_DenominationPublicKey *denom_pubs);
|
const struct TALER_DenominationPublicKey *denom_pubs);
|
||||||
@ -939,7 +939,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* create in the given refresh operation.
|
* create in the given refresh operation.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param num_newcoins size of the @a denom_pubs array
|
* @param num_newcoins size of the @a denom_pubs array
|
||||||
* @param[out] denom_pubs where to write @a num_newcoins denomination keys
|
* @param[out] denom_pubs where to write @a num_newcoins denomination keys
|
||||||
@ -948,7 +948,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*get_refresh_order) (void *cls,
|
(*get_refresh_order) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t num_newcoins,
|
uint16_t num_newcoins,
|
||||||
struct TALER_DenominationPublicKey *denom_pubs);
|
struct TALER_DenominationPublicKey *denom_pubs);
|
||||||
@ -959,7 +959,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* for the given refresh session in the database.
|
* for the given refresh session in the database.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection to use
|
* @param session database connection to use
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param cnc_index cut and choose index (1st dimension), relating to #TALER_CNC_KAPPA
|
* @param cnc_index cut and choose index (1st dimension), relating to #TALER_CNC_KAPPA
|
||||||
* @param num_newcoins coin index size of the @a commit_coins array
|
* @param num_newcoins coin index size of the @a commit_coins array
|
||||||
@ -969,7 +969,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*insert_refresh_commit_coins) (void *cls,
|
(*insert_refresh_commit_coins) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t cnc_index,
|
uint16_t cnc_index,
|
||||||
uint16_t num_newcoins,
|
uint16_t num_newcoins,
|
||||||
@ -981,7 +981,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* given coin of the given refresh session from the database.
|
* given coin of the given refresh session from the database.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection to use
|
* @param session database connection to use
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param cnc_index cut and choose set index (1st dimension)
|
* @param cnc_index cut and choose set index (1st dimension)
|
||||||
* @param num_coins size of the @a commit_coins array
|
* @param num_coins size of the @a commit_coins array
|
||||||
@ -992,7 +992,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*get_refresh_commit_coins) (void *cls,
|
(*get_refresh_commit_coins) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t cnc_index,
|
uint16_t cnc_index,
|
||||||
uint16_t num_coins,
|
uint16_t num_coins,
|
||||||
@ -1004,7 +1004,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* for the given refresh session.
|
* for the given refresh session.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection to use
|
* @param session database connection to use
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param cnc_index cut and choose index (1st dimension), relating to #TALER_CNC_KAPPA
|
* @param cnc_index cut and choose index (1st dimension), relating to #TALER_CNC_KAPPA
|
||||||
* @param num_links size of the @a commit_link array
|
* @param num_links size of the @a commit_link array
|
||||||
@ -1013,7 +1013,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*insert_refresh_commit_links) (void *cls,
|
(*insert_refresh_commit_links) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t cnc_index,
|
uint16_t cnc_index,
|
||||||
uint16_t num_links,
|
uint16_t num_links,
|
||||||
@ -1024,7 +1024,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* for the given refresh session.
|
* for the given refresh session.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection to use
|
* @param session database connection to use
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param cnc_index cut and choose index (1st dimension)
|
* @param cnc_index cut and choose index (1st dimension)
|
||||||
* @param num_links size of the @a links array to return
|
* @param num_links size of the @a links array to return
|
||||||
@ -1035,7 +1035,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*get_refresh_commit_links) (void *cls,
|
(*get_refresh_commit_links) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t cnc_index,
|
uint16_t cnc_index,
|
||||||
uint16_t num_links,
|
uint16_t num_links,
|
||||||
@ -1046,14 +1046,14 @@ struct TALER_MINTDB_Plugin
|
|||||||
* Get all of the information from the given melt commit operation.
|
* Get all of the information from the given melt commit operation.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection to use
|
* @param session database connection to use
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @return NULL if the @a session_hash does not correspond to any known melt
|
* @return NULL if the @a session_hash does not correspond to any known melt
|
||||||
* operation
|
* operation
|
||||||
*/
|
*/
|
||||||
struct TALER_MINTDB_MeltCommitment *
|
struct TALER_MINTDB_MeltCommitment *
|
||||||
(*get_melt_commitment) (void *cls,
|
(*get_melt_commitment) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash);
|
const struct GNUNET_HashCode *session_hash);
|
||||||
|
|
||||||
|
|
||||||
@ -1075,7 +1075,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
* be used to try to obtain the private keys during "/refresh/link".
|
* be used to try to obtain the private keys during "/refresh/link".
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param session_hash hash to identify refresh session
|
* @param session_hash hash to identify refresh session
|
||||||
* @param newcoin_index coin index
|
* @param newcoin_index coin index
|
||||||
* @param ev_sig coin signature
|
* @param ev_sig coin signature
|
||||||
@ -1083,7 +1083,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*insert_refresh_out) (void *cls,
|
(*insert_refresh_out) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash,
|
const struct GNUNET_HashCode *session_hash,
|
||||||
uint16_t newcoin_index,
|
uint16_t newcoin_index,
|
||||||
const struct TALER_DenominationSignature *ev_sig);
|
const struct TALER_DenominationSignature *ev_sig);
|
||||||
@ -1094,13 +1094,13 @@ struct TALER_MINTDB_Plugin
|
|||||||
* information, the denomination keys and the signatures.
|
* information, the denomination keys and the signatures.
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param session_hash session to get linkage data for
|
* @param session_hash session to get linkage data for
|
||||||
* @return all known link data for the session
|
* @return all known link data for the session
|
||||||
*/
|
*/
|
||||||
struct TALER_MINTDB_LinkDataList *
|
struct TALER_MINTDB_LinkDataList *
|
||||||
(*get_link_data_list) (void *cls,
|
(*get_link_data_list) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct GNUNET_HashCode *session_hash);
|
const struct GNUNET_HashCode *session_hash);
|
||||||
|
|
||||||
|
|
||||||
@ -1123,7 +1123,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param coin_pub public key of the coin
|
* @param coin_pub public key of the coin
|
||||||
* @param tdc function to call for each session the coin was melted into
|
* @param tdc function to call for each session the coin was melted into
|
||||||
* @param tdc_cls closure for @a tdc
|
* @param tdc_cls closure for @a tdc
|
||||||
@ -1133,7 +1133,7 @@ struct TALER_MINTDB_Plugin
|
|||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
(*get_transfer) (void *cls,
|
(*get_transfer) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
TALER_MINTDB_TransferDataCallback tdc,
|
TALER_MINTDB_TransferDataCallback tdc,
|
||||||
void *tdc_cls);
|
void *tdc_cls);
|
||||||
@ -1144,13 +1144,13 @@ struct TALER_MINTDB_Plugin
|
|||||||
* with the given coin (/refresh/melt and /deposit operations).
|
* with the given coin (/refresh/melt and /deposit operations).
|
||||||
*
|
*
|
||||||
* @param cls the @e cls of this struct with the plugin-specific state
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
* @param sesssion database connection
|
* @param session database connection
|
||||||
* @param coin_pub coin to investigate
|
* @param coin_pub coin to investigate
|
||||||
* @return list of transactions, NULL if coin is fresh
|
* @return list of transactions, NULL if coin is fresh
|
||||||
*/
|
*/
|
||||||
struct TALER_MINTDB_TransactionList *
|
struct TALER_MINTDB_TransactionList *
|
||||||
(*get_coin_transactions) (void *cls,
|
(*get_coin_transactions) (void *cls,
|
||||||
struct TALER_MINTDB_Session *sesssion,
|
struct TALER_MINTDB_Session *session,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub);
|
const struct TALER_CoinSpendPublicKeyP *coin_pub);
|
||||||
|
|
||||||
|
|
||||||
|
@ -426,7 +426,7 @@ postgres_create_tables (void *cls,
|
|||||||
/* This table contains the wire transfers the mint is supposed to
|
/* This table contains the wire transfers the mint is supposed to
|
||||||
execute to transmit funds to the merchants (and manage refunds). */
|
execute to transmit funds to the merchants (and manage refunds). */
|
||||||
SQLEXEC("CREATE TABLE IF NOT EXISTS deposits "
|
SQLEXEC("CREATE TABLE IF NOT EXISTS deposits "
|
||||||
"(id BIGSERIAL"
|
"(serial_id BIGSERIAL"
|
||||||
",coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)"
|
",coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)"
|
||||||
",denom_pub BYTEA NOT NULL REFERENCES denominations (pub)"
|
",denom_pub BYTEA NOT NULL REFERENCES denominations (pub)"
|
||||||
",denom_sig BYTEA NOT NULL"
|
",denom_sig BYTEA NOT NULL"
|
||||||
@ -852,8 +852,8 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
/* Used in #postgres_iterate_deposits() */
|
/* Used in #postgres_iterate_deposits() */
|
||||||
PREPARE ("deposits_iterate",
|
PREPARE ("deposits_iterate",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" id"
|
" serial_id"
|
||||||
" amount_with_fee_val"
|
",amount_with_fee_val"
|
||||||
",amount_with_fee_frac"
|
",amount_with_fee_frac"
|
||||||
",amount_with_fee_curr"
|
",amount_with_fee_curr"
|
||||||
",deposit_fee_val"
|
",deposit_fee_val"
|
||||||
@ -863,7 +863,8 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
",h_contract"
|
",h_contract"
|
||||||
",wire"
|
",wire"
|
||||||
" FROM deposits"
|
" FROM deposits"
|
||||||
" WHERE id>=$1"
|
" WHERE serial_id>=$1"
|
||||||
|
" ORDER BY serial_id ASC"
|
||||||
" LIMIT $2;",
|
" LIMIT $2;",
|
||||||
2, NULL);
|
2, NULL);
|
||||||
/* Used in #postgres_get_coin_transactions() to obtain information
|
/* Used in #postgres_get_coin_transactions() to obtain information
|
||||||
@ -1894,6 +1895,119 @@ postgres_have_deposit (void *cls,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain information about deposits. Iterates over all deposits
|
||||||
|
* above a certain ID. Use a @a min_id of 0 to start at the beginning.
|
||||||
|
* This operation is executed in its own transaction in transaction
|
||||||
|
* mode "REPEATABLE READ", i.e. we should only see valid deposits.
|
||||||
|
*
|
||||||
|
* @param cls the @e cls of this struct with the plugin-specific state
|
||||||
|
* @param session connection to the database
|
||||||
|
* @param min_id deposit to start at
|
||||||
|
* @param limit maximum number of transactions to fetch
|
||||||
|
* @param deposit_cb function to call for each deposit
|
||||||
|
* @param deposit_cb_cls closure for @a deposit_cb
|
||||||
|
* @return number of rows processed, 0 if none exist,
|
||||||
|
* #GNUNET_SYSERR on error
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
postgres_iterate_deposits (void *cls,
|
||||||
|
struct TALER_MINTDB_Session *session,
|
||||||
|
uint64_t min_id,
|
||||||
|
uint32_t limit,
|
||||||
|
TALER_MINTDB_DepositIterator deposit_cb,
|
||||||
|
void *deposit_cb_cls)
|
||||||
|
{
|
||||||
|
struct TALER_PQ_QueryParam params[] = {
|
||||||
|
TALER_PQ_query_param_uint64 (&min_id),
|
||||||
|
TALER_PQ_query_param_uint32 (&limit),
|
||||||
|
TALER_PQ_query_param_end
|
||||||
|
};
|
||||||
|
PGresult *result;
|
||||||
|
unsigned int i;
|
||||||
|
unsigned int n;
|
||||||
|
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
postgres_start (cls, session))
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
result = PQexec (session->conn,
|
||||||
|
"SET TRANSACTION REPEATABLE READ");
|
||||||
|
if (PGRES_COMMAND_OK !=
|
||||||
|
PQresultStatus (result))
|
||||||
|
{
|
||||||
|
TALER_LOG_ERROR ("Failed to set transaction to REPEATABL EREAD: %s\n",
|
||||||
|
PQresultErrorMessage (result));
|
||||||
|
GNUNET_break (0);
|
||||||
|
PQclear (result);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = TALER_PQ_exec_prepared (session->conn,
|
||||||
|
"deposits_iterate",
|
||||||
|
params);
|
||||||
|
if (PGRES_TUPLES_OK !=
|
||||||
|
PQresultStatus (result))
|
||||||
|
{
|
||||||
|
BREAK_DB_ERR (result);
|
||||||
|
PQclear (result);
|
||||||
|
postgres_rollback (cls, session);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
if (0 == (n = PQntuples (result)))
|
||||||
|
{
|
||||||
|
PQclear (result);
|
||||||
|
postgres_rollback (cls, session);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
struct TALER_Amount amount_with_fee;
|
||||||
|
struct TALER_Amount deposit_fee;
|
||||||
|
struct GNUNET_HashCode h_contract;
|
||||||
|
json_t *wire;
|
||||||
|
uint64_t transaction_id;
|
||||||
|
uint64_t id;
|
||||||
|
int ret;
|
||||||
|
struct TALER_PQ_ResultSpec rs[] = {
|
||||||
|
TALER_PQ_result_spec_uint64 ("id",
|
||||||
|
&id),
|
||||||
|
TALER_PQ_result_spec_uint64 ("transaction_id",
|
||||||
|
&transaction_id),
|
||||||
|
TALER_PQ_result_spec_amount ("amount_with_fee",
|
||||||
|
&amount_with_fee),
|
||||||
|
TALER_PQ_result_spec_amount ("deposit_fee",
|
||||||
|
&deposit_fee),
|
||||||
|
TALER_PQ_result_spec_auto_from_type ("h_contract",
|
||||||
|
&h_contract),
|
||||||
|
TALER_PQ_result_spec_json ("wire",
|
||||||
|
&wire),
|
||||||
|
TALER_PQ_result_spec_end
|
||||||
|
};
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
TALER_PQ_extract_result (result, rs, i))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
PQclear (result);
|
||||||
|
postgres_rollback (cls, session);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
ret = deposit_cb (deposit_cb_cls,
|
||||||
|
id,
|
||||||
|
&amount_with_fee,
|
||||||
|
&deposit_fee,
|
||||||
|
transaction_id,
|
||||||
|
&h_contract,
|
||||||
|
wire);
|
||||||
|
TALER_PQ_cleanup_result (rs);
|
||||||
|
PQclear (result);
|
||||||
|
if (GNUNET_OK != ret)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
postgres_rollback (cls, session);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert information about deposited coin into the database.
|
* Insert information about deposited coin into the database.
|
||||||
*
|
*
|
||||||
@ -3280,6 +3394,7 @@ libtaler_plugin_mintdb_postgres_init (void *cls)
|
|||||||
plugin->get_reserve_history = &postgres_get_reserve_history;
|
plugin->get_reserve_history = &postgres_get_reserve_history;
|
||||||
plugin->free_reserve_history = &common_free_reserve_history;
|
plugin->free_reserve_history = &common_free_reserve_history;
|
||||||
plugin->have_deposit = &postgres_have_deposit;
|
plugin->have_deposit = &postgres_have_deposit;
|
||||||
|
plugin->iterate_deposits = &postgres_iterate_deposits;
|
||||||
plugin->insert_deposit = &postgres_insert_deposit;
|
plugin->insert_deposit = &postgres_insert_deposit;
|
||||||
|
|
||||||
plugin->get_refresh_session = &postgres_get_refresh_session;
|
plugin->get_refresh_session = &postgres_get_refresh_session;
|
||||||
|
Loading…
Reference in New Issue
Block a user