This commit is contained in:
swrup 2025-12-11 05:41:32 +01:00
parent af09c697b8
commit d192e442b3
5 changed files with 98 additions and 6 deletions

View file

@ -572,8 +572,8 @@ module WireFeeSetupMessage = struct
Signature using the exchange's offline key
with purpose TALER_SIGNATURE_MASTER_WIRE_FEES *)
master_sig_wire: MasterWireFee.t;
fee_start: Amount.t;
fee_end: Amount.t;
fee_start: Timestamp.t;
fee_end: Timestamp.t;
closing_fee: Amount.t;
wire_fee: Amount.t;
}
@ -599,8 +599,8 @@ module WireFeeSetupMessage = struct
map ~kind:"WireFeeSetupMessage" make
|> mem "wire_method" Jsont.string ~enc:wire_method
|> mem "master_sig_wire" MasterWireFee.jsont ~enc:master_sig_wire
|> mem "fee_start" Amount.jsont ~enc:fee_start
|> mem "fee_end" Amount.jsont ~enc:fee_end
|> mem "fee_start" Timestamp.jsont ~enc:fee_start
|> mem "fee_end" Timestamp.jsont ~enc:fee_end
|> mem "closing_fee" Amount.jsont ~enc:closing_fee
|> mem "wire_fee" Amount.jsont ~enc:wire_fee
|> finish

View file

@ -113,3 +113,16 @@ let management_auditors_disable req auditor_pub server _env =
Ok ""
in
respond_with_res res req
let management_wirefee_jsont = WireFeeSetupMessage.jsont
let management_wirefee req server _env =
let open Management in
let db_conn = Vif.Server.device Devices.db_connection server in
let res =
let* v = Vif.Request.of_json req |> unwrap_err_msg in
let* () = verify_wirefee_setup_sig v in
let* () = update_wirefee_setup ~db_conn v in
Ok ""
in
respond_with_res res req

View file

@ -296,3 +296,51 @@ let auditor_disable ~db_conn auditor_pub
|> unwrap_err_caqti
in
()
let verify_wirefee_setup_sig
WireFeeSetupMessage.
{
wire_method;
master_sig_wire;
fee_start;
fee_end;
closing_fee;
wire_fee;
} =
let open Bin_sig.MasterWireFee in
verify ~key:Config.Exchange.master_public_key master_sig_wire
{
h_wire_method= Bin_type.Hash_64_cstr.hash wire_method;
start_date= fee_start;
end_date= fee_end;
wire_fee;
closing_fee;
}
let update_wirefee_setup ~db_conn
WireFeeSetupMessage.
{
wire_method;
master_sig_wire;
fee_start;
fee_end;
closing_fee;
wire_fee;
} =
let* fees_opt =
Pg.lookup_wirefee_by_time db_conn ~wire_method ~start_date:fee_start
~end_date:fee_end
|> unwrap_err_caqti
in
match fees_opt with
| Some (_wire_fee, _closing_fee) ->
Error "wire-fee already setup? wire-fee mismatch"
| None ->
let+ () =
Pg.insert_wirefee db_conn ~wire_method ~start_date:fee_start
~end_date:fee_end ~wire_fee ~closing_fee ~master_sig:master_sig_wire
|> unwrap_err_caqti
in
()
(*[@@@ocaml.warning "-27"]*)

View file

@ -49,6 +49,8 @@ let routes =
(v "management" / "auditors" /% string `Path / "disable")
management_auditors_disable_jsont
--> management_auditors_disable;
post (v "management" / "wire-fee") management_wirefee_jsont
--> management_wirefee;
]
let () =

View file

@ -32,6 +32,9 @@ module Caqti_type = struct
let eddsa_pub = EddsaPublicKey.caqti
let eddsa_sig = EddsaSignature.caqti
(* todo: enum type for wire_method? *)
let wire_method = Caqti_type.string
include struct
(* alias for hash *)
@ -183,8 +186,7 @@ let insert_signkey_revocation =
let lookup_auditor_timestamp =
let lookup_auditor_timestamp =
Caqti_type.(eddsa_pub ->? time)
"lookup_auditor_timestamp SELECT last_change FROM auditors WHERE \
auditor_pub=$1"
"SELECT last_change FROM auditors WHERE auditor_pub=$1"
in
fun (module Conn : CONN) auditor_pub ->
Conn.find_opt lookup_auditor_timestamp auditor_pub
@ -218,3 +220,30 @@ let update_auditor =
->
Conn.exec update_auditor
(auditor_pub, auditor_url, auditor_name, enabled, change_date)
let lookup_wirefee_by_time =
let lookup_wirefee_by_time =
Caqti_type.(t3 wire_method time time ->? t2 amount amount)
"SELECT (wire_fee).*, (closing_fee).* FROM wire_fee WHERE wire_method=$1 \
AND end_date > $2 AND start_date < $3"
in
fun (module Conn : CONN) ~wire_method ~start_date ~end_date ->
Conn.find_opt lookup_wirefee_by_time (wire_method, start_date, end_date)
let insert_wirefee =
let insert_wirefee =
let master_sig = Bin_sig.MasterWireFee.caqti in
Caqti_type.(t6 wire_method time time amount amount master_sig ->. unit)
"INSERT INTO wire_fee (wire_method, start_date, end_date, wire_fee, \
closing_fee, master_sig) VALUES ($1, $2, $3, ($4,$5), ($6,$7), $8)"
in
fun (module Conn : CONN)
~wire_method
~start_date
~end_date
~wire_fee
~closing_fee
~master_sig
->
Conn.exec insert_wirefee
(wire_method, start_date, end_date, wire_fee, closing_fee, master_sig)