exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 2e80f51e2515da3cb4bae47ccf3bee9ddf3d4482
parent 76b8a2a8de551db8801bd42111bd959a28517cb3
Author: Christian Grothoff <christian@grothoff.org>
Date:   Mon, 23 May 2022 16:11:21 +0200

handle purse deposit client-side

Diffstat:
Msrc/lib/exchange_api_common.c | 37++++++++++++++++++++++++++++++++++---
1 file changed, 34 insertions(+), 3 deletions(-)

diff --git a/src/lib/exchange_api_common.c b/src/lib/exchange_api_common.c @@ -1167,8 +1167,39 @@ help_purse_deposit (struct CoinHistoryParseContext *pc, const struct TALER_Amount *amount, json_t *transaction) { - GNUNET_break (0); // FIXME: implement! - return GNUNET_SYSERR; + struct TALER_PurseContractPublicKeyP purse_pub; + struct TALER_CoinSpendSignatureP coin_sig; + const char *exchange_base_url; + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_fixed_auto ("purse_pub", + &purse_pub), + GNUNET_JSON_spec_fixed_auto ("coin_sig", + &coin_sig), + GNUNET_JSON_spec_string ("exchange_base_url", + &exchange_base_url), + GNUNET_JSON_spec_end () + }; + + if (GNUNET_OK != + GNUNET_JSON_parse (transaction, + spec, + NULL, NULL)) + { + GNUNET_break_op (0); + return GNUNET_SYSERR; + } + if (GNUNET_OK != + TALER_wallet_purse_deposit_verify ( + exchange_base_url, + &purse_pub, + amount, + pc->coin_pub, + &coin_sig)) + { + GNUNET_break_op (0); + return GNUNET_SYSERR; + } + return GNUNET_YES; } @@ -1192,7 +1223,7 @@ TALER_EXCHANGE_verify_coin_history ( { "RECOUP", &help_recoup }, { "RECOUP-REFRESH", &help_recoup_refresh }, { "OLD-COIN-RECOUP", &help_old_coin_recoup }, - { "PURSE_DEPOSIT", &help_purse_deposit }, + { "PURSE-DEPOSIT", &help_purse_deposit }, { NULL, NULL } }; struct CoinHistoryParseContext pc = {