From 941810ac2e9231eb279ffafb7362b6d604ff6759 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 12 Sep 2024 12:03:05 +0200 Subject: [PATCH 1/4] Rollup node/RPC: outbox RPC fails if outbox level is in the future --- .../lib_sc_rollup_node/RPC_directory.ml | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/proto_alpha/lib_sc_rollup_node/RPC_directory.ml b/src/proto_alpha/lib_sc_rollup_node/RPC_directory.ml index 33a37c2d2dab..c1082e468a24 100644 --- a/src/proto_alpha/lib_sc_rollup_node/RPC_directory.ml +++ b/src/proto_alpha/lib_sc_rollup_node/RPC_directory.ml @@ -268,10 +268,17 @@ let () = Block_directory.register0 Sc_rollup_services.Block.dal_processed_slots @@ fun (node_ctxt, block) () () -> get_dal_processed_slots node_ctxt block -let () = - Block_directory.register0 Sc_rollup_services.Block.outbox - @@ fun (node_ctxt, block) outbox_level () -> +let get_outbox_messages node_ctxt block outbox_level = let open Lwt_result_syntax in + let* block_level = Node_context.level_of_hash node_ctxt block in + let outbox_level_int32 = Alpha_context.Raw_level.to_int32 outbox_level in + let* () = + when_ (outbox_level_int32 > block_level) @@ fun () -> + failwith + "Outbox level %ld is not known at level %ld@." + outbox_level_int32 + block_level + in let* state = get_state node_ctxt block in let open (val Pvm.of_kind node_ctxt.kind) in let*! outbox = @@ -279,16 +286,15 @@ let () = in return outbox +let () = + Block_directory.register0 Sc_rollup_services.Block.outbox + @@ fun (node_ctxt, block) outbox_level () -> + get_outbox_messages node_ctxt block outbox_level + let () = Block_directory.register1 Sc_rollup_services.Block.outbox_messages @@ fun (node_ctxt, block) outbox_level () () -> - let open Lwt_result_syntax in - let* state = get_state node_ctxt block in - let open (val Pvm.of_kind node_ctxt.kind) in - let*! outbox = - get_outbox outbox_level (Ctxt_wrapper.of_node_pvmstate state) - in - return outbox + get_outbox_messages node_ctxt block outbox_level let () = Block_helpers_directory.register1 -- GitLab From c8b76a6ff4bdb5f192a43d9c41dc882d924b9fc9 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 12 Sep 2024 12:06:54 +0200 Subject: [PATCH 2/4] Rollup node/RPC/ParisB,ParisC,Quebec: outbox RPC fails if outbox level is in the future 019_PtParisB/Rollup node/RPC: outbox RPC fails if outbox level is in the future Porting to proto 019_PtParisB d1124d40ec172dab779217358dc7af17a7ef588b - Rollup node/RPC: outbox RPC fails if outbox level is in the future 020_PsParisC/Rollup node/RPC: outbox RPC fails if outbox level is in the future Porting to proto 020_PsParisC d1124d40ec172dab779217358dc7af17a7ef588b - Rollup node/RPC: outbox RPC fails if outbox level is in the future 021_PsquebeC/Rollup node/RPC: outbox RPC fails if outbox level is in the future Porting to proto 021_PsquebeC d1124d40ec172dab779217358dc7af17a7ef588b - Rollup node/RPC: outbox RPC fails if outbox level is in the future --- .../lib_sc_rollup_node/RPC_directory.ml | 26 ++++++++++++------- .../lib_sc_rollup_node/RPC_directory.ml | 26 ++++++++++++------- .../lib_sc_rollup_node/RPC_directory.ml | 26 ++++++++++++------- 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/src/proto_019_PtParisB/lib_sc_rollup_node/RPC_directory.ml b/src/proto_019_PtParisB/lib_sc_rollup_node/RPC_directory.ml index bfb0334eb01f..2beec5a2fa01 100644 --- a/src/proto_019_PtParisB/lib_sc_rollup_node/RPC_directory.ml +++ b/src/proto_019_PtParisB/lib_sc_rollup_node/RPC_directory.ml @@ -268,10 +268,17 @@ let () = Block_directory.register0 Sc_rollup_services.Block.dal_processed_slots @@ fun (node_ctxt, block) () () -> get_dal_processed_slots node_ctxt block -let () = - Block_directory.register0 Sc_rollup_services.Block.outbox - @@ fun (node_ctxt, block) outbox_level () -> +let get_outbox_messages node_ctxt block outbox_level = let open Lwt_result_syntax in + let* block_level = Node_context.level_of_hash node_ctxt block in + let outbox_level_int32 = Alpha_context.Raw_level.to_int32 outbox_level in + let* () = + when_ (outbox_level_int32 > block_level) @@ fun () -> + failwith + "Outbox level %ld is not known at level %ld@." + outbox_level_int32 + block_level + in let* state = get_state node_ctxt block in let open (val Pvm.of_kind node_ctxt.kind) in let*! outbox = @@ -279,16 +286,15 @@ let () = in return outbox +let () = + Block_directory.register0 Sc_rollup_services.Block.outbox + @@ fun (node_ctxt, block) outbox_level () -> + get_outbox_messages node_ctxt block outbox_level + let () = Block_directory.register1 Sc_rollup_services.Block.outbox_messages @@ fun (node_ctxt, block) outbox_level () () -> - let open Lwt_result_syntax in - let* state = get_state node_ctxt block in - let open (val Pvm.of_kind node_ctxt.kind) in - let*! outbox = - get_outbox outbox_level (Ctxt_wrapper.of_node_pvmstate state) - in - return outbox + get_outbox_messages node_ctxt block outbox_level let () = Block_helpers_directory.register0 diff --git a/src/proto_020_PsParisC/lib_sc_rollup_node/RPC_directory.ml b/src/proto_020_PsParisC/lib_sc_rollup_node/RPC_directory.ml index bfb0334eb01f..2beec5a2fa01 100644 --- a/src/proto_020_PsParisC/lib_sc_rollup_node/RPC_directory.ml +++ b/src/proto_020_PsParisC/lib_sc_rollup_node/RPC_directory.ml @@ -268,10 +268,17 @@ let () = Block_directory.register0 Sc_rollup_services.Block.dal_processed_slots @@ fun (node_ctxt, block) () () -> get_dal_processed_slots node_ctxt block -let () = - Block_directory.register0 Sc_rollup_services.Block.outbox - @@ fun (node_ctxt, block) outbox_level () -> +let get_outbox_messages node_ctxt block outbox_level = let open Lwt_result_syntax in + let* block_level = Node_context.level_of_hash node_ctxt block in + let outbox_level_int32 = Alpha_context.Raw_level.to_int32 outbox_level in + let* () = + when_ (outbox_level_int32 > block_level) @@ fun () -> + failwith + "Outbox level %ld is not known at level %ld@." + outbox_level_int32 + block_level + in let* state = get_state node_ctxt block in let open (val Pvm.of_kind node_ctxt.kind) in let*! outbox = @@ -279,16 +286,15 @@ let () = in return outbox +let () = + Block_directory.register0 Sc_rollup_services.Block.outbox + @@ fun (node_ctxt, block) outbox_level () -> + get_outbox_messages node_ctxt block outbox_level + let () = Block_directory.register1 Sc_rollup_services.Block.outbox_messages @@ fun (node_ctxt, block) outbox_level () () -> - let open Lwt_result_syntax in - let* state = get_state node_ctxt block in - let open (val Pvm.of_kind node_ctxt.kind) in - let*! outbox = - get_outbox outbox_level (Ctxt_wrapper.of_node_pvmstate state) - in - return outbox + get_outbox_messages node_ctxt block outbox_level let () = Block_helpers_directory.register0 diff --git a/src/proto_021_PsquebeC/lib_sc_rollup_node/RPC_directory.ml b/src/proto_021_PsquebeC/lib_sc_rollup_node/RPC_directory.ml index 33a37c2d2dab..c1082e468a24 100644 --- a/src/proto_021_PsquebeC/lib_sc_rollup_node/RPC_directory.ml +++ b/src/proto_021_PsquebeC/lib_sc_rollup_node/RPC_directory.ml @@ -268,10 +268,17 @@ let () = Block_directory.register0 Sc_rollup_services.Block.dal_processed_slots @@ fun (node_ctxt, block) () () -> get_dal_processed_slots node_ctxt block -let () = - Block_directory.register0 Sc_rollup_services.Block.outbox - @@ fun (node_ctxt, block) outbox_level () -> +let get_outbox_messages node_ctxt block outbox_level = let open Lwt_result_syntax in + let* block_level = Node_context.level_of_hash node_ctxt block in + let outbox_level_int32 = Alpha_context.Raw_level.to_int32 outbox_level in + let* () = + when_ (outbox_level_int32 > block_level) @@ fun () -> + failwith + "Outbox level %ld is not known at level %ld@." + outbox_level_int32 + block_level + in let* state = get_state node_ctxt block in let open (val Pvm.of_kind node_ctxt.kind) in let*! outbox = @@ -279,16 +286,15 @@ let () = in return outbox +let () = + Block_directory.register0 Sc_rollup_services.Block.outbox + @@ fun (node_ctxt, block) outbox_level () -> + get_outbox_messages node_ctxt block outbox_level + let () = Block_directory.register1 Sc_rollup_services.Block.outbox_messages @@ fun (node_ctxt, block) outbox_level () () -> - let open Lwt_result_syntax in - let* state = get_state node_ctxt block in - let open (val Pvm.of_kind node_ctxt.kind) in - let*! outbox = - get_outbox outbox_level (Ctxt_wrapper.of_node_pvmstate state) - in - return outbox + get_outbox_messages node_ctxt block outbox_level let () = Block_helpers_directory.register1 -- GitLab From 71ecbc8413f4c2c7cbfefcb2e97ddcc94defdfc9 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 12 Sep 2024 16:15:15 +0200 Subject: [PATCH 3/4] Doc: changelog --- CHANGES.rst | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 4f36d307f7f8..2a622ea86c06 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -52,6 +52,73 @@ Docker Images Smart Rollup node ----------------- +- Updated RPC ``/local/batcher/injection`` with a new query argument + possibility. When the rpc contains ``"drop_duplicate": true`` then + the batcher will drop the messages that were already injected with a + previous RPC call. If ``"drop_duplicate": false`` then the rollup + node defaults to its the previous behavior, where messages are + injected again, even if the exact same one was previously + injected. By default ``"drop_duplicate": false``. (MR :gl:`!13165`) + +- RPC ``/health`` now returns meaningful health related data to asses if the + rollup node operates correctly. Old ``/health`` RPC is renamed to ``/ping``. + (MR :gl:`!12940`) + +- Use a local cache per game for intermediate states of dissections. (MR + :gl:`!12899`) + +- Introduce the 5th version of the WASM PVM, which defaults to a higher tick + limits to delegate refutability to the kernels. (MR :gl:`!12999`) + +- Trigger GC every 1000 blocks (instead of 100) by default to reduce CPU + consumption. (MR :gl:`!13177`) + +- Default history mode is now "full". (MR :gl:`!13178`) + +- Allow to import archive snapshots in "full" rollup node. (MR :gl:`!13186`) + +- Fix a bug in how commitments are computed after a protocol migration + where the the commitment period changes. (MR :gl:`!13588`) + +- Ensure penultimate commitment is published on snapshot export as a + failsafe. (MR :gl:`!13544`) + +- Include commitment publication information in snapshots. (MR :gl:`!13724`) + +- Under-approximate publication level for cementation when it is missing. (MR + :gl:`!13725`) + +- New metrics for the rollup node, including performance ones which can be + enabled with the flag ``--enable-performance-metrics`` (requires + ``lsof``). (MR :gl:`!12290`) + +- Rotate multiple batcher keys in injector so that they are used evenly. (MR + :gl:`!14194`) + +- RPC ``/global/block/?outbox=true`` now returns the outbox messages + produced by the PVM for ``block_id`` if the query parameter ``outbox`` is + present. (MR :gl:`!14140`) + +- Introduce the 6th version of the WASM PVM. (MR :gl:`!14493`) + +- New RPC ``GET /admin/cancel_gc`` to cancel any on-going garbage collection in + the rollup node. (MR :gl:`!14693`) + +- Refined GC for rollup node is now triggered every ~3 days to make it less + wasteful on resources. Gc is not run anymore after importing an archive + snapshot in a full node. (MR :gl:`!14717`) + +- The command ``snapshot export`` tries to cancel ongoing GC, if any. Add + ``--rollup-node-endpoint`` to specify the RPC server endpoint, if the address + and port of the running node have been changed via command-line arguments. (MR + :gl:`!14694`) + +- Fix an issue which could introduce a discrepancy between the snapshot header + and its content. (MR :gl:`!14777`) + +- RPC ``/global/block//outbox//messages`` now fails if + ``outbox_level`` is above the level of ``block_id``. (MR :gl:`!14911`) + Smart Rollup WASM Debugger -------------------------- -- GitLab From 8ac0cab5f8f37231de588e4c9145642271754b68 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Tue, 1 Oct 2024 09:21:55 +0200 Subject: [PATCH 4/4] Test: fix rollup node RPC test --- tezt/tests/sc_rollup.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/tezt/tests/sc_rollup.ml b/tezt/tests/sc_rollup.ml index dc506fc681d6..f008cb4911c2 100644 --- a/tezt/tests/sc_rollup.ml +++ b/tezt/tests/sc_rollup.ml @@ -4694,6 +4694,7 @@ let test_rpcs ~kind let* _outbox = Sc_rollup_node.RPC.call sc_rollup_node @@ Sc_rollup_rpc.get_global_block_outbox + ~block:"head" ~outbox_level:l2_finalied_block_level () in -- GitLab