s.log.Warn("last submitted block lagged behind L2 safe head: batch submission will continue from the safe head now","last",s.l2SubmittedBlock,"safe",syncStatus.SafeL2)
s.log.Warn("last submitted block lagged behind L2 safe head: batch submission will continue from the safe head now","last",s.l2SubmittedBlock,"safe",syncStatus.SafeL2)
require.Equal(t,sd.RollupCfg.Genesis.L1,verifier.L2Safe().L1Origin,"expected to be back at genesis origin after losing A0 and A1")
require.Equal(t,sd.RollupCfg.Genesis.L1,verifier.L2Safe().L1Origin,"expected to be back at genesis origin after losing A0 and A1")
require.NotZero(t,verifier.L2Safe().Number,"still preserving old L2 blocks that did not reference reorged L1 chain (assuming more than one L2 block per L1 block)")
ifsd.RollupCfg.SpanBatchTime==nil{
require.Equal(t,verifier.L2Safe(),verifier.L2Unsafe(),"head is at safe block after L1 reorg")
// before span batch hard fork
require.NotZero(t,verifier.L2Safe().Number,"still preserving old L2 blocks that did not reference reorged L1 chain (assuming more than one L2 block per L1 block)")
require.Equal(t,verifier.L2Safe(),verifier.L2Unsafe(),"head is at safe block after L1 reorg")
}else{
// after span batch hard fork
require.Zero(t,verifier.L2Safe().Number,"safe head is at genesis block because span batch referenced reorged L1 chain is not accepted")
require.Equal(t,verifier.L2Unsafe().ID(),sequencer.L2Unsafe().ParentID(),"head is at the highest unsafe block that references canonical L1 chain(genesis block)")
batcher.l2BufferedBlock=eth.L2BlockRef{}// must reset batcher to resubmit blocks included in the last batch
}
checkVerifEngine()
checkVerifEngine()
// and sync the sequencer, then build some new L2 blocks, up to and including with L1 origin B2
// and sync the sequencer, then build some new L2 blocks, up to and including with L1 origin B2
eq.log.Warn("L2 reorg: existing unsafe block does not match derived attributes from L1","err",err,"unsafe",eq.unsafeHead,"safe",eq.safeHead)
eq.log.Warn("L2 reorg: existing unsafe block does not match derived attributes from L1","err",err,"unsafe",eq.unsafeHead,"pending_safe",eq.pendingSafeHead,"safe",eq.safeHead)
// geth cannot wind back a chain without reorging to a new, previously non-canonical, block
// geth cannot wind back a chain without reorging to a new, previously non-canonical, block