summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/taler-merchant-httpd_history.c43
-rw-r--r--src/backend/taler-merchant-httpd_pay.c7
-rw-r--r--src/backend/taler-merchant-httpd_proposal.c15
-rw-r--r--src/backend/taler-merchant-httpd_track-transaction.c7
-rw-r--r--src/backenddb/plugin_merchantdb_postgres.c99
-rw-r--r--src/backenddb/test_merchantdb.c56
-rw-r--r--src/include/taler_merchant_service.h1
-rw-r--r--src/include/taler_merchantdb_plugin.h34
-rw-r--r--src/lib/merchant_api_history.c8
-rw-r--r--src/lib/test_merchant_api.c13
10 files changed, 127 insertions, 156 deletions
diff --git a/src/backend/taler-merchant-httpd_history.c b/src/backend/taler-merchant-httpd_history.c
index 8efd89aa..1190a03c 100644
--- a/src/backend/taler-merchant-httpd_history.c
+++ b/src/backend/taler-merchant-httpd_history.c
@@ -39,27 +39,19 @@
*/
static void
-history_cb (void *cls,
- const struct TALER_MerchantPublicKeyP *merchant_pub,
- const char *exchange_uri,
- const struct GNUNET_HashCode *h_proposal_data,
- const struct GNUNET_HashCode *h_wire,
- struct GNUNET_TIME_Absolute timestamp,
- struct GNUNET_TIME_Absolute refund,
- const struct TALER_Amount *total_amount)
+pd_cb (void *cls,
+ const char *order_id,
+ const json_t *proposal_data)
{
json_t *response = cls;
json_t *entry;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "history_cb\n");
+ /*FIXME: more details to be returned*/
GNUNET_break (NULL !=
- (entry = json_pack ("{s:o, s:s, s:o, s:o}",
- "h_proposal_data", GNUNET_JSON_from_data_auto (h_proposal_data),
- "exchange", exchange_uri,
- "timestamp", GNUNET_JSON_from_time_abs (timestamp),
- "total_amount",
- TALER_JSON_from_amount (total_amount))));
+ (entry = json_pack ("{s:s, s:o}",
+ "order_id", order_id,
+ "proposal_data", proposal_data)));
+
GNUNET_break (0 == json_array_append (response, entry));
}
@@ -87,6 +79,7 @@ MH_handler_history (struct TMH_RequestHandler *rh,
json_t *response;
unsigned int ret;
unsigned long long seconds;
+ struct MerchantInstance *mi;
response = json_array (); /*FIXME who decrefs this?*/
str = MHD_lookup_connection_value (connection,
@@ -108,14 +101,24 @@ MH_handler_history (struct TMH_RequestHandler *rh,
TALER_EC_HISTORY_TIMESTAMP_OVERFLOW,
"Timestamp overflowed");
+ str = MHD_lookup_connection_value (connection,
+ MHD_GET_ARGUMENT_KIND,
+ "instance");
+ if (NULL == str)
+ return TMH_RESPONSE_reply_arg_missing (connection,
+ TALER_EC_PARAMETER_MISSING,
+ "instance");
+ mi = TMH_lookup_instance (str);
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Querying history back to %llu\n",
date.abs_value_us);
- ret = db->find_transactions_by_date (db->cls,
- date,
- history_cb,
- response);
+ ret = db->find_proposal_data_by_date (db->cls,
+ date,
+ &mi->pubkey,
+ pd_cb,
+ response);
if (GNUNET_SYSERR == ret)
return TMH_RESPONSE_reply_internal_error (connection,
TALER_EC_HISTORY_DB_FETCH_ERROR,
diff --git a/src/backend/taler-merchant-httpd_pay.c b/src/backend/taler-merchant-httpd_pay.c
index f3be11ad..2d86a12b 100644
--- a/src/backend/taler-merchant-httpd_pay.c
+++ b/src/backend/taler-merchant-httpd_pay.c
@@ -922,7 +922,6 @@ parse_pay (struct MHD_Connection *connection, json_t *root, struct PayContext *p
unsigned int coins_index;
const char *chosen_exchange;
const char *order_id;
- struct GNUNET_HashCode h_oid;
struct TALER_MerchantPublicKeyP merchant_pub;
int res;
struct GNUNET_JSON_Specification spec[] = {
@@ -942,13 +941,9 @@ parse_pay (struct MHD_Connection *connection, json_t *root, struct PayContext *p
return res;
}
- GNUNET_CRYPTO_hash (order_id,
- strlen (order_id),
- &h_oid);
-
res = db->find_proposal_data (db->cls,
&pc->proposal_data,
- &h_oid,
+ order_id,
&merchant_pub);
diff --git a/src/backend/taler-merchant-httpd_proposal.c b/src/backend/taler-merchant-httpd_proposal.c
index c0dca1bf..ac71653a 100644
--- a/src/backend/taler-merchant-httpd_proposal.c
+++ b/src/backend/taler-merchant-httpd_proposal.c
@@ -137,7 +137,6 @@ proposal_put (struct MHD_Connection *connection, json_t *order)
struct TALER_Amount total;
struct TALER_Amount max_fee;
const char *order_id;
- struct GNUNET_HashCode h_oid;
json_t *products;
json_t *merchant;
struct GNUNET_TIME_Absolute timestamp;
@@ -259,15 +258,13 @@ proposal_put (struct MHD_Connection *connection, json_t *order)
&pdps.purpose,
&merchant_sig);
- GNUNET_CRYPTO_hash (order_id,
- strlen (order_id),
- &h_oid);
-
+ /* fetch timestamp from order */
if (GNUNET_OK !=
db->insert_proposal_data (db->cls,
- &h_oid,
+ order_id,
&mi->pubkey,
+ timestamp,
order))
{
GNUNET_JSON_parse_free (spec);
@@ -371,7 +368,6 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
{
const char *order_id;
const char *instance;
- struct GNUNET_HashCode h_oid;
int res;
json_t *proposal_data;
struct MerchantInstance *mi;
@@ -394,13 +390,10 @@ MH_handler_proposal_lookup (struct TMH_RequestHandler *rh,
return TMH_RESPONSE_reply_arg_missing (connection,
TALER_EC_PARAMETER_MISSING,
"order_id");
- GNUNET_CRYPTO_hash (order_id,
- strlen (order_id),
- &h_oid);
res = db->find_proposal_data (db->cls,
&proposal_data,
- &h_oid,
+ order_id,
&mi->pubkey);
if (GNUNET_NO == res)
return TMH_RESPONSE_reply_not_found (connection,
diff --git a/src/backend/taler-merchant-httpd_track-transaction.c b/src/backend/taler-merchant-httpd_track-transaction.c
index 608c3eb9..17b45425 100644
--- a/src/backend/taler-merchant-httpd_track-transaction.c
+++ b/src/backend/taler-merchant-httpd_track-transaction.c
@@ -848,7 +848,6 @@ MH_handler_track_transaction (struct TMH_RequestHandler *rh,
const char *instance;
int ret;
struct GNUNET_HashCode h_instance;
- struct GNUNET_HashCode h_order_id;
struct GNUNET_HashCode h_proposal_data;
struct json_t *proposal_data;
@@ -912,10 +911,6 @@ MH_handler_track_transaction (struct TMH_RequestHandler *rh,
strlen (instance),
&h_instance);
- GNUNET_CRYPTO_hash (order_id,
- strlen (order_id),
- &h_order_id);
-
tctx->mi = GNUNET_CONTAINER_multihashmap_get (by_id_map,
&h_instance);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -929,7 +924,7 @@ MH_handler_track_transaction (struct TMH_RequestHandler *rh,
if (GNUNET_YES != db->find_proposal_data (db->cls,
&proposal_data,
- &h_order_id,
+ order_id,
&tctx->mi->pubkey))
return TMH_RESPONSE_reply_not_found (connection,
diff --git a/src/backenddb/plugin_merchantdb_postgres.c b/src/backenddb/plugin_merchantdb_postgres.c
index 28459248..a6c1feb4 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -164,10 +164,11 @@ postgres_initialize (void *cls)
/* Setup tables */
PG_EXEC (pg,
"CREATE TABLE IF NOT EXISTS merchant_proposal_data ("
- "h_order_id BYTEA NOT NULL"
+ "order_id VARCHAR NOT NULL"
",merchant_pub BYTEA NOT NULL"
",proposal_data BYTEA NOT NULL"
- ",PRIMARY KEY (h_order_id, merchant_pub)"
+ ",timestamp INT8 NOT NULL"
+ ",PRIMARY KEY (order_id, merchant_pub)"
");");
PG_EXEC (pg,
@@ -279,36 +280,34 @@ postgres_initialize (void *cls)
PG_PREPARE (pg,
"insert_proposal_data",
"INSERT INTO merchant_proposal_data"
- "(h_order_id"
+ "(order_id"
",merchant_pub"
+ ",timestamp"
",proposal_data)"
" VALUES "
- "($1, $2, $3)",
- 3);
+ "($1, $2, $3, $4)",
+ 4);
PG_PREPARE (pg,
"find_proposal_data",
- "SELECT proposal_data FROM merchant_proposal_data"
+ "SELECT"
+ " proposal_data"
+ " FROM merchant_proposal_data"
" WHERE"
- " h_order_id=$1"
+ " order_id=$1"
" AND merchant_pub=$2",
2);
PG_PREPARE (pg,
- "find_transactions_by_date",
+ "find_proposal_data_by_date",
"SELECT"
- " h_proposal_data"
- ",merchant_pub"
- ",exchange_uri"
- ",h_wire"
- ",timestamp"
- ",refund_deadline"
- ",total_amount_val"
- ",total_amount_frac"
- ",total_amount_curr"
- " FROM merchant_transactions"
- " WHERE timestamp>=$1",
- 1);
+ " proposal_data"
+ ",order_id"
+ " FROM merchant_proposal_data"
+ " WHERE"
+ " timestamp>=$1"
+ " AND merchant_pub=$2",
+ 2);
/* Setup prepared "SELECT" statements */
PG_PREPARE (pg,
@@ -409,7 +408,7 @@ postgres_initialize (void *cls)
static int
postgres_find_proposal_data (void *cls,
json_t **proposal_data,
- const struct GNUNET_HashCode *h_transaction_id,
+ const char *order_id,
const struct TALER_MerchantPublicKeyP *merchant_pub)
{
struct PostgresClosure *pg = cls;
@@ -417,7 +416,7 @@ postgres_find_proposal_data (void *cls,
unsigned int i;
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (h_transaction_id),
+ GNUNET_PQ_query_param_string (order_id),
GNUNET_PQ_query_param_auto_from_type (merchant_pub),
GNUNET_PQ_query_param_end
};
@@ -466,8 +465,9 @@ postgres_find_proposal_data (void *cls,
*/
static int
postgres_insert_proposal_data (void *cls,
- const struct GNUNET_HashCode *h_transaction_id,
+ const char *order_id,
const struct TALER_MerchantPublicKeyP *merchant_pub,
+ struct GNUNET_TIME_Absolute timestamp,
const json_t *proposal_data)
{
struct PostgresClosure *pg = cls;
@@ -475,8 +475,9 @@ postgres_insert_proposal_data (void *cls,
int ret;
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (h_transaction_id),
+ GNUNET_PQ_query_param_string (order_id),
GNUNET_PQ_query_param_auto_from_type (merchant_pub),
+ GNUNET_PQ_query_param_absolute_time (&timestamp),
TALER_PQ_query_param_json (proposal_data),
GNUNET_PQ_query_param_end
};
@@ -727,10 +728,11 @@ postgres_store_transfer_to_proof (void *cls,
* @return numer of found tuples, #GNUNET_SYSERR upon error
*/
static int
-postgres_find_transactions_by_date (void *cls,
- struct GNUNET_TIME_Absolute date,
- TALER_MERCHANTDB_TransactionCallback cb,
- void *cb_cls)
+postgres_find_proposal_data_by_date (void *cls,
+ struct GNUNET_TIME_Absolute date,
+ const struct TALER_MerchantPublicKeyP *merchant_pub,
+ TALER_MERCHANTDB_ProposalDataCallback cb,
+ void *cb_cls)
{
struct PostgresClosure *pg = cls;
@@ -740,10 +742,11 @@ postgres_find_transactions_by_date (void *cls,
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_absolute_time (&date),
+ GNUNET_PQ_query_param_auto_from_type (merchant_pub),
GNUNET_PQ_query_param_end
};
result = GNUNET_PQ_exec_prepared (pg->conn,
- "find_transactions_by_date",
+ "find_proposal_data_by_date",
params);
if (PGRES_TUPLES_OK != PQresultStatus (result))
{
@@ -758,29 +761,14 @@ postgres_find_transactions_by_date (void *cls,
}
for (i = 0; i < n; i++)
{
- struct TALER_MerchantPublicKeyP merchant_pub;
- char *exchange_uri;
- struct GNUNET_HashCode h_wire;
- struct GNUNET_TIME_Absolute timestamp;
- struct GNUNET_TIME_Absolute refund_deadline;
- struct TALER_Amount total_amount;
- struct GNUNET_HashCode h_proposal_data;
+ char *order_id;
+ json_t *proposal_data;
struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_string ("exchange_uri",
- &exchange_uri),
- GNUNET_PQ_result_spec_auto_from_type ("h_proposal_data",
- &h_proposal_data),
- GNUNET_PQ_result_spec_auto_from_type ("merchant_pub",
- &merchant_pub),
- GNUNET_PQ_result_spec_auto_from_type ("h_wire",
- &h_wire),
- GNUNET_PQ_result_spec_absolute_time ("timestamp",
- &timestamp),
- GNUNET_PQ_result_spec_absolute_time ("refund_deadline",
- &refund_deadline),
- TALER_PQ_result_spec_amount ("total_amount",
- &total_amount),
+ GNUNET_PQ_result_spec_string ("order_id",
+ &order_id),
+ TALER_PQ_result_spec_json ("proposal_data",
+ &proposal_data),
GNUNET_PQ_result_spec_end
};
@@ -794,13 +782,8 @@ postgres_find_transactions_by_date (void *cls,
return GNUNET_SYSERR;
}
cb (cb_cls,
- &merchant_pub,
- exchange_uri,
- &h_proposal_data,
- &h_wire,
- timestamp,
- refund_deadline,
- &total_amount);
+ order_id,
+ proposal_data);
GNUNET_PQ_cleanup_result (rs);
}
PQclear (result);
@@ -1377,7 +1360,6 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
plugin->store_coin_to_transfer = &postgres_store_coin_to_transfer;
plugin->store_transfer_to_proof = &postgres_store_transfer_to_proof;
plugin->find_transaction = &postgres_find_transaction;
- plugin->find_transactions_by_date = &postgres_find_transactions_by_date;
plugin->find_payments_by_hash_and_coin = &postgres_find_payments_by_hash_and_coin;
plugin->find_payments = &postgres_find_payments;
plugin->find_transfers_by_hash = &postgres_find_transfers_by_hash;
@@ -1385,6 +1367,7 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
plugin->find_proof_by_wtid = &postgres_find_proof_by_wtid;
plugin->insert_proposal_data = &postgres_insert_proposal_data;
plugin->find_proposal_data = &postgres_find_proposal_data;
+ plugin->find_proposal_data_by_date = &postgres_find_proposal_data_by_date;
return plugin;
}
diff --git a/src/backenddb/test_merchantdb.c b/src/backenddb/test_merchantdb.c
index c8366f34..9747f7a7 100644
--- a/src/backenddb/test_merchantdb.c
+++ b/src/backenddb/test_merchantdb.c
@@ -60,11 +60,6 @@ static int result;
static struct TALER_MERCHANTDB_Plugin *plugin;
/**
- * Hash of the (fictitious) transaction id. Set to some random value.
- */
-static struct GNUNET_HashCode h_transaction_id;
-
-/**
* Hash of the wire transfer address. Set to some random value.
*/
static struct GNUNET_HashCode h_wire;
@@ -72,7 +67,7 @@ static struct GNUNET_HashCode h_wire;
/**
* Transaction ID.
*/
-char *transaction_id;
+const char *order_id;
/**
* Proposal's hash
@@ -187,32 +182,18 @@ transaction_cb (void *cls,
&amount_with_fee));
}
-
/**
- * Function called with information about a transaction. Checks whether the
- * returned tuple
+ * Callback for `find_proposal_data_by_date`.
*
* @param cls closure
- * @param transaction_id of the contract
- * @param merchant_pub merchant's public key
- * @param exchange_uri URI of the exchange
- * @param h_wire hash of our wire details
- * @param timestamp time of the confirmation
- * @param refund refund deadline
- * @param total_amount total amount we receive for the contract after fees
+ * @param order_id order id
+ * @param proposal_data proposal data
*/
-
static void
-history_cb (void *cls,
- const struct TALER_MerchantPublicKeyP *merchant_pub,
- const char *exchange_uri,
- const struct GNUNET_HashCode *h_proposal_data,
- const struct GNUNET_HashCode *h_wire,
- struct GNUNET_TIME_Absolute timestamp,
- struct GNUNET_TIME_Absolute refund,
- const struct TALER_Amount *total_amount)
+pd_cb (void *cls,
+ const char *order_id,
+ const json_t *proposal_data)
{
- /*Just a stub*/
return;
}
@@ -336,10 +317,7 @@ run (void *cls)
/* Prepare data for 'store_payment()' */
RND_BLK (&h_wire);
RND_BLK (&h_proposal_data);
- transaction_id = "test_ID";
- GNUNET_CRYPTO_hash (transaction_id,
- strlen (transaction_id),
- &h_transaction_id);
+ order_id = "test_ID";
RND_BLK (&signkey_pub);
RND_BLK (&merchant_pub);
RND_BLK (&wtid);
@@ -371,8 +349,9 @@ run (void *cls)
FAILIF (GNUNET_OK !=
plugin->insert_proposal_data (plugin->cls,
- &h_transaction_id,
+ order_id,
&merchant_pub,
+ timestamp,
proposal_data));
json_t *out;
@@ -380,9 +359,15 @@ run (void *cls)
FAILIF (GNUNET_OK !=
plugin->find_proposal_data (plugin->cls,
&out, // plain data
- &h_transaction_id,
+ order_id,
&merchant_pub));
+ FAILIF (1 !=
+ plugin->find_proposal_data_by_date (plugin->cls,
+ fake_now,
+ &merchant_pub,
+ pd_cb,
+ NULL));
FAILIF (GNUNET_OK !=
plugin->store_transaction (plugin->cls,
&h_proposal_data,
@@ -420,13 +405,6 @@ run (void *cls)
&transaction_cb,
NULL));
- /* FIXME: put here find_transactions_by_date () */
- FAILIF (1 !=
- plugin->find_transactions_by_date (plugin->cls,
- fake_now,
- history_cb,
- NULL));
-
FAILIF (GNUNET_OK !=
plugin->find_payments (plugin->cls,
&h_proposal_data,
diff --git a/src/include/taler_merchant_service.h b/src/include/taler_merchant_service.h
index 99bab17b..2e2af851 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -560,6 +560,7 @@ typedef void
struct TALER_MERCHANT_HistoryOperation *
TALER_MERCHANT_history (struct GNUNET_CURL_Context *ctx,
const char *backend_uri,
+ const char *instance,
struct GNUNET_TIME_Absolute date,
TALER_MERCHANT_HistoryOperationCallback history_cb,
void *history_cb_cls);
diff --git a/src/include/taler_merchantdb_plugin.h b/src/include/taler_merchantdb_plugin.h
index 33102a03..befa23df 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -32,6 +32,18 @@ struct TALER_MERCHANTDB_Plugin;
/**
+ * Tipically called by `find_proposal_data_by_date`.
+ *
+ * @param cls closure
+ * @param order_id order id
+ * @param proposal_data proposal data related to order id
+ */
+ typedef void
+ (*TALER_MERCHANTDB_ProposalDataCallback)(void *cls,
+ const char *order_id,
+ const json_t *proposal_data);
+
+/**
* Function called with information about a transaction.
*
* @param cls closure
@@ -158,8 +170,9 @@ struct TALER_MERCHANTDB_Plugin
*/
int
(*insert_proposal_data) (void *cls,
- const struct GNUNET_HashCode *h_transaction_id,
+ const char *order_id,
const struct TALER_MerchantPublicKeyP *merchant_pub,
+ struct GNUNET_TIME_Absolute timestamp,
const json_t *proposal_data);
@@ -177,11 +190,28 @@ struct TALER_MERCHANTDB_Plugin
int
(*find_proposal_data) (void *cls,
json_t **proposal_data,
- const struct GNUNET_HashCode *h_transaction_id,
+ const char *order_id,
const struct TALER_MerchantPublicKeyP *merchant_pub);
/**
+ * Return proposal data and order id for all proposals younger than
+ * date.
+ *
+ * @param cls closure
+ * @param date limit to the oldest record
+ * @param cb callback called with proposal data and order id
+ * @param cb_cls closure for cb
+ */
+ int
+ (*find_proposal_data_by_date) (void *cls,
+ struct GNUNET_TIME_Absolute date,
+ const struct TALER_MerchantPublicKeyP *merchant_pub,
+ TALER_MERCHANTDB_ProposalDataCallback cb,
+ void *cb_cls);
+
+
+ /**
* Insert transaction data into the database.
*
* @param cls closure
diff --git a/src/lib/merchant_api_history.c b/src/lib/merchant_api_history.c
index 39f9bd82..d0dffd66 100644
--- a/src/lib/merchant_api_history.c
+++ b/src/lib/merchant_api_history.c
@@ -113,7 +113,7 @@ history_raw_cb (void *cls,
break;
case MHD_HTTP_BAD_REQUEST:
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Wrong parameter passed in URL\n");
+ "Wrong/missing URL parameter\n");
break;
default:
/* unexpected response code */
@@ -144,6 +144,7 @@ history_raw_cb (void *cls,
struct TALER_MERCHANT_HistoryOperation *
TALER_MERCHANT_history (struct GNUNET_CURL_Context *ctx,
const char *backend_uri,
+ const char *instance,
struct GNUNET_TIME_Absolute date,
TALER_MERCHANT_HistoryOperationCallback history_cb,
void *history_cb_cls)
@@ -158,9 +159,10 @@ TALER_MERCHANT_history (struct GNUNET_CURL_Context *ctx,
ho->cb_cls = history_cb_cls;
seconds = date.abs_value_us / 1000LL / 1000LL;
GNUNET_asprintf (&ho->url,
- "%s/history?date=%llu",
+ "%s/history?date=%llu&instance=%s",
backend_uri,
- seconds);
+ seconds,
+ instance);
eh = curl_easy_init ();
if (CURLE_OK != curl_easy_setopt (eh,
CURLOPT_URL,
diff --git a/src/lib/test_merchant_api.c b/src/lib/test_merchant_api.c
index f0fca8ea..700b56b0 100644
--- a/src/lib/test_merchant_api.c
+++ b/src/lib/test_merchant_api.c
@@ -753,23 +753,13 @@ history_cb (void *cls,
const json_t *json)
{
struct InterpreterState *is = cls;
- struct Command *cmd = &is->commands[is->ip];
- unsigned int nelements;
if (MHD_HTTP_OK != http_status)
{
fail (is);
return;
}
- nelements = json_array_size (json);
- if (nelements != (cmd->details.history.nresult * (instance_idx + 1)))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Did not get as many history entries as expected\n");
- fail (is);
- return;
- }
-
+ /*FIXME: put check on number of expected entries*/
next_command (is);
}
@@ -1974,6 +1964,7 @@ interpreter_run (void *cls)
if (NULL ==
(cmd->details.history.ho = TALER_MERCHANT_history (ctx,
MERCHANT_URI,
+ instance,
cmd->details.history.date,
history_cb,
is)))