From cdda96ab15fe58b262ba879621abca16c4e6925d Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Mon, 17 Mar 2025 09:02:22 +0100 Subject: [PATCH 1/2] evm/node: rpc mode can uses the tx_queue --- etherlink/CHANGES_NODE.md | 1 + etherlink/bin_node/lib_dev/rpc.ml | 54 ++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/etherlink/CHANGES_NODE.md b/etherlink/CHANGES_NODE.md index c5d09990fa2e..387a06c77ac5 100644 --- a/etherlink/CHANGES_NODE.md +++ b/etherlink/CHANGES_NODE.md @@ -116,6 +116,7 @@ you start using them, you probably want to use `octez-evm-node check config - An sequencer EVM node can uses the tx_queue to speed the inclusion of transaction. (!17134 !17100 !17109 !17211) - A proxy EVM node can now use the tx_queue. (!17246) +- A RPC EVM node can uses the tx_queue. (!17246) - `tx_queue` now has a maximum number of transactions. (!17083) - Observer nodes can now be run with `periodic_snapshot_path` defined in the configuration. It exports a snapshot to the given path every time they diff --git a/etherlink/bin_node/lib_dev/rpc.ml b/etherlink/bin_node/lib_dev/rpc.ml index 49fd5c63f133..fec9cf18698f 100644 --- a/etherlink/bin_node/lib_dev/rpc.ml +++ b/etherlink/bin_node/lib_dev/rpc.ml @@ -140,8 +140,10 @@ let main ~data_dir ~evm_node_endpoint ?evm_node_private_endpoint let rpc_backend = Evm_ro_context.ro_backend ctxt config ~evm_node_endpoint in let* ping_tx_pool, tx_container = - match evm_node_private_endpoint with - | Some private_endpoint -> + match + (evm_node_private_endpoint, config.experimental_features.enable_tx_queue) + with + | Some private_endpoint, _ -> let forward_request = container_forward_request ~keep_alive:config.keep_alive @@ -150,7 +152,18 @@ let main ~data_dir ~evm_node_endpoint ?evm_node_private_endpoint in return (false, forward_request) - | None -> + | None, Some tx_queue_config -> + let* () = + Tx_queue.start + ~config:tx_queue_config + ~keep_alive:config.keep_alive + () + in + return + ( false, + (module Tx_queue.Tx_container : Services_backend_sig.Tx_container) + ) + | None, None -> let* () = Tx_pool.start { @@ -241,18 +254,27 @@ let main ~data_dir ~evm_node_endpoint ?evm_node_private_endpoint in let* next_blueprint_number = Evm_ro_context.next_blueprint_number ctxt in - - Blueprints_follower.start - ~time_between_blocks - ~evm_node_endpoint - ~next_blueprint_number - ~ping_tx_pool - @@ fun (Qty number) blueprint -> let* () = - when_ (Option.is_some blueprint.kernel_upgrade) @@ fun () -> - Evm_ro_context.preload_kernel_from_level ctxt (Qty number) + if + Configuration.is_tx_queue_enabled config + && Option.is_none evm_node_private_endpoint + (* Only start the beacon when the tx_queue is started. *) + then Tx_queue.beacon ~evm_node_endpoint ~tick_interval:0.05 + else return_unit + and* () = + Blueprints_follower.start + ~ping_tx_pool + ~time_between_blocks + ~evm_node_endpoint + ~next_blueprint_number + @@ fun (Qty number) blueprint -> + let* () = + when_ (Option.is_some blueprint.kernel_upgrade) @@ fun () -> + Evm_ro_context.preload_kernel_from_level ctxt (Qty number) + in + Broadcast.notify @@ Broadcast.Blueprint blueprint ; + Metrics.set_level ~level:number ; + let* () = set_metrics_confirmed_levels ctxt in + return `Continue in - Broadcast.notify @@ Broadcast.Blueprint blueprint ; - Metrics.set_level ~level:number ; - let* () = set_metrics_confirmed_levels ctxt in - return `Continue + return_unit -- GitLab From e53dfd7bf5d26307e0060728ded6bf3cc97394c9 Mon Sep 17 00:00:00 2001 From: Sylvain Ribstein Date: Mon, 17 Mar 2025 09:02:40 +0100 Subject: [PATCH 2/2] evm/tezt: activates the tx_queue for the rpc --- etherlink/tezt/tests/evm_rollup.ml | 35 +++++++++++++++++++----------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/etherlink/tezt/tests/evm_rollup.ml b/etherlink/tezt/tests/evm_rollup.ml index 649f56a3ac3c..9824d3bb7156 100644 --- a/etherlink/tezt/tests/evm_rollup.ml +++ b/etherlink/tezt/tests/evm_rollup.ml @@ -309,7 +309,7 @@ let setup_evm_kernel ?additional_config ?(setup_kernel_root_hash = true) ?(force_install_kernel = true) ?whitelist ?maximum_allowed_ticks ?restricted_rpcs ?(enable_dal = false) ?dal_slots ?(enable_multichain = false) ?websockets ?(enable_fast_withdrawal = false) - protocol = + ?enable_tx_queue protocol = let _, kernel_installee = Kernel.to_uses_and_tags kernel in let* node, client = setup_l1 ?commitment_period ?challenge_window ?timestamp protocol @@ -431,10 +431,15 @@ let setup_evm_kernel ?additional_config ?(setup_kernel_root_hash = true) unit else unit in + let enable_tx_queue = + match enable_tx_queue with + | Some enable_tx_queue -> enable_tx_queue + | None -> Evm_node.Enable true + in let patch_config = Evm_node.patch_config_with_experimental_feature ?enable_websocket:websockets - ~enable_tx_queue:(Enable true) + ~enable_tx_queue () in let* produce_block, evm_node = @@ -461,11 +466,6 @@ let setup_evm_kernel ?additional_config ?(setup_kernel_root_hash = true) max_blueprints_ahead; genesis_timestamp; } -> - let patch_config = - Evm_node.patch_config_with_experimental_feature - ?enable_websocket:websockets - () - in let private_rpc_port = Some (Port.fresh ()) in let sequencer_mode = Evm_node.Sequencer @@ -531,8 +531,8 @@ let register_test ~title ~tags ?(kernels = Kernel.all) ?additional_config ?admin ?bootstrap_accounts ?whitelist ?da_fee_per_byte ?minimum_base_fee_per_gas ?rollup_operator_key ?maximum_allowed_ticks ?restricted_rpcs ~setup_mode ~enable_dal ?(dal_slots = if enable_dal then Some [4] else None) - ~enable_multichain ?websockets ?enable_fast_withdrawal ?evm_version f - protocols = + ~enable_multichain ?websockets ?enable_fast_withdrawal ?evm_version + ?enable_tx_queue f protocols = let extra_tag = match setup_mode with | Setup_proxy -> "proxy" @@ -589,6 +589,7 @@ let register_test ~title ~tags ?(kernels = Kernel.all) ?additional_config ?admin ?websockets ?enable_fast_withdrawal ?evm_version + ?enable_tx_queue protocol in f ~protocol ~evm_setup) @@ -636,8 +637,8 @@ let register_sequencer ?(return_sequencer = false) ~title ~tags ?kernels ?challenge_window ?bootstrap_accounts ?da_fee_per_byte ?minimum_base_fee_per_gas ?time_between_blocks ?whitelist ?rollup_operator_key ?maximum_allowed_ticks ?restricted_rpcs - ?max_blueprints_ahead ?websockets ?evm_version ?genesis_timestamp f - protocols = + ?max_blueprints_ahead ?websockets ?evm_version ?genesis_timestamp + ?enable_tx_queue f protocols = let register ~enable_dal ~enable_multichain : unit = register_test ~title @@ -657,6 +658,7 @@ let register_sequencer ?(return_sequencer = false) ~title ~tags ?kernels ?restricted_rpcs ?websockets ?evm_version + ?enable_tx_queue f protocols ~enable_dal @@ -1834,7 +1836,10 @@ let test_rpc_txpool_content = ~title:"Check RPC txpool_content is available" ~minimum_base_fee_per_gas:base_fee_for_hardcoded_tx ~time_between_blocks:Nothing - @@ fun ~protocol:_ ~evm_setup:{evm_node; produce_block; _} -> + ~enable_tx_queue:(Enable false) + (*This test does not work for the tx_queue yet. It needs to be adapted *) + @@ + fun ~protocol:_ ~evm_setup:{evm_node; produce_block; _} -> let get_transaction_field transaction_content field_name = transaction_content |> JSON.get field_name |> JSON.as_string_opt |> Option.value ~default:"null" @@ -3517,7 +3522,9 @@ let test_latest_kernel_migration protocols = latest_kernel_migration ~from:Mainnet protocols let test_cannot_prepayed_leads_to_no_inclusion = - register_both + (* In sequencer the balance validation is only done during the + production of the block. *) + register_proxy ~tags:["evm"; "prepay"; "inclusion"] ~title: "Not being able to prepay a transaction leads to it not being included." @@ -5925,6 +5932,7 @@ let test_tx_pool_timeout = ~minimum_base_fee_per_gas:base_fee_for_hardcoded_tx ~tx_pool_timeout_limit:ttl ~setup_mode + ~enable_tx_queue:(Enable false) protocol in (* We send one transaction and produce a block immediatly to check that it's included @@ -6011,6 +6019,7 @@ let test_tx_pool_address_boundaries = in let* {evm_node = sequencer_node; produce_block; _} = setup_evm_kernel + ~enable_tx_queue:(Enable false) ~sequencer_admin ~admin ~minimum_base_fee_per_gas:base_fee_for_hardcoded_tx -- GitLab