From 5561b4a7f0004530e1c43d57523dbdec3c2849b3 Mon Sep 17 00:00:00 2001 From: Haardik H Date: Tue, 28 Oct 2025 14:45:22 -0400 Subject: [PATCH 1/3] Revert "chore: increase logging for debugging (#145)" This reverts commit 66869b432ba73d89d3ef8a7f51158febb185f9af. --- crates/flashblocks-rpc/src/state.rs | 67 ++++++++++++----------------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/crates/flashblocks-rpc/src/state.rs b/crates/flashblocks-rpc/src/state.rs index a05a0317..17e1aaae 100644 --- a/crates/flashblocks-rpc/src/state.rs +++ b/crates/flashblocks-rpc/src/state.rs @@ -217,7 +217,7 @@ where let prev_pending_blocks = self.pending_blocks.load_full(); match update { StateUpdate::Canonical(block) => { - info!( + debug!( message = "processing canonical block", block_number = block.number ); @@ -232,7 +232,7 @@ where } StateUpdate::Flashblock(flashblock) => { let start_time = Instant::now(); - info!( + debug!( message = "processing flashblock", block_number = flashblock.metadata.block_number, flashblock_index = flashblock.index @@ -249,8 +249,7 @@ where .record(start_time.elapsed()); } Err(e) => { - error!(message = "could not process Flashblock", error = %e, block_number = flashblock.metadata.block_number, - flashblock_index = flashblock.index); + error!(message = "could not process Flashblock", error = %e); self.metrics.block_processing_error.increment(1); } } @@ -397,10 +396,8 @@ where let earliest_block_number = flashblocks_per_block.keys().min().unwrap(); let canonical_block = earliest_block_number - 1; let mut last_block_header = self.client.header_by_number(canonical_block)?.ok_or(eyre!( - "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: {:?}", - canonical_block, - earliest_block_number, - flashblocks_per_block.keys(), + "Failed to extract header for canonical block number {}. This is okay if your node is not fully synced to tip yet.", + canonical_block ))?; let evm_config = OpEvmConfig::optimism(self.client.chain_spec()); @@ -429,6 +426,7 @@ where None => StateOverridesBuilder::default(), }; for (_block_number, flashblocks) in flashblocks_per_block { + let nested_db = db.nest(); let base = flashblocks .first() .ok_or(eyre!("cannot build a pending block from no flashblocks"))? @@ -508,7 +506,7 @@ where }; let evm_env = evm_config.next_evm_env(&last_block_header, &block_env_attributes)?; - let mut evm = evm_config.evm_with_env(db, evm_env); + let mut evm = evm_config.evm_with_env(nested_db, evm_env); let mut gas_used = 0; let mut next_log_index = 0; @@ -619,37 +617,26 @@ where } if should_execute_transaction { - match evm.transact(recovered_transaction) { - Ok(ResultAndState { state, .. }) => { - for (addr, acc) in &state { - let state_diff = - B256HashMap::::from_iter(acc.storage.iter().map( - |(&key, slot)| (key.into(), slot.present_value.into()), - )); - let acc_override = AccountOverride { - balance: Some(acc.info.balance), - nonce: Some(acc.info.nonce), - code: acc.info.code.clone().map(|code| code.bytes()), - state: Some(state_diff), - state_diff: None, - move_precompile_to: None, - }; - state_cache_builder = - state_cache_builder.append(*addr, acc_override); - } - pending_blocks_builder - .with_transaction_state(transaction.tx_hash(), state.clone()); - evm.db_mut().commit(state); - } - Err(e) => { - return Err(eyre!( - "failed to execute transaction: {:?} tx_hash: {:?} sender: {:?}", - e, - transaction.tx_hash(), - sender - )); - } + let ResultAndState { state, .. } = evm.transact(recovered_transaction)?; + for (addr, acc) in &state { + let state_diff = B256HashMap::::from_iter( + acc.storage + .iter() + .map(|(&key, slot)| (key.into(), slot.present_value.into())), + ); + let acc_override = AccountOverride { + balance: Some(acc.info.balance), + nonce: Some(acc.info.nonce), + code: acc.info.code.clone().map(|code| code.bytes()), + state: None, + state_diff: Some(state_diff), + move_precompile_to: None, + }; + state_cache_builder = state_cache_builder.append(*addr, acc_override); } + pending_blocks_builder + .with_transaction_state(transaction.tx_hash(), state.clone()); + evm.db_mut().commit(state); } } @@ -657,7 +644,7 @@ where pending_blocks_builder.with_account_balance(address, balance); } - db = evm.into_db(); + db = evm.into_db().flatten(); last_block_header = block.header.clone(); } From c90512627530f9f6705897367c52025167131043 Mon Sep 17 00:00:00 2001 From: Haardik H Date: Tue, 28 Oct 2025 14:46:50 -0400 Subject: [PATCH 2/3] just add back nested db --- crates/flashblocks-rpc/src/state.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/flashblocks-rpc/src/state.rs b/crates/flashblocks-rpc/src/state.rs index 17e1aaae..aa229bef 100644 --- a/crates/flashblocks-rpc/src/state.rs +++ b/crates/flashblocks-rpc/src/state.rs @@ -426,7 +426,6 @@ where None => StateOverridesBuilder::default(), }; for (_block_number, flashblocks) in flashblocks_per_block { - let nested_db = db.nest(); let base = flashblocks .first() .ok_or(eyre!("cannot build a pending block from no flashblocks"))? @@ -506,7 +505,7 @@ where }; let evm_env = evm_config.next_evm_env(&last_block_header, &block_env_attributes)?; - let mut evm = evm_config.evm_with_env(nested_db, evm_env); + let mut evm = evm_config.evm_with_env(db, evm_env); let mut gas_used = 0; let mut next_log_index = 0; @@ -644,7 +643,7 @@ where pending_blocks_builder.with_account_balance(address, balance); } - db = evm.into_db().flatten(); + db = evm.into_db(); last_block_header = block.header.clone(); } From fac60bf1167b43b89b10e670f1aae9de5deb3474 Mon Sep 17 00:00:00 2001 From: Haardik H Date: Tue, 28 Oct 2025 15:32:19 -0400 Subject: [PATCH 3/3] better errors for failing txns --- crates/flashblocks-rpc/src/state.rs | 49 ++++++++++++++++++----------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/crates/flashblocks-rpc/src/state.rs b/crates/flashblocks-rpc/src/state.rs index aa229bef..cd7eba48 100644 --- a/crates/flashblocks-rpc/src/state.rs +++ b/crates/flashblocks-rpc/src/state.rs @@ -616,26 +616,37 @@ where } if should_execute_transaction { - let ResultAndState { state, .. } = evm.transact(recovered_transaction)?; - for (addr, acc) in &state { - let state_diff = B256HashMap::::from_iter( - acc.storage - .iter() - .map(|(&key, slot)| (key.into(), slot.present_value.into())), - ); - let acc_override = AccountOverride { - balance: Some(acc.info.balance), - nonce: Some(acc.info.nonce), - code: acc.info.code.clone().map(|code| code.bytes()), - state: None, - state_diff: Some(state_diff), - move_precompile_to: None, - }; - state_cache_builder = state_cache_builder.append(*addr, acc_override); + match evm.transact(recovered_transaction) { + Ok(ResultAndState { state, .. }) => { + for (addr, acc) in &state { + let state_diff = + B256HashMap::::from_iter(acc.storage.iter().map( + |(&key, slot)| (key.into(), slot.present_value.into()), + )); + let acc_override = AccountOverride { + balance: Some(acc.info.balance), + nonce: Some(acc.info.nonce), + code: acc.info.code.clone().map(|code| code.bytes()), + state: Some(state_diff), + state_diff: None, + move_precompile_to: None, + }; + state_cache_builder = + state_cache_builder.append(*addr, acc_override); + } + pending_blocks_builder + .with_transaction_state(transaction.tx_hash(), state.clone()); + evm.db_mut().commit(state); + } + Err(e) => { + return Err(eyre!( + "failed to execute transaction: {:?} tx_hash: {:?} sender: {:?}", + e, + transaction.tx_hash(), + sender + )); + } } - pending_blocks_builder - .with_transaction_state(transaction.tx_hash(), state.clone()); - evm.db_mut().commit(state); } }