22
33use crate :: {
44 budget:: DEFAULT_BUDGET_TRY_DRAIN_DOWNLOADERS , metered_poll_nested_stream_with_budget,
5- metrics:: EthRequestHandlerMetrics ,
5+ metrics:: EthRequestHandlerMetrics , transform :: header :: HeaderTransform ,
66} ;
77use alloy_consensus:: { BlockHeader , ReceiptWithBloom } ;
88use alloy_eips:: BlockHashOrNumber ;
@@ -61,18 +61,26 @@ pub struct EthRequestHandler<C, N: NetworkPrimitives = EthNetworkPrimitives> {
6161 peers : PeersHandle ,
6262 /// Incoming request from the [`NetworkManager`](crate::NetworkManager).
6363 incoming_requests : ReceiverStream < IncomingEthRequest < N > > ,
64+ /// The header transform to apply to the headers before sending to peers.
65+ header_transform : Option < Box < dyn HeaderTransform < N :: BlockHeader > > > ,
6466 /// Metrics for the eth request handler.
6567 metrics : EthRequestHandlerMetrics ,
6668}
6769
6870// === impl EthRequestHandler ===
6971impl < C , N : NetworkPrimitives > EthRequestHandler < C , N > {
7072 /// Create a new instance
71- pub fn new ( client : C , peers : PeersHandle , incoming : Receiver < IncomingEthRequest < N > > ) -> Self {
73+ pub fn new (
74+ client : C ,
75+ peers : PeersHandle ,
76+ incoming : Receiver < IncomingEthRequest < N > > ,
77+ header_transform : Option < Box < dyn HeaderTransform < N :: BlockHeader > > > ,
78+ ) -> Self {
7279 Self {
7380 client,
7481 peers,
7582 incoming_requests : ReceiverStream :: new ( incoming) ,
83+ header_transform,
7684 metrics : Default :: default ( ) ,
7785 }
7886 }
@@ -81,7 +89,7 @@ impl<C, N: NetworkPrimitives> EthRequestHandler<C, N> {
8189impl < C , N > EthRequestHandler < C , N >
8290where
8391 N : NetworkPrimitives ,
84- C : BlockReader ,
92+ C : BlockReader < Header = N :: BlockHeader > ,
8593{
8694 /// Returns the list of requested headers
8795 fn get_headers_response ( & self , request : GetBlockHeaders ) -> Vec < C :: Header > {
@@ -144,6 +152,11 @@ where
144152 }
145153 }
146154
155+ // TODO: remove this once we deprecated l2geth
156+ if let Some ( ref header_transform) = self . header_transform {
157+ headers = headers. into_iter ( ) . map ( |h| header_transform. map ( h) ) . collect ( )
158+ }
159+
147160 headers
148161 }
149162
0 commit comments