From 5a33d4f6622a43c98db4fdf7b652039b0923ad41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 29 Apr 2025 22:05:30 +0200 Subject: [PATCH 1/7] EVM node/context: add a tx_container arg to start --- etherlink/bin_node/lib_dev/evm_context.ml | 5 +- etherlink/bin_node/lib_dev/evm_context.mli | 2 + etherlink/bin_node/lib_dev/observer.ml | 69 +++++++++++----------- etherlink/bin_node/lib_dev/sequencer.ml | 46 ++++++++------- etherlink/bin_node/main.ml | 15 ++++- 5 files changed, 77 insertions(+), 60 deletions(-) diff --git a/etherlink/bin_node/lib_dev/evm_context.ml b/etherlink/bin_node/lib_dev/evm_context.ml index 277720a8d91d..bbb62b80f587 100644 --- a/etherlink/bin_node/lib_dev/evm_context.ml +++ b/etherlink/bin_node/lib_dev/evm_context.ml @@ -1941,7 +1941,7 @@ let worker_wait_for_request req = return_ res let start ~configuration ?kernel_path ~data_dir ?smart_rollup_address - ~store_perm ?sequencer_wallet ?snapshot_url () = + ~store_perm ?sequencer_wallet ?snapshot_url ~tx_container:_ () = let open Lwt_result_syntax in let* () = lock_data_dir ~data_dir in let* worker = @@ -2115,7 +2115,7 @@ let apply_evm_events ?finalized_level events = worker_add_request ~request:(Apply_evm_events {finalized_level; events}) let init_from_rollup_node ~configuration ~omit_delayed_tx_events ~data_dir - ~rollup_node_data_dir () = + ~rollup_node_data_dir ~tx_container () = let open Lwt_result_syntax in let* () = lock_data_dir ~data_dir in let* irmin_context, evm_state, finalized_level = @@ -2134,6 +2134,7 @@ let init_from_rollup_node ~configuration ~omit_delayed_tx_events ~data_dir ~data_dir ~smart_rollup_address ~store_perm:`Read_write + ~tx_container () in worker_wait_for_request diff --git a/etherlink/bin_node/lib_dev/evm_context.mli b/etherlink/bin_node/lib_dev/evm_context.mli index 2444b9bd382d..dd238b941160 100644 --- a/etherlink/bin_node/lib_dev/evm_context.mli +++ b/etherlink/bin_node/lib_dev/evm_context.mli @@ -48,6 +48,7 @@ val start : store_perm:[`Read_only | `Read_write] -> ?sequencer_wallet:Client_keys.sk_uri * Client_context.wallet -> ?snapshot_url:string -> + tx_container:(module Services_backend_sig.Tx_container) -> unit -> (init_status * Address.t) tzresult Lwt.t @@ -62,6 +63,7 @@ val init_from_rollup_node : omit_delayed_tx_events:bool -> data_dir:string -> rollup_node_data_dir:string -> + tx_container:(module Services_backend_sig.Tx_container) -> unit -> unit tzresult Lwt.t diff --git a/etherlink/bin_node/lib_dev/observer.ml b/etherlink/bin_node/lib_dev/observer.ml index dffe7debe29c..97e9252f28fc 100644 --- a/etherlink/bin_node/lib_dev/observer.ml +++ b/etherlink/bin_node/lib_dev/observer.ml @@ -170,6 +170,25 @@ let main ?network ?kernel_path ~data_dir ~(config : Configuration.t) ~no_sync config.history_mode)) init_from_snapshot in + + let tx_container, ping_tx_pool = + match config.experimental_features.enable_tx_queue with + | Some _tx_queue_config -> + ( (module Tx_queue.Tx_container : Services_backend_sig.Tx_container), + false ) + | None -> + if config.finalized_view then + let tx_container = + container_forward_tx + ~keep_alive:config.keep_alive + ~evm_node_endpoint + in + (tx_container, false) + else + ( (module Tx_pool.Tx_container : Services_backend_sig.Tx_container), + true ) + in + let* _loaded = Evm_context.start ~configuration:config @@ -180,6 +199,7 @@ let main ?network ?kernel_path ~data_dir ~(config : Configuration.t) ~no_sync smart_rollup_address) ~store_perm:`Read_write ?snapshot_url + ~tx_container () in let* ro_ctxt = @@ -195,44 +215,25 @@ let main ?network ?kernel_path ~data_dir ~(config : Configuration.t) ~no_sync Evm_ro_context.ro_backend ro_ctxt config ~evm_node_endpoint in - let* tx_container, ping_tx_pool = + let* () = match config.experimental_features.enable_tx_queue with | Some tx_queue_config -> - let* () = - Tx_queue.start - ~config:tx_queue_config - ~keep_alive:config.keep_alive - () - in - return - ( (module Tx_queue.Tx_container : Services_backend_sig.Tx_container), - false ) + Tx_queue.start ~config:tx_queue_config ~keep_alive:config.keep_alive () | None -> - if config.finalized_view then - let tx_container = - container_forward_tx - ~keep_alive:config.keep_alive - ~evm_node_endpoint - in - return (tx_container, false) + if config.finalized_view then return_unit else - let* () = - Tx_pool.start - { - backend = observer_backend; - smart_rollup_address = - Tezos_crypto.Hashed.Smart_rollup_address.to_b58check - smart_rollup_address; - mode = Relay; - tx_timeout_limit = config.tx_pool_timeout_limit; - tx_pool_addr_limit = Int64.to_int config.tx_pool_addr_limit; - tx_pool_tx_per_addr_limit = - Int64.to_int config.tx_pool_tx_per_addr_limit; - } - in - return - ( (module Tx_pool.Tx_container : Services_backend_sig.Tx_container), - true ) + Tx_pool.start + { + backend = observer_backend; + smart_rollup_address = + Tezos_crypto.Hashed.Smart_rollup_address.to_b58check + smart_rollup_address; + mode = Relay; + tx_timeout_limit = config.tx_pool_timeout_limit; + tx_pool_addr_limit = Int64.to_int config.tx_pool_addr_limit; + tx_pool_tx_per_addr_limit = + Int64.to_int config.tx_pool_tx_per_addr_limit; + } in Metrics.init diff --git a/etherlink/bin_node/lib_dev/sequencer.ml b/etherlink/bin_node/lib_dev/sequencer.ml index 1a2549b949a4..a555cc7a6cd4 100644 --- a/etherlink/bin_node/lib_dev/sequencer.ml +++ b/etherlink/bin_node/lib_dev/sequencer.ml @@ -139,6 +139,14 @@ let main ~data_dir ?(genesis_timestamp = Misc.now ()) ~cctxt init_from_snapshot | None -> Result.return_none in + let* tx_container = + match configuration.experimental_features.enable_tx_queue with + | Some _tx_queue_config -> + return + (module Tx_queue.Tx_container : Services_backend_sig.Tx_container) + | None -> + return (module Tx_pool.Tx_container : Services_backend_sig.Tx_container) + in let* status, smart_rollup_address_typed = Evm_context.start ~configuration @@ -148,6 +156,7 @@ let main ~data_dir ?(genesis_timestamp = Misc.now ()) ~cctxt ~store_perm:`Read_write ~sequencer_wallet:(sequencer_config.sequencer, cctxt) ?snapshot_url + ~tx_container () in let smart_rollup_address_b58 = Address.to_string smart_rollup_address_typed in @@ -277,31 +286,24 @@ let main ~data_dir ?(genesis_timestamp = Misc.now ()) ~cctxt in let backend = Evm_ro_context.ro_backend ro_ctxt configuration in - let* tx_container = + let* () = match configuration.experimental_features.enable_tx_queue with | Some tx_queue_config -> - let* () = - Tx_queue.start - ~config:tx_queue_config - ~keep_alive:configuration.keep_alive - () - in - return - (module Tx_queue.Tx_container : Services_backend_sig.Tx_container) + Tx_queue.start + ~config:tx_queue_config + ~keep_alive:configuration.keep_alive + () | None -> - let* () = - Tx_pool.start - { - backend; - smart_rollup_address = smart_rollup_address_b58; - mode = Sequencer; - tx_timeout_limit = configuration.tx_pool_timeout_limit; - tx_pool_addr_limit = Int64.to_int configuration.tx_pool_addr_limit; - tx_pool_tx_per_addr_limit = - Int64.to_int configuration.tx_pool_tx_per_addr_limit; - } - in - return (module Tx_pool.Tx_container : Services_backend_sig.Tx_container) + Tx_pool.start + { + backend; + smart_rollup_address = smart_rollup_address_b58; + mode = Sequencer; + tx_timeout_limit = configuration.tx_pool_timeout_limit; + tx_pool_addr_limit = Int64.to_int configuration.tx_pool_addr_limit; + tx_pool_tx_per_addr_limit = + Int64.to_int configuration.tx_pool_tx_per_addr_limit; + } in Metrics.init ~mode:"sequencer" diff --git a/etherlink/bin_node/main.ml b/etherlink/bin_node/main.ml index 369ee48d2985..2596bd0d48f6 100644 --- a/etherlink/bin_node/main.ml +++ b/etherlink/bin_node/main.ml @@ -1499,6 +1499,7 @@ let init_from_rollup_node_command = ~omit_delayed_tx_events ~data_dir ~rollup_node_data_dir + ~tx_container:(module Evm_node_lib_dev.Tx_queue.Tx_container) ()) let dump_to_rlp_command = @@ -1709,7 +1710,12 @@ let patch_kernel_command = let configuration = {configuration with observer = None} in if force then let* _status = - Evm_context.start ~configuration ~data_dir ~store_perm:`Read_write () + Evm_context.start + ~configuration + ~data_dir + ~store_perm:`Read_write + ~tx_container:(module Evm_node_lib_dev.Tx_queue.Tx_container) + () in Evm_context.patch_kernel ?block_number (On_disk kernel_path) else @@ -2809,7 +2815,12 @@ let patch_state_command = to interact with an upstream EVM node. *) let configuration = {configuration with observer = None} in let* _status = - Evm_context.start ~configuration ~data_dir ~store_perm:`Read_write () + Evm_context.start + ~configuration + ~data_dir + ~store_perm:`Read_write + ~tx_container:(module Evm_node_lib_dev.Tx_queue.Tx_container) + () in Evm_context.patch_state ?block_number ~key ~value () else -- GitLab From 432c205211b598c8c43cdf5fb547382ff96d660a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Fri, 2 May 2025 16:45:14 +0200 Subject: [PATCH 2/7] EVM node/context: add a tx_container parameter --- etherlink/bin_node/lib_dev/evm_context.ml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/etherlink/bin_node/lib_dev/evm_context.ml b/etherlink/bin_node/lib_dev/evm_context.ml index bbb62b80f587..7752c9e11013 100644 --- a/etherlink/bin_node/lib_dev/evm_context.ml +++ b/etherlink/bin_node/lib_dev/evm_context.ml @@ -26,6 +26,7 @@ type parameters = { store_perm : [`Read_only | `Read_write]; sequencer_wallet : (Client_keys.sk_uri * Client_context.wallet) option; snapshot_url : string option; + tx_container : (module Services_backend_sig.Tx_container); } type session_state = { @@ -48,6 +49,7 @@ type t = { session : session_state; sequencer_wallet : (Client_keys.sk_uri * Client_context.wallet) option; legacy_block_storage : bool; + tx_container : (module Services_backend_sig.Tx_container); } let is_sequencer t = Option.is_some t.sequencer_wallet @@ -1362,7 +1364,8 @@ module State = struct let on_disk_kernel = function Wasm_debugger.On_disk _ -> true | _ -> false let init ~(configuration : Configuration.t) ?kernel_path ~data_dir - ?smart_rollup_address ~store_perm ?sequencer_wallet ?snapshot_url () = + ?smart_rollup_address ~store_perm ?sequencer_wallet ?snapshot_url + ~tx_container () = let open Lwt_result_syntax in let*! () = Lwt_utils_unix.create_dir (Evm_state.kernel_logs_directory ~data_dir) @@ -1476,6 +1479,7 @@ module State = struct store; sequencer_wallet; legacy_block_storage; + tx_container; } in @@ -1761,6 +1765,7 @@ module Handlers = struct store_perm; sequencer_wallet; snapshot_url; + tx_container; } = let open Lwt_result_syntax in let* ctxt, status = @@ -1772,6 +1777,7 @@ module Handlers = struct ~store_perm ?sequencer_wallet ?snapshot_url + ~tx_container () in Lwt.wakeup execution_config_waker @@ (ctxt.data_dir, pvm_config ctxt) ; @@ -1941,7 +1947,8 @@ let worker_wait_for_request req = return_ res let start ~configuration ?kernel_path ~data_dir ?smart_rollup_address - ~store_perm ?sequencer_wallet ?snapshot_url ~tx_container:_ () = + ~store_perm ?sequencer_wallet ?snapshot_url + ~(tx_container : (module Services_backend_sig.Tx_container)) () = let open Lwt_result_syntax in let* () = lock_data_dir ~data_dir in let* worker = @@ -1956,6 +1963,7 @@ let start ~configuration ?kernel_path ~data_dir ?smart_rollup_address store_perm; sequencer_wallet; snapshot_url; + tx_container; } (module Handlers) in -- GitLab From 7483e959f931a4754a65339df24df2b6ba378148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 29 Apr 2025 22:19:41 +0200 Subject: [PATCH 3/7] EVM node/context + Tx_queue + pool: move clear to Tx_container --- etherlink/bin_node/lib_dev/evm_context.ml | 4 ++-- etherlink/bin_node/lib_dev/observer.ml | 2 ++ etherlink/bin_node/lib_dev/proxy.ml | 2 ++ etherlink/bin_node/lib_dev/rpc.ml | 2 ++ etherlink/bin_node/lib_dev/services_backend_sig.ml | 3 +++ etherlink/bin_node/lib_dev/tx_pool.ml | 2 ++ etherlink/bin_node/lib_dev/tx_queue.ml | 10 +++++----- etherlink/bin_node/lib_dev/tx_queue.mli | 3 --- 8 files changed, 18 insertions(+), 10 deletions(-) diff --git a/etherlink/bin_node/lib_dev/evm_context.ml b/etherlink/bin_node/lib_dev/evm_context.ml index 7752c9e11013..5f5831971f1e 100644 --- a/etherlink/bin_node/lib_dev/evm_context.ml +++ b/etherlink/bin_node/lib_dev/evm_context.ml @@ -474,8 +474,8 @@ module State = struct let*! evm_state = Irmin_context.PVMState.get context in (* Clear the TX queue if needed, to preserve its invariants about nonces always increasing. *) let* () = - when_ (Configuration.is_tx_queue_enabled ctxt.configuration) - @@ Tx_queue.clear + let (module Tx_container) = ctxt.tx_container in + Tx_container.clear () in (* Clear the store. *) let* () = Evm_store.reset_after conn ~l2_level in diff --git a/etherlink/bin_node/lib_dev/observer.ml b/etherlink/bin_node/lib_dev/observer.ml index 97e9252f28fc..a155f1291186 100644 --- a/etherlink/bin_node/lib_dev/observer.ml +++ b/etherlink/bin_node/lib_dev/observer.ml @@ -131,6 +131,8 @@ let container_forward_tx ~keep_alive ~evm_node_endpoint : let shutdown () = Lwt_result_syntax.return_unit + let clear () = Lwt_result_syntax.return_unit + let tx_queue_tick ~evm_node_endpoint:_ = Lwt_result_syntax.return_unit let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = diff --git a/etherlink/bin_node/lib_dev/proxy.ml b/etherlink/bin_node/lib_dev/proxy.ml index 3e320216173f..45e7e1eb823a 100644 --- a/etherlink/bin_node/lib_dev/proxy.ml +++ b/etherlink/bin_node/lib_dev/proxy.ml @@ -43,6 +43,8 @@ let container_forward_tx ~evm_node_endpoint ~keep_alive : let shutdown () = Lwt_result_syntax.return_unit + let clear () = Lwt_result_syntax.return_unit + let tx_queue_tick ~evm_node_endpoint:_ = Lwt_result_syntax.return_unit let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = diff --git a/etherlink/bin_node/lib_dev/rpc.ml b/etherlink/bin_node/lib_dev/rpc.ml index 2e0edffaebc9..efb4f433e1c6 100644 --- a/etherlink/bin_node/lib_dev/rpc.ml +++ b/etherlink/bin_node/lib_dev/rpc.ml @@ -136,6 +136,8 @@ let container_forward_request ~public_endpoint ~private_endpoint ~keep_alive : let shutdown () = Lwt_result_syntax.return_unit + let clear () = Lwt_result_syntax.return_unit + let tx_queue_tick ~evm_node_endpoint:_ = Lwt_result_syntax.return_unit let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = diff --git a/etherlink/bin_node/lib_dev/services_backend_sig.ml b/etherlink/bin_node/lib_dev/services_backend_sig.ml index f0536d9530a8..3bd32d888b62 100644 --- a/etherlink/bin_node/lib_dev/services_backend_sig.ml +++ b/etherlink/bin_node/lib_dev/services_backend_sig.ml @@ -227,6 +227,9 @@ module type Tx_container = sig to be processed. *) val shutdown : unit -> unit tzresult Lwt.t + (** [clear ()] removes the container data but keeps the allocated space *) + val clear : unit -> unit tzresult Lwt.t + (** Trigger a tick in the [Tx_queue]. *) val tx_queue_tick : evm_node_endpoint:endpoint -> unit tzresult Lwt.t diff --git a/etherlink/bin_node/lib_dev/tx_pool.ml b/etherlink/bin_node/lib_dev/tx_pool.ml index 5476e880bbf1..15aa96bf71b0 100644 --- a/etherlink/bin_node/lib_dev/tx_pool.ml +++ b/etherlink/bin_node/lib_dev/tx_pool.ml @@ -971,6 +971,8 @@ module Tx_container = struct let*! () = Worker.shutdown w in return_unit + let clear () = Lwt_result_syntax.return_unit + let tx_queue_tick ~evm_node_endpoint:_ = Lwt_result_syntax.return_unit let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = diff --git a/etherlink/bin_node/lib_dev/tx_queue.ml b/etherlink/bin_node/lib_dev/tx_queue.ml index 5f56d2d17856..bd412b87cdbb 100644 --- a/etherlink/bin_node/lib_dev/tx_queue.ml +++ b/etherlink/bin_node/lib_dev/tx_queue.ml @@ -1033,11 +1033,6 @@ let start ~config ~keep_alive () = let*! () = Tx_queue_events.is_ready () in return_unit -let clear () = - let open Lwt_result_syntax in - let*? w = Lazy.force worker in - Worker.Queue.push_request_and_wait w Clear |> handle_request_error - let lock_transactions () = bind_worker @@ fun w -> push_request w Lock_transactions @@ -1120,6 +1115,11 @@ module Tx_container = struct let*! () = Worker.shutdown w in return_unit + let clear () = + let open Lwt_result_syntax in + let*? w = Lazy.force worker in + Worker.Queue.push_request_and_wait w Clear |> handle_request_error + let tx_queue_tick ~evm_node_endpoint = bind_worker @@ fun w -> push_request w (Tick {evm_node_endpoint}) diff --git a/etherlink/bin_node/lib_dev/tx_queue.mli b/etherlink/bin_node/lib_dev/tx_queue.mli index b94997c7446b..2158f7a4eee8 100644 --- a/etherlink/bin_node/lib_dev/tx_queue.mli +++ b/etherlink/bin_node/lib_dev/tx_queue.mli @@ -33,9 +33,6 @@ val start : unit -> unit tzresult Lwt.t -(** [clear ()] removes the tx queue data but keeps the allocated space *) -val clear : unit -> unit tzresult Lwt.t - (** [lock_transactions] locks the transactions in the queue, new transactions can be added but nothing can be retrieved with {!pop_transactions}. *) -- GitLab From 763876e822024385bf92f359a1327149ba3f4722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 29 Apr 2025 22:43:44 +0200 Subject: [PATCH 4/7] EVM node/Blueprints_publisher: add tx_container parameter --- etherlink/bin_node/lib_dev/blueprints_publisher.ml | 8 +++++++- etherlink/bin_node/lib_dev/blueprints_publisher.mli | 1 + etherlink/bin_node/lib_dev/sequencer.ml | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/etherlink/bin_node/lib_dev/blueprints_publisher.ml b/etherlink/bin_node/lib_dev/blueprints_publisher.ml index 6fed772ff304..e98ce10c72d1 100644 --- a/etherlink/bin_node/lib_dev/blueprints_publisher.ml +++ b/etherlink/bin_node/lib_dev/blueprints_publisher.ml @@ -19,6 +19,7 @@ type parameters = { drop_duplicate : bool; order_enabled : bool; tx_queue_enabled : bool; + tx_container : (module Services_backend_sig.Tx_container); } type state = { @@ -40,6 +41,7 @@ type state = { (** Do not try to catch-up if [cooldown] is not equal to 0 *) enable_dal : bool; tx_queue_enabled : bool; + tx_container : (module Services_backend_sig.Tx_container); } module Types = struct @@ -261,6 +263,7 @@ module Handlers = struct drop_duplicate; order_enabled; tx_queue_enabled; + tx_container; } : Types.parameters) = let open Lwt_result_syntax in @@ -291,6 +294,7 @@ module Handlers = struct enable_dal = Option.is_some dal_slots; order_enabled; tx_queue_enabled; + tx_container; } let on_request : @@ -349,7 +353,8 @@ let table = Worker.create_table Queue let worker_promise, worker_waker = Lwt.task () let start ~blueprints_range ~rollup_node_endpoint ~config ~latest_level_seen - ~keep_alive ~drop_duplicate ~order_enabled ~tx_queue_enabled () = + ~keep_alive ~drop_duplicate ~order_enabled ~tx_queue_enabled ~tx_container + () = let open Lwt_result_syntax in let* worker = Worker.launch @@ -364,6 +369,7 @@ let start ~blueprints_range ~rollup_node_endpoint ~config ~latest_level_seen drop_duplicate; order_enabled; tx_queue_enabled; + tx_container; } (module Handlers) in diff --git a/etherlink/bin_node/lib_dev/blueprints_publisher.mli b/etherlink/bin_node/lib_dev/blueprints_publisher.mli index 1b801e4cf2d7..eed9f22eed2a 100644 --- a/etherlink/bin_node/lib_dev/blueprints_publisher.mli +++ b/etherlink/bin_node/lib_dev/blueprints_publisher.mli @@ -19,6 +19,7 @@ val start : drop_duplicate:bool -> order_enabled:bool -> tx_queue_enabled:bool -> + tx_container:(module Services_backend_sig.Tx_container) -> unit -> unit tzresult Lwt.t diff --git a/etherlink/bin_node/lib_dev/sequencer.ml b/etherlink/bin_node/lib_dev/sequencer.ml index a555cc7a6cd4..c1a00e286a4f 100644 --- a/etherlink/bin_node/lib_dev/sequencer.ml +++ b/etherlink/bin_node/lib_dev/sequencer.ml @@ -250,6 +250,7 @@ let main ~data_dir ?(genesis_timestamp = Misc.now ()) ~cctxt ~order_enabled: configuration.experimental_features.blueprints_publisher_order_enabled ~tx_queue_enabled:(Configuration.is_tx_queue_enabled configuration) + ~tx_container () in let* () = -- GitLab From 871d75c97d5589898b5fe161ecebdb7d02a924a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 29 Apr 2025 22:49:46 +0200 Subject: [PATCH 5/7] EVM node/Blueprints_publisher + Tx_queue + pool: move lock_transactions to Tx_container --- etherlink/bin_node/lib_dev/blueprints_publisher.ml | 6 ++++-- etherlink/bin_node/lib_dev/observer.ml | 2 ++ etherlink/bin_node/lib_dev/proxy.ml | 2 ++ etherlink/bin_node/lib_dev/rpc.ml | 2 ++ etherlink/bin_node/lib_dev/services_backend_sig.ml | 5 +++++ etherlink/bin_node/lib_dev/tx_pool.ml | 12 ++++++------ etherlink/bin_node/lib_dev/tx_pool.mli | 4 ---- etherlink/bin_node/lib_dev/tx_queue.ml | 6 +++--- etherlink/bin_node/lib_dev/tx_queue.mli | 5 ----- 9 files changed, 24 insertions(+), 20 deletions(-) diff --git a/etherlink/bin_node/lib_dev/blueprints_publisher.ml b/etherlink/bin_node/lib_dev/blueprints_publisher.ml index e98ce10c72d1..35fb620e67d8 100644 --- a/etherlink/bin_node/lib_dev/blueprints_publisher.ml +++ b/etherlink/bin_node/lib_dev/blueprints_publisher.ml @@ -110,6 +110,8 @@ module Worker = struct let tx_queue_enabled worker = (state worker).tx_queue_enabled + let tx_container worker = (state worker).tx_container + let decrement_cooldown worker = let current = current_cooldown worker in if on_cooldown worker then set_cooldown worker (current - 1) else () @@ -167,8 +169,8 @@ module Worker = struct match rollup_is_lagging_behind self with | No_lag | Needs_republish -> return_unit | Needs_lock -> - if tx_queue_enabled self then Tx_queue.lock_transactions () - else Tx_pool.lock_transactions () + let (module Tx_container) = tx_container self in + Tx_container.lock_transactions () let catch_up worker = let open Lwt_result_syntax in diff --git a/etherlink/bin_node/lib_dev/observer.ml b/etherlink/bin_node/lib_dev/observer.ml index a155f1291186..5947def02219 100644 --- a/etherlink/bin_node/lib_dev/observer.ml +++ b/etherlink/bin_node/lib_dev/observer.ml @@ -137,6 +137,8 @@ let container_forward_tx ~keep_alive ~evm_node_endpoint : let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = Lwt_result_syntax.return_unit + + let lock_transactions () = Lwt_result_syntax.return_unit end) let main ?network ?kernel_path ~data_dir ~(config : Configuration.t) ~no_sync diff --git a/etherlink/bin_node/lib_dev/proxy.ml b/etherlink/bin_node/lib_dev/proxy.ml index 45e7e1eb823a..bd062fab119a 100644 --- a/etherlink/bin_node/lib_dev/proxy.ml +++ b/etherlink/bin_node/lib_dev/proxy.ml @@ -49,6 +49,8 @@ let container_forward_tx ~evm_node_endpoint ~keep_alive : let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = Lwt_result_syntax.return_unit + + let lock_transactions () = Lwt_result_syntax.return_unit end) let tx_queue_pop_and_inject (module Rollup_node_rpc : Services_backend_sig.S) diff --git a/etherlink/bin_node/lib_dev/rpc.ml b/etherlink/bin_node/lib_dev/rpc.ml index efb4f433e1c6..99b413122dd9 100644 --- a/etherlink/bin_node/lib_dev/rpc.ml +++ b/etherlink/bin_node/lib_dev/rpc.ml @@ -142,6 +142,8 @@ let container_forward_request ~public_endpoint ~private_endpoint ~keep_alive : let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = Lwt_result_syntax.return_unit + + let lock_transactions () = Lwt_result_syntax.return_unit end) let main ~data_dir ~evm_node_endpoint ?evm_node_private_endpoint diff --git a/etherlink/bin_node/lib_dev/services_backend_sig.ml b/etherlink/bin_node/lib_dev/services_backend_sig.ml index 3bd32d888b62..408d9ea20986 100644 --- a/etherlink/bin_node/lib_dev/services_backend_sig.ml +++ b/etherlink/bin_node/lib_dev/services_backend_sig.ml @@ -238,4 +238,9 @@ module type Tx_container = sig [tick_interval] seconds. *) val tx_queue_beacon : evm_node_endpoint:endpoint -> tick_interval:float -> unit tzresult Lwt.t + + (** [lock_transactions] locks the transactions in the queue, new + transactions can be added but nothing can be retrieved with + {!pop_transactions}. *) + val lock_transactions : unit -> unit tzresult Lwt.t end diff --git a/etherlink/bin_node/lib_dev/tx_pool.ml b/etherlink/bin_node/lib_dev/tx_pool.ml index 15aa96bf71b0..5b6cc76b635e 100644 --- a/etherlink/bin_node/lib_dev/tx_pool.ml +++ b/etherlink/bin_node/lib_dev/tx_pool.ml @@ -868,12 +868,6 @@ let pop_and_inject_transactions_lazy () = in return_unit -let lock_transactions () = - let open Lwt_result_syntax in - let*? worker = Lazy.force worker in - Worker.Queue.push_request_and_wait worker Request.Lock_transactions - |> handle_request_error - let unlock_transactions () = let open Lwt_result_syntax in let*? worker = Lazy.force worker in @@ -977,4 +971,10 @@ module Tx_container = struct let tx_queue_beacon ~evm_node_endpoint:_ ~tick_interval:_ = Lwt_result_syntax.return_unit + + let lock_transactions () = + let open Lwt_result_syntax in + let*? worker = Lazy.force worker in + Worker.Queue.push_request_and_wait worker Request.Lock_transactions + |> handle_request_error end diff --git a/etherlink/bin_node/lib_dev/tx_pool.mli b/etherlink/bin_node/lib_dev/tx_pool.mli index c5e6fd48fb30..64bca86ae5e5 100644 --- a/etherlink/bin_node/lib_dev/tx_pool.mli +++ b/etherlink/bin_node/lib_dev/tx_pool.mli @@ -44,10 +44,6 @@ val pop_and_inject_transactions : unit -> unit tzresult Lwt.t complete *) val pop_and_inject_transactions_lazy : unit -> unit tzresult Lwt.t -(** [lock_transactions] locks the transactions in the pool, new transactions - can be added but nothing can be retrieved with {!pop_transactions}. *) -val lock_transactions : unit -> unit tzresult Lwt.t - (** [unlock_transactions] unlocks the transactions if it was locked by {!lock_transactions}. *) val unlock_transactions : unit -> unit tzresult Lwt.t diff --git a/etherlink/bin_node/lib_dev/tx_queue.ml b/etherlink/bin_node/lib_dev/tx_queue.ml index bd412b87cdbb..8d96b3093bcf 100644 --- a/etherlink/bin_node/lib_dev/tx_queue.ml +++ b/etherlink/bin_node/lib_dev/tx_queue.ml @@ -1033,9 +1033,6 @@ let start ~config ~keep_alive () = let*! () = Tx_queue_events.is_ready () in return_unit -let lock_transactions () = - bind_worker @@ fun w -> push_request w Lock_transactions - let unlock_transactions () = bind_worker @@ fun w -> push_request w Unlock_transactions @@ -1131,4 +1128,7 @@ module Tx_container = struct loop () in loop () + + let lock_transactions () = + bind_worker @@ fun w -> push_request w Lock_transactions end diff --git a/etherlink/bin_node/lib_dev/tx_queue.mli b/etherlink/bin_node/lib_dev/tx_queue.mli index 2158f7a4eee8..6c893df8deed 100644 --- a/etherlink/bin_node/lib_dev/tx_queue.mli +++ b/etherlink/bin_node/lib_dev/tx_queue.mli @@ -33,11 +33,6 @@ val start : unit -> unit tzresult Lwt.t -(** [lock_transactions] locks the transactions in the queue, new - transactions can be added but nothing can be retrieved with - {!pop_transactions}. *) -val lock_transactions : unit -> unit tzresult Lwt.t - (** [unlock_transactions] unlocks the transactions if it was locked by {!lock_transactions}. *) val unlock_transactions : unit -> unit tzresult Lwt.t -- GitLab From 6fe8b14a5b2ba9f00f06e47eb33f8ae86840cec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 29 Apr 2025 22:54:05 +0200 Subject: [PATCH 6/7] EVM node/Blueprints_publisher + Tx_queue + pool: move unlock_transactions to Tx_container --- etherlink/bin_node/lib_dev/blueprints_publisher.ml | 6 ++---- etherlink/bin_node/lib_dev/observer.ml | 2 ++ etherlink/bin_node/lib_dev/proxy.ml | 2 ++ etherlink/bin_node/lib_dev/rpc.ml | 2 ++ etherlink/bin_node/lib_dev/services_backend_sig.ml | 4 ++++ etherlink/bin_node/lib_dev/tx_pool.ml | 12 ++++++------ etherlink/bin_node/lib_dev/tx_pool.mli | 4 ---- etherlink/bin_node/lib_dev/tx_queue.ml | 6 +++--- etherlink/bin_node/lib_dev/tx_queue.mli | 4 ---- 9 files changed, 21 insertions(+), 21 deletions(-) diff --git a/etherlink/bin_node/lib_dev/blueprints_publisher.ml b/etherlink/bin_node/lib_dev/blueprints_publisher.ml index 35fb620e67d8..2a70590cfa1c 100644 --- a/etherlink/bin_node/lib_dev/blueprints_publisher.ml +++ b/etherlink/bin_node/lib_dev/blueprints_publisher.ml @@ -108,8 +108,6 @@ module Worker = struct let on_cooldown worker = 0 < current_cooldown worker - let tx_queue_enabled worker = (state worker).tx_queue_enabled - let tx_container worker = (state worker).tx_container let decrement_cooldown worker = @@ -326,8 +324,8 @@ module Handlers = struct Worker.decrement_cooldown self ; (* If there is no lag or the worker just needs to republish we unlock the transaction pool in case it was locked. *) - if Worker.tx_queue_enabled self then Tx_queue.unlock_transactions () - else Tx_pool.unlock_transactions ()) + let (module Tx_container) = Worker.tx_container self in + Tx_container.unlock_transactions ()) let on_completion (type a err) _self (_r : (a, err) Request.t) (_res : a) _st = diff --git a/etherlink/bin_node/lib_dev/observer.ml b/etherlink/bin_node/lib_dev/observer.ml index 5947def02219..ed6433468b44 100644 --- a/etherlink/bin_node/lib_dev/observer.ml +++ b/etherlink/bin_node/lib_dev/observer.ml @@ -139,6 +139,8 @@ let container_forward_tx ~keep_alive ~evm_node_endpoint : Lwt_result_syntax.return_unit let lock_transactions () = Lwt_result_syntax.return_unit + + let unlock_transactions () = Lwt_result_syntax.return_unit end) let main ?network ?kernel_path ~data_dir ~(config : Configuration.t) ~no_sync diff --git a/etherlink/bin_node/lib_dev/proxy.ml b/etherlink/bin_node/lib_dev/proxy.ml index bd062fab119a..570a96c0aed7 100644 --- a/etherlink/bin_node/lib_dev/proxy.ml +++ b/etherlink/bin_node/lib_dev/proxy.ml @@ -51,6 +51,8 @@ let container_forward_tx ~evm_node_endpoint ~keep_alive : Lwt_result_syntax.return_unit let lock_transactions () = Lwt_result_syntax.return_unit + + let unlock_transactions () = Lwt_result_syntax.return_unit end) let tx_queue_pop_and_inject (module Rollup_node_rpc : Services_backend_sig.S) diff --git a/etherlink/bin_node/lib_dev/rpc.ml b/etherlink/bin_node/lib_dev/rpc.ml index 99b413122dd9..c394e3dd0dc3 100644 --- a/etherlink/bin_node/lib_dev/rpc.ml +++ b/etherlink/bin_node/lib_dev/rpc.ml @@ -144,6 +144,8 @@ let container_forward_request ~public_endpoint ~private_endpoint ~keep_alive : Lwt_result_syntax.return_unit let lock_transactions () = Lwt_result_syntax.return_unit + + let unlock_transactions () = Lwt_result_syntax.return_unit end) let main ~data_dir ~evm_node_endpoint ?evm_node_private_endpoint diff --git a/etherlink/bin_node/lib_dev/services_backend_sig.ml b/etherlink/bin_node/lib_dev/services_backend_sig.ml index 408d9ea20986..a81e5d95240e 100644 --- a/etherlink/bin_node/lib_dev/services_backend_sig.ml +++ b/etherlink/bin_node/lib_dev/services_backend_sig.ml @@ -243,4 +243,8 @@ module type Tx_container = sig transactions can be added but nothing can be retrieved with {!pop_transactions}. *) val lock_transactions : unit -> unit tzresult Lwt.t + + (** [unlock_transactions] unlocks the transactions if it was locked by + {!lock_transactions}. *) + val unlock_transactions : unit -> unit tzresult Lwt.t end diff --git a/etherlink/bin_node/lib_dev/tx_pool.ml b/etherlink/bin_node/lib_dev/tx_pool.ml index 5b6cc76b635e..7fdf52b2b041 100644 --- a/etherlink/bin_node/lib_dev/tx_pool.ml +++ b/etherlink/bin_node/lib_dev/tx_pool.ml @@ -868,12 +868,6 @@ let pop_and_inject_transactions_lazy () = in return_unit -let unlock_transactions () = - let open Lwt_result_syntax in - let*? worker = Lazy.force worker in - Worker.Queue.push_request_and_wait worker Request.Unlock_transactions - |> handle_request_error - let is_locked () = let open Lwt_result_syntax in let*? worker = Lazy.force worker in @@ -977,4 +971,10 @@ module Tx_container = struct let*? worker = Lazy.force worker in Worker.Queue.push_request_and_wait worker Request.Lock_transactions |> handle_request_error + + let unlock_transactions () = + let open Lwt_result_syntax in + let*? worker = Lazy.force worker in + Worker.Queue.push_request_and_wait worker Request.Unlock_transactions + |> handle_request_error end diff --git a/etherlink/bin_node/lib_dev/tx_pool.mli b/etherlink/bin_node/lib_dev/tx_pool.mli index 64bca86ae5e5..47fe10f33c4f 100644 --- a/etherlink/bin_node/lib_dev/tx_pool.mli +++ b/etherlink/bin_node/lib_dev/tx_pool.mli @@ -44,10 +44,6 @@ val pop_and_inject_transactions : unit -> unit tzresult Lwt.t complete *) val pop_and_inject_transactions_lazy : unit -> unit tzresult Lwt.t -(** [unlock_transactions] unlocks the transactions if it was locked by - {!lock_transactions}. *) -val unlock_transactions : unit -> unit tzresult Lwt.t - (** [is_locked] checks if the pools is locked. *) val is_locked : unit -> bool tzresult Lwt.t diff --git a/etherlink/bin_node/lib_dev/tx_queue.ml b/etherlink/bin_node/lib_dev/tx_queue.ml index 8d96b3093bcf..652151590600 100644 --- a/etherlink/bin_node/lib_dev/tx_queue.ml +++ b/etherlink/bin_node/lib_dev/tx_queue.ml @@ -1033,9 +1033,6 @@ let start ~config ~keep_alive () = let*! () = Tx_queue_events.is_ready () in return_unit -let unlock_transactions () = - bind_worker @@ fun w -> push_request w Unlock_transactions - let is_locked () = let open Lwt_result_syntax in let*? worker = Lazy.force worker in @@ -1131,4 +1128,7 @@ module Tx_container = struct let lock_transactions () = bind_worker @@ fun w -> push_request w Lock_transactions + + let unlock_transactions () = + bind_worker @@ fun w -> push_request w Unlock_transactions end diff --git a/etherlink/bin_node/lib_dev/tx_queue.mli b/etherlink/bin_node/lib_dev/tx_queue.mli index 6c893df8deed..c3d38e360005 100644 --- a/etherlink/bin_node/lib_dev/tx_queue.mli +++ b/etherlink/bin_node/lib_dev/tx_queue.mli @@ -33,10 +33,6 @@ val start : unit -> unit tzresult Lwt.t -(** [unlock_transactions] unlocks the transactions if it was locked by - {!lock_transactions}. *) -val unlock_transactions : unit -> unit tzresult Lwt.t - (** [is_locked] checks if the queue is locked. *) val is_locked : unit -> bool tzresult Lwt.t -- GitLab From 0253c78b299bdba4c08b4965817c07b5d622159a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Tue, 29 Apr 2025 22:55:18 +0200 Subject: [PATCH 7/7] EVM node/Blueprints_publisher: remove unused param tx_queue_enabled --- etherlink/bin_node/lib_dev/blueprints_publisher.ml | 8 +------- etherlink/bin_node/lib_dev/blueprints_publisher.mli | 1 - etherlink/bin_node/lib_dev/sequencer.ml | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/etherlink/bin_node/lib_dev/blueprints_publisher.ml b/etherlink/bin_node/lib_dev/blueprints_publisher.ml index 2a70590cfa1c..a5eabc415649 100644 --- a/etherlink/bin_node/lib_dev/blueprints_publisher.ml +++ b/etherlink/bin_node/lib_dev/blueprints_publisher.ml @@ -18,7 +18,6 @@ type parameters = { keep_alive : bool; drop_duplicate : bool; order_enabled : bool; - tx_queue_enabled : bool; tx_container : (module Services_backend_sig.Tx_container); } @@ -40,7 +39,6 @@ type state = { mutable cooldown : int; (** Do not try to catch-up if [cooldown] is not equal to 0 *) enable_dal : bool; - tx_queue_enabled : bool; tx_container : (module Services_backend_sig.Tx_container); } @@ -262,7 +260,6 @@ module Handlers = struct keep_alive; drop_duplicate; order_enabled; - tx_queue_enabled; tx_container; } : Types.parameters) = @@ -293,7 +290,6 @@ module Handlers = struct keep_alive; enable_dal = Option.is_some dal_slots; order_enabled; - tx_queue_enabled; tx_container; } @@ -353,8 +349,7 @@ let table = Worker.create_table Queue let worker_promise, worker_waker = Lwt.task () let start ~blueprints_range ~rollup_node_endpoint ~config ~latest_level_seen - ~keep_alive ~drop_duplicate ~order_enabled ~tx_queue_enabled ~tx_container - () = + ~keep_alive ~drop_duplicate ~order_enabled ~tx_container () = let open Lwt_result_syntax in let* worker = Worker.launch @@ -368,7 +363,6 @@ let start ~blueprints_range ~rollup_node_endpoint ~config ~latest_level_seen keep_alive; drop_duplicate; order_enabled; - tx_queue_enabled; tx_container; } (module Handlers) diff --git a/etherlink/bin_node/lib_dev/blueprints_publisher.mli b/etherlink/bin_node/lib_dev/blueprints_publisher.mli index eed9f22eed2a..0531919abe03 100644 --- a/etherlink/bin_node/lib_dev/blueprints_publisher.mli +++ b/etherlink/bin_node/lib_dev/blueprints_publisher.mli @@ -18,7 +18,6 @@ val start : keep_alive:bool -> drop_duplicate:bool -> order_enabled:bool -> - tx_queue_enabled:bool -> tx_container:(module Services_backend_sig.Tx_container) -> unit -> unit tzresult Lwt.t diff --git a/etherlink/bin_node/lib_dev/sequencer.ml b/etherlink/bin_node/lib_dev/sequencer.ml index c1a00e286a4f..46d5f268257f 100644 --- a/etherlink/bin_node/lib_dev/sequencer.ml +++ b/etherlink/bin_node/lib_dev/sequencer.ml @@ -249,7 +249,6 @@ let main ~data_dir ?(genesis_timestamp = Misc.now ()) ~cctxt configuration.experimental_features.drop_duplicate_on_injection ~order_enabled: configuration.experimental_features.blueprints_publisher_order_enabled - ~tx_queue_enabled:(Configuration.is_tx_queue_enabled configuration) ~tx_container () in -- GitLab