Skip to content

Commit e32587d

Browse files
committed
Add optional shadow builder to args
1 parent d11fb0d commit e32587d

File tree

4 files changed

+47
-8
lines changed

4 files changed

+47
-8
lines changed

crates/rollup-boost/src/cli.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ use crate::{
1212
get_version, init_metrics,
1313
probe::ProbeLayer,
1414
};
15-
use crate::{FlashblocksService, RpcClient};
15+
use crate::{FlashblocksService, RpcClient, ShadowBuilderArgs};
1616

1717
#[derive(Clone, Debug, clap::Args)]
1818
pub struct RollupBoostLibArgs {
1919
#[clap(flatten)]
2020
pub builder: BuilderArgs,
2121

22+
#[clap(flatten)]
23+
pub shadow_builder: Option<ShadowBuilderArgs>,
24+
2225
#[clap(flatten)]
2326
pub l2_client: L2ClientArgs,
2427

@@ -117,6 +120,12 @@ impl RollupBoostServiceArgs {
117120
let builder_client_args: ClientArgs = self.lib.builder.clone().into();
118121
let builder_http_client = builder_client_args.new_http_client(PayloadSource::Builder)?;
119122

123+
let shadow_builder_client_args: Option<ClientArgs> =
124+
self.lib.shadow_builder.clone().map(Into::into);
125+
let shadow_builder_http_client = shadow_builder_client_args
126+
.map(|client| client.new_http_client(PayloadSource::Builder))
127+
.transpose()?;
128+
120129
let (probe_layer, probes) = ProbeLayer::new();
121130

122131
let (health_handle, rpc_module) = if self.lib.flashblocks.flashblocks {
@@ -148,8 +157,9 @@ impl RollupBoostServiceArgs {
148157
tower::ServiceBuilder::new()
149158
.layer(probe_layer)
150159
.layer(ProxyLayer::new(
151-
l2_http_client.clone(),
152-
builder_http_client.clone(),
160+
l2_http_client,
161+
builder_http_client,
162+
shadow_builder_http_client,
153163
));
154164

155165
let server = Server::builder()

crates/rollup-boost/src/client/rpc.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,11 @@ macro_rules! define_client_args {
467467
};
468468
}
469469

470-
define_client_args!((BuilderArgs, builder), (L2ClientArgs, l2));
470+
define_client_args!(
471+
(BuilderArgs, builder),
472+
(L2ClientArgs, l2),
473+
(ShadowBuilderArgs, shadow_builder)
474+
);
471475

472476
#[cfg(test)]
473477
pub mod tests {

crates/rollup-boost/src/proxy.rs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use jsonrpsee::server::HttpBody;
66
use std::task::{Context, Poll};
77
use std::{future::Future, pin::Pin};
88
use tower::{Layer, Service};
9-
use tracing::info;
9+
use tracing::{debug, info};
1010

1111
const ENGINE_METHOD: &str = "engine_";
1212

@@ -24,13 +24,19 @@ const FORWARD_REQUESTS: [&str; 6] = [
2424
pub struct ProxyLayer {
2525
l2_client: HttpClient,
2626
builder_client: HttpClient,
27+
shadow_builder_client: Option<HttpClient>,
2728
}
2829

2930
impl ProxyLayer {
30-
pub fn new(l2_client: HttpClient, builder_client: HttpClient) -> Self {
31+
pub fn new(
32+
l2_client: HttpClient,
33+
builder_client: HttpClient,
34+
shadow_builder_client: Option<HttpClient>,
35+
) -> Self {
3136
ProxyLayer {
3237
l2_client,
3338
builder_client,
39+
shadow_builder_client,
3440
}
3541
}
3642
}
@@ -43,6 +49,7 @@ impl<S> Layer<S> for ProxyLayer {
4349
inner,
4450
l2_client: self.l2_client.clone(),
4551
builder_client: self.builder_client.clone(),
52+
shadow_builder_client: self.shadow_builder_client.clone(),
4653
}
4754
}
4855
}
@@ -52,6 +59,7 @@ pub struct ProxyService<S> {
5259
inner: S,
5360
l2_client: HttpClient,
5461
builder_client: HttpClient,
62+
shadow_builder_client: Option<HttpClient>,
5563
}
5664

5765
// Consider using `RpcServiceT` when https://github.com/paritytech/jsonrpsee/pull/1521 is merged
@@ -108,13 +116,26 @@ where
108116
let method_clone = method.clone();
109117
let buffered_clone = buffered.clone();
110118
let mut builder_client = service.builder_client.clone();
111-
119+
debug!(target: "proxy::call", message = "forwarding request to builder", ?method);
112120
// Fire and forget the builder request
113121
tokio::spawn(async move {
114122
let _ = builder_client.forward(buffered_clone, method_clone).await;
115123
});
116124
}
117125

126+
// If the shadow builder is enabled, forward the request to the shadow builder
127+
if let Some(shadow_builder_client) = service.shadow_builder_client.clone() {
128+
let method_clone = method.clone();
129+
let buffered_clone = buffered.clone();
130+
let mut shadow_builder_client = shadow_builder_client.clone();
131+
debug!(target: "proxy::call", message = "proxying request to shadow builder", ?method);
132+
tokio::spawn(async move {
133+
let _ = shadow_builder_client
134+
.forward(buffered_clone, method_clone)
135+
.await;
136+
});
137+
}
138+
118139
// Return the response from the L2 client
119140
service
120141
.l2_client
@@ -196,6 +217,7 @@ mod tests {
196217
timeout: 1,
197218
}
198219
.new_http_client(PayloadSource::Builder)?,
220+
None,
199221
));
200222

201223
let temp_listener = TcpListener::bind("127.0.0.1:0").await?;
@@ -512,6 +534,7 @@ mod tests {
512534
}
513535
.new_http_client(PayloadSource::Builder)
514536
.unwrap(),
537+
None,
515538
);
516539

517540
// Create a layered server
@@ -825,6 +848,7 @@ mod tests {
825848
timeout: 200,
826849
}
827850
.new_http_client(PayloadSource::Builder)?,
851+
None,
828852
);
829853

830854
// Start proxy server
@@ -926,6 +950,7 @@ mod tests {
926950
timeout: 200,
927951
}
928952
.new_http_client(PayloadSource::Builder)?,
953+
None,
929954
);
930955

931956
// Start proxy on dynamic port

crates/rollup-boost/src/server.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ pub mod tests {
909909

910910
let http_middleware = tower::ServiceBuilder::new()
911911
.layer(probe_layer)
912-
.layer(ProxyLayer::new(l2_http_client, builder_http_client));
912+
.layer(ProxyLayer::new(l2_http_client, builder_http_client, None));
913913

914914
let server = Server::builder()
915915
.set_http_middleware(http_middleware)

0 commit comments

Comments
 (0)