From e11618f4bd45f35f73fe0170bb711d2a5521cd6b Mon Sep 17 00:00:00 2001 From: Max Sanchez Date: Mon, 12 May 2025 10:11:07 -0400 Subject: [PATCH] Make sure block sealing does not run sealed timestamps ahead of wall time --- op-node/rollup/engine/build_seal.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/op-node/rollup/engine/build_seal.go b/op-node/rollup/engine/build_seal.go index cd3ca888827..eaf6b77c3a9 100644 --- a/op-node/rollup/engine/build_seal.go +++ b/op-node/rollup/engine/build_seal.go @@ -103,7 +103,18 @@ func (eq *EngDeriver) onBuildSeal(ev BuildSealEvent) { return } + forwardDrift := int64(ref.Time*1000) - time.Now().UnixMilli() + if forwardDrift > 0 { + // Block we are sealing is ahead of local clock, delay sealing accordingly + eq.log.Debug(fmt.Sprintf("Block sealer waiting for %d ms", forwardDrift)) + time.Sleep(time.Duration(forwardDrift) * time.Millisecond) + eq.log.Debug("Done waiting, proceeding to seal") + } + now := time.Now() + + eq.log.Trace(fmt.Sprintf("ref.Time: %d, time.Now().Unix(): %d", ref.Time, time.Now().Unix())) + sealTime := now.Sub(sealingStart) buildTime := now.Sub(ev.BuildStarted) eq.metrics.RecordSequencerSealingTime(sealTime)