Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,12 @@ func (v *simpleVirtualNode) L1AtSafeHead(ctx context.Context, target eth.BlockID
}

// Special case: genesis L2 block is trivially safe at genesis L1
// Note: We use L1 block 0 (not cfg.Genesis.L1) because contracts may have been deployed
// earlier than cfg.Genesis.L1, allowing dispute games with L1 heads prior to cfg.Genesis.L1
if target == v.cfg.Rollup.Genesis.L2 {
return v.cfg.Rollup.Genesis.L1, nil
// Return L1 block 0 (L1 genesis)
l1Genesis := eth.BlockID{Number: 0} // Hash not necessary
return l1Genesis, nil
}

// Get the latest entry to start the walkback
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ func TestVirtualNode_L1AtSafeHead(t *testing.T) {
// Query for genesis L2 block
result, err := vn.L1AtSafeHead(context.Background(), genesisL2)
require.NoError(t, err)
require.Equal(t, genesisL1, result)
require.Equal(t, eth.BlockID{}, result) // Genesis L2 target returns genesis L1 directly, but without the hash
})

t.Run("genesis L2 number with different hash is not treated as genesis", func(t *testing.T) {
Expand Down