@@ -37,6 +37,61 @@ use tokio::{
3737 time:: { Duration , Instant } ,
3838} ;
3939
40+ #[ tokio:: test]
41+ async fn skip_block_with_no_transactions ( ) {
42+ reth_tracing:: init_test_tracing ( ) ;
43+
44+ const BLOCK_BUILDING_DURATION : Duration = Duration :: from_millis ( 0 ) ;
45+
46+ // setup a test node
47+ let ( mut nodes, _tasks, _wallet) = setup ( 1 , false ) . await . unwrap ( ) ;
48+ let node = nodes. pop ( ) . unwrap ( ) ;
49+
50+ // create a forkchoice state
51+ let genesis_hash = node. inner . chain_spec ( ) . genesis_hash ( ) ;
52+ let fcs = ForkchoiceState :: new (
53+ BlockInfo { hash : genesis_hash, number : 0 } ,
54+ Default :: default ( ) ,
55+ Default :: default ( ) ,
56+ ) ;
57+
58+ // create the engine driver connected to the node
59+ let auth_client = node. inner . engine_http_client ( ) ;
60+ let engine_client = ScrollAuthApiEngineClient :: new ( auth_client) ;
61+ let mut engine_driver = EngineDriver :: new (
62+ Arc :: new ( engine_client) ,
63+ ( * SCROLL_DEV ) . clone ( ) ,
64+ None :: < ScrollRootProvider > ,
65+ fcs,
66+ false ,
67+ BLOCK_BUILDING_DURATION ,
68+ false ,
69+ ) ;
70+
71+ // create a test database
72+ let database = Arc :: new ( setup_test_db ( ) . await ) ;
73+ let provider = Arc :: new ( DatabaseL1MessageProvider :: new ( database. clone ( ) , 0 ) ) ;
74+
75+ // create a sequencer
76+ let mut sequencer = Sequencer :: new (
77+ provider,
78+ Default :: default ( ) ,
79+ SCROLL_GAS_LIMIT ,
80+ 4 ,
81+ 1 ,
82+ L1MessageInclusionMode :: BlockDepth ( 0 ) ,
83+ ) ;
84+
85+ // send a new payload attributes request.
86+ sequencer. build_payload_attributes ( ) ;
87+ let payload_attributes = sequencer. next ( ) . await . unwrap ( ) ;
88+ engine_driver. handle_build_new_payload ( payload_attributes) ;
89+
90+ // assert that no new payload event is emitted
91+ let res = tokio:: time:: timeout ( Duration :: from_secs ( 1 ) , engine_driver. next ( ) ) . await ;
92+ assert ! ( res. is_err( ) , "expected no new payload, but a block was built: {:?}" , res. ok( ) ) ;
93+ }
94+
4095#[ tokio:: test]
4196async fn can_build_blocks ( ) {
4297 reth_tracing:: init_test_tracing ( ) ;
@@ -66,6 +121,7 @@ async fn can_build_blocks() {
66121 fcs,
67122 false ,
68123 BLOCK_BUILDING_DURATION ,
124+ true ,
69125 ) ;
70126
71127 // create a test database
@@ -192,6 +248,7 @@ async fn can_build_blocks_with_delayed_l1_messages() {
192248 fcs,
193249 false ,
194250 BLOCK_BUILDING_DURATION ,
251+ true ,
195252 ) ;
196253
197254 // create a test database
@@ -317,6 +374,7 @@ async fn can_build_blocks_with_finalized_l1_messages() {
317374 fcs,
318375 false ,
319376 BLOCK_BUILDING_DURATION ,
377+ true ,
320378 ) ;
321379
322380 // create a test database
@@ -447,6 +505,7 @@ async fn can_sequence_blocks_with_private_key_file() -> eyre::Result<()> {
447505 block_time : 0 ,
448506 l1_message_inclusion_mode : L1MessageInclusionMode :: BlockDepth ( 0 ) ,
449507 payload_building_duration : 1000 ,
508+ allow_empty_blocks : true ,
450509 ..SequencerArgs :: default ( )
451510 } ,
452511 beacon_provider_args : BeaconProviderArgs {
@@ -538,6 +597,7 @@ async fn can_sequence_blocks_with_hex_key_file_without_prefix() -> eyre::Result<
538597 block_time : 0 ,
539598 l1_message_inclusion_mode : L1MessageInclusionMode :: BlockDepth ( 0 ) ,
540599 payload_building_duration : 1000 ,
600+ allow_empty_blocks : true ,
541601 ..SequencerArgs :: default ( )
542602 } ,
543603 beacon_provider_args : BeaconProviderArgs {
@@ -658,6 +718,7 @@ async fn can_build_blocks_and_exit_at_gas_limit() {
658718 fcs,
659719 false ,
660720 BLOCK_BUILDING_DURATION ,
721+ true ,
661722 ) ;
662723
663724 // issue a new payload to the execution layer.
@@ -743,6 +804,7 @@ async fn can_build_blocks_and_exit_at_time_limit() {
743804 fcs,
744805 false ,
745806 BLOCK_BUILDING_DURATION ,
807+ true ,
746808 ) ;
747809
748810 // start timer.
@@ -809,6 +871,7 @@ async fn should_limit_l1_message_cumulative_gas() {
809871 fcs,
810872 false ,
811873 BLOCK_BUILDING_DURATION ,
874+ true ,
812875 ) ;
813876
814877 // create a test database
0 commit comments