@@ -6,7 +6,7 @@ use jsonrpsee::server::HttpBody;
66use std:: task:: { Context , Poll } ;
77use std:: { future:: Future , pin:: Pin } ;
88use tower:: { Layer , Service } ;
9- use tracing:: info;
9+ use tracing:: { debug , info} ;
1010
1111const ENGINE_METHOD : & str = "engine_" ;
1212
@@ -24,13 +24,19 @@ const FORWARD_REQUESTS: [&str; 6] = [
2424pub struct ProxyLayer {
2525 l2_client : HttpClient ,
2626 builder_client : HttpClient ,
27+ shadow_builder_client : Option < HttpClient > ,
2728}
2829
2930impl 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
0 commit comments