From 84a788f22c861dcfa1701415641f837840cd28bf Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Wed, 2 Oct 2024 08:09:35 +0200 Subject: [PATCH] PVM Sig extension to add Request_adal_page case --- src/lib_wasm_debugger/commands.ml | 3 ++ .../lib_protocol/alpha_context.mli | 4 ++ .../lib_protocol/sc_rollup_PVM_sig.ml | 45 ++++++++++++++++++- .../lib_protocol/sc_rollup_arith.ml | 10 +++++ .../lib_protocol/sc_rollup_proof_repr.ml | 7 +++ .../test/helpers/sc_rollup_helpers.ml | 6 ++- .../lib_sc_rollup_node/fueled_pvm.ml | 8 ++++ .../lib_sc_rollup_node/wasm_2_0_0_pvm.ml | 3 ++ 8 files changed, 84 insertions(+), 2 deletions(-) diff --git a/src/lib_wasm_debugger/commands.ml b/src/lib_wasm_debugger/commands.ml index 876a0f349c65..e718f1d08644 100644 --- a/src/lib_wasm_debugger/commands.ml +++ b/src/lib_wasm_debugger/commands.ml @@ -433,6 +433,9 @@ let reveals config request = supported by the debugger." | Request_dal_page {slot_id = {published_level; index}; page_index} -> request_dal_page config num_retries published_level index page_index + | Request_adal_page _ -> + (* ADAL/FIXME : Handle this case for adaptive DAL. *) + assert false let write_debug_default config = if config.Config.kernel_debug then diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 4b1a74503981..361147f9d745 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -3250,6 +3250,10 @@ module Sc_rollup : sig | Reveal_raw_data of Sc_rollup_reveal_hash.t | Reveal_metadata | Request_dal_page of Dal.Page.t + | Request_adal_page of { + page_id : Dal.Page.t; + attestation_threshold_per_mil : int; + } | Reveal_dal_parameters type is_reveal_enabled = current_block_level:Raw_level.t -> reveal -> bool diff --git a/src/proto_alpha/lib_protocol/sc_rollup_PVM_sig.ml b/src/proto_alpha/lib_protocol/sc_rollup_PVM_sig.ml index 2fe94f9cbf47..8e8cc6c62f5c 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_PVM_sig.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_PVM_sig.ml @@ -218,6 +218,10 @@ type reveal = | Reveal_raw_data of Sc_rollup_reveal_hash.t | Reveal_metadata | Request_dal_page of Dal_slot_repr.Page.t + | Request_adal_page of { + page_id : Dal_slot_repr.Page.t; + attestation_threshold_per_mil : int; + } | Reveal_dal_parameters (** Request DAL parameters that were used for the slots published at the current inbox level. *) @@ -260,7 +264,29 @@ let reveal_encoding = (function Reveal_dal_parameters -> Some () | _ -> None) (fun () -> Reveal_dal_parameters) in - union [case_raw_data; case_metadata; case_dal_page; case_dal_parameters] + let case_adal_page = + case + ~title:"Request_adaptive_dal_page" + (Tag 4) + (obj3 + (kind "request_adaptive_dal_page") + (req "page_id" Dal_slot_repr.Page.encoding) + (req "attestation_threshold_per_mil" uint16)) + (function + | Request_adal_page {page_id; attestation_threshold_per_mil} -> + Some ((), page_id, attestation_threshold_per_mil) + | _ -> None) + (fun ((), page_id, attestation_threshold_per_mil) -> + Request_adal_page {page_id; attestation_threshold_per_mil}) + in + union + [ + case_raw_data; + case_metadata; + case_dal_page; + case_dal_parameters; + case_adal_page; + ] (** [is_reveal_enabled] is the type of a predicate that tells if a kind of reveal is activated at a certain block level. *) @@ -277,6 +303,10 @@ let is_reveal_enabled_predicate | Blake2B -> t.raw_data.blake2B) | Reveal_metadata -> t.metadata | Request_dal_page _ -> t.dal_page + | Request_adal_page _ -> + (* ADAL/FIXME: In this POC, we say that adaptive DAL is enabled if DAL is, + but we may want to change this in case of integration into master. *) + t.dal_page | Reveal_dal_parameters -> t.dal_parameters in Raw_level_repr.(current_block_level >= activation_level) @@ -341,6 +371,13 @@ let pp_reveal fmt = function | Reveal_raw_data hash -> Sc_rollup_reveal_hash.pp fmt hash | Reveal_metadata -> Format.pp_print_string fmt "Reveal metadata" | Request_dal_page id -> Dal_slot_repr.Page.pp fmt id + | Request_adal_page {page_id; attestation_threshold_per_mil} -> + Format.fprintf + fmt + "%a[%d]" + Dal_slot_repr.Page.pp + page_id + attestation_threshold_per_mil | Reveal_dal_parameters -> Format.pp_print_string fmt "Reveal DAL parameters" (** [pp_input_request fmt i] pretty prints the given input [i] to the formatter @@ -368,6 +405,12 @@ let reveal_equal p1 p2 = | Reveal_metadata, _ -> false | Request_dal_page a, Request_dal_page b -> Dal_slot_repr.Page.equal a b | Request_dal_page _, _ -> false + | Request_adal_page a, Request_adal_page b -> + Dal_slot_repr.Page.equal a.page_id b.page_id + && Compare.Int.equal + a.attestation_threshold_per_mil + b.attestation_threshold_per_mil + | Request_adal_page _, _ -> false | Reveal_dal_parameters, Reveal_dal_parameters -> true | Reveal_dal_parameters, _ -> false diff --git a/src/proto_alpha/lib_protocol/sc_rollup_arith.ml b/src/proto_alpha/lib_protocol/sc_rollup_arith.ml index 6962e7fec37d..eaf761996722 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_arith.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_arith.ml @@ -999,6 +999,9 @@ module Make (Context : Sc_rollup_PVM_sig.Generic_pvm_context_sig) : return PS.(Needs_reveal Reveal_metadata) | Waiting_for_reveal (Request_dal_page page) -> return PS.(Needs_reveal (Request_dal_page page)) + | Waiting_for_reveal (Request_adal_page _) -> + (* ADAL: not supported for PVM Arith *) + assert false | Waiting_for_reveal Reveal_dal_parameters -> return PS.(Needs_reveal Reveal_dal_parameters) | Halted | Parsing | Evaluating -> return PS.No_input_required @@ -1144,6 +1147,9 @@ module Make (Context : Sc_rollup_PVM_sig.Generic_pvm_context_sig) : distinct states if we don't want this to happen. *) let* () = Required_reveal.set None in Status.set Waiting_for_input_message + | _, Some (Request_adal_page _) -> + (* ADAL: not supported. *) + assert false let set_inbox_message_monadic {PS.inbox_level; message_counter; payload} = let open Monad.Syntax in @@ -1609,7 +1615,11 @@ module Make (Context : Sc_rollup_PVM_sig.Generic_pvm_context_sig) : error "Invalid set_input: expecting a dal page reveal, got an inbox \ message or a raw data reveal." + | PS.Needs_reveal (PS.Request_adal_page _), _ -> + (* ADAL: not supported. *) + assert false in + return (state, request) type error += Arith_proof_verification_failed diff --git a/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml b/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml index 562fa70d00ca..581f1800804c 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml @@ -440,10 +440,14 @@ let valid (type state proof output) | ( Some (Reveal_proof Dal_parameters_proof), Needs_reveal Reveal_dal_parameters ) -> return_unit + | Some (Reveal_proof _), Needs_reveal (Request_dal_page _pid) -> + (* ADAL/FIXME: implement refutation games for adaptive DAL. *) + assert false | None, (Initial | First_after _ | Needs_reveal _) | Some _, No_input_required | Some (Inbox_proof _), Needs_reveal _ | _ -> + (* ADAL/TODO: Remove this fragile pattern matching. *) proof_error "Inbox proof and input request are dissociated." in return (input, input_requested) @@ -565,6 +569,9 @@ let produce ~metadata pvm_and_state commit_inbox_level ~is_reveal_enabled = ~get_history ~dal_attested_slots_validity_lag confirmed_slots_history + | Needs_reveal (Request_adal_page _info) -> + (* ADAL/FIXME: Implement refutations for adaptive DAL *) + assert false | Needs_reveal Reveal_dal_parameters -> let open Dal_with_history in return diff --git a/src/proto_alpha/lib_protocol/test/helpers/sc_rollup_helpers.ml b/src/proto_alpha/lib_protocol/test/helpers/sc_rollup_helpers.ml index 133a589ecd60..36ecefd78ba3 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/sc_rollup_helpers.ml +++ b/src/proto_alpha/lib_protocol/test/helpers/sc_rollup_helpers.ml @@ -874,8 +874,12 @@ struct | Needs_reveal Reveal_metadata | Needs_reveal Reveal_dal_parameters | Initial | First_after _ -> - return (state, fuel, tick, our_states)) + return (state, fuel, tick, our_states) + | Needs_reveal (Request_adal_page _) -> + (* ADAL/FIXME: to be implemented if needed. *) + assert false) in + go ~our_states fuel start_tick state let eval_metadata ~fuel ~our_states tick state ~metadata = diff --git a/src/proto_alpha/lib_sc_rollup_node/fueled_pvm.ml b/src/proto_alpha/lib_sc_rollup_node/fueled_pvm.ml index 83a9d80d547b..4ea839c86026 100644 --- a/src/proto_alpha/lib_sc_rollup_node/fueled_pvm.ml +++ b/src/proto_alpha/lib_sc_rollup_node/fueled_pvm.ml @@ -174,7 +174,11 @@ module Make_fueled (F : Fuel.S) : FUELED_PVM with type fuel = F.t = struct (Data_encoding.Binary.to_string_exn Sc_rollup.Dal_parameters.encoding dal_parameters) + | Request_adal_page _ -> + (* ADAL/FIXME: to be implemented. *) + assert false in + let eval_tick_consume_fuel fuel failing_ticks state = let max_steps = F.max_ticks fuel in let normal_eval ?(max_steps = max_steps) state fuel = @@ -318,7 +322,11 @@ module Make_fueled (F : Fuel.S) : FUELED_PVM with type fuel = F.t = struct go fuel (Int64.succ current_tick) failing_ticks next_state) | Initial | First_after _ -> complete state fuel current_tick failing_ticks + | Needs_reveal (Request_adal_page _) -> + (* ADAL/FIXME: to be implemented. *) + assert false in + go fuel start_tick failing_ticks (PVM.Ctxt_wrapper.of_node_pvmstate state) (** [mutate input] corrupts the payload of [input] for testing purposes. *) diff --git a/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_pvm.ml b/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_pvm.ml index b2d5d76c6693..ce6efc33d198 100644 --- a/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_pvm.ml +++ b/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_pvm.ml @@ -201,6 +201,9 @@ module Impl : Pvm_sig.S with type Unsafe_patches.t = unsafe_patch = struct | Waiting_for_reveal Sc_rollup.Reveal_dal_parameters -> "Waiting for DAL parameters" | Computing -> "Computing" + | Waiting_for_reveal (Request_adal_page _) -> + (* ADAL/FIXME: to be implemented. *) + assert false let eval_many ~reveal_builtins ~write_debug ~is_reveal_enabled:_ = Backend.compute_step_many -- GitLab