@@ -4,10 +4,10 @@ use super::{
44 block_builder:: BlockBuilder , l1_helpers:: L1Helper , setup_engine, tx_helpers:: TxHelper ,
55} ;
66use crate :: {
7- BlobProviderArgs , ChainOrchestratorArgs , ConsensusAlgorithm , ConsensusArgs , EngineDriverArgs ,
8- L1ProviderArgs , PprofArgs , RollupNodeDatabaseArgs , RollupNodeGasPriceOracleArgs ,
9- RollupNodeNetworkArgs , RpcArgs , ScrollRollupNode , ScrollRollupNodeConfig , SequencerArgs ,
10- SignerArgs ,
7+ constants , BlobProviderArgs , ChainOrchestratorArgs , ConsensusAlgorithm , ConsensusArgs ,
8+ EngineDriverArgs , L1ProviderArgs , PprofArgs , RollupNodeDatabaseArgs ,
9+ RollupNodeGasPriceOracleArgs , RollupNodeNetworkArgs , RpcArgs , ScrollRollupNode ,
10+ ScrollRollupNodeConfig , SequencerArgs , SignerArgs , TestArgs ,
1111} ;
1212
1313use alloy_eips:: BlockNumberOrTag ;
@@ -31,8 +31,10 @@ use reth_scroll_primitives::ScrollPrimitives;
3131use reth_tasks:: TaskManager ;
3232use reth_tokio_util:: EventStream ;
3333use rollup_node_chain_orchestrator:: { ChainOrchestratorEvent , ChainOrchestratorHandle } ;
34+ use rollup_node_primitives:: BlockInfo ;
3435use rollup_node_sequencer:: L1MessageInclusionMode ;
3536use scroll_alloy_consensus:: ScrollPooledTransaction ;
37+ use scroll_alloy_provider:: { ScrollAuthApiEngineClient , ScrollEngineApi } ;
3638use scroll_alloy_rpc_types:: Transaction ;
3739use scroll_engine:: { Engine , ForkchoiceState } ;
3840use std:: {
@@ -166,6 +168,27 @@ pub struct NodeHandle {
166168}
167169
168170impl NodeHandle {
171+ /// Create a new node handle.
172+ pub async fn new ( node : ScrollNodeTestComponents , typ : NodeType ) -> eyre:: Result < Self > {
173+ // Create engine for the node
174+ let genesis_hash = node. inner . chain_spec ( ) . genesis_hash ( ) ;
175+ let auth_client = node. inner . engine_http_client ( ) ;
176+ let engine_client = Arc :: new ( ScrollAuthApiEngineClient :: new ( auth_client) )
177+ as Arc < dyn ScrollEngineApi + Send + Sync + ' static > ;
178+ let fcs = ForkchoiceState :: new (
179+ BlockInfo { hash : genesis_hash, number : 0 } ,
180+ Default :: default ( ) ,
181+ Default :: default ( ) ,
182+ ) ;
183+ let engine = Engine :: new ( Arc :: new ( engine_client) , fcs) ;
184+
185+ let rollup_manager_handle = node. inner . add_ons_handle . rollup_manager_handle . clone ( ) ;
186+ let chain_orchestrator_rx =
187+ node. inner . add_ons_handle . rollup_manager_handle . get_event_listener ( ) . await ?;
188+
189+ Ok ( Self { node, engine, chain_orchestrator_rx, rollup_manager_handle, typ } )
190+ }
191+
169192 /// Returns true if this is a handle to the sequencer.
170193 pub const fn is_sequencer ( & self ) -> bool {
171194 matches ! ( self . typ, NodeType :: Sequencer )
@@ -671,14 +694,13 @@ impl TestFixtureBuilder {
671694 None
672695 } ;
673696
674- let ( mut nodes, mut dbs, task , wallet) = setup_engine (
697+ let ( mut nodes, dbs, wallet) = setup_engine (
675698 self . config . clone ( ) ,
676699 self . num_nodes ,
677700 chain_spec. clone ( ) ,
678701 self . is_dev ,
679702 self . no_local_transactions_propagation ,
680703 None ,
681- None ,
682704 )
683705 . await ?;
684706
@@ -689,68 +711,41 @@ impl TestFixtureBuilder {
689711 format ! ( "http://localhost:{}" , nodes[ 0 ] . rpc_url( ) . port( ) . unwrap( ) ) . parse ( ) ?;
690712
691713 // Configure remote source node
692- let mut remote_config = config. clone ( ) ;
714+ let mut remote_config = self . config . clone ( ) ;
693715 remote_config. sequencer_args . sequencer_enabled = true ; // needs to build blocks
694716 remote_config. sequencer_args . auto_start = false ;
695717 remote_config. remote_block_source_args . enabled = true ;
696718 remote_config. remote_block_source_args . url = Some ( sequencer_url) ;
697719 // Use a fast poll interval for tests
698720 remote_config. remote_block_source_args . poll_interval_ms = 100 ;
699721
700- let ( mut remote_nodes, _, new_task , _) = setup_engine (
722+ let ( mut remote_nodes, _, _) = setup_engine (
701723 remote_config,
702724 1 ,
703725 chain_spec. clone ( ) ,
704726 self . is_dev ,
705727 self . no_local_transactions_propagation ,
706728 None ,
707- Some ( tasks) ,
708729 )
709730 . await ?;
710- let tasks = new_task;
711731
712732 nodes. push ( remote_nodes. pop ( ) . unwrap ( ) ) ;
713733 }
714734
715735 let mut node_handles = Vec :: with_capacity ( nodes. len ( ) ) ;
716736 for ( index, node) in nodes. into_iter ( ) . enumerate ( ) {
717- let genesis_hash = node. inner . chain_spec ( ) . genesis_hash ( ) ;
718-
719- // Create engine for the node
720- let auth_client = node. inner . engine_http_client ( ) ;
721- let engine_client = Arc :: new ( ScrollAuthApiEngineClient :: new ( auth_client) )
722- as Arc < dyn ScrollEngineApi + Send + Sync + ' static > ;
723- let fcs = ForkchoiceState :: new (
724- BlockInfo { hash : genesis_hash, number : 0 } ,
725- Default :: default ( ) ,
726- Default :: default ( ) ,
727- ) ;
728- let engine = Engine :: new ( Arc :: new ( engine_client) , fcs) ;
729-
730- // Get handles if available
731- let rollup_manager_handle = node. inner . add_ons_handle . rollup_manager_handle . clone ( ) ;
732- let chain_orchestrator_rx =
733- node. inner . add_ons_handle . rollup_manager_handle . get_event_listener ( ) . await ?;
734-
735- node_handles. push ( NodeHandle {
736- node,
737- engine,
738- chain_orchestrator_rx,
739- rollup_manager_handle,
740- typ : if config. sequencer_args . sequencer_enabled && index == 0 {
741- NodeType :: Sequencer
742- } else if config. remote_block_source_args . enabled && index == node_handles. len ( ) {
743- NodeType :: RemoteSource
744- } else {
745- NodeType :: Follower
746- } ,
747- } ) ;
748-
749- nodes. push ( Some ( handle) ) ;
737+ let typ = if self . config . sequencer_args . sequencer_enabled && index == 0 {
738+ NodeType :: Sequencer
739+ } else if self . config . remote_block_source_args . enabled && index == node_handles. len ( ) {
740+ NodeType :: RemoteSource
741+ } else {
742+ NodeType :: Follower
743+ } ;
744+ node_handles. push ( Some ( NodeHandle :: new ( node, typ) . await ?) ) ;
750745 }
751746
752747 Ok ( TestFixture {
753- nodes,
748+ nodes : node_handles ,
754749 dbs,
755750 wallet : Arc :: new ( Mutex :: new ( wallet) ) ,
756751 chain_spec,
0 commit comments