introduce sets for wire fees and global fees

This commit is contained in:
Christian Grothoff 2022-03-05 11:56:58 +01:00
parent 3a1f418603
commit 4835ddf60b
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 208 additions and 1 deletions

View File

@ -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.
*

View File

@ -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; i<slen; i++)
if (! isalpha ((unsigned char) (*currency)[i]))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Currency `%s' must only use characters from the A-Z range.",
*currency);
GNUNET_free (*currency);
*currency = NULL;
return GNUNET_SYSERR;
}
return GNUNET_OK;
}

View File

@ -76,6 +76,54 @@ TALER_denom_fee_set_ntoh (struct TALER_DenomFeeSet *fees,
}
void
TALER_global_fee_set_hton (struct TALER_GlobalFeeSetNBOP *nbo,
const struct TALER_GlobalFeeSet *fees)
{
TALER_amount_hton (&nbo->history,
&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,