From f5351263f19236498c2a337535762925d26783e9 Mon Sep 17 00:00:00 2001 From: georgeee Date: Tue, 21 Jan 2025 13:42:07 +0000 Subject: [PATCH] Decouple Transaction_snark_work types Remove `Stable.Latest.t = t` from interfaces. This is a preparation step for removing the equality in the implementation as well. --- src/lib/mina_lib/mina_lib.ml | 4 +++- src/lib/mina_networking/mina_networking.mli | 2 +- src/lib/mina_networking/rpcs.ml | 2 +- src/lib/staged_ledger_diff/diff.ml | 12 ++++++++---- .../transaction_snark_work.ml | 6 ++++++ .../transaction_snark_work.mli | 14 ++++++++++++-- 6 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/lib/mina_lib/mina_lib.ml b/src/lib/mina_lib/mina_lib.ml index 42b0b91a62f..e0a162fb60e 100644 --- a/src/lib/mina_lib/mina_lib.ml +++ b/src/lib/mina_lib/mina_lib.ml @@ -1579,7 +1579,9 @@ let fetch_completed_snarks (module Context : CONTEXT) snark_pool network let%bind () = Deferred.List.iter completed_works ~f:(fun work -> (* proofs should be verified in apply and broadcast *) - let statement = Transaction_snark_work.statement work in + let statement = + Transaction_snark_work.Stable.Latest.statement work + in let snark = Network_pool.Priced_proof. { proof = work.proofs diff --git a/src/lib/mina_networking/mina_networking.mli b/src/lib/mina_networking/mina_networking.mli index 6ad388060fa..1cdfb33ed94 100644 --- a/src/lib/mina_networking/mina_networking.mli +++ b/src/lib/mina_networking/mina_networking.mli @@ -112,7 +112,7 @@ module Rpcs : sig module Get_completed_snarks : sig type query = unit - type response = Transaction_snark_work.unchecked list option + type response = Transaction_snark_work.Stable.Latest.t list option end type ('query, 'response) rpc = ('query, 'response) Rpcs.rpc = diff --git a/src/lib/mina_networking/rpcs.ml b/src/lib/mina_networking/rpcs.ml index 740ed0fab7b..a611d8c8549 100644 --- a/src/lib/mina_networking/rpcs.ml +++ b/src/lib/mina_networking/rpcs.ml @@ -880,7 +880,7 @@ module Get_completed_snarks = struct | Some snark_pool, Some snark_state -> Work_selector.completed_work_statements ~snark_pool snark_state |> Fn.flip List.take limit - |> List.map ~f:Transaction_snark_work.forget + |> List.map ~f:Transaction_snark_work.(Fn.compose unwrap forget) |> Option.some |> return | _, _ -> return None diff --git a/src/lib/staged_ledger_diff/diff.ml b/src/lib/staged_ledger_diff/diff.ml index e11515b6838..eefae00eae9 100644 --- a/src/lib/staged_ledger_diff/diff.ml +++ b/src/lib/staged_ledger_diff/diff.ml @@ -178,9 +178,11 @@ module Make_str (A : Wire_types.Concrete) = struct type t = (Transaction_snark_work.t, User_command.t With_status.t) Pre_diff_two.t - let generate : Stable.Latest.t -> t = Fn.id + let generate : Stable.Latest.t -> t = + Pre_diff_two.map ~f1:Transaction_snark_work.generate ~f2:Fn.id - let unwrap : t -> Stable.Latest.t = Fn.id + let unwrap : t -> Stable.Latest.t = + Pre_diff_two.map ~f1:Transaction_snark_work.unwrap ~f2:Fn.id end module Pre_diff_with_at_most_one_coinbase = struct @@ -202,9 +204,11 @@ module Make_str (A : Wire_types.Concrete) = struct type t = (Transaction_snark_work.t, User_command.t With_status.t) Pre_diff_one.t - let generate : Stable.Latest.t -> t = Fn.id + let generate : Stable.Latest.t -> t = + Pre_diff_one.map ~f1:Transaction_snark_work.generate ~f2:Fn.id - let unwrap : t -> Stable.Latest.t = Fn.id + let unwrap : t -> Stable.Latest.t = + Pre_diff_one.map ~f1:Transaction_snark_work.unwrap ~f2:Fn.id end module Diff = struct diff --git a/src/lib/transaction_snark_work/transaction_snark_work.ml b/src/lib/transaction_snark_work/transaction_snark_work.ml index ff1f9feb694..f8ed5c70b71 100644 --- a/src/lib/transaction_snark_work/transaction_snark_work.ml +++ b/src/lib/transaction_snark_work/transaction_snark_work.ml @@ -97,6 +97,8 @@ module T = struct } [@@deriving yojson] + let statement t = One_or_two.map t.proofs ~f:Ledger_proof.statement + let to_latest = Fn.id end end] @@ -117,6 +119,10 @@ module T = struct ; fee = t.fee ; prover = t.prover } + + let generate = Fn.id + + let unwrap = Fn.id end include T diff --git a/src/lib/transaction_snark_work/transaction_snark_work.mli b/src/lib/transaction_snark_work/transaction_snark_work.mli index 5b542cd9190..33bc78537a7 100644 --- a/src/lib/transaction_snark_work/transaction_snark_work.mli +++ b/src/lib/transaction_snark_work/transaction_snark_work.mli @@ -61,7 +61,7 @@ module type S = sig val proofs : t -> Ledger_proof.t One_or_two.t end -type t = Mina_wire_types.Transaction_snark_work.V2.t = +type t = { fee : Currency.Fee.t ; proofs : Ledger_proof.t One_or_two.t ; prover : Public_key.Compressed.t @@ -76,9 +76,15 @@ val statement : t -> Statement.t module Stable : sig module V2 : sig type t [@@deriving bin_io, version, yojson] + + val statement : t -> Statement.Stable.V2.t + + val to_latest : t -> t end + + module Latest = V2 end -with type V2.t = t +with type V2.t = Mina_wire_types.Transaction_snark_work.V2.t type unchecked = t @@ -93,3 +99,7 @@ module Checked : sig end val forget : Checked.t -> t + +val generate : Stable.Latest.t -> t + +val unwrap : t -> Stable.Latest.t