@@ -25,10 +25,15 @@ use reth_optimism_payload_builder::OpBuiltPayload;
2525use reth_optimism_primitives:: { OpReceipt , OpTransactionSigned } ;
2626use reth_payload_builder:: EthPayloadBuilderAttributes ;
2727use reth_primitives_traits:: SealedHeader ;
28- use std:: sync:: Arc ;
28+ use std:: {
29+ cmp:: { max, min} ,
30+ sync:: Arc ,
31+ } ;
2932use tokio:: sync:: mpsc;
3033use tracing:: warn;
3134
35+ use base_access_lists:: FBALBuilderDb ;
36+
3237/// Handles newly built or received flashblock payloads.
3338///
3439/// In the case of a payload built by this node, it is broadcast to peers and an event is sent to the payload builder.
@@ -182,6 +187,7 @@ where
182187 . state_by_block_hash ( parent_hash)
183188 . wrap_err ( "failed to get state for parent hash" ) ?;
184189 let db = StateProviderDatabase :: new ( & state_provider) ;
190+ // here
185191 let mut state = State :: builder ( )
186192 . with_database ( cached_reads. as_db_mut ( db) )
187193 . with_bundle_update ( )
@@ -333,9 +339,18 @@ fn execute_transactions(
333339 use reth_primitives_traits:: SignedTransaction ;
334340 use revm:: { DatabaseCommit as _, context:: result:: ResultAndState } ;
335341
336- let mut evm = ctx. evm_config ( ) . evm_with_env ( & mut * state, evm_env) ;
342+ //here
343+ let mut fbal_db = FBALBuilderDb :: new ( state) ;
344+ let mut evm = ctx. evm_config ( ) . evm_with_env ( & mut fbal_db, evm_env) ;
345+
346+ let mut min_tx_index = u64:: MAX ;
347+ let mut max_tx_index = u64:: MIN ;
348+ for ( i, tx) in txs. into_iter ( ) . enumerate ( ) {
349+ let j: u64 = i. try_into ( ) . unwrap ( ) ;
350+ evm. db_mut ( ) . set_index ( j) ;
351+ min_tx_index = min ( min_tx_index, j) ;
352+ max_tx_index = max ( max_tx_index, j) ;
337353
338- for tx in txs {
339354 // Convert to recovered transaction
340355 let tx_recovered = tx
341356 . try_clone_into_recovered ( )
@@ -350,6 +365,7 @@ fn execute_transactions(
350365 let depositor_nonce = ( ctx. is_regolith_active ( timestamp) && tx_recovered. is_deposit ( ) )
351366 . then ( || {
352367 evm. db_mut ( )
368+ . db_mut ( )
353369 . load_cache_account ( sender)
354370 . map ( |acc| acc. account_info ( ) . unwrap_or_default ( ) . nonce )
355371 } )
@@ -406,6 +422,9 @@ fn execute_transactions(
406422 } ) ;
407423 info. da_footprint_scalar = da_footprint_gas_scalar;
408424
425+ let fbal_builder = fbal_db. finish ( ) ?;
426+ info. extra . access_list = Some ( fbal_builder. build ( min_tx_index, max_tx_index) ) ;
427+
409428 Ok ( ( ) )
410429}
411430
0 commit comments