From 477dd2230bf1c9e058be28fe9214259f97620b6a Mon Sep 17 00:00:00 2001 From: swrup Date: Sun, 21 Dec 2025 20:52:59 +0100 Subject: [PATCH] left join on find_sk/dn to fill revoked_sig (todo: test) --- src/pg.ml | 31 ++++++++++++++++++++++++++----- src/pg_type.ml | 33 +++++++++++++-------------------- 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/pg.ml b/src/pg.ml index 1c18fb21..3420136f 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -37,16 +37,20 @@ let preflight = in fun (module Conn : CONN) -> Syntax.list_iter (fun p -> Conn.exec p ()) l -(* TODO revoked_sig *) +(* TODO revoked_sig + check left join *) let find_signkey = let find_signkey = Caqti_type.(eddsa_pub ->? signkey_data) - "SELECT exchange_pub, valid_from, expire_sign, expire_legal, master_sig \ - FROM exchange_sign_keys WHERE exchange_pub=$1" + "SELECT exchange_pub, valid_from, expire_sign, expire_legal, \ + exchange_sign_keys.master_sig, signkey_revocations.master_sig FROM \ + exchange_sign_keys WHERE exchange_pub=$1\n\ + \ LEFT JOIN signkey_revocations USING (esk_serial)" in fun (module Conn : CONN) (exchange_pub : EddsaPublicKey.t) -> Conn.find_opt find_signkey exchange_pub +(* note: does not update revocation *) let insert_signkey = let insert_signkey = Caqti_type.(signkey_data ->. unit) @@ -60,11 +64,14 @@ let find_denom = Caqti_type.(denomination_hash ->? denom_data) "SELECT denom_pub, (coin).*, valid_from, expire_withdraw, \ expire_deposit, expire_legal, (fee_withdraw).*, (fee_deposit).*, \ - (fee_refresh).*, (fee_refund).*, age_mask, denom_pub_hash, master_sig \ - FROM denominations WHERE denom_pub_hash=$1" + (fee_refresh).*, (fee_refund).*, age_mask, denom_pub_hash, \ + denominations.master_sig, denomination_revocations.master_sig FROM \ + denominations WHERE denom_pub_hash=$1 LEFT JOIN \ + denomination_revocations USING (denominations_serial)" in fun (module Conn : CONN) h_denom_pub -> Conn.find_opt find_denom h_denom_pub +(* note: does not update revocation *) let insert_denom = let insert_denom = Caqti_type.(denom_data ->. unit) @@ -286,6 +293,20 @@ let insert_partner = in fun (module Conn : CONN) v -> Conn.exec insert_partner v +(* +let get_denominations = + let get_denominations = + Caqti_type.(unit ->* denom_data) + "SELECT denominations_serial, denominations.master_sig, \ + denom_revocations_serial_id IS NOT NULL AS revoked, valid_from, \ + expire_withdraw, expire_deposit, expire_legal, coin, fee_withdraw, \ + fee_deposit, fee_refresh, fee_refund, denom_type, age_mask, denom_pub \ + FROM denominations LEFT JOIN denomination_revocations USING \ + (denominations_serial)" + in + fun (module Conn : CONN) -> Conn.collect_list get_denominations () + *) + (* TODO iterate_denominations iterate_active_signkeys diff --git a/src/pg_type.ml b/src/pg_type.ml index 8c2f0298..4d14d19c 100644 --- a/src/pg_type.ml +++ b/src/pg_type.ml @@ -43,28 +43,20 @@ include struct let planchets_hash = HashPlanchetsP.caqti end -(* TODO revoked_sig - revoked_sig default to None, but could actually be revoked - always do a LEFT JOIN on signkey_revocations table? *) let signkey_data = let master_sig = Bin_sig.ExchangeSigningKeyValidity.caqti in + let revoked_sig = option Bin_sig.MasterSigningKeyRevocation.caqti in custom ~encode:(fun Signkey_data. - { - pub; - stamp_start; - stamp_expire; - stamp_end; - master_sig; - revoked_sig= _; - } + { pub; stamp_start; stamp_expire; stamp_end; master_sig; revoked_sig } -> match master_sig with | None -> Error "signkey_data master_sig is none" | Some master_sig -> - Ok (pub, stamp_start, stamp_expire, stamp_end, master_sig)) - ~decode:(fun (pub, stamp_start, stamp_expire, stamp_end, master_sig) -> + Ok (pub, stamp_start, stamp_expire, stamp_end, master_sig, revoked_sig)) + ~decode:(fun + (pub, stamp_start, stamp_expire, stamp_end, master_sig, revoked_sig) -> Ok { pub; @@ -72,12 +64,13 @@ let signkey_data = stamp_expire; stamp_end; master_sig= Some master_sig; - revoked_sig= None; + revoked_sig; }) - (t5 eddsa_pub time time time master_sig) + (t6 eddsa_pub time time time master_sig revoked_sig) let denom_data = let master_sig = Bin_sig.DenominationKeyValidity.caqti in + let revoked_sig = option Bin_sig.MasterDenominationKeyRevocation.caqti in custom ~encode:(fun Denom_data. @@ -95,7 +88,7 @@ let denom_data = age_mask; h_pub; master_sig; - revoked_sig= _; + revoked_sig; } -> match master_sig with @@ -113,7 +106,7 @@ let denom_data = fee_refresh, fee_refund, age_mask, - (h_pub, master_sig) )) + (h_pub, master_sig, revoked_sig) )) ~decode:(fun ( pub, value, @@ -126,7 +119,7 @@ let denom_data = fee_refresh, fee_refund, age_mask, - (h_pub, master_sig) ) + (h_pub, master_sig, revoked_sig) ) -> Ok { @@ -143,10 +136,10 @@ let denom_data = age_mask; h_pub; master_sig= Some master_sig; - revoked_sig= None; + revoked_sig; }) (t12 rsa_pub amount time time time time amount amount amount amount int - (t2 denomination_hash master_sig)) + (t3 denomination_hash master_sig revoked_sig)) let account_restrictions = custom