[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-donau] branch master updated: [db] working on headers
From: |
gnunet |
Subject: |
[taler-donau] branch master updated: [db] working on headers |
Date: |
Mon, 23 Oct 2023 13:55:09 +0200 |
This is an automated email from the git hooks/post-receive script.
johannes-casaburi pushed a commit to branch master
in repository donau.
The following commit(s) were added to refs/heads/master by this push:
new 71fb5c1 [db] working on headers
71fb5c1 is described below
commit 71fb5c13bfe8dbcdae5eb06cb87115d2d87e7bb0
Author: Casaburi Johannes <johannes.casaburi@students.bfh.ch>
AuthorDate: Mon Oct 23 13:54:35 2023 +0200
[db] working on headers
---
src/donaudb/donau-0002.sql.in | 56 -
src/include/taler_donaudb_plugin.h | 7070 +-----------------------------------
2 files changed, 34 insertions(+), 7092 deletions(-)
diff --git a/src/donaudb/donau-0002.sql.in b/src/donaudb/donau-0002.sql.in
index bb835d1..ac63edb 100644
--- a/src/donaudb/donau-0002.sql.in
+++ b/src/donaudb/donau-0002.sql.in
@@ -37,65 +37,9 @@ COMMENT ON TYPE donau_do_array_reserve_insert_return_type
#include "0002-denominations.sql"
#include "0002-denomination_revocations.sql"
-#include "0002-wire_targets.sql"
-#include "0002-kyc_alerts.sql"
-#include "0002-wire_fee.sql"
-#include "0002-global_fee.sql"
-#include "0002-wire_accounts.sql"
-#include "0002-auditors.sql"
-#include "0002-auditor_denom_sigs.sql"
#include "0002-donau_sign_keys.sql"
#include "0002-signkey_revocations.sql"
-#include "0002-extensions.sql"
-#include "0002-profit_drains.sql"
-#include "0002-legitimization_processes.sql"
-#include "0002-legitimization_requirements.sql"
-#include "0002-reserves.sql"
-#include "0002-reserves_in.sql"
-#include "0002-reserves_close.sql"
-#include "0002-close_requests.sql"
-#include "0002-reserves_open_deposits.sql"
-#include "0002-reserves_open_requests.sql"
-#include "0002-reserves_out.sql"
#include "0002-known_coins.sql"
-#include "0002-coin_history.sql"
-#include "0002-refresh_commitments.sql"
-#include "0002-refresh_revealed_coins.sql"
-#include "0002-refresh_transfer_keys.sql"
-#include "0002-batch_deposits.sql"
-#include "0002-coin_deposits.sql"
-#include "0002-refunds.sql"
-#include "0002-wire_out.sql"
-#include "0002-aggregation_transient.sql"
-#include "0002-aggregation_tracking.sql"
-#include "0002-recoup.sql"
-#include "0002-recoup_refresh.sql"
-#include "0002-prewire.sql"
-#include "0002-cs_nonce_locks.sql"
-#include "0002-purse_requests.sql"
-#include "0002-purse_merges.sql"
-#include "0002-account_merges.sql"
-#include "0002-purse_decision.sql"
-#include "0002-contracts.sql"
#include "0002-history_requests.sql"
-#include "0002-purse_deposits.sql"
-#include "0002-wads_in.sql"
-#include "0002-wad_in_entries.sql"
-#include "0002-wads_out.sql"
-#include "0002-wad_out_entries.sql"
-#include "0002-policy_fulfillments.sql"
-#include "0002-policy_details.sql"
-#include "0002-work_shards.sql"
-#include "0002-revolving_work_shards.sql"
-#include "0002-partners.sql"
-#include "0002-partner_accounts.sql"
-#include "0002-purse_actions.sql"
-#include "0002-purse_deletion.sql"
-#include "0002-kyc_attributes.sql"
-#include "0002-aml_status.sql"
-#include "0002-aml_staff.sql"
-#include "0002-aml_history.sql"
-#include "0002-age_withdraw.sql"
-
COMMIT;
diff --git a/src/include/taler_donaudb_plugin.h
b/src/include/taler_donaudb_plugin.h
index 5eef401..b5e2aa0 100644
--- a/src/include/taler_donaudb_plugin.h
+++ b/src/include/taler_donaudb_plugin.h
@@ -16,9 +16,7 @@
/**
* @file include/taler_donaudb_plugin.h
* @brief Low-level (statement-level) database access for the donau
- * @author Florian Dold
- * @author Christian Grothoff
- * @author Özgür Kesim
+ * @author Johannes Casaburi
*/
#ifndef TALER_DONAUDB_PLUGIN_H
#define TALER_DONAUDB_PLUGIN_H
@@ -29,199 +27,36 @@
#include "taler_signatures.h"
#include "taler_extensions_policy.h"
-
-/**
- * Per-coin information returned when doing a batch insert.
- */
-struct TALER_DONAUDB_CoinInfo
-{
- /**
- * Row of the coin in the known_coins table.
- */
- uint64_t known_coin_id;
-
- /**
- * Hash of the denomination, relevant on @e denom_conflict.
- */
- struct TALER_DenominationHashP denom_hash;
-
- /**
- * Hash of the age commitment, relevant on @e age_conflict.
- */
- struct TALER_AgeCommitmentHash h_age_commitment;
-
- /**
- * True if the coin was known previously.
- */
- bool existed;
-
- /**
- * True if the known coin has a different denomination;
- * application will find denomination of the already
- * known coin in @e denom_hash.
- */
- bool denom_conflict;
-
- /**
- * True if the known coin has a different age restriction;
- * application will find age commitment of the already
- * known coin in @e h_age_commitment.
- */
- bool age_conflict;
-};
-
-
/**
- * Information about a denomination key.
+ * Information about a donation unit key.
*/
-struct TALER_DONAUDB_DenominationKeyInformation
+struct TALER_DONAUDB_DonationUnitKeyInformation
{
-
- /**
- * Signature over this struct to affirm the validity of the key.
- */
- struct TALER_MasterSignatureP signature;
-
- /**
- * Start time of the validity period for this key.
- */
- struct GNUNET_TIME_Timestamp start;
-
- /**
- * The donau will sign fresh coins between @e start and this time.
- * @e expire_withdraw will be somewhat larger than @e start to
- * ensure a sufficiently large anonymity set, while also allowing
- * the Donau to limit the financial damage in case of a key being
- * compromised. Thus, donaus with low volume are expected to have a
- * longer withdraw period (@e expire_withdraw - @e start) than donaus
- * with high transaction volume. The period may also differ between
- * types of coins. A donau may also have a few denomination keys
- * with the same value with overlapping validity periods, to address
- * issues such as clock skew.
- */
- struct GNUNET_TIME_Timestamp expire_withdraw;
-
/**
- * Coins signed with the denomination key must be spent or refreshed
- * between @e start and this expiration time. After this time, the
- * donau will refuse transactions involving this key as it will
- * "drop" the table with double-spending information (shortly after)
- * this time. Note that wallets should refresh coins significantly
- * before this time to be on the safe side. @e expire_deposit must be
- * significantly larger than @e expire_withdraw (by months or even
- * years).
- */
- struct GNUNET_TIME_Timestamp expire_deposit;
-
- /**
- * When do signatures with this denomination key become invalid?
- * After this point, these signatures cannot be used in (legal)
- * disputes anymore, as the Donau is then allowed to destroy its side
- * of the evidence. @e expire_legal is expected to be significantly
- * larger than @e expire_deposit (by a year or more).
+ * Serial of the donation unit key as in the DB.
*/
- struct GNUNET_TIME_Timestamp expire_legal;
+ uint64_t serial;
/**
- * The value of the coins signed with this denomination key.
+ * The value of the donation unit.
*/
struct TALER_Amount value;
/**
- * Fees for the coin.
- */
- struct TALER_DenomFeeSet fees;
-
- /**
- * Hash code of the denomination public key. (Used to avoid having
- * the variable-size RSA key in this struct.)
- */
- struct TALER_DenominationHashP denom_hash;
-
- /**
- * If denomination was setup for age restriction, non-zero age mask.
- * Note that the mask is not part of the signature.
- */
- struct TALER_AgeMask age_mask;
-};
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * Events signalling that a coin deposit status
- * changed.
- */
-struct TALER_CoinDepositEventP
-{
- /**
- * Of type #TALER_DBEVENT_DONAU_DEPOSIT_STATUS_CHANGED.
- */
- struct GNUNET_DB_EventHeaderP header;
-
- /**
- * Public key of the charity.
- */
- struct TALER_CharityPublicKeyP charity_pub;
-
-};
-
-/**
- * Events signalling a reserve got funding.
- */
-struct TALER_ReserveEventP
-{
- /**
- * Of type #TALER_DBEVENT_DONAU_RESERVE_INCOMING.
- */
- struct GNUNET_DB_EventHeaderP header;
-
- /**
- * Public key of the reserve the event is about.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-};
-
-
-/**
- * Signature of events signalling a purse changed its status.
- */
-struct TALER_PurseEventP
-{
- /**
- * Of type #TALER_DBEVENT_DONAU_PURSE_MERGED or
- * #TALER_DBEVENT_DONAU_PURSE_DEPOSITED.
- */
- struct GNUNET_DB_EventHeaderP header;
-
- /**
- * Public key of the purse the event is about.
+ * The year for which this donation unit is valid.
*/
- struct TALER_PurseContractPublicKeyP purse_pub;
-};
-
+ uint64_t validity_year;
-/**
- * Signature of events signalling a KYC process was completed.
- */
-struct TALER_KycCompletedEventP
-{
/**
- * Of type #TALER_DBEVENT_DONAU_KYC_COMPLETED.
+ * Hash code of the donation unit public key.
*/
- struct GNUNET_DB_EventHeaderP header;
+ struct TALER_DonationUnitHashP donation_unit_hash;
- /**
- * Public key of the reserve the event is about.
- */
- struct TALER_PaytoHashP h_payto;
};
-GNUNET_NETWORK_STRUCT_END
-
/**
- * Meta data about an donau online signing key.
+ * Meta data about an donau signing key.
*/
struct TALER_DONAUDB_SignkeyMetaData
{
@@ -246,6888 +81,51 @@ struct TALER_DONAUDB_SignkeyMetaData
};
-
-/**
- * Enumeration of all of the tables replicated by donau-auditor
- * database replication.
- */
-enum TALER_DONAUDB_ReplicatedTable
-{
- /* From donau-0002.sql: */
- TALER_DONAUDB_RT_DENOMINATIONS,
- TALER_DONAUDB_RT_DENOMINATION_REVOCATIONS,
- TALER_DONAUDB_RT_WIRE_TARGETS,
- TALER_DONAUDB_RT_LEGITIMIZATION_PROCESSES,
- TALER_DONAUDB_RT_LEGITIMIZATION_REQUIREMENTS,
- TALER_DONAUDB_RT_RESERVES,
- TALER_DONAUDB_RT_RESERVES_IN,
- TALER_DONAUDB_RT_RESERVES_CLOSE,
- TALER_DONAUDB_RT_RESERVES_OPEN_REQUESTS,
- TALER_DONAUDB_RT_RESERVES_OPEN_DEPOSITS,
- TALER_DONAUDB_RT_RESERVES_OUT,
- TALER_DONAUDB_RT_AUDITORS,
- TALER_DONAUDB_RT_AUDITOR_DENOM_SIGS,
- TALER_DONAUDB_RT_DONAU_SIGN_KEYS,
- TALER_DONAUDB_RT_SIGNKEY_REVOCATIONS,
- TALER_DONAUDB_RT_KNOWN_COINS,
- TALER_DONAUDB_RT_REFRESH_COMMITMENTS,
- TALER_DONAUDB_RT_REFRESH_REVEALED_COINS,
- TALER_DONAUDB_RT_REFRESH_TRANSFER_KEYS,
- TALER_DONAUDB_RT_BATCH_DEPOSITS,
- TALER_DONAUDB_RT_COIN_DEPOSITS,
- TALER_DONAUDB_RT_REFUNDS,
- TALER_DONAUDB_RT_WIRE_OUT,
- TALER_DONAUDB_RT_AGGREGATION_TRACKING,
- TALER_DONAUDB_RT_WIRE_FEE,
- TALER_DONAUDB_RT_GLOBAL_FEE,
- TALER_DONAUDB_RT_RECOUP,
- TALER_DONAUDB_RT_RECOUP_REFRESH,
- TALER_DONAUDB_RT_EXTENSIONS,
- TALER_DONAUDB_RT_POLICY_DETAILS,
- TALER_DONAUDB_RT_POLICY_FULFILLMENTS,
- TALER_DONAUDB_RT_PURSE_REQUESTS,
- TALER_DONAUDB_RT_PURSE_DECISION,
- TALER_DONAUDB_RT_PURSE_MERGES,
- TALER_DONAUDB_RT_PURSE_DEPOSITS,
- TALER_DONAUDB_RT_ACCOUNT_MERGES,
- TALER_DONAUDB_RT_HISTORY_REQUESTS,
- TALER_DONAUDB_RT_CLOSE_REQUESTS,
- TALER_DONAUDB_RT_WADS_OUT,
- TALER_DONAUDB_RT_WADS_OUT_ENTRIES,
- TALER_DONAUDB_RT_WADS_IN,
- TALER_DONAUDB_RT_WADS_IN_ENTRIES,
- TALER_DONAUDB_RT_PROFIT_DRAINS,
- /* From donau-0003.sql: */
- TALER_DONAUDB_RT_AML_STAFF,
- TALER_DONAUDB_RT_AML_HISTORY,
- TALER_DONAUDB_RT_KYC_ATTRIBUTES,
- TALER_DONAUDB_RT_PURSE_DELETION,
- TALER_DONAUDB_RT_AGE_WITHDRAW,
-};
-
-
/**
- * Record of a single entry in a replicated table.
+ * @brief All information about a donation unit key.
*/
-struct TALER_DONAUDB_TableData
+struct TALER_DONAUDB_DonationUnitKey
{
/**
- * Data of which table is returned here?
- */
- enum TALER_DONAUDB_ReplicatedTable table;
-
- /**
- * Serial number of the record.
+ * The private key of the donation unit. Will be NULL if the private
+ * key is not available.
*/
- uint64_t serial;
+ struct TALER_DonationUnitPrivateKey donation_unit_priv;
/**
- * Table-specific details.
+ * Decoded donation unit public key.
*/
- union
- {
-
- /**
- * Details from the 'denominations' table.
- */
- struct
- {
- uint32_t denom_type;
- uint32_t age_mask;
- struct TALER_DenominationPublicKey denom_pub;
- struct TALER_MasterSignatureP master_sig;
- struct GNUNET_TIME_Timestamp valid_from;
- struct GNUNET_TIME_Timestamp expire_withdraw;
- struct GNUNET_TIME_Timestamp expire_deposit;
- struct GNUNET_TIME_Timestamp expire_legal;
- struct TALER_Amount coin;
- struct TALER_DenomFeeSet fees;
- } denominations;
-
- struct
- {
- struct TALER_MasterSignatureP master_sig;
- uint64_t denominations_serial;
- } denomination_revocations;
-
- struct
- {
- char *payto_uri;
- } wire_targets;
-
- struct
- {
- struct TALER_PaytoHashP h_payto;
- struct GNUNET_TIME_Timestamp expiration_time;
- char *provider_section;
- char *provider_user_id;
- char *provider_legitimization_id;
- } legitimization_processes;
-
- struct
- {
- struct TALER_PaytoHashP h_payto;
- struct TALER_ReservePublicKeyP reserve_pub;
- bool no_reserve_pub;
- char *required_checks;
- } legitimization_requirements;
-
- struct
- {
- struct TALER_ReservePublicKeyP reserve_pub;
- struct GNUNET_TIME_Timestamp expiration_date;
- struct GNUNET_TIME_Timestamp gc_date;
- } reserves;
-
- struct
- {
- uint64_t wire_reference;
- struct TALER_Amount credit;
- struct TALER_PaytoHashP sender_account_h_payto;
- char *donau_account_section;
- struct GNUNET_TIME_Timestamp execution_date;
- struct TALER_ReservePublicKeyP reserve_pub;
- } reserves_in;
-
- struct
- {
- struct TALER_ReservePublicKeyP reserve_pub;
- struct GNUNET_TIME_Timestamp request_timestamp;
- struct GNUNET_TIME_Timestamp expiration_date;
- struct TALER_ReserveSignatureP reserve_sig;
- struct TALER_Amount reserve_payment;
- uint32_t requested_purse_limit;
- } reserves_open_requests;
-
- struct
- {
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_CoinSpendPublicKeyP coin_pub;
- struct TALER_CoinSpendSignatureP coin_sig;
- struct TALER_ReserveSignatureP reserve_sig;
- struct TALER_Amount contribution;
- } reserves_open_deposits;
-
- struct
- {
- struct TALER_ReservePublicKeyP reserve_pub;
- struct GNUNET_TIME_Timestamp execution_date;
- struct TALER_WireTransferIdentifierRawP wtid;
- struct TALER_PaytoHashP sender_account_h_payto;
- struct TALER_Amount amount;
- struct TALER_Amount closing_fee;
- } reserves_close;
-
- struct
- {
- struct TALER_BlindedCoinHashP h_blind_ev;
- uint64_t denominations_serial;
- struct TALER_BlindedDenominationSignature denom_sig;
- uint64_t reserve_uuid;
- struct TALER_ReserveSignatureP reserve_sig;
- struct GNUNET_TIME_Timestamp execution_date;
- struct TALER_Amount amount_with_fee;
- } reserves_out;
-
- struct
- {
- struct TALER_AuditorPublicKeyP auditor_pub;
- char *auditor_url;
- char *auditor_name;
- bool is_active;
- struct GNUNET_TIME_Timestamp last_change;
- } auditors;
-
- struct
- {
- uint64_t auditor_uuid;
- uint64_t denominations_serial;
- struct TALER_AuditorSignatureP auditor_sig;
- } auditor_denom_sigs;
-
- struct
- {
- struct TALER_DonauPublicKeyP donau_pub;
- struct TALER_MasterSignatureP master_sig;
- struct TALER_DONAUDB_SignkeyMetaData meta;
- } donau_sign_keys;
-
- struct
- {
- uint64_t esk_serial;
- struct TALER_MasterSignatureP master_sig;
- } signkey_revocations;
-
- struct
- {
- struct TALER_CoinSpendPublicKeyP coin_pub;
- struct TALER_AgeCommitmentHash age_hash;
- uint64_t denominations_serial;
- struct TALER_DenominationSignature denom_sig;
- } known_coins;
-
- struct
- {
- struct TALER_RefreshCommitmentP rc;
- struct TALER_CoinSpendPublicKeyP old_coin_pub;
- struct TALER_CoinSpendSignatureP old_coin_sig;
- struct TALER_Amount amount_with_fee;
- uint32_t noreveal_index;
- } refresh_commitments;
-
- struct
- {
- uint64_t melt_serial_id;
- uint32_t freshcoin_index;
- struct TALER_CoinSpendSignatureP link_sig;
- uint64_t denominations_serial;
- void *coin_ev;
- size_t coin_ev_size;
- struct TALER_DonauWithdrawValues ewv;
- // h_coin_ev omitted, to be recomputed!
- struct TALER_BlindedDenominationSignature ev_sig;
- } refresh_revealed_coins;
-
- struct
- {
- uint64_t melt_serial_id;
- struct TALER_TransferPublicKeyP tp;
- struct TALER_TransferPrivateKeyP tprivs[TALER_CNC_KAPPA - 1];
- } refresh_transfer_keys;
-
- struct
- {
- uint64_t shard;
- struct TALER_CharityPublicKeyP charity_pub;
- struct GNUNET_TIME_Timestamp wallet_timestamp;
- struct GNUNET_TIME_Timestamp donau_timestamp;
- struct GNUNET_TIME_Timestamp refund_deadline;
- struct GNUNET_TIME_Timestamp wire_deadline;
- struct TALER_PrivateContractHashP h_contract_terms;
- struct GNUNET_HashCode wallet_data_hash;
- bool no_wallet_data_hash;
- struct TALER_WireSaltP wire_salt;
- struct TALER_PaytoHashP wire_target_h_payto;
- bool policy_blocked;
- uint64_t policy_details_serial_id;
- bool no_policy_details;
- } batch_deposits;
-
- struct
- {
- uint64_t batch_deposit_serial_id;
- struct TALER_CoinSpendPublicKeyP coin_pub;
- struct TALER_CoinSpendSignatureP coin_sig;
- struct TALER_Amount amount_with_fee;
- } coin_deposits;
-
- struct
- {
- struct TALER_CoinSpendPublicKeyP coin_pub;
- uint64_t batch_deposit_serial_id;
- struct TALER_CharitySignatureP charity_sig;
- uint64_t rtransaction_id;
- struct TALER_Amount amount_with_fee;
- } refunds;
-
- struct
- {
- struct GNUNET_TIME_Timestamp execution_date;
- struct TALER_WireTransferIdentifierRawP wtid_raw;
- struct TALER_PaytoHashP wire_target_h_payto;
- char *donau_account_section;
- struct TALER_Amount amount;
- } wire_out;
-
- struct
- {
- uint64_t batch_deposit_serial_id;
- struct TALER_WireTransferIdentifierRawP wtid_raw;
- } aggregation_tracking;
-
- struct
- {
- char *wire_method;
- struct GNUNET_TIME_Timestamp start_date;
- struct GNUNET_TIME_Timestamp end_date;
- struct TALER_WireFeeSet fees;
- struct TALER_MasterSignatureP master_sig;
- } wire_fee;
-
- struct
- {
- struct GNUNET_TIME_Timestamp start_date;
- struct GNUNET_TIME_Timestamp end_date;
- struct TALER_GlobalFeeSet fees;
- struct GNUNET_TIME_Relative purse_timeout;
- struct GNUNET_TIME_Relative history_expiration;
- uint32_t purse_account_limit;
- struct TALER_MasterSignatureP master_sig;
- } global_fee;
-
- struct
- {
- struct TALER_CoinSpendPublicKeyP coin_pub;
- struct TALER_CoinSpendSignatureP coin_sig;
- union TALER_DenominationBlindingKeyP coin_blind;
- struct TALER_Amount amount;
- struct GNUNET_TIME_Timestamp timestamp;
- uint64_t reserve_out_serial_id;
- } recoup;
-
- struct
- {
- uint64_t known_coin_id;
- struct TALER_CoinSpendPublicKeyP coin_pub;
- struct TALER_CoinSpendSignatureP coin_sig;
- union TALER_DenominationBlindingKeyP coin_blind;
- struct TALER_Amount amount;
- struct GNUNET_TIME_Timestamp timestamp;
- uint64_t rrc_serial;
- } recoup_refresh;
-
- struct
- {
- char *name;
- char *manifest;
- } extensions;
-
- struct
- {
- struct GNUNET_HashCode hash_code;
- json_t *policy_json;
- bool no_policy_json;
- struct GNUNET_TIME_Timestamp deadline;
- struct TALER_Amount commitment;
- struct TALER_Amount accumulated_total;
- struct TALER_Amount fee;
- struct TALER_Amount transferable;
- uint16_t fulfillment_state; /* will also be recomputed */
- uint64_t fulfillment_id;
- bool no_fulfillment_id;
- } policy_details;
-
- struct
- {
- struct GNUNET_TIME_Timestamp fulfillment_timestamp;
- char *fulfillment_proof;
- struct GNUNET_HashCode h_fulfillment_proof;
- struct GNUNET_HashCode *policy_hash_codes;
- size_t policy_hash_codes_count;
- } policy_fulfillments;
-
- struct
- {
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct TALER_PurseMergePublicKeyP merge_pub;
- struct GNUNET_TIME_Timestamp purse_creation;
- struct GNUNET_TIME_Timestamp purse_expiration;
- struct TALER_PrivateContractHashP h_contract_terms;
- uint32_t age_limit;
- uint32_t flags;
- struct TALER_Amount amount_with_fee;
- struct TALER_Amount purse_fee;
- struct TALER_PurseContractSignatureP purse_sig;
- } purse_requests;
-
- struct
- {
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct GNUNET_TIME_Timestamp action_timestamp;
- bool refunded;
- } purse_decision;
-
- struct
- {
- uint64_t partner_serial_id;
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct TALER_PurseMergeSignatureP merge_sig;
- struct GNUNET_TIME_Timestamp merge_timestamp;
- } purse_merges;
-
- struct
- {
- uint64_t partner_serial_id;
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct TALER_CoinSpendPublicKeyP coin_pub;
- struct TALER_Amount amount_with_fee;
- struct TALER_CoinSpendSignatureP coin_sig;
- } purse_deposits;
-
- struct
- {
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_ReserveSignatureP reserve_sig;
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct TALER_PaytoHashP wallet_h_payto;
- } account_merges;
-
- struct
- {
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_ReserveSignatureP reserve_sig;
- struct GNUNET_TIME_Timestamp request_timestamp;
- struct TALER_Amount history_fee;
- } history_requests;
-
- struct
- {
- struct TALER_ReservePublicKeyP reserve_pub;
- struct GNUNET_TIME_Timestamp close_timestamp;
- struct TALER_ReserveSignatureP reserve_sig;
- struct TALER_Amount close;
- struct TALER_Amount close_fee;
- char *payto_uri;
- } close_requests;
-
- struct
- {
- struct TALER_WadIdentifierP wad_id;
- uint64_t partner_serial_id;
- struct TALER_Amount amount;
- struct GNUNET_TIME_Timestamp execution_time;
- } wads_out;
-
- struct
- {
- uint64_t wad_out_serial_id;
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct TALER_PrivateContractHashP h_contract;
- struct GNUNET_TIME_Timestamp purse_expiration;
- struct GNUNET_TIME_Timestamp merge_timestamp;
- struct TALER_Amount amount_with_fee;
- struct TALER_Amount wad_fee;
- struct TALER_Amount deposit_fees;
- struct TALER_ReserveSignatureP reserve_sig;
- struct TALER_PurseContractSignatureP purse_sig;
- } wads_out_entries;
-
- struct
- {
- struct TALER_WadIdentifierP wad_id;
- char *origin_donau_url;
- struct TALER_Amount amount;
- struct GNUNET_TIME_Timestamp arrival_time;
- } wads_in;
-
- struct
- {
- uint64_t wad_in_serial_id;
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct TALER_PrivateContractHashP h_contract;
- struct GNUNET_TIME_Timestamp purse_expiration;
- struct GNUNET_TIME_Timestamp merge_timestamp;
- struct TALER_Amount amount_with_fee;
- struct TALER_Amount wad_fee;
- struct TALER_Amount deposit_fees;
- struct TALER_ReserveSignatureP reserve_sig;
- struct TALER_PurseContractSignatureP purse_sig;
- } wads_in_entries;
-
- struct
- {
- struct TALER_WireTransferIdentifierRawP wtid;
- char *account_section;
- char *payto_uri;
- struct GNUNET_TIME_Timestamp trigger_date;
- struct TALER_Amount amount;
- struct TALER_MasterSignatureP master_sig;
- } profit_drains;
-
- struct
- {
- struct TALER_AmlOfficerPublicKeyP decider_pub;
- struct TALER_MasterSignatureP master_sig;
- char *decider_name;
- bool is_active;
- bool read_only;
- struct GNUNET_TIME_Timestamp last_change;
- } aml_staff;
-
- struct
- {
- struct TALER_PaytoHashP h_payto;
- struct TALER_Amount new_threshold;
- enum TALER_AmlDecisionState new_status;
- struct GNUNET_TIME_Timestamp decision_time;
- char *justification;
- char *kyc_requirements; /* NULL allowed! */
- uint64_t kyc_req_row;
- struct TALER_AmlOfficerPublicKeyP decider_pub;
- struct TALER_AmlOfficerSignatureP decider_sig;
- } aml_history;
-
- struct
- {
- struct TALER_PaytoHashP h_payto;
- struct GNUNET_ShortHashCode kyc_prox;
- char *provider;
- struct GNUNET_TIME_Timestamp collection_time;
- struct GNUNET_TIME_Timestamp expiration_time;
- void *encrypted_attributes;
- size_t encrypted_attributes_size;
- } kyc_attributes;
-
- struct
- {
- struct TALER_PurseContractPublicKeyP purse_pub;
- struct TALER_PurseContractSignatureP purse_sig;
- } purse_deletion;
-
- struct
- {
- struct TALER_AgeWithdrawCommitmentHashP h_commitment;
- struct TALER_Amount amount_with_fee;
- uint16_t max_age;
- uint32_t noreveal_index;
- struct TALER_ReservePublicKeyP reserve_pub;
- struct TALER_ReserveSignatureP reserve_sig;
- uint64_t num_coins;
- uint64_t *denominations_serials;
- void *h_blind_evs;
- struct TALER_BlindedDenominationSignature denom_sigs;
- } age_withdraw;
-
- } details;
+ struct TALER_DonationUnitPublicKey donation_unit_pub;
};
/**
- * Function called on data to replicate in the auditor's database.
+ * Signature of a function called with information about the donau's
+ * donation unit keys.
*
- * @param cls closure
- * @param td record from an donau table
- * @return #GNUNET_OK to continue to iterate,
- * #GNUNET_SYSERR to fail with an error
+ * @param cls closure with a `struct TEH_KeyStateHandle *`
+ * @param donation_unit_pub public key of the donation unit
+ * @param info donation unit key information
*/
-typedef int
-(*TALER_DONAUDB_ReplicationCallback)(
+typedef void
+(*TALER_DONAUDB_DonationUnitsCallback)(
void *cls,
- const struct TALER_DONAUDB_TableData *td);
-
-
-/**
- * @brief All information about a denomination key (which is used to
- * sign coins into existence).
- */
-struct TALER_DONAUDB_DenominationKey
-{
- /**
- * The private key of the denomination. Will be NULL if the private
- * key is not available (this is the case after the key has expired
- * for signing coins, but is still valid for depositing coins).
- */
- struct TALER_DenominationPrivateKey denom_priv;
-
- /**
- * Decoded denomination public key (the hash of it is in
- * @e issue, but we sometimes need the full public key as well).
- */
- struct TALER_DenominationPublicKey denom_pub;
-
- /**
- * Signed public information about a denomination key.
- */
- struct TALER_DONAUDB_DenominationKeyInformation issue;
-};
-
-
-/**
- * @brief Information we keep on bank transfer(s) that established a reserve.
- */
-struct TALER_DONAUDB_BankTransfer
-{
-
- /**
- * Public key of the reserve that was filled.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * Amount that was transferred to the donau.
- */
- struct TALER_Amount amount;
-
- /**
- * When did the donau receive the incoming transaction?
- * (This is the execution date of the donau's database,
- * the execution date of the bank should be in @e wire).
- */
- struct GNUNET_TIME_Timestamp execution_date;
-
- /**
- * Detailed wire information about the sending account
- * in "payto://" format.
- */
- char *sender_account_details;
-
- /**
- * Data uniquely identifying the wire transfer (wire transfer-type specific)
- */
- uint64_t wire_reference;
-
-};
-
-
-/**
- * @brief Information we keep on bank transfer(s) that
- * closed a reserve.
- */
-struct TALER_DONAUDB_ClosingTransfer
-{
-
- /**
- * Public key of the reserve that was depleted.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * Amount that was transferred from the donau.
- */
- struct TALER_Amount amount;
-
- /**
- * Amount that was charged by the donau.
- */
- struct TALER_Amount closing_fee;
-
- /**
- * When did the donau execute the transaction?
- */
- struct GNUNET_TIME_Timestamp execution_date;
-
- /**
- * Detailed wire information about the receiving account
- * in payto://-format.
- */
- char *receiver_account_details;
-
- /**
- * Detailed wire transfer information that uniquely identifies the
- * wire transfer.
- */
- struct TALER_WireTransferIdentifierRawP wtid;
-
-};
-
-
-/**
- * @brief A summary of a Reserve
- */
-struct TALER_DONAUDB_Reserve
-{
- /**
- * The reserve's public key. This uniquely identifies the reserve
- */
- struct TALER_ReservePublicKeyP pub;
-
- /**
- * The balance amount existing in the reserve
- */
- struct TALER_Amount balance;
-
- /**
- * The expiration date of this reserve; funds will be wired back
- * at this time.
- */
- struct GNUNET_TIME_Timestamp expiry;
-
- /**
- * The legal expiration date of this reserve; we will forget about
- * it at this time.
- */
- struct GNUNET_TIME_Timestamp gc;
-};
+ const struct TALER_DonationUnitPublicKey *donation_unit_pub,
+ const struct TALER_DONAUDB_DonationUnitKeyInformation *info);
/**
- * Meta data about a denomination public key.
- */
-struct TALER_DONAUDB_DenominationKeyMetaData
-{
- /**
- * Serial of the denomination key as in the DB.
- * Can be used in calls to stored procedures in order to spare
- * additional lookups.
- */
- uint64_t serial;
-
- /**
- * Start time of the validity period for this key.
- */
- struct GNUNET_TIME_Timestamp start;
-
- /**
- * The donau will sign fresh coins between @e start and this time.
- * @e expire_withdraw will be somewhat larger than @e start to
- * ensure a sufficiently large anonymity set, while also allowing
- * the Donau to limit the financial damage in case of a key being
- * compromised. Thus, donaus with low volume are expected to have a
- * longer withdraw period (@e expire_withdraw - @e start) than donaus
- * with high transaction volume. The period may also differ between
- * types of coins. A donau may also have a few denomination keys
- * with the same value with overlapping validity periods, to address
- * issues such as clock skew.
- */
- struct GNUNET_TIME_Timestamp expire_withdraw;
-
- /**
- * Coins signed with the denomination key must be spent or refreshed
- * between @e start and this expiration time. After this time, the
- * donau will refuse transactions involving this key as it will
- * "drop" the table with double-spending information (shortly after)
- * this time. Note that wallets should refresh coins significantly
- * before this time to be on the safe side. @e expire_deposit must be
- * significantly larger than @e expire_withdraw (by months or even
- * years).
- */
- struct GNUNET_TIME_Timestamp expire_deposit;
-
- /**
- * When do signatures with this denomination key become invalid?
- * After this point, these signatures cannot be used in (legal)
- * disputes anymore, as the Donau is then allowed to destroy its side
- * of the evidence. @e expire_legal is expected to be significantly
- * larger than @e expire_deposit (by a year or more).
- */
- struct GNUNET_TIME_Timestamp expire_legal;
-
- /**
- * The value of the coins signed with this denomination key.
- */
- struct TALER_Amount value;
-
- /**
- * The fees the donau charges for operations with
- * coins of this denomination.
- */
- struct TALER_DenomFeeSet fees;
-
- /**
- * Age restriction for the denomination. (can be zero). If not zero, the bits
- * set in the mask mark the edges at the beginning of a next age group. F.e.
- * for the age groups
- * 0-7, 8-9, 10-11, 12-14, 14-15, 16-17, 18-21, 21-*
- * the following bits are set:
- *
- * 31 24 16 8 0
- * | | | | |
- * oooooooo oo1oo1o1 o1o1o1o1 ooooooo1
- *
- * A value of 0 means that the denomination does not support the extension
for
- * age-restriction.
- */
- struct TALER_AgeMask age_mask;
-};
-
-
-/**
- * Signature of a function called with information about the donau's
- * denomination keys.
- *
- * @param cls closure with a `struct TEH_KeyStateHandle *`
- * @param denom_pub public key of the denomination
- * @param h_denom_pub hash of @a denom_pub
- * @param meta meta data information about the denomination type (value,
expirations, fees)
- * @param master_sig master signature affirming the validity of this
denomination
- * @param recoup_possible true if the key was revoked and clients can
currently recoup
- * coins of this denomination
- */
-typedef void
-(*TALER_DONAUDB_DenominationsCallback)(
- void *cls,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DenominationHashP *h_denom_pub,
- const struct TALER_DONAUDB_DenominationKeyMetaData *meta,
- const struct TALER_MasterSignatureP *master_sig,
- bool recoup_possible);
-
-
-/**
- * Signature of a function called with information about the donau's
- * online signing keys.
- *
- * @param cls closure with a `struct TEH_KeyStateHandle *`
- * @param donau_pub public key of the donau
- * @param meta meta data information about the signing type (expirations)
- * @param master_sig master signature affirming the validity of this
denomination
+ * Signature of a function called with information about the donau's
+ * signing keys.
+ *
+ * @param cls closure with a `struct TEH_KeyStateHandle *`
+ * @param donau_pub public key of the donau
+ * @param meta meta data information about the signing type (expirations)
*/
typedef void
(*TALER_DONAUDB_ActiveSignkeysCallback)(
void *cls,
const struct TALER_DonauPublicKeyP *donau_pub,
- const struct TALER_DONAUDB_SignkeyMetaData *meta,
- const struct TALER_MasterSignatureP *master_sig);
-
-
-/**
- * Function called on all KYC process names that the given
- * account has already passed.
- *
- * @param cls closure
- * @param kyc_provider_section_name configuration section
- * of the respective KYC process
- */
-typedef void
-(*TALER_DONAUDB_SatisfiedProviderCallback)(
- void *cls,
- const char *kyc_provider_section_name);
-
-
-/**
- * Function called on all legitimization operations
- * we have performed for the given account so far
- * (and that have not yet expired).
- *
- * @param cls closure
- * @param kyc_provider_section_name configuration section
- * of the respective KYC process
- * @param provider_user_id UID at a provider (can be NULL)
- * @param legi_id legitimization process ID (can be NULL)
- */
-typedef void
-(*TALER_DONAUDB_LegitimizationProcessCallback)(
- void *cls,
- const char *kyc_provider_section_name,
- const char *provider_user_id,
- const char *legi_id);
-
-
-/**
- * Function called with information about the donau's auditors.
- *
- * @param cls closure with a `struct TEH_KeyStateHandle *`
- * @param auditor_pub the public key of the auditor
- * @param auditor_url URL of the REST API of the auditor
- * @param auditor_name human readable official name of the auditor
- */
-typedef void
-(*TALER_DONAUDB_AuditorsCallback)(
- void *cls,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- const char *auditor_url,
- const char *auditor_name);
-
-
-/**
- * Function called with information about the denominations
- * audited by the donau's auditors.
- *
- * @param cls closure with a `struct TEH_KeyStateHandle *`
- * @param auditor_pub the public key of an auditor
- * @param h_denom_pub hash of a denomination key audited by this auditor
- * @param auditor_sig signature from the auditor affirming this
- */
-typedef void
-(*TALER_DONAUDB_AuditorDenominationsCallback)(
- void *cls,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- const struct TALER_DenominationHashP *h_denom_pub,
- const struct TALER_AuditorSignatureP *auditor_sig);
-
-
-/**
- * @brief Information we keep for a withdrawn coin to reproduce
- * the /withdraw operation if needed, and to have proof
- * that a reserve was drained by this amount.
- */
-struct TALER_DONAUDB_CollectableBlindcoin
-{
-
- /**
- * Our (blinded) signature over the (blinded) coin.
- */
- struct TALER_BlindedDenominationSignature sig;
-
- /**
- * Hash of the denomination key (which coin was generated).
- */
- struct TALER_DenominationHashP denom_pub_hash;
-
- /**
- * Value of the coin being donaued (matching the denomination key)
- * plus the transaction fee. We include this in what is being
- * signed so that we can verify a reserve's remaining total balance
- * without needing to access the respective denomination key
- * information each time.
- */
- struct TALER_Amount amount_with_fee;
-
- /**
- * Withdrawal fee charged by the donau. This must match the Donau's
- * denomination key's withdrawal fee. If the client puts in an
- * invalid withdrawal fee (too high or too low) that does not match
- * the Donau's denomination key, the withdraw operation is invalid
- * and will be rejected by the donau. The @e amount_with_fee minus
- * the @e withdraw_fee is must match the value of the generated
- * coin. We include this in what is being signed so that we can
- * verify a donau's accounting without needing to access the
- * respective denomination key information each time.
- */
- struct TALER_Amount withdraw_fee;
-
- /**
- * Public key of the reserve that was drained.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * Hash over the blinded message, needed to verify
- * the @e reserve_sig.
- */
- struct TALER_BlindedCoinHashP h_coin_envelope;
-
- /**
- * Signature confirming the withdrawal, matching @e reserve_pub,
- * @e denom_pub and @e h_coin_envelope.
- */
- struct TALER_ReserveSignatureP reserve_sig;
-};
-
-
-/**
- * @brief Information we keep for an age-withdraw request
- * to reproduce the /age-withdraw operation if needed, and to have proof
- * that a reserve was drained by this amount.
- */
-struct TALER_DONAUDB_AgeWithdraw
-{
- /**
- * Total amount (with fee) committed to withdraw
- */
- struct TALER_Amount amount_with_fee;
-
- /**
- * Maximum age (in years) that the coins are restricted to.
- */
- uint16_t max_age;
-
- /**
- * The hash of the commitment of all n*kappa coins
- */
- struct TALER_AgeWithdrawCommitmentHashP h_commitment;
-
- /**
- * Index (smaller #TALER_CNC_KAPPA) which the donau has chosen to not have
- * revealed during cut and choose. This value applies to all n coins in the
- * commitment.
- */
- uint16_t noreveal_index;
-
- /**
- * Public key of the reserve that was drained.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * Signature confirming the age withdrawal commitment, matching @e
- * reserve_pub, @e max_age and @e h_commitment and @e amount_with_fee.
- */
- struct TALER_ReserveSignatureP reserve_sig;
-
- /**
- * Number of coins to be withdrawn.
- */
- size_t num_coins;
-
- /**
- * Array of @a num_coins blinded coins. These are the chosen coins
- * (according to @a noreveal_index) from the request, which contained
- * kappa*num_coins blinded coins.
- */
- struct TALER_BlindedCoinHashP *h_coin_evs;
-
- /**
- * Array of @a num_coins denomination signatures of the blinded coins @a
- * h_coin_evs.
- */
- struct TALER_BlindedDenominationSignature *denom_sigs;
-
- /**
- * Array of @a num_coins serial id's of the denominations, corresponding to
- * the coins in @a h_coin_evs.
- */
- uint64_t *denom_serials;
-
- /**
- * [out]-Array of @a num_coins hashes of the public keys of the denominations
- * identified by @e denom_serials. This field is set when calling
- * get_age_withdraw
- */
- struct TALER_DenominationHashP *denom_pub_hashes;
-};
-
-
-/**
- * Information the donau records about a recoup request
- * in a reserve history.
- */
-struct TALER_DONAUDB_Recoup
-{
-
- /**
- * Information about the coin that was paid back.
- */
- struct TALER_CoinPublicInfo coin;
-
- /**
- * Blinding factor supplied to prove to the donau that
- * the coin came from this reserve.
- */
- union TALER_DenominationBlindingKeyP coin_blind;
-
- /**
- * Signature of the coin of type
- * #TALER_SIGNATURE_WALLET_COIN_RECOUP.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
- /**
- * Public key of the reserve the coin was paid back into.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * How much was the coin still worth at this time?
- */
- struct TALER_Amount value;
-
- /**
- * When did the recoup operation happen?
- */
- struct GNUNET_TIME_Timestamp timestamp;
-
-};
-
-
-/**
- * Public key to which a nonce is locked.
- */
-union TALER_DONAUDB_NonceLockTargetP
-{
- /**
- * Nonce is locked to this coin key.
- */
- struct TALER_CoinSpendPublicKeyP coin;
-
- /**
- * Nonce is locked to this reserve key.
- */
- struct TALER_ReservePublicKeyP reserve;
-};
-
-
-/**
- * Information the donau records about a recoup request
- * in a coin history.
- */
-struct TALER_DONAUDB_RecoupListEntry
-{
-
- /**
- * Blinding factor supplied to prove to the donau that
- * the coin came from this reserve.
- */
- union TALER_DenominationBlindingKeyP coin_blind;
-
- /**
- * Signature of the coin of type
- * #TALER_SIGNATURE_WALLET_COIN_RECOUP.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
- /**
- * Hash of the public denomination key used to sign the coin.
- */
- struct TALER_DenominationHashP h_denom_pub;
-
- /**
- * Public key of the reserve the coin was paid back into.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * How much was the coin still worth at this time?
- */
- struct TALER_Amount value;
-
- /**
- * When did the /recoup operation happen?
- */
- struct GNUNET_TIME_Timestamp timestamp;
-
-};
-
-
-/**
- * Information the donau records about a recoup-refresh request in
- * a coin transaction history.
- */
-struct TALER_DONAUDB_RecoupRefreshListEntry
-{
-
- /**
- * Information about the coin that was paid back
- * (NOT the coin we are considering the history of!)
- */
- struct TALER_CoinPublicInfo coin;
-
- /**
- * Blinding factor supplied to prove to the donau that
- * the coin came from this @e old_coin_pub.
- */
- union TALER_DenominationBlindingKeyP coin_blind;
-
- /**
- * Signature of the coin of type
- * #TALER_SIGNATURE_WALLET_COIN_RECOUP.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
- /**
- * Public key of the old coin that the refreshed coin was paid back to.
- */
- struct TALER_CoinSpendPublicKeyP old_coin_pub;
-
- /**
- * How much was the coin still worth at this time?
- */
- struct TALER_Amount value;
-
- /**
- * When did the recoup operation happen?
- */
- struct GNUNET_TIME_Timestamp timestamp;
-
-};
-
-
-/**
- * Details about a purse merge operation.
- */
-struct TALER_DONAUDB_PurseMerge
-{
-
- /**
- * Public key of the reserve the coin was merged into.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * Amount in the purse, with fees.
- */
- struct TALER_Amount amount_with_fee;
-
- /**
- * Fee paid for the purse.
- */
- struct TALER_Amount purse_fee;
-
- /**
- * Hash over the contract.
- */
- struct TALER_PrivateContractHashP h_contract_terms;
-
- /**
- * Merge capability key.
- */
- struct TALER_PurseMergePublicKeyP merge_pub;
-
- /**
- * Purse public key.
- */
- struct TALER_PurseContractPublicKeyP purse_pub;
-
- /**
- * Signature by the reserve approving the merge.
- */
- struct TALER_ReserveSignatureP reserve_sig;
-
- /**
- * When was the merge made.
- */
- struct GNUNET_TIME_Timestamp merge_timestamp;
-
- /**
- * When was the purse set to expire.
- */
- struct GNUNET_TIME_Timestamp purse_expiration;
-
- /**
- * Minimum age required for depositing into the purse.
- */
- uint32_t min_age;
-
- /**
- * Flags of the purse.
- */
- enum TALER_WalletAccountMergeFlags flags;
-
- /**
- * true if the purse was actually successfully merged,
- * false if the @e purse_fee was charged but the
- * @e amount was not credited to the reserve.
- */
- bool merged;
-};
-
-
-/**
- * Details about a (paid for) reserve history request.
- */
-struct TALER_DONAUDB_HistoryRequest
-{
- /**
- * Public key of the reserve the history request was for.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * Fee paid for the request.
- */
- struct TALER_Amount history_fee;
-
- /**
- * When was the request made.
- */
- struct GNUNET_TIME_Timestamp request_timestamp;
-
- /**
- * Signature by the reserve approving the history request.
- */
- struct TALER_ReserveSignatureP reserve_sig;
-};
-
-
-/**
- * Details about a (paid for) reserve open request.
- */
-struct TALER_DONAUDB_OpenRequest
-{
- /**
- * Public key of the reserve the open request was for.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * Fee paid for the request from the reserve.
- */
- struct TALER_Amount open_fee;
-
- /**
- * When was the request made.
- */
- struct GNUNET_TIME_Timestamp request_timestamp;
-
- /**
- * How long was the reserve supposed to be open.
- */
- struct GNUNET_TIME_Timestamp reserve_expiration;
-
- /**
- * Signature by the reserve approving the open request,
- * with purpose #TALER_SIGNATURE_WALLET_RESERVE_OPEN.
- */
- struct TALER_ReserveSignatureP reserve_sig;
-
- /**
- * How many open purses should be included with the
- * open reserve?
- */
- uint32_t purse_limit;
-
-};
-
-
-/**
- * Details about an (explicit) reserve close request.
- */
-struct TALER_DONAUDB_CloseRequest
-{
- /**
- * Public key of the reserve the history request was for.
- */
- struct TALER_ReservePublicKeyP reserve_pub;
-
- /**
- * When was the request made.
- */
- struct GNUNET_TIME_Timestamp request_timestamp;
-
- /**
- * Hash of the payto://-URI of the target account
- * for the closure, or all zeros for the reserve
- * origin account.
- */
- struct TALER_PaytoHashP target_account_h_payto;
-
- /**
- * Signature by the reserve approving the history request.
- */
- struct TALER_ReserveSignatureP reserve_sig;
-
-};
-
-
-/**
- * @brief Types of operations on a reserve.
- */
-enum TALER_DONAUDB_ReserveOperation
-{
- /**
- * Money was deposited into the reserve via a bank transfer.
- * This is how donors establish a reserve at the donau.
- */
- TALER_DONAUDB_RO_BANK_TO_DONAU = 0,
-
- /**
- * A Coin was withdrawn from the reserve using /withdraw.
- */
- TALER_DONAUDB_RO_WITHDRAW_COIN = 1,
-
- /**
- * A coin was returned to the reserve using /recoup.
- */
- TALER_DONAUDB_RO_RECOUP_COIN = 2,
-
- /**
- * The donau send inactive funds back from the reserve to the
- * donor's bank account. This happens when the donau
- * closes a reserve with a non-zero amount left in it.
- */
- TALER_DONAUDB_RO_DONAU_TO_BANK = 3,
-
- /**
- * Event where a purse was merged into a reserve.
- */
- TALER_DONAUDB_RO_PURSE_MERGE = 4,
-
- /**
- * Event where a wallet paid for a full reserve history.
- */
- TALER_DONAUDB_RO_HISTORY_REQUEST = 5,
-
- /**
- * Event where a wallet paid to open a reserve for longer.
- */
- TALER_DONAUDB_RO_OPEN_REQUEST = 6,
-
- /**
- * Event where a wallet requested a reserve to be closed.
- */
- TALER_DONAUDB_RO_CLOSE_REQUEST = 7
-};
-
-
-/**
- * @brief Reserve history as a linked list. Lists all of the transactions
- * associated with this reserve (such as the bank transfers that
- * established the reserve and all /withdraw operations we have done
- * since).
- */
-struct TALER_DONAUDB_ReserveHistory
-{
-
- /**
- * Next entry in the reserve history.
- */
- struct TALER_DONAUDB_ReserveHistory *next;
-
- /**
- * Type of the event, determines @e details.
- */
- enum TALER_DONAUDB_ReserveOperation type;
-
- /**
- * Details of the operation, depending on @e type.
- */
- union
- {
-
- /**
- * Details about a bank transfer to the donau (reserve
- * was established).
- */
- struct TALER_DONAUDB_BankTransfer *bank;
-
- /**
- * Details about a /withdraw operation.
- */
- struct TALER_DONAUDB_CollectableBlindcoin *withdraw;
-
- /**
- * Details about a /recoup operation.
- */
- struct TALER_DONAUDB_Recoup *recoup;
-
- /**
- * Details about a bank transfer from the donau (reserve
- * was closed).
- */
- struct TALER_DONAUDB_ClosingTransfer *closing;
-
- /**
- * Details about a purse merge operation.
- */
- struct TALER_DONAUDB_PurseMerge *merge;
-
- /**
- * Details about a (paid for) reserve history request.
- */
- struct TALER_DONAUDB_HistoryRequest *history;
-
- /**
- * Details about a (paid for) open reserve request.
- */
- struct TALER_DONAUDB_OpenRequest *open_request;
-
- /**
- * Details about an (explicit) reserve close request.
- */
- struct TALER_DONAUDB_CloseRequest *close_request;
-
- } details;
-
-};
-
-
-/**
- * @brief Data about a coin for a deposit operation.
- */
-struct TALER_DONAUDB_CoinDepositInformation
-{
- /**
- * Information about the coin that is being deposited.
- */
- struct TALER_CoinPublicInfo coin;
-
- /**
- * ECDSA signature affirming that the donor intends
- * this coin to be deposited at the charity identified
- * by @e h_wire in relation to the proposal data identified
- * by @e h_contract_terms.
- */
- struct TALER_CoinSpendSignatureP csig;
-
- /**
- * Fraction of the coin's remaining value to be deposited, including
- * depositing fee (if any). The coin is identified by @e coin_pub.
- */
- struct TALER_Amount amount_with_fee;
-
-};
-
-
-/**
- * @brief Data from a batch deposit operation.
- */
-struct TALER_DONAUDB_BatchDeposit
-{
-
- /**
- * Public key of the charity. Enables later identification
- * of the charity in case of a need to rollback transactions.
- */
- struct TALER_CharityPublicKeyP charity_pub;
-
- /**
- * Hash over the proposal data between charity and donor
- * (remains unknown to the Donau).
- */
- struct TALER_PrivateContractHashP h_contract_terms;
-
- /**
- * Hash over additional inputs by the wallet.
- */
- struct GNUNET_HashCode wallet_data_hash;
-
- /**
- * Unsalted hash over @e receiver_wire_account.
- */
- struct TALER_PaytoHashP wire_target_h_payto;
-
- /**
- * Salt used by the charity to compute "h_wire".
- */
- struct TALER_WireSaltP wire_salt;
-
- /**
- * Time when this request was generated. Used, for example, to
- * assess when (roughly) the income was achieved for tax purposes.
- * Note that the Donau will only check that the timestamp is not "too
- * far" into the future (i.e. several days). The fact that the
- * timestamp falls within the validity period of the coin's
- * denomination key is irrelevant for the validity of the deposit
- * request, as obviously the donor and charity could conspire to
- * set any timestamp. Also, the Donau must accept very old deposit
- * requests, as the charity might have been unable to transmit the
- * deposit request in a timely fashion (so back-dating is not
- * prevented).
- */
- struct GNUNET_TIME_Timestamp wallet_timestamp;
-
- /**
- * How much time does the charity have to issue a refund request?
- * Zero if refunds are not allowed. After this time, the coin
- * cannot be refunded.
- */
- struct GNUNET_TIME_Timestamp refund_deadline;
-
- /**
- * How much time does the charity have to execute the wire transfer?
- * This time is advisory for aggregating transactions, not a hard
- * constraint (as the charity can theoretically pick any time,
- * including one in the past).
- */
- struct GNUNET_TIME_Timestamp wire_deadline;
-
- /**
- * Row ID of the policy details; 0 if no policy applies.
- */
- uint64_t policy_details_serial_id;
-
- /**
- * Information about the receiver for executing the transaction. URI in
- * payto://-format.
- */
- const char *receiver_wire_account;
-
- /**
- * Array about the coins that are being deposited.
- */
- const struct TALER_DONAUDB_CoinDepositInformation *cdis;
-
- /**
- * Length of the @e cdis array.
- */
- unsigned int num_cdis;
-
- /**
- * False if @e wallet_data_hash was provided
- */
- bool no_wallet_data_hash;
-
- /**
- * True if further processing is blocked by policy.
- */
- bool policy_blocked;
-
-};
-
-
-/**
- * @brief Data from a deposit operation. The combination of
- * the coin's public key, the charity's public key and the
- * transaction ID must be unique. While a coin can (theoretically) be
- * deposited at the same charity twice (with partial spending), the
- * charity must either use a different public key or a different
- * transaction ID for the two transactions. The same coin must not
- * be used twice at the same charity for the same transaction
- * (as determined by transaction ID).
- */
-struct TALER_DONAUDB_Deposit
-{
- /**
- * Information about the coin that is being deposited.
- */
- struct TALER_CoinPublicInfo coin;
-
- /**
- * ECDSA signature affirming that the donor intends
- * this coin to be deposited at the charity identified
- * by @e h_wire in relation to the proposal data identified
- * by @e h_contract_terms.
- */
- struct TALER_CoinSpendSignatureP csig;
-
- /**
- * Public key of the charity. Enables later identification
- * of the charity in case of a need to rollback transactions.
- */
- struct TALER_CharityPublicKeyP charity_pub;
-
- /**
- * Hash over the proposal data between charity and donor
- * (remains unknown to the Donau).
- */
- struct TALER_PrivateContractHashP h_contract_terms;
-
- /**
- * Salt used by the charity to compute "h_wire".
- */
- struct TALER_WireSaltP wire_salt;
-
- /**
- * Hash over inputs from the wallet to customize the contract.
- */
- struct GNUNET_HashCode wallet_data_hash;
-
- /**
- * Hash over the policy data for this deposit (remains unknown to the
- * Donau). Needed for the verification of the deposit's signature
- */
- struct TALER_ExtensionPolicyHashP h_policy;
-
- /**
- * Time when this request was generated. Used, for example, to
- * assess when (roughly) the income was achieved for tax purposes.
- * Note that the Donau will only check that the timestamp is not "too
- * far" into the future (i.e. several days). The fact that the
- * timestamp falls within the validity period of the coin's
- * denomination key is irrelevant for the validity of the deposit
- * request, as obviously the donor and charity could conspire to
- * set any timestamp. Also, the Donau must accept very old deposit
- * requests, as the charity might have been unable to transmit the
- * deposit request in a timely fashion (so back-dating is not
- * prevented).
- */
- struct GNUNET_TIME_Timestamp timestamp;
-
- /**
- * How much time does the charity have to issue a refund request?
- * Zero if refunds are not allowed. After this time, the coin
- * cannot be refunded.
- */
- struct GNUNET_TIME_Timestamp refund_deadline;
-
- /**
- * How much time does the charity have to execute the wire transfer?
- * This time is advisory for aggregating transactions, not a hard
- * constraint (as the charity can theoretically pick any time,
- * including one in the past).
- */
- struct GNUNET_TIME_Timestamp wire_deadline;
-
- /**
- * Fraction of the coin's remaining value to be deposited, including
- * depositing fee (if any). The coin is identified by @e coin_pub.
- */
- struct TALER_Amount amount_with_fee;
-
- /**
- * Depositing fee.
- */
- struct TALER_Amount deposit_fee;
-
- /**
- * Information about the receiver for executing the transaction. URI in
- * payto://-format.
- */
- char *receiver_wire_account;
-
- /**
- * True if @e policy_json was provided
- */
- bool has_policy;
-
- /**
- * True if @e wallet_data_hash is not in use.
- */
- bool no_wallet_data_hash;
-
-};
-
-
-/**
- * @brief Specification for a deposit operation in the
- * `struct TALER_DONAUDB_TransactionList`.
- */
-struct TALER_DONAUDB_DepositListEntry
-{
-
- /**
- * ECDSA signature affirming that the donor intends
- * this coin to be deposited at the charity identified
- * by @e h_wire in relation to the proposal data identified
- * by @e h_contract_terms.
- */
- struct TALER_CoinSpendSignatureP csig;
-
- /**
- * Public key of the charity. Enables later identification
- * of the charity in case of a need to rollback transactions.
- */
- struct TALER_CharityPublicKeyP charity_pub;
-
- /**
- * Hash over the proposa data between charity and donor
- * (remains unknown to the Donau).
- */
- struct TALER_PrivateContractHashP h_contract_terms;
-
- /**
- * Hash over inputs from the wallet to customize the contract.
- */
- struct GNUNET_HashCode wallet_data_hash;
-
- /**
- * Hash of the public denomination key used to sign the coin.
- */
- struct TALER_DenominationHashP h_denom_pub;
-
- /**
- * Age commitment hash, if applicable to the denomination. Should be all
- * zeroes if age commitment is not applicable to the denonimation.
- */
- struct TALER_AgeCommitmentHash h_age_commitment;
-
- /**
- * Salt used to compute h_wire from the @e receiver_wire_account.
- */
- struct TALER_WireSaltP wire_salt;
-
- /**
- * Hash over the policy data for this deposit (remains unknown to the
- * Donau). Needed for the verification of the deposit's signature
- */
- struct TALER_ExtensionPolicyHashP h_policy;
-
- /**
- * Fraction of the coin's remaining value to be deposited, including
- * depositing fee (if any). The coin is identified by @e coin_pub.
- */
- struct TALER_Amount amount_with_fee;
-
- /**
- * Depositing fee.
- */
- struct TALER_Amount deposit_fee;
-
- /**
- * Time when this request was generated. Used, for example, to
- * assess when (roughly) the income was achieved for tax purposes.
- * Note that the Donau will only check that the timestamp is not "too
- * far" into the future (i.e. several days). The fact that the
- * timestamp falls within the validity period of the coin's
- * denomination key is irrelevant for the validity of the deposit
- * request, as obviously the donor and charity could conspire to
- * set any timestamp. Also, the Donau must accept very old deposit
- * requests, as the charity might have been unable to transmit the
- * deposit request in a timely fashion (so back-dating is not
- * prevented).
- */
- struct GNUNET_TIME_Timestamp timestamp;
-
- /**
- * How much time does the charity have to issue a refund request?
- * Zero if refunds are not allowed. After this time, the coin
- * cannot be refunded.
- */
- struct GNUNET_TIME_Timestamp refund_deadline;
-
- /**
- * How much time does the charity have to execute the wire transfer?
- * This time is advisory for aggregating transactions, not a hard
- * constraint (as the charity can theoretically pick any time,
- * including one in the past).
- */
- struct GNUNET_TIME_Timestamp wire_deadline;
-
- /**
- * Detailed information about the receiver for executing the transaction.
- * URL in payto://-format.
- */
- char *receiver_wire_account;
-
- /**
- * true, if age commitment is not applicable
- */
- bool no_age_commitment;
-
- /**
- * true, if wallet data hash is not present
- */
- bool no_wallet_data_hash;
-
- /**
- * True if a policy was provided with the deposit request
- */
- bool has_policy;
-
- /**
- * Has the deposit been wired?
- */
- bool done;
-
-};
-
-
-/**
- * @brief Specification for a refund operation in a coin's transaction list.
- */
-struct TALER_DONAUDB_RefundListEntry
-{
-
- /**
- * Public key of the charity.
- */
- struct TALER_CharityPublicKeyP charity_pub;
-
- /**
- * Signature from the charity affirming the refund.
- */
- struct TALER_CharitySignatureP charity_sig;
-
- /**
- * Hash over the proposal data between charity and donor
- * (remains unknown to the Donau).
- */
- struct TALER_PrivateContractHashP h_contract_terms;
-
- /**
- * Charity-generated REFUND transaction ID to detect duplicate
- * refunds.
- */
- uint64_t rtransaction_id;
-
- /**
- * Fraction of the original deposit's value to be refunded, including
- * refund fee (if any). The coin is identified by @e coin_pub.
- */
- struct TALER_Amount refund_amount;
-
- /**
- * Refund fee to be covered by the donor.
- */
- struct TALER_Amount refund_fee;
-
-};
-
-
-/**
- * @brief Specification for a refund operation. The combination of
- * the coin's public key, the charity's public key and the
- * transaction ID must be unique. While a coin can (theoretically) be
- * deposited at the same charity twice (with partial spending), the
- * charity must either use a different public key or a different
- * transaction ID for the two transactions. The same goes for
- * refunds, hence we also have a "rtransaction" ID which is disjoint
- * from the transaction ID. The same coin must not be used twice at
- * the same charity for the same transaction or rtransaction ID.
- */
-struct TALER_DONAUDB_Refund
-{
- /**
- * Information about the coin that is being refunded.
- */
- struct TALER_CoinPublicInfo coin;
-
- /**
- * Details about the refund.
- */
- struct TALER_DONAUDB_RefundListEntry details;
-
-};
-
-
-/**
- * @brief Specification for coin in a melt operation.
- */
-struct TALER_DONAUDB_Refresh
-{
- /**
- * Information about the coin that is being melted.
- */
- struct TALER_CoinPublicInfo coin;
-
- /**
- * Signature over the melting operation.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
- /**
- * Refresh commitment this coin is melted into.
- */
- struct TALER_RefreshCommitmentP rc;
-
- /**
- * How much value is being melted? This amount includes the fees,
- * so the final amount contributed to the melt is this value minus
- * the fee for melting the coin. We include the fee in what is
- * being signed so that we can verify a reserve's remaining total
- * balance without needing to access the respective denomination key
- * information each time.
- */
- struct TALER_Amount amount_with_fee;
-
- /**
- * Index (smaller #TALER_CNC_KAPPA) which the donau has chosen to not
- * have revealed during cut and choose.
- */
- uint32_t noreveal_index;
-
-};
-
-
-/**
- * Information about a /coins/$COIN_PUB/melt operation in a coin transaction
history.
- */
-struct TALER_DONAUDB_MeltListEntry
-{
-
- /**
- * Signature over the melting operation.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
- /**
- * Refresh commitment this coin is melted into.
- */
- struct TALER_RefreshCommitmentP rc;
-
- /**
- * Hash of the public denomination key used to sign the coin.
- */
- struct TALER_DenominationHashP h_denom_pub;
-
- /**
- * Hash of the age commitment used to sign the coin, if age restriction was
- * applicable to the denomination. May be all zeroes if no age restriction
- * applies.
- */
- struct TALER_AgeCommitmentHash h_age_commitment;
-
- /**
- * true, if no h_age_commitment is applicable
- */
- bool no_age_commitment;
-
- /**
- * How much value is being melted? This amount includes the fees,
- * so the final amount contributed to the melt is this value minus
- * the fee for melting the coin. We include the fee in what is
- * being signed so that we can verify a reserve's remaining total
- * balance without needing to access the respective denomination key
- * information each time.
- */
- struct TALER_Amount amount_with_fee;
-
- /**
- * Melt fee the donau charged.
- */
- struct TALER_Amount melt_fee;
-
- /**
- * Index (smaller #TALER_CNC_KAPPA) which the donau has chosen to not
- * have revealed during cut and choose.
- */
- uint32_t noreveal_index;
-
-};
-
-
-/**
- * Information about a /purses/$PID/deposit operation in a coin transaction
history.
- */
-struct TALER_DONAUDB_PurseDepositListEntry
-{
-
- /**
- * Donau hosting the purse, NULL for this donau.
- */
- char *donau_base_url;
-
- /**
- * Public key of the purse.
- */
- struct TALER_PurseContractPublicKeyP purse_pub;
-
- /**
- * Contribution of the coin to the purse, including
- * deposit fee.
- */
- struct TALER_Amount amount;
-
- /**
- * Depositing fee.
- */
- struct TALER_Amount deposit_fee;
-
- /**
- * Signature by the coin affirming the deposit.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
- /**
- * Hash of the age commitment used to sign the coin, if age restriction was
- * applicable to the denomination.
- */
- struct TALER_AgeCommitmentHash h_age_commitment;
-
- /**
- * Set to true if the coin was refunded.
- */
- bool refunded;
-
- /**
- * Set to true if there was no age commitment.
- */
- bool no_age_commitment;
-
-};
-
-
-/**
- * @brief Specification for a purse refund operation in a coin's transaction
list.
- */
-struct TALER_DONAUDB_PurseRefundListEntry
-{
-
- /**
- * Public key of the purse.
- */
- struct TALER_PurseContractPublicKeyP purse_pub;
-
- /**
- * Fraction of the original deposit's value to be refunded, including
- * refund fee (if any). The coin is identified by @e coin_pub.
- */
- struct TALER_Amount refund_amount;
-
- /**
- * Refund fee to be covered by the donor.
- */
- struct TALER_Amount refund_fee;
-
-};
-
-
-/**
- * Information about a /reserves/$RID/open operation in a coin transaction
history.
- */
-struct TALER_DONAUDB_ReserveOpenListEntry
-{
-
- /**
- * Signature of the reserve.
- */
- struct TALER_ReserveSignatureP reserve_sig;
-
- /**
- * Contribution of the coin to the open fee, including
- * deposit fee.
- */
- struct TALER_Amount coin_contribution;
-
- /**
- * Signature by the coin affirming the open deposit.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
-};
-
-
-/**
- * Information about a /purses/$PID/deposit operation.
- */
-struct TALER_DONAUDB_PurseDeposit
-{
-
- /**
- * Donau hosting the purse, NULL for this donau.
- */
- char *donau_base_url;
-
- /**
- * Public key of the purse.
- */
- struct TALER_PurseContractPublicKeyP purse_pub;
-
- /**
- * Contribution of the coin to the purse, including
- * deposit fee.
- */
- struct TALER_Amount amount;
-
- /**
- * Depositing fee.
- */
- struct TALER_Amount deposit_fee;
-
- /**
- * Signature by the coin affirming the deposit.
- */
- struct TALER_CoinSpendSignatureP coin_sig;
-
- /**
- * Public key of the coin.
- */
- struct TALER_CoinSpendPublicKeyP coin_pub;
-
- /**
- * Hash of the age commitment used to sign the coin, if age restriction was
- * applicable to the denomination. May be all zeroes if no age restriction
- * applies.
- */
- struct TALER_AgeCommitmentHash h_age_commitment;
-
- /**
- * Set to true if @e h_age_commitment is not available.
- */
- bool no_age_commitment;
-
-};
-
-/**
- * Information about a melt operation.
- */
-struct TALER_DONAUDB_Melt
-{
-
- /**
- * Overall session data.
- */
- struct TALER_DONAUDB_Refresh session;
-
- /**
- * Melt fee the donau charged.
- */
- struct TALER_Amount melt_fee;
-
-};
-
-
-/**
- * @brief Linked list of refresh information linked to a coin.
- */
-struct TALER_DONAUDB_LinkList
-{
- /**
- * Information is stored in a NULL-terminated linked list.
- */
- struct TALER_DONAUDB_LinkList *next;
-
- /**
- * Denomination public key, determines the value of the coin.
- */
- struct TALER_DenominationPublicKey denom_pub;
-
- /**
- * Signature over the blinded envelope.
- */
- struct TALER_BlindedDenominationSignature ev_sig;
-
- /**
- * Donau-provided values during the coin generation.
- */
- struct TALER_DonauWithdrawValues alg_values;
-
- /**
- * Signature of the original coin being refreshed over the
- * link data, of type #TALER_SIGNATURE_WALLET_COIN_LINK
- */
- struct TALER_CoinSpendSignatureP orig_coin_link_sig;
-
- /**
- * CS nonce, if cipher is CS.
- */
- struct TALER_CsNonce nonce;
-
- /**
- * Offset that generated this coin in the refresh
- * operation.
- */
- uint32_t coin_refresh_offset;
-
- /**
- * Set to true if @e nonce was initialized.
- */
- bool have_nonce;
-};
-
-
-/**
- * @brief Enumeration to classify the different types of transactions
- * that can be done with a coin.
- */
-enum TALER_DONAUDB_TransactionType
-{
-
- /**
- * Deposit operation.
- */
- TALER_DONAUDB_TT_DEPOSIT = 0,
-
- /**
- * Melt operation.
- */
- TALER_DONAUDB_TT_MELT = 1,
-
- /**
- * Refund operation.
- */
- TALER_DONAUDB_TT_REFUND = 2,
-
- /**
- * Recoup-refresh operation (on the old coin, adding to the old coin's value)
- */
- TALER_DONAUDB_TT_OLD_COIN_RECOUP = 3,
-
- /**
- * Recoup operation.
- */
- TALER_DONAUDB_TT_RECOUP = 4,
-
- /**
- * Recoup-refresh operation (on the new coin, eliminating its value)
- */
- TALER_DONAUDB_TT_RECOUP_REFRESH = 5,
-
- /**
- * Purse deposit operation.
- */
- TALER_DONAUDB_TT_PURSE_DEPOSIT = 6,
-
- /**
- * Purse deposit operation.
- */
- TALER_DONAUDB_TT_PURSE_REFUND = 7,
-
- /**
- * Reserve open deposit operation.
- */
- TALER_DONAUDB_TT_RESERVE_OPEN = 8
-
-};
-
-
-/**
- * @brief List of transactions we performed for a particular coin.
- */
-struct TALER_DONAUDB_TransactionList
-{
-
- /**
- * Next pointer in the NULL-terminated linked list.
- */
- struct TALER_DONAUDB_TransactionList *next;
-
- /**
- * Type of the transaction, determines what is stored in @e details.
- */
- enum TALER_DONAUDB_TransactionType type;
-
- /**
- * Serial ID of this entry in the database.
- */
- uint64_t serial_id;
-
- /**
- * Details about the transaction, depending on @e type.
- */
- union
- {
-
- /**
- * Details if transaction was a deposit operation.
- * (#TALER_DONAUDB_TT_DEPOSIT)
- */
- struct TALER_DONAUDB_DepositListEntry *deposit;
-
- /**
- * Details if transaction was a melt operation.
- * (#TALER_DONAUDB_TT_MELT)
- */
- struct TALER_DONAUDB_MeltListEntry *melt;
-
- /**
- * Details if transaction was a refund operation.
- * (#TALER_DONAUDB_TT_REFUND)
- */
- struct TALER_DONAUDB_RefundListEntry *refund;
-
- /**
- * Details if transaction was a recoup-refund operation where
- * this coin was the OLD coin.
- * (#TALER_DONAUDB_TT_OLD_COIN_RECOUP).
- */
- struct TALER_DONAUDB_RecoupRefreshListEntry *old_coin_recoup;
-
- /**
- * Details if transaction was a recoup operation.
- * (#TALER_DONAUDB_TT_RECOUP)
- */
- struct TALER_DONAUDB_RecoupListEntry *recoup;
-
- /**
- * Details if transaction was a recoup-refund operation where
- * this coin was the REFRESHED coin.
- * (#TALER_DONAUDB_TT_RECOUP_REFRESH)
- */
- struct TALER_DONAUDB_RecoupRefreshListEntry *recoup_refresh;
-
- /**
- * Coin was deposited into a purse.
- * (#TALER_DONAUDB_TT_PURSE_DEPOSIT)
- */
- struct TALER_DONAUDB_PurseDepositListEntry *purse_deposit;
-
- /**
- * Coin was refunded upon purse expiration
- * (#TALER_DONAUDB_TT_PURSE_REFUND)
- */
- struct TALER_DONAUDB_PurseRefundListEntry *purse_refund;
-
- /**
- * Coin was used to pay to open a reserve.
- * (#TALER_DONAUDB_TT_RESERVE_OPEN)
- */
- struct TALER_DONAUDB_ReserveOpenListEntry *reserve_open;
-
- } details;
-
-};
-
-
-/**
- * Callback with data about a prepared wire transfer.
- *
- * @param cls closure
- * @param rowid row identifier used to mark prepared transaction as done
- * @param wire_method which wire method is this preparation data for
- * @param buf transaction data that was persisted, NULL on error
- * @param buf_size number of bytes in @a buf, 0 on error
- */
-typedef void
-(*TALER_DONAUDB_WirePreparationIterator) (void *cls,
- uint64_t rowid,
- const char *wire_method,
- const char *buf,
- size_t buf_size);
-
-
-/**
- * Callback with KYC attributes about a particular user.
- *
- * @param cls closure
- * @param h_payto account for which the attribute data is stored
- * @param provider_section provider that must be checked
- * @param collection_time when was the data collected
- * @param expiration_time when does the data expire
- * @param enc_attributes_size number of bytes in @a enc_attributes
- * @param enc_attributes encrypted attribute data
- */
-typedef void
-(*TALER_DONAUDB_AttributeCallback)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const char *provider_section,
- struct GNUNET_TIME_Timestamp collection_time,
- struct GNUNET_TIME_Timestamp expiration_time,
- size_t enc_attributes_size,
- const void *enc_attributes);
-
-
-/**
- * Function called with details about 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 donau_timestamp when did the deposit happen
- * @param deposit deposit details
- * @param denom_pub denomination public key of @a coin_pub
- * @param done flag set if the deposit was already executed (or not)
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_DepositCallback)(
- void *cls,
- uint64_t rowid,
- struct GNUNET_TIME_Timestamp donau_timestamp,
- const struct TALER_DONAUDB_Deposit *deposit,
- const struct TALER_DenominationPublicKey *denom_pub,
- bool done);
-
-
-/**
- * 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 reserve_pub which reserve is the purse merged into, NULL if unknown
- * @param flags purse flags
- * @param auditor_balance purse balance (according to the
- * auditor during auditing)
- * @param purse_total target amount the purse should reach
- * @param denom_pub denomination public key of @a coin_pub
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_PurseDepositCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_DONAUDB_PurseDeposit *deposit,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- enum TALER_WalletAccountMergeFlags flags,
- const struct TALER_Amount *auditor_balance,
- const struct TALER_Amount *purse_total,
- 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
- * @param reserve_pub reserve affected by the merge
- * @param purse_pub purse being merged
- * @param h_contract_terms hash over contract of the purse
- * @param purse_expiration when would the purse expire
- * @param amount total amount in the purse
- * @param min_age minimum age of all coins deposited into the purse
- * @param flags how was the purse created
- * @param purse_fee if a purse fee was paid, how high is it
- * @param merge_timestamp when was the merge approved
- * @param reserve_sig signature by reserve approving the merge
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_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,
- const 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
- * @param partner_base_url where is the reserve, NULL for this donau
- * @param amount total amount expected in the purse
- * @param balance current balance in the purse (according to the auditor)
- * @param flags purse flags
- * @param merge_pub merge capability key
- * @param reserve_pub reserve the merge affects
- * @param merge_sig signature affirming the merge
- * @param purse_pub purse key
- * @param merge_timestamp when did the merge happen
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_PurseMergeCallback)(
- void *cls,
- uint64_t rowid,
- const char *partner_base_url,
- const struct TALER_Amount *amount,
- const struct TALER_Amount *balance,
- 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
- * @param history_fee fee paid for the request
- * @param ts timestamp of the request
- * @param reserve_pub reserve history was requested for
- * @param reserve_sig signature approving the @a history_fee
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_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 decisions that have been made, with
- * the goal of auditing the purse's execution.
- *
- * @param cls closure
- * @param rowid unique serial ID for the deposit in our DB
- * @param purse_pub public key of the purse
- * @param reserve_pub public key of the target reserve, NULL if not known /
refunded
- * @param purse_value what is the (target) value of the purse
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_PurseDecisionCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_Amount *purse_value);
-
-
-/**
- * Function called with details about purse decisions that have been made, with
- * the goal of auditing the purse's execution.
- *
- * @param cls closure
- * @param rowid unique serial ID for the deposit in our DB
- * @param purse_pub public key of the purse
- * @param refunded true if decision was to refund
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_AllPurseDecisionCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- bool refunded);
-
-
-/**
- * Function called with details about purse refunds that have been made, with
- * the goal of auditing the purse refund's execution.
- *
- * @param cls closure
- * @param rowid row of the refund event
- * @param amount_with_fee amount of the deposit into the purse
- * @param coin_pub coin that is to be refunded the @a given amount_with_fee
- * @param denom_pub denomination of @a coin_pub
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_PurseRefundCoinCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_Amount *amount_with_fee,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_DenominationPublicKey *denom_pub);
-
-
-/**
- * Function called with details about coins that were melted,
- * with the goal of auditing the refresh's execution.
- *
- * @param cls closure
- * @param rowid unique serial ID for the refresh session in our DB
- * @param denom_pub denomination public key of @a coin_pub
- * @param h_age_commitment age commitment that went into the signing of the
coin, may be NULL
- * @param coin_pub public key of the coin
- * @param coin_sig signature from the coin
- * @param amount_with_fee amount that was deposited including fee
- * @param noreveal_index which index was picked by the donau in cut-and-choose
- * @param rc what is the commitment
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_RefreshesCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_AgeCommitmentHash *h_age_commitment,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- const struct TALER_Amount *amount_with_fee,
- uint32_t noreveal_index,
- const struct TALER_RefreshCommitmentP *rc);
-
-
-/**
- * Callback invoked with information about refunds applicable
- * to a particular coin and contract.
- *
- * @param cls closure
- * @param amount_with_fee amount being refunded
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_RefundCoinCallback)(
- void *cls,
- const struct TALER_Amount *amount_with_fee);
-
-
-/**
- * Information about a coin that was revealed to the donau
- * during reveal.
- */
-struct TALER_DONAUDB_RefreshRevealedCoin
-{
- /**
- * Hash of the public denomination key of the coin.
- */
- struct TALER_DenominationHashP h_denom_pub;
-
- /**
- * Signature of the original coin being refreshed over the
- * link data, of type #TALER_SIGNATURE_WALLET_COIN_LINK
- */
- struct TALER_CoinSpendSignatureP orig_coin_link_sig;
-
- /**
- * Hash of the blinded new coin, that is @e coin_ev.
- */
- struct TALER_BlindedCoinHashP coin_envelope_hash;
-
- /**
- * Signature generated by the donau over the coin (in blinded format).
- */
- struct TALER_BlindedDenominationSignature coin_sig;
-
- /**
- * Values contributed from the donau to the
- * coin generation (see /csr).
- */
- struct TALER_DonauWithdrawValues donau_vals;
-
- /**
- * Blinded message to be signed (in envelope).
- */
- struct TALER_BlindedPlanchet blinded_planchet;
-
-};
-
-
-/**
- * Information per Clause-Schnorr (CS) fresh coin to
- * be persisted for idempotency during refreshes-reveal.
- */
-struct TALER_DONAUDB_CsRevealFreshCoinData
-{
- /**
- * Denomination of the fresh coin.
- */
- struct TALER_DenominationHashP new_denom_pub_hash;
-
- /**
- * Blind signature of the fresh coin (possibly updated
- * in case if a replay!).
- */
- struct TALER_BlindedDenominationSignature bsig;
-
- /**
- * Offset of the fresh coin in the reveal operation.
- * (May not match the array offset as we may have
- * a mixture of RSA and CS coins being created, and
- * this request is only made for the CS subset).
- */
- uint32_t coin_off;
-};
-
-
-/**
- * Generic KYC status for some operation.
- */
-struct TALER_DONAUDB_KycStatus
-{
- /**
- * Number that identifies the KYC requirement the operation
- * was about.
- */
- uint64_t requirement_row;
-
- /**
- * True if the KYC status is "satisfied".
- */
- bool ok;
-
-};
-
-
-struct TALER_DONAUDB_ReserveInInfo
-{
- const struct TALER_ReservePublicKeyP *reserve_pub;
- const struct TALER_Amount *balance;
- struct GNUNET_TIME_Timestamp execution_time;
- const char *sender_account_details;
- const char *donau_account_name;
- uint64_t wire_reference;
-};
-
-
-/**
- * Function called on each @a amount that was found to
- * be relevant for a KYC check.
- *
- * @param cls closure to allow the KYC module to
- * total up amounts and evaluate rules
- * @param amount encountered transaction amount
- * @param date when was the amount encountered
- * @return #GNUNET_OK to continue to iterate,
- * #GNUNET_NO to abort iteration
- * #GNUNET_SYSERR on internal error (also abort itaration)
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_KycAmountCallback)(
- void *cls,
- const struct TALER_Amount *amount,
- struct GNUNET_TIME_Absolute date);
-
-
-/**
- * Function called with information about a refresh order.
- *
- * @param cls closure
- * @param num_freshcoins size of the @a rrcs array
- * @param rrcs array of @a num_freshcoins information about coins to be created
- */
-typedef void
-(*TALER_DONAUDB_RefreshCallback)(
- void *cls,
- uint32_t num_freshcoins,
- const struct TALER_DONAUDB_RefreshRevealedCoin *rrcs);
-
-
-/**
- * Function called with details about coins that were refunding,
- * with the goal of auditing the refund's execution.
- *
- * @param cls closure
- * @param rowid unique serial ID for the refund in our DB
- * @param denom_pub denomination public key of @a coin_pub
- * @param coin_pub public key of the coin
- * @param charity_pub public key of the charity
- * @param charity_sig signature of the charity
- * @param h_contract_terms hash of the proposal data known to charity and donor
- * @param rtransaction_id refund transaction ID chosen by the charity
- * @param full_refund true if the refunds total up to the entire value of the
deposit
- * @param amount_with_fee amount that was deposited including fee
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_RefundCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CharityPublicKeyP *charity_pub,
- const struct TALER_CharitySignatureP *charity_sig,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- uint64_t rtransaction_id,
- bool full_refund,
- const struct TALER_Amount *amount_with_fee);
-
-
-/**
- * Function called with details about incoming wire transfers.
- *
- * @param cls closure
- * @param rowid unique serial ID for the refresh session in our DB
- * @param reserve_pub public key of the reserve (also the wire subject)
- * @param credit amount that was received
- * @param sender_account_details information about the sender's bank account,
in payto://-format
- * @param wire_reference unique identifier for the wire transfer
- * @param execution_date when did we receive the funds
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_ReserveInCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_Amount *credit,
- const char *sender_account_details,
- uint64_t wire_reference,
- struct GNUNET_TIME_Timestamp execution_date);
-
-
-/**
- * Provide information about a wire account.
- *
- * @param cls closure
- * @param payto_uri the donau bank account URI
- * @param conversion_url URL of a conversion service, NULL if there is no
conversion
- * @param debit_restrictions JSON array with debit restrictions on the account
- * @param credit_restrictions JSON array with credit restrictions on the
account
- * @param master_sig master key signature affirming that this is a bank
- * account of the donau (of purpose
#TALER_SIGNATURE_MASTER_WIRE_DETAILS)
- */
-typedef void
-(*TALER_DONAUDB_WireAccountCallback)(
- void *cls,
- const char *payto_uri,
- const char *conversion_url,
- const json_t *debit_restrictions,
- const json_t *credit_restrictions,
- const struct TALER_MasterSignatureP *master_sig);
-
-
-/**
- * Provide information about wire fees.
- *
- * @param cls closure
- * @param fees the wire fees we charge
- * @param start_date from when are these fees valid (start date)
- * @param end_date until when are these fees valid (end date, exclusive)
- * @param master_sig master key signature affirming that this is the correct
- * fee (of purpose #TALER_SIGNATURE_MASTER_WIRE_FEES)
- */
-typedef void
-(*TALER_DONAUDB_WireFeeCallback)(
- void *cls,
- const struct TALER_WireFeeSet *fees,
- struct GNUNET_TIME_Timestamp start_date,
- struct GNUNET_TIME_Timestamp end_date,
- const struct TALER_MasterSignatureP *master_sig);
-
-
-/**
- * Provide information about global fees.
- *
- * @param cls closure
- * @param fees the global fees we charge
- * @param purse_timeout when do purses time out
- * @param history_expiration how long are account histories preserved
- * @param purse_account_limit how many purses are free per account
- * @param start_date from when are these fees valid (start date)
- * @param end_date until when are these fees valid (end date, exclusive)
- * @param master_sig master key signature affirming that this is the correct
- * fee (of purpose #TALER_SIGNATURE_MASTER_GLOBAL_FEES)
- */
-typedef void
-(*TALER_DONAUDB_GlobalFeeCallback)(
- void *cls,
- const struct TALER_GlobalFeeSet *fees,
- struct GNUNET_TIME_Relative purse_timeout,
- struct GNUNET_TIME_Relative history_expiration,
- uint32_t purse_account_limit,
- struct GNUNET_TIME_Timestamp start_date,
- struct GNUNET_TIME_Timestamp end_date,
- const struct TALER_MasterSignatureP *master_sig);
-
-
-/**
- * Function called with details about withdraw operations.
- *
- * @param cls closure
- * @param rowid unique serial ID for the refresh session in our DB
- * @param h_blind_ev blinded hash of the coin's public key
- * @param denom_pub public denomination key of the deposited coin
- * @param reserve_pub public key of the reserve
- * @param reserve_sig signature over the withdraw operation
- * @param execution_date when did the wallet withdraw the coin
- * @param amount_with_fee amount that was withdrawn
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_WithdrawCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_BlindedCoinHashP *h_blind_ev,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_ReserveSignatureP *reserve_sig,
- struct GNUNET_TIME_Timestamp execution_date,
- const struct TALER_Amount *amount_with_fee);
-
-
-/**
- * Function called with the session hashes and transfer secret
- * information for a given coin.
- *
- * @param cls closure
- * @param transfer_pub public transfer key for the session
- * @param ldl link data for @a transfer_pub
- */
-typedef void
-(*TALER_DONAUDB_LinkCallback)(
- void *cls,
- const struct TALER_TransferPublicKeyP *transfer_pub,
- const struct TALER_DONAUDB_LinkList *ldl);
-
-
-/**
- * Function called with the results of the lookup of the
- * transaction data associated with a wire transfer identifier.
- *
- * @param cls closure
- * @param rowid which row in the table is the information from (for
diagnostics)
- * @param charity_pub public key of the charity (should be same for all
callbacks with the same @e cls)
- * @param account_payto_uri which account did the transfer go to?
- * @param h_payto hash over @a account_payto_uri as it is in the DB
- * @param exec_time execution time of the wire transfer (should be same for
all callbacks with the same @e cls)
- * @param h_contract_terms which proposal was this payment about
- * @param denom_pub denomination of @a coin_pub
- * @param coin_pub which public key was this payment about
- * @param coin_value amount contributed by this coin in total (with fee)
- * @param coin_fee applicable fee for this coin
- */
-typedef void
-(*TALER_DONAUDB_AggregationDataCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_CharityPublicKeyP *charity_pub,
- const char *account_payto_uri,
- const struct TALER_PaytoHashP *h_payto,
- struct GNUNET_TIME_Timestamp exec_time,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *coin_value,
- const struct TALER_Amount *coin_fee);
-
-
-/**
- * Function called with the results of the lookup of the
- * wire transfer data of the donau.
- *
- * @param cls closure
- * @param rowid identifier of the respective row in the database
- * @param date timestamp of the wire transfer (roughly)
- * @param wtid wire transfer subject
- * @param payto_uri details of the receiver, URI in payto://-format
- * @param amount amount that was wired
- * @return #GNUNET_OK to continue, #GNUNET_SYSERR to stop iteration
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_WireTransferOutCallback)(
- void *cls,
- uint64_t rowid,
- struct GNUNET_TIME_Timestamp date,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- const char *payto_uri,
- const struct TALER_Amount *amount);
-
-
-/**
- * Function called on transient aggregations matching
- * a particular hash of a payto URI.
- *
- * @param cls
- * @param payto_uri corresponding payto URI
- * @param wtid wire transfer identifier of transient aggregation
- * @param charity_pub public key of the charity
- * @param total amount aggregated so far
- * @return true to continue iterating
- */
-typedef bool
-(*TALER_DONAUDB_TransientAggregationCallback)(
- void *cls,
- const char *payto_uri,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- const struct TALER_CharityPublicKeyP *charity_pub,
- const struct TALER_Amount *total);
-
-
-/**
- * Callback with data about a prepared wire transfer.
- *
- * @param cls closure
- * @param rowid row identifier used to mark prepared transaction as done
- * @param wire_method which wire method is this preparation data for
- * @param buf transaction data that was persisted, NULL on error
- * @param buf_size number of bytes in @a buf, 0 on error
- * @param finished did we complete the transfer yet?
- * @return #GNUNET_OK to continue, #GNUNET_SYSERR to stop iteration
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_WirePreparationCallback)(void *cls,
- uint64_t rowid,
- const char *wire_method,
- const char *buf,
- size_t buf_size,
- int finished);
-
-
-/**
- * Function called about recoups the donau has to perform.
- *
- * @param cls closure
- * @param rowid row identifier used to uniquely identify the recoup operation
- * @param timestamp when did we receive the recoup request
- * @param amount how much should be added back to the reserve
- * @param reserve_pub public key of the reserve
- * @param coin public information about the coin
- * @param denom_pub denomination key of @a coin
- * @param coin_sig signature with @e coin_pub of type
#TALER_SIGNATURE_WALLET_COIN_RECOUP
- * @param coin_blind blinding factor used to blind the coin
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_RecoupCallback)(
- void *cls,
- uint64_t rowid,
- struct GNUNET_TIME_Timestamp timestamp,
- const struct TALER_Amount *amount,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_CoinPublicInfo *coin,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- const union TALER_DenominationBlindingKeyP *coin_blind);
-
-
-/**
- * Function called about recoups on refreshed coins the donau has to
- * perform.
- *
- * @param cls closure
- * @param rowid row identifier used to uniquely identify the recoup operation
- * @param timestamp when did we receive the recoup request
- * @param amount how much should be added back to the reserve
- * @param old_coin_pub original coin that was refreshed to create @a coin
- * @param old_denom_pub_hash hash of public key of @a old_coin_pub
- * @param coin public information about the coin
- * @param denom_pub denomination key of @a coin
- * @param coin_sig signature with @e coin_pub of type
#TALER_SIGNATURE_WALLET_COIN_RECOUP
- * @param coin_blind blinding factor used to blind the coin
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_RecoupRefreshCallback)(
- void *cls,
- uint64_t rowid,
- struct GNUNET_TIME_Timestamp timestamp,
- const struct TALER_Amount *amount,
- const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
- const struct TALER_DenominationHashP *old_denom_pub_hash,
- const struct TALER_CoinPublicInfo *coin,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- const union TALER_DenominationBlindingKeyP *coin_blind);
-
-
-/**
- * Function called about reserve opening operations.
- *
- * @param cls closure
- * @param rowid row identifier used to uniquely identify the reserve closing
operation
- * @param reserve_payment how much to pay from the
- * reserve's own balance for opening the reserve
- * @param request_timestamp when was the request created
- * @param reserve_expiration desired expiration time for the reserve
- * @param purse_limit minimum number of purses the client
- * wants to have concurrently open for this reserve
- * @param reserve_pub public key of the reserve
- * @param reserve_sig signature affirming the operation
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_ReserveOpenCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_Amount *reserve_payment,
- struct GNUNET_TIME_Timestamp request_timestamp,
- struct GNUNET_TIME_Timestamp reserve_expiration,
- uint32_t purse_limit,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_ReserveSignatureP *reserve_sig);
-
-
-/**
- * Function called about reserve closing operations
- * the aggregator triggered.
- *
- * @param cls closure
- * @param rowid row identifier used to uniquely identify the reserve closing
operation
- * @param execution_date when did we execute the close operation
- * @param amount_with_fee how much did we debit the reserve
- * @param closing_fee how much did we charge for closing the reserve
- * @param reserve_pub public key of the reserve
- * @param receiver_account where did we send the funds, in payto://-format
- * @param wtid identifier used for the wire transfer
- * @param close_request_row row with the responsible close
- * request, 0 if regular expiration triggered close
- * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_ReserveClosedCallback)(
- void *cls,
- uint64_t rowid,
- struct GNUNET_TIME_Timestamp execution_date,
- const struct TALER_Amount *amount_with_fee,
- const struct TALER_Amount *closing_fee,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const char *receiver_account,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- uint64_t close_request_row);
-
-
-/**
- * Function called with the amounts historically
- * withdrawn from the same origin account.
- *
- * @param cls closure
- * @param val one of the withdrawn amounts
- */
-typedef void
-(*TALER_DONAUDB_WithdrawHistoryCallback)(
- void *cls,
- const struct TALER_Amount *val);
-
-/**
- * Function called with details about expired reserves.
- *
- * @param cls closure
- * @param reserve_pub public key of the reserve
- * @param left amount left in the reserve
- * @param account_details information about the reserve's bank account, in
payto://-format
- * @param expiration_date when did the reserve expire
- * @param close_request_row row that caused the reserve
- * to be closed, 0 if it expired without request
- * @return #GNUNET_OK on success,
- * #GNUNET_NO to retry
- * #GNUNET_SYSERR on hard failures (exit)
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_ReserveExpiredCallback)(
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_Amount *left,
- const char *account_details,
- struct GNUNET_TIME_Timestamp expiration_date,
- uint64_t close_request_row);
-
-
-/**
- * Function called with information justifying an aggregate recoup.
- * (usually implemented by the auditor when verifying losses from recoups).
- *
- * @param cls closure
- * @param rowid row identifier used to uniquely identify the recoup operation
- * @param coin information about the coin
- * @param coin_sig signature of the coin of type
#TALER_SIGNATURE_WALLET_COIN_RECOUP
- * @param coin_blind blinding key of the coin
- * @param h_blinded_ev blinded envelope, as calculated by the donau
- * @param amount total amount to be paid back
- */
-typedef void
-(*TALER_DONAUDB_RecoupJustificationCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_CoinPublicInfo *coin,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- const union TALER_DenominationBlindingKeyP *coin_blind,
- const struct TALER_BlindedCoinHashP *h_blinded_ev,
- const struct TALER_Amount *amount);
-
-
-/**
- * Function called on deposits that are past their due date
- * and have not yet seen a wire transfer.
- *
- * @param cls closure
- * @param rowid deposit table row of the coin's deposit
- * @param coin_pub public key of the coin
- * @param amount value of the deposit, including fee
- * @param payto_uri where should the funds be wired; URI in payto://-format
- * @param deadline what was the requested wire transfer deadline
- * @param done did the donau claim that it made a transfer?
- */
-typedef void
-(*TALER_DONAUDB_WireMissingCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *amount,
- const char *payto_uri,
- struct GNUNET_TIME_Timestamp deadline,
- bool done);
-
-
-/**
- * Function called on purse requests.
- *
- * @param cls closure
- * @param rowid purse request table row of the purse
- * @param purse_pub public key of the purse
- * @param merge_pub public key representing the merge capability
- * @param purse_creation when was the purse created?
- * @param purse_expiration when would an unmerged purse expire
- * @param h_contract_terms contract associated with the purse
- * @param age_limit the age limit for deposits into the purse
- * @param target_amount amount to be put into the purse
- * @param purse_sig signature of the purse over the initialization data
- * @return #GNUNET_OK to continue to iterate
- */
-typedef enum GNUNET_GenericReturnValue
-(*TALER_DONAUDB_PurseRequestCallback)(
- void *cls,
- uint64_t rowid,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_PurseMergePublicKeyP *merge_pub,
- struct GNUNET_TIME_Timestamp purse_creation,
- struct GNUNET_TIME_Timestamp purse_expiration,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- uint32_t age_limit,
- const struct TALER_Amount *target_amount,
- const struct TALER_PurseContractSignatureP *purse_sig);
-
-
-/**
- * Function called with information about the donau's denomination keys.
- * Note that the 'master' field in @a issue will not yet be initialized when
- * this function is called!
- *
- * @param cls closure
- * @param denom_pub public key of the denomination
- * @param issue detailed information about the denomination (value, expiration
times, fees);
- */
-typedef void
-(*TALER_DONAUDB_DenominationCallback)(
- void *cls,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DONAUDB_DenominationKeyInformation *issue);
-
-
-/**
- * Return AML status.
- *
- * @param cls closure
- * @param row_id current row in AML status table
- * @param h_payto account for which the attribute data is stored
- * @param threshold currently monthly threshold that would trigger an AML check
- * @param status what is the current AML decision
- */
-typedef void
-(*TALER_DONAUDB_AmlStatusCallback)(
- void *cls,
- uint64_t row_id,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_Amount *threshold,
- enum TALER_AmlDecisionState status);
-
-
-/**
- * Return historic AML decision.
- *
- * @param cls closure
- * @param new_threshold new monthly threshold that would trigger an AML check
- * @param new_status AML decision status
- * @param decision_time when was the decision made
- * @param justification human-readable text justifying the decision
- * @param decider_pub public key of the staff member
- * @param decider_sig signature of the staff member
- */
-typedef void
-(*TALER_DONAUDB_AmlHistoryCallback)(
- void *cls,
- const struct TALER_Amount *new_threshold,
- enum TALER_AmlDecisionState new_status,
- struct GNUNET_TIME_Timestamp decision_time,
- const char *justification,
- const struct TALER_AmlOfficerPublicKeyP *decider_pub,
- const struct TALER_AmlOfficerSignatureP *decider_sig);
-
-
-/**
- * @brief The plugin API, returned from the plugin's "init" function.
- * The argument given to "init" is simply a configuration handle.
- */
-struct TALER_DONAUDB_Plugin
-{
-
- /**
- * Closure for all callbacks.
- */
- void *cls;
-
- /**
- * Name of the library which generated this plugin. Set by the
- * plugin loader.
- */
- char *library_name;
-
-
- /**
- * Drop the Taler tables. This should only be used in testcases.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
- */
- enum GNUNET_GenericReturnValue
- (*drop_tables)(void *cls);
-
- /**
- * Create the necessary tables if they are not present
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param support_partitions true to enable partitioning support (disables
foreign key constraints)
- * @param num_partitions number of partitions to create,
- * (0 to not actually use partitions, 1 to only
- * setup a default partition, >1 for real partitions)
- * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
- */
- enum GNUNET_GenericReturnValue
- (*create_tables)(void *cls,
- bool support_partitions,
- uint32_t num_partitions);
-
-
- /**
- * Start a transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param name unique name identifying the transaction (for debugging),
- * must point to a constant
- * @return #GNUNET_OK on success
- */
- enum GNUNET_GenericReturnValue
- (*start)(void *cls,
- const char *name);
-
-
- /**
- * Start a READ COMMITTED transaction.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param name unique name identifying the transaction (for debugging)
- * must point to a constant
- * @return #GNUNET_OK on success
- */
- enum GNUNET_GenericReturnValue
- (*start_read_committed)(void *cls,
- const char *name);
-
- /**
- * Start a READ ONLY serializable transaction.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param name unique name identifying the transaction (for debugging)
- * must point to a constant
- * @return #GNUNET_OK on success
- */
- enum GNUNET_GenericReturnValue
- (*start_read_only)(void *cls,
- const char *name);
-
-
- /**
- * Commit a transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*commit)(void *cls);
-
-
- /**
- * Do a pre-flight check that we are not in an uncommitted transaction.
- * If we are, try to commit the previous transaction and output a warning.
- * Does not return anything, as we will continue regardless of the outcome.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @return #GNUNET_OK if everything is fine
- * #GNUNET_NO if a transaction was rolled back
- * #GNUNET_SYSERR on hard errors
- */
- enum GNUNET_GenericReturnValue
- (*preflight)(void *cls);
-
-
- /**
- * Abort/rollback a transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- */
- void
- (*rollback) (void *cls);
-
-
- /**
- * Register callback to be invoked on events of type @a es.
- *
- * @param cls database context to use
- * @param timeout how long to wait at most
- * @param es specification of the event to listen for
- * @param cb function to call when the event happens, possibly
- * multiple times (until cancel is invoked)
- * @param cb_cls closure for @a cb
- * @return handle useful to cancel the listener
- */
- struct GNUNET_DB_EventHandler *
- (*event_listen)(void *cls,
- struct GNUNET_TIME_Relative timeout,
- const struct GNUNET_DB_EventHeaderP *es,
- GNUNET_DB_EventCallback cb,
- void *cb_cls);
-
- /**
- * Stop notifications.
- *
- * @param cls database context to use
- * @param eh handle to unregister.
- */
- void
- (*event_listen_cancel)(void *cls,
- struct GNUNET_DB_EventHandler *eh);
-
-
- /**
- * Notify all that listen on @a es of an event.
- *
- * @param cls database context to use
- * @param es specification of the event to generate
- * @param extra additional event data provided
- * @param extra_size number of bytes in @a extra
- */
- void
- (*event_notify)(void *cls,
- const struct GNUNET_DB_EventHeaderP *es,
- const void *extra,
- size_t extra_size);
-
-
- /**
- * Insert information about a denomination key and in particular
- * the properties (value, fees, expiration times) the coins signed
- * with this key have.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @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 denomination
- * @return status of the query
- */
- enum GNUNET_DB_QueryStatus
- (*insert_denomination_info)(
- void *cls,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DONAUDB_DenominationKeyInformation *issue);
-
-
- /**
- * Fetch information about a denomination key.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param denom_pub_hash hash of 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
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_denomination_info)(
- void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- struct TALER_DONAUDB_DenominationKeyInformation *issue);
-
-
- /**
- * Function called on every known denomination key. Runs in its
- * own read-only transaction (hence no session provided). Note that
- * the "master" field in the callback's 'issue' argument will NOT
- * be initialized yet.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each denomination key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*iterate_denomination_info)(void *cls,
- TALER_DONAUDB_DenominationCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to invoke @a cb on every known denomination key (revoked
- * and non-revoked) that has been signed by the master key. Runs in its own
- * read-only transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each denomination key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*iterate_denominations)(void *cls,
- TALER_DONAUDB_DenominationsCallback cb,
- void *cb_cls);
-
- /**
- * Function called to invoke @a cb on every non-revoked donau signing key
- * that has been signed by the master key. Revoked and (for signing!)
- * expired keys are skipped. Runs in its own read-only transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each signing key
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*iterate_active_signkeys)(void *cls,
- TALER_DONAUDB_ActiveSignkeysCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to invoke @a cb on every active auditor. Disabled
- * auditors are skipped. Runs in its own read-only transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each active auditor
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*iterate_active_auditors)(void *cls,
- TALER_DONAUDB_AuditorsCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to invoke @a cb on every denomination with an active
- * auditor. Disabled auditors and denominations without auditor are
- * skipped. Runs in its own read-only transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param cb function to call on each active auditor-denomination pair
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*iterate_auditor_denominations)(
- void *cls,
- TALER_DONAUDB_AuditorDenominationsCallback cb,
- void *cb_cls);
-
-
- /**
- * Get the summary of a reserve.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param[in,out] reserve the reserve data. The public key of the reserve
should be set
- * in this structure; it is used to query the database. The balance
- * and expiration are then filled accordingly.
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*reserves_get)(void *cls,
- struct TALER_DONAUDB_Reserve *reserve);
-
-
- /**
- * Get the origin of funds of a reserve.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param reserve_pub public key of the reserve
- * @param[out] h_payto set to hash of the wire source payto://-URI
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*reserves_get_origin)(
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_PaytoHashP *h_payto);
-
-
- /**
- * Extract next KYC alert. Deletes the alert.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param trigger_type which type of alert to drain
- * @param[out] h_payto set to hash of payto-URI where KYC status changed
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*drain_kyc_alert)(void *cls,
- uint32_t trigger_type,
- struct TALER_PaytoHashP *h_payto);
-
-
- /**
- * Insert a batch of incoming transaction into reserves. New reserves are
- * also created through this function.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param reserves
- * @param reserves_length length of the @a reserves array
- * @param[out] results array of transaction status codes of length @a
reserves_length,
- * set to the status of the
- */
- enum GNUNET_DB_QueryStatus
- (*reserves_in_insert)(
- void *cls,
- const struct TALER_DONAUDB_ReserveInInfo *reserves,
- unsigned int reserves_length,
- enum GNUNET_DB_QueryStatus *results);
-
-
- /**
- * Locate a nonce for use with a particular public key.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param nonce the nonce to be locked
- * @param denom_pub_hash hash of the public key of the denomination
- * @param target public key the nonce is to be locked to
- * @return statement execution status
- */
- enum GNUNET_DB_QueryStatus
- (*lock_nonce)(void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_DenominationHashP *denom_pub_hash,
- const union TALER_DONAUDB_NonceLockTargetP *target);
-
-
- /**
- * Locate the response for a withdraw request under a hash that uniquely
- * identifies the withdraw operation. Used to ensure idempotency of the
- * request.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param bch hash that uniquely identifies the withdraw operation
- * @param[out] collectable corresponding collectable coin (blind signature)
- * if a coin is found
- * @return statement execution status
- */
- enum GNUNET_DB_QueryStatus
- (*get_withdraw_info)(void *cls,
- const struct TALER_BlindedCoinHashP *bch,
- struct TALER_DONAUDB_CollectableBlindcoin *collectable);
-
-
- /**
- * Perform withdraw operation, checking for sufficient balance
- * and possibly persisting the withdrawal details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param nonce client-contributed input for CS denominations that must be
checked for idempotency, or NULL for non-CS withdrawals
- * @param collectable corresponding collectable coin (blind signature)
- * @param now current time (rounded)
- * @param do_age_check set to true if age requirements must be checked.
- * @param[out] found set to true if the reserve was found
- * @param[out] balance_ok set to true if the balance was sufficient
- * @param[out] nonce_ok set to false if the nonce was reused
- * @param[out] age_ok set to true if no age requirements were defined on the
reserve or @e do_age_check was false
- * @param[out] allowed_maximum_age when @e age_ok is false, set to the
allowed maximum age for withdrawal from the reserve. The client MUST then use
the age-withdraw endpoint
- * @param[out] ruuid set to the reserve's UUID (reserves table row)
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_withdraw)(
- void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_DONAUDB_CollectableBlindcoin *collectable,
- struct GNUNET_TIME_Timestamp now,
- bool do_age_check,
- bool *found,
- bool *balance_ok,
- bool *nonce_ok,
- bool *age_ok,
- uint16_t *allowed_maximum_age,
- uint64_t *ruuid);
-
-
- /**
- * FIXME: merge do_batch_withdraw and do_batch_withdraw_insert into one API,
- * which takes as input (among others)
- * - denom_serial[]
- * - blinded_coin_evs[]
- * - denom_sigs[]
- * The implementation should persist the data as _arrays_ in the DB.
- */
-
- /**
- * Perform reserve update as part of a batch withdraw operation, checking
- * for sufficient balance. Persisting the withdrawal details is done
- * separately!
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param now current time (rounded)
- * @param reserve_pub public key of the reserve to debit
- * @param amount total amount to withdraw
- * @param do_age_check if set, the batch-withdrawal can only succeed when
the reserve has no age restriction (birthday) set.
- * @param[out] found set to true if the reserve was found
- * @param[out] balance_ok set to true if the balance was sufficient
- * @param[out] age_ok set to true if no age requirements were defined on the
reserve or @e do_age_check was false
- * @param[out] allowed_maximum_age when @e age_ok is false, set to the
allowed maximum age for withdrawal from the reserve. The client MUST then use
the age-withdraw endpoint
- * @param[out] ruuid set to the reserve's UUID (reserves table row)
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_batch_withdraw)(
- void *cls,
- struct GNUNET_TIME_Timestamp now,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_Amount *amount,
- bool do_age_check,
- bool *found,
- bool *balance_ok,
- bool *age_ok,
- uint16_t *allowed_maximum_age,
- uint64_t *ruuid);
-
-
- /**
- * Perform insert as part of a batch withdraw operation, and persisting the
- * withdrawal details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param nonce client-contributed input for CS denominations that must be
checked for idempotency, or NULL for non-CS withdrawals
- * @param collectable corresponding collectable coin (blind signature)
- * @param now current time (rounded)
- * @param ruuid reserve UUID
- * @param[out] denom_unknown set if the denomination is unknown in the DB
- * @param[out] conflict if the envelope was already in the DB
- * @param[out] nonce_reuse if @a nonce was non-NULL and reused
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_batch_withdraw_insert)(
- void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_DONAUDB_CollectableBlindcoin *collectable,
- struct GNUNET_TIME_Timestamp now,
- uint64_t ruuid,
- bool *denom_unknown,
- bool *conflict,
- bool *nonce_reuse);
-
- /**
- * Locate the response for a age-withdraw request under a hash of the
- * commitment and reserve_pub that uniquely identifies the age-withdraw
- * operation. Used to ensure idempotency of the request.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param reserve_pub public key of the reserve for which the age-withdraw
request is made
- * @param ach hash that uniquely identifies the age-withdraw operation
- * @param[out] aw corresponding details of the previous age-withdraw request
if an entry was found
- * @return statement execution status
- */
- enum GNUNET_DB_QueryStatus
- (*get_age_withdraw)(
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_AgeWithdrawCommitmentHashP *ach,
- struct TALER_DONAUDB_AgeWithdraw *aw);
-
- /**
- * Perform an age-withdraw operation, checking for sufficient balance and
- * fulfillment of age requirements and possibly persisting the withdrawal
- * details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param commitment corresponding commitment for the age-withdraw
- * @param[out] found set to true if the reserve was found
- * @param[out] balance_ok set to true if the balance was sufficient
- * @param[out] age_ok set to true if age requirements were met
- * @param[out] allowed_maximum_age if @e age_ok is FALSE, this is set to the
allowed maximum age
- * @param[out] reserve_birthday if @e age_ok is FALSE, this is set to the
reserve's birthday
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_age_withdraw)(
- void *cls,
- const struct TALER_DONAUDB_AgeWithdraw *commitment,
- struct GNUNET_TIME_Timestamp now,
- bool *found,
- bool *balance_ok,
- bool *age_ok,
- uint16_t *allowed_maximum_age,
- uint32_t *reserve_birthday,
- bool *conflict);
-
- /**
- * Retrieve the details to a policy given by its hash_code
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param hc Hash code that identifies the policy
- * @param[out] detail retrieved policy details
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*get_policy_details)(
- void *cls,
- const struct GNUNET_HashCode *hc,
- struct TALER_PolicyDetails *detail);
-
- /**
- * Persist the policy details that extends a deposit. The particular policy
- * - referenced by details->hash_code - might already exist in the table, in
- * which case the call will update the contents of the record with @e details
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param details The parsed `struct TALER_PolicyDetails` according to the
responsible policy extension.
- * @param[out] policy_details_serial_id The ID of the entry in the
policy_details table
- * @param[out] accumulated_total The total amount accumulated in that policy
- * @param[out] fulfillment_state The state of policy. If the state was
Insufficient prior to the call and the provided deposit raises the
accumulated_total above the commitment, it will be set to Ready.
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*persist_policy_details)(
- void *cls,
- const struct TALER_PolicyDetails *details,
- uint64_t *policy_details_serial_id,
- struct TALER_Amount *accumulated_total,
- enum TALER_PolicyFulfillmentState *fulfillment_state);
-
-
- /**
- * Perform deposit operation, checking for sufficient balance
- * of the coin and possibly persisting the deposit details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param bd batch deposit operation details
- * @param[in,out] donau_timestamp time to use for the deposit (possibly
updated)
- * @param[out] balance_ok set to true if the balance was sufficient
- * @param[out] bad_balance_index set to the first index of a coin for which
the balance was insufficient,
- * only used if @a balance_ok is set to false.
- * @param[out] ctr_conflict set to true if the same contract terms hash was
previously submitted with other meta data (deadlines, wallet_data_hash, wire
data etc.)
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_deposit)(
- void *cls,
- const struct TALER_DONAUDB_BatchDeposit *bd,
- struct GNUNET_TIME_Timestamp *donau_timestamp,
- bool *balance_ok,
- uint32_t *bad_balance_index,
- bool *ctr_conflict);
-
-
- /**
- * Perform melt operation, checking for sufficient balance
- * of the coin and possibly persisting the melt details.
- *
- * @param cls the plugin-specific state
- * @param rms client-contributed input for CS denominations that must be
checked for idempotency, or NULL for non-CS withdrawals
- * @param[in,out] refresh refresh operation details; the noreveal_index
- * is set in case the coin was already melted before
- * @param known_coin_id row of the coin in the known_coins table
- * @param[in,out] zombie_required true if the melt must only succeed if the
coin is a zombie, set to false if the requirement was satisfied
- * @param[out] balance_ok set to true if the balance was sufficient
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_melt)(
- void *cls,
- const struct TALER_RefreshMasterSecretP *rms,
- struct TALER_DONAUDB_Refresh *refresh,
- uint64_t known_coin_id,
- bool *zombie_required,
- bool *balance_ok);
-
-
- /**
- * Add a proof of fulfillment of an policy
- *
- * @param cls the plugin-specific state
- * @param[in,out] fulfillment The proof of fulfillment and serial_ids of the
policy_details along with their new state and potential new amounts.
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*add_policy_fulfillment_proof)(
- void *cls,
- struct TALER_PolicyFulfillmentTransactionData *fulfillment);
-
-
- /**
- * Check if the given @a nonce was properly locked to the given @a
old_coin_pub. If so, check if we already
- * created CS signatures for the given @a nonce and @a new_denom_pub_hashes,
- * and if so, return them in @a s_scalars. Otherwise, persist the
- * signatures from @a s_scalars in the database.
- *
- * @param cls the plugin-specific state
- * @param nonce the client-provided nonce where we must prevent reuse
- * @param old_coin_pub public key the nonce was locked to
- * @param num_fresh_coins array length, number of fresh coins revealed
- * @param[in,out] crfcds array of data about the fresh coins, of length @a
num_fresh_coins
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*cs_refreshes_reveal)(
- void *cls,
- const struct TALER_CsNonce *nonce,
- const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
- unsigned int num_fresh_coins,
- struct TALER_DONAUDB_CsRevealFreshCoinData *crfcds);
-
-
- /**
- * Perform refund operation, checking for sufficient deposits
- * of the coin and possibly persisting the refund details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param refund refund operation details
- * @param deposit_fee deposit fee applicable for the coin, possibly refunded
- * @param known_coin_id row of the coin in the known_coins table
- * @param[out] not_found set if the deposit was not found
- * @param[out] refund_ok set if the refund succeeded (below deposit amount)
- * @param[out] gone if the charity was already paid
- * @param[out] conflict set if the refund ID was re-used
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_refund)(
- void *cls,
- const struct TALER_DONAUDB_Refund *refund,
- const struct TALER_Amount *deposit_fee,
- uint64_t known_coin_id,
- bool *not_found,
- bool *refund_ok,
- bool *gone,
- bool *conflict);
-
-
- /**
- * Perform recoup operation, checking for sufficient deposits
- * of the coin and possibly persisting the recoup details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param reserve_pub public key of the reserve to credit
- * @param reserve_out_serial_id row in the reserves_out table justifying the
recoup
- * @param coin_bks coin blinding key secret to persist
- * @param coin_pub public key of the coin being recouped
- * @param known_coin_id row of the @a coin_pub in the known_coins table
- * @param coin_sig signature of the coin requesting the recoup
- * @param[in,out] recoup_timestamp recoup timestamp, set if recoup existed
- * @param[out] recoup_ok set if the recoup succeeded (balance ok)
- * @param[out] internal_failure set on internal failures
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_recoup)(
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- uint64_t reserve_out_serial_id,
- const union TALER_DenominationBlindingKeyP *coin_bks,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- uint64_t known_coin_id,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- struct GNUNET_TIME_Timestamp *recoup_timestamp,
- bool *recoup_ok,
- bool *internal_failure);
-
-
- /**
- * Perform recoup-refresh operation, checking for sufficient deposits of the
- * coin and possibly persisting the recoup-refresh details.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param old_coin_pub public key of the old coin to credit
- * @param rrc_serial row in the refresh_revealed_coins table justifying the
recoup-refresh
- * @param coin_bks coin blinding key secret to persist
- * @param coin_pub public key of the coin being recouped
- * @param known_coin_id row of the @a coin_pub in the known_coins table
- * @param coin_sig signature of the coin requesting the recoup
- * @param[in,out] recoup_timestamp recoup timestamp, set if recoup existed
- * @param[out] recoup_ok set if the recoup-refresh succeeded (balance ok)
- * @param[out] internal_failure set on internal failures
- * @return query execution status
- */
- enum GNUNET_DB_QueryStatus
- (*do_recoup_refresh)(
- void *cls,
- const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
- uint64_t rrc_serial,
- const union TALER_DenominationBlindingKeyP *coin_bks,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- uint64_t known_coin_id,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- struct GNUNET_TIME_Timestamp *recoup_timestamp,
- bool *recoup_ok,
- bool *internal_failure);
-
-
- /**
- * Get all of the transaction history associated with the specified
- * reserve.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param reserve_pub public key of the reserve
- * @param[out] balance set to the reserve balance
- * @param[out] rhp set to known transaction history (NULL if reserve is
unknown)
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_reserve_history)(void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_Amount *balance,
- struct TALER_DONAUDB_ReserveHistory **rhp);
-
-
- /**
- * Get truncated transaction history associated with the specified
- * reserve.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param reserve_pub public key of the reserve
- * @param[out] balance_in set to the total of inbound
- * transactions in the returned history
- * @param[out] balance_out set to the total of outbound
- * transactions in the returned history
- * @param[out] rhp set to known transaction history (NULL if reserve is
unknown)
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_reserve_status)(void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_Amount *balance_in,
- struct TALER_Amount *balance_out,
- struct TALER_DONAUDB_ReserveHistory **rhp);
-
-
- /**
- * The current reserve balance of the specified reserve.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param reserve_pub public key of the reserve
- * @param[out] balance set to the reserve balance
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_reserve_balance)(void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_Amount *balance);
-
-
- /**
- * Free memory associated with the given reserve history.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param rh history to free.
- */
- void
- (*free_reserve_history) (void *cls,
- struct TALER_DONAUDB_ReserveHistory *rh);
-
-
- /**
- * Count the number of known coins by denomination.
- *
- * @param cls database connection plugin state
- * @param denom_pub_hash denomination to count by
- * @return number of coins if non-negative, otherwise an `enum
GNUNET_DB_QueryStatus`
- */
- long long
- (*count_known_coins) (void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash);
-
-
- /**
- * Make sure the given @a coin is known to the database.
- *
- * @param cls database connection plugin state
- * @param coin the coin that must be made known
- * @param[out] known_coin_id set to the unique row of the coin
- * @param[out] denom_pub_hash set to the conflicting denomination hash on
conflict
- * @param[out] age_hash set to the conflicting age hash on conflict
- * @return database transaction status, non-negative on success
- */
- enum TALER_DONAUDB_CoinKnownStatus
- {
- /**
- * The coin was successfully added.
- */
- TALER_DONAUDB_CKS_ADDED = 1,
-
- /**
- * The coin was already present.
- */
- TALER_DONAUDB_CKS_PRESENT = 0,
-
- /**
- * Serialization failure.
- */
- TALER_DONAUDB_CKS_SOFT_FAIL = -1,
-
- /**
- * Hard database failure.
- */
- TALER_DONAUDB_CKS_HARD_FAIL = -2,
-
- /**
- * Conflicting coin (different denomination key) already in database.
- */
- TALER_DONAUDB_CKS_DENOM_CONFLICT = -3,
-
- /**
- * Conflicting coin (different age hash) already in database.
- */
- TALER_DONAUDB_CKS_AGE_CONFLICT = -4,
- }
- (*ensure_coin_known)(void *cls,
- const struct TALER_CoinPublicInfo *coin,
- uint64_t *known_coin_id,
- struct TALER_DenominationHashP *denom_pub_hash,
- struct TALER_AgeCommitmentHash *age_hash);
-
-
- /**
- * Make sure the array of given @a coin is known to the database.
- *
- * @param cls database connection plugin state
- * @param coin array of coins that must be made known
- * @param[out] result array where to store information about each coin
- * @param coin_length length of the @a coin and @a result arraysf
- * @param batch_size desired (maximum) batch size
- * @return database transaction status, non-negative on success
- */
- enum GNUNET_DB_QueryStatus
- (*batch_ensure_coin_known)(
- void *cls,
- const struct TALER_CoinPublicInfo *coin,
- struct TALER_DONAUDB_CoinInfo *result,
- unsigned int coin_length,
- unsigned int batch_size);
-
-
- /**
- * Retrieve information about the given @a coin from the database.
- *
- * @param cls database connection plugin state
- * @param coin the coin that must be made known
- * @return database transaction status, non-negative on success
- */
- enum GNUNET_DB_QueryStatus
- (*get_known_coin)(void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- struct TALER_CoinPublicInfo *coin_info);
-
-
- /**
- * Retrieve the denomination of a known coin.
- *
- * @param cls the plugin closure
- * @param coin_pub the public key of the coin to search for
- * @param[out] known_coin_id set to the ID of the coin in the known_coins
table
- * @param[out] denom_hash where to store the hash of the coins denomination
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_coin_denomination)(void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- uint64_t *known_coin_id,
- struct TALER_DenominationHashP *denom_hash);
-
-
- /**
- * Check if we have the specified deposit already in the database.
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param h_contract_terms contract to check for
- * @param h_wire wire hash to check for
- * @param coin_pub public key of the coin to check for
- * @param charity charity public key to check for
- * @param refund_deadline expected refund deadline
- * @param[out] deposit_fee set to the deposit fee the donau charged
- * @param[out] donau_timestamp set to the time when the donau received the
deposit
- * @return 1 if we know this operation,
- * 0 if this exact deposit is unknown to us,
- * otherwise transaction error status
- */
- // FIXME: rename!
- enum GNUNET_DB_QueryStatus
- (*have_deposit2)(
- void *cls,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- const struct TALER_CharityWireHashP *h_wire,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CharityPublicKeyP *charity,
- struct GNUNET_TIME_Timestamp refund_deadline,
- struct TALER_Amount *deposit_fee,
- struct GNUNET_TIME_Timestamp *donau_timestamp);
-
-
- /**
- * Insert information about refunded coin into the database.
- * Used in tests and for benchmarking.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param refund refund information to store
- * @return query result status
- */
- enum GNUNET_DB_QueryStatus
- (*insert_refund)(void *cls,
- const struct TALER_DONAUDB_Refund *refund);
-
-
- /**
- * Select refunds by @a coin_pub, @a charity_pub and @a h_contract.
- *
- * @param cls closure of plugin
- * @param coin_pub coin to get refunds for
- * @param charity_pub charity to get refunds for
- * @param h_contract_pub contract (hash) to get refunds for
- * @param cb function to call for each refund found
- * @param cb_cls closure for @a cb
- * @return query result status
- */
- enum GNUNET_DB_QueryStatus
- (*select_refunds_by_coin)(void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CharityPublicKeyP *charity_pub,
- const struct TALER_PrivateContractHashP
*h_contract,
- TALER_DONAUDB_RefundCoinCallback cb,
- void *cb_cls);
-
-
- /**
- * Obtain information about deposits that are ready to be executed.
- * Such deposits must not be marked as "done", and the
- * execution time, the refund deadlines must both be in the past and
- * the KYC status must be 'ok'.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param start_shard_row minimum shard row to select
- * @param end_shard_row maximum shard row to select (inclusive)
- * @param[out] charity_pub set to the public key of a charity with a ready
deposit
- * @param[out] payto_uri set to the account of the charity, to be freed by
caller
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_ready_deposit)(void *cls,
- uint64_t start_shard_row,
- uint64_t end_shard_row,
- struct TALER_CharityPublicKeyP *charity_pub,
- char **payto_uri);
-
-
- /**
- * Aggregate all matching deposits for @a h_payto and
- * @a charity_pub, returning the total amounts.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto destination of the wire transfer
- * @param charity_pub public key of the charity
- * @param wtid wire transfer ID to set for the aggregate
- * @param[out] total set to the sum of the total deposits minus applicable
deposit fees and refunds
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*aggregate)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_CharityPublicKeyP *charity_pub,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- struct TALER_Amount *total);
-
-
- /**
- * Create a new entry in the transient aggregation table.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto destination of the wire transfer
- * @param donau_account_section donau account to use
- * @param charity_pub public key of the charity
- * @param wtid the raw wire transfer identifier to be used
- * @param kyc_requirement_row row in legitimization_requirements that need
to be satisfied to continue, or 0 for none
- * @param total amount to be wired in the future
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*create_aggregation_transient)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const char *donau_account_section,
- const struct TALER_CharityPublicKeyP *charity_pub,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- uint64_t kyc_requirement_row,
- const struct TALER_Amount *total);
-
-
- /**
- * Select existing entry in the transient aggregation table.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto destination of the wire transfer
- * @param charity_pub public key of the charity
- * @param donau_account_section donau account to use
- * @param[out] wtid set to the raw wire transfer identifier to be used
- * @param[out] total existing amount to be wired in the future
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*select_aggregation_transient)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_CharityPublicKeyP *charity_pub,
- const char *donau_account_section,
- struct TALER_WireTransferIdentifierRawP *wtid,
- struct TALER_Amount *total);
-
-
- /**
- * Find existing entry in the transient aggregation table.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto destination of the wire transfer
- * @param cb function to call on each matching entry
- * @param cb_cls closure for @a cb
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*find_aggregation_transient)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- TALER_DONAUDB_TransientAggregationCallback cb,
- void *cb_cls);
-
-
- /**
- * Update existing entry in the transient aggregation table.
- * @a h_payto is only needed for query performance.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto destination of the wire transfer
- * @param wtid the raw wire transfer identifier to update
- * @param kyc_requirement_row row in legitimization_requirements that need
to be satisfied to continue, or 0 for none
- * @param total new total amount to be wired in the future
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*update_aggregation_transient)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- uint64_t kyc_requirement_row,
- const struct TALER_Amount *total);
-
-
- /**
- * Delete existing entry in the transient aggregation table.
- * @a h_payto is only needed for query performance.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto destination of the wire transfer
- * @param wtid the raw wire transfer identifier to update
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*delete_aggregation_transient)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_WireTransferIdentifierRawP *wtid);
-
-
- /**
- * Lookup melt commitment data under the given @a rc.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param rc commitment to use for the lookup
- * @param[out] melt where to store the result; note that
- * melt->session.coin.denom_sig will be set to NULL
- * and is not fetched by this routine (as it is not needed by
the client)
- * @param[out] melt_serial_id set to the row ID of @a rc in the
refresh_commitments table
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_melt)(void *cls,
- const struct TALER_RefreshCommitmentP *rc,
- struct TALER_DONAUDB_Melt *melt,
- uint64_t *melt_serial_id);
-
-
- /**
- * Store in the database which coin(s) the wallet wanted to create
- * in a given refresh operation and all of the other information
- * we learned or created in the reveal step.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param melt_serial_id row ID of the commitment / melt operation in
refresh_commitments
- * @param num_rrcs number of coins to generate, size of the @a rrcs array
- * @param rrcs information about the new coins
- * @param num_tprivs number of entries in @a tprivs, should be
#TALER_CNC_KAPPA - 1
- * @param tprivs transfer private keys to store
- * @param tp public key to store
- * @return query status for the transaction
- */
- enum GNUNET_DB_QueryStatus
- (*insert_refresh_reveal)(
- void *cls,
- uint64_t melt_serial_id,
- uint32_t num_rrcs,
- const struct TALER_DONAUDB_RefreshRevealedCoin *rrcs,
- unsigned int num_tprivs,
- const struct TALER_TransferPrivateKeyP *tprivs,
- const struct TALER_TransferPublicKeyP *tp);
-
-
- /**
- * Lookup in the database for the fresh coins that we
- * created in the given refresh operation.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param rc identify commitment and thus refresh operation
- * @param cb function to call with the results
- * @param cb_cls closure for @a cb
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_refresh_reveal)(void *cls,
- const struct TALER_RefreshCommitmentP *rc,
- TALER_DONAUDB_RefreshCallback cb,
- void *cb_cls);
-
-
- /**
- * Obtain shared secret and transfer public key from the public key of
- * the coin. This information and the link information returned by
- * @e get_link_data_list() enable the owner of an old coin to determine
- * the private keys of the new coins after the melt.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param coin_pub public key of the coin
- * @param ldc function to call for each session the coin was melted into
- * @param ldc_cls closure for @a tdc
- * @return statement execution status
- */
- enum GNUNET_DB_QueryStatus
- (*get_link_data)(void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- TALER_DONAUDB_LinkCallback ldc,
- void *tdc_cls);
-
-
- /**
- * Compile a list of all (historic) transactions performed
- * with the given coin (melt, refund, recoup and deposit operations).
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param coin_pub coin to investigate
- * @param[out] tlp set to list of transactions, NULL if coin is fresh
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_coin_transactions)(void *cls,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- struct TALER_DONAUDB_TransactionList **tlp);
-
-
- /**
- * Free linked list of transactions.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param list list to free
- */
- void
- (*free_coin_transaction_list) (void *cls,
- struct TALER_DONAUDB_TransactionList *list);
-
-
- /**
- * Lookup the list of Taler transactions that was aggregated
- * into a wire transfer by the respective @a raw_wtid.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param wtid the raw wire transfer identifier we used
- * @param cb function to call on each transaction found
- * @param cb_cls closure for @a cb
- * @return query status of the transaction
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_wire_transfer)(void *cls,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- TALER_DONAUDB_AggregationDataCallback cb,
- void *cb_cls);
-
-
- /**
- * Try to find the wire transfer details for a deposit operation.
- * If we did not execute the deposit yet, return when it is supposed
- * to be executed.
- *
- * @param cls closure
- * @param h_contract_terms hash of the proposal data
- * @param h_wire hash of charity wire details
- * @param coin_pub public key of deposited coin
- * @param charity_pub charity public key
- * @param[out] pending set to true if the transaction is still pending
- * @param[out] wtid wire transfer identifier, only set if @a pending is false
- * @param[out] coin_contribution how much did the coin we asked about
- * contribute to the total transfer value? (deposit value including
fee)
- * @param[out] coin_fee how much did the donau charge for the deposit fee
- * @param[out] execution_time when was the transaction done, or
- * when we expect it to be done (if @a pending is false)
- * @param[out] kyc set to the kyc status of the receiver (if @a pending)
- * @param[out] aml_decision set to the current AML status for the target
account
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_transfer_by_deposit)(
- void *cls,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- const struct TALER_CharityWireHashP *h_wire,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_CharityPublicKeyP *charity_pub,
- bool *pending,
- struct TALER_WireTransferIdentifierRawP *wtid,
- struct GNUNET_TIME_Timestamp *exec_time,
- struct TALER_Amount *amount_with_fee,
- struct TALER_Amount *deposit_fee,
- struct TALER_DONAUDB_KycStatus *kyc,
- enum TALER_AmlDecisionState *aml_decision);
-
-
- /**
- * Insert wire transfer fee into database.
- *
- * @param cls closure
- * @param wire_method which wire method is the fee about?
- * @param start_date when does the fee go into effect
- * @param end_date when does the fee end being valid
- * @param fees how high is are the wire fees
- * @param master_sig signature over the above by the donau master key
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_wire_fee)(void *cls,
- const char *wire_method,
- struct GNUNET_TIME_Timestamp start_date,
- struct GNUNET_TIME_Timestamp end_date,
- const struct TALER_WireFeeSet *fees,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Insert global fee set into database.
- *
- * @param cls closure
- * @param start_date when does the fees go into effect
- * @param end_date when does the fees end being valid
- * @param fees how high is are the global fees
- * @param purse_timeout when do purses time out
- * @param history_expiration how long are account histories preserved
- * @param purse_account_limit how many purses are free per account
- * @param master_sig signature over the above by the donau master key
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_global_fee)(void *cls,
- struct GNUNET_TIME_Timestamp start_date,
- struct GNUNET_TIME_Timestamp end_date,
- const struct TALER_GlobalFeeSet *fees,
- struct GNUNET_TIME_Relative purse_timeout,
- struct GNUNET_TIME_Relative history_expiration,
- uint32_t purse_account_limit,
-
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Obtain wire fee from database.
- *
- * @param cls closure
- * @param type type of wire transfer the fee applies for
- * @param date for which date do we want the fee?
- * @param[out] start_date when does the fee go into effect
- * @param[out] end_date when does the fee end being valid
- * @param[out] fees how high are the wire fees
- * @param[out] master_sig signature over the above by the donau master key
- * @return query status of the transaction
- */
- enum GNUNET_DB_QueryStatus
- (*get_wire_fee)(void *cls,
- const char *type,
- struct GNUNET_TIME_Timestamp date,
- struct GNUNET_TIME_Timestamp *start_date,
- struct GNUNET_TIME_Timestamp *end_date,
- struct TALER_WireFeeSet *fees,
- struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Obtain global fees from database.
- *
- * @param cls closure
- * @param date for which date do we want the fee?
- * @param[out] start_date when does the fee go into effect
- * @param[out] end_date when does the fee end being valid
- * @param[out] fees how high are the global fees
- * @param[out] purse_timeout when do purses time out
- * @param[out] history_expiration how long are account histories preserved
- * @param[out] purse_account_limit how many purses are free per account
- * @param[out] master_sig signature over the above by the donau master key
- * @return query status of the transaction
- */
- enum GNUNET_DB_QueryStatus
- (*get_global_fee)(void *cls,
- struct GNUNET_TIME_Timestamp date,
- struct GNUNET_TIME_Timestamp *start_date,
- struct GNUNET_TIME_Timestamp *end_date,
- struct TALER_GlobalFeeSet *fees,
- struct GNUNET_TIME_Relative *purse_timeout,
- struct GNUNET_TIME_Relative *history_expiration,
- uint32_t *purse_account_limit,
- struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Obtain information about expired reserves and their
- * remaining balances.
- *
- * @param cls closure of the plugin
- * @param now timestamp based on which we decide expiration
- * @param rec function to call on expired reserves
- * @param rec_cls closure for @a rec
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_expired_reserves)(void *cls,
- struct GNUNET_TIME_Timestamp now,
- TALER_DONAUDB_ReserveExpiredCallback rec,
- void *rec_cls);
-
-
- /**
- * Obtain information about force-closed reserves
- * where the close was not yet done (and their remaining
- * balances). Updates the returned reserve's close
- * status to "done".
- *
- * @param cls closure of the plugin
- * @param rec function to call on (to be) closed reserves
- * @param rec_cls closure for @a rec
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*get_unfinished_close_requests)(
- void *cls,
- TALER_DONAUDB_ReserveExpiredCallback rec,
- void *rec_cls);
-
-
- /**
- * Insert reserve open coin deposit data into database.
- * Subtracts the @a coin_total from the coin's balance.
- *
- * @param cls closure
- * @param cpi public information about the coin
- * @param coin_sig signature with @e coin_pub of type
#TALER_SIGNATURE_WALLET_RESERVE_OPEN_DEPOSIT
- * @param known_coin_id ID of the coin in the known_coins table
- * @param coin_total amount to be spent of the coin (including deposit fee)
- * @param reserve_sig signature by the reserve affirming the open operation
- * @param reserve_pub public key of the reserve being opened
- * @param[out] insufficient_funds set to true if the coin's balance is
insufficient, otherwise to false
- * @return transaction status code, 0 if operation is already in the DB
- */
- enum GNUNET_DB_QueryStatus
- (*insert_reserve_open_deposit)(
- void *cls,
- const struct TALER_CoinPublicInfo *cpi,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- uint64_t known_coin_id,
- const struct TALER_Amount *coin_total,
- const struct TALER_ReserveSignatureP *reserve_sig,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- bool *insufficient_funds);
-
-
- /**
- * Insert reserve close operation into database.
- *
- * @param cls closure
- * @param reserve_pub which reserve is this about?
- * @param total_paid total amount paid (coins and reserve)
- * @param reserve_payment amount to be paid from the reserve
- * @param min_purse_limit minimum number of purses we should be able to open
- * @param reserve_sig signature by the reserve for the operation
- * @param desired_expiration when should the reserve expire (earliest time)
- * @param now when did we the client initiate the action
- * @param open_fee annual fee to be charged for the open operation by the
donau
- * @param[out] no_funds set to true if reserve balance is insufficient
- * @param[out] open_cost set to the actual cost
- * @param[out] final_expiration when will the reserve expire now
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*do_reserve_open)(void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_Amount *total_paid,
- const struct TALER_Amount *reserve_payment,
- uint32_t min_purse_limit,
- const struct TALER_ReserveSignatureP *reserve_sig,
- struct GNUNET_TIME_Timestamp desired_expiration,
- struct GNUNET_TIME_Timestamp now,
- const struct TALER_Amount *open_fee,
- bool *no_funds,
- struct TALER_Amount *open_cost,
- struct GNUNET_TIME_Timestamp *final_expiration);
-
-
- /**
- * Select information needed to see if we can close
- * a reserve.
- *
- * @param cls closure
- * @param reserve_pub which reserve is this about?
- * @param[out] balance current reserve balance
- * @param[out] payto_uri set to URL of account that
- * originally funded the reserve;
- * could be set to NULL if not known
- * @return transaction status code, 0 if reserve unknown
- */
- enum GNUNET_DB_QueryStatus
- (*select_reserve_close_info)(
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct TALER_Amount *balance,
- char **payto_uri);
-
-
- /**
- * Select information about reserve close requests.
- *
- * @param cls closure
- * @param reserve_pub which reserve is this about?
- * @param rowid row ID of the close request
- * @param[out] reserve_sig reserve signature affirming
- * @param[out] request_timestamp when was the request made
- * @param[out] close_balance reserve balance at close time
- * @param[out] close_fee closing fee to be charged
- * @param[out] payto_uri set to URL of account that
- * should receive the money;
- * could be set to NULL for origin
- * @return transaction status code, 0 if reserve unknown
- */
- enum GNUNET_DB_QueryStatus
- (*select_reserve_close_request_info)(
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- uint64_t rowid,
- struct TALER_ReserveSignatureP *reserve_sig,
- struct GNUNET_TIME_Timestamp *request_timestamp,
- struct TALER_Amount *close_balance,
- struct TALER_Amount *close_fee,
- char **payto_uri);
-
-
- /**
- * Select information needed for KYC checks on reserve close: historic
- * reserve closures going to the same account.
- *
- * @param cls closure
- * @param h_payto which target account is this about?
- * @param h_payto account identifier
- * @param time_limit oldest transaction that could be relevant
- * @param kac function to call for each applicable amount, in reverse
chronological order (or until @a kac aborts by returning anything except
#GNUNET_OK).
- * @param kac_cls closure for @a kac
- * @return transaction status code, @a kac aborting with #GNUNET_NO is not
an error
- */
- enum GNUNET_DB_QueryStatus
- (*iterate_reserve_close_info)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- struct GNUNET_TIME_Absolute time_limit,
- TALER_DONAUDB_KycAmountCallback kac,
- void *kac_cls);
-
-
- /**
- * Insert reserve close operation into database.
- *
- * @param cls closure
- * @param reserve_pub which reserve is this about?
- * @param execution_date when did we perform the transfer?
- * @param receiver_account to which account do we transfer, in
payto://-format
- * @param wtid identifier for the wire transfer
- * @param amount_with_fee amount we charged to the reserve
- * @param closing_fee how high is the closing fee
- * @param close_request_row identifies explicit close request, 0 for none
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_reserve_closed)(void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- struct GNUNET_TIME_Timestamp execution_date,
- const char *receiver_account,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- const struct TALER_Amount *amount_with_fee,
- const struct TALER_Amount *closing_fee,
- uint64_t close_request_row);
-
-
- /**
- * Function called to insert wire transfer commit data into the DB.
- *
- * @param cls closure
- * @param type type of the wire transfer (i.e. "iban")
- * @param buf buffer with wire transfer preparation data
- * @param buf_size number of bytes in @a buf
- * @return query status code
- */
- enum GNUNET_DB_QueryStatus
- (*wire_prepare_data_insert)(void *cls,
- const char *type,
- const char *buf,
- size_t buf_size);
-
-
- /**
- * Function called to mark wire transfer commit data as finished.
- *
- * @param cls closure
- * @param rowid which entry to mark as finished
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*wire_prepare_data_mark_finished)(void *cls,
- uint64_t rowid);
-
-
- /**
- * Function called to mark wire transfer as failed.
- *
- * @param cls closure
- * @param rowid which entry to mark as failed
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*wire_prepare_data_mark_failed)(void *cls,
- uint64_t rowid);
-
-
- /**
- * Function called to get an unfinished wire transfer
- * preparation data.
- *
- * @param cls closure
- * @param start_row offset to query table at
- * @param limit maximum number of results to return
- * @param cb function to call for unfinished work
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*wire_prepare_data_get)(void *cls,
- uint64_t start_row,
- uint64_t limit,
- TALER_DONAUDB_WirePreparationIterator cb,
- void *cb_cls);
-
-
- /**
- * Starts a READ COMMITTED transaction where we transiently violate the
foreign
- * constraints on the "wire_out" table as we insert aggregations
- * and only add the wire transfer out at the end.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @return #GNUNET_OK on success
- */
- enum GNUNET_GenericReturnValue
- (*start_deferred_wire_out)(void *cls);
-
-
- /**
- * Store information about an outgoing wire transfer that was executed.
- *
- * @param cls closure
- * @param date time of the wire transfer
- * @param h_payto identifies the receiver account of the wire transfer
- * @param wire_account details about the receiver account of the wire
transfer,
- * including 'url' in payto://-format
- * @param amount amount that was transmitted
- * @param donau_account_section configuration section of the donau
specifying the
- * donau's bank account being used
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*store_wire_transfer_out)(
- void *cls,
- struct GNUNET_TIME_Timestamp date,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- const struct TALER_PaytoHashP *h_payto,
- const char *donau_account_section,
- const struct TALER_Amount *amount);
-
-
- /**
- * Function called to perform "garbage collection" on the
- * database, expiring records we no longer require.
- *
- * @param cls closure
- * @return #GNUNET_OK on success,
- * #GNUNET_SYSERR on DB errors
- */
- enum GNUNET_GenericReturnValue
- (*gc)(void *cls);
-
-
- /**
- * Select 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_coin_deposits_above_serial_id)(void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_DepositCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to return meta data about a purses
- * above a certain serial ID.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param serial_id number to select requests by
- * @param cb function to call on each request
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_purse_requests_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_PurseRequestCallback cb,
- void *cb_cls);
-
-
- /**
- * Select purse 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_deposits_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_PurseDepositCallback cb,
- 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_DONAUDB_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_DONAUDB_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_DONAUDB_HistoryRequestCallback cb,
- void *cb_cls);
-
-
- /**
- * Select purse refunds above @a serial_id in monotonically increasing
- * order.
- *
- * @param cls closure
- * @param serial_id highest serial ID to exclude (select strictly larger)
- * @param refunded which refund status to select for
- * @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_decisions_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- bool refunded,
- TALER_DONAUDB_PurseDecisionCallback cb,
- void *cb_cls);
-
-
- /**
- * Select all purse refunds 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_all_purse_decisions_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_AllPurseDecisionCallback cb,
- void *cb_cls);
-
-
- /**
- * Select coins deposited into a purse.
- *
- * @param cls closure
- * @param purse_pub public key of the purse
- * @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_deposits_by_purse)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- TALER_DONAUDB_PurseRefundCoinCallback cb,
- void *cb_cls);
-
-
- /**
- * Select refresh sessions 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_refreshes_above_serial_id)(void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_RefreshesCallback cb,
- void *cb_cls);
-
-
- /**
- * Select refunds 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_refunds_above_serial_id)(void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_RefundCallback cb,
- void *cb_cls);
-
-
- /**
- * Select inbound wire transfers into reserves_in 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_reserves_in_above_serial_id)(void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_ReserveInCallback cb,
- void *cb_cls);
-
-
- /**
- * Select inbound wire transfers into reserves_in above @a serial_id
- * in monotonically increasing order by @a account_name.
- *
- * @param cls closure
- * @param account_name name of the account for which we do the selection
- * @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_reserves_in_above_serial_id_by_account)(
- void *cls,
- const char *account_name,
- uint64_t serial_id,
- TALER_DONAUDB_ReserveInCallback cb,
- void *cb_cls);
-
-
- /**
- * Select withdraw operations from reserves_out above @a serial_id
- * in monotonically increasing order.
- *
- * @param cls closure
- * @param account_name name of the account for which we do the selection
- * @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_withdrawals_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_WithdrawCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to select outgoing wire transfers the donau
- * executed, ordered by serial ID (monotonically increasing).
- *
- * @param cls closure
- * @param serial_id lowest serial ID to include (select larger or equal)
- * @param cb function to call for ONE unfinished item
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_wire_out_above_serial_id)(void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_WireTransferOutCallback cb,
- void *cb_cls);
-
- /**
- * Function called to select outgoing wire transfers the donau
- * executed, ordered by serial ID (monotonically increasing).
- *
- * @param cls closure
- * @param account_name name to select by
- * @param serial_id lowest serial ID to include (select larger or equal)
- * @param cb function to call for ONE unfinished item
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_wire_out_above_serial_id_by_account)(
- void *cls,
- const char *account_name,
- uint64_t serial_id,
- TALER_DONAUDB_WireTransferOutCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to select recoup requests the donau
- * received, ordered by serial ID (monotonically increasing).
- *
- * @param cls closure
- * @param serial_id lowest serial ID to include (select larger or equal)
- * @param cb function to call for ONE unfinished item
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_recoup_above_serial_id)(void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_RecoupCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to select recoup requests the donau received for
- * refreshed coins, ordered by serial ID (monotonically increasing).
- *
- * @param cls closure
- * @param serial_id lowest serial ID to include (select larger or equal)
- * @param cb function to call for ONE unfinished item
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_recoup_refresh_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_RecoupRefreshCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to select reserve open operations, ordered by serial ID
- * (monotonically increasing).
- *
- * @param cls closure
- * @param serial_id lowest serial ID to include (select larger or equal)
- * @param cb function to call
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_reserve_open_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_ReserveOpenCallback cb,
- void *cb_cls);
-
-
- /**
- * Function called to select reserve close operations the aggregator
- * triggered, ordered by serial ID (monotonically increasing).
- *
- * @param cls closure
- * @param serial_id lowest serial ID to include (select larger or equal)
- * @param cb function to call
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_reserve_closed_above_serial_id)(
- void *cls,
- uint64_t serial_id,
- TALER_DONAUDB_ReserveClosedCallback cb,
- void *cb_cls);
-
-
- /**
- * Obtain information about which reserve a coin was generated
- * from given the hash of the blinded coin.
- *
- * @param cls closure
- * @param bch hash identifying the withdraw operation
- * @param[out] reserve_pub set to information about the reserve (on success
only)
- * @param[out] reserve_out_serial_id set to row of the @a h_blind_ev in
reserves_out
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_reserve_by_h_blind)(
- void *cls,
- const struct TALER_BlindedCoinHashP *bch,
- struct TALER_ReservePublicKeyP *reserve_pub,
- uint64_t *reserve_out_serial_id);
-
-
- /**
- * Obtain information about which old coin a coin was refreshed
- * given the hash of the blinded (fresh) coin.
- *
- * @param cls closure
- * @param h_blind_ev hash of the blinded coin
- * @param[out] old_coin_pub set to information about the old coin (on
success only)
- * @param[out] rrc_serial set to the row of the @a h_blind_ev in the
refresh_revealed_coins table
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_old_coin_by_h_blind)(
- void *cls,
- const struct TALER_BlindedCoinHashP *h_blind_ev,
- struct TALER_CoinSpendPublicKeyP *old_coin_pub,
- uint64_t *rrc_serial);
-
-
- /**
- * Store information that a denomination key was revoked
- * in the database.
- *
- * @param cls closure
- * @param denom_pub_hash hash of the revoked denomination key
- * @param master_sig signature affirming the revocation
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_denomination_revocation)(
- void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Obtain information about a denomination key's revocation from
- * the database.
- *
- * @param cls closure
- * @param denom_pub_hash hash of the revoked denomination key
- * @param[out] master_sig signature affirming the revocation
- * @param[out] rowid row where the information is stored
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_denomination_revocation)(
- void *cls,
- const struct TALER_DenominationHashP *denom_pub_hash,
- struct TALER_MasterSignatureP *master_sig,
- uint64_t *rowid);
-
-
- /**
- * Select all of those deposits in the database for which we do
- * not have a wire transfer (or a refund) and which should have
- * been deposited between @a start_date and @a end_date.
- *
- * @param cls closure
- * @param start_date lower bound on the requested wire execution date
- * @param end_date upper bound on the requested wire execution date
- * @param cb function to call on all such deposits
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_batch_deposits_missing_wire)(
- void *cls,
- struct GNUNET_TIME_Timestamp start_date,
- struct GNUNET_TIME_Timestamp end_date,
- TALER_DONAUDB_WireMissingCallback cb,
- void *cb_cls);
-
-
- /**
- * Check the last date an auditor was modified.
- *
- * @param cls closure
- * @param auditor_pub key to look up information for
- * @param[out] last_date last modification date to auditor status
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_auditor_timestamp)(
- void *cls,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- struct GNUNET_TIME_Timestamp *last_date);
-
-
- /**
- * Lookup current state of an auditor.
- *
- * @param cls closure
- * @param auditor_pub key to look up information for
- * @param[out] auditor_url set to the base URL of the auditor's REST API;
memory to be
- * released by the caller!
- * @param[out] enabled set if the auditor is currently in use
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_auditor_status)(
- void *cls,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- char **auditor_url,
- bool *enabled);
-
-
- /**
- * Insert information about an auditor that will audit this donau.
- *
- * @param cls closure
- * @param auditor_pub key of the auditor
- * @param auditor_url base URL of the auditor's REST service
- * @param auditor_name name of the auditor (for humans)
- * @param start_date date when the auditor was added by the offline system
- * (only to be used for replay detection)
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_auditor)(
- void *cls,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- const char *auditor_url,
- const char *auditor_name,
- struct GNUNET_TIME_Timestamp start_date);
-
-
- /**
- * Update information about an auditor that will audit this donau.
- *
- * @param cls closure
- * @param auditor_pub key of the auditor (primary key for the existing
record)
- * @param auditor_url base URL of the auditor's REST service, to be updated
- * @param auditor_name name of the auditor (for humans)
- * @param change_date date when the auditor status was last changed
- * (only to be used for replay detection)
- * @param enabled true to enable, false to disable
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*update_auditor)(
- void *cls,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- const char *auditor_url,
- const char *auditor_name,
- struct GNUNET_TIME_Timestamp change_date,
- bool enabled);
-
-
- /**
- * Check the last date an donau wire account was modified.
- *
- * @param cls closure
- * @param payto_uri key to look up information for
- * @param[out] last_date last modification date to auditor status
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_wire_timestamp)(void *cls,
- const char *payto_uri,
- struct GNUNET_TIME_Timestamp *last_date);
-
-
- /**
- * Insert information about an wire account used by this donau.
- *
- * @param cls closure
- * @param payto_uri wire account of the donau
- * @param conversion_url URL of a conversion service, NULL if there is no
conversion
- * @param debit_restrictions JSON array with debit restrictions on the
account
- * @param credit_restrictions JSON array with credit restrictions on the
account
- * @param start_date date when the account was added by the offline system
- * (only to be used for replay detection)
- * @param master_sig public signature affirming the existence of the account,
- * must be of purpose #TALER_SIGNATURE_MASTER_WIRE_DETAILS
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_wire)(void *cls,
- const char *payto_uri,
- const char *conversion_url,
- const json_t *debit_restrictions,
- const json_t *credit_restrictions,
- struct GNUNET_TIME_Timestamp start_date,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Update information about a wire account of the donau.
- *
- * @param cls closure
- * @param payto_uri account the update is about
- * @param conversion_url URL of a conversion service, NULL if there is no
conversion
- * @param debit_restrictions JSON array with debit restrictions on the
account; NULL allowed if not @a enabled
- * @param credit_restrictions JSON array with credit restrictions on the
account; NULL allowed if not @a enabled
- * @param change_date date when the account status was last changed
- * (only to be used for replay detection)
- * @param enabled true to enable, false to disable (the actual change)
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*update_wire)(void *cls,
- const char *payto_uri,
- const char *conversion_url,
- const json_t *debit_restrictions,
- const json_t *credit_restrictions,
- struct GNUNET_TIME_Timestamp change_date,
- bool enabled);
-
-
- /**
- * Obtain information about the enabled wire accounts of the donau.
- *
- * @param cls closure
- * @param cb function to call on each account
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_wire_accounts)(void *cls,
- TALER_DONAUDB_WireAccountCallback cb,
- void *cb_cls);
-
-
- /**
- * Obtain information about the fee structure of the donau for
- * a given @a wire_method
- *
- * @param cls closure
- * @param wire_method which wire method to obtain fees for
- * @param cb function to call on each account
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_wire_fees)(void *cls,
- const char *wire_method,
- TALER_DONAUDB_WireFeeCallback cb,
- void *cb_cls);
-
-
- /**
- * Obtain information about the global fee structure of the donau.
- *
- * @param cls closure
- * @param cb function to call on each fee entry
- * @param cb_cls closure for @a cb
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_global_fees)(void *cls,
- TALER_DONAUDB_GlobalFeeCallback cb,
- void *cb_cls);
-
-
- /**
- * Store information about a revoked online signing key.
- *
- * @param cls closure
- * @param donau_pub donau online signing key that was revoked
- * @param master_sig signature affirming the revocation
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_signkey_revocation)(
- void *cls,
- const struct TALER_DonauPublicKeyP *donau_pub,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Obtain information about a revoked online signing key.
- *
- * @param cls closure
- * @param donau_pub donau online signing key that was revoked
- * @param[out] master_sig signature affirming the revocation
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_signkey_revocation)(
- void *cls,
- const struct TALER_DonauPublicKeyP *donau_pub,
- struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Lookup information about current denomination key.
- *
- * @param cls closure
- * @param h_denom_pub hash of the denomination public key
- * @param[out] meta set to various meta data about the key
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_denomination_key)(
- void *cls,
- const struct TALER_DenominationHashP *h_denom_pub,
- struct TALER_DONAUDB_DenominationKeyMetaData *meta);
-
-
- /**
- * Add denomination key.
- *
- * @param cls closure
- * @param h_denom_pub hash of the denomination public key
- * @param denom_pub the denomination public key
- * @param meta meta data about the denomination
- * @param master_sig master signature to add
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*add_denomination_key)(
- void *cls,
- const struct TALER_DenominationHashP *h_denom_pub,
- const struct TALER_DenominationPublicKey *denom_pub,
- const struct TALER_DONAUDB_DenominationKeyMetaData *meta,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Activate future signing key, turning it into a "current" or "valid"
- * denomination key by adding the master signature.
- *
- * @param cls closure
- * @param donau_pub the donau online signing public key
- * @param meta meta data about @a donau_pub
- * @param master_sig master signature to add
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*activate_signing_key)(
- void *cls,
- const struct TALER_DonauPublicKeyP *donau_pub,
- const struct TALER_DONAUDB_SignkeyMetaData *meta,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Lookup signing key meta data.
- *
- * @param cls closure
- * @param donau_pub the donau online signing public key
- * @param[out] meta meta data about @a donau_pub
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_signing_key)(
- void *cls,
- const struct TALER_DonauPublicKeyP *donau_pub,
- struct TALER_DONAUDB_SignkeyMetaData *meta);
-
-
- /**
- * Insert information about an auditor auditing a denomination key.
- *
- * @param cls closure
- * @param h_denom_pub the audited denomination
- * @param auditor_pub the auditor's key
- * @param auditor_sig signature affirming the auditor's audit activity
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_auditor_denom_sig)(
- void *cls,
- const struct TALER_DenominationHashP *h_denom_pub,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- const struct TALER_AuditorSignatureP *auditor_sig);
-
-
- /**
- * Obtain information about an auditor auditing a denomination key.
- *
- * @param cls closure
- * @param h_denom_pub the audited denomination
- * @param auditor_pub the auditor's key
- * @param[out] auditor_sig set to signature affirming the auditor's audit
activity
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_auditor_denom_sig)(
- void *cls,
- const struct TALER_DenominationHashP *h_denom_pub,
- const struct TALER_AuditorPublicKeyP *auditor_pub,
- struct TALER_AuditorSignatureP *auditor_sig);
-
-
- /**
- * Lookup information about known wire fees.
- *
- * @param cls closure
- * @param wire_method the wire method to lookup fees for
- * @param start_time starting time of fee
- * @param end_time end time of fee
- * @param[out] fees set to wire fees for that time period; if
- * different wire fee exists within this time
- * period, an 'invalid' amount is returned.
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_wire_fee_by_time)(
- void *cls,
- const char *wire_method,
- struct GNUNET_TIME_Timestamp start_time,
- struct GNUNET_TIME_Timestamp end_time,
- struct TALER_WireFeeSet *fees);
-
-
- /**
- * Lookup information about known global fees.
- *
- * @param cls closure
- * @param start_time starting time of fee
- * @param end_time end time of fee
- * @param[out] fees set to wire fees for that time period; if
- * different global fee exists within this time
- * period, an 'invalid' amount is returned.
- * @param[out] purse_timeout set to when unmerged purses expire
- * @param[out] history_expiration set to when we expire reserve histories
- * @param[out] purse_account_limit set to number of free purses
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_global_fee_by_time)(
- void *cls,
- struct GNUNET_TIME_Timestamp start_time,
- struct GNUNET_TIME_Timestamp end_time,
- struct TALER_GlobalFeeSet *fees,
- struct GNUNET_TIME_Relative *purse_timeout,
- struct GNUNET_TIME_Relative *history_expiration,
- uint32_t *purse_account_limit);
-
-
- /**
- * Lookup the latest serial number of @a table. Used in
- * donau-auditor database replication.
- *
- * @param cls closure
- * @param table table for which we should return the serial
- * @param[out] latest serial number in use
- * @return transaction status code, #GNUNET_DB_STATUS_HARD_ERROR if
- * @a table does not have a serial number
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_serial_by_table)(void *cls,
- enum TALER_DONAUDB_ReplicatedTable table,
- uint64_t *serial);
-
- /**
- * Lookup records above @a serial number in @a table. Used in
- * donau-auditor database replication.
- *
- * @param cls closure
- * @param table table for which we should return the serial
- * @param serial largest serial number to exclude
- * @param cb function to call on the records
- * @param cb_cls closure for @a cb
- * @return transaction status code, GNUNET_DB_STATUS_HARD_ERROR if
- * @a table does not have a serial number
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_records_by_table)(void *cls,
- enum TALER_DONAUDB_ReplicatedTable table,
- uint64_t serial,
- TALER_DONAUDB_ReplicationCallback cb,
- void *cb_cls);
-
-
- /**
- * Insert record set into @a table. Used in donau-auditor database
- * replication.
- *
- memset (&awc, 0, sizeof (awc));
- * @param cls closure
- * @param tb table data to insert
- * @return transaction status code, #GNUNET_DB_STATUS_HARD_ERROR if
- * @a table does not have a serial number
- */
- enum GNUNET_DB_QueryStatus
- (*insert_records_by_table)(void *cls,
- const struct TALER_DONAUDB_TableData *td);
-
-
- /**
- * Function called to grab a work shard on an operation @a op. Runs in its
- * own transaction.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param job_name name of the operation to grab a word shard for
- * @param delay minimum age of a shard to grab
- * @param size desired shard size
- * @param[out] start_row inclusive start row of the shard (returned)
- * @param[out] end_row exclusive end row of the shard (returned)
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*begin_shard)(void *cls,
- const char *job_name,
- struct GNUNET_TIME_Relative delay,
- uint64_t shard_size,
- uint64_t *start_row,
- uint64_t *end_row);
-
- /**
- * Function called to abort work on a shard.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param job_name name of the operation to abort a word shard for
- * @param start_row inclusive start row of the shard
- * @param end_row exclusive end row of the shard
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*abort_shard)(void *cls,
- const char *job_name,
- uint64_t start_row,
- uint64_t end_row);
-
- /**
- * Function called to persist that work on a shard was completed.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param job_name name of the operation to grab a word shard for
- * @param start_row inclusive start row of the shard
- * @param end_row exclusive end row of the shard
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*complete_shard)(void *cls,
- const char *job_name,
- uint64_t start_row,
- uint64_t end_row);
-
-
- /**
- * Function called to grab a revolving work shard on an operation @a op. Runs
- * in its own transaction. Returns the oldest inactive shard.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param job_name name of the operation to grab a revolving shard for
- * @param shard_size desired shard size
- * @param shard_limit exclusive end of the shard range
- * @param[out] start_row inclusive start row of the shard (returned)
- * @param[out] end_row inclusive end row of the shard (returned)
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*begin_revolving_shard)(void *cls,
- const char *job_name,
- uint32_t shard_size,
- uint32_t shard_limit,
- uint32_t *start_row,
- uint32_t *end_row);
-
-
- /**
- * Function called to release a revolving shard back into the work pool.
- * Clears the "completed" flag.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param job_name name of the operation to grab a word shard for
- * @param start_row inclusive start row of the shard
- * @param end_row inclusive end row of the shard
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*release_revolving_shard)(void *cls,
- const char *job_name,
- uint32_t start_row,
- uint32_t end_row);
-
-
- /**
- * Function called to delete all revolving shards.
- * To be used after a crash or when the shard size is
- * changed.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @return #GNUNET_OK on success
- * #GNUNET_SYSERR on failure
- */
- enum GNUNET_GenericReturnValue
- (*delete_shard_locks)(void *cls);
-
-
- /**
- * Function called to save the manifest of an extension
- * (age-restriction, policy-extension, ...)
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param extension_name the name of the extension
- * @param manifest JSON object of the Manifest as string, maybe NULL (==
disabled extension)
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*set_extension_manifest)(void *cls,
- const char *extension_name,
- const char *manifest);
-
-
- /**
- * Function called to retrieve the manifest of an extension
- * (age-restriction, policy-extension, ...)
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param extension_name the name of the extension
- * @param[out] manifest Manifest of the extension in JSON encoding, maybe
NULL (== disabled extension)
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_extension_manifest)(void *cls,
- const char *extension_name,
- char **manifest);
-
-
- /**
- * Function called to store configuration data about a partner
- * donau that we are federated with.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param master_pub public offline signing key of the partner donau
- * @param start_date when does the following data start to be valid
- * @param end_date when does the validity end (exclusive)
- * @param wad_frequency how often do we do donau-to-donau settlements?
- * @param wad_fee how much do we charge for transfers to the partner
- * @param partner_base_url base URL of the partner donau
- * @param master_sig signature with our offline signing key affirming the
above
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_partner)(void *cls,
- const struct TALER_MasterPublicKeyP *master_pub,
- struct GNUNET_TIME_Timestamp start_date,
- struct GNUNET_TIME_Timestamp end_date,
- struct GNUNET_TIME_Relative wad_frequency,
- const struct TALER_Amount *wad_fee,
- const char *partner_base_url,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Function called to persist an encrypted contract associated with a
reserve.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param econtract the encrypted contract
- * @param[out] econtract_sig set to the signature over the encrypted contract
- * @param[out] in_conflict set to true if @a econtract
- * conflicts with an existing contract;
- * in this case, the return value will be
- * #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT despite the failure
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_contract)(void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_EncryptedContract *econtract,
- bool *in_conflict);
-
-
- /**
- * Function called to retrieve an encrypted contract.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param pub_ckey set to the ephemeral DH used to encrypt the contract, key
used to lookup the contract by
- * @param[out] purse_pub public key of the purse of the contract
- * @param[out] econtract_sig set to the signature over the encrypted contract
- * @param[out] econtract_size set to the number of bytes in @a econtract
- * @param[out] econtract set to the encrypted contract on success, to be
freed by the caller
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_contract)(
- void *cls,
- const struct TALER_ContractDiffiePublicP *pub_ckey,
- struct TALER_PurseContractPublicKeyP *purse_pub,
- struct TALER_PurseContractSignatureP *econtract_sig,
- size_t *econtract_size,
- void **econtract);
-
-
- /**
- * Function called to retrieve an encrypted contract.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub key to lookup the contract by
- * @param[out] econtract set to the encrypted contract on success, to be
freed by the caller
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_contract_by_purse)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- struct TALER_EncryptedContract *econtract);
-
-
- /**
- * Function called to create a new purse with certain meta data.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub public key of the new purse
- * @param merge_pub public key providing the merge capability
- * @param purse_expiration time when the purse will expire
- * @param h_contract_terms hash of the contract for the purse
- * @param age_limit age limit to enforce for payments into the purse
- * @param flags flags for the operation
- * @param purse_fee fee we are allowed to charge to the reserve (depending
on @a flags)
- * @param amount target amount (with fees) to be put into the purse
- * @param purse_sig signature with @a purse_pub's private key affirming the
above
- * @param[out] in_conflict set to true if the meta data
- * conflicts with an existing purse;
- * in this case, the return value will be
- * #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT despite the failure
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_purse_request)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_PurseMergePublicKeyP *merge_pub,
- struct GNUNET_TIME_Timestamp purse_expiration,
- const struct TALER_PrivateContractHashP *h_contract_terms,
- uint32_t age_limit,
- enum TALER_WalletAccountMergeFlags flags,
- const struct TALER_Amount *purse_fee,
- const struct TALER_Amount *amount,
- const struct TALER_PurseContractSignatureP *purse_sig,
- bool *in_conflict);
-
-
- /**
- * Function called to clean up one expired purse.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param start_time select purse expired after this time
- * @param end_time select purse expired before this time
- * @return transaction status code (#GNUNET_DB_STATUS_SUCCESS_NO_RESULTS if
no purse expired in the given time interval).
- */
- enum GNUNET_DB_QueryStatus
- (*expire_purse)(
- void *cls,
- struct GNUNET_TIME_Absolute start_time,
- struct GNUNET_TIME_Absolute end_time);
-
-
- /**
- * Function called to obtain information about a purse.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub public key of the new purse
- * @param[out] purse_creation set to time when the purse was created
- * @param[out] purse_expiration set to time when the purse will expire
- * @param[out] amount set to target amount (with fees) to be put into the
purse
- * @param[out] deposited set to actual amount put into the purse so far
- * @param[out] h_contract_terms set to hash of the contract for the purse
- * @param[out] merge_timestamp set to time when the purse was merged, or
NEVER if not
- * @param[out] purse_deleted set to true if purse was deleted
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_purse)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- struct GNUNET_TIME_Timestamp *purse_creation,
- struct GNUNET_TIME_Timestamp *purse_expiration,
- struct TALER_Amount *amount,
- struct TALER_Amount *deposited,
- struct TALER_PrivateContractHashP *h_contract_terms,
- struct GNUNET_TIME_Timestamp *merge_timestamp,
- bool *purse_deleted);
-
-
- /**
- * Function called to return meta data about a purse by the
- * purse public key.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub public key of the purse
- * @param[out] merge_pub public key representing the merge capability
- * @param[out] purse_expiration when would an unmerged purse expire
- * @param[out] h_contract_terms contract associated with the purse
- * @param[out] age_limit the age limit for deposits into the purse
- * @param[out] target_amount amount to be put into the purse
- * @param[out] balance amount put so far into the purse
- * @param[out] purse_sig signature of the purse over the initialization data
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_purse_request)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- struct TALER_PurseMergePublicKeyP *merge_pub,
- struct GNUNET_TIME_Timestamp *purse_expiration,
- struct TALER_PrivateContractHashP *h_contract_terms,
- uint32_t *age_limit,
- struct TALER_Amount *target_amount,
- struct TALER_Amount *balance,
- struct TALER_PurseContractSignatureP *purse_sig);
-
-
- /**
- * Function called to return meta data about a purse by the
- * merge capability key.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param merge_pub public key representing the merge capability
- * @param[out] purse_pub public key of the purse
- * @param[out] purse_expiration when would an unmerged purse expire
- * @param[out] h_contract_terms contract associated with the purse
- * @param[out] age_limit the age limit for deposits into the purse
- * @param[out] target_amount amount to be put into the purse
- * @param[out] balance amount put so far into the purse
- * @param[out] purse_sig signature of the purse over the initialization data
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_purse_by_merge_pub)(
- void *cls,
- const struct TALER_PurseMergePublicKeyP *merge_pub,
- struct TALER_PurseContractPublicKeyP *purse_pub,
- struct GNUNET_TIME_Timestamp *purse_expiration,
- struct TALER_PrivateContractHashP *h_contract_terms,
- uint32_t *age_limit,
- struct TALER_Amount *target_amount,
- struct TALER_Amount *balance,
- struct TALER_PurseContractSignatureP *purse_sig);
-
-
- /**
- * Function called to execute a transaction crediting
- * a purse with @a amount from @a coin_pub. Reduces the
- * value of @a coin_pub and increase the balance of
- * the @a purse_pub purse. If the balance reaches the
- * target amount and the purse has been merged, triggers
- * the updates of the reserve/account balance.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub purse to credit
- * @param coin_pub coin to deposit (debit)
- * @param amount fraction of the coin's value to deposit
- * @param coin_sig signature affirming the operation
- * @param amount_minus_fee amount to add to the purse
- * @param[out] balance_ok set to false if the coin's
- * remaining balance is below @a amount;
- * in this case, the return value will be
- * #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT despite the failure
- * @param[out] too_late it is too late to deposit into this purse
- * @param[out] conflict the same coin was deposited into
- * this purse with a different amount already
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*do_purse_deposit)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *amount,
- const struct TALER_CoinSpendSignatureP *coin_sig,
- const struct TALER_Amount *amount_minus_fee,
- bool *balance_ok,
- bool *too_late,
- bool *conflict);
-
-
- /**
- * Function called to explicitly delete a purse.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub purse to delete
- * @param purse_sig signature affirming the deletion
- * @param[out] decided set to true if the purse was
- * already decided and thus could not be deleted
- * @param[out] found set to true if the purse was found
- * (if false, purse could not be deleted)
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*do_purse_delete)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_PurseContractSignatureP *purse_sig,
- bool *decided,
- bool *found);
-
-
- /**
- * Set the current @a balance in the purse
- * identified by @a purse_pub. Used by the auditor
- * to update the balance as calculated by the auditor.
- *
- * @param cls closure
- * @param purse_pub public key of a purse
- * @param balance new balance to store under the purse
- * @return transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*set_purse_balance)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_Amount *balance);
-
-
- /**
- * Function called to obtain a coin deposit data from
- * depositing the coin into a purse.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub purse to credit
- * @param coin_pub coin to deposit (debit)
- * @param[out] amount set fraction of the coin's value that was deposited
(with fee)
- * @param[out] h_denom_pub set to hash of denomination of the coin
- * @param[out] phac set to hash of age restriction on the coin
- * @param[out] coin_sig set to signature affirming the operation
- * @param[out] partner_url set to the URL of the partner donau, or NULL for
ourselves, must be freed by caller
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_purse_deposit)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- struct TALER_Amount *amount,
- struct TALER_DenominationHashP *h_denom_pub,
- struct TALER_AgeCommitmentHash *phac,
- struct TALER_CoinSpendSignatureP *coin_sig,
- char **partner_url);
-
-
- /**
- * Function called to approve merging a purse into a
- * reserve by the respective purse merge key. The purse
- * must not have been merged into a different reserve.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub purse to merge
- * @param merge_sig signature affirming the merge
- * @param merge_timestamp time of the merge
- * @param reserve_sig signature of the reserve affirming the merge
- * @param partner_url URL of the partner donau, can be NULL if the reserves
lives with us
- * @param reserve_pub public key of the reserve to credit
- * @param[out] no_partner set to true if @a partner_url is unknown
- * @param[out] no_balance set to true if the @a purse_pub is not paid up yet
- * @param[out] no_reserve set to true if the @a reserve_pub is not known
- * @param[out] in_conflict set to true if @a purse_pub was merged into a
different reserve already
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*do_purse_merge)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_PurseMergeSignatureP *merge_sig,
- const struct GNUNET_TIME_Timestamp merge_timestamp,
- const struct TALER_ReserveSignatureP *reserve_sig,
- const char *partner_url,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- bool *no_partner,
- bool *no_balance,
- bool *in_conflict);
-
-
- /**
- * Function called insert request to merge a purse into a reserve by the
- * respective purse merge key. The purse must not have been merged into a
- * different reserve.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub purse to merge
- * @param merge_sig signature affirming the merge
- * @param merge_timestamp time of the merge
- * @param reserve_sig signature of the reserve affirming the merge
- * @param purse_fee amount to charge the reserve for the purse creation,
NULL to use the quota
- * @param reserve_pub public key of the reserve to credit
- * @param[out] in_conflict set to true if @a purse_pub was merged into a
different reserve already
- * @param[out] no_reserve set to true if @a reserve_pub is not a known
reserve
- * @param[out] insufficient_funds set to true if @a reserve_pub has
insufficient capacity to create another purse
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*do_reserve_purse)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- const struct TALER_PurseMergeSignatureP *merge_sig,
- const struct GNUNET_TIME_Timestamp merge_timestamp,
- const struct TALER_ReserveSignatureP *reserve_sig,
- const struct TALER_Amount *purse_fee,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- bool *in_conflict,
- bool *no_reserve,
- bool *insufficient_funds);
-
-
- /**
- * Function called to approve merging of a purse with
- * an account, made by the receiving account.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param purse_pub public key of the purse
- * @param[out] merge_sig set to the signature confirming the merge
- * @param[out] merge_timestamp set to the time of the merge
- * @param[out] partner_url set to the URL of the target donau, or NULL if
the target donau is us. To be freed by the caller.
- * @param[out] reserve_pub set to the public key of the reserve/account
being credited
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_purse_merge)(
- void *cls,
- const struct TALER_PurseContractPublicKeyP *purse_pub,
- struct TALER_PurseMergeSignatureP *merge_sig,
- struct GNUNET_TIME_Timestamp *merge_timestamp,
- char **partner_url,
- struct TALER_ReservePublicKeyP *reserve_pub);
-
-
- /**
- * Function called to persist a signature that
- * prove that the client requested an
- * account history. Debits the @a history_fee from
- * the reserve (if possible).
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param reserve_pub account that the history was requested for
- * @param reserve_sig signature affirming the request
- * @param request_timestamp when was the request made
- * @param history_fee how much should the @a reserve_pub be charged for the
request
- * @param[out] balance_ok set to TRUE if the reserve balance
- * was sufficient
- * @param[out] idempotent set to TRUE if the request is already in the DB
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_history_request)(
- void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const struct TALER_ReserveSignatureP *reserve_sig,
- struct GNUNET_TIME_Timestamp request_timestamp,
- const struct TALER_Amount *history_fee,
- bool *balance_ok,
- bool *idempotent);
-
-
- /**
- * Function called to initiate closure of an account.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param reserve_pub public key of the account to close
- * @param payto_uri where to wire the funds
- * @param reserve_sig signature affiming that the account is to be closed
- * @param request_timestamp timestamp of the close request
- * @param balance balance at the time of closing
- * @param closing_fee closing fee to charge
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_close_request)(void *cls,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- const char *payto_uri,
- const struct TALER_ReserveSignatureP *reserve_sig,
- struct GNUNET_TIME_Timestamp request_timestamp,
- const struct TALER_Amount *balance,
- const struct TALER_Amount *closing_fee);
-
-
- /**
- * Function called to persist a request to drain profits.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param wtid wire transfer ID to use
- * @param account_section account to drain
- * @param payto_uri account to wire funds to
- * @param request_timestamp time of the signature
- * @param amount amount to wire
- * @param master_sig signature affirming the operation
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*insert_drain_profit)(void *cls,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- const char *account_section,
- const char *payto_uri,
- struct GNUNET_TIME_Timestamp request_timestamp,
- const struct TALER_Amount *amount,
- const struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Function called to get information about a profit drain event.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param wtid wire transfer ID to look up drain event for
- * @param[out] serial set to serial ID of the entry
- * @param[out] account_section set to account to drain
- * @param[out] payto_uri set to account to wire funds to
- * @param[out] request_timestamp set to time of the signature
- * @param[out] amount set to amount to wire
- * @param[out] master_sig set to signature affirming the operation
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*get_drain_profit)(void *cls,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- uint64_t *serial,
- char **account_section,
- char **payto_uri,
- struct GNUNET_TIME_Timestamp *request_timestamp,
- struct TALER_Amount *amount,
- struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Get profit drain operation ready to execute.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param[out] serial set to serial ID of the entry
- * @param[out] wtid set set to wire transfer ID to use
- * @param[out] account_section set to account to drain
- * @param[out] payto_uri set to account to wire funds to
- * @param[out] request_timestamp set to time of the signature
- * @param[out] amount set to amount to wire
- * @param[out] master_sig set to signature affirming the operation
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*profit_drains_get_pending)(
- void *cls,
- uint64_t *serial,
- struct TALER_WireTransferIdentifierRawP *wtid,
- char **account_section,
- char **payto_uri,
- struct GNUNET_TIME_Timestamp *request_timestamp,
- struct TALER_Amount *amount,
- struct TALER_MasterSignatureP *master_sig);
-
-
- /**
- * Set profit drain operation to finished.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param serial serial ID of the entry to mark finished
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*profit_drains_set_finished)(
- void *cls,
- uint64_t serial);
-
-
- /**
- * Insert KYC requirement for @a h_payto account into table.
- *
- * @param cls closure
- * @param requirements requirements that must be checked
- * @param h_payto account that must be KYC'ed
- * @param reserve_pub if account is a reserve, its public key, NULL otherwise
- * @param[out] requirement_row set to legitimization requirement row for
this check
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*insert_kyc_requirement_for_account)(
- void *cls,
- const char *requirements,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_ReservePublicKeyP *reserve_pub,
- uint64_t *requirement_row);
-
-
- /**
- * Begin KYC requirement process.
- *
- * @param cls closure
- * @param h_payto account that must be KYC'ed
- * @param provider_section provider that must be checked
- * @param provider_account_id provider account ID
- * @param provider_legitimization_id provider legitimization ID
- * @param[out] process_row row the process is stored under
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*insert_kyc_requirement_process)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const char *provider_section,
- const char *provider_account_id,
- const char *provider_legitimization_id,
- uint64_t *process_row);
-
-
- /**
- * Update KYC process with updated provider-linkage and/or
- * expiration data.
- *
- * @param cls closure
- * @param process_row row to select by
- * @param provider_section provider that must be checked (technically
redundant)
- * @param h_payto account that must be KYC'ed (helps access by shard,
otherwise also redundant)
- * @param provider_account_id provider account ID
- * @param provider_legitimization_id provider legitimization ID
- * @param expiration how long is this KYC check set to be valid (in the past
if invalid)
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*update_kyc_process_by_row)(
- void *cls,
- uint64_t process_row,
- const char *provider_section,
- const struct TALER_PaytoHashP *h_payto,
- const char *provider_account_id,
- const char *provider_legitimization_id,
- struct GNUNET_TIME_Absolute expiration);
-
-
- /**
- * Lookup KYC requirement.
- *
- * @param cls closure
- * @param legi_row identifies requirement to look up
- * @param[out] requirements space-separated list of requirements
- * @param[out] aml_status set to the AML status of the account
- * @param[out] h_payto account that must be KYC'ed
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_kyc_requirement_by_row)(
- void *cls,
- uint64_t requirement_row,
- char **requirements,
- enum TALER_AmlDecisionState *aml_status,
- struct TALER_PaytoHashP *h_payto);
-
-
- /**
- * Lookup KYC process meta data.
- *
- * @param cls closure
- * @param provider_section provider that must be checked
- * @param h_payto account that must be KYC'ed
- * @param[out] process_row set to row with the legitimization data
- * @param[out] expiration how long is this KYC check set to be valid (in the
past if invalid)
- * @param[out] provider_account_id provider account ID
- * @param[out] provider_legitimization_id provider legitimization ID
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_kyc_process_by_account)(
- void *cls,
- const char *provider_section,
- const struct TALER_PaytoHashP *h_payto,
- uint64_t *process_row,
- struct GNUNET_TIME_Absolute *expiration,
- char **provider_account_id,
- char **provider_legitimization_id);
-
-
- /**
- * Lookup an
- * @a h_payto by @a provider_legitimization_id.
- *
- * @param cls closure
- * @param provider_section
- * @param provider_legitimization_id legi to look up
- * @param[out] h_payto where to write the result
- * @param[out] process_row identifies the legitimization process on our end
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*kyc_provider_account_lookup)(
- void *cls,
- const char *provider_section,
- const char *provider_legitimization_id,
- struct TALER_PaytoHashP *h_payto,
- uint64_t *process_row);
-
-
- /**
- * Call us on KYC processes satisfied for the given
- * account.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto account identifier
- * @param spc function to call for each satisfied KYC process
- * @param spc_cls closure for @a spc
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*select_satisfied_kyc_processes)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- TALER_DONAUDB_SatisfiedProviderCallback spc,
- void *spc_cls);
-
-
- /**
- * Call us on KYC legitimization processes satisfied and not expired for the
- * given account.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto account identifier
- * @param lpc function to call for each satisfied KYC legitimization process
- * @param lpc_cls closure for @a lpc
- * @return transaction status code
- */
- enum GNUNET_DB_QueryStatus
- (*iterate_kyc_reference)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- TALER_DONAUDB_LegitimizationProcessCallback lpc,
- void *lpc_cls);
-
-
- /**
- * Call @a kac on withdrawn amounts after @a time_limit which are relevant
- * for a KYC trigger for a the (debited) account identified by @a h_payto.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto account identifier
- * @param time_limit oldest transaction that could be relevant
- * @param kac function to call for each applicable amount, in reverse
chronological order (or until @a kac aborts by returning anything except
#GNUNET_OK).
- * @param kac_cls closure for @a kac
- * @return transaction status code, @a kac aborting with #GNUNET_NO is not
an error
- */
- enum GNUNET_DB_QueryStatus
- (*select_withdraw_amounts_for_kyc_check)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- struct GNUNET_TIME_Absolute time_limit,
- TALER_DONAUDB_KycAmountCallback kac,
- void *kac_cls);
-
-
- /**
- * Call @a kac on aggregated amounts after @a time_limit which are relevant
for a
- * KYC trigger for a the (credited) account identified by @a h_payto.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto account identifier
- * @param time_limit oldest transaction that could be relevant
- * @param kac function to call for each applicable amount, in reverse
chronological order (or until @a kac aborts by returning anything except
#GNUNET_OK).
- * @param kac_cls closure for @a kac
- * @return transaction status code, @a kac aborting with #GNUNET_NO is not
an error
- */
- enum GNUNET_DB_QueryStatus
- (*select_aggregation_amounts_for_kyc_check)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- struct GNUNET_TIME_Absolute time_limit,
- TALER_DONAUDB_KycAmountCallback kac,
- void *kac_cls);
-
-
- /**
- * Call @a kac on merged reserve amounts after @a time_limit which are
relevant for a
- * KYC trigger for a the wallet identified by @a h_payto.
- *
- * @param cls the @e cls of this struct with the plugin-specific state
- * @param h_payto account identifier
- * @param time_limit oldest transaction that could be relevant
- * @param kac function to call for each applicable amount, in reverse
chronological order (or until @a kac aborts by returning anything except
#GNUNET_OK).
- * @param kac_cls closure for @a kac
- * @return transaction status code, @a kac aborting with #GNUNET_NO is not
an error
- */
- enum GNUNET_DB_QueryStatus
- (*select_merge_amounts_for_kyc_check)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- struct GNUNET_TIME_Absolute time_limit,
- TALER_DONAUDB_KycAmountCallback kac,
- void *kac_cls);
-
-
- /**
- * Store KYC attribute data, update KYC process status and
- * AML status for the given account.
- *
- * @param cls closure
- * @param process_row KYC process row to update
- * @param h_payto account for which the attribute data is stored
- * @param kyc_prox key for similarity search
- * @param provider_section provider that must be checked
- * @param provider_account_id provider account ID
- * @param provider_legitimization_id provider legitimization ID
- * @param birthday birthdate of user, in days after 1990, or 0 if unknown or
definitively adult
- * @param collection_time when was the data collected
- * @param expiration_time when does the data expire
- * @param enc_attributes_size number of bytes in @a enc_attributes
- * @param enc_attributes encrypted attribute data
- * @param require_aml true to trigger AML
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*insert_kyc_attributes)(
- void *cls,
- uint64_t process_row,
- const struct TALER_PaytoHashP *h_payto,
- const struct GNUNET_ShortHashCode *kyc_prox,
- const char *provider_section,
- uint32_t birthday,
- struct GNUNET_TIME_Timestamp collection_time,
- const char *provider_account_id,
- const char *provider_legitimization_id,
- struct GNUNET_TIME_Absolute expiration_time,
- size_t enc_attributes_size,
- const void *enc_attributes,
- bool require_aml);
-
-
- /**
- * Lookup similar KYC attribute data.
- *
- * @param cls closure
- * @param kyc_prox key for similarity search
- * @param cb callback to invoke on each match
- * @param cb_cls closure for @a cb
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*select_similar_kyc_attributes)(
- void *cls,
- const struct GNUNET_ShortHashCode *kyc_prox,
- TALER_DONAUDB_AttributeCallback cb,
- void *cb_cls);
-
-
- /**
- * Lookup KYC attribute data for a specific account.
- *
- * @param cls closure
- * @param h_payto account for which the attribute data is stored
- * @param cb callback to invoke on each match
- * @param cb_cls closure for @a cb
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*select_kyc_attributes)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- TALER_DONAUDB_AttributeCallback cb,
- void *cb_cls);
-
-
- /**
- * Insert AML staff record.
- *
- * @param cls closure
- * @param decider_pub public key of the staff member
- * @param master_sig offline signature affirming the AML officer
- * @param decider_name full name of the staff member
- * @param is_active true to enable, false to set as inactive
- * @param read_only true to set read-only access
- * @param last_change when was the change made effective
- * @param[out] previous_change when was the previous change made
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*insert_aml_officer)(
- void *cls,
- const struct TALER_AmlOfficerPublicKeyP *decider_pub,
- const struct TALER_MasterSignatureP *master_sig,
- const char *decider_name,
- bool is_active,
- bool read_only,
- struct GNUNET_TIME_Timestamp last_change,
- struct GNUNET_TIME_Timestamp *previous_change);
-
-
- /**
- * Test if the given AML staff member is active
- * (at least read-only).
- *
- * @param cls closure
- * @param decider_pub public key of the staff member
- * @return database transaction status, if member is unknown or not active,
1 if member is active
- */
- enum GNUNET_DB_QueryStatus
- (*test_aml_officer)(
- void *cls,
- const struct TALER_AmlOfficerPublicKeyP *decider_pub);
-
-
- /**
- * Fetch AML staff record.
- *
- * @param cls closure
- * @param decider_pub public key of the staff member
- * @param[out] master_sig offline signature affirming the AML officer
- * @param[out] decider_name full name of the staff member
- * @param[out] is_active true to enable, false to set as inactive
- * @param[out] read_only true to set read-only access
- * @param[out] last_change when was the change made effective
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*lookup_aml_officer)(
- void *cls,
- const struct TALER_AmlOfficerPublicKeyP *decider_pub,
- struct TALER_MasterSignatureP *master_sig,
- char **decider_name,
- bool *is_active,
- bool *read_only,
- struct GNUNET_TIME_Absolute *last_change);
-
-
- /**
- * Obtain the current AML threshold set for an account.
- *
- * @param cls closure
- * @param h_payto account for which the AML threshold is stored
- * @param[out] decision set to current AML decision
- * @param[out] threshold set to the existing threshold
- * @return database transaction status, 0 if no threshold was set
- */
- enum GNUNET_DB_QueryStatus
- (*select_aml_threshold)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- enum TALER_AmlDecisionState *decision,
- struct TALER_DONAUDB_KycStatus *kyc,
- struct TALER_Amount *threshold);
-
-
- /**
- * Trigger AML process, an account has crossed the threshold. Inserts or
- * updates the AML status.
- *
- * @param cls closure
- * @param h_payto account for which the attribute data is stored
- * @param threshold_crossed existing threshold that was crossed
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*trigger_aml_process)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_Amount *threshold_crossed);
-
-
- /**
- * Lookup AML decisions that have a particular state.
- *
- * @param cls closure
- * @param decision which decision states to filter by
- * @param row_off offset to start from
- * @param forward true to go forward in time, false to go backwards
- * @param cb callback to invoke on each match
- * @param cb_cls closure for @a cb
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*select_aml_process)(
- void *cls,
- enum TALER_AmlDecisionState decision,
- uint64_t row_off,
- uint64_t limit,
- bool forward,
- TALER_DONAUDB_AmlStatusCallback cb,
- void *cb_cls);
-
-
- /**
- * Lookup AML decision history for a particular account.
- *
- * @param cls closure
- * @param h_payto which account should we return the AML decision history for
- * @param cb callback to invoke on each match
- * @param cb_cls closure for @a cb
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*select_aml_history)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- TALER_DONAUDB_AmlHistoryCallback cb,
- void *cb_cls);
-
-
- /**
- * Insert an AML decision. Inserts into AML history and insert or updates AML
- * status.
- *
- * @param cls closure
- * @param h_payto account for which the attribute data is stored
- * @param new_threshold new monthly threshold that would trigger an AML check
- * @param new_status AML decision status
- * @param decision_time when was the decision made
- * @param justification human-readable text justifying the decision
- * @param kyc_requirements specific KYC requiremnts being imposed
- * @param requirements_row row in the KYC table for this process, 0 for none
- * @param decider_pub public key of the staff member
- * @param decider_sig signature of the staff member
- * @param[out] invalid_officer set to TRUE if @a decider_pub is not allowed
to make decisions right now
- * @param[out] last_date set to the previous decision time;
- * the INSERT is not performed if @a last_date is not before @a
decision_time
- * @return database transaction status
- */
- enum GNUNET_DB_QueryStatus
- (*insert_aml_decision)(
- void *cls,
- const struct TALER_PaytoHashP *h_payto,
- const struct TALER_Amount *new_threshold,
- enum TALER_AmlDecisionState new_status,
- struct GNUNET_TIME_Timestamp decision_time,
- const char *justification,
- const json_t *kyc_requirements,
- uint64_t requirements_row,
- const struct TALER_AmlOfficerPublicKeyP *decider_pub,
- const struct TALER_AmlOfficerSignatureP *decider_sig,
- bool *invalid_officer,
- struct GNUNET_TIME_Timestamp *last_date);
-
-
-};
+ const struct TALER_DONAUDB_SignkeyMetaData *meta);
-#endif /* _TALER_DONAU_DB_H */
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-donau] branch master updated: [db] working on headers,
gnunet <=