diff --git a/core/node/eth_sender/src/eth_tx_manager.rs b/core/node/eth_sender/src/eth_tx_manager.rs index a158889f26f7..d732c4bb27ba 100644 --- a/core/node/eth_sender/src/eth_tx_manager.rs +++ b/core/node/eth_sender/src/eth_tx_manager.rs @@ -540,9 +540,15 @@ impl EthTxManager { .eth_sender_dal() .get_block_number_on_first_sent_attempt(tx.id) .await - .unwrap() - .unwrap_or(l1_block_numbers.latest.0); - return Ok(Some((tx, first_sent_at_block))); + .unwrap(); + // the transaction may still be included in block, we shouldn't resend it yet + if first_sent_at_block == Some(l1_block_numbers.latest.0) { + continue; + } + return Ok(Some(( + tx, + first_sent_at_block.unwrap_or(l1_block_numbers.latest.0), + ))); } // If on finalized block sender's nonce was > tx.nonce, diff --git a/core/node/vm_runner/src/process.rs b/core/node/vm_runner/src/process.rs index e19a131ce0d7..945d35477ce6 100644 --- a/core/node/vm_runner/src/process.rs +++ b/core/node/vm_runner/src/process.rs @@ -136,6 +136,11 @@ impl VmRunner { .await? + 1; loop { + if *stop_receiver.borrow() { + tracing::info!("VM runner was interrupted"); + return Ok(()); + } + // Traverse all handles and filter out tasks that have been finished. Also propagates // any panic/error that might have happened during the task's execution. let mut retained_handles = Vec::new();