eq.log.Error("ignoring old L1 finalized block signal! Is the L1 provider corrupted?","prev_finalized_l1",eq.finalizedL1,"signaled_finalized_l1",l1Origin)
eq.log.Error("ignoring old L1 finalized block signal! Is the L1 provider corrupted?","prev_finalized_l1",eq.finalizedL1,"signaled_finalized_l1",l1Origin)
return
return
}
}
// Perform a safety check: the L1 finalization signal is only accepted if we previously processed the L1 block.
// This prevents a corrupt L1 provider from tricking us in recognizing a L1 block inconsistent with the L1 chain we are on.
// remember the L1 finalization signal
// Missing a finality signal due to empty buffer is fine, it will finalize when the buffer is filled again.
eq.finalizedL1=l1Origin
// Sanity check: we only try to finalize L2 immediately, without fetching additional data,
// if we are on the same chain as the signal.
// If we are on a different chain, the signal will be ignored,
// and tryFinalizeL1Origin() will eventually detect that we are on the wrong chain,
// if not resetting due to reorg elsewhere already.
for_,fd:=rangeeq.finalityData{
for_,fd:=rangeeq.finalityData{
iffd.L1Block==l1Origin.ID(){
iffd.L1Block==l1Origin.ID(){
eq.finalizedL1=l1Origin
eq.tryFinalizeL2()
eq.tryFinalizeL2()
return
return
}
}
}
}
eq.log.Warn("ignoring finalization signal for unknown L1 block, waiting for new L1 blocks in buffer","prev_finalized_l1",eq.finalizedL1,"signaled_finalized_l1",l1Origin)
eq.log.Info("received L1 finality signal, but missing data for immediate L2 finalization","prev_finalized_l1",eq.finalizedL1,"signaled_finalized_l1",l1Origin)
}
}
// FinalizedL1 identifies the L1 chain (incl.) that included and/or produced all the finalized L2 blocks.
// FinalizedL1 identifies the L1 chain (incl.) that included and/or produced all the finalized L2 blocks.