Skip to content

Commit b25080c

Browse files
authored
miner: account for generateWork elapsed time in payload rebuild timer (#33908)
The payload rebuild loop resets the timer with the full Recommit duration after generateWork returns, making the actual interval generateWork_elapsed + Recommit instead of Recommit alone. Since fillTransactions uses Recommit (2s) as its timeout ceiling, the effective rebuild interval can reach ~4s under heavy blob workloads — only 1–2 rebuilds in a 6s half-slot window instead of the intended 3. Fix by subtracting elapsed time from the timer reset. ### Before this fix ``` t=0s timer fires, generateWork starts t=2s fillTransactions times out, timer.Reset(2s) t=4s second rebuild starts t=6s CL calls getPayload — gets the t=2s result (1 effective rebuild) ``` ### After ``` t=0s timer fires, generateWork starts t=2s fillTransactions times out, timer.Reset(2s - 2s = 0) t=2s second rebuild starts immediately t=4s timer.Reset(0), third rebuild starts t=6s CL calls getPayload — gets the t=4s result (3 effective rebuilds) ```
1 parent 48cfc97 commit b25080c

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

‎miner/payload_building.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload
267267
} else {
268268
log.Info("Error while generating work", "id", payload.id, "err", r.err)
269269
}
270-
timer.Reset(miner.config.Recommit)
270+
timer.Reset(max(0, miner.config.Recommit-time.Since(start)))
271271
case <-payload.stop:
272272
log.Info("Stopping work on payload", "id", payload.id, "reason", "delivery")
273273
return

0 commit comments

Comments
 (0)