Skip to content

Commit 2324107

Browse files
committed
feat: resoure metering rpc/lookup
1 parent dcab1ed commit 2324107

File tree

15 files changed

+292
-6
lines changed

15 files changed

+292
-6
lines changed

Cargo.lock

Lines changed: 21 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,7 @@ time = { version = "0.3.36", features = ["macros", "formatting", "parsing"] }
213213
vergen = "9.0.4"
214214
vergen-git2 = "1.0.5"
215215
opentelemetry = { version = "0.31", features = ["trace"] }
216+
217+
# Base Path
218+
concurrent-queue = "2.5.0"
219+
tips-core = { git = "https://github.com/base/tips", rev = "c08eaa4fe10c26de8911609b41ddab4918698325", default-features = false }

crates/op-rbuilder/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ workspace = true
1414
[dependencies]
1515
p2p = { path = "../p2p" }
1616

17+
tips-core.workspace = true
18+
1719
reth.workspace = true
1820
reth-optimism-node.workspace = true
1921
reth-optimism-cli.workspace = true
@@ -112,6 +114,7 @@ url.workspace = true
112114
anyhow = "1"
113115
opentelemetry = { workspace = true, optional = true }
114116
dashmap.workspace = true
117+
concurrent-queue.workspace = true
115118
hex = { workspace = true }
116119
futures = { workspace = true }
117120
futures-util = { workspace = true }

crates/op-rbuilder/src/args/op.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ pub struct OpRbuilderArgs {
4848
/// Whether to enable revert protection by default
4949
#[arg(long = "builder.enable-revert-protection", default_value = "false")]
5050
pub enable_revert_protection: bool,
51+
/// Whether to enable TIPS Resource Metering
52+
#[arg(long = "builder.enable-resource-metering", default_value = "false")]
53+
pub enable_resource_metering: bool,
54+
/// Whether to enable TIPS Resource Metering
55+
#[arg(long = "builder.resource-metering-buffer-size", default_value = "10000")]
56+
pub resource_metering_buffer_size: usize,
5157

5258
/// Path to builder playgorund to automatically start up the node connected to it
5359
#[arg(

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ use crate::{
4747
tx::MaybeRevertingTransaction,
4848
tx_signer::Signer,
4949
};
50+
use crate::resource_metering::ResourceMetering;
5051

5152
/// Container type that holds all necessities to build a new payload.
5253
#[derive(Debug)]
@@ -77,6 +78,8 @@ pub struct OpPayloadBuilderCtx<ExtraCtx: Debug + Default = ()> {
7778
pub max_gas_per_txn: Option<u64>,
7879
/// Rate limiting based on gas. This is an optional feature.
7980
pub address_gas_limiter: AddressGasLimiter,
81+
/// Per transaction resource metering information
82+
pub resource_metering: ResourceMetering,
8083
}
8184

8285
impl<ExtraCtx: Debug + Default> OpPayloadBuilderCtx<ExtraCtx> {
@@ -441,6 +444,8 @@ impl<ExtraCtx: Debug + Default> OpPayloadBuilderCtx<ExtraCtx> {
441444

442445
num_txs_considered += 1;
443446

447+
let _resource_usage = self.resource_metering.get(&tx_hash);
448+
444449
// TODO: ideally we should get this from the txpool stream
445450
if let Some(conditional) = conditional
446451
&& !conditional.matches_block_attributes(&block_attr)

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use reth_optimism_payload_builder::{
1616
use reth_optimism_primitives::OpTransactionSigned;
1717
use std::sync::Arc;
1818
use tokio_util::sync::CancellationToken;
19+
use crate::resource_metering::ResourceMetering;
1920

2021
#[derive(Debug, Clone)]
2122
pub(super) struct OpPayloadSyncerCtx {
@@ -29,6 +30,8 @@ pub(super) struct OpPayloadSyncerCtx {
2930
max_gas_per_txn: Option<u64>,
3031
/// The metrics for the builder
3132
metrics: Arc<OpRBuilderMetrics>,
33+
/// Resource metering tracking
34+
resource_metering: ResourceMetering,
3235
}
3336

3437
impl OpPayloadSyncerCtx {
@@ -48,6 +51,7 @@ impl OpPayloadSyncerCtx {
4851
chain_spec,
4952
max_gas_per_txn: builder_config.max_gas_per_txn,
5053
metrics,
54+
resource_metering: builder_config.resource_metering,
5155
})
5256
}
5357

@@ -80,6 +84,7 @@ impl OpPayloadSyncerCtx {
8084
extra_ctx: (),
8185
max_gas_per_txn: self.max_gas_per_txn,
8286
address_gas_limiter: AddressGasLimiter::new(GasLimiterArgs::default()),
87+
resource_metering: self.resource_metering.clone(),
8388
}
8489
}
8590
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ where
253253
extra_data,
254254
};
255255

256+
256257
let evm_config = self.evm_config.clone();
257258

258259
let evm_env = evm_config
@@ -273,6 +274,7 @@ where
273274
extra_ctx,
274275
max_gas_per_txn: self.config.max_gas_per_txn,
275276
address_gas_limiter: self.address_gas_limiter.clone(),
277+
resource_metering: self.config.resource_metering.clone(),
276278
})
277279
}
278280

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ pub use builder_tx::{
2828
pub use context::OpPayloadBuilderCtx;
2929
pub use flashblocks::FlashblocksBuilder;
3030
pub use standard::StandardBuilder;
31+
use crate::resource_metering::ResourceMetering;
3132

3233
/// Defines the payload building mode for the OP builder.
3334
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
@@ -126,6 +127,9 @@ pub struct BuilderConfig<Specific: Clone> {
126127

127128
/// Address gas limiter stuff
128129
pub gas_limiter_config: GasLimiterArgs,
130+
131+
/// Resource metering context
132+
pub resource_metering: ResourceMetering
129133
}
130134

131135
impl<S: Debug + Clone> core::fmt::Debug for BuilderConfig<S> {
@@ -166,6 +170,7 @@ impl<S: Default + Clone> Default for BuilderConfig<S> {
166170
sampling_ratio: 100,
167171
max_gas_per_txn: None,
168172
gas_limiter_config: GasLimiterArgs::default(),
173+
resource_metering: ResourceMetering::default(),
169174
}
170175
}
171176
}
@@ -188,6 +193,10 @@ where
188193
sampling_ratio: args.telemetry.sampling_ratio,
189194
max_gas_per_txn: args.max_gas_per_txn,
190195
gas_limiter_config: args.gas_limiter.clone(),
196+
resource_metering: ResourceMetering::new(
197+
args.enable_resource_metering,
198+
args.resource_metering_buffer_size,
199+
),
191200
specific: S::try_from(args)?,
192201
})
193202
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::{
22
builders::standard::service::StandardServiceBuilder,
33
traits::{NodeBounds, PoolBounds},
44
};
5-
65
use super::BuilderConfig;
76

87
mod builder_tx;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ where
250250
extra_ctx: Default::default(),
251251
max_gas_per_txn: self.config.max_gas_per_txn,
252252
address_gas_limiter: self.address_gas_limiter.clone(),
253+
resource_metering: self.config.resource_metering.clone(),
253254
};
254255

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

0 commit comments

Comments
 (0)