rm HashCode, use DenominationHash directly

This commit is contained in:
swrup 2025-12-21 22:13:35 +01:00
parent dfb0b476c0
commit 99d2ee6194
6 changed files with 77 additions and 39 deletions

View file

@ -9,7 +9,9 @@
GNU Taler db-events?
it seems caqti/pgx does not support it
transaction *)
transaction
should check validity of signatures got from db, for /management at least *)
module type CONN = Caqti_miou.CONNECTION
@ -185,7 +187,7 @@ let insert_auditor_denom_sig =
fun (module Conn : CONN) ~auditor_pub ~h_denom_pub ~auditor_sig ->
Conn.exec insert_auditor_denom_sig (auditor_pub, h_denom_pub, auditor_sig)
let get_auditors =
let _get_auditors =
let get_auditors =
Caqti_type.(unit ->* t3 eddsa_pub string string)
"SELECT auditor_pub, auditor_url, auditor_name FROM auditors WHERE \
@ -193,7 +195,7 @@ let get_auditors =
in
fun (module Conn : CONN) () -> Conn.collect_list get_auditors ()
let get_auditor_denoms =
let _get_auditor_denoms =
let get_auditor_denoms =
let auditor_sig = Bin_sig.ExchangeKeyValidity.caqti in
Caqti_type.(unit ->* t3 eddsa_pub denomination_hash auditor_sig)
@ -204,6 +206,46 @@ let get_auditor_denoms =
in
fun (module Conn : CONN) () -> Conn.collect_list get_auditor_denoms ()
(* TODO
maybe check that url and name are unique/same for each auditor_pub
do the ht logic out of pg.ml *)
let get_auditor_keys =
let get_auditor_keys =
let auditor_sig = Bin_sig.ExchangeKeyValidity.caqti in
Caqti_type.(
unit ->* t5 eddsa_pub string string denomination_hash auditor_sig)
"SELECT auditors.auditor_pub, auditors.url, auditors.name, \
denominations.denom_pub_hash, auditor_denom_sigs.auditor_sig FROM \
auditor_denom_sigs JOIN auditors USING (auditor_uuid) JOIN \
denominations USING (denominations_serial) WHERE auditors.is_active"
in
fun (module Conn : CONN) () ->
let open Syntax in
let* l = Conn.collect_list get_auditor_keys () |> unwrap_err_caqti in
let ht = Hashtbl.create 0xff in
List.iter
(fun (pub, url, name, denom_pub_h, auditor_sig) ->
let k = (pub, url, name) in
match Hashtbl.find_opt ht k with
| None -> Hashtbl.replace ht k [ (denom_pub_h, auditor_sig) ]
| Some l -> Hashtbl.replace ht k ((denom_pub_h, auditor_sig) :: l))
l;
let l = Hashtbl.to_seq ht |> List.of_seq in
let l =
List.map
(fun ((auditor_pub, auditor_url, auditor_name), auditor_denoms) ->
let denomination_keys =
List.map
(fun (denom_pub_h, auditor_sig) ->
AuditorDenominationKey.{ denom_pub_h; auditor_sig })
auditor_denoms
in
AuditorKeys.
{ auditor_pub; auditor_url; auditor_name; denomination_keys })
l
in
Ok l
let insert_wire_fee =
let insert_wire_fee =
let master_sig = Bin_sig.MasterWireFee.caqti in