@@ -16,8 +16,35 @@ pub struct BlockBuilder<'a> {
1616 expected_tx_count : Option < usize > ,
1717 expected_base_fee : Option < u64 > ,
1818 expected_block_number : Option < u64 > ,
19- expect_l1_message : bool ,
20- expected_l1_message_count : Option < usize > ,
19+ expected_l1_message : Option < L1MessagesAssertion > ,
20+ }
21+
22+ /// The assertion on the L1 messages.
23+ #[ derive( Debug ) ]
24+ pub enum L1MessagesAssertion {
25+ /// Expect at least a single L1 message.
26+ ExpectL1Message ,
27+ /// Expect an exact number of L1 messages.
28+ ExpectL1MessageCount ( usize ) ,
29+ }
30+
31+ impl L1MessagesAssertion {
32+ /// Assert the L1 messages count is correct.
33+ pub fn assert ( & self , got : usize ) -> eyre:: Result < ( ) > {
34+ match self {
35+ Self :: ExpectL1Message => {
36+ if got == 0 {
37+ return Err ( eyre:: eyre!( "Expected at least one L1 message, but block has none" ) ) ;
38+ }
39+ }
40+ Self :: ExpectL1MessageCount ( count) => {
41+ if got != * count {
42+ return Err ( eyre:: eyre!( "Expected at {count} L1 messages, but block has {got}" ) ) ;
43+ }
44+ }
45+ }
46+ Ok ( ( ) )
47+ }
2148}
2249
2350impl < ' a > BlockBuilder < ' a > {
@@ -29,8 +56,7 @@ impl<'a> BlockBuilder<'a> {
2956 expected_tx_count : None ,
3057 expected_block_number : None ,
3158 expected_base_fee : None ,
32- expect_l1_message : false ,
33- expected_l1_message_count : None ,
59+ expected_l1_message : None ,
3460 }
3561 }
3662
@@ -54,18 +80,18 @@ impl<'a> BlockBuilder<'a> {
5480
5581 /// Expect at least one L1 message in the block.
5682 pub const fn expect_l1_message ( mut self ) -> Self {
57- self . expect_l1_message = true ;
83+ self . expected_l1_message = Some ( L1MessagesAssertion :: ExpectL1Message ) ;
5884 self
5985 }
6086
6187 /// Expect a specific number of L1 messages in the block.
6288 pub const fn expect_l1_message_count ( mut self , count : usize ) -> Self {
63- self . expected_l1_message_count = Some ( count) ;
89+ self . expected_l1_message = Some ( L1MessagesAssertion :: ExpectL1MessageCount ( count) ) ;
6490 self
6591 }
6692
6793 /// Build the block and validate against expectations.
68- pub async fn await_block ( self ) -> eyre:: Result < ScrollBlock > {
94+ pub async fn build_and_await_block ( self ) -> eyre:: Result < ScrollBlock > {
6995 let sequencer_node = & self . fixture . nodes [ 0 ] ;
7096
7197 // Get the sequencer from the rollup manager handle
@@ -89,7 +115,7 @@ impl<'a> BlockBuilder<'a> {
89115 } else {
90116 None
91117 }
92- } ) . await ?
118+ } ) . await ?. first ( ) . expect ( "should have block sequenced" ) . clone ( )
93119 } ;
94120
95121 // Finally validate the block.
@@ -146,24 +172,10 @@ impl<'a> BlockBuilder<'a> {
146172 }
147173
148174 // Check L1 messages
149- if self . expect_l1_message {
150- let l1_message_count =
151- block. body . transactions . iter ( ) . filter ( |tx| tx. queue_index ( ) . is_some ( ) ) . count ( ) ;
152- if l1_message_count == 0 {
153- return Err ( eyre:: eyre!( "Expected at least one L1 message, but block has none" ) ) ;
154- }
155- }
156-
157- if let Some ( expected_count) = self . expected_l1_message_count {
175+ if let Some ( assertion) = self . expected_l1_message {
158176 let l1_message_count =
159177 block. body . transactions . iter ( ) . filter ( |tx| tx. queue_index ( ) . is_some ( ) ) . count ( ) ;
160- if l1_message_count != expected_count {
161- return Err ( eyre:: eyre!(
162- "Expected {} L1 messages, but block has {}" ,
163- expected_count,
164- l1_message_count
165- ) ) ;
166- }
178+ assertion. assert ( l1_message_count) ?;
167179 }
168180
169181 Ok ( block. clone ( ) )
0 commit comments