@@ -217,7 +217,7 @@ where
217217 let prev_pending_blocks = self . pending_blocks . load_full ( ) ;
218218 match update {
219219 StateUpdate :: Canonical ( block) => {
220- debug ! (
220+ info ! (
221221 message = "processing canonical block" ,
222222 block_number = block. number
223223 ) ;
@@ -232,7 +232,7 @@ where
232232 }
233233 StateUpdate :: Flashblock ( flashblock) => {
234234 let start_time = Instant :: now ( ) ;
235- debug ! (
235+ info ! (
236236 message = "processing flashblock" ,
237237 block_number = flashblock. metadata. block_number,
238238 flashblock_index = flashblock. index
@@ -249,7 +249,8 @@ where
249249 . record ( start_time. elapsed ( ) ) ;
250250 }
251251 Err ( e) => {
252- error ! ( message = "could not process Flashblock" , error = %e) ;
252+ error ! ( message = "could not process Flashblock" , error = %e, block_number = flashblock. metadata. block_number,
253+ flashblock_index = flashblock. index) ;
253254 self . metrics . block_processing_error . increment ( 1 ) ;
254255 }
255256 }
@@ -396,8 +397,10 @@ where
396397 let earliest_block_number = flashblocks_per_block. keys ( ) . min ( ) . unwrap ( ) ;
397398 let canonical_block = earliest_block_number - 1 ;
398399 let mut last_block_header = self . client . header_by_number ( canonical_block) ?. ok_or ( eyre ! (
399- "Failed to extract header for canonical block number {}. This is okay if your node is not fully synced to tip yet." ,
400- canonical_block
400+ "Failed to extract header for canonical block number {}. This is okay if your node is not fully synced to tip yet. Earliest block number {}. Flashblocks per block: {:?}" ,
401+ canonical_block,
402+ earliest_block_number,
403+ flashblocks_per_block. keys( ) ,
401404 ) ) ?;
402405
403406 let evm_config = OpEvmConfig :: optimism ( self . client . chain_spec ( ) ) ;
@@ -426,7 +429,6 @@ where
426429 None => StateOverridesBuilder :: default ( ) ,
427430 } ;
428431 for ( _block_number, flashblocks) in flashblocks_per_block {
429- let nested_db = db. nest ( ) ;
430432 let base = flashblocks
431433 . first ( )
432434 . ok_or ( eyre ! ( "cannot build a pending block from no flashblocks" ) ) ?
@@ -506,7 +508,7 @@ where
506508 } ;
507509
508510 let evm_env = evm_config. next_evm_env ( & last_block_header, & block_env_attributes) ?;
509- let mut evm = evm_config. evm_with_env ( nested_db , evm_env) ;
511+ let mut evm = evm_config. evm_with_env ( db , evm_env) ;
510512
511513 let mut gas_used = 0 ;
512514 let mut next_log_index = 0 ;
@@ -617,34 +619,45 @@ where
617619 }
618620
619621 if should_execute_transaction {
620- let ResultAndState { state, .. } = evm. transact ( recovered_transaction) ?;
621- for ( addr, acc) in & state {
622- let state_diff = B256HashMap :: < B256 > :: from_iter (
623- acc. storage
624- . iter ( )
625- . map ( |( & key, slot) | ( key. into ( ) , slot. present_value . into ( ) ) ) ,
626- ) ;
627- let acc_override = AccountOverride {
628- balance : Some ( acc. info . balance ) ,
629- nonce : Some ( acc. info . nonce ) ,
630- code : acc. info . code . clone ( ) . map ( |code| code. bytes ( ) ) ,
631- state : None ,
632- state_diff : Some ( state_diff) ,
633- move_precompile_to : None ,
634- } ;
635- state_cache_builder = state_cache_builder. append ( * addr, acc_override) ;
622+ match evm. transact ( recovered_transaction) {
623+ Ok ( ResultAndState { state, .. } ) => {
624+ for ( addr, acc) in & state {
625+ let state_diff =
626+ B256HashMap :: < B256 > :: from_iter ( acc. storage . iter ( ) . map (
627+ |( & key, slot) | ( key. into ( ) , slot. present_value . into ( ) ) ,
628+ ) ) ;
629+ let acc_override = AccountOverride {
630+ balance : Some ( acc. info . balance ) ,
631+ nonce : Some ( acc. info . nonce ) ,
632+ code : acc. info . code . clone ( ) . map ( |code| code. bytes ( ) ) ,
633+ state : Some ( state_diff) ,
634+ state_diff : None ,
635+ move_precompile_to : None ,
636+ } ;
637+ state_cache_builder =
638+ state_cache_builder. append ( * addr, acc_override) ;
639+ }
640+ pending_blocks_builder
641+ . with_transaction_state ( transaction. tx_hash ( ) , state. clone ( ) ) ;
642+ evm. db_mut ( ) . commit ( state) ;
643+ }
644+ Err ( e) => {
645+ return Err ( eyre ! (
646+ "failed to execute transaction: {:?} tx_hash: {:?} sender: {:?}" ,
647+ e,
648+ transaction. tx_hash( ) ,
649+ sender
650+ ) ) ;
651+ }
636652 }
637- pending_blocks_builder
638- . with_transaction_state ( transaction. tx_hash ( ) , state. clone ( ) ) ;
639- evm. db_mut ( ) . commit ( state) ;
640653 }
641654 }
642655
643656 for ( address, balance) in updated_balances {
644657 pending_blocks_builder. with_account_balance ( address, balance) ;
645658 }
646659
647- db = evm. into_db ( ) . flatten ( ) ;
660+ db = evm. into_db ( ) ;
648661 last_block_header = block. header . clone ( ) ;
649662 }
650663
0 commit comments