@@ -23,7 +23,7 @@ use crate::{
2323 BuilderTransactionCtx , BuilderTransactionError , BuilderTransactions ,
2424 builder_tx:: { BuilderTxBase , get_nonce, log_exists} ,
2525 context:: OpPayloadBuilderCtx ,
26- flashblocks:: payload:: FlashblocksExtraCtx ,
26+ flashblocks:: payload:: { FlashblocksExecutionInfo , FlashblocksExtraCtx } ,
2727 } ,
2828 flashtestations:: builder_tx:: FlashtestationsBuilderTx ,
2929 primitives:: reth:: ExecutionInfo ,
@@ -64,14 +64,17 @@ pub(super) enum FlashblockNumberError {
6464// This will be the end of block transaction of a regular block
6565#[ derive( Debug , Clone ) ]
6666pub ( super ) struct FlashblocksBuilderTx {
67- pub base_builder_tx : BuilderTxBase ,
68- pub flashtestations_builder_tx : Option < FlashtestationsBuilderTx > ,
67+ pub base_builder_tx : BuilderTxBase < FlashblocksExtraCtx > ,
68+ pub flashtestations_builder_tx :
69+ Option < FlashtestationsBuilderTx < FlashblocksExtraCtx , FlashblocksExecutionInfo > > ,
6970}
7071
7172impl FlashblocksBuilderTx {
7273 pub ( super ) fn new (
7374 signer : Option < Signer > ,
74- flashtestations_builder_tx : Option < FlashtestationsBuilderTx > ,
75+ flashtestations_builder_tx : Option <
76+ FlashtestationsBuilderTx < FlashblocksExtraCtx , FlashblocksExecutionInfo > ,
77+ > ,
7578 ) -> Self {
7679 let base_builder_tx = BuilderTxBase :: new ( signer) ;
7780 Self {
@@ -81,13 +84,14 @@ impl FlashblocksBuilderTx {
8184 }
8285}
8386
84- impl BuilderTransactions < FlashblocksExtraCtx > for FlashblocksBuilderTx {
85- fn simulate_builder_txs < Extra : Debug + Default > (
87+ impl BuilderTransactions < FlashblocksExtraCtx , FlashblocksExecutionInfo > for FlashblocksBuilderTx {
88+ fn simulate_builder_txs (
8689 & self ,
8790 state_provider : impl StateProvider + Clone ,
88- info : & mut ExecutionInfo < Extra > ,
91+ info : & mut ExecutionInfo < FlashblocksExecutionInfo > ,
8992 ctx : & OpPayloadBuilderCtx < FlashblocksExtraCtx > ,
9093 db : & mut State < impl Database > ,
94+ top_of_block : bool ,
9195 ) -> Result < Vec < BuilderTransactionCtx > , BuilderTransactionError > {
9296 let mut builder_txs = Vec :: < BuilderTransactionCtx > :: new ( ) ;
9397
@@ -102,19 +106,30 @@ impl BuilderTransactions<FlashblocksExtraCtx> for FlashblocksBuilderTx {
102106
103107 if let Some ( flashtestations_builder_tx) = & self . flashtestations_builder_tx {
104108 // We only include flashtestations txs in the last flashblock
105- let mut simulation_state = self . simulate_builder_txs_state :: < FlashblocksExtraCtx > (
109+ let mut simulation_state = self . simulate_builder_txs_state (
106110 state_provider. clone ( ) ,
107- base_tx. iter ( ) . collect ( ) ,
111+ base_tx
112+ . iter ( )
113+ . filter ( |tx| tx. is_top_of_block == top_of_block)
114+ . collect ( ) ,
108115 ctx,
109116 db,
110117 ) ?;
111- let flashtestations_builder_txs = flashtestations_builder_tx. simulate_builder_txs (
118+ // We only include flashtestations txs in the last flashblock
119+ match flashtestations_builder_tx. simulate_builder_txs (
112120 state_provider,
113121 info,
114122 ctx,
115123 & mut simulation_state,
116- ) ?;
117- builder_txs. extend ( flashtestations_builder_txs) ;
124+ top_of_block,
125+ ) {
126+ Ok ( flashtestations_builder_txs) => {
127+ builder_txs. extend ( flashtestations_builder_txs)
128+ }
129+ Err ( e) => {
130+ warn ! ( target: "flashtestations" , error = ?e, "failed to add flashtestations builder tx" )
131+ }
132+ }
118133 }
119134 }
120135 Ok ( builder_txs)
@@ -126,15 +141,18 @@ impl BuilderTransactions<FlashblocksExtraCtx> for FlashblocksBuilderTx {
126141pub ( super ) struct FlashblocksNumberBuilderTx {
127142 pub signer : Option < Signer > ,
128143 pub flashblock_number_address : Address ,
129- pub base_builder_tx : BuilderTxBase ,
130- pub flashtestations_builder_tx : Option < FlashtestationsBuilderTx > ,
144+ pub base_builder_tx : BuilderTxBase < FlashblocksExtraCtx > ,
145+ pub flashtestations_builder_tx :
146+ Option < FlashtestationsBuilderTx < FlashblocksExtraCtx , FlashblocksExecutionInfo > > ,
131147}
132148
133149impl FlashblocksNumberBuilderTx {
134150 pub ( super ) fn new (
135151 signer : Option < Signer > ,
136152 flashblock_number_address : Address ,
137- flashtestations_builder_tx : Option < FlashtestationsBuilderTx > ,
153+ flashtestations_builder_tx : Option <
154+ FlashtestationsBuilderTx < FlashblocksExtraCtx , FlashblocksExecutionInfo > ,
155+ > ,
138156 ) -> Self {
139157 let base_builder_tx = BuilderTxBase :: new ( signer) ;
140158 Self {
@@ -213,13 +231,16 @@ impl FlashblocksNumberBuilderTx {
213231 }
214232}
215233
216- impl BuilderTransactions < FlashblocksExtraCtx > for FlashblocksNumberBuilderTx {
217- fn simulate_builder_txs < Extra : Debug + Default > (
234+ impl BuilderTransactions < FlashblocksExtraCtx , FlashblocksExecutionInfo >
235+ for FlashblocksNumberBuilderTx
236+ {
237+ fn simulate_builder_txs (
218238 & self ,
219239 state_provider : impl StateProvider + Clone ,
220- info : & mut ExecutionInfo < Extra > ,
240+ info : & mut ExecutionInfo < FlashblocksExecutionInfo > ,
221241 ctx : & OpPayloadBuilderCtx < FlashblocksExtraCtx > ,
222242 db : & mut State < impl Database > ,
243+ top_of_block : bool ,
223244 ) -> Result < Vec < BuilderTransactionCtx > , BuilderTransactionError > {
224245 let mut builder_txs = Vec :: < BuilderTransactionCtx > :: new ( ) ;
225246 let state = StateProviderDatabase :: new ( state_provider. clone ( ) ) ;
@@ -280,20 +301,30 @@ impl BuilderTransactions<FlashblocksExtraCtx> for FlashblocksNumberBuilderTx {
280301 if ctx. is_last_flashblock ( ) {
281302 if let Some ( flashtestations_builder_tx) = & self . flashtestations_builder_tx {
282303 let flashblocks_builder_txs = builder_txs. clone ( ) ;
283- let mut simulation_state = self . simulate_builder_txs_state :: < FlashblocksExtraCtx > (
304+ let mut simulation_state = self . simulate_builder_txs_state (
284305 state_provider. clone ( ) ,
285- flashblocks_builder_txs. iter ( ) . collect ( ) ,
306+ flashblocks_builder_txs
307+ . iter ( )
308+ . filter ( |tx| tx. is_top_of_block == top_of_block)
309+ . collect ( ) ,
286310 ctx,
287311 db,
288312 ) ?;
289313 // We only include flashtestations txs in the last flashblock
290- let flashtestations_builder_txs = flashtestations_builder_tx. simulate_builder_txs (
314+ match flashtestations_builder_tx. simulate_builder_txs (
291315 state_provider,
292316 info,
293317 ctx,
294318 & mut simulation_state,
295- ) ?;
296- builder_txs. extend ( flashtestations_builder_txs) ;
319+ top_of_block,
320+ ) {
321+ Ok ( flashtestations_builder_txs) => {
322+ builder_txs. extend ( flashtestations_builder_txs)
323+ }
324+ Err ( e) => {
325+ warn ! ( target: "flashtestations" , error = ?e, "failed to add flashtestations builder tx" )
326+ }
327+ }
297328 }
298329 }
299330
0 commit comments