From af4d8fe2907925bbdcbf38dedad11f25c426cb64 Mon Sep 17 00:00:00 2001 From: protolambda Date: Sat, 10 Sep 2022 15:03:34 +0200 Subject: [PATCH] op-node: handle when engine changes safe head unexpectedly --- op-node/rollup/derive/engine_queue.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/op-node/rollup/derive/engine_queue.go b/op-node/rollup/derive/engine_queue.go index 040802c057495..71bbc6914c8a9 100644 --- a/op-node/rollup/derive/engine_queue.go +++ b/op-node/rollup/derive/engine_queue.go @@ -302,6 +302,10 @@ func (eq *EngineQueue) consolidateNextSafeAttributes(ctx context.Context) error payload, err := eq.engine.PayloadByNumber(ctx, eq.safeHead.Number+1) if err != nil { + if errors.Is(err, ethereum.NotFound) { + // engine may have restarted, or inconsistent safe head. We need to reset + return NewResetError(fmt.Errorf("expected engine was synced and had unsafe block to reconcile, but cannot find the block: %w", err)) + } return NewTemporaryError(fmt.Errorf("failed to get existing unsafe payload to compare against derived attributes from L1: %w", err)) } if err := AttributesMatchBlock(eq.safeAttributes[0], eq.safeHead.Hash, payload); err != nil {