From 69281dab1ba91bfd35fbc41a7e8b30fe548c1c9f Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Tue, 30 Jan 2024 09:10:26 +0100 Subject: [PATCH 1/6] Proto/constants: add field to bound levels of DAL slots a rollup can import --- .../files/alpha__constants.ksy | 2 ++ .../files/alpha__constants__parametric.ksy | 2 ++ .../files/alpha__parameters.ksy | 2 ++ src/lib_smart_rollup/rollup_constants.ml | 1 + .../node_context_loader.ml | 1 + .../test/helpers/helpers.ml | 8 ++++- .../sc_rollup_proto_types.ml | 10 +++++-- .../lib_parameters/default_parameters.ml | 18 +++++++++-- .../lib_parameters/default_parameters.mli | 5 +++- .../lib_protocol/alpha_context.mli | 1 + .../lib_protocol/constants_parametric_repr.ml | 30 +++++++++++++++---- .../constants_parametric_repr.mli | 1 + src/proto_alpha/lib_protocol/raw_context.ml | 8 +++++ .../test/integration/test_constants.ml | 1 + .../test/unit/test_sc_rollup_arith.ml | 1 + .../sc_rollup_proto_types.ml | 22 +++++++++++--- ...t) RPC regression tests- misc_protocol.out | 4 ++- ...t) RPC regression tests- misc_protocol.out | 4 ++- ...y) RPC regression tests- misc_protocol.out | 4 ++- ...r) RPC regression tests- misc_protocol.out | 4 ++- ...c) RPC regression tests- misc_protocol.out | 4 ++- 21 files changed, 113 insertions(+), 20 deletions(-) diff --git a/contrib/kaitai-struct-files/files/alpha__constants.ksy b/contrib/kaitai-struct-files/files/alpha__constants.ksy index 83f23985dbd1..19fa2c0fd159 100644 --- a/contrib/kaitai-struct-files/files/alpha__constants.ksy +++ b/contrib/kaitai-struct-files/files/alpha__constants.ksy @@ -161,6 +161,8 @@ types: type: s4 - id: dal_parameters type: s4 + - id: dal_attested_slots_validity_lag + type: int31 z: seq: - id: has_tail diff --git a/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy b/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy index cddf94099bcb..5bd0ece08871 100644 --- a/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy +++ b/contrib/kaitai-struct-files/files/alpha__constants__parametric.ksy @@ -161,6 +161,8 @@ types: type: s4 - id: dal_parameters type: s4 + - id: dal_attested_slots_validity_lag + type: int31 z: seq: - id: has_tail diff --git a/contrib/kaitai-struct-files/files/alpha__parameters.ksy b/contrib/kaitai-struct-files/files/alpha__parameters.ksy index 5979bfa3ec3e..7adea7423c07 100644 --- a/contrib/kaitai-struct-files/files/alpha__parameters.ksy +++ b/contrib/kaitai-struct-files/files/alpha__parameters.ksy @@ -385,6 +385,8 @@ types: type: s4 - id: dal_parameters type: s4 + - id: dal_attested_slots_validity_lag + type: int31 whitelist: seq: - id: whitelist_entries diff --git a/src/lib_smart_rollup/rollup_constants.ml b/src/lib_smart_rollup/rollup_constants.ml index 8f199b5efe34..caed70d3f331 100644 --- a/src/lib_smart_rollup/rollup_constants.ml +++ b/src/lib_smart_rollup/rollup_constants.ml @@ -37,6 +37,7 @@ type reveal_activation_level = { metadata : int32; dal_page : int32; dal_parameters : int32; + dal_attested_slots_validity_lag : int32; } type sc_rollup_constants = { diff --git a/src/lib_smart_rollup_node/node_context_loader.ml b/src/lib_smart_rollup_node/node_context_loader.ml index 1d2af051da90..886b23391801 100644 --- a/src/lib_smart_rollup_node/node_context_loader.ml +++ b/src/lib_smart_rollup_node/node_context_loader.ml @@ -333,6 +333,7 @@ module Internal_for_tests = struct metadata = 0l; dal_page = 0l; dal_parameters = 0l; + dal_attested_slots_validity_lag = Int32.max_int; }; max_number_of_stored_cemented_commitments = 0; }; diff --git a/src/lib_smart_rollup_node/test/helpers/helpers.ml b/src/lib_smart_rollup_node/test/helpers/helpers.ml index 7ce69f5fd311..c2934152e2e5 100644 --- a/src/lib_smart_rollup_node/test/helpers/helpers.ml +++ b/src/lib_smart_rollup_node/test/helpers/helpers.ml @@ -52,7 +52,13 @@ let default_constants = commitment_period_in_blocks = 3; reveal_activation_level = Some - {blake2B = 0l; metadata = 0l; dal_page = 0l; dal_parameters = 0l}; + { + blake2B = 0l; + metadata = 0l; + dal_page = 0l; + dal_parameters = 0l; + dal_attested_slots_validity_lag = Int32.max_int; + }; max_number_of_stored_cemented_commitments = 5; }; dal = diff --git a/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_proto_types.ml b/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_proto_types.ml index bfb1ac323f7d..af0bdc22a387 100644 --- a/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_proto_types.ml +++ b/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_proto_types.ml @@ -453,8 +453,13 @@ module Constants = struct let reveal_activation_level_of_octez Octez_smart_rollup.Rollup_constants. - {blake2B; metadata; dal_page; dal_parameters} : reveal_activation_level - = + { + blake2B; + metadata; + dal_page; + dal_parameters; + dal_attested_slots_validity_lag = _; + } : reveal_activation_level = { raw_data = {blake2B = Raw_level.of_int32_exn blake2B}; metadata = Raw_level.of_int32_exn metadata; @@ -471,5 +476,6 @@ module Constants = struct metadata = Raw_level.to_int32 metadata; dal_page = Raw_level.to_int32 dal_page; dal_parameters = Raw_level.to_int32 dal_parameters; + dal_attested_slots_validity_lag = Int32.max_int; } end diff --git a/src/proto_alpha/lib_parameters/default_parameters.ml b/src/proto_alpha/lib_parameters/default_parameters.ml index 70b30e51b148..e9473dcf85e9 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.ml +++ b/src/proto_alpha/lib_parameters/default_parameters.ml @@ -31,7 +31,8 @@ let seconds_in_a_day = 60 * 60 * 24 let seconds_in_a_week = seconds_in_a_day * 7 -let make_sc_rollup_parameter ~dal_activation_level block_time = +let make_sc_rollup_parameter ~dal_activation_level + ~dal_attested_slots_validity_lag block_time = (* Maximum number of outbox messages per level. WARNING: changing this value impacts the storage size a rollup has to @@ -120,6 +121,7 @@ let make_sc_rollup_parameter ~dal_activation_level block_time = metadata = Raw_level.root; dal_page = dal_activation_level; dal_parameters = dal_activation_level; + dal_attested_slots_validity_lag; }; private_enable = true; riscv_pvm_enable = false; @@ -179,7 +181,19 @@ let constants_mainnet : Constants.Parametric.t = exception with the value [Int32.int_min] (see tezt/tests/mockup.ml). *) Raw_level.of_int32_exn Int32.(pred max_int) in - let sc_rollup = make_sc_rollup_parameter ~dal_activation_level block_time in + let dal_attested_slots_validity_lag = + (* A rollup node shouldn't import a page of an attested slot whose attested level is too + far in the past w.r.t. the current level. Importation window is fixed to + 161_280 levels below. It is the number of blocks produced during 28 days + (4 weeks) with a block time of 15 seconds. *) + 161_280 + in + let sc_rollup = + make_sc_rollup_parameter + ~dal_activation_level + ~dal_attested_slots_validity_lag + block_time + in { consensus_rights_delay = 2; blocks_preservation_cycles = 1; diff --git a/src/proto_alpha/lib_parameters/default_parameters.mli b/src/proto_alpha/lib_parameters/default_parameters.mli index bc28be2d209e..0dd084324d2b 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.mli +++ b/src/proto_alpha/lib_parameters/default_parameters.mli @@ -55,5 +55,8 @@ val json_of_parameters : module Internal_for_tests : sig val make_sc_rollup_parameter : - dal_activation_level:Raw_level.t -> int -> Constants.Parametric.sc_rollup + dal_activation_level:Raw_level.t -> + dal_attested_slots_validity_lag:int -> + int -> + Constants.Parametric.sc_rollup end diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 372d92abafdc..1ae3b7612583 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -838,6 +838,7 @@ module Constants : sig metadata : Raw_level.t; dal_page : Raw_level.t; dal_parameters : Raw_level.t; + dal_attested_slots_validity_lag : int; } type sc_rollup = { diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml index 0f7414b51fd4..f64391c53866 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml @@ -90,6 +90,10 @@ type sc_rollup_reveal_activation_level = { metadata : Raw_level_repr.t; dal_page : Raw_level_repr.t; dal_parameters : Raw_level_repr.t; + (* Once a DAL slot is attested, a rollup can only import it within the range + of levels [attested_level; attested_level + + dal_attested_slots_validity_lag]. *) + dal_attested_slots_validity_lag : int; } let sc_rollup_reveal_hashing_schemes_encoding = @@ -103,14 +107,30 @@ let sc_rollup_reveal_activation_level_encoding : sc_rollup_reveal_activation_level Data_encoding.t = let open Data_encoding in conv - (fun t -> (t.raw_data, t.metadata, t.dal_page, t.dal_parameters)) - (fun (raw_data, metadata, dal_page, dal_parameters) -> - {raw_data; metadata; dal_page; dal_parameters}) - (obj4 + (fun t -> + ( t.raw_data, + t.metadata, + t.dal_page, + t.dal_parameters, + t.dal_attested_slots_validity_lag )) + (fun ( raw_data, + metadata, + dal_page, + dal_parameters, + dal_attested_slots_validity_lag ) -> + { + raw_data; + metadata; + dal_page; + dal_parameters; + dal_attested_slots_validity_lag; + }) + (obj5 (req "raw_data" sc_rollup_reveal_hashing_schemes_encoding) (req "metadata" Raw_level_repr.encoding) (req "dal_page" Raw_level_repr.encoding) - (req "dal_parameters" Raw_level_repr.encoding)) + (req "dal_parameters" Raw_level_repr.encoding) + (req "dal_attested_slots_validity_lag" Data_encoding.int31)) type sc_rollup = { arith_pvm_enable : bool; diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli index eb61c83f8451..da434f1c42b8 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.mli +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.mli @@ -44,6 +44,7 @@ type sc_rollup_reveal_activation_level = { metadata : Raw_level_repr.t; dal_page : Raw_level_repr.t; dal_parameters : Raw_level_repr.t; + dal_attested_slots_validity_lag : int; } type sc_rollup = { diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index c67c6343d8fd..e0f9840cdc1f 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -1074,6 +1074,13 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = tezt/tests/mockup.ml). *) Raw_level_repr.of_int32_exn Int32.(pred max_int) in + let dal_attested_slots_validity_lag = + (* A rollup node shouldn't import an attested whose attested level in too + far in the past w.r.t. the current level. Importation window is fixed to + 161_280 levels below. It is the number of blocks produced during 28 days + (4 weeks) with a block time of 15 seconds. *) + 161_280 + in let reveal_activation_level : Constants_parametric_repr.sc_rollup_reveal_activation_level = let ({ @@ -1091,6 +1098,7 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = metadata; dal_page = dal_activation_level; dal_parameters = dal_activation_level; + dal_attested_slots_validity_lag; } in let sc_rollup = diff --git a/src/proto_alpha/lib_protocol/test/integration/test_constants.ml b/src/proto_alpha/lib_protocol/test/integration/test_constants.ml index 4020c744c579..1887f93c4134 100644 --- a/src/proto_alpha/lib_protocol/test/integration/test_constants.ml +++ b/src/proto_alpha/lib_protocol/test/integration/test_constants.ml @@ -47,6 +47,7 @@ let test_sc_rollup_constants_consistency () = let block_time = 10 in let sc_rollup = Default_parameters.Internal_for_tests.make_sc_rollup_parameter + ~dal_attested_slots_validity_lag:161_280 ~dal_activation_level:Raw_level.root block_time in diff --git a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml index 8d129bc37f2d..84a01a79da6b 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml @@ -374,6 +374,7 @@ let test_reveal ~threshold ~inbox_level ~hash ~preimage_reveal_step metadata = Protocol.Raw_level_repr.root; dal_page = Protocol.Raw_level_repr.root; dal_parameters = Protocol.Raw_level_repr.root; + dal_attested_slots_validity_lag = 161_280; } in let is_reveal_enabled = diff --git a/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_proto_types.ml b/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_proto_types.ml index bfb1ac323f7d..79fca0a3799d 100644 --- a/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_proto_types.ml +++ b/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_proto_types.ml @@ -453,23 +453,37 @@ module Constants = struct let reveal_activation_level_of_octez Octez_smart_rollup.Rollup_constants. - {blake2B; metadata; dal_page; dal_parameters} : reveal_activation_level - = + { + blake2B; + metadata; + dal_page; + dal_parameters; + dal_attested_slots_validity_lag; + } : reveal_activation_level = { raw_data = {blake2B = Raw_level.of_int32_exn blake2B}; metadata = Raw_level.of_int32_exn metadata; dal_page = Raw_level.of_int32_exn dal_page; dal_parameters = Raw_level.of_int32_exn dal_parameters; + dal_attested_slots_validity_lag = + Int32.to_int dal_attested_slots_validity_lag; } let reveal_activation_level_to_octez Constants.Parametric. - {raw_data = {blake2B}; metadata; dal_page; dal_parameters} : - Octez_smart_rollup.Rollup_constants.reveal_activation_level = + { + raw_data = {blake2B}; + metadata; + dal_page; + dal_parameters; + dal_attested_slots_validity_lag; + } : Octez_smart_rollup.Rollup_constants.reveal_activation_level = { blake2B = Raw_level.to_int32 blake2B; metadata = Raw_level.to_int32 metadata; dal_page = Raw_level.to_int32 dal_page; dal_parameters = Raw_level.to_int32 dal_parameters; + dal_attested_slots_validity_lag = + Int32.of_int dal_attested_slots_validity_lag; } end diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out index d8135ede97b1..2276600cd611 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out @@ -55,7 +55,9 @@ "smart_rollup_max_number_of_parallel_games": 32, "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, - "dal_parameters": 2147483646 }, "smart_rollup_private_enable": true, + "dal_parameters": 2147483646, + "dal_attested_slots_validity_lag": 161280 }, + "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, "zk_rollup_max_ticket_payload_size": 2048, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out index 45fa33e0a8ff..eb742f57cd3d 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out @@ -55,7 +55,9 @@ "smart_rollup_max_number_of_parallel_games": 32, "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, - "dal_parameters": 2147483646 }, "smart_rollup_private_enable": true, + "dal_parameters": 2147483646, + "dal_attested_slots_validity_lag": 161280 }, + "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, "zk_rollup_max_ticket_payload_size": 2048, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out index 36e4b18f568a..e3bffd81f67e 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out @@ -55,7 +55,9 @@ "smart_rollup_max_number_of_parallel_games": 32, "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, - "dal_parameters": 2147483646 }, "smart_rollup_private_enable": true, + "dal_parameters": 2147483646, + "dal_attested_slots_validity_lag": 161280 }, + "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, "zk_rollup_max_ticket_payload_size": 2048, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out index ee32b3da1c7f..5fd0f91fa8be 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out @@ -55,7 +55,9 @@ "smart_rollup_max_number_of_parallel_games": 32, "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, - "dal_parameters": 2147483646 }, "smart_rollup_private_enable": true, + "dal_parameters": 2147483646, + "dal_attested_slots_validity_lag": 161280 }, + "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, "zk_rollup_max_ticket_payload_size": 2048, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out index ee32b3da1c7f..5fd0f91fa8be 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out @@ -55,7 +55,9 @@ "smart_rollup_max_number_of_parallel_games": 32, "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, - "dal_parameters": 2147483646 }, "smart_rollup_private_enable": true, + "dal_parameters": 2147483646, + "dal_attested_slots_validity_lag": 161280 }, + "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, "zk_rollup_max_ticket_payload_size": 2048, -- GitLab From f28b485e5607ddff8f86b1b301fa5b86f3ff0b90 Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 8 Feb 2024 16:04:26 +0100 Subject: [PATCH 2/6] Proto/Dal: prepare usage of dal_attested_slots_validity_lag --- .../lib_protocol/alpha_context.mli | 5 ++ .../lib_protocol/sc_rollup_game_repr.ml | 8 ++- .../lib_protocol/sc_rollup_game_repr.mli | 1 + .../lib_protocol/sc_rollup_proof_repr.ml | 15 ++++-- .../lib_protocol/sc_rollup_proof_repr.mli | 4 ++ .../sc_rollup_refutation_storage.ml | 4 ++ .../test/helpers/sc_rollup_helpers.ml | 5 ++ .../test/unit/test_sc_rollup_arith.ml | 4 ++ .../test/unit/test_sc_rollup_game.ml | 4 ++ .../lib_sc_rollup_node/dal_pages_request.ml | 10 ++-- .../lib_sc_rollup_node/dal_pages_request.mli | 2 + .../lib_sc_rollup_node/fueled_pvm.ml | 8 +++ .../refutation_game_helpers.ml | 50 +++++++++++-------- 13 files changed, 89 insertions(+), 31 deletions(-) diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 1ae3b7612583..c216f7941a12 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -3843,6 +3843,8 @@ module Sc_rollup : sig val dal_number_of_slots : int val dal_activation_level : Raw_level.t option + + val dal_attested_slots_validity_lag : int end end @@ -3859,6 +3861,7 @@ module Sc_rollup : sig dal_attestation_lag:int -> dal_number_of_slots:int -> is_reveal_enabled:is_reveal_enabled -> + dal_attested_slots_validity_lag:int -> 'proof t -> (input option * input_request) tzresult Lwt.t @@ -3877,6 +3880,7 @@ module Sc_rollup : sig origination_level:Raw_level.t -> commit_inbox_level:Raw_level.t -> Dal.Slot.Header.id -> + dal_attested_slots_validity_lag:int -> bool end end @@ -3985,6 +3989,7 @@ module Sc_rollup : sig step:step -> choice:Tick.t -> is_reveal_enabled:is_reveal_enabled -> + dal_attested_slots_validity_lag:int -> (game_result, t) Either.t tzresult Lwt.t type timeout = {alice : int; bob : int; last_turn_level : Raw_level.t} diff --git a/src/proto_alpha/lib_protocol/sc_rollup_game_repr.ml b/src/proto_alpha/lib_protocol/sc_rollup_game_repr.ml index 3530735d5115..3a1b1fe41298 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_game_repr.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_game_repr.ml @@ -744,7 +744,8 @@ let check_proof_refute_stop_state ~stop_state input input_request proof = (** Returns the validity of the first final move on top of a dissection. *) let validity_final_move ~pvm ~dal_parameters ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~first_move ~metadata ~proof ~game - ~start_chunk ~stop_chunk ~is_reveal_enabled = + ~start_chunk ~stop_chunk ~is_reveal_enabled ~dal_attested_slots_validity_lag + = let open Lwt_result_syntax in let*! res = let {inbox_snapshot; inbox_level; dal_snapshot; _} = game in @@ -763,6 +764,7 @@ let validity_final_move ~pvm ~dal_parameters ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~is_reveal_enabled + ~dal_attested_slots_validity_lag proof in let*? () = @@ -899,7 +901,7 @@ let cost_play ~step ~choice = let play kind dal_parameters ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~stakers metadata game ~step ~choice ~is_reveal_enabled - = + ~dal_attested_slots_validity_lag = let open Lwt_result_syntax in let (Packed ((module PVM) as pvm)) = Sc_rollups.Kind.pvm_of kind in let mk_loser loser = @@ -949,6 +951,7 @@ let play kind dal_parameters ~dal_activation_level ~dal_attestation_lag ~start_chunk ~stop_chunk ~is_reveal_enabled + ~dal_attested_slots_validity_lag in if player_result then return @@ mk_loser (opponent game.turn) else @@ -985,6 +988,7 @@ let play kind dal_parameters ~dal_activation_level ~dal_attestation_lag ~game ~proof ~is_reveal_enabled + ~dal_attested_slots_validity_lag in if player_result then (* If we play when the final move started, the opponent provided diff --git a/src/proto_alpha/lib_protocol/sc_rollup_game_repr.mli b/src/proto_alpha/lib_protocol/sc_rollup_game_repr.mli index 025990199c52..632a7c44b04b 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_game_repr.mli +++ b/src/proto_alpha/lib_protocol/sc_rollup_game_repr.mli @@ -400,6 +400,7 @@ val play : step:step -> choice:Sc_rollup_tick_repr.t -> is_reveal_enabled:Sc_rollup_PVM_sig.is_reveal_enabled -> + dal_attested_slots_validity_lag:int -> (game_result, t) Either.t tzresult Lwt.t (** [cost_play ~step ~choice] returns the gas cost of [play] applied with[step], 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 3f73b2ccb77a..f82d7c807005 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml @@ -240,7 +240,8 @@ module Dal_helpers = struct let valid_slot_id ~dal_number_of_slots ~dal_activation_level ~dal_attestation_lag ~origination_level ~commit_inbox_level - Dal_slot_repr.Header.{published_level; index} = + Dal_slot_repr.Header.{published_level; index} + ~dal_attested_slots_validity_lag:_ = (* [dal_attestation_lag] is supposed to be positive. *) let open Raw_level_repr in let dal_was_activated = @@ -262,7 +263,7 @@ module Dal_helpers = struct let verify ~metadata ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~commit_inbox_level dal_parameters page_id - dal_snapshot proof = + dal_snapshot proof ~dal_attested_slots_validity_lag = let open Result_syntax in if valid_slot_id @@ -272,6 +273,7 @@ module Dal_helpers = struct ~commit_inbox_level ~dal_number_of_slots Dal_slot_repr.(page_id.Page.slot_id) + ~dal_attested_slots_validity_lag then let* input = Dal_slot_repr.History.verify_proof @@ -285,7 +287,7 @@ module Dal_helpers = struct let produce ~metadata ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~commit_inbox_level dal_parameters page_id ~page_info - ~get_history confirmed_slots_history = + ~get_history confirmed_slots_history ~dal_attested_slots_validity_lag = let open Lwt_result_syntax in if valid_slot_id @@ -295,6 +297,7 @@ module Dal_helpers = struct ~dal_attestation_lag ~commit_inbox_level Dal_slot_repr.(page_id.Page.slot_id) + ~dal_attested_slots_validity_lag then let* proof, content_opt = Dal_slot_repr.History.produce_proof @@ -314,7 +317,7 @@ let valid (type state proof output) ~(pvm : (state, proof, output) Sc_rollups.PVM.implementation) ~metadata snapshot commit_inbox_level dal_snapshot dal_parameters ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots - ~is_reveal_enabled (proof : proof t) = + ~is_reveal_enabled ~dal_attested_slots_validity_lag (proof : proof t) = let open Lwt_result_syntax in let (module P) = pvm in let origination_level = metadata.Sc_rollup_metadata_repr.origination_level in @@ -345,6 +348,7 @@ let valid (type state proof output) ~dal_number_of_slots ~metadata ~dal_activation_level + ~dal_attested_slots_validity_lag dal_parameters ~dal_attestation_lag ~commit_inbox_level @@ -453,6 +457,8 @@ module type PVM_with_context_and_state = sig val dal_number_of_slots : int val dal_activation_level : Raw_level_repr.t option + + val dal_attested_slots_validity_lag : int end end @@ -527,6 +533,7 @@ let produce ~metadata pvm_and_state commit_inbox_level ~is_reveal_enabled = page_id ~page_info ~get_history + ~dal_attested_slots_validity_lag confirmed_slots_history | Needs_reveal Reveal_dal_parameters -> let open Dal_with_history in diff --git a/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.mli b/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.mli index fce1841cf52a..6862b3b7d548 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.mli +++ b/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.mli @@ -174,6 +174,7 @@ val valid : dal_attestation_lag:int -> dal_number_of_slots:int -> is_reveal_enabled:Sc_rollup_PVM_sig.is_reveal_enabled -> + dal_attested_slots_validity_lag:int -> 'proof t -> (Sc_rollup_PVM_sig.input option * Sc_rollup_PVM_sig.input_request) tzresult Lwt.t @@ -239,6 +240,8 @@ module type PVM_with_context_and_state = sig (** The level at which the DAL got activated, [None] if the DAL has not yet been activated. *) val dal_activation_level : Raw_level_repr.t option + + val dal_attested_slots_validity_lag : int end end @@ -296,6 +299,7 @@ module Dal_helpers : sig origination_level:Raw_level_repr.t -> commit_inbox_level:Raw_level_repr.t -> Dal_slot_repr.Header.id -> + dal_attested_slots_validity_lag:int -> bool end diff --git a/src/proto_alpha/lib_protocol/sc_rollup_refutation_storage.ml b/src/proto_alpha/lib_protocol/sc_rollup_refutation_storage.ml index 0b2962e2db1e..ea12778a017a 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_refutation_storage.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_refutation_storage.ml @@ -453,6 +453,9 @@ let game_move ctxt rollup ~player ~opponent ~step ~choice = Some constants.sc_rollup.reveal_activation_level.dal_parameters else None in + let dal_attested_slots_validity_lag = + constants.sc_rollup.reveal_activation_level.dal_attested_slots_validity_lag + in let* check_result, ctxt = check_stakes ctxt rollup stakers in match check_result with | Some game_result -> return (Some game_result, ctxt) @@ -474,6 +477,7 @@ let game_move ctxt rollup ~player ~opponent ~step ~choice = ~is_reveal_enabled: (Sc_rollup_PVM_sig.is_reveal_enabled_predicate (Constants_storage.sc_rollup_reveal_activation_level ctxt)) + ~dal_attested_slots_validity_lag in match move_result with | Either.Left game_result -> return (Some game_result, ctxt) 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 753be05b5958..133a589ecd60 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 @@ -1012,5 +1012,10 @@ let make_pvm_with_context_and_state (type context state) if constants.dal.feature_enable then Some constants.sc_rollup.reveal_activation_level.dal_parameters else None + + let dal_attested_slots_validity_lag = + let constants = Default_parameters.constants_test in + constants.sc_rollup.reveal_activation_level + .dal_attested_slots_validity_lag end end) diff --git a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml index 84a01a79da6b..e58211a2402e 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml @@ -678,6 +678,9 @@ let test_serialized_reveal_proof ~hashed_preimage ~input_preimage () = Some constants.sc_rollup.reveal_activation_level.dal_parameters else None in + let dal_attested_slots_validity_lag = + constants.sc_rollup.reveal_activation_level.dal_attested_slots_validity_lag + in let ctxt = Sc_rollup_helpers.Arith_pvm.make_empty_context () in let is_reveal_enabled = Sc_rollup_helpers.is_reveal_enabled_default in @@ -728,6 +731,7 @@ let test_serialized_reveal_proof ~hashed_preimage ~input_preimage () = dal_snapshot dal_parameters.cryptobox_parameters ~dal_activation_level + ~dal_attested_slots_validity_lag ~dal_attestation_lag:dal_parameters.attestation_lag ~dal_number_of_slots:dal_parameters.number_of_slots ~is_reveal_enabled diff --git a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_game.ml b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_game.ml index e18d48864327..19ed51c70a8d 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_game.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_game.ml @@ -249,6 +249,9 @@ let test_invalid_serialized_inbox_proof () = Some constants.sc_rollup.reveal_activation_level.dal_parameters else None in + let dal_attested_slots_validity_lag = + constants.sc_rollup.reveal_activation_level.dal_attested_slots_validity_lag + in let ctxt = Sc_rollup_helpers.Arith_pvm.make_empty_context () in let empty = Sc_rollup_helpers.Arith_pvm.make_empty_state () in let*! state = Arith_pvm.initial_state ~empty in @@ -282,6 +285,7 @@ let test_invalid_serialized_inbox_proof () = dal_snapshot dal_parameters.cryptobox_parameters ~dal_activation_level + ~dal_attested_slots_validity_lag ~dal_attestation_lag:dal_parameters.attestation_lag ~dal_number_of_slots:dal_parameters.number_of_slots ~is_reveal_enabled diff --git a/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.ml b/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.ml index b352cd020f96..427cbe5ac733 100644 --- a/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.ml +++ b/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.ml @@ -111,7 +111,8 @@ let storage_invariant_broken published_level index = published_level let slot_id_is_valid ~dal_activation_level ~dal_attestation_lag - ~dal_number_of_slots ~origination_level ~inbox_level slot_id = + ~dal_number_of_slots ~origination_level ~inbox_level slot_id + ~dal_attested_slots_validity_lag = let origination_level_res = Raw_level.of_int32 origination_level in let commit_inbox_level_res = Raw_level.of_int32 inbox_level in match (origination_level_res, commit_inbox_level_res) with @@ -122,11 +123,12 @@ let slot_id_is_valid ~dal_activation_level ~dal_attestation_lag ~origination_level ~commit_inbox_level ~dal_number_of_slots + ~dal_attested_slots_validity_lag slot_id | _ -> false let slot_pages ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots - ~inbox_level node_ctxt slot_id = + ~inbox_level node_ctxt slot_id ~dal_attested_slots_validity_lag = let open Lwt_result_syntax in let Node_context.{genesis_info = {level = origination_level; _}; _} = node_ctxt @@ -140,6 +142,7 @@ let slot_pages ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~origination_level ~inbox_level ~dal_number_of_slots + ~dal_attested_slots_validity_lag slot_id then return_none else @@ -163,7 +166,7 @@ let slot_pages ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots | None -> storage_invariant_broken published_level index let page_content ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots - ~inbox_level node_ctxt page_id = + ~inbox_level node_ctxt page_id ~dal_attested_slots_validity_lag = let open Lwt_result_syntax in let Dal.Page.{slot_id; page_index} = page_id in let Dal.Slot.Header.{published_level; index} = slot_id in @@ -178,6 +181,7 @@ let page_content ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~origination_level ~inbox_level ~dal_number_of_slots + ~dal_attested_slots_validity_lag slot_id then return_none else diff --git a/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.mli b/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.mli index 9c2c80e5c95d..5109dfa209ce 100644 --- a/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.mli +++ b/src/proto_alpha/lib_sc_rollup_node/dal_pages_request.mli @@ -60,6 +60,7 @@ val slot_pages : inbox_level:int32 -> _ Node_context.t -> Dal.slot_id -> + dal_attested_slots_validity_lag:int -> Dal.Page.content list option tzresult Lwt.t (** Retrieve the content of the page identified by the given ID from the store. @@ -79,4 +80,5 @@ val page_content : inbox_level:int32 -> _ Node_context.t -> Dal.Page.t -> + dal_attested_slots_validity_lag:int -> Dal.Page.content option tzresult Lwt.t 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 577d1b7f8428..95589aca0df5 100644 --- a/src/proto_alpha/lib_sc_rollup_node/fueled_pvm.ml +++ b/src/proto_alpha/lib_sc_rollup_node/fueled_pvm.ml @@ -95,6 +95,12 @@ module Make_fueled (F : Fuel.S) : FUELED_PVM with type fuel = F.t = struct let metadata = metadata node_ctxt in let dal_attestation_lag = constants.dal.attestation_lag in let dal_number_of_slots = constants.dal.number_of_slots in + let dal_attested_slots_validity_lag = + match constants.sc_rollup.reveal_activation_level with + | Some reveal_activation_level when constants.dal.feature_enable -> + Int32.to_int reveal_activation_level.dal_attested_slots_validity_lag + | _ -> max_int + in let* dal_activation_level = if constants.dal.feature_enable then match constants.sc_rollup.reveal_activation_level with @@ -143,6 +149,7 @@ module Make_fueled (F : Fuel.S) : FUELED_PVM with type fuel = F.t = struct let*! content = Dal_pages_request.page_content ~dal_activation_level + ~dal_attested_slots_validity_lag ~inbox_level:(Int32.of_int level) ~dal_attestation_lag ~dal_number_of_slots @@ -272,6 +279,7 @@ module Make_fueled (F : Fuel.S) : FUELED_PVM with type fuel = F.t = struct ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots + ~dal_attested_slots_validity_lag node_ctxt page_id in diff --git a/src/proto_alpha/lib_sc_rollup_node/refutation_game_helpers.ml b/src/proto_alpha/lib_sc_rollup_node/refutation_game_helpers.ml index 42349a97d71c..409e62a64838 100644 --- a/src/proto_alpha/lib_sc_rollup_node/refutation_game_helpers.ml +++ b/src/proto_alpha/lib_sc_rollup_node/refutation_game_helpers.ml @@ -83,17 +83,18 @@ let page_info_from_pvm_state constants (node_ctxt : _ Node_context.t) activation level. *) fun ~current_block_level:_ _ -> true in - let* dal_activation_level = - if constants.dal.feature_enable then - match constants.sc_rollup.reveal_activation_level with - | None -> return_none - | Some reveal_activation_level -> - let*? level = - Raw_level.of_int32 reveal_activation_level.dal_parameters - |> Environment.wrap_tzresult - in - return_some level - else return_none + let* dal_activation_level, dal_attested_slots_validity_lag = + match constants.sc_rollup.reveal_activation_level with + | Some reveal_activation_level when constants.dal.feature_enable -> + let*? level = + Raw_level.of_int32 reveal_activation_level.dal_parameters + |> Environment.wrap_tzresult + in + return + ( Some level, + Int32.to_int reveal_activation_level.dal_attested_slots_validity_lag + ) + | _ -> return (None, max_int) in let*! input_request = let open (val Pvm.of_kind node_ctxt.kind) in @@ -109,6 +110,7 @@ let page_info_from_pvm_state constants (node_ctxt : _ Node_context.t) ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots + ~dal_attested_slots_validity_lag ~inbox_level node_ctxt slot_id @@ -184,17 +186,18 @@ let generate_proof (node_ctxt : _ Node_context.t) let dal_parameters = dal_l1_parameters.cryptobox_parameters in let dal_attestation_lag = dal_l1_parameters.attestation_lag in let dal_number_of_slots = dal_l1_parameters.number_of_slots in - let* dal_activation_level = - if dal_l1_parameters.feature_enable then - match constants.sc_rollup.reveal_activation_level with - | None -> return_none - | Some reveal_activation_level -> - let*? level = - Raw_level.of_int32 reveal_activation_level.dal_parameters - |> Environment.wrap_tzresult - in - return_some level - else return_none + let* dal_activation_level, dal_attested_slots_validity_lag = + match constants.sc_rollup.reveal_activation_level with + | Some reveal_activation_level when dal_l1_parameters.feature_enable -> + let*? level = + Raw_level.of_int32 reveal_activation_level.dal_parameters + |> Environment.wrap_tzresult + in + return + ( Some level, + Int32.to_int reveal_activation_level.dal_attested_slots_validity_lag + ) + | _ -> return (None, max_int) in let* page_info = page_info_from_pvm_state @@ -272,6 +275,8 @@ let generate_proof (node_ctxt : _ Node_context.t) let page_info = page_info let dal_activation_level = dal_activation_level + + let dal_attested_slots_validity_lag = dal_attested_slots_validity_lag end end in let metadata = metadata node_ctxt in @@ -326,6 +331,7 @@ let generate_proof (node_ctxt : _ Node_context.t) ~pvm:(module PVM) unserialized_proof ~is_reveal_enabled + ~dal_attested_slots_validity_lag in let res = Environment.wrap_tzresult result in assert (Result.is_ok res) ; -- GitLab From fb8c774ee60ae9a95e035f5a967a64b68dedd145 Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Mon, 12 Feb 2024 14:44:36 +0100 Subject: [PATCH 3/6] Proto/Dal: implement the notion of attested slots validity window --- .../lib_protocol/sc_rollup_proof_repr.ml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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 f82d7c807005..b990532deaf1 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml @@ -241,7 +241,7 @@ module Dal_helpers = struct let valid_slot_id ~dal_number_of_slots ~dal_activation_level ~dal_attestation_lag ~origination_level ~commit_inbox_level Dal_slot_repr.Header.{published_level; index} - ~dal_attested_slots_validity_lag:_ = + ~dal_attested_slots_validity_lag = (* [dal_attestation_lag] is supposed to be positive. *) let open Raw_level_repr in let dal_was_activated = @@ -259,7 +259,18 @@ module Dal_helpers = struct ~number_of_slots:dal_number_of_slots index in + (* An attested slot is not expired if its attested level (equal to + [published_level + dal_attestation_lag]) is not further than + [dal_attested_slots_validity_lag] from the given inbox level. *) + let ttl_not_expired = + Raw_level_repr.( + add + (add published_level dal_attestation_lag) + dal_attested_slots_validity_lag + >= commit_inbox_level) + in dal_was_activated && not_too_old && not_too_recent && index_is_valid + && ttl_not_expired let verify ~metadata ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~commit_inbox_level dal_parameters page_id -- GitLab From e4bdcc59e57f24bfe9460d9f651291b97f57347e Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Tue, 13 Feb 2024 11:16:59 +0100 Subject: [PATCH 4/6] Proto/Dal: rename binder for consistency --- src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 b990532deaf1..d0396d90b035 100644 --- a/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml +++ b/src/proto_alpha/lib_protocol/sc_rollup_proof_repr.ml @@ -249,7 +249,9 @@ module Dal_helpers = struct | None -> false | Some dal_activation_level -> published_level >= dal_activation_level in - let not_too_old = published_level > origination_level in + let slot_published_after_origination = + published_level > origination_level + in let not_too_recent = add published_level dal_attestation_lag <= commit_inbox_level in @@ -269,8 +271,8 @@ module Dal_helpers = struct dal_attested_slots_validity_lag >= commit_inbox_level) in - dal_was_activated && not_too_old && not_too_recent && index_is_valid - && ttl_not_expired + dal_was_activated && slot_published_after_origination && not_too_recent + && index_is_valid && ttl_not_expired let verify ~metadata ~dal_activation_level ~dal_attestation_lag ~dal_number_of_slots ~commit_inbox_level dal_parameters page_id -- GitLab From b24ade85fba74a5b29c68bc0b1602f734d45bd2a Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Tue, 13 Feb 2024 15:18:06 +0100 Subject: [PATCH 5/6] Proto/Dal: adapt dal_attested_slots_validity_lag to current alpha block time --- src/proto_alpha/lib_parameters/default_parameters.ml | 10 +++++----- src/proto_alpha/lib_protocol/raw_context.ml | 10 +++++----- .../lib_protocol/test/integration/test_constants.ml | 3 ++- .../lib_protocol/test/unit/test_sc_rollup_arith.ml | 3 ++- ...ode client) RPC regression tests- misc_protocol.out | 2 +- ...mode light) RPC regression tests- misc_protocol.out | 2 +- ...mode proxy) RPC regression tests- misc_protocol.out | 2 +- ...r_data_dir) RPC regression tests- misc_protocol.out | 2 +- ...server_rpc) RPC regression tests- misc_protocol.out | 2 +- 9 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/proto_alpha/lib_parameters/default_parameters.ml b/src/proto_alpha/lib_parameters/default_parameters.ml index e9473dcf85e9..d0f1738d0520 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.ml +++ b/src/proto_alpha/lib_parameters/default_parameters.ml @@ -182,11 +182,11 @@ let constants_mainnet : Constants.Parametric.t = Raw_level.of_int32_exn Int32.(pred max_int) in let dal_attested_slots_validity_lag = - (* A rollup node shouldn't import a page of an attested slot whose attested level is too - far in the past w.r.t. the current level. Importation window is fixed to - 161_280 levels below. It is the number of blocks produced during 28 days - (4 weeks) with a block time of 15 seconds. *) - 161_280 + (* A rollup node shouldn't import a page of an attested slot whose attested + level is too far in the past w.r.t. the current level. Importation window + is fixed to 241_920 levels below. It is the number of blocks produced + during 28 days (4 weeks) with a block time of 10 seconds. *) + 241_920 in let sc_rollup = make_sc_rollup_parameter diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index e0f9840cdc1f..fd440e76c3fc 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -1075,11 +1075,11 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = Raw_level_repr.of_int32_exn Int32.(pred max_int) in let dal_attested_slots_validity_lag = - (* A rollup node shouldn't import an attested whose attested level in too - far in the past w.r.t. the current level. Importation window is fixed to - 161_280 levels below. It is the number of blocks produced during 28 days - (4 weeks) with a block time of 15 seconds. *) - 161_280 + (* A rollup node shouldn't import a page of an attested slot whose attested + level is too far in the past w.r.t. the current level. Importation window + is fixed to 241_920 levels below. It is the number of blocks produced + during 28 days (4 weeks) with a block time of 10 seconds. *) + 241_920 in let reveal_activation_level : Constants_parametric_repr.sc_rollup_reveal_activation_level = diff --git a/src/proto_alpha/lib_protocol/test/integration/test_constants.ml b/src/proto_alpha/lib_protocol/test/integration/test_constants.ml index 1887f93c4134..2b7c9d3cd58d 100644 --- a/src/proto_alpha/lib_protocol/test/integration/test_constants.ml +++ b/src/proto_alpha/lib_protocol/test/integration/test_constants.ml @@ -47,7 +47,8 @@ let test_sc_rollup_constants_consistency () = let block_time = 10 in let sc_rollup = Default_parameters.Internal_for_tests.make_sc_rollup_parameter - ~dal_attested_slots_validity_lag:161_280 + ~dal_attested_slots_validity_lag:241_920 + (* 4 weeks with a 10 secs block time. *) ~dal_activation_level:Raw_level.root block_time in diff --git a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml index e58211a2402e..1cdbad7f8596 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_sc_rollup_arith.ml @@ -374,7 +374,8 @@ let test_reveal ~threshold ~inbox_level ~hash ~preimage_reveal_step metadata = Protocol.Raw_level_repr.root; dal_page = Protocol.Raw_level_repr.root; dal_parameters = Protocol.Raw_level_repr.root; - dal_attested_slots_validity_lag = 161_280; + dal_attested_slots_validity_lag = 241_920; + (* 4 weeks with a 10 secs block time. *) } in let is_reveal_enabled = diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out index 2276600cd611..06b2c855d8e5 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out @@ -56,7 +56,7 @@ "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, "dal_parameters": 2147483646, - "dal_attested_slots_validity_lag": 161280 }, + "dal_attested_slots_validity_lag": 241920 }, "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out index eb742f57cd3d..2769d416945a 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out @@ -56,7 +56,7 @@ "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, "dal_parameters": 2147483646, - "dal_attested_slots_validity_lag": 161280 }, + "dal_attested_slots_validity_lag": 241920 }, "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out index e3bffd81f67e..bb6c99fd26f4 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out @@ -56,7 +56,7 @@ "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, "dal_parameters": 2147483646, - "dal_attested_slots_validity_lag": 161280 }, + "dal_attested_slots_validity_lag": 241920 }, "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out index 5fd0f91fa8be..30c135145e2b 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_data_dir) RPC regression tests- misc_protocol.out @@ -56,7 +56,7 @@ "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, "dal_parameters": 2147483646, - "dal_attested_slots_validity_lag": 161280 }, + "dal_attested_slots_validity_lag": 241920 }, "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out index 5fd0f91fa8be..30c135145e2b 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy_server_rpc) RPC regression tests- misc_protocol.out @@ -56,7 +56,7 @@ "smart_rollup_reveal_activation_level": { "raw_data": { "Blake2B": 0 }, "metadata": 0, "dal_page": 2147483646, "dal_parameters": 2147483646, - "dal_attested_slots_validity_lag": 161280 }, + "dal_attested_slots_validity_lag": 241920 }, "smart_rollup_private_enable": true, "smart_rollup_riscv_pvm_enable": false, "zk_rollup_enable": false, "zk_rollup_origination_size": 4000, "zk_rollup_min_pending_to_process": 10, -- GitLab From 09cf9daa58464b114b9bc659adedb7bad544a015 Mon Sep 17 00:00:00 2001 From: "iguerNL@Functori" Date: Thu, 15 Feb 2024 08:42:33 +0100 Subject: [PATCH 6/6] Proto/Dal: add a warning about the implication of changing TTL value --- .../lib_protocol/constants_parametric_repr.ml | 13 +++++++++++++ src/proto_alpha/lib_protocol/raw_context.ml | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml index f64391c53866..01a61e775295 100644 --- a/src/proto_alpha/lib_protocol/constants_parametric_repr.ml +++ b/src/proto_alpha/lib_protocol/constants_parametric_repr.ml @@ -93,6 +93,19 @@ type sc_rollup_reveal_activation_level = { (* Once a DAL slot is attested, a rollup can only import it within the range of levels [attested_level; attested_level + dal_attested_slots_validity_lag]. *) + (* Warning: the semantics of valid slots needs to be adapted if the + value of this parameter is changed in the future. + - If it is increased, some attested slots that were outdated with + the old value will become valid again. + - If it is decreased, some attested slots that were valid with + the old value will become outdated. + + In both cases, the status of slots before and after the value change is + different. Said otherwise, the validity of the slot may differ depending on + the time of the check, in particular it may be different in the following + two cases: (a) the slot is imported before the value upgrade, (2) a + refutation game targeting a page of that slot is started after the + upgrade. *) dal_attested_slots_validity_lag : int; } diff --git a/src/proto_alpha/lib_protocol/raw_context.ml b/src/proto_alpha/lib_protocol/raw_context.ml index fd440e76c3fc..5665e00896b3 100644 --- a/src/proto_alpha/lib_protocol/raw_context.ml +++ b/src/proto_alpha/lib_protocol/raw_context.ml @@ -1098,6 +1098,18 @@ let prepare_first_block ~level ~timestamp _chain_id ctxt = metadata; dal_page = dal_activation_level; dal_parameters = dal_activation_level; + (* Warning: the semantics of valid slots needs to be adapted if the + value of this parameter is changed in the future. + - If it is increased, some attested slots that were outdated with + the old value will become valid again. + - If it is decreased, some attested slots that were valid with + the old value will become outdated. + + In both cases, the status of slots before and after the value + change is different. So, the behaviour if a valid slot is + imported before the value upgrade but a refutation game + targetting a page of that slot is started after the upgrade is + not the correct/expected one. *) dal_attested_slots_validity_lag; } in -- GitLab