diff options
author | Christian Grothoff <christian@grothoff.org> | 2022-05-08 11:37:37 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2022-05-08 11:37:37 +0200 |
commit | d3a63881999aa1c6d763263346a0a5979ec6efac (patch) | |
tree | 92f220ad08ce79d1f18366346ffabfa93cf33d75 /src/lib | |
parent | 6b8e732bf8d8bfae268e7f5a9a09af9167fd0d47 (diff) |
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.c | 26 | ||||
-rw-r--r-- | src/lib/exchange_api_purse_merge.c | 24 |
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), |