diff --git a/op-supernode/supernode/chain_container/virtual_node/virtual_node.go b/op-supernode/supernode/chain_container/virtual_node/virtual_node.go index 576d0efe9bc62..6805afd8be7c9 100644 --- a/op-supernode/supernode/chain_container/virtual_node/virtual_node.go +++ b/op-supernode/supernode/chain_container/virtual_node/virtual_node.go @@ -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 diff --git a/op-supernode/supernode/chain_container/virtual_node/virtual_node_test.go b/op-supernode/supernode/chain_container/virtual_node/virtual_node_test.go index 810dc016b235f..b4c1a9f0822ee 100644 --- a/op-supernode/supernode/chain_container/virtual_node/virtual_node_test.go +++ b/op-supernode/supernode/chain_container/virtual_node/virtual_node_test.go @@ -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) {