@@ -205,79 +205,86 @@ func (m *BoostService) handleTimingGamesGetHeader(
205205 }
206206 }
207207
208+ if relayConfig .FrequencyGetHeaderMs == 0 {
209+ // in the case if frequency is not set, send only one getHeader request
210+ return m .sendGetHeaderRequest (log , relay , url , slotUID , userAgent , proposerAcceptContentTypes , timeoutLeftMs )
211+ }
212+
208213 // send multiple requests at frequency intervals
209- if relayConfig .FrequencyGetHeaderMs > 0 { //nolint:nestif
210- log .WithFields (logrus.Fields {
211- "frequencyMs" : relayConfig .FrequencyGetHeaderMs ,
212- "timeoutLeftMs" : timeoutLeftMs ,
213- }).Debug ("sending multiple header requests via timing games" )
214+ log .WithFields (logrus.Fields {
215+ "frequencyMs" : relayConfig .FrequencyGetHeaderMs ,
216+ "timeoutLeftMs" : timeoutLeftMs ,
217+ }).Debug ("sending multiple header requests via timing games" )
214218
215- var bidResults []bidResult
216- var mu sync.Mutex
217- var wg sync.WaitGroup
219+ var (
220+ bidResults []bidResult
221+ mu sync.Mutex
222+ wg sync.WaitGroup
223+ )
218224
219- // helper to send a request with the remaining timeout budget
220- sendTimedRequest := func (timeoutMs uint64 ) {
221- defer wg .Done ()
222- bid , contentType := m .sendGetHeaderRequest (log , relay , url , slotUID , userAgent , proposerAcceptContentTypes , timeoutMs )
223- if bid != nil {
224- mu .Lock ()
225- bidResults = append (bidResults , bidResult {
226- bid : bid ,
227- contentType : contentType ,
228- timestamp : time .Now (),
229- })
230- mu .Unlock ()
231- }
225+ // helper to send a request with the remaining timeout budget
226+ sendTimedRequest := func (timeoutMs uint64 ) {
227+ defer wg .Done ()
228+ bid , contentType := m .sendGetHeaderRequest (log , relay , url , slotUID , userAgent , proposerAcceptContentTypes , timeoutMs )
229+ if bid != nil {
230+ mu .Lock ()
231+ bidResults = append (bidResults , bidResult {
232+ bid : bid ,
233+ contentType : contentType ,
234+ timestamp : time .Now (),
235+ })
236+ mu .Unlock ()
232237 }
238+ }
233239
234- // send first request asap
235- wg .Add (1 )
236- go sendTimedRequest (timeoutLeftMs )
237-
238- ticker := time .NewTicker (time .Duration (relayConfig .FrequencyGetHeaderMs ) * time .Millisecond )
239- defer ticker .Stop ()
240- timeoutCh := time .After (time .Duration (timeoutLeftMs ) * time .Millisecond )
241-
242- // send subsequent requests at regular intervals until timeout
243- loop:
244- for {
245- select {
246- case <- ticker .C :
247- // dec the remaining timeout budget and send request
248- if timeoutLeftMs > relayConfig .FrequencyGetHeaderMs {
249- timeoutLeftMs -= relayConfig .FrequencyGetHeaderMs
250- wg .Add (1 )
251- go sendTimedRequest (timeoutLeftMs )
252- }
253- case <- timeoutCh :
254- break loop
240+ // send first request asap
241+ wg .Add (1 )
242+ go sendTimedRequest (timeoutLeftMs )
243+
244+ ticker := time .NewTicker (time .Duration (relayConfig .FrequencyGetHeaderMs ) * time .Millisecond )
245+ defer ticker .Stop ()
246+ timeoutCh := time .After (time .Duration (timeoutLeftMs ) * time .Millisecond )
247+
248+ // send subsequent requests at regular intervals until timeout
249+ loop:
250+ for {
251+ select {
252+ case <- ticker .C :
253+ // dec the remaining timeout budget and send request
254+ if timeoutLeftMs > relayConfig .FrequencyGetHeaderMs {
255+ timeoutLeftMs -= relayConfig .FrequencyGetHeaderMs
256+ wg .Add (1 )
257+ go sendTimedRequest (timeoutLeftMs )
255258 }
259+ case <- timeoutCh :
260+ break loop
256261 }
262+ }
257263
258- wg .Wait ()
259-
260- // select only the bid which was most recently received
261- if len (bidResults ) > 0 {
262- log .WithField ("totalBids" , len (bidResults )).Debug ("received headers from relay via timing games" )
263- var latestBid * builderSpec.VersionedSignedBuilderBid
264- var latestContentType string
265- var latestTime time.Time
266- for _ , br := range bidResults {
267- if latestBid == nil || br .timestamp .After (latestTime ) {
268- latestBid = br .bid
269- latestContentType = br .contentType
270- latestTime = br .timestamp
271- }
272- }
273- return latestBid , latestContentType
274- }
264+ wg .Wait ()
265+
266+ // if no bids were received return an empty bid
267+ if len (bidResults ) == 0 {
275268 log .Warn ("no headers received via timing games" )
276269 return nil , ""
277270 }
278271
279- // in the case if frequency is not set, send only one getHeader request
280- return m .sendGetHeaderRequest (log , relay , url , slotUID , userAgent , proposerAcceptContentTypes , timeoutLeftMs )
272+ var (
273+ latestBid * builderSpec.VersionedSignedBuilderBid
274+ latestContentType string
275+ latestTime time.Time
276+ )
277+ // select only the bid which was most recently received and return it
278+ log .WithField ("totalBids" , len (bidResults )).Debug ("received headers from relay via timing games" )
279+
280+ for _ , br := range bidResults {
281+ if latestBid == nil || br .timestamp .After (latestTime ) {
282+ latestBid = br .bid
283+ latestContentType = br .contentType
284+ latestTime = br .timestamp
285+ }
286+ }
287+ return latestBid , latestContentType
281288}
282289
283290// sendGetHeaderRequest sends a single getHeader request to a relay and returns the bid and content type
0 commit comments