From 2b443f05a335a1e55065fea44062532d83607ab3 Mon Sep 17 00:00:00 2001 From: swrup Date: Sun, 7 Dec 2025 04:27:46 +0100 Subject: [PATCH] --- src/management.ml | 41 ++++++++++++++++++++++++++++++++++++++++- src/pg.ml | 6 ++++-- src/secmod_denom.ml | 21 --------------------- src/timestamp.mli | 3 ++- 4 files changed, 46 insertions(+), 25 deletions(-) diff --git a/src/management.ml b/src/management.ml index d1ebb3ad..f4436548 100644 --- a/src/management.ml +++ b/src/management.ml @@ -179,6 +179,42 @@ let update_master_signatures ~db_conn ~sm_signkey ~sm_denom (h_denom_pub, master_sig)) |> Secmod_denom.add_master_signatures db_conn sm_denom in + let* () = + (* TODO move to test *) + Secmod_denom.get_denoms sm_denom + |> list_iter (fun denom -> + let error = Error "update_master_signatures sanity check failure" in + let* opt = + Pg.lookup_denomination_key db_conn denom.Denomination.h_pub + |> unwrap_err_caqti + in + let* ( valid_from, + _expire_withdraw, + _expire_deposit, + _expire_legal, + coin, + _fee_withdraw, + _fee_deposit, + _fee_refresh, + fee_refund, + age_mask ) = + match opt with None -> error | Some v -> Ok v + in + let check = function false -> error | true -> Ok () in + (* TODO time *) + let timestamp_equal a b = + let timestamp_to_int64 = function + | None -> None + | Some v -> v |> Ptime.to_float_s |> Int64.of_float |> Option.some + in + timestamp_to_int64 a = timestamp_to_int64 b + in + let* () = check (timestamp_equal valid_from denom.stamp_start) in + let* () = check (coin = denom.value) in + let* () = check (fee_refund = denom.fee_refund) in + let* () = check (age_mask = denom.age_mask) in + Ok ()) + in Ok () (* --- *) @@ -200,7 +236,10 @@ let respond_with_ok_json content req = let respond_with_res res req = match res with - | Error err -> respond_with_plain_text_error err req + | Error err -> + Logs.err (fun m -> m "%s." err); + let err = Fmt.str "%s@." err in + respond_with_plain_text_error err req | Ok content -> respond_with_ok_json content req let keys_get req server _env = diff --git a/src/pg.ml b/src/pg.ml index feda504c..305672db 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -110,8 +110,10 @@ let lookup_denomination_key = Caqti_type.( denomination_hash ->? t10 time time time time amount amount amount amount amount age_mask) - "SELECT valid_from, expire_withdraw, expire_deposit, expire_legal, coin, \ - fee_withdraw, fee_deposit, fee_refresh, fee_refund, age_mask FROM \ + "SELECT valid_from, expire_withdraw, expire_deposit, expire_legal, \ + (coin).val, (coin).frac, (fee_withdraw).val, (fee_withdraw).frac, \ + (fee_deposit).val, (fee_deposit).frac, (fee_refresh).val, \ + (fee_refresh).frac, (fee_refund).val, (fee_refund).frac, age_mask FROM \ denominations WHERE denom_pub_hash=$1" in fun (module Conn : CONN) (h_denom_pub : DenominationHash.t) -> diff --git a/src/secmod_denom.ml b/src/secmod_denom.ml index a1b8c921..3de76e66 100644 --- a/src/secmod_denom.ml +++ b/src/secmod_denom.ml @@ -12,8 +12,6 @@ let get_denoms t = Miou.Mutex.protect t.lock @@ fun () -> Hashtbl.to_seq_values t.denom_ht |> List.of_seq -[@@@ocaml.warning "-27"] - let add_master_signatures conn t l = Miou.Mutex.protect t.lock @@ fun () -> list_iter @@ -24,25 +22,6 @@ let add_master_signatures conn t l = let denom = { denom with master_sig= Some master_sig } in let* () = Pg.add_denomination_key conn denom |> unwrap_err_caqti in Hashtbl.replace t.denom_ht h_denom_pub denom; - let* ( valid_from, - expire_withdraw, - expire_deposit, - expire_legal, - coin, - fee_withdraw, - fee_deposit, - fee_refresh, - fee_refund, - age_mask ) = - Pg.lookup_denomination_key conn h_denom_pub - |> unwrap_err_caqti - |> Result.map Option.get - in - (* - assert (valid_from = denom.stamp_start); - assert (coin = denom.value); - assert (age_mask = denom.age_mask); - *) Ok ()) l diff --git a/src/timestamp.mli b/src/timestamp.mli index c1ac00ab..ae81b3a3 100644 --- a/src/timestamp.mli +++ b/src/timestamp.mli @@ -1,5 +1,6 @@ (* TODO time - not sure about this *) + uhuh! + need to be int64 for binary/pg round trip *) type t = Ptime.t option type span = Ptime.Span.t option