aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-06-11 18:22:44 +0200
committerChristian Grothoff <christian@grothoff.org>2016-06-11 18:22:44 +0200
commit030b7716aef576fca17eb5f5f0b1f278678aa4d3 (patch)
tree350f15690f8a3d66e36090f4f012faeb5a7b49ad
parent766fb6e2821dc84ccfe290e8906f12001e34043b (diff)
parent23c6dba981134987247ff607a6b18a68aef338b9 (diff)
Merge branch 'master' of git+ssh://taler.net/var/git/exchange
-rw-r--r--src/benchmark/taler-exchange-benchmark.c89
1 files changed, 71 insertions, 18 deletions
diff --git a/src/benchmark/taler-exchange-benchmark.c b/src/benchmark/taler-exchange-benchmark.c
index 0b2a4043c..761cc03bd 100644
--- a/src/benchmark/taler-exchange-benchmark.c
+++ b/src/benchmark/taler-exchange-benchmark.c
@@ -51,6 +51,14 @@ struct GNUNET_CONFIGURATION_Handle *cfg;
static unsigned int nreserves;
/**
+ * How many coins are in `coins` array. This is needed
+ * as the number of coins is not always nreserves * COINS_PER_RESERVE
+ * due to refresh operations
+ */
+unsigned int ncoins;
+
+
+/**
* Bank details of who creates reserves
*/
json_t *sender_details;
@@ -120,7 +128,9 @@ struct TALER_DenominationBlindingKeyP blinding_key;
struct Coin {
/**
* Index in the reserve's global array indicating which
- * reserve this coin is to be retrieved
+ * reserve this coin is to be retrieved. If the coin comes
+ * from a refresh, then this value is set to the melted coin's
+ * reserve index
*/
unsigned int reserve_index;
@@ -143,11 +153,6 @@ struct Coin {
struct TALER_CoinSpendPrivateKeyP coin_priv;
/**
- * Blinding key used for the operation.
- */
- struct TALER_DenominationBlindingKeyP blinding_key;
-
- /**
* Withdraw handle (while operation is running).
*/
struct TALER_EXCHANGE_ReserveWithdrawHandle *wsh;
@@ -211,8 +216,7 @@ static struct Reserve *reserves;
static struct Coin *coins;
/**
- * Indices of spent coins (the first element always indicates
- * the total number of elements, including itself)
+ * Indices of spent coins
*/
static unsigned int *spent_coins;
@@ -275,6 +279,21 @@ static char *currency;
*/
static unsigned int refreshed_once = GNUNET_NO;
+/**
+ * List of coins to get in return to a melt operation. Just a
+ * static list for now as every melt operation is carried out
+ * on a 8 KUDOS coin whose only 1 KUDOS has been spent, thus
+ * 7 KUDOS melted. This structure must be changed with one holding
+ * TALER_Amount structs, as every time it's needed it requires
+ * too many operations before getting the desired TALER_Amount.
+ */
+static char *refresh_denoms[] = {
+ "4",
+ "2",
+ "1",
+ NULL
+};
+
static unsigned int
eval_probability (float probability)
{
@@ -380,7 +399,46 @@ reveal_cb (void *cls,
const struct TALER_DenominationSignature *sigs,
const json_t *full_response)
{
- /* TODO */
+ /* FIXME to be freed */
+ struct RefreshRevealCls *rrcls = cls;
+ unsigned int i;
+ const struct TALER_EXCHANGE_Keys *keys;
+
+ coins[rrcls->coin_index].rrh = NULL;
+ if (MHD_HTTP_OK != http_status)
+ {
+ fail ("Not all coins correctly revealed\n");
+ return;
+ }
+ else
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Coin revealed!\n");
+ /**
+ * 1 Stuff a Coin structure
+ * 2 Place it in global array
+ */
+ keys = TALER_EXCHANGE_get_keys (exchange);
+ for (i=0; i<num_coins; i++)
+ {
+ struct Coin fresh_coin;
+ struct TALER_Amount amount;
+ char *refresh_denom;
+
+ GNUNET_asprintf (&refresh_denom,
+ "%s:%s",
+ currency,
+ refresh_denoms[i]);
+ fresh_coin.reserve_index = coins[rrcls->coin_index].reserve_index;
+ TALER_string_to_amount (refresh_denom, &amount);
+ GNUNET_free (refresh_denom);
+ fresh_coin.pk = find_pk (keys, &amount);
+ fresh_coin.sig = sigs[i];
+ GNUNET_array_append (coins, ncoins, fresh_coin);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "# of coins after refresh: %d\n",
+ ncoins);
+ }
+ GNUNET_free (rrcls);
}
/**
@@ -404,6 +462,7 @@ melt_cb (void *cls,
struct RefreshRevealCls *rrcls = cls;
/* FIXME to be freed */
+ coins[rrcls->coin_index].rmh = NULL;
if (MHD_HTTP_OK != http_status)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -418,7 +477,7 @@ melt_cb (void *cls,
rrcls->blob,
noreveal_index,
reveal_cb,
- NULL);
+ rrcls);
}
/**
@@ -719,7 +778,8 @@ benchmark_run (void *cls)
reserves = GNUNET_new_array (nreserves,
struct Reserve);
- coins = GNUNET_new_array (COINS_PER_RESERVE * nreserves,
+ ncoins = COINS_PER_RESERVE * nreserves;
+ coins = GNUNET_new_array (ncoins,
struct Coin);
for (i=0;i < nreserves && 0 < nreserves;i++)
@@ -818,13 +878,6 @@ cert_cb (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Using currency: %s\n", currency);
- char *refresh_denoms[] = {
- "4",
- "2",
- "1",
- NULL
- };
-
if (GNUNET_SYSERR == build_refresh (refresh_denoms))
{
fail(NULL);