From fd0b2f7ef900ddd01f8796276705197c9e0c819b Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Tue, 18 Mar 2025 10:07:01 +0100 Subject: [PATCH 1/3] Rollup node: fetch max_active_outbox_levels from protocol constants --- src/lib_smart_rollup/rollup_constants.ml | 14 +++-- .../node_context_loader.ml | 1 + .../test/helpers/helpers.ml | 57 +++++++++++-------- .../lib_sc_rollup_node/layer1_helpers.ml | 2 + .../lib_sc_rollup_node/layer1_helpers.ml | 2 + .../lib_sc_rollup_node/layer1_helpers.ml | 2 + .../lib_sc_rollup_node/layer1_helpers.ml | 2 + .../lib_sc_rollup_node/layer1_helpers.ml | 2 + .../lib_sc_rollup_node/layer1_helpers.ml | 2 + .../lib_sc_rollup_node/layer1_helpers.ml | 2 + 10 files changed, 59 insertions(+), 27 deletions(-) diff --git a/src/lib_smart_rollup/rollup_constants.ml b/src/lib_smart_rollup/rollup_constants.ml index 37d1b96bac6c..93f74b15501b 100644 --- a/src/lib_smart_rollup/rollup_constants.ml +++ b/src/lib_smart_rollup/rollup_constants.ml @@ -45,6 +45,7 @@ type sc_rollup_constants = { commitment_period_in_blocks : int; reveal_activation_level : reveal_activation_level option; max_number_of_stored_cemented_commitments : int; + max_active_outbox_levels : int; } type protocol_constants = { @@ -100,6 +101,7 @@ let encoding = commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; }; dal = { @@ -114,7 +116,8 @@ let encoding = ( challenge_window_in_blocks, commitment_period_in_blocks, reveal_activation_level, - max_number_of_stored_cemented_commitments ), + max_number_of_stored_cemented_commitments, + max_active_outbox_levels ), (feature_enable, attestation_lag, number_of_slots, cryptobox_parameters) )) (fun ( minimal_block_delay, @@ -122,7 +125,8 @@ let encoding = ( challenge_window_in_blocks, commitment_period_in_blocks, reveal_activation_level, - max_number_of_stored_cemented_commitments ), + max_number_of_stored_cemented_commitments, + max_active_outbox_levels ), ( feature_enable, attestation_lag, number_of_slots, @@ -136,6 +140,7 @@ let encoding = commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; }; dal = { @@ -150,11 +155,12 @@ let encoding = (req "delay_increment_per_round" int64) (req "sc_rollup" - (obj4 + (obj5 (req "challenge_window_in_blocks" int31) (req "commitment_period_in_blocks" int31) (opt "reveal_activation_level" reveal_activation_level_encoding) - (req "max_number_of_stored_cemented_commitments" int31))) + (req "max_number_of_stored_cemented_commitments" int31) + (req "max_active_outbox_levels" int31))) (req "dal" (obj4 diff --git a/src/lib_smart_rollup_node/node_context_loader.ml b/src/lib_smart_rollup_node/node_context_loader.ml index 7817449db7c0..cb6c5888f03a 100644 --- a/src/lib_smart_rollup_node/node_context_loader.ml +++ b/src/lib_smart_rollup_node/node_context_loader.ml @@ -459,6 +459,7 @@ module Internal_for_tests = struct dal_attested_slots_validity_lag = Int32.max_int; }; max_number_of_stored_cemented_commitments = 0; + max_active_outbox_levels = 0; }; dal = { diff --git a/src/lib_smart_rollup_node/test/helpers/helpers.ml b/src/lib_smart_rollup_node/test/helpers/helpers.ml index d48eba01faec..656f5a81ab27 100644 --- a/src/lib_smart_rollup_node/test/helpers/helpers.ml +++ b/src/lib_smart_rollup_node/test/helpers/helpers.ml @@ -42,38 +42,49 @@ let make_block_hash level messages = let default_constants = (* Same as default test constants for alpha excepted for commitment_period_in_block. *) + let open Tezos_protocol_alpha.Protocol.Alpha_context in + let Constants.Parametric. + { + minimal_block_delay; + delay_increment_per_round; + sc_rollup = + { + challenge_window_in_blocks; + reveal_activation_level; + max_number_of_stored_cemented_commitments; + max_active_outbox_levels; + _; + }; + dal = + { + feature_enable; + attestation_lag; + number_of_slots; + cryptobox_parameters; + _; + }; + _; + } = + Tezos_protocol_alpha_parameters.Default_parameters.constants_test + in Rollup_constants. { - minimal_block_delay = 1L; - delay_increment_per_round = 1L; + minimal_block_delay = Period.to_seconds minimal_block_delay; + delay_increment_per_round = Period.to_seconds delay_increment_per_round; sc_rollup = { - challenge_window_in_blocks = 4032; + challenge_window_in_blocks; commitment_period_in_blocks = 3; reveal_activation_level = Some - { - 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; + (Tezos_smart_rollup_layer2_alpha.Sc_rollup_proto_types.Constants + .reveal_activation_level_to_octez + reveal_activation_level); + max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = - { - feature_enable = false; - attestation_lag = 4; - number_of_slots = 16; - cryptobox_parameters = - { - redundancy_factor = 8; - page_size = 4096; - slot_size = 32768; - number_of_shards = 64; - }; - }; + {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; } let add_l2_genesis_block (node_ctxt : _ Node_context.t) ~boot_sector = diff --git a/src/proto_017_PtNairob/lib_sc_rollup_node/layer1_helpers.ml b/src/proto_017_PtNairob/lib_sc_rollup_node/layer1_helpers.ml index cf87e038cf28..fc7cdd356308 100644 --- a/src/proto_017_PtNairob/lib_sc_rollup_node/layer1_helpers.ml +++ b/src/proto_017_PtNairob/lib_sc_rollup_node/layer1_helpers.ml @@ -135,6 +135,7 @@ let constants_of_parametric challenge_window_in_blocks; commitment_period_in_blocks; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; _; }; dal = @@ -158,6 +159,7 @@ let constants_of_parametric commitment_period_in_blocks; reveal_activation_level = None; max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; diff --git a/src/proto_018_Proxford/lib_sc_rollup_node/layer1_helpers.ml b/src/proto_018_Proxford/lib_sc_rollup_node/layer1_helpers.ml index 69fbaad853c1..42537b7c44b2 100644 --- a/src/proto_018_Proxford/lib_sc_rollup_node/layer1_helpers.ml +++ b/src/proto_018_Proxford/lib_sc_rollup_node/layer1_helpers.ml @@ -136,6 +136,7 @@ let constants_of_parametric commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; _; }; dal = @@ -162,6 +163,7 @@ let constants_of_parametric (Sc_rollup_proto_types.Constants.reveal_activation_level_to_octez reveal_activation_level); max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; diff --git a/src/proto_019_PtParisB/lib_sc_rollup_node/layer1_helpers.ml b/src/proto_019_PtParisB/lib_sc_rollup_node/layer1_helpers.ml index 69fbaad853c1..42537b7c44b2 100644 --- a/src/proto_019_PtParisB/lib_sc_rollup_node/layer1_helpers.ml +++ b/src/proto_019_PtParisB/lib_sc_rollup_node/layer1_helpers.ml @@ -136,6 +136,7 @@ let constants_of_parametric commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; _; }; dal = @@ -162,6 +163,7 @@ let constants_of_parametric (Sc_rollup_proto_types.Constants.reveal_activation_level_to_octez reveal_activation_level); max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; diff --git a/src/proto_020_PsParisC/lib_sc_rollup_node/layer1_helpers.ml b/src/proto_020_PsParisC/lib_sc_rollup_node/layer1_helpers.ml index be34d0530273..3781c46aac99 100644 --- a/src/proto_020_PsParisC/lib_sc_rollup_node/layer1_helpers.ml +++ b/src/proto_020_PsParisC/lib_sc_rollup_node/layer1_helpers.ml @@ -136,6 +136,7 @@ let constants_of_parametric commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; _; }; dal = @@ -162,6 +163,7 @@ let constants_of_parametric (Sc_rollup_proto_types.Constants.reveal_activation_level_to_octez reveal_activation_level); max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; diff --git a/src/proto_021_PsQuebec/lib_sc_rollup_node/layer1_helpers.ml b/src/proto_021_PsQuebec/lib_sc_rollup_node/layer1_helpers.ml index 51a92aaf6971..2a1a85e1d047 100644 --- a/src/proto_021_PsQuebec/lib_sc_rollup_node/layer1_helpers.ml +++ b/src/proto_021_PsQuebec/lib_sc_rollup_node/layer1_helpers.ml @@ -136,6 +136,7 @@ let constants_of_parametric commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; _; }; dal = @@ -162,6 +163,7 @@ let constants_of_parametric (Sc_rollup_proto_types.Constants.reveal_activation_level_to_octez reveal_activation_level); max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; diff --git a/src/proto_022_PsRiotum/lib_sc_rollup_node/layer1_helpers.ml b/src/proto_022_PsRiotum/lib_sc_rollup_node/layer1_helpers.ml index 51a92aaf6971..2a1a85e1d047 100644 --- a/src/proto_022_PsRiotum/lib_sc_rollup_node/layer1_helpers.ml +++ b/src/proto_022_PsRiotum/lib_sc_rollup_node/layer1_helpers.ml @@ -136,6 +136,7 @@ let constants_of_parametric commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; _; }; dal = @@ -162,6 +163,7 @@ let constants_of_parametric (Sc_rollup_proto_types.Constants.reveal_activation_level_to_octez reveal_activation_level); max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; diff --git a/src/proto_alpha/lib_sc_rollup_node/layer1_helpers.ml b/src/proto_alpha/lib_sc_rollup_node/layer1_helpers.ml index 6aae50684e54..023570d04c3b 100644 --- a/src/proto_alpha/lib_sc_rollup_node/layer1_helpers.ml +++ b/src/proto_alpha/lib_sc_rollup_node/layer1_helpers.ml @@ -136,6 +136,7 @@ let constants_of_parametric commitment_period_in_blocks; reveal_activation_level; max_number_of_stored_cemented_commitments; + max_active_outbox_levels; _; }; dal = @@ -162,6 +163,7 @@ let constants_of_parametric (Sc_rollup_proto_types.Constants.reveal_activation_level_to_octez reveal_activation_level); max_number_of_stored_cemented_commitments; + max_active_outbox_levels = Int32.to_int max_active_outbox_levels; }; dal = {feature_enable; attestation_lag; number_of_slots; cryptobox_parameters}; -- GitLab From 2b696e7f199413be4a0e6e90292f9c05ad6b09c5 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Tue, 18 Mar 2025 10:11:58 +0100 Subject: [PATCH 2/3] Rollup node: use correct constant to identify active/lost outbox msgs --- src/lib_smart_rollup_node/node_context.ml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/lib_smart_rollup_node/node_context.ml b/src/lib_smart_rollup_node/node_context.ml index 8c3aa2971c33..ec9f352f4e59 100644 --- a/src/lib_smart_rollup_node/node_context.ml +++ b/src/lib_smart_rollup_node/node_context.ml @@ -674,11 +674,10 @@ let get_executable_pending_outbox_messages ?outbox_level let max_level = (Reference.get lcc).level in let constants = (Reference.get current_protocol).constants.sc_rollup in let min_level = - Int32.sub - max_level - (Int32.of_int - (constants.max_number_of_stored_cemented_commitments - * constants.commitment_period_in_blocks)) + Int32.sub max_level (Int32.of_int constants.max_active_outbox_levels) + |> Int32.succ + (* Protocol uses strict inequality, see function [validate_outbox_level] in + src/proto_alpha/lib_protocol/sc_rollup_operations.ml. *) in match outbox_level with | None -> Store.Outbox_messages.pending store ~min_level ~max_level @@ -723,13 +722,13 @@ let get_pending_outbox_messages ?outbox_level in let lcc = (Reference.get lcc).level in let constants = (Reference.get current_protocol).constants.sc_rollup in + (* Messages below, and including, this level are lost because protocol uses + strict inequality. See function [validate_outbox_level] in + src/proto_alpha/lib_protocol/sc_rollup_operations.ml. *) let lost_level = - Int32.sub - lcc - (Int32.of_int - (constants.max_number_of_stored_cemented_commitments - * constants.commitment_period_in_blocks)) + Int32.sub lcc (Int32.of_int constants.max_active_outbox_levels) in + let+ messages = match outbox_level with | None -> Store.Outbox_messages.pending store ~min_level:0l ~max_level @@ -743,7 +742,7 @@ let get_pending_outbox_messages ?outbox_level List.rev_map (fun ((outbox_level, _) as msg) -> let status = - if outbox_level < lost_level then `Lost + if outbox_level <= lost_level then `Lost else if outbox_level <= lcc then `Executable else `Pending in -- GitLab From 2e0597dfa06d1a10efcbe3c753a52960dd6c66f9 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Tue, 18 Mar 2025 10:14:32 +0100 Subject: [PATCH 3/3] Doc: changelog for fix --- CHANGES.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 050c63a59054..1a02d135c4a1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -95,9 +95,14 @@ Smart Rollup node ``/local/outbox/pending/executable`` and ``/local/outbox/pending/unexecutable``. (MR :gl:`!16831`) -- Add a new RPC RPC ``/local/outbox/pending`` to fetch all known outbox messages +- Add a new RPC ``/local/outbox/pending`` to fetch all known outbox messages with their status. (MR :gl:`!16831`) + +- Use correct constant to determine executable or lost outbox messages for RPCs + ``/local/outbox/pending`` and ``/local/outbox/pending/executable``. (MR + :gl:`!17279`) + Smart Rollup WASM Debugger -------------------------- -- GitLab