require.Equal(t,verifier.L2Safe(),sequencer.L2Safe(),"verifier and sequencer see same safe L2 block, while only verifier dealt with the orphan and replay")
require.Equal(t,verifier.L2Safe(),sequencer.L2Safe(),"verifier and sequencer see same safe L2 block, while only verifier dealt with the orphan and replay")
//t.Logf("l2 unsafe head %s with origin %s", ref, ref.L1Origin)
//require.NotEqual(t, verifier.L2Unsafe().Hash, ref.ParentHash, "TODO off by one, engine syncs A0 after reorging back from B, while rollup node only inserts up to A0 (excl.)")
//require.Equal(t, verifier.L2Unsafe(), ref, "verifier safe head of engine matches rollup client")
// now sync the verifier: some of the batches should be ignored:
// The safe head should have a genesis L1 origin, but past genesis, as some L2 blocks were built to get to A0 time
verifier.ActL1HeadSignal(t)
verifier.ActL2PipelineFull(t)
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)")
require.Equal(t,verifier.L2Safe(),verifier.L2Unsafe(),"head is at safe block after L1 reorg")
checkVerifEngine()
// and sync the sequencer, then build some new L2 blocks, up to and including with L1 origin B2
sequencer.ActL1HeadSignal(t)
sequencer.ActL2PipelineFull(t)
sequencer.ActBuildToL1Head(t)
require.Equal(t,sequencer.L2Unsafe().L1Origin,blockB2.ID(),"B2 is the unsafe L1 origin of sequencer now")
// submit all new L2 blocks for chain B, and include in new block B3