diff --git a/crates/op-rbuilder/src/builders/context.rs b/crates/op-rbuilder/src/builders/context.rs index ce3160de..d486fcaf 100644 --- a/crates/op-rbuilder/src/builders/context.rs +++ b/crates/op-rbuilder/src/builders/context.rs @@ -41,7 +41,7 @@ use std::{sync::Arc, time::Instant}; use tips_bundle_pool::pool::{Action, ProcessedBundle}; use tips_core::{BundleExtensions, BundleTxs}; use tokio_util::sync::CancellationToken; -use tracing::{debug, info, trace}; +use tracing::{debug, info, trace, warn}; use crate::{ gas_limiter::AddressGasLimiter, @@ -445,6 +445,11 @@ impl OpPayloadBuilderCtx { // append sender and transaction to the respective lists info.executed_senders.push(txn.signer()); info.executed_transactions.push(txn.clone().into_inner()); + + if let Some(backrun_bundle) = best_bundles.get_backrun_bundle(&txn.tx_hash()) { + warn!(target: "payload_builder", tx_hash = ?txn.tx_hash(), "Executing backrun bundle"); + // TODO: execute backrun bundle + } } // TODO: confirm this is safe to do diff --git a/crates/op-rbuilder/src/builders/flashblocks/best_bundles.rs b/crates/op-rbuilder/src/builders/flashblocks/best_bundles.rs index e7a0425f..42be9cbc 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/best_bundles.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/best_bundles.rs @@ -1,5 +1,6 @@ use crate::traits::BundleBounds; use alloy_primitives::TxHash; +use alloy_primitives::map::HashMap; use reth_transaction_pool::TransactionPool; use rollup_boost::FlashblocksPayloadV1; use std::collections::HashSet; @@ -16,6 +17,7 @@ pub(super) struct BestFlashblocksBundles { // Mut stuff bundles: Vec, + backrun_bundles: HashMap, curr_bundles_idx: usize, current_block_num: u64, } @@ -29,6 +31,7 @@ impl BestFlashblocksBundles { current_block_num: 0, commited_transactions: Default::default(), bundles: vec![], + backrun_bundles: Default::default(), curr_bundles_idx: 0, } } @@ -44,6 +47,7 @@ impl BestFlashblocksBundles { self.current_block_num = current_block_num; self.bundles = self.bundle_pool.get_bundles(); + self.backrun_bundles = self.bundle_pool.get_backrun_bundles(); self.curr_bundles_idx = 0; } @@ -98,6 +102,10 @@ impl BundleBounds for BestFlashblocksBundles { } } + fn get_backrun_bundle(&mut self, tx_hash: &TxHash) -> Option<&AcceptedBundle> { + self.backrun_bundles.get(tx_hash) + } + // TODO /// Proxy to inner iterator fn mark_invalid(&mut self, _bundle: &AcceptedBundle) { diff --git a/crates/op-rbuilder/src/traits.rs b/crates/op-rbuilder/src/traits.rs index 09f9a57c..c9467851 100644 --- a/crates/op-rbuilder/src/traits.rs +++ b/crates/op-rbuilder/src/traits.rs @@ -1,4 +1,5 @@ use alloy_consensus::Header; +use alloy_primitives::TxHash; use reth_node_api::{FullNodeComponents, FullNodeTypes, NodeTypes}; use reth_optimism_chainspec::OpChainSpec; use reth_optimism_node::OpEngineTypes; @@ -80,6 +81,7 @@ impl ClientBounds for T where pub trait BundleBounds { fn next(&mut self, ctx: ()) -> Option<&AcceptedBundle>; + fn get_backrun_bundle(&mut self, tx_hash: &TxHash) -> Option<&AcceptedBundle>; fn mark_invalid(&mut self, bundle: &AcceptedBundle); }