t.InvalidAction("the latest L2 output is %d and is not past L2 block %d that includes the withdrawal yet, no withdrawal can be proved yet",l2OutputBlock.NumberU64(),l2WithdrawalBlock.NumberU64())
returncommon.Hash{}
returnnil,fmt.Errorf("the latest L2 output is %d and is not past L2 block %d that includes the withdrawal yet, no withdrawal can be proved yet",l2OutputBlock.NumberU64(),l2WithdrawalBlock.NumberU64())
returnnil,fmt.Errorf("L2 output block %d (time %d) is not past finalization period %d from L2 block %d (time %d) at head %d (time %d)",l2OutputBlock.NumberU64(),l2OutputBlock.Time(),finalizationPeriod.Uint64(),l2WithdrawalBlock.NumberU64(),l2WithdrawalBlock.Time(),l1Head.Number.Uint64(),l1Head.Time)
}
}
// We generate a proof for the latest L2 output, which shouldn't require archive-node data if it's recent enough.
t.InvalidAction("the latest L2 output is %d and is not past L2 block %d that includes the withdrawal yet, no withdrawal can be completed yet",l2OutputBlock.NumberU64(),l2WithdrawalBlock.NumberU64())
t.InvalidAction("withdrawal tx %s was included in L2 block %d (time %d) but L1 only knows of L2 proposal %d (time %d) at head %d (time %d) which has not reached output confirmation yet (period is %d)",