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")
ifsd.RollupCfg.SpanBatchTime==nil{
// 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.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")
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
Usage:"Comma-separated multiaddr-format peer list. Static connections to make and maintain, these peers will be regarded as trusted.",
Usage:"Comma-separated multiaddr-format peer list. Static connections to make and maintain, these peers will be regarded as trusted. "+
"Addresses of the local peer are ignored. Duplicate/Alternative addresses for the same peer all apply, but only a single connection per peer is maintained.",
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
require.NotNilf(l.t,call,"No expected calls to %v with arguments: %v\nExpected calls: %v",abiMethod.Name,args,expectedCalls)
require.NotNilf(l.t,call,"No expected calls to %v at block %v with arguments: %v\nExpected calls: %v",abiMethod.Name,actualBlockRef,args,expectedCalls)