From f741dbc7e4958abf47305efed90a8173267eb9da Mon Sep 17 00:00:00 2001 From: swrup Date: Thu, 22 Jan 2026 02:55:51 +0100 Subject: [PATCH] --- src/config.ml | 6 +++++- src/http_keys.ml | 49 ++++++++++++++++++++++++++++++++++++++++++------ src/pg.ml | 2 +- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/config.ml b/src/config.ml index 7c62ffb2..fd098af0 100644 --- a/src/config.ml +++ b/src/config.ml @@ -20,9 +20,13 @@ module Exchange = struct let port = get "port" |> int let bind_to = get "bind_to" let master_public_key = get "master_public_key" |> ed25519 + + (* TODO Defaults to 0.0 if not specified. *) let stefan_abs = get "stefan_abs" |> amount let stefan_log = get "stefan_log" |> amount - let stefan_lin = get_opt "stefan_lin" |> Option.map float + + let stefan_lin = + get_opt "stefan_lin" |> Option.map float |> Option.value ~default:0.0 let aggregator_idle_sleep_interval = get "aggregator_idle_sleep_interval" |> duration diff --git a/src/http_keys.ml b/src/http_keys.ml index ec40ab0e..c19ac2b4 100644 --- a/src/http_keys.ml +++ b/src/http_keys.ml @@ -88,7 +88,9 @@ let mk_keys ~db_conn ~sm ~last_issue_date = let kyc_enabled = false in let disable_direct_deposit = (* todo *) false in let master_public_key = Config.master_public_key in - let reserve_closing_delay = Config.Exchangedb.idle_reserve_expiration_time in + let reserve_closing_delay = + Some Config.Exchangedb.idle_reserve_expiration_time + in (* todo *) let wallet_balance_limit_without_kyc = None in let hard_limits = [] in @@ -110,13 +112,44 @@ let mk_keys ~db_conn ~sm ~last_issue_date = | v :: _ -> v.stamp_start in let denominations = - (* TODO really need to understand and correctly group denoms *) + (* TODO really need to understand and correctly group denoms + 'exchange_sig' depends on correct denom group/order *) List.map denomgroup_of_denomdata denom_data_l in + let* signkeys = + let+ signkey_data_l = Pg.get_active_signkeys db_conn |> unwrap_err_caqti in + let signkey_data_l = + List.sort + (fun a b -> + let open Signkey_data in + Stdlib.compare a.stamp_start b.stamp_start) + signkey_data_l + in + List.map + (fun Signkey_data. + { + pub; + stamp_start; + stamp_expire; + stamp_end; + master_sig; + revoked_sig= _; + } -> + let master_sig = + match master_sig with + | None -> Fmt.failwith "signkey_data without master_sig" + | Some v -> v + in + SignKey.{ key= pub; stamp_start; stamp_expire; stamp_end; master_sig }) + signkey_data_l + in + let exchange_pub = (* the eddsa pub key used to sign exchange_sig *) - Obj.magic "" + match signkeys with + | [] -> Fmt.failwith "exchange has no active signkey" + | v :: _ -> v.SignKey.key in let exchange_sig = (* Compact EdDSA signature (binary-only) over the @@ -139,7 +172,13 @@ let mk_keys ~db_conn ~sm ~last_issue_date = R.{ list_issue_date; hc } in - (* + let recoup = [] in + let global_fees = (* TODO *) [] in + let auditors = (* TODO *) [] in + let extensions = None in + let extensions_sig = None in + Ok + ExchangeKeysResponse. { version; base_url; @@ -175,8 +214,6 @@ let mk_keys ~db_conn ~sm ~last_issue_date = extensions; extensions_sig; } - *) - assert false let jsont = ExchangeKeysResponse.jsont diff --git a/src/pg.ml b/src/pg.ml index 1a2dce80..7ff7a010 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -61,7 +61,7 @@ let get_active_signkeys = esk_serial FROM signkey_revocations skr WHERE esk.esk_serial = \ skr.esk_serial)" in - fun (module Conn : CONN) () -> + fun (module Conn : CONN) -> let now = Ptime_clock.now () |> Option.some in Conn.collect_list get_active_signkeys now