@@ -171,8 +171,11 @@ pub struct PbsModuleConfig {
171171 pub endpoint : SocketAddr ,
172172 /// Pbs default config
173173 pub pbs_config : Arc < PbsConfig > ,
174- /// List of relays
174+ /// List of default relays
175175 pub relays : Vec < RelayClient > ,
176+ /// List of all default relays plus additional relays from muxes (based on URL)
177+ /// DO NOT use this for get_header calls, use `relays` or `muxes` instead
178+ pub all_relays : Vec < RelayClient > ,
176179 /// Signer client to call Signer API
177180 pub signer_client : Option < SignerClient > ,
178181 /// Event publisher
@@ -208,12 +211,31 @@ pub async fn load_pbs_config() -> Result<PbsModuleConfig> {
208211 let relay_clients =
209212 config. relays . into_iter ( ) . map ( RelayClient :: new) . collect :: < Result < Vec < _ > > > ( ) ?;
210213 let maybe_publiher = BuilderEventPublisher :: new_from_env ( ) ?;
214+ let mut all_relays = HashMap :: with_capacity ( relay_clients. len ( ) ) ;
215+
216+ if let Some ( muxes) = & muxes {
217+ for ( _, mux) in muxes. iter ( ) {
218+ for relay in mux. relays . iter ( ) {
219+ all_relays. insert ( & relay. config . entry . url , relay. clone ( ) ) ;
220+ }
221+ }
222+ }
223+
224+ // insert default relays after to make sure we keep these as defaults,
225+ // this means we override timing games which is ok since this won't be used for get_header
226+ // we also override headers if the same relays has two definitions (in muxes and default)
227+ for relay in relay_clients. iter ( ) {
228+ all_relays. insert ( & relay. config . entry . url , relay. clone ( ) ) ;
229+ }
230+
231+ let all_relays = all_relays. into_values ( ) . collect ( ) ;
211232
212233 Ok ( PbsModuleConfig {
213234 chain : config. chain ,
214235 endpoint,
215236 pbs_config : Arc :: new ( config. pbs . pbs_config ) ,
216237 relays : relay_clients,
238+ all_relays,
217239 signer_client : None ,
218240 event_publisher : maybe_publiher,
219241 muxes,
@@ -264,6 +286,24 @@ pub async fn load_pbs_custom_config<T: DeserializeOwned>() -> Result<(PbsModuleC
264286 let relay_clients =
265287 cb_config. relays . into_iter ( ) . map ( RelayClient :: new) . collect :: < Result < Vec < _ > > > ( ) ?;
266288 let maybe_publiher = BuilderEventPublisher :: new_from_env ( ) ?;
289+ let mut all_relays = HashMap :: with_capacity ( relay_clients. len ( ) ) ;
290+
291+ if let Some ( muxes) = & muxes {
292+ for ( _, mux) in muxes. iter ( ) {
293+ for relay in mux. relays . iter ( ) {
294+ all_relays. insert ( & relay. config . entry . url , relay. clone ( ) ) ;
295+ }
296+ }
297+ }
298+
299+ // insert default relays after to make sure we keep these as defaults,
300+ // this also means we override timing games which is ok since this won't be used for get header
301+ // we also override headers if the same relays has two definitions (in muxes and default)
302+ for relay in relay_clients. iter ( ) {
303+ all_relays. insert ( & relay. config . entry . url , relay. clone ( ) ) ;
304+ }
305+
306+ let all_relays = all_relays. into_values ( ) . collect ( ) ;
267307
268308 let signer_client = if cb_config. pbs . static_config . with_signer {
269309 // if custom pbs requires a signer client, load jwt
@@ -280,6 +320,7 @@ pub async fn load_pbs_custom_config<T: DeserializeOwned>() -> Result<(PbsModuleC
280320 endpoint,
281321 pbs_config : Arc :: new ( cb_config. pbs . static_config . pbs_config ) ,
282322 relays : relay_clients,
323+ all_relays,
283324 signer_client,
284325 event_publisher : maybe_publiher,
285326 muxes,
0 commit comments