diff --git a/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml b/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml index ab8f6d35d7bae5e8a2f84f5e81342a6f2b1030ef..1405bf4479a2896184bdec5d074b7aa1a9c6e1d1 100644 --- a/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml +++ b/src/proto_016_PtMumbai/lib_delegate/state_transitions.ml @@ -783,6 +783,40 @@ let handle_expected_applied_proposal (state : Baking_state.t) = candidate preendorsement_qc +module P_set = Set.Make (struct + type t = Kind.preendorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +module E_set = Set.Make (struct + type t = Kind.endorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +let assert_pqc loc pqc = + List.fold_left + (fun set op -> + if P_set.mem op set then ( + Format.printf "wrong PQC at line %s@." loc ; + assert false) + else P_set.add op set) + P_set.empty + pqc + |> ignore + +let assert_eqc loc eqc = + List.fold_left + (fun set op -> + if E_set.mem op set then ( + Format.printf "wrong EQC at line %s@." loc ; + assert false) + else E_set.add op set) + E_set.empty + eqc + |> ignore + (* Hypothesis: - The state is not to be modified outside this module (NB: there are exceptions in Baking_actions: the corner cases @@ -863,6 +897,7 @@ let step (state : Baking_state.t) (event : Baking_state.event) : Events.(emit new_valid_proposal_while_waiting_for_qc ()) >>= fun () -> handle_proposal ~is_proposal_applied:false state proposal | Awaiting_application, Prequorum_reached (candidate, preendorsement_qc) -> + assert_pqc __LOC__ preendorsement_qc ; may_register_early_prequorum state (candidate, preendorsement_qc) | Awaiting_preendorsements, Prequorum_reached (candidate, preendorsement_qc) -> @@ -871,11 +906,16 @@ let step (state : Baking_state.t) (event : Baking_state.event) : candidate preendorsement_qc | Awaiting_endorsements, Quorum_reached (candidate, endorsement_qc) -> + assert_eqc __LOC__ endorsement_qc ; quorum_reached_when_waiting_endorsements state candidate endorsement_qc (* Unreachable cases *) - | Idle, (Prequorum_reached _ | Quorum_reached _) - | Awaiting_preendorsements, Quorum_reached _ - | Awaiting_endorsements, Prequorum_reached _ - | Awaiting_application, Quorum_reached _ -> + | Idle, Prequorum_reached (_, pqc) + | Awaiting_endorsements, Prequorum_reached (_, pqc) -> + assert_pqc __LOC__ pqc ; + do_nothing state + | Idle, Quorum_reached (_, eqc) + | Awaiting_preendorsements, Quorum_reached (_, eqc) + | Awaiting_application, Quorum_reached (_, eqc) -> + assert_eqc __LOC__ eqc ; (* This cannot/should not happen *) do_nothing state diff --git a/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml b/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml index 1319d3df51d97f72bece6925b7d5fad5e1c41150..6de60c59883feac81c2b9bf5ca1898e0f8786d9b 100644 --- a/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml +++ b/src/proto_016_PtMumbai/lib_delegate/test/mockup_simulator/faked_daemon.ml @@ -16,7 +16,8 @@ module Baker = struct let canceler = Lwt_canceler.create () in let on_error (err : error trace) = Lwt_canceler.cancel canceler >>= fun _ -> - failwith "%a" Error_monad.pp_print_trace err + Format.printf "%a" Error_monad.pp_print_trace err ; + Lwt_exit.exit_and_raise 1 in Baking_scheduling.run cctxt diff --git a/src/proto_alpha/lib_delegate/state_transitions.ml b/src/proto_alpha/lib_delegate/state_transitions.ml index 9df396e48fb5a48564c4e4e31fde53218ace38e2..d33335e4a20ab7ac21c18137a641f39afb86e9fb 100644 --- a/src/proto_alpha/lib_delegate/state_transitions.ml +++ b/src/proto_alpha/lib_delegate/state_transitions.ml @@ -800,6 +800,40 @@ let handle_expected_applied_proposal (state : Baking_state.t) = candidate preendorsement_qc +module P_set = Set.Make (struct + type t = Kind.preendorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +module E_set = Set.Make (struct + type t = Kind.endorsement Alpha_context.operation + + let compare = Stdlib.compare +end) + +let assert_pqc loc pqc = + List.fold_left + (fun set op -> + if P_set.mem op set then ( + Format.printf "wrong PQC at line %s@." loc ; + assert false) + else P_set.add op set) + P_set.empty + pqc + |> ignore + +let assert_eqc loc eqc = + List.fold_left + (fun set op -> + if E_set.mem op set then ( + Format.printf "wrong EQC at line %s@." loc ; + assert false) + else E_set.add op set) + E_set.empty + eqc + |> ignore + (* Hypothesis: - The state is not to be modified outside this module (NB: there are exceptions in Baking_actions: the corner cases @@ -880,6 +914,7 @@ let step (state : Baking_state.t) (event : Baking_state.event) : Events.(emit new_valid_proposal_while_waiting_for_qc ()) >>= fun () -> handle_proposal ~is_proposal_applied:false state proposal | Awaiting_application, Prequorum_reached (candidate, preendorsement_qc) -> + assert_pqc __LOC__ preendorsement_qc ; may_register_early_prequorum state (candidate, preendorsement_qc) | Awaiting_preendorsements, Prequorum_reached (candidate, preendorsement_qc) -> @@ -888,11 +923,16 @@ let step (state : Baking_state.t) (event : Baking_state.event) : candidate preendorsement_qc | Awaiting_endorsements, Quorum_reached (candidate, endorsement_qc) -> + assert_eqc __LOC__ endorsement_qc ; quorum_reached_when_waiting_endorsements state candidate endorsement_qc (* Unreachable cases *) - | Idle, (Prequorum_reached _ | Quorum_reached _) - | Awaiting_preendorsements, Quorum_reached _ - | Awaiting_endorsements, Prequorum_reached _ - | Awaiting_application, Quorum_reached _ -> + | Idle, Quorum_reached (_, eqc) + | Awaiting_preendorsements, Quorum_reached (_, eqc) + | Awaiting_application, Quorum_reached (_, eqc) -> + assert_eqc __LOC__ eqc ; + do_nothing state + | Idle, Prequorum_reached (_, pqc) + | Awaiting_endorsements, Prequorum_reached (_, pqc) -> (* This cannot/should not happen *) + assert_pqc __LOC__ pqc ; do_nothing state diff --git a/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml b/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml index 1319d3df51d97f72bece6925b7d5fad5e1c41150..6de60c59883feac81c2b9bf5ca1898e0f8786d9b 100644 --- a/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml +++ b/src/proto_alpha/lib_delegate/test/mockup_simulator/faked_daemon.ml @@ -16,7 +16,8 @@ module Baker = struct let canceler = Lwt_canceler.create () in let on_error (err : error trace) = Lwt_canceler.cancel canceler >>= fun _ -> - failwith "%a" Error_monad.pp_print_trace err + Format.printf "%a" Error_monad.pp_print_trace err ; + Lwt_exit.exit_and_raise 1 in Baking_scheduling.run cctxt