donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit 8180725ce2f763fc62910eadf7d151d61ea6e91f
parent b460ec7d8aefd76a26f954ddd3f5073e20ae6bef
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date:   Fri, 31 May 2024 22:34:18 +0200

fix db bug

Diffstat:
Msrc/donaudb/0002-donau_receipts_submitted.sql | 6+++---
Msrc/donaudb/donau_do_insert_submitted_receipts.sql | 8++++----
Msrc/donaudb/pg_insert_submitted_receipts.c | 43++++++++++++++++++++++---------------------
3 files changed, 29 insertions(+), 28 deletions(-)

diff --git a/src/donaudb/0002-donau_receipts_submitted.sql b/src/donaudb/0002-donau_receipts_submitted.sql @@ -17,8 +17,8 @@ CREATE TABLE receipts_submitted (receipt_id BIGINT GENERATED BY DEFAULT AS IDENTITY UNIQUE ,h_tax_number BYTEA NOT NULL - ,nonce BYTEA NOT NULL UNIQUE CHECK (LENGTH(nonce)=32) - ,donation_unit_pub BYTEA NOT NULL REFERENCES donation_units (donation_unit_pub) + ,nonce INT4 NOT NULL UNIQUE + ,h_donation_unit_pub BYTEA NOT NULL REFERENCES donation_units (h_donation_unit_pub) ,donation_unit_sig BYTEA NOT NULL UNIQUE ,donation_year INT8 NOT NULL ); @@ -28,7 +28,7 @@ COMMENT ON COLUMN receipts_submitted.h_tax_number IS 'The hash of the tax number and salt.'; COMMENT ON COLUMN receipts_submitted.nonce IS 'The nonce used in the Unique Donor Identifier.'; -COMMENT ON COLUMN receipts_submitted.donation_unit_pub +COMMENT ON COLUMN receipts_submitted.h_donation_unit_pub IS 'Reference to public key used to sign.'; COMMENT ON COLUMN receipts_submitted.donation_unit_sig IS 'The unblided signature the Donau made.'; diff --git a/src/donaudb/donau_do_insert_submitted_receipts.sql b/src/donaudb/donau_do_insert_submitted_receipts.sql @@ -16,7 +16,7 @@ CREATE OR REPLACE FUNCTION do_insert_submitted_receipts( IN in_h_tax_number BYTEA, IN ina_h_donation_unit_pubs BYTEA[], - IN ina_nonces BYTEA[], + IN ina_nonces INT4[], IN ina_donation_unit_sigs BYTEA[], IN in_donation_year INT8, -- @@ -26,7 +26,7 @@ LANGUAGE plpgsql AS $$ DECLARE i INT4; - ini_nonce BYTEA; + ini_nonce INT4; ini_h_donation_unit_pub BYTEA; ini_donation_unit_sig BYTEA; BEGIN @@ -44,7 +44,7 @@ LOOP INSERT INTO receipts_submitted (h_tax_number ,nonce - ,donation_unit_pub + ,h_donation_unit_pub ,donation_unit_sig ,donation_year ) @@ -64,6 +64,6 @@ LOOP AND donation_unit_sig=ini_donation_unit_sig; -- if signature matches, everything must match out_conflict[i] = NOT FOUND; END IF; -END LOOP; -- end FOR all coins +END LOOP; -- end FOR all receipts END $$; diff --git a/src/donaudb/pg_insert_submitted_receipts.c b/src/donaudb/pg_insert_submitted_receipts.c @@ -36,47 +36,48 @@ DH_PG_insert_submitted_receipts ( uint64_t donation_year) { struct PostgresClosure *pg = cls; - struct DONAU_DonationUnitHashP h_donation_unit_pubs[GNUNET_NZL (num_dr)]; - struct DONAU_UniqueDonorIdentifierNonce nonces[GNUNET_NZL (num_dr)]; + struct GNUNET_HashCode h_donation_unit_pubs[GNUNET_NZL (num_dr)]; + uint32_t nonces[GNUNET_NZL (num_dr)]; struct DONAU_DonationUnitSignature donation_unit_sigs[GNUNET_NZL (num_dr)]; + + for (unsigned int i = 0; i < num_dr; i++) + { + const struct DONAU_DonationReceipt *dr = &donation_receipts[i]; + + h_donation_unit_pubs[i] = dr->h_donation_unit_pub.hash; + nonces[i] = dr->nonce.value; + donation_unit_sigs[i] = dr->donation_unit_sig; + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Do insert submitted receipt\n"); + } + struct GNUNET_PQ_QueryParam params[] = { GNUNET_PQ_query_param_auto_from_type (h_donor_tax_id), GNUNET_PQ_query_param_array_auto_from_type (num_dr, h_donation_unit_pubs, pg->conn), - GNUNET_PQ_query_param_array_auto_from_type (num_dr, + GNUNET_PQ_query_param_array_uint32 (num_dr, nonces, pg->conn), DONAU_PQ_query_param_array_donation_unit_sig (num_dr, donation_unit_sigs, pg->conn), - GNUNET_PQ_query_param_uint64 (&donation_year), + GNUNET_PQ_query_param_uint64 (&donation_year), GNUNET_PQ_query_param_end }; - bool conflicted[GNUNET_NZL (num_dr)]; + bool *conflicted; struct GNUNET_PQ_ResultSpec rs[] = { - GNUNET_PQ_result_spec_auto_array_from_type (pg->conn, + GNUNET_PQ_result_spec_array_bool (pg->conn, "conflicted", &num_dr, - conflicted), + &conflicted), GNUNET_PQ_result_spec_end }; enum GNUNET_DB_QueryStatus qs; - for (unsigned int i = 0; i < num_dr; i++) - { - const struct DONAU_DonationReceipt *dr = &donation_receipts[i]; - - h_donation_unit_pubs[i] = dr->h_donation_unit_pub; - nonces[i] = dr->nonce; - donation_unit_sigs[i] = dr->donation_unit_sig; - - GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "Do insert submitted receipt\n"); - } - PREPARE (pg, "call_insert_submitted_receipts", "SELECT " @@ -92,8 +93,8 @@ DH_PG_insert_submitted_receipts ( for (size_t i = 0; i < num_dr; i++) { - if (conflicted[i]) - { + if (conflicted[i]) + { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Submitted donation receipt at index %ld already present!\n", i);