@@ -14,7 +14,7 @@ use alloy::{
1414use eyre:: OptionExt ;
1515use init4_bin_base:: { deps:: metrics:: counter, utils:: signer:: LocalOrAws } ;
1616use tokio:: { sync:: mpsc, task:: JoinHandle } ;
17- use tracing:: { Instrument , debug} ;
17+ use tracing:: { Instrument , debug, debug_span } ;
1818
1919/// Handles construction, simulation, and submission of rollup blocks to the
2020/// Flashbots network.
@@ -117,40 +117,58 @@ impl FlashbotsTask {
117117 debug ! ( "upstream task gone - exiting flashbots task" ) ;
118118 break ;
119119 } ;
120- let span = sim_result. span ( ) ;
121- span_debug ! ( span, "received sim result" ) ;
120+
121+ let span = sim_result. sim_env . clone_span ( ) ;
122+
123+ // Don't submit empty blocks
124+ if sim_result. block . is_empty ( ) {
125+ counter ! ( "signet.builder.flashbots.empty_block" ) . increment ( 1 ) ;
126+ span_debug ! ( span, "received empty block - skipping" ) ;
127+ continue ;
128+ }
129+ span_debug ! ( span, "flashbots task received block" ) ;
122130
123131 // Prepare a MEV bundle with the configured call type from the sim result
124- let Ok ( bundle) =
125- self . prepare ( & sim_result) . instrument ( span. clone ( ) ) . await . inspect_err ( |error| {
126- counter ! ( "signet.builder.flashbots.bundle_prep_failures" ) . increment ( 1 ) ;
127- span_debug ! ( span, %error, "bundle preparation failed" ) ;
128- } )
129- else {
132+ let res = self . prepare ( & sim_result) . instrument ( span. clone ( ) ) . await ;
133+ let Ok ( bundle) = res else {
134+ counter ! ( "signet.builder.flashbots.bundle_prep_failures" ) . increment ( 1 ) ;
135+ let error = res. unwrap_err ( ) ;
136+ span_debug ! ( span, %error, "bundle preparation failed" ) ;
130137 continue ;
131138 } ;
132139
133- // Send the bundle to Flashbots
134- let response = self
135- . flashbots ( )
136- . send_mev_bundle ( bundle. clone ( ) )
137- . with_auth ( self . signer . clone ( ) )
138- . await ;
139-
140- match response {
141- Ok ( resp) => {
142- counter ! ( "signet.builder.flashbots.bundles_submitted" ) . increment ( 1 ) ;
143- span_debug ! (
144- span,
145- hash = resp. map( |r| r. bundle_hash. to_string( ) ) ,
146- "received bundle hash after submitted to flashbots"
147- ) ;
148- }
149- Err ( err) => {
150- counter ! ( "signet.builder.flashbots.submission_failures" ) . increment ( 1 ) ;
151- span_error ! ( span, %err, "MEV bundle submission failed - error returned" ) ;
152- }
140+ // Make a child span to cover submission
141+ let submit_span = debug_span ! (
142+ parent: & span,
143+ "flashbots.submit" ,
144+ ) ;
145+
146+ // Send the bundle to Flashbots, instrumenting the send future so all
147+ // events inside the async send are attributed to the submit span.
148+ let response = async {
149+ self . flashbots ( )
150+ . send_mev_bundle ( bundle. clone ( ) )
151+ . with_auth ( self . signer . clone ( ) )
152+ . into_future ( )
153+ . instrument ( submit_span. clone ( ) )
154+ . await
153155 }
156+ . await ;
157+
158+ let Ok ( resp) = & response else {
159+ counter ! ( "signet.builder.flashbots.submission_failures" ) . increment ( 1 ) ;
160+ if let Err ( err) = & response {
161+ span_error ! ( submit_span, %err, "MEV bundle submission failed - error returned" ) ;
162+ }
163+ continue ;
164+ } ;
165+
166+ counter ! ( "signet.builder.flashbots.bundles_submitted" ) . increment ( 1 ) ;
167+ span_debug ! (
168+ submit_span,
169+ hash = resp. as_ref( ) . map( |r| r. bundle_hash. to_string( ) ) ,
170+ "received bundle hash after submitted to flashbots"
171+ ) ;
154172 }
155173 }
156174
0 commit comments