Skip to content
This repository was archived by the owner on Jan 12, 2026. It is now read-only.

Commit 656afa1

Browse files
committed
merge resrouce metering and backrun bundle into one
1 parent afbcd0b commit 656afa1

12 files changed

Lines changed: 579 additions & 634 deletions

File tree

crates/op-rbuilder/src/builders/context.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ use crate::{
4343
gas_limiter::AddressGasLimiter,
4444
metrics::OpRBuilderMetrics,
4545
primitives::reth::{ExecutionInfo, TxnExecutionResult},
46-
resource_metering::ResourceMetering,
4746
traits::PayloadTxsBounds,
4847
tx::MaybeRevertingTransaction,
48+
tx_data_store::TxDataStore,
4949
tx_signer::Signer,
5050
};
5151

@@ -78,10 +78,8 @@ pub struct OpPayloadBuilderCtx<ExtraCtx: Debug + Default = ()> {
7878
pub max_gas_per_txn: Option<u64>,
7979
/// Rate limiting based on gas. This is an optional feature.
8080
pub address_gas_limiter: AddressGasLimiter,
81-
/// Per transaction resource metering information
82-
pub resource_metering: ResourceMetering,
83-
/// Backrun bundle store for storing backrun transactions
84-
pub backrun_bundle_store: crate::bundles::BackrunBundleStore,
81+
/// Unified transaction data store (backrun bundles + resource metering)
82+
pub tx_data_store: TxDataStore,
8583
}
8684

8785
impl<ExtraCtx: Debug + Default> OpPayloadBuilderCtx<ExtraCtx> {
@@ -447,7 +445,7 @@ impl<ExtraCtx: Debug + Default> OpPayloadBuilderCtx<ExtraCtx> {
447445

448446
num_txs_considered += 1;
449447

450-
let _resource_usage = self.resource_metering.get(&tx_hash);
448+
let _resource_usage = self.tx_data_store.get_metering(&tx_hash);
451449

452450
// TODO: ideally we should get this from the txpool stream
453451
if let Some(conditional) = conditional
@@ -604,7 +602,9 @@ impl<ExtraCtx: Debug + Default> OpPayloadBuilderCtx<ExtraCtx> {
604602
info.executed_senders.push(tx.signer());
605603
info.executed_transactions.push(tx.into_inner());
606604

607-
if is_success && let Some(backrun_bundles) = self.backrun_bundle_store.get(&tx_hash) {
605+
if is_success
606+
&& let Some(backrun_bundles) = self.tx_data_store.get_backrun_bundles(&tx_hash)
607+
{
608608
self.metrics.backrun_target_txs_found_total.increment(1);
609609
let backrun_start_time = Instant::now();
610610

@@ -731,7 +731,7 @@ impl<ExtraCtx: Debug + Default> OpPayloadBuilderCtx<ExtraCtx> {
731731
.record(backrun_start_time.elapsed());
732732

733733
// Remove the target tx from the backrun bundle store as already executed
734-
self.backrun_bundle_store.remove(&tx_hash);
734+
self.tx_data_store.remove_backrun_bundles(&tx_hash);
735735
}
736736
}
737737

crates/op-rbuilder/src/builders/flashblocks/ctx.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
use crate::{
22
builders::{BuilderConfig, OpPayloadBuilderCtx, flashblocks::FlashblocksConfig},
3-
bundles::BackrunBundleStore,
43
gas_limiter::{AddressGasLimiter, args::GasLimiterArgs},
54
metrics::OpRBuilderMetrics,
6-
resource_metering::ResourceMetering,
75
traits::ClientBounds,
6+
tx_data_store::TxDataStore,
87
};
98
use op_revm::OpSpecId;
109
use reth_basic_payload_builder::PayloadConfig;
@@ -31,10 +30,8 @@ pub(super) struct OpPayloadSyncerCtx {
3130
max_gas_per_txn: Option<u64>,
3231
/// The metrics for the builder
3332
metrics: Arc<OpRBuilderMetrics>,
34-
/// Resource metering tracking
35-
resource_metering: ResourceMetering,
36-
/// Backrun bundle store
37-
backrun_bundle_store: BackrunBundleStore,
33+
/// Unified transaction data store (backrun bundles + resource metering)
34+
tx_data_store: TxDataStore,
3835
}
3936

4037
impl OpPayloadSyncerCtx {
@@ -54,8 +51,7 @@ impl OpPayloadSyncerCtx {
5451
chain_spec,
5552
max_gas_per_txn: builder_config.max_gas_per_txn,
5653
metrics,
57-
resource_metering: builder_config.resource_metering,
58-
backrun_bundle_store: builder_config.backrun_bundle_store,
54+
tx_data_store: builder_config.tx_data_store,
5955
})
6056
}
6157

@@ -88,8 +84,7 @@ impl OpPayloadSyncerCtx {
8884
extra_ctx: (),
8985
max_gas_per_txn: self.max_gas_per_txn,
9086
address_gas_limiter: AddressGasLimiter::new(GasLimiterArgs::default()),
91-
resource_metering: self.resource_metering.clone(),
92-
backrun_bundle_store: self.backrun_bundle_store.clone(),
87+
tx_data_store: self.tx_data_store.clone(),
9388
}
9489
}
9590
}

crates/op-rbuilder/src/builders/flashblocks/payload.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,7 @@ where
282282
extra_ctx,
283283
max_gas_per_txn: self.config.max_gas_per_txn,
284284
address_gas_limiter: self.address_gas_limiter.clone(),
285-
resource_metering: self.config.resource_metering.clone(),
286-
backrun_bundle_store: self.config.backrun_bundle_store.clone(),
285+
tx_data_store: self.config.tx_data_store.clone(),
287286
})
288287
}
289288

crates/op-rbuilder/src/builders/mod.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ mod flashblocks;
2121
mod generator;
2222
mod standard;
2323

24-
use crate::{bundles::BackrunBundleStore, resource_metering::ResourceMetering};
24+
use crate::tx_data_store::TxDataStore;
2525
pub use builder_tx::{
2626
BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, InvalidContractDataError,
2727
SimulationSuccessResult, get_balance, get_nonce,
@@ -128,11 +128,8 @@ pub struct BuilderConfig<Specific: Clone> {
128128
/// Address gas limiter stuff
129129
pub gas_limiter_config: GasLimiterArgs,
130130

131-
/// Resource metering context
132-
pub resource_metering: ResourceMetering,
133-
134-
/// Backrun bundle store for storing backrun transactions
135-
pub backrun_bundle_store: BackrunBundleStore,
131+
/// Unified transaction data store (backrun bundles + resource metering)
132+
pub tx_data_store: TxDataStore,
136133
}
137134

138135
impl<S: Debug + Clone> core::fmt::Debug for BuilderConfig<S> {
@@ -155,7 +152,7 @@ impl<S: Debug + Clone> core::fmt::Debug for BuilderConfig<S> {
155152
.field("specific", &self.specific)
156153
.field("max_gas_per_txn", &self.max_gas_per_txn)
157154
.field("gas_limiter_config", &self.gas_limiter_config)
158-
.field("backrun_bundle_store", &self.backrun_bundle_store)
155+
.field("tx_data_store", &self.tx_data_store)
159156
.finish()
160157
}
161158
}
@@ -174,8 +171,7 @@ impl<S: Default + Clone> Default for BuilderConfig<S> {
174171
sampling_ratio: 100,
175172
max_gas_per_txn: None,
176173
gas_limiter_config: GasLimiterArgs::default(),
177-
resource_metering: ResourceMetering::default(),
178-
backrun_bundle_store: BackrunBundleStore::default(),
174+
tx_data_store: TxDataStore::default(),
179175
}
180176
}
181177
}
@@ -198,11 +194,11 @@ where
198194
sampling_ratio: args.telemetry.sampling_ratio,
199195
max_gas_per_txn: args.max_gas_per_txn,
200196
gas_limiter_config: args.gas_limiter.clone(),
201-
resource_metering: ResourceMetering::new(
197+
tx_data_store: TxDataStore::new(
202198
args.enable_resource_metering,
203-
args.resource_metering_buffer_size,
199+
args.resource_metering_buffer_size
200+
.max(args.backrun_bundle_buffer_size),
204201
),
205-
backrun_bundle_store: BackrunBundleStore::new(args.backrun_bundle_buffer_size),
206202
specific: S::try_from(args)?,
207203
})
208204
}

crates/op-rbuilder/src/builders/standard/payload.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,7 @@ where
251251
extra_ctx: Default::default(),
252252
max_gas_per_txn: self.config.max_gas_per_txn,
253253
address_gas_limiter: self.address_gas_limiter.clone(),
254-
resource_metering: self.config.resource_metering.clone(),
255-
backrun_bundle_store: self.config.backrun_bundle_store.clone(),
254+
tx_data_store: self.config.tx_data_store.clone(),
256255
};
257256

258257
let builder = OpBuilder::new(best);

0 commit comments

Comments
 (0)