summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2022-05-08 11:37:37 +0200
committerChristian Grothoff <christian@grothoff.org>2022-05-08 11:37:37 +0200
commitd3a63881999aa1c6d763263346a0a5979ec6efac (patch)
tree92f220ad08ce79d1f18366346ffabfa93cf33d75 /src/lib
parent6b8e732bf8d8bfae268e7f5a9a09af9167fd0d47 (diff)
downloadexchange-d3a63881999aa1c6d763263346a0a5979ec6efac.tar.gz
exchange-d3a63881999aa1c6d763263346a0a5979ec6efac.tar.bz2
exchange-d3a63881999aa1c6d763263346a0a5979ec6efac.zip
pass purse_fee to determine how purse creation is paid for
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/exchange_api_purse_create_with_merge.c26
-rw-r--r--src/lib/exchange_api_purse_merge.c24
2 files changed, 42 insertions, 8 deletions
diff --git a/src/lib/exchange_api_purse_create_with_merge.c b/src/lib/exchange_api_purse_create_with_merge.c
index dddf5e4a5..35d52b915 100644
--- a/src/lib/exchange_api_purse_create_with_merge.c
+++ b/src/lib/exchange_api_purse_create_with_merge.c
@@ -250,6 +250,7 @@ TALER_EXCHANGE_purse_create_with_merge (
const struct TALER_ContractDiffiePrivateP *contract_priv,
const json_t *contract_terms,
bool upload_contract,
+ bool pay_for_purse,
struct GNUNET_TIME_Timestamp merge_timestamp,
TALER_EXCHANGE_PurseCreateMergeCallback cb,
void *cb_cls)
@@ -268,6 +269,8 @@ TALER_EXCHANGE_purse_create_with_merge (
struct TALER_PurseContractSignatureP purse_sig;
void *econtract = NULL;
size_t econtract_size = 0;
+ struct TALER_Amount purse_fee;
+ enum TALER_WalletAccountMergeFlags flags;
pcm = GNUNET_new (struct TALER_EXCHANGE_PurseCreateMergeHandle);
pcm->exchange = exchange;
@@ -315,7 +318,22 @@ TALER_EXCHANGE_purse_create_with_merge (
return NULL;
}
}
+ if (pay_for_purse)
+ {
+ const struct TALER_EXCHANGE_GlobalFee *gf;
+ gf = TALER_EXCHANGE_get_global_fee (
+ TALER_EXCHANGE_get_keys (exchange),
+ GNUNET_TIME_timestamp_get ());
+ purse_fee = gf->fees.purse;
+ flags = TALER_WAMF_MODE_CREATE_WITH_PURSE_FEE;
+ }
+ else
+ {
+ TALER_amount_set_zero (pcm->purse_value_after_fees.currency,
+ &purse_fee);
+ flags = TALER_WAMF_MODE_CREATE_FROM_PURSE_QUOTA;
+ }
GNUNET_assert (GNUNET_YES ==
TEAH_handle_is_ready (exchange));
@@ -359,7 +377,9 @@ TALER_EXCHANGE_purse_create_with_merge (
pcm->purse_expiration,
&pcm->h_contract_terms,
&pcm->purse_value_after_fees,
+ &purse_fee,
min_age,
+ flags,
reserve_priv,
&reserve_sig);
if (upload_contract)
@@ -398,6 +418,12 @@ TALER_EXCHANGE_purse_create_with_merge (
&contract_pub)
: GNUNET_JSON_pack_string ("dummy",
NULL)),
+ GNUNET_JSON_pack_allow_null (
+ pay_for_purse
+ ? TALER_JSON_pack_amount ("purse_fee",
+ &purse_fee)
+ : GNUNET_JSON_pack_string ("dummy2",
+ NULL)),
GNUNET_JSON_pack_data_auto ("merge_pub",
&merge_pub),
GNUNET_JSON_pack_data_auto ("merge_sig",
diff --git a/src/lib/exchange_api_purse_merge.c b/src/lib/exchange_api_purse_merge.c
index d30d5da26..8bfa4248f 100644
--- a/src/lib/exchange_api_purse_merge.c
+++ b/src/lib/exchange_api_purse_merge.c
@@ -349,14 +349,22 @@ TALER_EXCHANGE_account_merge (
purse_pub,
merge_priv,
&merge_sig);
- TALER_wallet_account_merge_sign (merge_timestamp,
- purse_pub,
- purse_expiration,
- h_contract_terms,
- purse_value_after_fees,
- min_age,
- reserve_priv,
- &reserve_sig);
+ {
+ struct TALER_Amount zero_purse_fee;
+
+ TALER_amount_set_zero (purse_value_after_fees->currency,
+ &zero_purse_fee);
+ TALER_wallet_account_merge_sign (merge_timestamp,
+ purse_pub,
+ purse_expiration,
+ h_contract_terms,
+ purse_value_after_fees,
+ &zero_purse_fee,
+ min_age,
+ TALER_WAMF_MODE_MERGE_FULLY_PAID_PURSE,
+ reserve_priv,
+ &reserve_sig);
+ }
merge_obj = GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("payto_uri",
reserve_url),