merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit accd9c17b02841e641b144895b05b49dc4fe9a14
parent 811ce1add5e7cd795c113dde8a606887342c83ed
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Mon,  9 Jun 2025 14:56:21 +0200

taler-merchant-kyccheck: prevent AML_LOW_FREQ from being faster than AML_FREQ, add randomization to avoid thundering herd problems (#10090)

Diffstat:
Msrc/backend/taler-merchant-httpd_config.c | 2+-
Msrc/backend/taler-merchant-kyccheck.c | 26++++++++++++++++++++++----
2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_config.c b/src/backend/taler-merchant-httpd_config.c @@ -43,7 +43,7 @@ * #MERCHANT_PROTOCOL_CURRENT and #MERCHANT_PROTOCOL_AGE in * merchant_api_config.c! */ -#define MERCHANT_PROTOCOL_VERSION "18:0:15" +#define MERCHANT_PROTOCOL_VERSION "18:1:15" /** diff --git a/src/backend/taler-merchant-kyccheck.c b/src/backend/taler-merchant-kyccheck.c @@ -542,12 +542,15 @@ exchange_check_cb ( if (i->aml_review || i->zero_limited) { if (! progress) - i->due = GNUNET_TIME_relative_to_absolute (aml_freq); + i->due = GNUNET_TIME_relative_to_absolute ( + GNUNET_TIME_randomize (aml_freq)); } else { /* KYC is OK, only check again if triggered */ - i->due = GNUNET_TIME_relative_to_absolute (aml_low_freq); + i->due = GNUNET_TIME_relative_to_absolute ( + GNUNET_TIME_randomize ( + aml_low_freq)); } break; case MHD_HTTP_ACCEPTED: @@ -574,7 +577,8 @@ exchange_check_cb ( json_decref (i->jlimits); i->jlimits = NULL; /* KYC is OK, only check again if triggered */ - i->due = GNUNET_TIME_relative_to_absolute (aml_low_freq); + i->due = GNUNET_TIME_relative_to_absolute ( + GNUNET_TIME_randomize (aml_low_freq)); break; case MHD_HTTP_FORBIDDEN: /* bad signature */ i->last_kyc_check = GNUNET_TIME_timestamp_get (); @@ -843,7 +847,8 @@ start_inquiry (struct Exchange *e, /* KYC is OFF, only check again if triggered */ if (GNUNET_YES != test_mode) { - i->due = GNUNET_TIME_relative_to_absolute (aml_low_freq); + i->due = GNUNET_TIME_relative_to_absolute ( + GNUNET_TIME_randomize (aml_low_freq)); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "KYC was disabled, randomizing inquiry to start at %s\n", GNUNET_TIME_absolute2s (i->due)); @@ -1029,6 +1034,8 @@ account_cb ( /** * The set of bank accounts has changed, update our * list of active inquiries. + * + * @param cls unused */ static void find_accounts (void *cls) @@ -1450,6 +1457,17 @@ run (void *cls, /* use default */ aml_low_freq = AML_LOW_FREQ; } + if (GNUNET_TIME_relative_cmp (aml_low_freq, + <, + aml_freq)) + { + aml_low_freq = GNUNET_TIME_relative_multiply (aml_freq, + 10); + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "AML_LOW_FREQ was set to less than AML_FREQ. Using %s instead\n", + GNUNET_TIME_relative2s (aml_low_freq, + true)); + } GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,