tests for refunds_by_coin and ready_deposit
This commit is contained in:
parent
a273b176da
commit
54fa07f5c7
@ -296,7 +296,7 @@ check_PROGRAMS = \
|
|||||||
perf-exchangedb-reserves-in-insert-postgres\
|
perf-exchangedb-reserves-in-insert-postgres\
|
||||||
test-exchangedb-by-j-postgres\
|
test-exchangedb-by-j-postgres\
|
||||||
test-exchangedb-batch-reserves-in-insert-postgres\
|
test-exchangedb-batch-reserves-in-insert-postgres\
|
||||||
test-exchangedb-populate-table-postgres\
|
test-exchangedb-populate-select-refunds-by-coin-postgres\
|
||||||
test-exchangedb-populate-link-data-postgres\
|
test-exchangedb-populate-link-data-postgres\
|
||||||
test-exchangedb-populate-ready-deposit-postgres
|
test-exchangedb-populate-ready-deposit-postgres
|
||||||
|
|
||||||
@ -306,7 +306,7 @@ TESTS = \
|
|||||||
test-exchangedb-by-j-postgres\
|
test-exchangedb-by-j-postgres\
|
||||||
perf-exchangedb-reserves-in-insert-postgres\
|
perf-exchangedb-reserves-in-insert-postgres\
|
||||||
test-exchangedb-batch-reserves-in-insert-postgres\
|
test-exchangedb-batch-reserves-in-insert-postgres\
|
||||||
test-exchangedb-populate-table-postgres\
|
test-exchangedb-populate-select-refunds-by-coin-postgres\
|
||||||
test-exchangedb-populate-link-data-postgres\
|
test-exchangedb-populate-link-data-postgres\
|
||||||
test-exchangedb-populate-ready-deposit-postgres
|
test-exchangedb-populate-ready-deposit-postgres
|
||||||
test_exchangedb_postgres_SOURCES = \
|
test_exchangedb_postgres_SOURCES = \
|
||||||
@ -369,9 +369,9 @@ test_exchangedb_batch_reserves_in_insert_postgres_LDADD = \
|
|||||||
-lgnunetutil \
|
-lgnunetutil \
|
||||||
$(XLIB)
|
$(XLIB)
|
||||||
|
|
||||||
test_exchangedb_populate_table_postgres_SOURCES = \
|
test_exchangedb_populate_select_refunds_by_coin_postgres_SOURCES = \
|
||||||
test_exchangedb_populate_table.c
|
test_exchangedb_populate_select_refunds_by_coin.c
|
||||||
test_exchangedb_populate_table_postgres_LDADD = \
|
test_exchangedb_populate_select_refunds_by_coin_postgres_LDADD = \
|
||||||
libtalerexchangedb.la \
|
libtalerexchangedb.la \
|
||||||
$(top_builddir)/src/json/libtalerjson.la \
|
$(top_builddir)/src/json/libtalerjson.la \
|
||||||
$(top_builddir)/src/util/libtalerutil.la \
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
|
64
src/exchangedb/exchange_do_get_ready_deposit.sql
Normal file
64
src/exchangedb/exchange_do_get_ready_deposit.sql
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
--
|
||||||
|
-- This file is part of TALER
|
||||||
|
-- Copyright (C) 2014--2022 Taler Systems SA
|
||||||
|
--
|
||||||
|
-- TALER is free software; you can redistribute it and/or modify it under the
|
||||||
|
-- terms of the GNU General Public License as published by the Free Software
|
||||||
|
-- Foundation; either version 3, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU General Public License along with
|
||||||
|
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
--
|
||||||
|
CREATE OR REPLACE FUNCTION exchange_do_get_ready_deposit(
|
||||||
|
IN in_now INT8,
|
||||||
|
IN in_start_shard_now INT8,
|
||||||
|
IN in_end_shard_now INT8,
|
||||||
|
OUT out_payto_uri VARCHAR,
|
||||||
|
OUT out_merchant_pub BYTEA
|
||||||
|
)
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
var_wire_target_h_payto BYTEA;
|
||||||
|
DECLARE
|
||||||
|
var_coin_pub BYTEA;
|
||||||
|
DECLARE
|
||||||
|
var_deposit_serial_id INT8;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
coin_pub
|
||||||
|
,deposit_serial_id
|
||||||
|
INTO
|
||||||
|
var_coin_pub
|
||||||
|
,var_deposit_serial_id
|
||||||
|
FROM deposits_by_ready
|
||||||
|
WHERE wire_deadline <= in_now
|
||||||
|
AND shard >= in_start_shard_now
|
||||||
|
AND shard <=in_end_shard_now
|
||||||
|
ORDER BY
|
||||||
|
wire_deadline ASC
|
||||||
|
,shard ASC;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
merchant_pub
|
||||||
|
,wire_target_h_payto
|
||||||
|
INTO
|
||||||
|
out_merchant_pub
|
||||||
|
,var_wire_target_h_payto
|
||||||
|
FROM deposits
|
||||||
|
WHERE coin_pub=var_coin_pub
|
||||||
|
AND deposit_serial_id=var_deposit_serial_id;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
payto_uri
|
||||||
|
INTO out_payto_uri
|
||||||
|
FROM wire_targets
|
||||||
|
WHERE wire_target_h_payto=var_wire_target_h_payto;
|
||||||
|
|
||||||
|
RETURN;
|
||||||
|
END $$;
|
94
src/exchangedb/exchange_do_refund_by_coin.sql
Normal file
94
src/exchangedb/exchange_do_refund_by_coin.sql
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
--
|
||||||
|
-- This file is part of TALER
|
||||||
|
-- Copyright (C) 2014--2022 Taler Systems SA
|
||||||
|
--
|
||||||
|
-- TALER is free software; you can redistribute it and/or modify it under the
|
||||||
|
-- terms of the GNU General Public License as published by the Free Software
|
||||||
|
-- Foundation; either version 3, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU General Public License along with
|
||||||
|
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
--
|
||||||
|
/*DROP FUNCTION exchange_do_refund_by_coin(
|
||||||
|
IN in_coin_pub BYTEA,
|
||||||
|
IN in_merchant_pub BYTEA,
|
||||||
|
IN in_h_contract BYTEA
|
||||||
|
);*/
|
||||||
|
CREATE OR REPLACE FUNCTION exchange_do_refund_by_coin(
|
||||||
|
IN in_coin_pub BYTEA,
|
||||||
|
IN in_merchant_pub BYTEA,
|
||||||
|
IN in_h_contract BYTEA
|
||||||
|
)
|
||||||
|
RETURNS SETOF record
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
curs CURSOR
|
||||||
|
FOR
|
||||||
|
SELECT
|
||||||
|
amount_with_fee_val
|
||||||
|
,amount_with_fee_frac
|
||||||
|
,deposit_serial_id
|
||||||
|
FROM refunds
|
||||||
|
WHERE coin_pub=in_coin_pub;
|
||||||
|
DECLARE
|
||||||
|
i RECORD;
|
||||||
|
BEGIN
|
||||||
|
OPEN curs;
|
||||||
|
LOOP
|
||||||
|
FETCH NEXT FROM curs INTO i;
|
||||||
|
EXIT WHEN NOT FOUND;
|
||||||
|
RETURN QUERY
|
||||||
|
SELECT
|
||||||
|
i.amount_with_fee_val
|
||||||
|
,i.amount_with_fee_frac
|
||||||
|
FROM deposits
|
||||||
|
WHERE
|
||||||
|
coin_pub=in_coin_pub
|
||||||
|
AND merchant_pub=in_merchant_pub
|
||||||
|
AND h_contract_terms=in_h_contract
|
||||||
|
AND i.deposit_serial_id = deposit_serial_id;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE curs;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
/*RETURNS TABLE(amount_with_fee_val INT8, amount_with_fee_frac INT4)
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
curs CURSOR
|
||||||
|
FOR
|
||||||
|
SELECT
|
||||||
|
r.amount_with_fee_val
|
||||||
|
,r.amount_with_fee_frac
|
||||||
|
,r.deposit_serial_id
|
||||||
|
FROM refunds r
|
||||||
|
WHERE r.coin_pub=in_coin_pub;
|
||||||
|
DECLARE
|
||||||
|
i RECORD;
|
||||||
|
BEGIN
|
||||||
|
OPEN curs;
|
||||||
|
LOOP
|
||||||
|
FETCH NEXT FROM curs INTO i;
|
||||||
|
IF FOUND
|
||||||
|
THEN
|
||||||
|
RETURN QUERY
|
||||||
|
SELECT
|
||||||
|
i.amount_with_fee_val
|
||||||
|
,i.amount_with_fee_frac
|
||||||
|
FROM deposits
|
||||||
|
WHERE
|
||||||
|
merchant_pub=in_merchant_pub
|
||||||
|
AND h_contract_terms=in_h_contract
|
||||||
|
AND i.deposit_serial_id = deposit_serial_id;
|
||||||
|
END IF;
|
||||||
|
EXIT WHEN NOT FOUND;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE curs;
|
||||||
|
|
||||||
|
END $$;
|
||||||
|
*/
|
@ -41,6 +41,7 @@ TEH_PG_get_ready_deposit (void *cls,
|
|||||||
GNUNET_PQ_query_param_uint64 (&end_shard_row),
|
GNUNET_PQ_query_param_uint64 (&end_shard_row),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
GNUNET_PQ_result_spec_auto_from_type ("merchant_pub",
|
GNUNET_PQ_result_spec_auto_from_type ("merchant_pub",
|
||||||
merchant_pub),
|
merchant_pub),
|
||||||
@ -57,26 +58,180 @@ TEH_PG_get_ready_deposit (void *cls,
|
|||||||
"Finding ready deposits by deadline %s (%llu)\n",
|
"Finding ready deposits by deadline %s (%llu)\n",
|
||||||
GNUNET_TIME_absolute2s (now),
|
GNUNET_TIME_absolute2s (now),
|
||||||
(unsigned long long) now.abs_value_us);
|
(unsigned long long) now.abs_value_us);
|
||||||
PREPARE (pg,
|
int choose_mode =-2;
|
||||||
"deposits_get_ready",
|
const char *query;
|
||||||
"SELECT"
|
|
||||||
" payto_uri"
|
if (-2 == choose_mode)
|
||||||
",merchant_pub"
|
{
|
||||||
" FROM deposits_by_ready dbr"
|
const char *mode = getenv ("NEW_LOGIC");
|
||||||
" JOIN deposits dep"
|
char dummy;
|
||||||
" ON (dbr.coin_pub = dep.coin_pub AND"
|
if ( (NULL==mode) ||
|
||||||
" dbr.deposit_serial_id = dep.deposit_serial_id)"
|
(1 != sscanf (mode,
|
||||||
" JOIN wire_targets wt"
|
"%d%c",
|
||||||
" USING (wire_target_h_payto)"
|
&choose_mode,
|
||||||
" WHERE dbr.wire_deadline<=$1"
|
&dummy)) )
|
||||||
" AND dbr.shard >= $2"
|
{
|
||||||
" AND dbr.shard <= $3"
|
if (NULL != mode)
|
||||||
" ORDER BY "
|
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||||
" dbr.wire_deadline ASC"
|
"Bad mode `%s' specified\n",
|
||||||
" ,dbr.shard ASC"
|
mode);
|
||||||
" LIMIT 1;");
|
}
|
||||||
|
if (NULL==mode)
|
||||||
|
choose_mode=0;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
switch (choose_mode)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
query="deposits_get_ready";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"SELECT"
|
||||||
|
" payto_uri"
|
||||||
|
",merchant_pub"
|
||||||
|
" FROM deposits_by_ready dbr"
|
||||||
|
" JOIN deposits dep"
|
||||||
|
" ON (dbr.coin_pub = dep.coin_pub AND"
|
||||||
|
" dbr.deposit_serial_id = dep.deposit_serial_id)"
|
||||||
|
" JOIN wire_targets wt"
|
||||||
|
" USING (wire_target_h_payto)"
|
||||||
|
" WHERE dbr.wire_deadline<=$1"
|
||||||
|
" AND dbr.shard >= $2"
|
||||||
|
" AND dbr.shard <= $3"
|
||||||
|
" ORDER BY "
|
||||||
|
" dbr.wire_deadline ASC"
|
||||||
|
" ,dbr.shard ASC"
|
||||||
|
" LIMIT 1;");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
query="deposits_get_ready_v1";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"WITH rc AS MATERIALIZED ("
|
||||||
|
" SELECT"
|
||||||
|
" coin_pub"
|
||||||
|
",deposit_serial_id"
|
||||||
|
" FROM deposits_by_ready"
|
||||||
|
" WHERE"
|
||||||
|
" wire_deadline<=$1"
|
||||||
|
" AND shard >= $2"
|
||||||
|
" AND shard <= $3"
|
||||||
|
" ORDER BY "
|
||||||
|
" wire_deadline ASC"
|
||||||
|
" ,shard ASC"
|
||||||
|
" LIMIT 1"
|
||||||
|
")"
|
||||||
|
"SELECT"
|
||||||
|
" wt.payto_uri"
|
||||||
|
",dep.merchant_pub"
|
||||||
|
" FROM ("
|
||||||
|
" SELECT"
|
||||||
|
" wire_target_h_payto"
|
||||||
|
",merchant_pub"
|
||||||
|
" FROM deposits"
|
||||||
|
" WHERE coin_pub=(SELECT coin_pub FROM rc)"
|
||||||
|
" AND deposit_serial_id=(SELECT deposit_serial_id FROM rc)"
|
||||||
|
") dep"
|
||||||
|
" JOIN wire_targets wt"
|
||||||
|
" ON (dep.wire_target_h_payto = wt.wire_target_h_payto)"
|
||||||
|
);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
query = "stored_procedure_get_ready_deposit";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"SELECT"
|
||||||
|
" out_payto_uri AS payto_uri"
|
||||||
|
",out_merchant_pub AS merchant_pub"
|
||||||
|
" FROM"
|
||||||
|
" exchange_do_get_ready_deposit"
|
||||||
|
" ($1, $2, $3) ");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
query="deposits_get_ready_v3";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"WITH rc AS MATERIALIZED ("
|
||||||
|
" SELECT"
|
||||||
|
" coin_pub"
|
||||||
|
",deposit_serial_id"
|
||||||
|
" FROM deposits_by_ready"
|
||||||
|
" WHERE"
|
||||||
|
" wire_deadline<=$1"
|
||||||
|
" AND shard >= $2"
|
||||||
|
" AND shard <= $3"
|
||||||
|
" ORDER BY "
|
||||||
|
" wire_deadline ASC"
|
||||||
|
" ,shard ASC"
|
||||||
|
" LIMIT 1"
|
||||||
|
")"
|
||||||
|
"SELECT"
|
||||||
|
" wt.payto_uri"
|
||||||
|
",dep.merchant_pub"
|
||||||
|
" FROM ("
|
||||||
|
" SELECT"
|
||||||
|
" wire_target_h_payto"
|
||||||
|
",merchant_pub"
|
||||||
|
",coin_pub"
|
||||||
|
" FROM deposits"
|
||||||
|
" WHERE coin_pub=(SELECT coin_pub FROM rc)"
|
||||||
|
" AND deposit_serial_id=(SELECT deposit_serial_id FROM rc)"
|
||||||
|
") dep"
|
||||||
|
" JOIN wire_targets wt"
|
||||||
|
" ON (dep.wire_target_h_payto = wt.wire_target_h_payto)"
|
||||||
|
" JOIN rc"
|
||||||
|
" ON (dep.coin_pub=rc.coin_pub)"
|
||||||
|
);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
query="deposits_get_ready_v4";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"WITH rc AS MATERIALIZED ("
|
||||||
|
" SELECT"
|
||||||
|
" coin_pub"
|
||||||
|
",deposit_serial_id"
|
||||||
|
" FROM deposits_by_ready"
|
||||||
|
" WHERE"
|
||||||
|
" wire_deadline<=$1"
|
||||||
|
" AND shard >= $2"
|
||||||
|
" AND shard <= $3"
|
||||||
|
" ORDER BY "
|
||||||
|
" wire_deadline ASC"
|
||||||
|
" ,shard ASC"
|
||||||
|
" LIMIT 1"
|
||||||
|
"),"
|
||||||
|
"WITH rv AS MATERIALIZED ("
|
||||||
|
" SELECT"
|
||||||
|
" payto_uri"
|
||||||
|
",wire_target_h_payto"
|
||||||
|
" FROM wire_targets"
|
||||||
|
")"
|
||||||
|
"SELECT"
|
||||||
|
" rv.payto_uri"
|
||||||
|
",dep.merchant_pub"
|
||||||
|
" FROM ("
|
||||||
|
" SELECT"
|
||||||
|
" wire_target_h_payto"
|
||||||
|
",merchant_pub"
|
||||||
|
" FROM deposits"
|
||||||
|
" WHERE coin_pub=(SELECT coin_pub FROM rc)"
|
||||||
|
" AND deposit_serial_id=(SELECT deposit_serial_id FROM rc)"
|
||||||
|
") dep"
|
||||||
|
" JOIN rv"
|
||||||
|
" ON (rv.wire_target_h_payto=dep.wire_target_h_payto)"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
||||||
"deposits_get_ready",
|
query,
|
||||||
params,
|
params,
|
||||||
rs);
|
rs);
|
||||||
}
|
}
|
||||||
|
@ -112,17 +112,47 @@ TEH_PG_select_refunds_by_coin (
|
|||||||
GNUNET_PQ_query_param_auto_from_type (h_contract),
|
GNUNET_PQ_query_param_auto_from_type (h_contract),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
|
struct GNUNET_PQ_QueryParam params5[] = {
|
||||||
|
GNUNET_PQ_query_param_auto_from_type (coin_pub),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
|
||||||
struct SelectRefundContext srctx = {
|
struct SelectRefundContext srctx = {
|
||||||
.cb = cb,
|
.cb = cb,
|
||||||
.cb_cls = cb_cls,
|
.cb_cls = cb_cls,
|
||||||
.pg = pg,
|
.pg = pg,
|
||||||
.status = GNUNET_OK
|
.status = GNUNET_OK
|
||||||
};
|
};
|
||||||
|
static int percent_refund = -2;
|
||||||
|
const char *query;
|
||||||
|
struct GNUNET_PQ_QueryParam *xparams = params;
|
||||||
|
|
||||||
if (NULL == getenv ("NEW_LOGIC"))
|
if (-2 == percent_refund)
|
||||||
{
|
{
|
||||||
|
const char *mode = getenv ("NEW_LOGIC");
|
||||||
|
char dummy;
|
||||||
|
|
||||||
|
if ( (NULL==mode) ||
|
||||||
|
(1 != sscanf (mode,
|
||||||
|
"%d%c",
|
||||||
|
&percent_refund,
|
||||||
|
&dummy)) )
|
||||||
|
{
|
||||||
|
if (NULL != mode)
|
||||||
|
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||||
|
"Bad mode `%s' specified\n",
|
||||||
|
mode);
|
||||||
|
}
|
||||||
|
if (NULL==mode)
|
||||||
|
percent_refund=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (percent_refund)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v0";
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"get_refunds_by_coin_and_contract",
|
query,
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" ref.amount_with_fee_val"
|
" ref.amount_with_fee_val"
|
||||||
",ref.amount_with_fee_frac"
|
",ref.amount_with_fee_frac"
|
||||||
@ -132,12 +162,26 @@ TEH_PG_select_refunds_by_coin (
|
|||||||
" WHERE ref.coin_pub=$1"
|
" WHERE ref.coin_pub=$1"
|
||||||
" AND dep.merchant_pub=$2"
|
" AND dep.merchant_pub=$2"
|
||||||
" AND dep.h_contract_terms=$3;");
|
" AND dep.h_contract_terms=$3;");
|
||||||
}
|
break;
|
||||||
else
|
case 1:
|
||||||
{
|
query = "get_refunds_by_coin_and_contract-v1";
|
||||||
// FIXME-Joseph
|
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"get_refunds_by_coin_and_contract",
|
query,
|
||||||
|
"SELECT"
|
||||||
|
" ref.amount_with_fee_val"
|
||||||
|
",ref.amount_with_fee_frac"
|
||||||
|
" FROM refunds ref"
|
||||||
|
" LEFT JOIN deposits dep"
|
||||||
|
" ON dep.coin_pub = ref.coin_pub"
|
||||||
|
" AND ref.deposit_serial_id = dep.deposit_serial_id"
|
||||||
|
" WHERE ref.coin_pub=$1"
|
||||||
|
" AND dep.merchant_pub=$2"
|
||||||
|
" AND dep.h_contract_terms=$3;");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v2";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
"WITH rc AS MATERIALIZED("
|
"WITH rc AS MATERIALIZED("
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" amount_with_fee_val"
|
" amount_with_fee_val"
|
||||||
@ -149,21 +193,139 @@ TEH_PG_select_refunds_by_coin (
|
|||||||
"SELECT"
|
"SELECT"
|
||||||
" rc.amount_with_fee_val"
|
" rc.amount_with_fee_val"
|
||||||
" ,rc.amount_with_fee_frac"
|
" ,rc.amount_with_fee_frac"
|
||||||
" FROM "
|
" FROM deposits dep"
|
||||||
"(SELECT"
|
" JOIN rc"
|
||||||
|
" ON rc.deposit_serial_id = dep.deposit_serial_id"
|
||||||
|
" WHERE"
|
||||||
|
" dep.coin_pub = $1"
|
||||||
|
" AND dep.merchant_pub = $2"
|
||||||
|
" AND dep.h_contract_terms = $3");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v3";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"WITH rc AS MATERIALIZED("
|
||||||
|
"SELECT"
|
||||||
|
" amount_with_fee_val"
|
||||||
|
",amount_with_fee_frac"
|
||||||
|
",deposit_serial_id"
|
||||||
|
" FROM refunds"
|
||||||
|
" WHERE coin_pub=$1)"
|
||||||
|
"SELECT"
|
||||||
" rc.amount_with_fee_val"
|
" rc.amount_with_fee_val"
|
||||||
" ,rc.amount_with_fee_frac"
|
" ,rc.amount_with_fee_frac"
|
||||||
" FROM deposits dep"
|
" FROM ("
|
||||||
|
"SELECT"
|
||||||
|
" amount_with_fee_val"
|
||||||
|
",amount_with_fee_frac"
|
||||||
|
" FROM deposits depos"
|
||||||
" WHERE"
|
" WHERE"
|
||||||
" dep.coin_pub = $1" // optional...
|
" depos.coin_pub = $1"
|
||||||
" AND dep.merchant_pub = $2"
|
" AND depos.merchant_pub = $2"
|
||||||
" AND dep.h_contract_terms = $3) dep"
|
" AND depos.h_contract_terms = $3) dep, rc;");
|
||||||
" JOIN rc"
|
break;
|
||||||
" USING (coin_pub,deposit_serial_id)");
|
case 4:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v4";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"WITH rc AS MATERIALIZED("
|
||||||
|
"SELECT"
|
||||||
|
" amount_with_fee_val"
|
||||||
|
",amount_with_fee_frac"
|
||||||
|
",coin_pub"
|
||||||
|
",deposit_serial_id"
|
||||||
|
" FROM refunds ref"
|
||||||
|
" WHERE ref.coin_pub=$1)"
|
||||||
|
"SELECT"
|
||||||
|
" rc.amount_with_fee_val"
|
||||||
|
" ,rc.amount_with_fee_frac"
|
||||||
|
" ,deposit_serial_id"
|
||||||
|
" FROM ("
|
||||||
|
"SELECT"
|
||||||
|
" amount_with_fee_val"
|
||||||
|
",amount_with_fee_frac"
|
||||||
|
" FROM deposits depos"
|
||||||
|
" WHERE"
|
||||||
|
" depos.merchant_pub = $2"
|
||||||
|
" AND depos.h_contract_terms = $3) dep JOIN rc "
|
||||||
|
"USING(deposit_serial_id, coin_pub);");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v-broken";
|
||||||
|
xparams = params5;
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"SELECT"
|
||||||
|
" amount_with_fee_val"
|
||||||
|
",amount_with_fee_frac"
|
||||||
|
",coin_pub"
|
||||||
|
",deposit_serial_id"
|
||||||
|
" FROM refunds"
|
||||||
|
" WHERE coin_pub=$1;");
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v8";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"WITH"
|
||||||
|
" rc AS MATERIALIZED("
|
||||||
|
" SELECT"
|
||||||
|
" amount_with_fee_val"
|
||||||
|
" ,amount_with_fee_frac"
|
||||||
|
" ,coin_pub"
|
||||||
|
" ,deposit_serial_id"
|
||||||
|
" FROM refunds"
|
||||||
|
" WHERE coin_pub=$1),"
|
||||||
|
" dep AS MATERIALIZED("
|
||||||
|
" SELECT"
|
||||||
|
" deposit_serial_id"
|
||||||
|
" FROM deposits"
|
||||||
|
" WHERE coin_pub = $1"
|
||||||
|
" AND merchant_pub = $2"
|
||||||
|
" AND h_contract_terms = $3"
|
||||||
|
")"
|
||||||
|
"SELECT"
|
||||||
|
" rc.amount_with_fee_val"
|
||||||
|
" ,rc.amount_with_fee_frac"
|
||||||
|
" FROM "
|
||||||
|
" rc JOIN dep USING (deposit_serial_id);");
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v9-broken";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"SELECT"
|
||||||
|
" ref.amount_with_fee_val"
|
||||||
|
" ,ref.amount_with_fee_frac"
|
||||||
|
" FROM deposits dep"
|
||||||
|
" JOIN refunds ref USING(deposit_serial_id)"
|
||||||
|
" WHERE dep.coin_pub IN ("
|
||||||
|
" SELECT coin_pub"
|
||||||
|
" FROM refunds"
|
||||||
|
" WHERE coin_pub=$1)"
|
||||||
|
" AND merchant_pub = $2"
|
||||||
|
" AND h_contract_terms = $3;");
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
query = "get_refunds_by_coin_and_contract-v10-broken";
|
||||||
|
PREPARE (pg,
|
||||||
|
query,
|
||||||
|
"SELECT"
|
||||||
|
" *"
|
||||||
|
" FROM"
|
||||||
|
" exchange_do_refund_by_coin"
|
||||||
|
" ($1, $2, $3) "
|
||||||
|
" AS (amount_with_fee_val INT8, amount_with_fee_frac INT4);");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
GNUNET_break (0);
|
||||||
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
|
qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
|
||||||
"get_refunds_by_coin_and_contract",
|
query,
|
||||||
params,
|
xparams,
|
||||||
&get_refunds_cb,
|
&get_refunds_cb,
|
||||||
&srctx);
|
&srctx);
|
||||||
if (GNUNET_SYSERR == srctx.status)
|
if (GNUNET_SYSERR == srctx.status)
|
||||||
|
@ -44,5 +44,7 @@ SET search_path TO exchange;
|
|||||||
#include "exchange_do_batch2_reserves_in_insert.sql"
|
#include "exchange_do_batch2_reserves_in_insert.sql"
|
||||||
#include "exchange_do_batch4_reserves_in_insert.sql"
|
#include "exchange_do_batch4_reserves_in_insert.sql"
|
||||||
#include "exchange_do_batch8_reserves_in_insert.sql"
|
#include "exchange_do_batch8_reserves_in_insert.sql"
|
||||||
|
#include "exchange_do_refund_by_coin.sql"
|
||||||
|
#include "exchange_do_get_ready_deposit.sql"
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
@ -24,14 +24,6 @@
|
|||||||
#include "taler_exchangedb_plugin.h"
|
#include "taler_exchangedb_plugin.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
|
||||||
|
|
||||||
#define NUM_ROWS 1000
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Global result from the testcase.
|
|
||||||
*/
|
|
||||||
static int result;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Report line of error if @a cond is true, and jump to label "drop".
|
* Report line of error if @a cond is true, and jump to label "drop".
|
||||||
*/
|
*/
|
||||||
@ -55,22 +47,10 @@ static int result;
|
|||||||
#define ZR_BLK(ptr) \
|
#define ZR_BLK(ptr) \
|
||||||
memset (ptr, 0, sizeof (*ptr))
|
memset (ptr, 0, sizeof (*ptr))
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Currency we use. Must match test-exchange-db-*.conf.
|
|
||||||
*/
|
|
||||||
#define CURRENCY "EUR"
|
#define CURRENCY "EUR"
|
||||||
|
|
||||||
/**
|
|
||||||
* How big do we make the RSA keys?
|
|
||||||
*/
|
|
||||||
#define RSA_KEY_SIZE 1024
|
#define RSA_KEY_SIZE 1024
|
||||||
static struct TALER_EXCHANGEDB_RefreshRevealedCoin *revealed_coins;
|
|
||||||
|
|
||||||
static struct TALER_TransferPrivateKeyP tprivs[TALER_CNC_KAPPA];
|
|
||||||
|
|
||||||
static struct TALER_TransferPublicKeyP tpub;
|
|
||||||
#define ROUNDS 10
|
#define ROUNDS 10
|
||||||
|
#define NUM_ROWS 1000
|
||||||
#define MELT_NEW_COINS 5
|
#define MELT_NEW_COINS 5
|
||||||
#define MELT_NOREVEAL_INDEX 1
|
#define MELT_NOREVEAL_INDEX 1
|
||||||
/**
|
/**
|
||||||
@ -82,7 +62,10 @@ static struct TALER_DenomFeeSet fees;
|
|||||||
* Denomination keys used for fresh coins in melt test.
|
* Denomination keys used for fresh coins in melt test.
|
||||||
*/
|
*/
|
||||||
static struct DenomKeyPair **new_dkp;
|
static struct DenomKeyPair **new_dkp;
|
||||||
|
static int result;
|
||||||
|
static struct TALER_EXCHANGEDB_RefreshRevealedCoin *revealed_coins;
|
||||||
|
static struct TALER_TransferPrivateKeyP tprivs[TALER_CNC_KAPPA];
|
||||||
|
static struct TALER_TransferPublicKeyP tpub;
|
||||||
struct DenomKeyPair
|
struct DenomKeyPair
|
||||||
{
|
{
|
||||||
struct TALER_DenominationPrivateKey priv;
|
struct TALER_DenominationPrivateKey priv;
|
||||||
@ -222,8 +205,6 @@ handle_link_data_cb (void *cls,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main function that will be run by the scheduler.
|
* Main function that will be run by the scheduler.
|
||||||
*
|
*
|
||||||
|
@ -24,9 +24,6 @@
|
|||||||
#include "taler_exchangedb_plugin.h"
|
#include "taler_exchangedb_plugin.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
|
||||||
|
|
||||||
#define NUM_ROWS 1000
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global result from the testcase.
|
* Global result from the testcase.
|
||||||
*/
|
*/
|
||||||
@ -55,20 +52,13 @@ static int result;
|
|||||||
#define ZR_BLK(ptr) \
|
#define ZR_BLK(ptr) \
|
||||||
memset (ptr, 0, sizeof (*ptr))
|
memset (ptr, 0, sizeof (*ptr))
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currency we use. Must match test-exchange-db-*.conf.
|
* Currency we use. Must match test-exchange-db-*.conf.
|
||||||
*/
|
*/
|
||||||
#define CURRENCY "EUR"
|
#define CURRENCY "EUR"
|
||||||
|
|
||||||
/**
|
|
||||||
* How big do we make the RSA keys?
|
|
||||||
*/
|
|
||||||
#define RSA_KEY_SIZE 1024
|
#define RSA_KEY_SIZE 1024
|
||||||
static struct TALER_EXCHANGEDB_RefreshRevealedCoin *revealed_coins;
|
#define NUM_ROWS 1000000
|
||||||
|
#define ROUNDS 10000
|
||||||
|
|
||||||
#define ROUNDS 100
|
|
||||||
#define MELT_NEW_COINS 5
|
#define MELT_NEW_COINS 5
|
||||||
#define MELT_NOREVEAL_INDEX 1
|
#define MELT_NOREVEAL_INDEX 1
|
||||||
/**
|
/**
|
||||||
@ -81,7 +71,7 @@ static struct TALER_MerchantWireHashP h_wire_wt;
|
|||||||
* Denomination keys used for fresh coins in melt test.
|
* Denomination keys used for fresh coins in melt test.
|
||||||
*/
|
*/
|
||||||
static struct DenomKeyPair **new_dkp;
|
static struct DenomKeyPair **new_dkp;
|
||||||
|
static struct TALER_EXCHANGEDB_RefreshRevealedCoin *revealed_coins;
|
||||||
struct DenomKeyPair
|
struct DenomKeyPair
|
||||||
{
|
{
|
||||||
struct TALER_DenominationPrivateKey priv;
|
struct TALER_DenominationPrivateKey priv;
|
||||||
@ -389,7 +379,6 @@ run (void *cls)
|
|||||||
&nonce_ok,
|
&nonce_ok,
|
||||||
&ruuid));
|
&ruuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
/* ENSURE_COIN_KNOWN */
|
/* ENSURE_COIN_KNOWN */
|
||||||
uint64_t known_coin_id;
|
uint64_t known_coin_id;
|
||||||
@ -408,23 +397,23 @@ run (void *cls)
|
|||||||
refresh.noreveal_index = MELT_NOREVEAL_INDEX;
|
refresh.noreveal_index = MELT_NOREVEAL_INDEX;
|
||||||
}
|
}
|
||||||
/*STORE INTO DEPOSIT*/
|
/*STORE INTO DEPOSIT*/
|
||||||
{
|
{
|
||||||
struct GNUNET_TIME_Timestamp now;
|
struct GNUNET_TIME_Timestamp now;
|
||||||
now = GNUNET_TIME_timestamp_get ();
|
now = GNUNET_TIME_timestamp_get ();
|
||||||
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
|
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
|
||||||
plugin->insert_deposit (plugin->cls,
|
plugin->insert_deposit (plugin->cls,
|
||||||
now,
|
now,
|
||||||
&depos[i]));
|
&depos[i]));
|
||||||
}
|
}
|
||||||
if (ROUNDS == i)
|
if (ROUNDS == i)
|
||||||
TALER_denom_sig_free (&depos[i].coin.denom_sig);
|
TALER_denom_sig_free (&depos[i].coin.denom_sig);
|
||||||
}
|
}
|
||||||
/* End of benchmark setup */
|
/* End of benchmark setup */
|
||||||
GNUNET_free(perm);
|
GNUNET_free(perm);
|
||||||
// commit
|
// commit
|
||||||
FAILIF (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
|
FAILIF (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
|
||||||
plugin->commit (plugin->cls));
|
plugin->commit (plugin->cls));
|
||||||
/**** CALL GET LINK DATA ****/
|
/**** CALL GET READY DEPOSIT ****/
|
||||||
for (unsigned int r=0; r< ROUNDS; r++)
|
for (unsigned int r=0; r< ROUNDS; r++)
|
||||||
{
|
{
|
||||||
struct GNUNET_TIME_Absolute time;
|
struct GNUNET_TIME_Absolute time;
|
||||||
|
@ -24,8 +24,6 @@
|
|||||||
#include "taler_exchangedb_plugin.h"
|
#include "taler_exchangedb_plugin.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
|
||||||
#define NUM_ROWS 10000
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global result from the testcase.
|
* Global result from the testcase.
|
||||||
*/
|
*/
|
||||||
@ -41,7 +39,6 @@ static int result;
|
|||||||
goto drop; \
|
goto drop; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes @a ptr with random data.
|
* Initializes @a ptr with random data.
|
||||||
*/
|
*/
|
||||||
@ -54,16 +51,13 @@ static int result;
|
|||||||
#define ZR_BLK(ptr) \
|
#define ZR_BLK(ptr) \
|
||||||
memset (ptr, 0, sizeof (*ptr))
|
memset (ptr, 0, sizeof (*ptr))
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currency we use. Must match test-exchange-db-*.conf.
|
* Currency we use. Must match test-exchange-db-*.conf.
|
||||||
*/
|
*/
|
||||||
#define CURRENCY "EUR"
|
#define CURRENCY "EUR"
|
||||||
/**
|
|
||||||
* How big do we make the RSA keys?
|
|
||||||
*/
|
|
||||||
#define RSA_KEY_SIZE 1024
|
#define RSA_KEY_SIZE 1024
|
||||||
#define ROUNDS 1000
|
#define ROUNDS 10000
|
||||||
|
#define NUM_ROWS 1000000
|
||||||
#define MELT_NEW_COINS 5
|
#define MELT_NEW_COINS 5
|
||||||
#define MELT_NOREVEAL_INDEX 1
|
#define MELT_NOREVEAL_INDEX 1
|
||||||
/**
|
/**
|
||||||
@ -72,14 +66,14 @@ static int result;
|
|||||||
static struct TALER_EXCHANGEDB_Plugin *plugin;
|
static struct TALER_EXCHANGEDB_Plugin *plugin;
|
||||||
static struct TALER_DenomFeeSet fees;
|
static struct TALER_DenomFeeSet fees;
|
||||||
static struct TALER_MerchantWireHashP h_wire_wt;
|
static struct TALER_MerchantWireHashP h_wire_wt;
|
||||||
|
static struct DenomKeyPair **new_dkp;
|
||||||
|
static struct TALER_EXCHANGEDB_RefreshRevealedCoin *revealed_coins;
|
||||||
struct DenomKeyPair
|
struct DenomKeyPair
|
||||||
{
|
{
|
||||||
struct TALER_DenominationPrivateKey priv;
|
struct TALER_DenominationPrivateKey priv;
|
||||||
struct TALER_DenominationPublicKey pub;
|
struct TALER_DenominationPublicKey pub;
|
||||||
};
|
};
|
||||||
static struct DenomKeyPair **new_dkp;
|
|
||||||
static struct TALER_EXCHANGEDB_RefreshRevealedCoin *revealed_coins;
|
|
||||||
/**
|
/**
|
||||||
* Destroy a denomination key pair. The key is not necessarily removed from the DB.
|
* Destroy a denomination key pair. The key is not necessarily removed from the DB.
|
||||||
*
|
*
|
||||||
@ -185,7 +179,6 @@ check_refund_cb (void *cls,
|
|||||||
const struct TALER_Amount *amount_with_fee)
|
const struct TALER_Amount *amount_with_fee)
|
||||||
{
|
{
|
||||||
const struct TALER_EXCHANGEDB_Refund *refund = cls;
|
const struct TALER_EXCHANGEDB_Refund *refund = cls;
|
||||||
|
|
||||||
if (0 != TALER_amount_cmp (amount_with_fee,
|
if (0 != TALER_amount_cmp (amount_with_fee,
|
||||||
&refund->details.refund_amount))
|
&refund->details.refund_amount))
|
||||||
{
|
{
|
||||||
@ -207,7 +200,6 @@ run (void *cls)
|
|||||||
{
|
{
|
||||||
struct GNUNET_CONFIGURATION_Handle *cfg = cls;
|
struct GNUNET_CONFIGURATION_Handle *cfg = cls;
|
||||||
const uint32_t num_partitions = 10;
|
const uint32_t num_partitions = 10;
|
||||||
struct DenomKeyPair *dkp = NULL;
|
|
||||||
struct GNUNET_TIME_Timestamp ts;
|
struct GNUNET_TIME_Timestamp ts;
|
||||||
struct TALER_EXCHANGEDB_Deposit *depos=NULL;
|
struct TALER_EXCHANGEDB_Deposit *depos=NULL;
|
||||||
struct GNUNET_TIME_Timestamp deadline;
|
struct GNUNET_TIME_Timestamp deadline;
|
||||||
@ -226,6 +218,8 @@ run (void *cls)
|
|||||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||||
struct TALER_EXCHANGEDB_RefreshRevealedCoin *ccoin;
|
struct TALER_EXCHANGEDB_RefreshRevealedCoin *ccoin;
|
||||||
struct TALER_DenominationPublicKey *new_denom_pubs = NULL;
|
struct TALER_DenominationPublicKey *new_denom_pubs = NULL;
|
||||||
|
unsigned int count=0;
|
||||||
|
|
||||||
ref = GNUNET_new_array (ROUNDS +1,
|
ref = GNUNET_new_array (ROUNDS +1,
|
||||||
struct TALER_EXCHANGEDB_Refund);
|
struct TALER_EXCHANGEDB_Refund);
|
||||||
depos = GNUNET_new_array (ROUNDS +1,
|
depos = GNUNET_new_array (ROUNDS +1,
|
||||||
@ -400,18 +394,72 @@ run (void *cls)
|
|||||||
now,
|
now,
|
||||||
&depos[i]));
|
&depos[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 100% Refund */
|
|
||||||
{
|
{
|
||||||
bool not_found;
|
bool not_found;
|
||||||
bool refund_ok;
|
bool refund_ok;
|
||||||
bool gone;
|
bool gone;
|
||||||
bool conflict;
|
bool conflict;
|
||||||
ref[i].coin = depos[i].coin;
|
unsigned int refund_percent=0;
|
||||||
ref[i].details.merchant_pub = depos[i].merchant_pub;
|
switch (refund_percent){
|
||||||
|
case 2 ://100% refund
|
||||||
|
ref[i].coin = depos[i].coin;
|
||||||
|
ref[i].details.merchant_pub = depos[i].merchant_pub;
|
||||||
|
RND_BLK(&ref[i].details.merchant_sig);
|
||||||
|
ref[i].details.h_contract_terms = depos[i].h_contract_terms;
|
||||||
|
ref[i].coin.coin_pub = depos[i].coin.coin_pub;
|
||||||
|
ref[i].details.rtransaction_id = i;
|
||||||
|
ref[i].details.refund_amount = value;
|
||||||
|
ref[i].details.refund_fee = fees.refund;
|
||||||
|
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
|
||||||
|
plugin->do_refund (plugin->cls,
|
||||||
|
&ref[i],
|
||||||
|
&fees.deposit,
|
||||||
|
known_coin_id,
|
||||||
|
¬_found,
|
||||||
|
&refund_ok,
|
||||||
|
&gone,
|
||||||
|
&conflict));
|
||||||
|
break;
|
||||||
|
case 1 ://10% refund
|
||||||
|
if (count < (NUM_ROWS/10))
|
||||||
|
{
|
||||||
|
ref[i].coin = depos[i].coin;
|
||||||
|
ref[i].details.merchant_pub = depos[i].merchant_pub;
|
||||||
|
RND_BLK(&ref[i].details.merchant_sig);
|
||||||
|
ref[i].details.h_contract_terms = depos[i].h_contract_terms;
|
||||||
|
ref[i].coin.coin_pub = depos[i].coin.coin_pub;
|
||||||
|
ref[i].details.rtransaction_id = i;
|
||||||
|
ref[i].details.refund_amount = value;
|
||||||
|
ref[i].details.refund_fee = fees.refund;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ref[i].coin = depos[i].coin;
|
||||||
|
RND_BLK(&ref[i].details.merchant_pub);
|
||||||
|
RND_BLK(&ref[i].details.merchant_sig);
|
||||||
|
RND_BLK(&ref[i].details.h_contract_terms);
|
||||||
|
RND_BLK(&ref[i].coin.coin_pub);
|
||||||
|
ref[i].details.rtransaction_id = i;
|
||||||
|
ref[i].details.refund_amount = value;
|
||||||
|
ref[i].details.refund_fee = fees.refund;
|
||||||
|
}
|
||||||
|
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
|
||||||
|
plugin->do_refund (plugin->cls,
|
||||||
|
&ref[i],
|
||||||
|
&fees.deposit,
|
||||||
|
known_coin_id,
|
||||||
|
¬_found,
|
||||||
|
&refund_ok,
|
||||||
|
&gone,
|
||||||
|
&conflict));
|
||||||
|
count++;
|
||||||
|
break;
|
||||||
|
case 0://no refund
|
||||||
|
ref[i].coin=depos[i].coin;
|
||||||
|
RND_BLK(&ref[i].details.merchant_pub);
|
||||||
RND_BLK(&ref[i].details.merchant_sig);
|
RND_BLK(&ref[i].details.merchant_sig);
|
||||||
ref[i].details.h_contract_terms = depos[i].h_contract_terms;
|
RND_BLK(&ref[i].details.h_contract_terms);
|
||||||
ref[i].coin.coin_pub = depos[i].coin.coin_pub;
|
RND_BLK(&ref[i].coin.coin_pub);
|
||||||
ref[i].details.rtransaction_id = i;
|
ref[i].details.rtransaction_id = i;
|
||||||
ref[i].details.refund_amount = value;
|
ref[i].details.refund_amount = value;
|
||||||
ref[i].details.refund_fee = fees.refund;
|
ref[i].details.refund_fee = fees.refund;
|
||||||
@ -424,10 +472,8 @@ run (void *cls)
|
|||||||
&refund_ok,
|
&refund_ok,
|
||||||
&gone,
|
&gone,
|
||||||
&conflict));
|
&conflict));
|
||||||
|
break;
|
||||||
/* FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
|
}/* END OF SWITCH CASE */
|
||||||
plugin->insert_refund (plugin->cls,
|
|
||||||
&ref[i]));*/
|
|
||||||
}
|
}
|
||||||
if (ROUNDS == i)
|
if (ROUNDS == i)
|
||||||
TALER_denom_sig_free (&depos[i].coin.denom_sig);
|
TALER_denom_sig_free (&depos[i].coin.denom_sig);
|
||||||
@ -443,7 +489,7 @@ run (void *cls)
|
|||||||
struct GNUNET_TIME_Relative duration;
|
struct GNUNET_TIME_Relative duration;
|
||||||
|
|
||||||
time = GNUNET_TIME_absolute_get ();
|
time = GNUNET_TIME_absolute_get ();
|
||||||
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
|
FAILIF (0 >
|
||||||
plugin->select_refunds_by_coin (plugin->cls,
|
plugin->select_refunds_by_coin (plugin->cls,
|
||||||
&ref[r].coin.coin_pub,
|
&ref[r].coin.coin_pub,
|
||||||
&ref[r].details.merchant_pub,
|
&ref[r].details.merchant_pub,
|
||||||
@ -476,10 +522,8 @@ run (void *cls)
|
|||||||
result = 0;
|
result = 0;
|
||||||
drop:
|
drop:
|
||||||
GNUNET_break (GNUNET_OK ==
|
GNUNET_break (GNUNET_OK ==
|
||||||
plugin->drop_tables (plugin->cls));
|
plugin->drop_tables (plugin->cls));
|
||||||
cleanup:
|
cleanup:
|
||||||
if (NULL != dkp)
|
|
||||||
destroy_denom_key_pair (dkp);
|
|
||||||
if (NULL != revealed_coins)
|
if (NULL != revealed_coins)
|
||||||
{
|
{
|
||||||
for (unsigned int cnt = 0; cnt < MELT_NEW_COINS; cnt++)
|
for (unsigned int cnt = 0; cnt < MELT_NEW_COINS; cnt++)
|
||||||
@ -502,7 +546,6 @@ cleanup:
|
|||||||
}
|
}
|
||||||
GNUNET_free(depos);
|
GNUNET_free(depos);
|
||||||
GNUNET_free(ref);
|
GNUNET_free(ref);
|
||||||
dkp = NULL;
|
|
||||||
TALER_EXCHANGEDB_plugin_unload (plugin);
|
TALER_EXCHANGEDB_plugin_unload (plugin);
|
||||||
plugin = NULL;
|
plugin = NULL;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user