From 4835ddf60b80a720657d42e2de57a79f258328cd Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 5 Mar 2022 11:56:58 +0100 Subject: introduce sets for wire fees and global fees --- src/include/taler_crypto_lib.h | 146 +++++++++++++++++++++++++++++++++++++++++ src/util/config.c | 15 ++++- src/util/util.c | 48 ++++++++++++++ 3 files changed, 208 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h index c23de3576..d81f5a71d 100644 --- a/src/include/taler_crypto_lib.h +++ b/src/include/taler_crypto_lib.h @@ -647,6 +647,57 @@ struct TALER_DenomFeeSetNBOP }; +/** + * Set of the fees applying for a given + * time-range and wire method. + */ +struct TALER_WireFeeSetNBOP +{ + + /** + * The fee the exchange charges for wiring funds + * to a merchant. + */ + struct TALER_AmountNBO wire; + + /** + * The fee the exchange charges for closing a reserve + * and wiring the funds back to the origin account. + */ + struct TALER_AmountNBO closing; + + /** + * The fee the exchange charges for cross-exchange + * P2P payments. + */ + struct TALER_AmountNBO wad; + +}; + + +/** + * Set of the fees applying globally for a given + * time-range. + */ +struct TALER_GlobalFeeSetNBOP +{ + + /** + * The fee the exchange charges for returning the + * history of a reserve or account. + */ + struct TALER_AmountNBO history; + + /** + * The fee the exchange charges for performing a + * KYC check on a reserve to turn it into an account + * that can be used for P2P payments. + */ + struct TALER_AmountNBO kyc; + +}; + + GNUNET_NETWORK_STRUCT_END @@ -684,6 +735,57 @@ struct TALER_DenomFeeSet }; +/** + * Set of the fees applying for a given + * time-range and wire method. + */ +struct TALER_WireFeeSet +{ + + /** + * The fee the exchange charges for wiring funds + * to a merchant. + */ + struct TALER_Amount wire; + + /** + * The fee the exchange charges for closing a reserve + * and wiring the funds back to the origin account. + */ + struct TALER_Amount closing; + + /** + * The fee the exchange charges for cross-exchange + * P2P payments. + */ + struct TALER_Amount wad; + +}; + + +/** + * Set of the fees applying globally for a given + * time-range. + */ +struct TALER_GlobalFeeSet +{ + + /** + * The fee the exchange charges for returning the + * history of a reserve or account. + */ + struct TALER_Amount history; + + /** + * The fee the exchange charges for performing a + * KYC check on a reserve to turn it into an account + * that can be used for P2P payments. + */ + struct TALER_Amount kyc; + +}; + + /** * Convert fee set from host to network byte order. * @@ -706,6 +808,50 @@ TALER_denom_fee_set_ntoh (struct TALER_DenomFeeSet *fees, const struct TALER_DenomFeeSetNBOP *nbo); +/** + * Convert global fee set from host to network byte order. + * + * @param[out] nbo where to write the result + * @param fees fee set to convert + */ +void +TALER_global_fee_set_hton (struct TALER_GlobalFeeSetNBOP *nbo, + const struct TALER_GlobalFeeSet *fees); + + +/** + * Convert global fee set from network to host network byte order. + * + * @param[out] fees where to write the result + * @param nbo fee set to convert + */ +void +TALER_global_fee_set_ntoh (struct TALER_GlobalFeeSet *fees, + const struct TALER_GlobalFeeSetNBOP *nbo); + + +/** + * Convert wire fee set from host to network byte order. + * + * @param[out] nbo where to write the result + * @param fees fee set to convert + */ +void +TALER_wire_fee_set_hton (struct TALER_WireFeeSetNBOP *nbo, + const struct TALER_WireFeeSet *fees); + + +/** + * Convert wire fee set from network to host network byte order. + * + * @param[out] fees where to write the result + * @param nbo fee set to convert + */ +void +TALER_wire_fee_set_ntoh (struct TALER_WireFeeSet *fees, + const struct TALER_WireFeeSetNBOP *nbo); + + /** * Hash @a rsa. * diff --git a/src/util/config.c b/src/util/config.c index dc342fdcf..c00792469 100644 --- a/src/util/config.c +++ b/src/util/config.c @@ -130,6 +130,8 @@ enum GNUNET_GenericReturnValue TALER_config_get_currency (const struct GNUNET_CONFIGURATION_Handle *cfg, char **currency) { + size_t slen; + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "taler", @@ -141,7 +143,8 @@ TALER_config_get_currency (const struct GNUNET_CONFIGURATION_Handle *cfg, "CURRENCY"); return GNUNET_SYSERR; } - if (strlen (*currency) >= TALER_CURRENCY_LEN) + slen = strlen (*currency); + if (slen >= TALER_CURRENCY_LEN) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Currency `%s' longer than the allowed limit of %u characters.", @@ -151,5 +154,15 @@ TALER_config_get_currency (const struct GNUNET_CONFIGURATION_Handle *cfg, *currency = NULL; return GNUNET_SYSERR; } + for (size_t i = 0; ihistory, + &fees->history); + TALER_amount_hton (&nbo->kyc, + &fees->kyc); +} + + +void +TALER_global_fee_set_ntoh (struct TALER_GlobalFeeSet *fees, + const struct TALER_GlobalFeeSetNBOP *nbo) +{ + TALER_amount_ntoh (&fees->history, + &nbo->history); + TALER_amount_ntoh (&fees->kyc, + &nbo->kyc); +} + + +void +TALER_wire_fee_set_hton (struct TALER_WireFeeSetNBOP *nbo, + const struct TALER_WireFeeSet *fees) +{ + TALER_amount_hton (&nbo->wire, + &fees->wire); + TALER_amount_hton (&nbo->closing, + &fees->closing); + TALER_amount_hton (&nbo->wad, + &fees->wad); +} + + +void +TALER_wire_fee_set_ntoh (struct TALER_WireFeeSet *fees, + const struct TALER_WireFeeSetNBOP *nbo) +{ + TALER_amount_ntoh (&fees->wire, + &nbo->wire); + TALER_amount_ntoh (&fees->closing, + &nbo->closing); + TALER_amount_ntoh (&fees->wad, + &nbo->wad); +} + + enum GNUNET_GenericReturnValue TALER_denom_fee_check_currency ( const char *currency, -- cgit v1.2.3