WiP: age-withdraw, adjust schema and DB-handlers, cleanup FIXME's, 8/n
This commit is contained in:
parent
37dd5bed20
commit
12681dfa1a
@ -222,7 +222,6 @@ age_withdraw_transaction (void *cls,
|
|||||||
awc->kyc.ok = true;
|
awc->kyc.ok = true;
|
||||||
qs = TEH_plugin->do_age_withdraw (TEH_plugin->cls,
|
qs = TEH_plugin->do_age_withdraw (TEH_plugin->cls,
|
||||||
&awc->commitment,
|
&awc->commitment,
|
||||||
awc->now,
|
|
||||||
&found,
|
&found,
|
||||||
&balance_ok,
|
&balance_ok,
|
||||||
&ruuid);
|
&ruuid);
|
||||||
@ -312,7 +311,7 @@ TEH_handler_age_withdraw (struct TEH_RequestContext *rc,
|
|||||||
const json_t *root)
|
const json_t *root)
|
||||||
{
|
{
|
||||||
MHD_RESULT mhd_ret;
|
MHD_RESULT mhd_ret;
|
||||||
struct AgeWithdrawContext awc;
|
struct AgeWithdrawContext awc = {0};
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
struct GNUNET_JSON_Specification spec[] = {
|
||||||
GNUNET_JSON_spec_fixed_auto ("reserve_sig",
|
GNUNET_JSON_spec_fixed_auto ("reserve_sig",
|
||||||
&awc.commitment.reserve_sig),
|
&awc.commitment.reserve_sig),
|
||||||
@ -321,12 +320,11 @@ TEH_handler_age_withdraw (struct TEH_RequestContext *rc,
|
|||||||
TALER_JSON_spec_amount ("amount",
|
TALER_JSON_spec_amount ("amount",
|
||||||
TEH_currency,
|
TEH_currency,
|
||||||
&awc.commitment.amount_with_fee),
|
&awc.commitment.amount_with_fee),
|
||||||
GNUNET_JSON_spec_uint32 ("max_age",
|
GNUNET_JSON_spec_uint16 ("max_age",
|
||||||
&awc.commitment.max_age),
|
&awc.commitment.max_age),
|
||||||
GNUNET_JSON_spec_end ()
|
GNUNET_JSON_spec_end ()
|
||||||
};
|
};
|
||||||
|
|
||||||
memset (&awc, 0, sizeof (awc));
|
|
||||||
awc.commitment.reserve_pub = *reserve_pub;
|
awc.commitment.reserve_pub = *reserve_pub;
|
||||||
|
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ find_original_commitment (
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GNUNET_DB_STATUS_SOFT_ERROR:
|
case GNUNET_DB_STATUS_SOFT_ERROR:
|
||||||
/* FIXME:oec: Do we queue a result in this case or retry? */
|
/* FIXME oec: Do we queue a result in this case or retry? */
|
||||||
default:
|
default:
|
||||||
GNUNET_break (0); /* should be impossible */
|
GNUNET_break (0); /* should be impossible */
|
||||||
*result = TALER_MHD_reply_with_error (connection,
|
*result = TALER_MHD_reply_with_error (connection,
|
||||||
@ -564,7 +564,7 @@ verify_commitment_and_max_age (
|
|||||||
{
|
{
|
||||||
size_t k = 0; /* either 0 or 1, to index into coin_evs */
|
size_t k = 0; /* either 0 or 1, to index into coin_evs */
|
||||||
|
|
||||||
for (size_t idx = 0; idx<3; idx++)
|
for (size_t idx = 0; idx<TALER_CNC_KAPPA; idx++)
|
||||||
{
|
{
|
||||||
if (idx == (size_t) noreveal_idx)
|
if (idx == (size_t) noreveal_idx)
|
||||||
{
|
{
|
||||||
@ -576,12 +576,13 @@ verify_commitment_and_max_age (
|
|||||||
{
|
{
|
||||||
/* FIXME:oec: Refactor this block out into its own function */
|
/* FIXME:oec: Refactor this block out into its own function */
|
||||||
|
|
||||||
size_t j = 2 * c + k; /* Index into disclosed_coin_secrets[] */
|
size_t j = (TALER_CNC_KAPPA - 1) * c + k; /* Index into disclosed_coin_secrets[] */
|
||||||
const struct TALER_PlanchetMasterSecretP *secret;
|
const struct TALER_PlanchetMasterSecretP *secret;
|
||||||
struct TALER_AgeCommitmentHash ach;
|
struct TALER_AgeCommitmentHash ach;
|
||||||
|
struct TALER_BlindedCoinHashP bch;
|
||||||
|
|
||||||
GNUNET_assert (k<2);
|
GNUNET_assert (k<2);
|
||||||
GNUNET_assert (num_coins * (TALER_CNC_KAPPA - 1) > j);
|
GNUNET_assert ((TALER_CNC_KAPPA - 1) * num_coins > j);
|
||||||
|
|
||||||
secret = &disclosed_coin_secrets[j];
|
secret = &disclosed_coin_secrets[j];
|
||||||
k++;
|
k++;
|
||||||
@ -614,7 +615,6 @@ verify_commitment_and_max_age (
|
|||||||
{
|
{
|
||||||
struct TALER_CoinPubHashP c_hash;
|
struct TALER_CoinPubHashP c_hash;
|
||||||
struct TALER_PlanchetDetail detail;
|
struct TALER_PlanchetDetail detail;
|
||||||
struct TALER_BlindedCoinHashP bch;
|
|
||||||
struct TALER_CoinSpendPrivateKeyP coin_priv;
|
struct TALER_CoinSpendPrivateKeyP coin_priv;
|
||||||
union TALER_DenominationBlindingKeyP bks;
|
union TALER_DenominationBlindingKeyP bks;
|
||||||
struct TALER_ExchangeWithdrawValues alg_values = {
|
struct TALER_ExchangeWithdrawValues alg_values = {
|
||||||
@ -640,9 +640,7 @@ verify_commitment_and_max_age (
|
|||||||
false,
|
false,
|
||||||
&alg_values.details.
|
&alg_values.details.
|
||||||
cs_values);
|
cs_values);
|
||||||
|
/* FIXME Handle error? */
|
||||||
#pragma message ("FIXME:oec: return value of needs handling!")
|
|
||||||
/* FIXME:oec: Handle error */
|
|
||||||
GNUNET_assert (TALER_EC_NONE == ec);
|
GNUNET_assert (TALER_EC_NONE == ec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -692,10 +690,13 @@ verify_commitment_and_max_age (
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
GNUNET_CRYPTO_hash_context_read (hash_context,
|
|
||||||
&detail.blinded_planchet,
|
|
||||||
sizeof(detail.blinded_planchet));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Continue the running hash of all coin hashes with the calculated
|
||||||
|
* hash-value of the current, disclosed coin */
|
||||||
|
GNUNET_CRYPTO_hash_context_read (hash_context,
|
||||||
|
&bch,
|
||||||
|
sizeof(bch));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -722,6 +723,37 @@ verify_commitment_and_max_age (
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Signs and persists the undisclosed coins
|
||||||
|
*
|
||||||
|
* @param connection HTTP-connection to the client
|
||||||
|
* @param h_commitment_orig Original commitment
|
||||||
|
* @param num_coins Number of coins
|
||||||
|
* @param coin_evs The Hashes of the undisclosed, blinded coins, @a num_coins many
|
||||||
|
* @param denom_keys The array of denomination keys, @a num_coins. Needed to detect Clause-Schnorr-based denominations
|
||||||
|
* @param[out] result On error, a HTTP-response will be queued and result set accordingly
|
||||||
|
* @return GNUNET_OK on success, GNUNET_SYSERR otherwise
|
||||||
|
*/
|
||||||
|
static enum GNUNET_GenericReturnValue
|
||||||
|
sign_and_persist_blinded_coins (
|
||||||
|
struct MHD_Connection *connection,
|
||||||
|
const struct TALER_AgeWithdrawCommitmentHashP *h_commitment_orig,
|
||||||
|
const uint32_t num_coins,
|
||||||
|
const struct TALER_BlindedCoinHashP *coin_evs,
|
||||||
|
const struct TEH_DenominationKey *denom_keys,
|
||||||
|
MHD_RESULT *result)
|
||||||
|
{
|
||||||
|
enum GNUNET_GenericReturnValue ret = GNUNET_SYSERR;
|
||||||
|
|
||||||
|
/* TODO[oec]:
|
||||||
|
* - sign the planchets
|
||||||
|
* - in a transaction: save the coins.
|
||||||
|
*/
|
||||||
|
#pragma message "FIXME[oec]: implement sign_and_persist_blinded_coins"
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
MHD_RESULT
|
MHD_RESULT
|
||||||
TEH_handler_age_withdraw_reveal (
|
TEH_handler_age_withdraw_reveal (
|
||||||
struct TEH_RequestContext *rc,
|
struct TEH_RequestContext *rc,
|
||||||
@ -803,7 +835,15 @@ TEH_handler_age_withdraw_reveal (
|
|||||||
&result))
|
&result))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* TODO:oec: sign the coins */
|
/* Finally, sign and persist the coins */
|
||||||
|
if (GNUNET_OK != sign_and_persist_blinded_coins (
|
||||||
|
rc->connection,
|
||||||
|
&actx.commitment.h_commitment,
|
||||||
|
actx.num_coins,
|
||||||
|
actx.coin_evs,
|
||||||
|
actx.denom_keys,
|
||||||
|
&result))
|
||||||
|
break;
|
||||||
|
|
||||||
} while(0);
|
} while(0);
|
||||||
|
|
||||||
|
@ -33,7 +33,6 @@ BEGIN
|
|||||||
',reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)'
|
',reserve_pub BYTEA NOT NULL CHECK (LENGTH(reserve_pub)=32)'
|
||||||
',reserve_sig BYTEA CHECK (LENGTH(reserve_sig)=64)'
|
',reserve_sig BYTEA CHECK (LENGTH(reserve_sig)=64)'
|
||||||
',noreveal_index INT4 NOT NULL'
|
',noreveal_index INT4 NOT NULL'
|
||||||
',timestamp INT8 NOT NULL'
|
|
||||||
') %s ;'
|
') %s ;'
|
||||||
,table_name
|
,table_name
|
||||||
,'PARTITION BY HASH (reserve_pub)'
|
,'PARTITION BY HASH (reserve_pub)'
|
||||||
@ -51,7 +50,7 @@ BEGIN
|
|||||||
,partition_suffix
|
,partition_suffix
|
||||||
);
|
);
|
||||||
PERFORM comment_partitioned_column(
|
PERFORM comment_partitioned_column(
|
||||||
'The maximum age that the client commits to with this request'
|
'The maximum age (in years) that the client commits to with this request'
|
||||||
,'max_age'
|
,'max_age'
|
||||||
,table_name
|
,table_name
|
||||||
,partition_suffix
|
,partition_suffix
|
||||||
@ -74,12 +73,6 @@ BEGIN
|
|||||||
,table_name
|
,table_name
|
||||||
,partition_suffix
|
,partition_suffix
|
||||||
);
|
);
|
||||||
PERFORM comment_partitioned_column(
|
|
||||||
'Timestamp with the time when the withdraw-age request was received by the exchange'
|
|
||||||
,'timestamp'
|
|
||||||
,table_name
|
|
||||||
,partition_suffix
|
|
||||||
);
|
|
||||||
END
|
END
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
@ -14,22 +14,25 @@
|
|||||||
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE FUNCTION create_table_withdraw_age_reveals(
|
CREATE FUNCTION create_table_withdraw_age_revealed_coins(
|
||||||
IN partition_suffix VARCHAR DEFAULT NULL
|
IN partition_suffix VARCHAR DEFAULT NULL
|
||||||
)
|
)
|
||||||
RETURNS VOID
|
RETURNS VOID
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
table_name VARCHAR DEFAULT 'withdraw_age_reveals';
|
table_name VARCHAR DEFAULT 'withdraw_age_revealed_coins';
|
||||||
BEGIN
|
BEGIN
|
||||||
PERFORM create_partitioned_table(
|
PERFORM create_partitioned_table(
|
||||||
'CREATE TABLE %I'
|
'CREATE TABLE %I'
|
||||||
'(withdraw_age_reveals_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE
|
'(withdraw_age_revealed_coins_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE
|
||||||
',h_commitment BYTEA NOT NULL CHECK (LENGTH(h_commitment)=32)'
|
',h_commitment BYTEA NOT NULL CHECK (LENGTH(h_commitment)=64)'
|
||||||
',freshcoin_index INT4 NOT NULL'
|
',freshcoin_index INT4 NOT NULL'
|
||||||
',denominations_serial INT8 NOT NULL'
|
',denominations_serial INT8 NOT NULL'
|
||||||
',h_coin_ev BYTEA CHECK (LENGTH(h_coin_ev)=32)'
|
',coin_ev BYTEA NOT NULL'
|
||||||
|
',h_coin_ev BYTEA CHECK (LENGTH(h_coin_ev)=64)'
|
||||||
|
',ev_sig BYTEA NOT NULL'
|
||||||
|
',ewv BYTEA NOT NULL'
|
||||||
') %s ;'
|
') %s ;'
|
||||||
,table_name
|
,table_name
|
||||||
,'PARTITION BY HASH (h_commitment)'
|
,'PARTITION BY HASH (h_commitment)'
|
||||||
@ -59,29 +62,47 @@ BEGIN
|
|||||||
,partition_suffix
|
,partition_suffix
|
||||||
);
|
);
|
||||||
PERFORM comment_partitioned_column(
|
PERFORM comment_partitioned_column(
|
||||||
'Hash of the blinded coins'
|
'Envelope of the new coin to be signed'
|
||||||
|
,'coin_ev'
|
||||||
|
,table_name
|
||||||
|
,partition_suffix
|
||||||
|
);
|
||||||
|
PERFORM comment_partitioned_column(
|
||||||
|
'Hash of the envelope of the new coin to be signed (for lookups)'
|
||||||
,'h_coin_ev'
|
,'h_coin_ev'
|
||||||
,table_name
|
,table_name
|
||||||
,partition_suffix
|
,partition_suffix
|
||||||
);
|
);
|
||||||
|
PERFORM comment_partitioned_column(
|
||||||
|
'Exchange signature over the envelope'
|
||||||
|
,'ev_sig'
|
||||||
|
,table_name
|
||||||
|
,partition_suffix
|
||||||
|
);
|
||||||
|
PERFORM comment_partitioned_column(
|
||||||
|
'Exchange contributed values in the creation of the fresh coin (see /csr)'
|
||||||
|
,'ewv'
|
||||||
|
,table_name
|
||||||
|
,partition_suffix
|
||||||
|
);
|
||||||
END
|
END
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
CREATE FUNCTION constrain_table_withdraw_age_reveals(
|
CREATE FUNCTION constrain_table_withdraw_age_revealed_coins(
|
||||||
IN partition_suffix VARCHAR
|
IN partition_suffix VARCHAR
|
||||||
)
|
)
|
||||||
RETURNS void
|
RETURNS void
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
table_name VARCHAR DEFAULT 'withdraw_age_reveals';
|
table_name VARCHAR DEFAULT 'withdraw_age_revealed_coins';
|
||||||
BEGIN
|
BEGIN
|
||||||
table_name = concat_ws('_', table_name, partition_suffix);
|
table_name = concat_ws('_', table_name, partition_suffix);
|
||||||
|
|
||||||
EXECUTE FORMAT (
|
EXECUTE FORMAT (
|
||||||
'ALTER TABLE ' || table_name ||
|
'ALTER TABLE ' || table_name ||
|
||||||
' ADD CONSTRAINT ' || table_name || '_withdraw_age_reveals_id_key'
|
' ADD CONSTRAINT ' || table_name || '_withdraw_age_revealed_coins_id_key'
|
||||||
' UNIQUE (withdraw_age_reveals_id);'
|
' UNIQUE (withdraw_age_revealed_coins_id);'
|
||||||
);
|
);
|
||||||
EXECUTE FORMAT (
|
EXECUTE FORMAT (
|
||||||
'ALTER TABLE ' || table_name ||
|
'ALTER TABLE ' || table_name ||
|
||||||
@ -91,12 +112,12 @@ BEGIN
|
|||||||
END
|
END
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
CREATE FUNCTION foreign_table_withdraw_age_reveals()
|
CREATE FUNCTION foreign_table_withdraw_age_revealed_coins()
|
||||||
RETURNS void
|
RETURNS void
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
table_name VARCHAR DEFAULT 'withdraw_age_reveals';
|
table_name VARCHAR DEFAULT 'withdraw_age_revealed_coins';
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE FORMAT (
|
EXECUTE FORMAT (
|
||||||
'ALTER TABLE ' || table_name ||
|
'ALTER TABLE ' || table_name ||
|
||||||
@ -121,17 +142,17 @@ INSERT INTO exchange_tables
|
|||||||
,partitioned
|
,partitioned
|
||||||
,by_range)
|
,by_range)
|
||||||
VALUES
|
VALUES
|
||||||
('withdraw_age_reveals'
|
('withdraw_age_revealed_coins'
|
||||||
,'exchange-0003'
|
,'exchange-0003'
|
||||||
,'create'
|
,'create'
|
||||||
,TRUE
|
,TRUE
|
||||||
,FALSE),
|
,FALSE),
|
||||||
('withdraw_age_reveals'
|
('withdraw_age_revealed_coins'
|
||||||
,'exchange-0003'
|
,'exchange-0003'
|
||||||
,'constrain'
|
,'constrain'
|
||||||
,TRUE
|
,TRUE
|
||||||
,FALSE),
|
,FALSE),
|
||||||
('withdraw_age_reveals'
|
('withdraw_age_revealed_coins'
|
||||||
,'exchange-0003'
|
,'exchange-0003'
|
||||||
,'foreign'
|
,'foreign'
|
||||||
,TRUE
|
,TRUE
|
||||||
|
@ -35,6 +35,7 @@ TEH_PG_get_age_withdraw_info (
|
|||||||
{
|
{
|
||||||
struct PostgresClosure *pg = cls;
|
struct PostgresClosure *pg = cls;
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
|
GNUNET_PQ_query_param_auto_from_type (reserve_pub),
|
||||||
GNUNET_PQ_query_param_auto_from_type (ach),
|
GNUNET_PQ_query_param_auto_from_type (ach),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
@ -45,14 +46,12 @@ TEH_PG_get_age_withdraw_info (
|
|||||||
&awc->reserve_sig),
|
&awc->reserve_sig),
|
||||||
GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
|
GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
|
||||||
&awc->reserve_pub),
|
&awc->reserve_pub),
|
||||||
GNUNET_PQ_result_spec_uint32 ("max_age",
|
GNUNET_PQ_result_spec_uint16 ("max_age",
|
||||||
&awc->max_age),
|
&awc->max_age),
|
||||||
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
||||||
&awc->amount_with_fee),
|
&awc->amount_with_fee),
|
||||||
GNUNET_PQ_result_spec_uint32 ("noreveal_index",
|
GNUNET_PQ_result_spec_uint32 ("noreveal_index",
|
||||||
&awc->noreveal_index),
|
&awc->noreveal_index),
|
||||||
GNUNET_PQ_result_spec_timestamp ("timtestamp",
|
|
||||||
&awc->timestamp),
|
|
||||||
GNUNET_PQ_result_spec_end
|
GNUNET_PQ_result_spec_end
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,9 +69,8 @@ TEH_PG_get_age_withdraw_info (
|
|||||||
",amount_with_fee_val"
|
",amount_with_fee_val"
|
||||||
",amount_with_fee_frac"
|
",amount_with_fee_frac"
|
||||||
",noreveal_index"
|
",noreveal_index"
|
||||||
",timestamp"
|
|
||||||
" FROM withdraw_age_commitments"
|
" FROM withdraw_age_commitments"
|
||||||
" WHERE h_commitment=$1;");
|
" WHERE reserve_pub=$1 and h_commitment=$2;");
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
||||||
"get_age_withdraw_info",
|
"get_age_withdraw_info",
|
||||||
params,
|
params,
|
||||||
|
@ -19,8 +19,9 @@
|
|||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @file exchangedb/pg_insert_records_by_table.c
|
* @file exchangedb/pg_insert_records_by_table.c
|
||||||
* @brief insert_records_by_table implementation
|
* @brief replicate_records_by_table implementation
|
||||||
* @author Christian Grothoff
|
* @author Christian Grothoff
|
||||||
|
* @author Özgür Kesim
|
||||||
*/
|
*/
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "taler_error_codes.h"
|
#include "taler_error_codes.h"
|
||||||
@ -28,6 +29,7 @@
|
|||||||
#include "taler_pq_lib.h"
|
#include "taler_pq_lib.h"
|
||||||
#include "pg_insert_records_by_table.h"
|
#include "pg_insert_records_by_table.h"
|
||||||
#include "pg_helper.h"
|
#include "pg_helper.h"
|
||||||
|
#include <gnunet/gnunet_pq_lib.h>
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2110,40 +2112,56 @@ irbt_cb_table_withdraw_age_commitments (struct PostgresClosure *pg,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called with withdraw_age_reveals records to insert into table.
|
* Function called with withdraw_age_revealed_coins records to insert into table.
|
||||||
*
|
*
|
||||||
* @param pg plugin context
|
* @param pg plugin context
|
||||||
* @param td record to insert
|
* @param td record to insert
|
||||||
*/
|
*/
|
||||||
static enum GNUNET_DB_QueryStatus
|
static enum GNUNET_DB_QueryStatus
|
||||||
irbt_cb_table_withdraw_age_reveals (struct PostgresClosure *pg,
|
irbt_cb_table_withdraw_age_revealed_coins (struct PostgresClosure *pg,
|
||||||
const struct TALER_EXCHANGEDB_TableData *td)
|
const struct
|
||||||
|
TALER_EXCHANGEDB_TableData *td)
|
||||||
{
|
{
|
||||||
|
struct GNUNET_HashCode h_coin_ev;
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
GNUNET_PQ_query_param_uint64 (&td->serial),
|
GNUNET_PQ_query_param_uint64 (&td->serial),
|
||||||
#if FIXME_OEC
|
|
||||||
GNUNET_PQ_query_param_auto_from_type (
|
GNUNET_PQ_query_param_auto_from_type (
|
||||||
&td->details.withdraw_age_reveals.h_commitment),
|
&td->details.withdraw_age_revealed_coins.h_commitment),
|
||||||
#endif
|
|
||||||
GNUNET_PQ_query_param_uint32 (
|
GNUNET_PQ_query_param_uint32 (
|
||||||
&td->details.withdraw_age_reveals.freshcoin_index),
|
&td->details.withdraw_age_revealed_coins.freshcoin_index),
|
||||||
GNUNET_PQ_query_param_uint64 (
|
GNUNET_PQ_query_param_uint64 (
|
||||||
&td->details.withdraw_age_reveals.denominations_serial),
|
&td->details.withdraw_age_revealed_coins.denominations_serial),
|
||||||
|
GNUNET_PQ_query_param_fixed_size (
|
||||||
|
td->details.withdraw_age_revealed_coins.coin_ev,
|
||||||
|
td->details.withdraw_age_revealed_coins.coin_ev_size),
|
||||||
|
GNUNET_PQ_query_param_auto_from_type (&h_coin_ev),
|
||||||
|
TALER_PQ_query_param_blinded_denom_sig (
|
||||||
|
&td->details.withdraw_age_revealed_coins.ev_sig),
|
||||||
|
TALER_PQ_query_param_exchange_withdraw_values (
|
||||||
|
&td->details.withdraw_age_revealed_coins.ewv),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
|
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"insert_into_table_withdraw_age_reveals",
|
"insert_into_table_withdraw_age_revealed_coins",
|
||||||
"INSERT INTO withdraw_age_reveals"
|
"INSERT INTO withdraw_age_revealed_coins"
|
||||||
"(withdraw_age_reveals_id"
|
"(withdraw_age_revealed_coins_id"
|
||||||
",FIXME_OEC"
|
",h_commitment"
|
||||||
",freshcoin_index"
|
",freshcoin_index"
|
||||||
",denominations_serial"
|
",denominations_serial"
|
||||||
",FIXME_OEC"
|
",coin_ev"
|
||||||
|
",h_coin_ev"
|
||||||
|
",ev_sig"
|
||||||
|
",ewv"
|
||||||
") VALUES "
|
") VALUES "
|
||||||
"($1, $2, $3, $4, $5);");
|
"($1, $2, $3, $4, $5, $6, $7, $8);");
|
||||||
|
|
||||||
|
GNUNET_CRYPTO_hash (td->details.withdraw_age_revealed_coins.coin_ev,
|
||||||
|
td->details.withdraw_age_revealed_coins.coin_ev_size,
|
||||||
|
&h_coin_ev);
|
||||||
|
|
||||||
return GNUNET_PQ_eval_prepared_non_select (pg->conn,
|
return GNUNET_PQ_eval_prepared_non_select (pg->conn,
|
||||||
"insert_into_table_withdraw_age_reveals",
|
"insert_into_table_withdraw_age_revealed_coins",
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2298,8 +2316,8 @@ TEH_PG_insert_records_by_table (void *cls,
|
|||||||
case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_COMMITMENTS:
|
case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_COMMITMENTS:
|
||||||
rh = &irbt_cb_table_withdraw_age_commitments;
|
rh = &irbt_cb_table_withdraw_age_commitments;
|
||||||
break;
|
break;
|
||||||
case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS:
|
case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS:
|
||||||
rh = &irbt_cb_table_withdraw_age_reveals;
|
rh = &irbt_cb_table_withdraw_age_revealed_coins;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (NULL == rh)
|
if (NULL == rh)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
* @file exchangedb/pg_lookup_records_by_table.c
|
* @file exchangedb/pg_lookup_records_by_table.c
|
||||||
* @brief implementation of lookup_records_by_table
|
* @brief implementation of lookup_records_by_table
|
||||||
* @author Christian Grothoff
|
* @author Christian Grothoff
|
||||||
|
* @author Özgür Kesim
|
||||||
*/
|
*/
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "taler_error_codes.h"
|
#include "taler_error_codes.h"
|
||||||
@ -2807,9 +2808,6 @@ lrbt_cb_table_withdraw_age_commitments (void *cls,
|
|||||||
GNUNET_PQ_result_spec_uint32 (
|
GNUNET_PQ_result_spec_uint32 (
|
||||||
"noreveal_index",
|
"noreveal_index",
|
||||||
&td.details.withdraw_age_commitments.noreveal_index),
|
&td.details.withdraw_age_commitments.noreveal_index),
|
||||||
GNUNET_PQ_result_spec_absolute_time (
|
|
||||||
"timestamp",
|
|
||||||
&td.details.withdraw_age_commitments.timestamp),
|
|
||||||
GNUNET_PQ_result_spec_end
|
GNUNET_PQ_result_spec_end
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2830,40 +2828,48 @@ lrbt_cb_table_withdraw_age_commitments (void *cls,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called with withdraw_age_reveals table entries.
|
* Function called with withdraw_age_revealed_coins table entries.
|
||||||
*
|
*
|
||||||
* @param cls closure
|
* @param cls closure
|
||||||
* @param result the postgres result
|
* @param result the postgres result
|
||||||
* @param num_results the number of results in @a result
|
* @param num_results the number of results in @a result
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
lrbt_cb_table_withdraw_age_reveals (void *cls,
|
lrbt_cb_table_withdraw_age_revealed_coins (void *cls,
|
||||||
PGresult *result,
|
PGresult *result,
|
||||||
unsigned int num_results)
|
unsigned int num_results)
|
||||||
{
|
{
|
||||||
struct LookupRecordsByTableContext *ctx = cls;
|
struct LookupRecordsByTableContext *ctx = cls;
|
||||||
struct TALER_EXCHANGEDB_TableData td = {
|
struct TALER_EXCHANGEDB_TableData td = {
|
||||||
.table = TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS
|
.table = TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS
|
||||||
};
|
};
|
||||||
|
|
||||||
for (unsigned int i = 0; i<num_results; i++)
|
for (unsigned int i = 0; i<num_results; i++)
|
||||||
{
|
{
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
GNUNET_PQ_result_spec_uint64 (
|
GNUNET_PQ_result_spec_uint64 (
|
||||||
"withdraw_age_reveals_serial_id",
|
"withdraw_age_revealed_coins_id",
|
||||||
&td.serial),
|
&td.serial),
|
||||||
#if FIXME_OEC
|
|
||||||
GNUNET_PQ_result_spec_auto_from_type (
|
GNUNET_PQ_result_spec_auto_from_type (
|
||||||
"h_commitment",
|
"h_commitment",
|
||||||
&td.details.withdraw_age_reveals.h_commitment),
|
&td.details.withdraw_age_revealed_coins.h_commitment),
|
||||||
#endif
|
|
||||||
GNUNET_PQ_result_spec_uint32 (
|
GNUNET_PQ_result_spec_uint32 (
|
||||||
"freshcoin_index",
|
"freshcoin_index",
|
||||||
&td.details.withdraw_age_reveals.freshcoin_index),
|
&td.details.withdraw_age_revealed_coins.freshcoin_index),
|
||||||
GNUNET_PQ_result_spec_uint64 (
|
GNUNET_PQ_result_spec_uint64 (
|
||||||
"denominations_serial",
|
"denominations_serial",
|
||||||
&td.details.withdraw_age_reveals.denominations_serial),
|
&td.details.withdraw_age_revealed_coins.denominations_serial),
|
||||||
/* FIXME-Oec; h_coin_ev, or coin_ev? */
|
/* Note: h_coin_ev is recalculated */
|
||||||
|
GNUNET_PQ_result_spec_variable_size (
|
||||||
|
"coin_ev",
|
||||||
|
(void **) &td.details.withdraw_age_revealed_coins.coin_ev,
|
||||||
|
&td.details.withdraw_age_revealed_coins.coin_ev_size),
|
||||||
|
TALER_PQ_result_spec_blinded_denom_sig (
|
||||||
|
"ev_sig",
|
||||||
|
&td.details.refresh_revealed_coins.ev_sig),
|
||||||
|
TALER_PQ_result_spec_exchange_withdraw_values (
|
||||||
|
"ewv",
|
||||||
|
&td.details.refresh_revealed_coins.ewv),
|
||||||
GNUNET_PQ_result_spec_end
|
GNUNET_PQ_result_spec_end
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3602,13 +3608,27 @@ TEH_PG_lookup_records_by_table (void *cls,
|
|||||||
",reserve_pub"
|
",reserve_pub"
|
||||||
",reserve_sig"
|
",reserve_sig"
|
||||||
",noreveal_index"
|
",noreveal_index"
|
||||||
",timestamp"
|
|
||||||
" FROM withdraw_age_commitments"
|
" FROM withdraw_age_commitments"
|
||||||
" WHERE withdraw_age_commitment_id > $1"
|
" WHERE withdraw_age_commitment_id > $1"
|
||||||
" ORDER BY withdraw_age_commitment_id ASC;");
|
" ORDER BY withdraw_age_commitment_id ASC;");
|
||||||
rh = &lrbt_cb_table_withdraw_age_commitments;
|
rh = &lrbt_cb_table_withdraw_age_commitments;
|
||||||
break;
|
break;
|
||||||
|
case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS:
|
||||||
|
XPREPARE ("select_above_serial_by_table_withdraw_age_revealed_coins",
|
||||||
|
"SELECT"
|
||||||
|
" withdraw_age_revealed_coins_serial_id"
|
||||||
|
",h_commitment"
|
||||||
|
",freshcoin_index"
|
||||||
|
",denominations_serial"
|
||||||
|
",coin_ev"
|
||||||
|
",h_coin_ev"
|
||||||
|
",ev_sig"
|
||||||
|
",ewv"
|
||||||
|
" FROM withdraw_age_revealed_coins"
|
||||||
|
" WHERE withdraw_age_revealed_coins_serial_id > $1"
|
||||||
|
" ORDER BY withdraw_age_revealed_coins_serial_id ASC;");
|
||||||
|
rh = &lrbt_cb_table_withdraw_age_revealed_coins;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (NULL == rh)
|
if (NULL == rh)
|
||||||
{
|
{
|
||||||
|
@ -435,14 +435,14 @@ TEH_PG_lookup_serial_by_table (void *cls,
|
|||||||
" LIMIT 1;");
|
" LIMIT 1;");
|
||||||
statement = "select_serial_by_table_withdraw_age_commitments";
|
statement = "select_serial_by_table_withdraw_age_commitments";
|
||||||
break;
|
break;
|
||||||
case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS:
|
case TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS:
|
||||||
XPREPARE ("select_serial_by_table_withdraw_age_reveals",
|
XPREPARE ("select_serial_by_table_withdraw_age_revealed_coins",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
" withdraw_age_reveals_id AS serial"
|
" withdraw_age_revealed_coins_id AS serial"
|
||||||
" FROM withdraw_age_reveals"
|
" FROM withdraw_age_revealed_coins"
|
||||||
" ORDER BY withdraw_age_reveals_id DESC"
|
" ORDER BY withdraw_age_revealed_coins_id DESC"
|
||||||
" LIMIT 1;");
|
" LIMIT 1;");
|
||||||
statement = "select_serial_by_table_withdraw_age_reveals";
|
statement = "select_serial_by_table_withdraw_age_revealed_coins";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (NULL == statement)
|
if (NULL == statement)
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
* @author Christian Grothoff
|
* @author Christian Grothoff
|
||||||
* @author Sree Harsha Totakura
|
* @author Sree Harsha Totakura
|
||||||
* @author Marcello Stanisci
|
* @author Marcello Stanisci
|
||||||
|
* @author Özgür Kesim
|
||||||
*/
|
*/
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
* @brief Low-level (statement-level) database access for the exchange
|
* @brief Low-level (statement-level) database access for the exchange
|
||||||
* @author Florian Dold
|
* @author Florian Dold
|
||||||
* @author Christian Grothoff
|
* @author Christian Grothoff
|
||||||
|
* @author Özgür Kesim
|
||||||
*/
|
*/
|
||||||
#ifndef TALER_EXCHANGEDB_PLUGIN_H
|
#ifndef TALER_EXCHANGEDB_PLUGIN_H
|
||||||
#define TALER_EXCHANGEDB_PLUGIN_H
|
#define TALER_EXCHANGEDB_PLUGIN_H
|
||||||
@ -283,7 +284,7 @@ enum TALER_EXCHANGEDB_ReplicatedTable
|
|||||||
TALER_EXCHANGEDB_RT_KYC_ATTRIBUTES,
|
TALER_EXCHANGEDB_RT_KYC_ATTRIBUTES,
|
||||||
TALER_EXCHANGEDB_RT_PURSE_DELETION,
|
TALER_EXCHANGEDB_RT_PURSE_DELETION,
|
||||||
TALER_EXCHANGEDB_RT_WITHDRAW_AGE_COMMITMENTS,
|
TALER_EXCHANGEDB_RT_WITHDRAW_AGE_COMMITMENTS,
|
||||||
TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALS,
|
TALER_EXCHANGEDB_RT_WITHDRAW_AGE_REVEALED_COINS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -764,11 +765,14 @@ struct TALER_EXCHANGEDB_TableData
|
|||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
struct TALER_AgeWithdrawCommitmentHashP h_commitment;
|
struct TALER_AgeWithdrawCommitmentHashP h_commitment;
|
||||||
// FIXME-Oec: h_commitment --- schema says it is 32 byte, but it was 64 above??!?
|
|
||||||
uint32_t freshcoin_index;
|
uint32_t freshcoin_index;
|
||||||
uint64_t denominations_serial;
|
uint64_t denominations_serial;
|
||||||
// FIXME-Oec: h_coin_ev --- schema says it is 32 byte!?
|
void *coin_ev;
|
||||||
} withdraw_age_reveals;
|
size_t coin_ev_size;
|
||||||
|
struct TALER_ExchangeWithdrawValues ewv;
|
||||||
|
// h_coin_ev omitted, to be recomputed!
|
||||||
|
struct TALER_BlindedDenominationSignature ev_sig;
|
||||||
|
} withdraw_age_revealed_coins;
|
||||||
|
|
||||||
} details;
|
} details;
|
||||||
|
|
||||||
@ -1175,9 +1179,8 @@ struct TALER_EXCHANGEDB_AgeWithdrawCommitment
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum age that the coins are restricted to.
|
* Maximum age that the coins are restricted to.
|
||||||
* FIXME-Oec: use 16-bit integer (see DB schema!)
|
|
||||||
*/
|
*/
|
||||||
uint32_t max_age;
|
uint16_t max_age;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The hash of the commitment of all n*kappa coins
|
* The hash of the commitment of all n*kappa coins
|
||||||
@ -1206,11 +1209,6 @@ struct TALER_EXCHANGEDB_AgeWithdrawCommitment
|
|||||||
* The exchange's signature of the response.
|
* The exchange's signature of the response.
|
||||||
*/
|
*/
|
||||||
struct TALER_ExchangeSignatureP sig;
|
struct TALER_ExchangeSignatureP sig;
|
||||||
|
|
||||||
/**
|
|
||||||
* Timestamp of the request being made
|
|
||||||
*/
|
|
||||||
struct GNUNET_TIME_Timestamp timestamp;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -3794,7 +3792,6 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
*
|
*
|
||||||
* @param cls the `struct PostgresClosure` with the plugin-specific state
|
* @param cls the `struct PostgresClosure` with the plugin-specific state
|
||||||
* @param commitment corresponding commitment for the age-withdraw
|
* @param commitment corresponding commitment for the age-withdraw
|
||||||
* @param now current time (rounded)
|
|
||||||
* @param[out] found set to true if the reserve was found
|
* @param[out] found set to true if the reserve was found
|
||||||
* @param[out] balance_ok set to true if the balance was sufficient
|
* @param[out] balance_ok set to true if the balance was sufficient
|
||||||
* @param[out] ruuid set to the reserve's UUID (reserves table row)
|
* @param[out] ruuid set to the reserve's UUID (reserves table row)
|
||||||
@ -3804,7 +3801,6 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
(*do_age_withdraw)(
|
(*do_age_withdraw)(
|
||||||
void *cls,
|
void *cls,
|
||||||
const struct TALER_EXCHANGEDB_AgeWithdrawCommitment *commitment,
|
const struct TALER_EXCHANGEDB_AgeWithdrawCommitment *commitment,
|
||||||
struct GNUNET_TIME_Timestamp now,
|
|
||||||
bool *found,
|
bool *found,
|
||||||
bool *balance_ok,
|
bool *balance_ok,
|
||||||
uint64_t *ruuid);
|
uint64_t *ruuid);
|
||||||
@ -5787,6 +5783,7 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
* Insert record set into @a table. Used in exchange-auditor database
|
* Insert record set into @a table. Used in exchange-auditor database
|
||||||
* replication.
|
* replication.
|
||||||
*
|
*
|
||||||
|
memset (&awc, 0, sizeof (awc));
|
||||||
* @param cls closure
|
* @param cls closure
|
||||||
* @param tb table data to insert
|
* @param tb table data to insert
|
||||||
* @return transaction status code, #GNUNET_DB_STATUS_HARD_ERROR if
|
* @return transaction status code, #GNUNET_DB_STATUS_HARD_ERROR if
|
||||||
|
Loading…
Reference in New Issue
Block a user