diff --git a/.gitignore b/.gitignore index 124a685c3c..a764c3f39b 100644 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,4 @@ out # Next.js sitemap apps/cow-fi/public/robots.txt -apps/cow-fi/public/sitemap* +apps/cow-fi/public/sitemap* \ No newline at end of file diff --git a/apps/cow-fi/.env b/apps/cow-fi/.env index c093234a84..c0a3df1aaf 100644 --- a/apps/cow-fi/.env +++ b/apps/cow-fi/.env @@ -2,4 +2,4 @@ DUNE_API_KEY=tuBkOcda6ymMvmnpIX9Qer9Xb5hJ2rf8 NEXT_PUBLIC_GOOGLE_ANALYTICS= NEXT_PUBLIC_AWS_API_ENDPOINT="https://bff.cow.fi/proxies/tokens" NEXT_PUBLIC_LAUNCH_DARKLY_KEY= -NEXT_PUBLIC_SITE_URL="https://cow.fi" \ No newline at end of file +NEXT_PUBLIC_SITE_URL="https://cow.fi" diff --git a/apps/cow-fi/app/(learn)/layout.tsx b/apps/cow-fi/app/(learn)/layout.tsx new file mode 100644 index 0000000000..45e809a061 --- /dev/null +++ b/apps/cow-fi/app/(learn)/layout.tsx @@ -0,0 +1,5 @@ +import { Layout } from '@/components/Layout' + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return {children} +} diff --git a/apps/cow-fi/app/(learn)/learn/[article]/page.tsx b/apps/cow-fi/app/(learn)/learn/[article]/page.tsx new file mode 100644 index 0000000000..56012ddd6e --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/[article]/page.tsx @@ -0,0 +1,101 @@ +'use server' + +import React from 'react' +import { + Article, + getAllArticleSlugs, + getArticleBySlug, + getArticles, + getCategories, + SharedRichTextComponent, +} from '../../../../services/cms' +import { ArticlePageComponent } from '@/components/ArticlePageComponent' +import { notFound } from 'next/navigation' +import type { Metadata } from 'next' +import { stripHtmlTags } from '@/util/stripHTMLTags' +import { getPageMetadata } from '@/util/getPageMetadata' + +function isRichTextComponent(block: any): block is SharedRichTextComponent { + return block.body !== undefined +} + +type Props = { + params: Promise<{ article: string }> +} + +export async function generateMetadata({ params }: Props): Promise { + const articleSlug = (await params).article + + if (!articleSlug) return {} + + const article = await getArticleBySlug(articleSlug) + const attributes = article?.attributes + const { title, blocks, description, cover } = attributes || {} + const coverImageUrl = cover?.data?.attributes?.url + + const content = + blocks?.map((block: SharedRichTextComponent) => (isRichTextComponent(block) ? block.body : '')).join(' ') || '' + const plainContent = stripHtmlTags(content) + + return getPageMetadata({ + absoluteTitle: `${title} - CoW DAO`, + description: description + ? stripHtmlTags(description) + : plainContent.length > 150 + ? stripHtmlTags(plainContent.substring(0, 147)) + '...' + : stripHtmlTags(plainContent), + image: coverImageUrl, + }) +} + +export async function generateStaticParams() { + const slugs = await getAllArticleSlugs() + + return slugs.map((article) => ({ article })) +} + +export default async function ArticlePage({ params }: Props) { + const articleSlug = (await params).article + const article = await getArticleBySlug(articleSlug) + + if (!article) { + return notFound() + } + + const articlesResponse = await getArticles() + const articles = articlesResponse.data + + // Fetch featured articles + const featuredArticlesResponse = await getArticles({ + filters: { + featured: { + $eq: true, + }, + }, + pageSize: 7, // Limit to 7 articles + }) + const featuredArticles = featuredArticlesResponse.data + + const randomArticles = getRandomArticles(articles, 3) + const categoriesResponse = await getCategories() + const allCategories = + categoriesResponse?.map((category: any) => ({ + name: category?.attributes?.name || '', + slug: category?.attributes?.slug || '', + })) || [] + + return ( + + ) +} + +function getRandomArticles(articles: Article[], count: number): Article[] { + const shuffled = articles.sort(() => 0.5 - Math.random()) + return shuffled.slice(0, count) +} diff --git a/apps/cow-fi/app/(learn)/learn/articles/[[...pageIndex]]/layout.tsx b/apps/cow-fi/app/(learn)/learn/articles/[[...pageIndex]]/layout.tsx new file mode 100644 index 0000000000..e0d2ade733 --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/articles/[[...pageIndex]]/layout.tsx @@ -0,0 +1,10 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: 'All articles', + description: 'All knowledge base articles in the Cow DAO ecosystem', +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(learn)/learn/articles/[[...pageIndex]]/page.tsx b/apps/cow-fi/app/(learn)/learn/articles/[[...pageIndex]]/page.tsx new file mode 100644 index 0000000000..590c10c700 --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/articles/[[...pageIndex]]/page.tsx @@ -0,0 +1,67 @@ +'use server' + +import { Article, getArticles, getCategories } from '../../../../../services/cms' +import { ArticlesPageComponents } from '@/components/ArticlesPageComponents' + +const ITEMS_PER_PAGE = 24 + +type Props = { + params: Promise<{ pageIndex?: string }> +} + +export type ArticlesResponse = { + data?: Article[] + meta?: { + pagination?: { + total?: number + } + } +} + +export async function generateStaticParams() { + const articlesResponse = await getArticles({ page: 0, pageSize: ITEMS_PER_PAGE }) + const totalArticles = articlesResponse.meta?.pagination?.total || 0 + const totalPages = Math.ceil(totalArticles / ITEMS_PER_PAGE) + + return Array.from({ length: totalPages }, (_, i) => ({ pageIndex: [(i + 1).toString()] })) +} + +export default async function Page({ params }: Props) { + const pageParam = (await params)?.pageIndex + const page = pageParam && pageParam.length > 0 ? parseInt(pageParam[0], 10) : 1 + + const articlesResponse = (await getArticles({ page, pageSize: ITEMS_PER_PAGE })) as ArticlesResponse + + const totalArticles = articlesResponse.meta?.pagination?.total || 0 + const articles = + articlesResponse.data?.map((article: Article) => ({ + ...article, + id: article.id || 0, + attributes: { + ...article.attributes, + title: article.attributes?.title ?? 'Untitled', + description: article.attributes?.description ?? '', + slug: article.attributes?.slug ?? 'no-slug', + featured: article.attributes?.featured ?? false, + publishDateVisible: article.attributes?.publishDateVisible ?? false, + cover: article.attributes?.cover ?? {}, + blocks: article.attributes?.blocks ?? [], + }, + })) || [] + + const categoriesResponse = await getCategories() + const allCategories = + categoriesResponse?.map((category: any) => ({ + name: category?.attributes?.name || '', + slug: category?.attributes?.slug || '', + })) || [] + + return ( + + ) +} diff --git a/apps/cow-fi/app/(learn)/learn/layout.tsx b/apps/cow-fi/app/(learn)/learn/layout.tsx new file mode 100644 index 0000000000..4ede75bdcf --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/layout.tsx @@ -0,0 +1,12 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: { + default: 'Knowledge Base - CoW DAO', + template: '%s - CoW DAO', + }, +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(learn)/learn/page.tsx b/apps/cow-fi/app/(learn)/learn/page.tsx new file mode 100644 index 0000000000..529089a11b --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/page.tsx @@ -0,0 +1,45 @@ +'use server' + +import { getArticles, getCategories } from '../../../services/cms' + +import { LearnPageComponent } from '@/components/LearnPageComponent' + +export default async function Page() { + const categoriesResponse = await getCategories() + const articlesResponse = await getArticles() + + const featuredArticlesResponse = await getArticles({ + filters: { featured: { $eq: true } }, + pageSize: 6, + }) + + const categories = + categoriesResponse?.map((category: any) => { + const imageUrl = category?.attributes?.image?.data?.attributes?.url || '' + + return { + name: category?.attributes?.name || '', + slug: category?.attributes?.slug || '', + description: category?.attributes?.description || '', + bgColor: category?.attributes?.backgroundColor || '#fff', + textColor: category?.attributes?.textColor || '#000', + link: `/learn/topic/${category?.attributes?.slug}`, + iconColor: '#fff', + imageUrl, + } + }) || [] + + const featuredArticles = featuredArticlesResponse.data.map((article) => { + const attributes = article.attributes + return { + title: attributes?.title || 'No title', + description: attributes?.description || 'No description', + link: `/learn/${attributes?.slug || 'no-slug'}`, + cover: attributes?.cover?.data?.attributes?.url || '', + } + }) + + return ( + + ) +} diff --git a/apps/cow-fi/app/(learn)/learn/topic/[topicSlug]/page.tsx b/apps/cow-fi/app/(learn)/learn/topic/[topicSlug]/page.tsx new file mode 100644 index 0000000000..ddec58ccf4 --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/topic/[topicSlug]/page.tsx @@ -0,0 +1,64 @@ +'use server' + +import React from 'react' +import { getAllCategorySlugs, getArticles, getCategories, getCategoryBySlug } from '../../../../../services/cms' +import { TopicPageComponent } from '@/components/TopicPageComponent' +import { notFound } from 'next/navigation' +import type { Metadata } from 'next' + +type Props = { + params: Promise<{ topicSlug: string }> +} + +export async function generateMetadata({ params }: Props): Promise { + const topicSlug = (await params).topicSlug + + if (!topicSlug) return {} + + const category = await getCategoryBySlug(topicSlug) + const { name, description } = category?.attributes || {} + + return { + title: name, + description, + } +} + +export async function generateStaticParams() { + const categoriesResponse = await getAllCategorySlugs() + + return categoriesResponse.map((topicSlug) => ({ topicSlug })) +} + +export default async function TopicPage({ params }: Props) { + const slug = (await params).topicSlug + + const category = await getCategoryBySlug(slug) + + if (!category) { + return notFound() + } + + const articlesResponse = await getArticles({ + page: 0, + pageSize: 50, + filters: { + categories: { + slug: { + $eq: slug, + }, + }, + }, + }) + + const articles = articlesResponse.data + + const categoriesResponse = await getCategories() + const allCategories = + categoriesResponse?.map((category: any) => ({ + name: category?.attributes?.name || '', + slug: category?.attributes?.slug || '', + })) || [] + + return +} diff --git a/apps/cow-fi/app/(learn)/learn/topics/layout.tsx b/apps/cow-fi/app/(learn)/learn/topics/layout.tsx new file mode 100644 index 0000000000..5970243511 --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/topics/layout.tsx @@ -0,0 +1,10 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: 'Topics', + description: 'All knowledge base topics', +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(learn)/learn/topics/page.tsx b/apps/cow-fi/app/(learn)/learn/topics/page.tsx new file mode 100644 index 0000000000..1c590fecac --- /dev/null +++ b/apps/cow-fi/app/(learn)/learn/topics/page.tsx @@ -0,0 +1,27 @@ +'use server' + +import { getArticles, getCategories } from '../../../../services/cms' +import { TopicsPageComponent } from '@/components/TopicsPageComponent' + +export default async function Page() { + const categoriesResponse = await getCategories() + const articlesResponse = await getArticles() + + const categories = + categoriesResponse?.map((category: any) => { + const imageUrl = category?.attributes?.image?.data?.attributes?.url || '' + + return { + name: category?.attributes?.name || '', + slug: category?.attributes?.slug || '', + description: category?.attributes?.description || '', + bgColor: category?.attributes?.backgroundColor || '#fff', + textColor: category?.attributes?.textColor || '#000', + link: `/learn/topic/${category?.attributes?.slug}`, + iconColor: 'transparent', + imageUrl, + } + }) || [] + + return +} diff --git a/apps/cow-fi/app/(main)/careers/layout.tsx b/apps/cow-fi/app/(main)/careers/layout.tsx new file mode 100644 index 0000000000..323e78942e --- /dev/null +++ b/apps/cow-fi/app/(main)/careers/layout.tsx @@ -0,0 +1,14 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' + +export const metadata: Metadata = { + ...getPageMetadata({ + title: 'Careers', + description: + 'We are an ambitious, fast-growing and international team working at the forefront of DeFi. We believe that we can make markets more fair and more efficient by building the ultimate batch auction settlement layer across EVM-compatible blockchains.', + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/careers/page.tsx b/apps/cow-fi/app/(main)/careers/page.tsx new file mode 100644 index 0000000000..235fb5c552 --- /dev/null +++ b/apps/cow-fi/app/(main)/careers/page.tsx @@ -0,0 +1,22 @@ +'use server' + +import { getJobs } from '../../../services/ashByHq' + +import { CareersPageContent } from '@/components/CareersPageContent' + +export default async function Page() { + const jobsData = (await getJobs()) || {} + const department = 'All' + + const jobsCount = Object.keys(jobsData).reduce((acc, cur) => acc + jobsData[cur].length, 0) + const jobsCountForDepartment = department === 'All' ? jobsCount : jobsData[department].length + + return ( + + ) +} diff --git a/apps/cow-fi/app/(main)/careers/refer-to-earn/layout.tsx b/apps/cow-fi/app/(main)/careers/refer-to-earn/layout.tsx new file mode 100644 index 0000000000..117840b102 --- /dev/null +++ b/apps/cow-fi/app/(main)/careers/refer-to-earn/layout.tsx @@ -0,0 +1,12 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' + +export const metadata: Metadata = getPageMetadata({ + title: 'Refer-to-Earn - CoW DAO', + description: + 'Know someone who is not just looking for a job but for a great opportunity to grow? Refer them to us to earn $6,000 in USDC or USD.', +}) + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/careers/refer-to-earn/page.tsx b/apps/cow-fi/app/(main)/careers/refer-to-earn/page.tsx new file mode 100644 index 0000000000..6cdfb0cacb --- /dev/null +++ b/apps/cow-fi/app/(main)/careers/refer-to-earn/page.tsx @@ -0,0 +1,165 @@ +'use client' + +import { Color } from '@cowprotocol/ui' + +import styled from 'styled-components/macro' + +import { ContainerCard, ArticleContent, Breadcrumbs, ArticleMainTitle, BodyContent } from '@/styles/styled' + +import { clickOnCareers } from '../../../../modules/analytics' + +const Wrapper = styled.div` + display: flex; + flex-flow: column wrap; + justify-content: flex-start; + align-items: center; + max-width: 1000px; + width: 100%; + margin: 24px auto 0; + gap: 24px; +` + +export default function Page() { + return ( + + + + + clickOnCareers('click-breadcrumb-careers')}> + Careers + + Refer-to-Earn + + + Refer-to-Earn + + +

+ Know someone who is not just looking for a job but for a great opportunity to grow? Refer them to us to + earn up to $6,000 in USDC or USD. +

+

+ We will reward you with a referral bonus of up to 6,000 USDC or USD per placement. The referral + bonus amount can vary for each role. You can find the exact amount listed in the job description on our + website at https://cow.fi/careers. Your referral is successful and + paid once the Candidate clears their first 6 months of work in their new role. +

+ +

+ Sounds like a long time to wait? Allow us to explain! 😊 At CoW, we prioritize quality and make + substantial investments in our people. We consider this our utmost priority and exercise great caution + when onboarding new individuals. We genuinely care about ensuring that we bring on board the right people + who align with our values and goals. +
+
+ + Have Questions? Ask us at{' '} + + people@cow.fi + + +

+ +

Conditions:

+

Referrer Eligibility. Who is eligible to participate in this Program?

+
    +
  • Individuals (or entities) who are not currently engaged in providing contracting services to CoW.
  • +
  • + Individuals (or entities) who are not affiliated with, employed by, or acting as consultants for + staffing or recruiting agencies or any other third party for CoW at the time of making referrals or + receiving payments for such referrals. +
  • +
  • Individuals (or entities) must not act against any laws or regulations when participating.
  • +
  • The Referrer must provide a proper invoice for payment, complying with Portuguese rules.
  • +
  • + This must be the first submission, if the Candidate has previously applied or been referred by + someone else first, the Referrer is not eligible. +
  • +
  • + If two or more Referrers refer the same Candidate, only the first Referrer provided by such + Candidate will be eligible for the referral bonus. We will let the Referrers know. +
  • +
  • There is no limit to the number of referrals that a Referrer can make.
  • +
+ +

Candidates Eligibility

+
    +
  • Any individual (or entity) who is not the Referrer or a current or former contractor of CoW.
  • +
  • + Any individual who is not bound by non-compete agreements or any other similar agreements that would + prohibit CoW from engaging with them. +
  • +
+ +

Referral Procedures

+
    +
  • + The referrer should reach out to a CoW core team member or directly contact the People department via + email at people@cow.fi, LinkedIn, or Telegram. When reaching out, the + Referrer must include the candidate's name, surname, and email or LinkedIn profile. The Referrer is + responsible for ensuring that the Candidate has given consent to share this information. +
  • +
  • + To apply for a specific role at CoW, Candidates are required to submit their application through + the official website: https://cow.fi/careers.{' '} + + When applying, Candidates must mention the name and email of the person (or entity) who referred them. + {' '} + Candidates are responsible for ensuring that the Referrer has given consent to share this information. +
  • +
  • + If a Candidate receives a job offer from CoW and accepts it, CoW will inform the Referrer about the + Candidate's status and the timeline for the start date. Referrers should not contact CoW requesting + such information. +
  • +
  • + CoW is not obligated to disclose the reason for rejecting a Candidate to a Referrer or to inform them if + the Candidate was not selected for the next steps in the interview process. +
  • +
  • Referrers should not directly submit Candidate information to CoW.
  • +
+ +

Referral bonus and invoice

+
    +
  • + The Referrer becomes eligible to receive the full referral bonus up to six thousand USDC or USD (6,000) + after six (6) months from the Candidate's start date, provided that the Candidate remains providing + services to CoW during this period. The referral bonus amount can vary for each role. You can find the + exact amount listed in the job description on our website at{' '} + https://cow.fi/careers. The Referrer can decide if they want to be + paid in USDC or USD. +
  • +
  • + The referral bonus is excl. VAT (VAT can be added), but net of any other tax, such as, income tax or + withholding tax. +
  • +
  • + The referral bonus will be paid to the Referrer within thirty (30) days receiving a legally compliant + invoice (incl. Name, Address and VAT number, either USDC-Ethereum address or IBAN) of the Referrer. +
  • +
  • The Referrer assumes full responsibility for any tax obligations arising from the referral bonus.
  • +
+ +

Miscellaneous Rules

+
    +
  • + Contracting to CoW includes a number of routes, including EORs. Grants (other than core contributors) + are not counted into these routes and Grant recipients are eligible to make referrals. +
  • +
  • The decision regarding the Candidate's submission order is based solely on our judgment.
  • +
  • + We can terminate this program at any point in time and at our sole discretion, without notice. Of + course, presently referred Candidates remain part of the program. +
  • +
  • + The conditions of the referral program will be shared via email with the Referrer, and we will require + confirmation by responding to the email once a Candidate accepts a Job Offer. Unfortunately, the + Referrer will not qualify for a bonus if we do not receive this confirmation. +
  • +
+
+
+
+
+ ) +} diff --git a/apps/cow-fi/app/(main)/cow-amm/layout.tsx b/apps/cow-fi/app/(main)/cow-amm/layout.tsx new file mode 100644 index 0000000000..7728013c47 --- /dev/null +++ b/apps/cow-fi/app/(main)/cow-amm/layout.tsx @@ -0,0 +1,15 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' +import { CONFIG } from '@/const/meta' + +export const metadata: Metadata = { + ...getPageMetadata({ + title: 'CoW AMM - The first MEV-capturing AMM, now live on Balancer', + description: 'CoW AMM protects LPs from LVR so they can provide liquidity with less risk and more return', + image: CONFIG.ogImageCOWAMM, + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/cow-amm/page.tsx b/apps/cow-fi/app/(main)/cow-amm/page.tsx new file mode 100644 index 0000000000..d2eef74048 --- /dev/null +++ b/apps/cow-fi/app/(main)/cow-amm/page.tsx @@ -0,0 +1,355 @@ +'use client' + +import { Color, ProductLogo, ProductVariant } from '@cowprotocol/ui' +import IMG_ICON_CROWN_COW from '@cowprotocol/assets/images/icon-crown-cow.svg' +import IMG_ICON_BULB_COW from '@cowprotocol/assets/images/icon-bulb-cow.svg' +import IMG_COWAMM_HERO from '@cowprotocol/assets/images/image-cowamm-hero.svg' +import IMG_COWAMM_RAISING from '@cowprotocol/assets/images/image-cowamm-raising.svg' +import IMG_COWAMM_PASSIVE from '@cowprotocol/assets/images/image-cowamm-passive.svg' +import IMG_COWAMM_REKT from '@cowprotocol/assets/images/image-cowamm-rekt.svg' +import FAQ from '@/components/FAQ' +import { Link, LinkType } from '@/components/Link' + +import { + ContainerCard, + ContainerCardSection, + HeroContainer, + HeroContent, + HeroDescription, + HeroImage, + HeroSubtitle, + HeroTitle, + MetricsCard, + MetricsItem, + PageWrapper, + SectionTitleDescription, + SectionTitleIcon, + SectionTitleText, + SectionTitleWrapper, + TopicCard, + TopicCardInner, + TopicDescription, + TopicImage, + TopicList, + TopicTitle, +} from '@/styles/styled' + +import LazySVG from '@/components/LazySVG' +import IMG_ICON_FAQ from '@cowprotocol/assets/images/icon-faq.svg' + +import { COW_AMM_CONTENT, FAQ_DATA, LVR_CONTENT, QUOTES } from '@/data/cow-amm/const' +import { clickOnCowAmm } from '../../../modules/analytics' + +export default function Page() { + return ( + + + + CoW AMM + The first MEV-capturing AMM, now live on Balancer + + CoW AMM protects LPs from LVR so they can provide liquidity with less risk and more return + + clickOnCowAmm('click-lp-on-cow-amm')} + > + LP on CoW AMM ↗ + + + + + + + + + +

4.75%

+

more TVL achieved than reference pool (beta phase)

+
+ +

$11M+

+

liquidity protected from LVR

+
+ +

$90K+

+

surplus captured for LPs (beta phase)

+
+ + clickOnCowAmm('click-view-all-metrics')} + > + View all metrics on DUNE ↗ + +
+ + + + + + + + AMMs don't want you to know about LVR + + + + {LVR_CONTENT.map((content, index) => ( + + + + {content.description1} + + + 1 {content.description2} + + + + + + + ))} + + + + + + + + + + + Finally, an AMM designed with LPs in mind + + CoW AMM eliminates LVR once and for all by using batch auctions to send surplus to LPs + + + + + {COW_AMM_CONTENT.map((content, index) => ( + + + + {index + 1}. +
+ {content.description} +
+
+ + + +
+ ))} +
+
+
+ + + + + + + + + Raising the bar curve + + + + + + + + CoW AMM LPs don't have to worry about LVR, which costs CF-AMM LPs 5-7% of their liquidity, on average. +
+
+ Backtesting research conducted over 6 months in 2023 shows that CoW AMM returns would have equalled or + outperformed CF-AMM returns for 10 of the 11 most liquid, non-stablecoin pairs. +
+
+ + + +
+
+
+
+ + + + + + + + CoW AMM benefits LPs of all types + + + + + + + + + Provide liquidity for your token without getting rekt + + Healthy liquidity for DAO tokens reduces price impact, encourages investment and discourages + volatility. But DAOs can be reluctant to provide liquidity with treasury funds when their pools can be + exploited by arbitrageurs. CoW AMM makes providing liquidity more attractive to DAOs of all sizes. + + + + + + + Unlock the power of passive income while reducing risk + + With LVR in the rear view mirror, providing liquidity becomes identical to running a passive + investment strategy: solvers rebalance the pool at the correct market price to keep the value of its + reserves equal, thereby keeping portfolios balanced and reducing risk. On top of that, liquidity + providers earn surplus when they trade with CoW Protocol traders. + + + + + + + + + + + + + + + + + Trust the experts + + + + {QUOTES.map((quote, index) => ( + + + {quote.title} + + {quote.description} + + + + ))} + + + + + + + + + + + FAQs + + + + + +
+ ) +} diff --git a/apps/cow-fi/app/(main)/cow-protocol/layout.tsx b/apps/cow-fi/app/(main)/cow-protocol/layout.tsx new file mode 100644 index 0000000000..848d295419 --- /dev/null +++ b/apps/cow-fi/app/(main)/cow-protocol/layout.tsx @@ -0,0 +1,16 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' +import { CONFIG } from '@/const/meta' + +export const metadata: Metadata = { + ...getPageMetadata({ + absoluteTitle: 'CoW Protocol - Do what you want, build what you want', + description: + 'CoW Protocol has the largest solver competition and the most advanced developer framework - so you can build any DEX-related action you can imagine', + image: CONFIG.ogImageCOWPROTOCOL, + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/cow-protocol/page.tsx b/apps/cow-fi/app/(main)/cow-protocol/page.tsx new file mode 100644 index 0000000000..1b9a896c34 --- /dev/null +++ b/apps/cow-fi/app/(main)/cow-protocol/page.tsx @@ -0,0 +1,558 @@ +'use client' + +import { Color, ProductLogo, ProductVariant } from '@cowprotocol/ui' +import IMG_ICON_CROWN_COW from '@cowprotocol/assets/images/icon-crown-cow.svg' +import IMG_ICON_BULB_COW from '@cowprotocol/assets/images/icon-bulb-cow.svg' +import IMG_ICON_BUILD_WITH_COW from '@cowprotocol/assets/images/icon-build-with-cow.svg' +import IMG_ICON_SECURE from '@cowprotocol/assets/images/icon-secure.svg' +import IMG_ICON_OWL from '@cowprotocol/assets/images/icon-owl.svg' +import IMG_ICON_GHOST from '@cowprotocol/assets/images/icon-ghost.svg' +import IMG_LOGO_SAFE from '@cowprotocol/assets/images/icon-logo-safe.svg' +import IMG_LOGO_LIDO from '@cowprotocol/assets/images/icon-logo-lido.svg' +import IMG_LOGO_CURVE from '@cowprotocol/assets/images/icon-logo-curve.svg' +import IMG_INTENTS from '@cowprotocol/assets/images/image-intents.svg' +import IMG_SOLVERS from '@cowprotocol/assets/images/image-solvers.svg' +import IMG_BATCHAUCTIONS from '@cowprotocol/assets/images/image-batchauctions.svg' +import IMG_COW_LENS from '@cowprotocol/assets/images/icon-cow-lens.svg' +import IMG_COW_BITS from '@cowprotocol/assets/images/image-cow-bits.svg' +import IMG_LEADING from '@cowprotocol/assets/images/image-leading.svg' +import FAQ from '@/components/FAQ' +import { Link, LinkType } from '@/components/Link' + +import { + ContainerCard, + ContainerCardSection, + HeroContainer, + HeroContent, + HeroDescription, + HeroImage, + HeroSubtitle, + HeroTitle, + MetricsCard, + MetricsItem, + PageWrapper, + SectionImage, + SectionTitleDescription, + SectionTitleIcon, + SectionTitleText, + SectionTitleWrapper, + TopicCard, + TopicCardInner, + TopicDescription, + TopicImage, + TopicList, + TopicTitle, +} from '@/styles/styled' + +import LazySVG from '@/components/LazySVG' +import IMG_ICON_FAQ from '@cowprotocol/assets/images/icon-faq.svg' + +import { + ADVANCED_ORDER_TYPES, + ALL_LOGOS, + CASE_STUDIES, + COW_PROTOCOL_SECTIONS, + FAQ_DATA, + TOP_LOGOS, + UNIQUE_TRADING_LOGIC, +} from '@/data/cow-protocol/const' +import { clickOnCowProtocol } from '../../../modules/analytics' + +export default function Page() { + return ( + + + + CoW Protocol + Do what you want, build what you want + + CoW Protocol has the largest solver competition and the most advanced developer framework - so you can build + any DeFi-related action you can imagine + + clickOnCowProtocol('click-hero-start-building')} + > + Start building + + + + + + + + + +

23

+

active solvers settling batches

+
+ +

#1

+

intent-based DEX protocol by volume

+
+ + +

1.2B+

+

all time transactions

+
+ + clickOnCowProtocol('click-metrics-view-all')} + > + View all metrics on DUNE ↗ + +
+ + + + + + + + The leading intents-based DEX aggregation protocol + + CoW Protocol leverages intents, batch auctions, and the largest solver network in DeFi to bring + surplus-capturing, MEV-protected trades to users + + + + + + + + + + + + + + + How it works + + CoW Protocol hosts a continuous competition between solvers to find better prices and protect users from + MEV + + + + + + + Intents + + CoW Protocol users sign an "intent to trade" message instead of directly executing orders on-chain + (like on Uniswap). This lets solvers trade on behalf of the user. + + clickOnCowProtocol('click-intents-learn-more')} + linkType={LinkType.TopicButton} + > + Learn more + + + + + + + + + + + + + Solvers + + Professional third parties known as solvers find the most optimal trade path from a combination of + public and private liquidity sources - finding better prices than most users could find on their own. + + clickOnCowProtocol('click-solvers-learn-more')} + linkType={LinkType.TopicButton} + > + Learn more + + + + + + + Batch Auctions + + Solvers compete for the right to settle trades in batches, which give users additional MEV protection + and allow for Coincidence of Wants. +
+
+ The solver that wins the batch auction is the solver that finds the most surplus - so they win when + you win. +
+ clickOnCowProtocol('click-batch-auctions-learn-more')} + > + Learn more + +
+ + + +
+
+
+
+ + + + + + Going where others can't + + Thanks to its unique architecture, CoW Protocol can do things other DEXs can't + + + + + Advanced order types + + + {ADVANCED_ORDER_TYPES.map((topic) => ( + + + {topic.title} + + {topic.description} + + + + + + + ))} + + + + Unique trading logic + + + {UNIQUE_TRADING_LOGIC.map((topic) => ( + + + {topic.title} + + {topic.description} + + + + + + + ))} + + + + + + + + + + + Powering innovation across DeFi + + + + + + + + + Automating advanced treasury tasks + + Curve uses programmatic orders from CoW Protocol to streamline their fee burning processes. With the + integration in place, Curve can take fees in any token and convert them automatically to CRV, while + generating surplus and protecting themselves from MEV + + + + + + + + + + Adding security to sensitive transactions + + Lido leverages programmatic orders as the backbone of “stonks” - a set of smart contracts that they + use to manage treasury ops smoothly and securely without taking custody of funds. Stonks allows Lido + DAO to "set and forget" complex trade intents without compromising the prices they receive on future + swaps - minimizing time spent and human error + + + + + + + + + + Powering native swaps + + Safe chose CoW Protocol to power native swaps on the Safe app. The team chose to build on top of the + CoW widget (the simplest way to integrate CoW Protocol) and is now earning revenue by offering + MEV-protected swaps to its users + + + + + + + + + + + + + + + + Trusted by the best + + + + {TOP_LOGOS.map((logo) => ( + clickOnCowProtocol(`click-logo-${logo.alt}`)} + > + + + + + ))} + + {CASE_STUDIES.map((study) => ( + + + + + + {study.title} + {study.description} + clickOnCowProtocol(`click-case-study-${study.title}`)} + > + Read more + + + + ))} + + + + {ALL_LOGOS.map((logo) => ( + clickOnCowProtocol(`click-logo-${logo.alt}`)} + > + + + + + ))} + + + + + + + + + + + Build with CoW Protocol + + + + {COW_PROTOCOL_SECTIONS.map((topic) => ( + + + {topic.title} + + {topic.description} + + clickOnCowProtocol(topic.linkEvent)} + utmContent={topic.linkUtmContent} + external={topic.linkHref.startsWith('http')} + > + {topic.linkText} + + + + + + + ))} + + + + + + + + + + + Want to build a solver? + + Solvers are the backbone of CoW Protocol. In a nutshell, solvers are optimization algorithms that compete + to find CoW Protocol users the best possible settlements for their trade intents. +
+
+ Advanced solver teams can earn hundreds of thousands of dollars per year by winning batch auctions + frequently. +
+
+ Learn more about building a solver by reading the CoW Protocol docs. +
+ + clickOnCowProtocol(`click-solvers-read-docs`)} + > + Read the docs + +
+
+
+ + + + + + + + FAQs + + + + + +
+ ) +} diff --git a/apps/cow-fi/app/(main)/cow-swap/layout.tsx b/apps/cow-fi/app/(main)/cow-swap/layout.tsx new file mode 100644 index 0000000000..eea2157d58 --- /dev/null +++ b/apps/cow-fi/app/(main)/cow-swap/layout.tsx @@ -0,0 +1,16 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' +import { CONFIG } from '@/const/meta' + +export const metadata: Metadata = { + ...getPageMetadata({ + absoluteTitle: "CoW Swap - Don't worry, trade happy", + description: + 'CoW Swap protects traders from the dangers of DeFi, so you can do what you want without needing to worry', + image: CONFIG.ogImageCOWSWAPP, + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/cow-swap/page.tsx b/apps/cow-fi/app/(main)/cow-swap/page.tsx new file mode 100644 index 0000000000..2400be8606 --- /dev/null +++ b/apps/cow-fi/app/(main)/cow-swap/page.tsx @@ -0,0 +1,405 @@ +'use client' + +import { useEffect, useRef } from 'react' + +import { Color, ProductLogo, ProductVariant } from '@cowprotocol/ui' + +import IMG_ICON_UNICORN from '@cowprotocol/assets/images/icon-unicorn.svg' +import IMG_ICON_FLOWER_COW from '@cowprotocol/assets/images/icon-flower-cow.svg' +import IMG_COWSWAP_HERO from '@cowprotocol/assets/images/image-cowswap-hero.svg' +import ICON_BULB from '@cowprotocol/assets/images/icon-bulb-cow.svg' +import FAQ from '@/components/FAQ' +import { Link, LinkType } from '@/components/Link' + +import { + ContainerCard, + ContainerCardSection, + HeroContainer, + HeroContent, + HeroDescription, + HeroImage, + HeroSubtitle, + HeroTitle, + MetricsCard, + MetricsItem, + PageWrapper, + SectionTitleDescription, + SectionTitleIcon, + SectionTitleText, + SectionTitleWrapper, + TopicCard, + TopicCardInner, + TopicDescription, + TopicImage, + TopicList, + TopicTitle, +} from '@/styles/styled' + +import LazySVG from '@/components/LazySVG' +import IMG_ICON_FAQ from '@cowprotocol/assets/images/icon-faq.svg' +import { ADVANCED_ORDER_TYPES, BETTER_UX, COW_IS_DIFFERENT, FAQ_DATA, TWEETS } from '@/data/cow-swap/const' +import LazyLoadTweet from '@/components/LazyLoadTweet' +import { clickOnCowSwap } from '../../../modules/analytics' + +export default function Page() { + const tweetSectionRef = useRef(null) + + useEffect(() => { + const observer = new IntersectionObserver( + (entries) => { + if (entries[0].isIntersecting) { + const script = document.createElement('script') + script.src = 'https://platform.twitter.com/widgets.js' + script.async = true + document.head.appendChild(script) + observer.disconnect() + } + }, + { rootMargin: '100px' }, + ) + + if (tweetSectionRef.current) { + observer.observe(tweetSectionRef.current) + } + + return () => { + observer.disconnect() + } + }, []) + + return ( + + + + CoW Swap + + Don't worry, +
trade happy +
+ + CoW Swap protects traders from the dangers of DeFi, so you can do what you want without needing to worry + + clickOnCowSwap('click-launch-app')} + > + Launch app + +
+ + + +
+ + + +

#1

+

retention rate of all major DEXs

+
+ +

$44B+

+

total volume traded

+
+ +

$238M+

+

surplus found for users

+
+ + clickOnCowSwap('click-metrics-link')} + > + View all metrics on DUNE ↗ + +
+ + + + + + + + + + + CoW Swap is different + + Unlike other exchanges, CoW Swap is built around frequent batch auctions, which are designed to find the + best liquidity at any point in time and protect you from MEV + + + + + {COW_IS_DIFFERENT.map((topic, index) => ( + + + + {topic.description} + + + + + + + ))} + + + + + + + + + + + CoW Swap is the first user interface built on top of CoW Protocol + + A powerful, open-source, and permissionless DEX aggregation protocol that anyone can integrate for a + variety of DeFi purposes + + clickOnCowSwap('click-learn-about-cow-protocol')} + > + Learn about CoW Protocol + + + + + + + + + + + + S-moooo-th trading + + CoW Swap features the smoothest trading experiences in DeFi, allowing you to worry less and do more. + + + + + Advanced order types + + + {ADVANCED_ORDER_TYPES.map((topic, index) => ( + + + {topic.title} + {topic.description} + + + + + + ))} + + + + + Better UX, thanks to intents + + + + {BETTER_UX.map((topic, index) => ( + + + {topic.title} + {topic.description} + + + + + + ))} + + + + + + + + + + + The DEX of choice for crypto whales and pros + + + + + + + $2,500 + + + Average trade size (more than 2x Uniswap's) + + + + + + + + 39% + + + Market share among smart contract wallets + + + + + + + + 42% + + + Monthly user retention rate – the highest in DeFi + + + + + + + + #1 + + + Intents-based trading platform + + + + + + + + + + + Don't take our word for it + + + + {TWEETS.map((tweet, index) => ( + + + + + + ))} + + + + + + + + + + + FAQs + + + + + + + + + + + + + Don't worry, trade happy + + Trade seamlessly, with the most user-protective DEX in DeFi + + clickOnCowSwap('click-launch-app')} + > + Launch app + + + + +
+ ) +} diff --git a/apps/cow-fi/app/(main)/daos/layout.tsx b/apps/cow-fi/app/(main)/daos/layout.tsx new file mode 100644 index 0000000000..b17d559cf5 --- /dev/null +++ b/apps/cow-fi/app/(main)/daos/layout.tsx @@ -0,0 +1,14 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' +import { CONFIG } from '@/const/meta' + +export const metadata: Metadata = { + ...getPageMetadata({ + absoluteTitle: 'DAOs - Savvy DAOs Choose CoW Swap', + description: 'The smartest DAOs trust CoW Swap with their most-important trades', + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/daos/page.tsx b/apps/cow-fi/app/(main)/daos/page.tsx new file mode 100644 index 0000000000..530d3bb15b --- /dev/null +++ b/apps/cow-fi/app/(main)/daos/page.tsx @@ -0,0 +1,7 @@ +'use server' + +import { DaosPageComponent } from '@/components/DaosPageComponent' + +export default async function Page() { + return +} diff --git a/apps/cow-fi/app/(main)/layout.tsx b/apps/cow-fi/app/(main)/layout.tsx new file mode 100644 index 0000000000..89f2602943 --- /dev/null +++ b/apps/cow-fi/app/(main)/layout.tsx @@ -0,0 +1,5 @@ +import { Layout } from '@/components/Layout' + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return {children} +} diff --git a/apps/cow-fi/app/(main)/legal/cowswap-cookie-policy/layout.tsx b/apps/cow-fi/app/(main)/legal/cowswap-cookie-policy/layout.tsx new file mode 100644 index 0000000000..d3ce9ec05f --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/cowswap-cookie-policy/layout.tsx @@ -0,0 +1,11 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: { + absolute: 'CoW Swap - Cookie policy', + }, +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/legal/cowswap-cookie-policy/page.tsx b/apps/cow-fi/app/(main)/legal/cowswap-cookie-policy/page.tsx new file mode 100644 index 0000000000..4395fb47e9 --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/cowswap-cookie-policy/page.tsx @@ -0,0 +1,413 @@ +'use client' + +import { Color } from '@cowprotocol/ui' + +import styled from 'styled-components/macro' +import { Link } from '@/components/Link' + +import { + ArticleContent, + ArticleMainTitle, + BodyContent, + Breadcrumbs, + ColorTableContainer, + ContainerCard, +} from '@/styles/styled' +import { clickOnLegal } from '../../../../modules/analytics' + +const Wrapper = styled.div` + display: flex; + flex-flow: column wrap; + justify-content: flex-start; + align-items: center; + max-width: 1000px; + width: 100%; + margin: 24px auto 0; + gap: 24px; +` + +export default function Page() { + const title = 'CoW Swap Cookie policy' + + return ( + + + + + clickOnLegal('click-legal-breadcrumbs')}> + Home + + clickOnLegal('click-legal-breadcrumbs')}> + Legal + + {title} + + + + {title} + + + +

+ Last updated: November 2022 +

+

+ As further described in the Privacy Policy, certain statistical information is available to us via our + internet service provider as well as through the use of special tracking technologies. Such information + tells us about the pages you are clicking on or the hardware you are using, but not your name, age, + address or anything we can use to identify you personally. +

+

+ This Cookie Policy sets out some further detail on how and why we use these technologies on our website or + websites we may host on behalf of clients. The terms "Nomev", "we", "us", + and "our" include Nomev Labs, Lda and affiliates. The terms “you” and “your” include our + clients, business partners and users of this website. By using our website, you consent to storage and + access to cookies and other technologies on your device, in accordance with this Cookie Policy. +

+

1. What are cookies?

+

+ Cookies are a feature of web browser software that allows web servers to recognize the computer or device + used to access a website. A cookie is a small text file that a website saves on your computer or mobile + device when you visit the site. It enables the website to remember your actions and preferences (such as + login, language, font size and other display preferences) over a period of time, so you don't have to + keep re-entering them whenever you come back to the site or browse from one page to another. +

+

2. What are the different types of cookies?

+

+ A cookie can be classified by its lifespan and the domain to which it belongs. By lifespan, a cookie is + either a: +

+
    +
  • session cookie which is erased when the user closes the browser; or
  • +
  • + persistent cookie which is saved to the hard drive and remains on the user's computer/device for a + pre-defined period of time. +
  • +
+

As for the domain to which it belongs, cookies are either:

+
    +
  • + first-party cookies which are set by the web server of the visited page and share the same domain (i.e. + set by us); or +
  • +
  • third-party cookies stored by a different domain to the visited page's domain.
  • +
+

3. What cookies do we use and why?

+

We list all the cookies we use on this website in the APPENDIX below.

+

+ Cookies are also sometimes classified by reference to their purpose. We use the following cookies for the + following purposes: +

+
    +
  • + Analytical/performance cookies: They allow us to recognize and count the number of visitors and to see + how visitors move around our website when they are using it, as well as dates and times they visit. This + helps us to improve the way our website works, for example, by ensuring that users are finding what they + are looking for easily. +
  • +
  • + Targeting cookies: These cookies record your visit to our website, the pages you have visited and the + links you have followed, as well as time spent on our website, and the websites visited just before and + just after our website. We will use this information to make our website and the advertising displayed + on it more relevant to your interests. We may also share this information with third parties for this + purpose. +
  • +
+

+ In general, we use cookies and other technologies (such as web server logs) on our website to enhance your + experience and to collect information about how our website is used. This information is put together + (‘aggregated’) and provides general and not individually specific information. None of this information is + therefore associated with you as an individual and the cookie-related information is not used to identify + you personally. It is therefore anonymized and ‘de-identified’. The pattern data is fully under our + control and these cookies are not used for any purpose other than those described here. +

+

+ We will retain and evaluate information on your recent visits to our website and how you move around + different sections of our website for analytics purposes to understand how people use our website so that + we can make it more intuitive. The information also helps us to understand which parts of this website are + most popular and generally to assess user behaviour and characteristics to measure interest in and use of + the various areas of our website. This then allows us to improve our website and the way we market our + business. +

+

+ This information may also be used to help us to improve, administer and diagnose problems with our server + and website. The information also helps us monitor traffic on our website so that we can manage our + website's capacity and efficiency. +

+

4. Other Technologies

+

+ We may allow others to provide analytics services and serve advertisements on our behalf. In addition to + the uses of cookies described above, these entities may use other methods, such as the technologies + described below, to collect information about your use of our website and other websites and online + services. +

+

+ Pixels tags. Pixel tags (which are also called clear GIFs, web beacons, or pixels), are small pieces of + code that can be embedded on websites and emails. Pixels tags may be used to learn how you interact with + our website pages and emails, and this information helps us, and our partners provide you with a more + tailored experience. +

+

+ Device Identifiers. A device identifier is a unique label that can be used to identify a mobile device. + Device identifiers may be used to track, analyse and improve the performance of the website and ads + delivered. +

+

+ 5. What data is collected by cookies and other technologies on our website? +

+

This information may include:

+
    +
  • + the IP and logical address of the server you are using (but the last digits are anonymized so we cannot + identify you); +
  • +
  • the top level domain name from which you access the internet (for example .ie, .com, etc);
  • +
  • the type of browser you are using;
  • +
  • the date and time you access our website;
  • +
  • the internet address linking to our website;
  • +
+

This website also uses cookies to:

+
    +
  • remember you and your actions while navigating between pages;
  • +
  • remember if you have agreed (or not) to our use of cookies on our website;
  • +
  • ensure the security of the website;
  • +
  • monitor and improve the performance of servers hosting the site;
  • +
  • distinguish users and sessions;
  • +
  • Improving the speed of the site when you access content repeatedly;
  • +
  • determine new sessions and visits;
  • +
  • show the traffic source or campaign that explains how you may have reached our website; and
  • +
  • allow us to store any customization preferences where our website allows this
  • +
+

+ We may also use other services, such as{' '} + + Google Analytics + {' '} + (described below) or other third-party cookies, to assist with analysing performance on our website. As + part of providing these services, these service providers may use cookies and the technologies described + below to collect and store information about your device, such as time of visit, pages visited, time spent + on each page of our website, links clicked and conversion information, IP address, browser, mobile network + information, and type of operating system used. +

+

6. Google Analytics Cookies

+

+ This website uses{' '} + + Google Analytics + + , a web analytics service provided by Google, Inc. ("Google"). +

+

+ We use Google Analytics to track your preferences and also to identify popular sections of our website. + Use of Google Analytics in this way, enables us to adapt the content of our website more specifically to + your needs and thereby improve what we can offer to you. +

+

+ Google will use this information for the purpose of evaluating your use of our website, compiling reports + on website activity for website operators and providing other services relating to website activity and + internet usage. Google may also transfer this information to third parties where required to do so by law, + or where such third parties process the information on Google's behalf. Google will not associate your + IP address with any other data held by Google. +

+

In particular Google Analytics tells us:

+
    +
  • your IP address (last 3 digits are masked);
  • +
  • the number of pages visited;
  • +
  • the time and duration of the visit;
  • +
  • your location;
  • +
  • the website you came from (if any);
  • +
  • the type of hardware you use (i.e. whether you are browsing from a desktop or a mobile device);
  • +
  • the software used (type of browser); and
  • +
  • your general interaction with our website.
  • +
+

+ As stated above, cookie-related information is not used to identify you personally, and what is compiled + is only aggregate data that tells us, for example, what countries we are most popular in, but not that you + live in a particular country or your precise location when you visited our website (this is because we + have only half the information- we know the country the person is browsing from, but not the name of + person who is browsing). In such an example Google will analyse the number of users for us, but the + relevant cookies do not reveal their identities. +

+

+ By using this website, you consent to the processing of data about you by Google in the manner and for the + purposes set out above. Google Analytics, its purpose and function is further explained on the{' '} + + Google Analytics website + + . +

+

+ For more information about Google Analytics cookies, please see Google's help pages and privacy + policy:{' '} + + Google's Privacy Policy + {' '} + and{' '} + + Google Analytics Help pages + + . For further information about the use of these cookies by Google{' '} + + click here + + . +

+

+ 7. What if you don’t agree with us monitoring your use of our website (even if we don’t collect your + personal data)? +

+

+ Enabling these cookies is not strictly necessary for our website to work but it will provide you with a + better browsing experience. You can delete or block the cookies we set, but if you do that, some features + of this website may not work as intended. +

+

+ Most browsers are initially set to accept cookies. If you prefer, you can set your browser to refuse + cookies and control and/or delete cookies as you wish – for details, see{' '} + + aboutcookies.org + + . You can delete all cookies that are already on your device and you can set most browsers to prevent them + from being placed. You should be aware that if you do this, you may have to manually adjust some + preferences every time you visit an Internet site and some services and functionalities may not work if + you do not accept the cookies they send. +

+

+ Advertisers and business partners that you access on or through our website may also send you cookies. We + do not control any cookies outside of our website. +

+

+ If you have any further questions regarding disabling cookies you should consult with your preferred + browser’s provider or manufacturer. +

+

+ In order to implement your objection it may be necessary to install an opt-out cookie on your browser. + This cookie will only indicate that you have opted out. It is important to note, that for technical + reasons, the opt-out cookie will only affect the browser from which you actively object from. If you + delete the cookies in your browser or use a different end device or browser, you will need to opt out + again. +

+

+ To opt out of being tracked by Google Analytics across all websites, Google has developed the Google + Analytics opt-out browser add-on. If you would like to opt out of Google Analytics, you have the option of + downloading and installing this browser add-on which can be found under the link:{' '} + + https://tools.google.com/dlpage/gaoptout + + . +

+ +

+ We may modify this Cookie Policy from time to time. If we make changes to this Cookie Policy, we will + provide notice of such changes, such as by sending an email notification, providing notice through our + website or updating the ‘Last Updated’ date at the beginning of this Cookie Policy. The amended Cookie + Policy will be effective immediately after the date it is posted. By continuing to access or use our + website after the effective date, you confirm your acceptance of the revised Cookie Policy and all of the + terms incorporated therein by reference. We encourage you to review our Privacy Policy and our Cookie + Policy whenever you access or use our website to stay informed about our information practices and the + choices available to you. +

+

+ If you do not accept changes which are made to this Cookie Policy, or take any measures described above to + opt-out by removing or rejecting cookies, you may continue to use this website but accept that it may not + display and/or function as intended by us. Your exercise of any rights to opt-out may also impact how our + information and content is displayed and/or accessible to you on this website and on other websites. +

+

APPENDIX

+

Table: Overview of cookies placed and the consequences if the cookies are not placed

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name of cookiePurpose(s) of cookieStorage period of cookieConsequences if cookie is not accepted
__viewed_cookie_policy + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the use of cookies + from the user. No personal data will be saved. + 1 year from set/updateUser activity won't be tracked
__cookielawinfo_checkbox_performance + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the user for + category “performance”. + 1 year from set/updateUser activity won't be tracked
__cookielawinfo_checkbox_other + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the user for + category “other”. + 1 year from set/updateUser activity won't be tracked
__cookielawinfo_checkbox_necessary + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the user for + category “necessary”. + 1 year from set/updateUser activity won't be tracked
__cookielawinfo_checkbox_functional + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the user for + category “functional”. + 1 year from set/updateUser activity won't be tracked
__cookielawinfo_checkbox_analytics + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the user for + category “analytics”. + 1 year from set/updateUser activity won't be tracked
__cookielawinfo_checkbox_advertisement + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the user for + category “advertisement”. + 1 year from set/updateUser activity won't be tracked
CookieLawInfoConsent + Cookie set by GDPR cookie consent plug-in. Cookie used to save the agreement of the user for + category “LawInfoConsent”. + 1 year from set/updateUser activity won't be tracked
+
+
+
+
+
+ ) +} diff --git a/apps/cow-fi/app/(main)/legal/cowswap-privacy-policy/layout.tsx b/apps/cow-fi/app/(main)/legal/cowswap-privacy-policy/layout.tsx new file mode 100644 index 0000000000..095aad036f --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/cowswap-privacy-policy/layout.tsx @@ -0,0 +1,11 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: { + absolute: 'CoW Swap - Privacy policy', + }, +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/legal/cowswap-privacy-policy/page.tsx b/apps/cow-fi/app/(main)/legal/cowswap-privacy-policy/page.tsx new file mode 100644 index 0000000000..e0861cebe1 --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/cowswap-privacy-policy/page.tsx @@ -0,0 +1,684 @@ +'use client' + +import { Color } from '@cowprotocol/ui' + +import styled from 'styled-components/macro' +import { Link } from '@/components/Link' + +import { ArticleContent, ArticleMainTitle, BodyContent, Breadcrumbs, ContainerCard } from '@/styles/styled' +import { clickOnLegal } from '../../../../modules/analytics' + +const Wrapper = styled.div` + display: flex; + flex-flow: column wrap; + justify-content: flex-start; + align-items: center; + max-width: 1000px; + width: 100%; + margin: 24px auto 0; + gap: 24px; +` + +export default function Page() { + const title = 'CoW Swap Privacy policy' + + return ( + + + + + clickOnLegal('click-legal-breadcrumbs')}> + Home + + clickOnLegal('click-legal-breadcrumbs')}> + Legal + + {title} + + + + {title} + + + +

+ Last updated: November 2022 +

+

+ This Policy sets out what Personal Data we collect, how we process it and how long we retain it. This + Policy applies to all of our processing activities where we act as a data controller or where we act as + data controller on behalf of clients. In this policy, “we”, “us” and “our” refers to Nomev Labs, Lda and + affiliates. For more information about us, see the “Our Details” section at the end of this policy. +

+

+ In this Policy, “personal data” means any information relating to you as an identified or identifiable + natural person (“Data Subject”); an identifiable natural person is one who can be identified, directly or + indirectly, in particular by reference to an identifier such as a name, an online identifier or to one or + more factors specific to your physical, physiological, genetic, mental, economic, cultural or social + identity. +

+

+ In this Policy, “processing” means any operation or set of operations which is performed on personal data + (as defined in this Privacy Policy) or on sets of personal data, whether or not by automated means, such + as collection, recording, organisation, structuring, storage, adaptation or alteration, retrieval, + consultation, use, disclosure by transmission, dissemination or otherwise making available, alignment or + combination, restriction, erasure or destruction. +

+

1. Your information and the Blockchain

+

+ Blockchain technology, also known as distributed ledger technology (or simply ‘DLT’), is at the core of + the business of our clients. Blockchains are decentralised and made up of digitally recorded data in a + chain of packages called ‘blocks’. The manner in which these blocks are linked is chronological, meaning + that the data is very difficult to alter once recorded. Since the ledger may be distributed all over the + world (across several ‘nodes’ which usually replicate the ledger), this means there is no single person + making decisions or otherwise administering the system (such as an operator of a cloud computing system), + and that there is no centralised place where it is located either. +

+

+ Accordingly, by design, a blockchains records cannot be changed or deleted and is said to be ‘immutable’. + This may affect your ability to exercise your rights such as your right to erasure (‘right to be + forgotten’), or your rights to object or restrict processing of your personal data. Data on the blockchain + cannot be erased and cannot be changed. Although smart contracts may be used to revoke certain access + rights, and some content may be made invisible to others, it is not deleted. +

+

+ In certain circumstances, it will be necessary to write certain personal data, such as your wallet + address, onto the blockchain; this is done through a smart contract and requires you to execute such + transactions using your wallet’s private key. +

+

+ In most cases ultimate decisions to (i) transact on the blockchain using your wallet address, as well as + (ii) share the public key relating to your wallet address with anyone (including us) rests with you. +

+

+ IF YOU WANT TO ENSURE YOUR PRIVACY RIGHTS ARE NOT AFFECTED IN ANY WAY, YOU SHOULD NOT TRANSACT ON + BLOCKCHAINS AS CERTAIN RIGHTS MAY NOT BE FULLY AVAILABLE OR EXERCISABLE BY YOU OR US DUE TO THE + TECHNOLOGICAL INFRASTRUCTURE OF THE BLOCKCHAIN. IN PARTICULAR THE BLOCKCHAIN IS AVAILABLE TO THE PUBLIC + AND ANY PERSONAL DATA SHARED ON THE BLOCKCHAIN WILL BECOME PUBLICLY AVAILABLE +

+

2. How We Use Personal Data

+

+ When visiting our website or websites we host on behalf of clients +

+

+ We may collect and process Personal Data about your use of our website or websites we host on behalf of + clients. This data may include: +

+
    +
  • The browser types and versions used;
  • +
  • The operating system used by the accessing system;
  • +
  • The website from which an accessing system reaches the website (so-called referrers);
  • +
  • Behaviour: subpage, duration, and revisit;
  • +
  • The date and time of access to the website, The Internet protocol address (“IP address”);
  • +
  • The Internet service provider of the accessing system;
  • +
  • Connected wallet type and wallet address;
  • +
  • Session by device; and
  • +
  • + Any other similar data and information that may be used in the event of attacks on our information + technology systems. +
  • +
+

+ This data may be processed in order to deliver the content of our website or websites we host on behalf of + clients correctly, to optimise the content of our website or websites we host on behalf of clients to + ensure the long-term viability of our information technology systems and website technology, and to + provide law enforcement authorities with the information necessary for criminal prosecution in case of a + cyber-attack. The legal basis for this processing is the legitimate business interests, namely monitoring + and improving our website or websites we host on behalf of clients and the proper protection against + risks. +

+

+ + When using swap.cow.fi or other interfaces of a decentralised exchange protocol hosted by us on behalf + of clients + +

+

We may collect and process personal data. The data will be stored in different instances.

+
    +
  • + In our Amazon Webserver we will store the following data with respect to your intent to trade: +
      +
    • Your wallet address;
    • +
    • Application used to connect to the site;
    • +
    • Blockchain used;
    • +
    • Submission time and expiration time.
    • +
    • Type of your order (sell order of Fill & Kill)
    • +
    • Tokens part of the swap and their amounts
    • +
    • Slippage tolerance, set transaction deadline and recipient’s wallet address;
    • +
    • Fee and applicable fee discount.
    • +
    • + AppData including: +
        +
      • AppCode;
      • +
      • Environment;
      • +
      • Metadata: quote, slippage and referrer information.
      • +
      +
    • +
    +
  • +
+

+ The legal basis for this processing is that it is necessary to transact according to your indicated + preferences and to show the order details to you and the explorer. +

+
    +
  • + On the Blockchain the following data will be stored if your intent to trade is successfully included in + a transaction: +
      +
    • Your wallet address;
    • +
    • Recipient’s wallet address;
    • +
    • Both sides of the swapped tokens;
    • +
    • Prices;
    • +
    • + AppData hash (hash of the IPFS content pointing to the appData submitted with the intent to trade). +
    • +
    +
  • +
+

+ The legal basis for this processing is that it is necessary to transact successfully according to your + wishes. The data will be stored on the Blockchain. Given the technological design of the blockchain, as + explained above, this data will become public and it will not likely be possible to delete or change the + data at any given time. +

+
    +
  • + Log Data +
      +
    • Your wallet address;
    • +
    • The Internet protocol address (“IP address”); and
    • +
    • Transaction id/ Hash.
    • +
    +
  • +
+

+ The legal basis for this processing is that it is necessary to transact according to your indicated + preferences. +

+

+ Participating in User Experience Research +

+

+ When you participate in our user experience research - or user experience research we conduct on behalf of + our clients - we may collect and process some personal data. This data may include: +

+
    +
  • Your name or pseudonym;
  • +
  • Your wallet address(es);
  • +
  • Your email address, Telegram handle or Twitter handle;
  • +
  • Your occupation;
  • +
  • Range of funds you transact with regularly;
  • +
  • Usage of tokens, blockchains, exchanges.
  • +
+

+ In addition, we may take a recording of you while testing the website or website we host on behalf of our + clients for internal use. The basis for this collection and processing is our legitimate business interest + or that of our clients in monitoring and improving our services. You are never required to share + information you are not comfortable sharing. +

+

+ The legal basis for this processing is your consent as provided before participating in user experience + research. +

+

+ Participating in our Bug Bounties and Challenges or those of our clients +

+

+ When participating in bug bounties or challenges we may collect and process personal data. This data may + include: +

+
    +
  • Your email address;
  • +
  • Your name;
  • +
  • + The data is used and processed in order to credit the participant the right payment for the reported + bug. +
  • +
+

+ When visiting our Twitter, Medium or other social media or those of our clients +

+

+ We may collect and process Personal Data about your use of our Twitter, Medium or other social media. This + data may include: +

+
    +
  • Clicks on a shortened URL;
  • +
  • A history of referral URLs for clicks of a shortened URL; and
  • +
  • A history of IP addresses used to access a shortened URL.
  • +
  • + This data is collected and processed for the purposes to track the success of the marketing campaigns, + blog posts, and other marketing material; and for user demographics in order to identify target markets. + This data is collected and processed for the purpose of improving the content of our shared links + pursuant to our legitimate interests (or those of our clients). When visiting the mentioned services + different data protection regulations apply, please familiarise yourself with their Privacy Policies. +
  • +
+

+ Other uses of your Personal Data +

+

+ We may process any of your Personal Data where it is necessary to establish, exercise, or defend legal + claims. The legal basis for this process is our legitimate interests, namely the protection and assertion + of our legal rights, your legal rights and the legal rights of others, including our clients. +

+

+ Further, we may process your Personal data where such processing is necessary in order for us to comply + with a legal obligation to which we are subject. The legal basis for this processing is our legitimate + interests, namely the protection and assertion of our legal rights. +

+

3. Use of Third Party Applications

+

+ Amazon Webserver +

+

+ We may use the Amazon Web Server (AWS) to store log and database data. For further information and the + applicable data protection provisions of AWS please visit{' '} + + https://aws.amazon.com/privacy/?nc1=f_pr + +

+

+ Blockchain +

+

+ Refer to the Section “Your information and the Blockchain” above. Intents to trade submitted - if + successful - will be stored on the blockchain and will be displayed permanently and public, this is part + of the nature of the blockchain. If you are new to this field, we highly recommend informing yourself + about blockchain technology before using the website. +

+

+ Calendly +

+

+ We may use Calendly for scheduling. For further information and the applicable data protection provisions + please visit{' '} + + https://calendly.com/privacy + +

+

+ Discord +

+

+ We may use Discord for community management for our clients. For further information and the applicable + data protection provisions of Discord please visit{' '} + + https://discord.com/privacy + +

+

+ Discourse +

+

+ We may use Discourse for discussion. For further information and the applicable data protection provisions + of Discourse please visit{' '} + + https://www.discourse.org/privacy + +

+

+ Dovetail +

+

+ We may use Dovetail for storing recordings and interviews as a user testing tool. For further information + and the applicable data protection provisions please visit{' '} + + https://dovetailapp.com/help/privacy-policy/ + +

+

+ Google Workspace +

+

+ We may use Google Workspace (Drive, Sheets etc.) for storing user interviews and other personal data. For + further{' '} + + https://policies.google.com/privacy + +

+

+ Infura +

+

+ We may use Infura to easily take blockchain applications from testing to scaled deployment. For further + information and the applicable data protection provisions of Infura{' '} + + https://consensys.net/privacy-policy/ + +

+

+ Maze +

+

+ We may use Maze as a user testing tool. For further information and the applicable data protection + provisions of Maze please visit{' '} + + https://maze.co/privacy-policy/ + +

+

+ Miro +

+

+ We may use Miro for whiteboard and other collaborative visualisation. For further information and the + applicable data protection provisions please visit{' '} + + https://miro.com/legal/privacy-policy/ + +

+

+ Support Channels +

+

+ In order to provide user support on our behalf or on behalf of our clients, we will use different channels + like Discord, Discourse, Github or Telegram to facilitate the resolution of any questions and concerns + should these arise. By accepting this Privacy Policy, you are deemed to consent to providing the following + Personal Data to persons looking to resolve any dispute: +

+
    +
  • Name and surname;
  • +
  • Detailed enquiry description;
  • +
  • The date and time that the issue arose;
  • +
  • The outcome sought.
  • +
+

+ Transmitting Social Media Links +

+

+ When linking social media links, those services might also collect Personal Data. Please refer to their + privacy policies for more information. +

+

+ Typeform +

+

+ We use typeform for the registration and submission process. Typeform allows the creation of customised + forms for several purposes. Further information and the applicable data protection provisions of typeform + please visit{' '} + + https://admin.typeform.com/to/dwk6gt + + . Typeform’s purpose and function is further explained under the following link{' '} + + https://www.typeform.com/product/ + +

+

+ Vercel +

+

+ We may use Vercel for optimising website development. For further information and the applicable data + protection provisions of Vercel please visit{' '} + + https://vercel.com/legal/privacy-policy + +

+

+ Zoom +

+

+ We may use Zoom for active user research interviews and taking recordings. These records may be stored on + Zoom Cloud. For further information and the applicable data protection provisions please visit{' '} + + https://explore.zoom.us/en/privacy/ + +

+

4. Sharing Your Personal Data

+

+ We may pass your information to our clients, Business Partners, administration centres, third party + service providers, agents, subcontractors and other associated organisations for the purposes of + completing tasks and providing our services to you. +

+

+ In addition, when we use any other third-party service providers, we will disclose only the personal + information that is necessary to deliver the service required and we will ensure that they keep your + information secure and not use it for their own direct marketing purposes. +

+

+ In addition, we may transfer your personal information to a third party as part of a sale of some, or all, + of our business and assets or as part of any business restructuring or reorganisation, or if we are under + a duty to disclose or share your personal data in order to comply with any legal obligation. However, we + will take steps to ensure that your privacy rights continue to be protected. +

+

5. Data Security

+

+ We have put in place appropriate security measures to prevent your personal data from being accidentally + lost, used or accessed in an unauthorised way, altered or disclosed. In addition, we limit access to your + personal data to those employees (if applicable), agents, contractors and other third parties who have a + business need to know. They will only process your personal data on our instructions and they are subject + to a duty of confidentiality. Please note that intents to trade are publicly accessible via the + API/Explorer, SDK and may be stored on the Blockchain as per applicable paragraphs above. +

+

+ We have put in place procedures to deal with any suspected personal data breach and will notify you and + any applicable regulator of a breach where we are legally required to do so. +

+

6. Your Rights as a Data Subject

+

+ You have certain rights under applicable legislation, and in particular under Regulation EU 2016/679 + (General Data Protection Regulation or ‘GDPR’). We explain these below. You can find out more about the + GDPR and your rights by accessing the European Commission’s website. +

+
    +
  • +

    Right Information and access

    +

    + You have a right to be informed about the processing of your personal data (and if you did not give it + to us, information as to the source) and this Privacy Policy intends to provide the information. Of + course, if you have any further questions you can contact us on the below details. +

    +
  • +
  • +

    Right to rectification

    +

    + You have the right to have any inaccurate personal information about you rectified and to have any + incomplete personal information about you completed. You may also request that we restrict the + processing of that information. The accuracy of your information is important to us. If you do not + want us to use your Personal Information in the manner set out in this Privacy Policy, or need to + advise us of any changes to your personal information, or would like any more information about the + way in which we collect and use your Personal Information, please contact us at the above details. +

    +
  • +
  • +

    Right to erasure (right to be ‘forgotten’)

    +

    + You have the general right to request the erasure of your personal information in the following + circumstances: +

    +
      +
    • The personal information is no longer necessary for the purpose for which it was collected;
    • +
    • + You withdraw your consent to consent-based processing and no other legal justification for + processing applies; +
    • +
    • You object to processing for direct marketing purposes;
    • +
    • We unlawfully processed your personal information; and
    • +
    • Erasure is required to comply with a legal obligation that applies to us.
    • +
    +

    + However, when interacting with the blockchain we may not be able to ensure that your personal data is + deleted. This is because the blockchain is a public decentralised network and blockchain technology + does not generally allow for data to be deleted and your right to erasure may not be able to be fully + enforced. In these circumstances we will only be able to ensure that all personal data that is held by + us is permanently deleted. +

    +

    + We will proceed to comply with an erasure request without delay unless continued retention is + necessary for: +

    +
      +
    • Exercising the right of freedom of expression and information;
    • +
    • Complying with a legal obligation under EU or other applicable law;
    • +
    • The performance of a task carried out in the public interest;
    • +
    • + Archiving purposes in the public interest, scientific or historical research purposes, or + statistical purposes, under certain circumstances; and/or +
    • +
    • The establishment, exercise, or defence of legal claims.
    • +
    +

    You can exercise this right at any time by contacting us on the below details.

    +
  • +
  • +

    + Right to restrict processing and right to object to processing +

    +

    You have a right to restrict processing of your personal information, such as where:

    +
      +
    • You contest the accuracy of the personal information;
    • +
    • + Where processing is unlawful you may request, instead of requesting erasure, that we restrict the + use of the unlawfully processed personal information; +
    • +
    • + We no longer need to process your personal information but need to retain your information for the + establishment, exercise, or defence of legal claims. +
    • +
    +

    + You also have the right to object to processing of your personal information under certain + circumstances, such as where the processing is based on your consent and you withdraw that consent. + This may impact the services we can provide and we will explain this to you if you decide to exercise + this right. +

    +
  • +
  • +

    Right to data portability

    +

    + Where the legal basis for our processing is your consent or the processing is necessary for the + performance of a contract to which you are party or in order to take steps at your request prior to + entering into a contract, you have a right to receive the personal information you provided to us in a + structured, commonly used and machine-readable format, or ask us to send it to another person. +

    +
  • +
  • +

    + Right to freedom from automated decision-making +

    +

    + We do not use automated decision-making, but where any automated decision-making takes place, you have + the right in this case to express your point of view and to contest the decision, as well as request + that decisions based on automated processing concerning you or significantly affecting you and based + on your personal data are made by natural persons, not only by computers. +

    +
  • +
  • +

    + Right to object to direct marketing (‘opting out’) +

    +

    + You have a choice about whether or not you wish to receive information from us. We will not contact + you for marketing purposes unless: +

    +

    + You have a business relationship with us or one of our clients, and we rely on our legitimate + interests or that of our clients as the lawful basis for processing (as described above) you have + otherwise given your prior consent. +

    +

    + You can change your marketing preferences at any time by contacting us. On each and every marketing + communication, we will always provide the option for you to exercise your right to object to the + processing of your personal data for marketing purposes (known as ‘opting-out’) by clicking on the + ‘unsubscribe’ button on our marketing emails or choosing a similar opt-out option on any forms we use + to collect your data. You may also opt-out at any time by contacting us on the below details. Please + note that any administrative or service-related communications (to offer our services, or notify you + of an update to this Privacy Policy or applicable terms of business, etc.) will solely be directed at + our clients or business partners, and such communications generally do not offer an option to + unsubscribe as they are necessary to provide the services requested. Therefore, please be aware that + your ability to opt-out from receiving marketing and promotional materials does not change our right + to contact you regarding your use of our website or websites we host on behalf of clients or as part + of a contractual relationship we may have with you. +

    +
  • +
  • +

    Right to request access

    +

    + You also have a right to access information we hold about you. We are happy to provide you with + details of your Personal Information that we hold or process. To protect your personal information, we + follow set storage and disclosure procedures, which mean that we will require proof of identity from + you prior to disclosing such information. You can exercise this right at any time by contacting us on + the below details. +

    +
  • +
  • + +

    + Where the legal basis for processing your personal information is your consent, you have the right to + withdraw that consent at any time by contacting us on the below details. +

    +
  • +
  • +

    + Raising a complaint about how we have handled your personal data +

    +

    + If you wish to raise a complaint on how we have handled your personal data, you can contact us as set + out below and we will then investigate the matter. +

    +
  • +
  • +

    + Right to complain with a relevant supervisory authority +

    +

    + If we have not responded to you within a reasonable time or if you feel that your complaint has not + been resolved to your satisfaction, you are entitled to make a complaint to the Data Protection + Commissioner under the Data Protection Act. You may do so in the EU member state of your habitual + residence, your place of work or the place of the alleged infringement. In Portugal, the supervisory + authority is the: +

    +

    + CNPD - Comissão Nacional de Proteção de Dados +
    + Av. D. Carlos I, 134, 1º +
    + 1200-651 Lisboa +
    T (+351) 213 928 400 +
    F (+351) 213 976 832 +
    + geral@cnpd.pt +
    + + https://www.cnpd.pt/ + +

    +

    + You also have the right to lodge a complaint with the supervisory authority in the country of your + habitual residence, place of work, or the place where you allege an infringement of one or more of our + rights has taken place, if that is based in the EEA. +

    +
  • +
+

7. Storing Personal Data

+

+ We retain your information only for as long as is necessary for the purposes for which we process the + information as set out in this policy. However, we may retain your Personal Data for a longer period of + time where such retention is necessary for compliance with a legal obligation to which we are subject, or + in order to protect your vital interests or the vital interests of another natural person. +

+

8. Changes to This Privacy Policy

+

+ We may make changes to this Policy from time to time. Where we do so, we will notify those who have a + business relationship with us or who are subscribed to our emailing lists directly of the changes, and + change the ‘Last updated’ date above. We encourage you to review the Policy whenever you access or use our + website or websites we host on behalf of clients to stay informed about information practices and the + choices available to you. If you do not agree to the revised Policy, you should discontinue your use of + this website. +

+

9. Our Details

+

+ This website is hosted by Nomev Labs, Lda on behalf of a client. We are registered in Portugal under + registration number PT516811924, and our registered office is located at Rua António Maria Cardoso, No 25, + piso 4, 1200-027 Lisboa. +

+

+ If you have any queries concerning your rights under this Privacy Policy, please contact us at{' '} + legal@nomev.io +

+
+
+
+
+ ) +} diff --git a/apps/cow-fi/app/(main)/legal/cowswap-terms/layout.tsx b/apps/cow-fi/app/(main)/legal/cowswap-terms/layout.tsx new file mode 100644 index 0000000000..0215606766 --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/cowswap-terms/layout.tsx @@ -0,0 +1,9 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: { absolute: 'CoW Swap - Terms and Conditions' }, +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/legal/cowswap-terms/page.tsx b/apps/cow-fi/app/(main)/legal/cowswap-terms/page.tsx new file mode 100644 index 0000000000..6c77e90291 --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/cowswap-terms/page.tsx @@ -0,0 +1,687 @@ +'use client' + +import { Color } from '@cowprotocol/ui' + +import styled from 'styled-components/macro' +import { Link } from '@/components/Link' + +import { ArticleContent, ArticleMainTitle, BodyContent, Breadcrumbs, ContainerCard } from '@/styles/styled' +import { clickOnLegal } from '../../../../modules/analytics' + +const Wrapper = styled.div` + display: flex; + flex-flow: column wrap; + justify-content: flex-start; + align-items: center; + max-width: 1000px; + width: 100%; + margin: 24px auto 0; + gap: 24px; +` + +export default function Page() { + const title = 'CoW Swap Terms and Conditions' + + return ( + + + + + clickOnLegal('click-legal-breadcrumbs')}> + Home + + clickOnLegal('click-legal-breadcrumbs')}> + Legal + + {title} + + + + {title} + + + +

+ Last updated: September 2024 +

+

+ These Terms of Use (the "Terms") govern your access to{' '} + + https://cow.fi/ + {' '} + (the "Website") and use of any products offered or provided through the Website (collectively, + the "Products"). The Website and Products are provided to you by CoW DAO ("we", + "our", or "us"). +

+

+ CoW DAO is a collective managed by community members across various Ethereum Virtual Machine (EVM) + compatible blockchains. These blockchains may include, but are not limited to, well-established networks + such as Ethereum and Gnosis Chain and emerging solutions within Ethereum layer 2 solutions. The management + of CoW DAO is in accordance with its participation agreement. For any inquiries or to establish contact + with CoW DAO, please use the forum at{' '} + + https://forum.cow.fi/ + + . +

+

The Products covered by these terms include but are not limited to:

+
    +
  • +

    The Interface; and

    +
  • +
  • +

    The Forum

    +
  • +
+

Important prior warnings

+

Financial risks

+

+ Interacting with the Interface such as submitting orders to exchange compatible tokens involves + significant risks of loss. You could lose all or more of your capital. +

+

+ The tokens’ value is highly volatile causing price fluctuations, as auctions typically run for some time + and trades are not executed instantly. +

+

+ Please carefully consider your investment objectives, risk tolerance, and experience before engaging in + any trading activities. This is not financial advice, and you should always consult with a qualified + financial professional before making any investment decisions. +

+

Beware of scammers

+

+ We will never contact you first, never ask you for a password, private keys, seed phrase, nor ask you to + connect your wallet to a third-party decentralized application. +

+

Technical understanding

+

+ Cryptographic assets are described in technical language requiring a comprehensive understanding of + computer science and mathematics to appreciate the inherent risks. +

+

+ Transactions on public blockchains are publicly accessible +

+

+ Please be aware that all transactions on public blockchains are permanently recorded and publicly + accessible. This means anyone can view the details of your transactions, including the amount, sender, and + receiver addresses. While this transparency offers benefits like security and trust, it also means your + privacy is not guaranteed. If you require anonymity or confidentiality for your transactions, please + consider using a different platform. +

+

+ Transactions on public blockchains are immutable and irreversible +

+

+ Transactions on public blockchains are generally immutable and irreversible. Any transaction thereon is + therefore irrevocable and final as soon as it is settled thereon. In the event that you send your tokens + to sell to any other destination other than the Protocol smart contracts, such tokens may not be returned. + We assume no responsibility and shall have no obligation to you if this occurs, including but not limited + to any responsibility to recover, or assist to recover, any such tokens. +

+

+ Please read these Terms carefully before using the Website or the Products. +

+

Acceptance of these Terms

+

+ By accessing the Website and/or by using our Products, you confirm that you accept these Terms and agree + to comply with them. If you do not agree, you must not use the Products and leave the Website. If you + think that there is an error in these Terms, please contact us at{' '} + + legal@cow.fi + + . +

+

+ You are also responsible for ensuring that all persons who access the Website or the Products through your + internet connection or device are aware of these Terms and that they comply with them. +

+

+ We may terminate or suspend your access to the Website or the Products immediately, without prior notice + or liability, if you breach any clause of the Terms. Upon termination of your access, your right to access + the website or use the Products will immediately cease. +

+

Change of these Terms

+

+ We may amend these Terms at our sole discretion. We regularly do so. Every time you wish to access the + Website or use the Products, please check these Terms to ensure you understand the terms that apply at + that time. +

+

CoW Protocol

+

+ CoW Protocol (the "Protocol") is a decentralized protocol owned and operated by CoW DAO that + allows users to trade certain digital assets. +

+

+ CoW Protocol is a set of smart contracts that applies batch auction mechanisms to allow peer-to-peer + trades on well-established networks such as Ethereum and Gnosis Chain and emerging solutions within + Ethereum layer 2 solutions. CoW DAO is not custodian or counterparty to any transactions executed by you + on the Protocol. We do not support any other service, particularly we do not provide any order matching, + guaranteed prices, or similar exchange or trading platform services. +

+

+ Please consult our{' '} + + documentation + {' '} + for more information on CoW Protocol. +

+

The Interface

+

+ + https://swap.cow.fi + {' '} + is a web-hosted user interface (the "Interface") providing access to CoW Protocol. You may + submit orders into the Interface and exchange compatible tokens using the unique features of the Protocol. +

+

+ Please consult our{' '} + + documentation + {' '} + for more information on our Interface. +

+

+ The features of the Interface can also be accessed through third parties’ websites integrating our widget + (the "Widget"). +

+

+ Please consult our{' '} + + documentation + {' '} + for more information on our Widget. +

+

Restricted use of the Interface

+

+ To use the Interface, you must be legally capable of entering into a contract. Therefore, you confirm that + you are of legal age in your jurisdiction and have the full rights, powers, and authority to enter into + and abide by these Terms on your own behalf and on behalf of any company, legal entity or any other + undertaking for which you may access or use the Interface. +

+

+ + Furthermore, you confirm that you are not (a) subject to economic or trade sanctions imposed by any + government agency or listed on any prohibited or restricted party list or (b) a citizen, resident, or + organisation located in a jurisdiction subject to comprehensive economic sanctions by, without being + limited to the United Nations, the European Union and its Member States, the United States and the + United Kingdom. + +

+

+ Finally, you confirm that your use of the Interface will fully comply with all applicable laws and + regulations, and you will not use the Interface to conduct, promote, or facilitate any illegal activities. +

+

Use of the Interface

+

+ By using the Interface, you understand that you are not buying or selling digital assets from CoW DAO. +

+

+ You are responsible for ensuring that all persons who access or use the Interface through your device or + internet connection are aware of these Terms, and that they comply with them. +

+

+ You may have been recommended to the Interface by a third party. We shall not be liable for any agreement + or terms that may exist between you and the respective third party. +

+

Requirements to Use the Interface

+

+ To use the Interface, you must employ a non-custodial wallet application, enabling interaction with EVM + compatible public blockchains. Your connection with the non-custodial wallet provider is governed by the + applicable service terms of such a third-party wallet provider. We do not hold custody of your + wallet's contents and are unable to recover or transfer such content. By connecting your wallet to our + Interface, you agree to be bound by these Terms and all of the terms incorporated herein by reference. +

+

+ For more details on how to use the Interface please refer to our{' '} + + "FAQ" + + . +

+

Fees

+

Protocol fee

+

+ The user may incur a fee at protocol level, which - if technically possible - is shown to the user on the + Interface when the user places their trade intent. Such a fee is designed in accordance with the specific + features of the protocol. +

+

Widget Integrator’s Fee

+

+ Third-party integrators can embed the Interface on their own website using the Widget may charge an + additional service fee to the user of the Widget on their website. The user acknowledges that such a + service fee is not charged by us but exclusively by the third-party integrator. +

+

+ The user of the Widget understands and agrees that we are not responsible for such a fee and that it is + the sole responsibility of the user of the Widget to carefully review the terms and conditions provided by + the third-party integrator before using Widget. +

+

Interface Changes, Updates and Withdrawal

+

+ We may update and change the Interface from time to time. We do not guarantee that the Interface will + always be available or be uninterrupted or be free of charge. +

+

+ We reserve the right to suspend or withdraw or restrict the availability of all or any part of the + Interface for whatever reasons. +

+

Non-Custody and Wallet Security

+

+ The Interface operates as a non-custodial application, which implies that we, at no point in time, assume + custody, ownership, or control over your digital assets. +

+

+ This further underscores your unequivocal responsibility for safeguarding the cryptographic private keys + associated with your digital asset wallets. Under no circumstances should you disclose your wallet + credentials or seed phrase to any third party. We disclaim any responsibility or liability whatsoever in + connection with your utilization of a wallet, and we make no representations or warranties regarding the + compatibility of the Interface with any particular wallet. Likewise, accountability for any associated + wallet rests solely with you, and we shall not be held responsible for any actions or omissions undertaken + by you in relation to or as a consequence of your wallet being compromised. +

+

No Fiduciary Duty

+

+ To the fullest extent permitted by law, you acknowledge and agree that we owe no fiduciary duties or + liabilities to you or any other party, and that to the extent any such duties or liabilities may exist at + law or in equity, those duties and liabilities are hereby irrevocably disclaimed, waived, and eliminated. + You further agree that the only duties and obligations that we owe you are those set out expressly in + these Terms. +

+

Tax Responsibility

+

+ You are solely responsible to determine if your use of the Interface has tax implications for you. By + using the Interface you agree not to hold us liable for any tax liability you incur arising out of or + associated with your usage of the Interface or any other action or transaction related thereto. +

+

The Forum

+

+ Access to and Use of{' '} + + https://forum.cow.fi + +

+

+ https://forum.cow.fi (the "Forum") is a moderated online forum for discussing CoW Protocol and + partially exercising COW Protocol's governance process. +

+

You may access and use the Forum only for lawful purposes and in compliance with these Terms of Use.

+

Registration and Account Security

+

+ In order to use the Forum Name, you may be required to register for an account. You must provide accurate + and complete information when registering and you are responsible for keeping your account information + up-to-date and secure. You agree not to share your account information with anyone else. +

+

Acceptable Use

+

+ You agree not to post any content that is unlawful, harmful, threatening, abusive, harassing, defamatory, + vulgar, obscene, invasive of another's privacy, or otherwise promoting illegal or harmful activities. +

+

+ You will not impersonate any person or entity or falsely state or otherwise misrepresent your affiliation + with a person or entity. +

+

+ You will not post advertisements or solicitations of business without explicit permission from the forum + administrators. +

+

+ You agree to respect the copyright and intellectual property rights of others. You may not post any + content that infringes on the copyright or other intellectual property rights of others. +

+

User Conduct

+

You agree to be respectful of other users of the Forum. You agree not to:

+
    +
  • +

    Harass or bully other users;

    +
  • +
  • +

    Engage in personal attacks or insults;

    +
  • +
  • +

    Spam or post irrelevant content;

    +
  • +
  • +

    Create multiple accounts for the purpose of disrupting or manipulating the forum;

    +
  • +
  • +

    Violate the privacy of other users.

    +
  • +
+

Content Ownership and Responsibility

+

+ You retain all ownership rights to the content you post on the forum. However, by posting content, you + grant the forum a non-exclusive, royalty-free license to use, reproduce, and distribute your content. +

+

+ You acknowledge and agree that all content posted on the forum is the sole responsibility of the + individual who posted the content. +

+

Moderation and Removal of Content

+

+ The forum administrators reserve the right to monitor all user activity on the Forum. We may remove any + content that violates these Terms of Use or that we deem to be inappropriate. We may also suspend or + terminate your account if you violate these Terms of Use. +

+

+ Information on the Website or Products are not advice +

+

+ None of the information available on the Website including the Interface and the Forum, or made otherwise + available to you in relation to its use, constitutes any legal, tax, financial or other advice. When in + doubt as to the action you should take, you should consult your legal, financial, tax or other + professional advisors. +

+

Intellectual Property Rights

+

+ Subject to the application of any miscellaneous open source license attaching to the software code of the + Protocol and to the software code of the Products, we are the owner of all contents, including but not + limited to software, text, images, trademarks, service marks, copyrights, patents, and designs. This means + we own all the legal rights to them. You are not allowed to copy, modify, adapt, rent, license, sell, + publish, distribute, or share access to the Interface or its contents with anyone else, unless we + explicitly give you permission in writing. Simply using the Interface doesn't give you any ownership + rights to it or its contents. +

+

+ Subject to your compliance with these Terms, we grant you a limited, revocable, non-exclusive, + non-transferable, non-sublicensable licence to access the Protocol and the Products. This licence does not + include any resale, commercial or derivative use of the Protocol or the Products. We reserve and retain + all rights not expressly granted to you in these Terms. The Interface may not be reproduced, sold, or + otherwise exploited for any commercial purpose without our express prior written consent. You may not + frame or utilize framing techniques to enclose any trademark, logo, or other proprietary information of us + without our express prior written consent. You may not misuse the Interface and may only use it as + permitted by law. If you breach our intellectual property rights in violation of these Terms, your licence + to use the Interface will automatically be revoked and terminated immediately. +

+

Bug and Default

+

+ No Warranties: THE PRODUCTS ARE PROVIDED "AS IS" AND WITHOUT ANY WARRANTY OF + ANY KIND, EXPRESS OR IMPLIED. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS, + IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS + FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. +

+

+ Specific Disclaimers: WITHOUT LIMITING THE FOREGOING, COW DAO DOES NOT WARRANT THAT THE + SOFTWARE: +

+
    +
  • +

    Will meet your specific requirements or expectations;

    +
  • +
  • +

    Will be uninterrupted, error-free, or completely secure;

    +
  • +
  • +

    Will be compatible with all systems or devices;

    +
  • +
  • +

    Will be accurate, complete, reliable, current, or virus-free.

    +
  • +
+

User Responsibilities and Prohibited Actions

+

User Responsibilities

+

+ You are responsible for configuring your information technology and computer programs to access the + Products Interface in a secure manner. This includes the use of appropriate virus protection software. +

+

You agree to use the Products only for their intended purpose and in accordance with these Terms.

+

Prohibited Actions:

+

You are prohibited from misusing the Products by knowingly introducing any material that is:

+
    +
  • +

    Malicious, including viruses, worms, Trojan horses, and other harmful software;

    +
  • +
  • +

    + Technologically harmful, including attempts to disrupt or damage the Interface or its infrastructure. +

    +
  • +
+

You are prohibited from attempting to gain unauthorized access to the:

+
    +
  • +

    Products;

    +
  • +
  • +

    Server(s) hosting the Products;

    +
  • +
  • +

    Any computer or database connected to the Products;

    +
  • +
+

You are prohibited from attacking the Products through:

+
    +
  • +

    Denial-of-service attacks;

    +
  • +
  • +

    Distributed denial-of-service attacks.

    +
  • +
+

You acknowledge that any breach of this clause may constitute a criminal offense.

+

Consequences of Breaching of these Terms

+

+ We reserve the right to immediately terminate your access to the Website or the Products upon any breach + of these Terms. +

+

+ If you breach our intellectual property rights in violation of these Terms, your licence to use the + Interface will automatically be revoked and terminated immediately. +

+

+ We may report any breach of this clause to the relevant law enforcement authorities and cooperate with + them, including disclosing your identity where possible. +

+

+ Upon termination of your access, your right to use the Website or the Products will immediately cease. + Clauses 7 to 22 and any other term intended so will survive any termination of these Terms. +

+

Indemnification and Liability

+

+ You agree to release and indemnify, defend and hold us and any of our affiliates harmless, as well as any + members, participants, directors, officers, employees, contractors, shareholders and representatives of + any of the foregoing, from and against any and all losses, liabilities, damages, costs claims or actions + of any kind arising or resulting from your use of the Interface, your breach of these Terms, and any of + your acts or omissions that infringe the rights of any person. +

+

+ We reserve the right, at our own expense, to assume exclusive defence and control of any matter otherwise + subject to indemnification by you and, in such case, you agree to cooperate with us in the defence of such + matter. +

+

+ The indemnity set out here is in addition to, and not in lieu of, any other remedies that may be available + to us under applicable law. +

+

Warranties

+

By using our Products you hereby agree, represent and warrant that:

+
    +
  • you have read and understood the Terms and agree to be bound by them;
  • +
  • + you do not rely on, and shall have no remedies in respect of, any statement, representation, assurance + or warranty (whether made innocently or negligently) that is not set out in these Terms; +
  • +
  • + you have reached the legal age of majority applicable to you and you agree to provide legitimate and + lawful documentation proving such status if we so request; +
  • +
  • + your usage of the Interface is legal under the laws of your jurisdiction or under the laws of any other + jurisdiction to which you may be subject; +
  • +
  • you are not a person subject to sanction set out by the EU or Portugal;
  • +
  • + you understand the functionality, usage, storage, transmission mechanisms and intricacies associated + with cryptographic assets, token storage facilities (including wallets), blockchain technology and + blockchain-based software systems; +
  • +
  • + you understand that transactions on the Ethereum Mainnet, Gnosis Chain and compatible layer 2 solutions + are irreversible and may not be erased and that your wallet address and any transaction is displayed + permanently and publicly and that you relinquish any right of rectification or erasure of personal data; +
  • +
  • + you shall comply with any applicable tax obligations in your jurisdiction arising from your use of the + interface; +
  • +
  • + you shall not misuse or gain unauthorised access to the Interface by knowingly introducing viruses, + Trojan horses, worms, time-bombs, keystroke loggers, spyware, adware or any other harmful programs or + similar computer code designed to adversely affect the Interface and that in the event you do so or + otherwise attack the Interface, we report any such activity to the relevant law enforcement authorities; +
  • +
  • + you shall not access without authority, interfere with, damage or disrupt any part of the Interface, any + equipment or network on which the Interface is stored, any software used in the provision of the + Interface or any equipment or network or software owned or used by any third party; +
  • +
  • + you shall not use the Interface for activities that are unlawful or fraudulent or have such purpose or + effect or otherwise support any activities that breach applicable local, national or international law + or regulations; +
  • +
  • + you shall not use the Interface to trade cryptographic assets that are proceeds of criminal or + fraudulent activity; +
  • +
  • + the Interface, the Protocol, the Ethereum Blockchain, Gnosis Chain and compatible layer 2 solutions are + in an early development stage and we accordingly do not guarantee an error-free process and give no + price or liquidity guarantee; +
  • +
  • you are using the Interface at your own risk;
  • +
  • + the risks of using the Interface are substantial and include, but are not limited to, the ones set out + in these Terms, which is hereby expressly incorporated into these Terms, and you are willing to accept + the risk of loss associated therewith. +
  • +
+

Limitation of Liability

+

+ We do not exclude or limit our liability to you where it would be unlawful to do so. This includes + liability for death or personal injury caused by our negligence or fraud. +

+

+ YOU USE THIS INTERFACE AT YOUR OWN RISK AND YOU ASSUME FULL RESPONSIBILITY FOR SUCH USE. TO THE MAXIMUM + EXTENT PERMITTED BY APPLICABLE LAW, WE EXCLUDE ALL IMPLIED CONDITIONS, WARRANTIES, REPRESENTATIONS OR + OTHER TERMS THAT MAY APPLY TO THE INTERFACE. WE WILL NOT BE LIABLE TO YOU FOR ANY LOSS OR DAMAGE, WHETHER + IN CONTRACT, TORT (INCLUDING NEGLIGENCE), BREACH OF STATUTORY DUTY, OR OTHERWISE, EVEN IF FORESEEABLE, + ARISING UNDER OR IN CONNECTION WITH THE USE OF, OR INABILITY TO USE, THE INTERFACE; OR THE USE OF OR + RELIANCE ON ANY CONTENT DISPLAYED ON THE INTERFACE. WE WILL NOT BE LIABLE FOR LOSS OF PROFITS, SALES, + BUSINESS, OR REVENUE, BUSINESS INTERRUPTION, ANTICIPATED SAVINGS, BUSINESS OPPORTUNITY, GOODWILL OR + REPUTATION OR ANY INDIRECT OR CONSEQUENTIAL LOSS OR DAMAGE. +

+

+ We are not liable for any funds lost due to your interaction with scam websites or activities imitating + the Interface. +

+

+ You are responsible for ensuring you are interacting with the correct URL and taking necessary precautions + to avoid scams or fraudulent activities impersonating us. +

+

+ We Are Not Registered with any Governmental Agency +

+

+ We are not registered with any governmental supervisory authority in any capacity. You understand and + acknowledge that we do not broker trading orders on your behalf. We also do not facilitate the execution + or settlement of your trades, which occur entirely on public distributed blockchains. +

+

No Fiduciary Duty

+

+ To the fullest extent permitted by law, you acknowledge and agree that we owe no fiduciary duties or + liabilities to you or any other party, and that to the extent any such duties or liabilities may exist at + law or in equity, those duties and liabilities are hereby irrevocably disclaimed, waived, and eliminated. + You further agree that the only duties and obligations that we owe you are those set out expressly in this + Agreement. +

+

Dispute Resolution

+

Amicable Dispute Resolution

+

+ If an alleged breach, controversy, claim, dispute or difference arises out of or in connection with the + present Terms about or in connection to this Interface between you and us (a "Dispute"), you + agree to seek to resolve the matter with us amicably by referring the matter to{' '} + + legal@cow.fi + + . +

+

+ For any claim not relating to or connected to the Interface please contact CoW DAO via CoW Forum at{' '} + + https://forum.cow.fi/ + {' '} + with a detailed description, the date and time the issue arose, your handle to contact you on and the + outcome you are seeking. +

+

Mediation and Arbitration

+

+ In the event a Dispute cannot be resolved amicably, you must first refer the Dispute to proceedings under + the International Chamber of Commerce ("ICC") Mediation Rules, which Rules are deemed to be + incorporated by reference into this clause. The place of mediation shall be London, United Kingdom. The + language of the mediation proceedings shall be English. +

+

+ If the Dispute has not been settled pursuant to the ICC Mediation Rules within forty (40) days following + the filing of a Request for Mediation in accordance with the ICC Mediation Rules or within such other + period as the parties to the Dispute may agree in writing, such Dispute shall thereafter be finally + settled under the Rules of Arbitration of the International Chamber of Commerce by three (3) arbitrators + appointed in accordance with the said Rules. The seat of Arbitration shall be London, United Kingdom. The + governing law of this arbitration clause shall be the laws of England and Wales. The language of the + arbitration shall be English. The Emergency Arbitrator Provisions shall not apply. +

+

Final Jurisdiction

+

+ If the Dispute cannot be resolved for legal reasons in accordance with the procedures described above, you + and we agree that the courts of England and Wales shall have exclusive jurisdiction to resolve the + Dispute. +

+

No Class Action

+

+ YOU AGREE AND UNDERSTAND THAT BY ENTERING INTO THIS AGREEMENT, YOU EXPRESSLY WAIVE ANY RIGHT, IF ANY, TO A + TRIAL BY JURY AND RIGHT TO PARTICIPATE IN A CLASS ACTION LAWSUIT. +

+

Governing law

+

+ This Agreement shall be governed by and construed in accordance with the substantive laws of England & + Wales without regard to conflict of laws principles. +

+

Third party beneficiary

+

+ Clauses 4 to 22 also apply to the benefit of the Affiliates and such benefit also encompasses + Protocol-related matters. +

+

+ Subject to 20.1, these Terms do not give rise to any third party rights, which may be enforced against Us. +

+

Entire agreement

+

+ These Terms constitute the entire and exclusive agreement between us and you regarding its subject matter, + and supersede and replace any previous or contemporaneous written or oral contract, promises, assurances, + assurances, warranty, representation or understanding regarding its subject matter, whether written or + oral. You shall have no claim for innocent or negligent misrepresentation or misstatement based on any + statement in these Terms, though nothing in this clause shall limit or exclude any liability for fraud. +

+

No waiver and no assignment

+

+ You may not assign, transfer or delegate any of your rights or duties arising out of or in connection with + these Terms to a third party. Any such assignment or transfer shall be void and shall not impose any + obligation or liability on us to the assignee or transferee. +

+

+ Any delay or omission by us in relation to the exercise of any right granted by law or under these Terms + shall not as a result exclude or prevent the later exercise of such a right. +

+

Severability

+

+ If any provision or part-provision of these Terms is or becomes invalid, illegal or unenforceable, it + shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such + modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any + modification to or deletion of a provision or part-provision under this clause shall not affect the + validity and enforceability of the rest of these Terms. +

{' '} +
+
+
+
+ ) +} diff --git a/apps/cow-fi/app/(main)/legal/layout.tsx b/apps/cow-fi/app/(main)/legal/layout.tsx new file mode 100644 index 0000000000..03705a2e68 --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/layout.tsx @@ -0,0 +1,11 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: { + absolute: 'Legal - CoW DAO Legal Overview', + }, +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/legal/page.tsx b/apps/cow-fi/app/(main)/legal/page.tsx new file mode 100644 index 0000000000..64c038d5c9 --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/page.tsx @@ -0,0 +1,75 @@ +'use client' + +import { Color } from '@cowprotocol/ui' + +import styled from 'styled-components/macro' +import { Link } from '@/components/Link' + +import { ArticleContent, ArticleMainTitle, BodyContent, Breadcrumbs, ContainerCard } from '@/styles/styled' +import { clickOnLegal } from '../../../modules/analytics' + +const LEGAL_LINKS = [ + { + title: 'CoW Widget Terms and Conditions', + href: '/legal/widget-terms', + }, + { + title: 'CoW Swap Terms and Conditions', + href: '/legal/cowswap-terms', + }, + { + title: 'CoW Swap Privacy Policy', + href: '/legal/cowswap-privacy-policy', + }, + { + title: 'CoW Swap Cookie Policy', + href: '/legal/cowswap-cookie-policy', + }, +] + +const Wrapper = styled.div` + display: flex; + flex-flow: column wrap; + justify-content: flex-start; + align-items: center; + max-width: 1000px; + width: 100%; + margin: 24px auto 0; + gap: 24px; +` + +export default function Page() { + return ( + + + + + clickOnLegal('click-legal-breadcrumbs')}> + Home + + + CoW DAO Legal Overview + + + + CoW DAO Legal Overview + + + +

An overview of all legal documents related to CoW DAO and its products.

+ +
    + {LEGAL_LINKS.map((link, index) => ( +
  • + clickOnLegal(`click-${link.title}`)}> + {link.title} + +
  • + ))} +
+
+
+
+
+ ) +} diff --git a/apps/cow-fi/app/(main)/legal/widget-terms/layout.tsx b/apps/cow-fi/app/(main)/legal/widget-terms/layout.tsx new file mode 100644 index 0000000000..63a59b3a34 --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/widget-terms/layout.tsx @@ -0,0 +1,9 @@ +import { Metadata } from 'next' + +export const metadata: Metadata = { + title: { absolute: 'Widget - Terms and Conditions' }, +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/legal/widget-terms/page.tsx b/apps/cow-fi/app/(main)/legal/widget-terms/page.tsx new file mode 100644 index 0000000000..9144000c3d --- /dev/null +++ b/apps/cow-fi/app/(main)/legal/widget-terms/page.tsx @@ -0,0 +1,356 @@ +'use client' + +import { Color } from '@cowprotocol/ui' + +import styled from 'styled-components/macro' + +import { Link } from '@/components/Link' + +import { ArticleContent, ArticleMainTitle, BodyContent, Breadcrumbs, ContainerCard } from '@/styles/styled' +import { clickOnLegal } from '../../../../modules/analytics' + +const Wrapper = styled.div` + display: flex; + flex-flow: column wrap; + justify-content: flex-start; + align-items: center; + max-width: 1000px; + width: 100%; + margin: 24px auto 0; + gap: 24px; +` + +export default function Page() { + const title = 'CoW Swap Widget & Partner Fee Program Terms and Conditions' + + return ( + + + + + clickOnLegal('click-legal-breadcrumbs')}> + Home + + clickOnLegal('click-legal-breadcrumbs')}> + Legal + + {title} + + + + {title} + + + +

+ These Terms and Conditions (the "Terms") govern the integration of the CoW Swap Widget (the "Widget"). The + Widget is provided to you ("you", the "Partner") by CoW DAO (the "Provider", "we", "our", or "us"). +

+

+ CoW DAO is an Ethereum and Gnosis Chain based collective managed by community members in accordance with + the CoW DAO's{' '} + + participation agreement + + . To contact CoW DAO please use the forum at{' '} + + https://forum.cow.fi/ + + . +

+

+ By integrating and using the Widget, Partner acknowledges that it has read, understood, and agreed to be + bound by these Terms and Conditions. +

+

Acceptance of these Terms

+

+ By integrating and using the Widget, you confirm that you accept these Terms and agree to comply with + them. If you do not agree, you must not integrate the Widget. If you think that there is an error in these + Terms, please contact us at{' '} + + legal@cow.fi + + . +

+

+ You are also responsible for ensuring that all persons who access the Widget through your website are + aware of the{' '} + + Terms & Conditions + {' '} + of{' '} + + https://cow.fi/ + {' '} + and that they comply with them. +

+

+ We may terminate or suspend your access to the Widget immediately, without prior notice or liability, if + you breach any clause of the Terms. Upon termination of your access, your right to access the website or + use the Products will immediately cease. +

+

Change of these Terms

+

+ We may amend these Terms at our sole discretion. We regularly do so. Every time you wish to access the + Website or use the Products, please check these Terms to ensure you understand the terms that apply at + that time. +

+

CoW Protocol

+

+ Cow Protocol (the "Protocol") is a decentralised protocol operated by CoW DAO on the Ethereum, Gnosis + Chain as well as other EVM compatible chains that allows users to trade certain digital assets. The + Protocol is a set of smart contracts owned by CoW DAO. +

+

+ CoW Protocol applies batch auction mechanisms to allow peer-to-peer trades on Ethereum Mainnet, and + Ethereum Virtual Machine compatible validation mechanisms. CoW DAO is not custodians or counterparties to + any transactions executed by you on the Protocol. We do not support any other service, particularly we do + not provide any order matching, guaranteed prices, or similar exchange or trading platform services. +

+

+ Please consult our{' '} + + documentation + {' '} + for more information on CoW Protocol. +

+

The Widget

+

+ The Widget is an iframe solution mirroring the web-hosted user interface (the "Interface") published at{' '} + + https://swap.cow.fi/ + {' '} + and providing access to CoW Protocol and allowing users to submit orders into the Interface and exchange + compatible tokens using the unique features of the Protocol. +

+

+ Please consult our documentation for more information on{' '} + + CoW Widget + {' '} + and the Interface. +

+

+ The{' '} + + Terms & Conditions + {' '} + for the use of the Interface apply to the Widget. It is your duty to ensure that all persons who access + the Widget through your website are aware of the Interface’s{' '} + + Terms & Conditions + {' '} + and that they comply with them. +

+

Widget Integration

+

+ The Partner may integrate the Widget into their website or application in accordance with the Provider's + integration guidelines and these Terms. +

+

+ The Partner may customize the design and appearance of the Widget within reasonable limits, provided that + the Provider's branding and logos remain visible. +

+

Obligations of the Partner

+

+ You are prohibited from misusing the Widget, the Interface, the Protocol or its infrastructure by + knowingly introducing any material that is: +

+
    +
  • Malicious, including viruses, worms, Trojan horses, and other harmful software;
  • +
  • + Technologically harmful, including attempts to disrupt or damage the Widget, the Interface, the Protocol + or its infrastructure. +
  • +
+

You are prohibited from attempting to gain unauthorized access to the:

+
    +
  • the Widget, the Interface, the Protocol or its infrastructure;
  • +
  • Server(s) hosting the Widget, the Interface, the Protocol or its infrastructure;
  • +
  • + Any computer or database connected to the Widget, the Interface, the Protocol or its infrastructure. +
  • +
+

+ You are prohibited from attacking the Widget, the Interface, the Protocol or its infrastructure through: +

+
    +
  • Denial-of-service attacks;
  • +
  • Distributed denial-of-service attacks;
  • +
  • You acknowledge that any breach of this clause may constitute a criminal offense.
  • +
+

License and Ownership

+

+ The Provider grants the Partner a limited, non-exclusive, non-transferable, revocable license to integrate + and use the Widget solely for the purpose of providing access to the Interface to the Partner's users. +

+

+ The Widget and all intellectual property rights therein are and shall remain the exclusive property of the + Provider. +

+

Partner Fee Program

+

Partner Fee

+ +

+ Partners may participate in the Provider's Partner Fee Program ("Program"). The Program enables Partners + to earn fees on trades their users execute through the Widget. For comprehensive details and conditions of + the Partner Fee Program, please refer to the dedicated{' '} + + Widget documentation page under the "Partner Fee" section + + . +

+

+ To list a token on the Widget and earn fees on associated transactions, the token must have a listing on{' '} + + https://www.coingecko.com/ + {' '} + as it appears on the site. +

+

Service Fee

+

+ The Provider will retain a service fee ("Service Fee") from the total fees earned by the Partner. Specific + terms and conditions regarding the Service Fee are outlined in the{' '} + + Widget's dedicated documentation page under the "Partner Fee" section + + . +

+

The Provider reserves the right to adjust the Service Fee charged to the Partner with prior notice.

+

Partner Fee Payment at the Provider’s Discretion

+

+ The Provider retains sole and absolute discretion in determining whether the transactions on the Widget + are eligible for Partner Fee. The Provider may choose not to issue Partner Fees for any reason, including + but not limited to: +

+
    +
  • + Suspected Fraud or Scam Activity: Transactions involving tokens deemed fraudulent or potentially + involved in scams; +
  • +
  • + Abnormal or Manipulative Trading: Trading activity aimed at exploiting the Widget or Partner Fee + program; +
  • +
  • + Other Inappropriate Activity: Any other scenarios where the Provider considers Partner Fee payment to be + unsuitable or against the best interests of the Widget or Program. +
  • +
+ +

Program Changes and Termination

+

+ The Provider may make amendments to the Program at any time. Additionally, the Provider reserves the right + to modify or terminate the Program at any time, with or without notice. +

+ +

Warranties and Limitations

+

The Widget is provided "as is" without warranty of any kind, express or implied.

+

+ Provider shall not be liable for any damages or losses arising from the use or inability to use the + Widget, including but not limited to direct, indirect, incidental, consequential, or punitive damages. +

+

+ The Partner is solely responsible for ensuring compliance with all applicable laws and regulations in + their jurisdiction. +

+

Indemnification

+

+ The Partner shall indemnify, defend, and hold harmless the Provider, its affiliates, and their agents from + and against any and all claims, liabilities, damages, losses, and expenses, including reasonable + attorneys' fees and costs, arising out of or relating to the Partner's use of the Widget or breach of + these Terms. +

+

Breach of Terms

+

+ In the event of a breach of these Terms, the Provider may immediately terminate your use of the Widget or + participation in the Program without notice. +

+

Termination

+

+ The  Provider may terminate this Agreement at any time and revoke the Partner's license to use the + Widget at any time, with or without cause, upon written notice to Partner. +

+

+ Upon termination, the Partner shall immediately cease all use of the Widget and remove it from its website + or application. +

+

Dispute Resolution

+

Amicable Dispute Resolution

+

+ If an alleged breach, controversy, claim, dispute or difference arises out of or in connection with the + present Terms about or in connection to the Widget between you and us (a "Dispute"), you agree to seek to + resolve the matter with us amicably by referring the matter to{' '} + + legal@cow.fi + + . +

+

+ For any claim not relating to or connected to the Widget please contact CoW DAO via CoW Forum at{' '} + + https://forum.cow.fi/ + {' '} + with a detailed description, the date and time the issue arose, your handle to contact you on and the + outcome you are seeking. +

+

Mediation and Arbitration

+

+ In the event a Dispute cannot be resolved amicably, you must first refer the Dispute to proceedings under + the International Chamber of Commerce ("ICC") Mediation Rules, which Rules are deemed to be incorporated + by reference into this clause. The place of mediation shall be London, United Kingdom. The language of the + mediation proceedings shall be English. +

+

+ If the Dispute has not been settled pursuant to the ICC Mediation Rules within forty (40) days following + the filing of a Request for Mediation in accordance with the ICC Mediation Rules or within such other + period as the parties to the Dispute may agree in writing, such Dispute shall thereafter be finally + settled under the Rules of Arbitration of the International Chamber of Commerce by three (3) arbitrators + appointed in accordance with the said Rules. The seat of Arbitration shall be London, United Kingdom. The + governing law of this arbitration clause shall be the laws of England and Wales. The language of the + arbitration shall be English. The Emergency Arbitrator Provisions shall not apply. +

+

Final Jurisdiction

+

+ If the Dispute cannot be resolved for legal reasons in accordance with the procedures described above, you + and we agree that the courts of England and Wales shall have exclusive jurisdiction to resolve the + Dispute. +

+

Miscellaneous

+

Entire agreement

+

+ These Terms constitute the entire and exclusive agreement between us and you regarding its subject matter, + and supersede and replace any previous or contemporaneous written or oral contract, promises, assurances, + assurances, warranty, representation or understanding regarding its subject matter, whether written or + oral. You shall have no claim for innocent or negligent misrepresentation or misstatement based on any + statement in these Terms, though nothing in this clause shall limit or exclude any liability for fraud. +

+

No waiver and no assignment

+

+ You may not assign, transfer or delegate any of your rights or duties arising out of or in connection with + these Terms to a third party. Any such assignment or transfer shall be void and shall not impose any + obligation or liability on us to the assignee or transferee. +

+

+ Any delay or omission by us in relation to the exercise of any right granted by law or under these Terms + shall not as a result exclude or prevent the later exercise of such a right. +

+

Severability

+

+ If any provision or part-provision of these Terms is or becomes invalid, illegal or unenforceable, it + shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such + modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any + modification to or deletion of a provision or part-provision under this clause shall not affect the + validity and enforceability of the rest of these Terms. +

+

Governing law

+

+ This Agreement shall be governed by and construed in accordance with the substantive laws of England & + Wales without regard to conflict of laws principles. +

+
+
+
+
+ ) +} diff --git a/apps/cow-fi/app/(main)/page.tsx b/apps/cow-fi/app/(main)/page.tsx new file mode 100644 index 0000000000..bb8bde2811 --- /dev/null +++ b/apps/cow-fi/app/(main)/page.tsx @@ -0,0 +1,142 @@ +'use client' + +import { Color, Font } from '@cowprotocol/ui' +import IMG_ICON_GOVERNANCE from '@cowprotocol/assets/images/icon-governance.svg' +import VIDEO_HERO_HOME from '@cowprotocol/assets/video/cow-dao-hero-animation.mp4' +import { Link, LinkType } from '@/components/Link' + +import { + ContainerCard, + ContainerCardSection, + HeroBackground, + HeroContainer, + HeroContent, + HeroTitle, + PageWrapper, + SectionTitleDescription, + SectionTitleIcon, + SectionTitleText, + SectionTitleWrapper, + TopicCard, + TopicImage, + TopicList, + TopicTitle, +} from '@/styles/styled' + +import LazySVG from '@/components/LazySVG' +import IMG_ICON_BULB_COW from '@cowprotocol/assets/images/icon-bulb-cow.svg' +import IMG_ICON_GRANTS_CARTON from '@cowprotocol/assets/images/icon-grants-carton.svg' + +import { CHANNEL_LIST, PRODUCT_CONTAINERS } from '@/data/home/const' +import { clickOnHome } from '../../modules/analytics' + +export default function Page() { + return ( + + + + + + + + Don’t get milked! + + + + + {PRODUCT_CONTAINERS} + + + + + + + + Innovation in action + + CoW DAO is famous for pioneering technology at the forefront of intents, MEV protection, and more.
+ Whether you're a crypto beginner or an Ethereum OG, you can learn more about these important topics in the + CoW DAO Knowledge Base. +
+ + clickOnHome('click-cow-knowledge-base-learn-more')} + > + Learn more + +
+
+
+ + + + + + + + Governance + + Anyone can join CoW DAO by holding{' '} + clickOnHome('click-cow-tokens')} + external + > + COW tokens + + . Tokenholders contribute to CoW DAO's mission by participating in "CoWmunity" discussions on Discord, by + adding proposals to the CoW DAO Forum, and by voting on governance actions in Snapshot. + + + + + {CHANNEL_LIST.map((social, index) => ( + clickOnHome(social.linkEvent)} + > + + + + {social.title} + + ))} + + + + + + + + + + + Grants + + The CoW DAO Grants Program funds mission-aligned projects and people working on MEV protection, trading + innovation, and ecosystem development. + + clickOnHome('click-apply-for-a-grant')} + > + Explore grants + + + + +
+ ) +} diff --git a/apps/cow-fi/app/(main)/products/page.tsx b/apps/cow-fi/app/(main)/products/page.tsx new file mode 100644 index 0000000000..2922f287cc --- /dev/null +++ b/apps/cow-fi/app/(main)/products/page.tsx @@ -0,0 +1,16 @@ +'use client' + +import { Color } from '@cowprotocol/ui' +import { PRODUCT_CONTAINERS } from '@/data/home/const' + +import { PageWrapper, ContainerCard } from '@/styles/styled' + +export default function Page() { + return ( + + + {PRODUCT_CONTAINERS} + + + ) +} diff --git a/apps/cow-fi/app/(main)/tokens/[tokenId]/page.tsx b/apps/cow-fi/app/(main)/tokens/[tokenId]/page.tsx new file mode 100644 index 0000000000..f52dbd237e --- /dev/null +++ b/apps/cow-fi/app/(main)/tokens/[tokenId]/page.tsx @@ -0,0 +1,55 @@ +'use server' + +import React from 'react' + +import { getTokenDetails as getTokenDetails, getTokensIds } from '../../../../services/tokens' +import { CONFIG } from '@/const/meta' + +import { TokenPageComponent } from '@/components/TokenPageComponent' +import type { Metadata } from 'next' +import type { TokenDetails } from '../../../../types' +import { getPageMetadata } from '@/util/getPageMetadata' + +type Props = { + params: Promise<{ tokenId: string }> +} + +function getTokenMetaData(token: TokenDetails) { + const { name, symbol, change24h, priceUsd } = token + const change24 = parseFloat(change24h as string) + const change24hFormatted = change24.toFixed(2) + const isIncrease = parseFloat(change24h as string) >= 0 + const priceChangeEmoji = isIncrease ? '🟢' : '🔴' + const changeDirection = isIncrease ? '▲' : '▼' + const title = `${priceChangeEmoji} ${name} (${symbol}) $${priceUsd} (${change24hFormatted}% ${changeDirection}) - ${CONFIG.metatitle_tokenDetail} - ${CONFIG.title.default}` + const description = `Track the latest ${name} (${symbol}) price, market cap, trading volume, and more with CoW DAO's live ${name} price chart.` + + return { title, description } +} + +export async function generateMetadata({ params }: Props): Promise { + // read route params + const tokenId = (await params).tokenId + + if (!tokenId) return {} + + const token = await getTokenDetails(tokenId) + + return getPageMetadata(getTokenMetaData(token)) +} + +export async function generateStaticParams() { + const tokenIds = await getTokensIds() + + return tokenIds.map((tokenId) => ({ tokenId })) +} + +export default async function Page({ params }: Props) { + const tokenId = (await params).tokenId + + if (!tokenId) return null + + const token = await getTokenDetails(tokenId) + + return +} diff --git a/apps/cow-fi/app/(main)/tokens/layout.tsx b/apps/cow-fi/app/(main)/tokens/layout.tsx new file mode 100644 index 0000000000..8ff648c30a --- /dev/null +++ b/apps/cow-fi/app/(main)/tokens/layout.tsx @@ -0,0 +1,15 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' +import { CONFIG } from '@/const/meta' + +export const metadata: Metadata = { + ...getPageMetadata({ + title: 'Tokens - CoW DAO', + description: + "Track the latest tokens price, market cap, trading volume, and more with CoW DAO's live token price tracker", + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/tokens/page.tsx b/apps/cow-fi/app/(main)/tokens/page.tsx new file mode 100644 index 0000000000..54f6c93a5a --- /dev/null +++ b/apps/cow-fi/app/(main)/tokens/page.tsx @@ -0,0 +1,10 @@ +'use server' + +import { getTokensInfo } from '../../../services/tokens' +import { TokensPageComponent } from '@/components/TokensPageComponent' + +export default async function Page() { + const tokens = await getTokensInfo() + + return +} diff --git a/apps/cow-fi/app/(main)/widget/layout.tsx b/apps/cow-fi/app/(main)/widget/layout.tsx new file mode 100644 index 0000000000..20c2b00300 --- /dev/null +++ b/apps/cow-fi/app/(main)/widget/layout.tsx @@ -0,0 +1,13 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' + +export const metadata: Metadata = { + ...getPageMetadata({ + title: 'Widget - Bring reliable, MEV-protected swaps to your users', + description: 'Integrate the CoW Swap widget to bring seamless, MEV-protected trading to your website or dApp', + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(main)/widget/page.tsx b/apps/cow-fi/app/(main)/widget/page.tsx new file mode 100644 index 0000000000..dc1e11b69d --- /dev/null +++ b/apps/cow-fi/app/(main)/widget/page.tsx @@ -0,0 +1,333 @@ +'use client' + +import { Font, Color, ProductLogo, ProductVariant } from '@cowprotocol/ui' + +import IMG_ICON_OWL from '@cowprotocol/assets/images/icon-owl.svg' +import IMG_ICON_GHOST from '@cowprotocol/assets/images/icon-ghost.svg' + +import { Link, LinkType } from '@/components/Link' + +import { CowSwapWidget, CowSwapWidgetParams } from '@cowprotocol/widget-react' + +import { + PageWrapper, + ContainerCard, + ContainerCardSection, + TopicList, + TopicCard, + TopicImage, + TopicTitle, + TopicDescription, + SectionTitleWrapper, + SectionTitleIcon, + SectionTitleText, + SectionTitleDescription, + TopicCardInner, + HeroContainer, + HeroDescription, + HeroContent, + HeroTitle, + HeroSubtitle, + WidgetContainer, + HeroButtonWrapper, +} from '@/styles/styled' + +import { DAO_CONTENT as CONTENT } from '@/data/widget/const' + +import LazySVG from '@/components/LazySVG' + +import { clickOnWidget } from '../../../modules/analytics' + +const FEATURE_ITEMS = [ + 'Live styling configurator', + 'Easy install with a snippet of code', + 'External wallet management - use your own wallet connection', + 'Internal wallet management - no wallet connection needed', + 'Configurable token lists', + 'Custom-tailored fees', + 'Fully responsive, from 320px and up', + 'Feature-adaptive display', +] + +const widgetParams: CowSwapWidgetParams = { + appCode: 'CoW Protocol: Widget Demo', + theme: 'light', + standaloneMode: true, + width: '100%', +} + +export default function Page() { + return ( + + + + Widget + + Bring reliable, MEV-protected swaps to your users + + + Integrate the CoW Swap widget to bring seamless, MEV-protected trading to your website or dApp. Delight your + users while adding an extra revenue stream for your project - it's a win-win. + + + + clickOnWidget('click-config-widget')} + > + {' '} + Configure widget{' '} + + + clickOnWidget('click-read-docs')} + > + {' '} + Read docs + + + + + + + + + + + + + + + + Integrate now + + + + + + Earn Revenue for Your Project + + You may collect revenue when users trade with your widget.* + + + + Make Money with CoW Swap + + + + + + Integrate With Ease + + + Integrate With Ease + + The CoW Swap widget is quick to install and easy to customize. Add the widget to your site in under 5 + minutes by copy-pasting a few lines of code. Contact our team for implementation details. + + + + + + + + + + + + + + Every Bell, Whistle, and Moo + + With the CoW Swap widget, you can offer your users everything you know and love about CoW Swap, and more. + Oh, and yes… it does come with the “moo”. + + + + + + + + + + Full protection from MEV + + CoW Swap offers the best MEV protection in the land. Thanks to a delegated trading model that relies + on experts to execute swaps, traders can rest assured that they're safe from the MEV bots. + + + + + + + + + + Surplus-capturing orders + + Every order is surplus-capturing and traders usually earn a little extra in their sell token with each + swap. + + + + + + + + + + Gasless trading + + All gas fees are paid in the sell token for swaps and even for token approvals. Users can enjoy + ETH-free trading every time, even with brand-new wallets. + + + + + + + + + + + + + + Everything You'd Want in a Widget + + + + {FEATURE_ITEMS.map((item, index) => ( + + + + + + + {item} + + + + ))} + + + + + + + + + + + + + Trusted by the best + + + + {CONTENT.trustedDAOs.map((dao, index) => { + const isPng = dao.icon.endsWith('.png') + return ( + + + {isPng ? ( + {dao.title} + ) : ( + + )} + + + ) + })} + + + + + + + + + + + Integrate in 5 minutes or less + + clickOnWidget('click-config-widget')} + > + {' '} + Configure widget{' '} + + + clickOnWidget('click-read-docs')} + > + {' '} + Read docs + + + + + + + + + + + * Important Disclaimer: Use of this widget is subject to the laws and regulations of your + jurisdiction. You are solely responsible for ensuring compliance, and the provider is not liable for any + legal consequences or issues arising from your failure to adhere. Using the widget indicates acceptance of + the Terms and Conditions; if you do not agree, refrain + from using it. + + + + + + ) +} diff --git a/apps/cow-fi/app/(mev-blocker)/layout.tsx b/apps/cow-fi/app/(mev-blocker)/layout.tsx new file mode 100644 index 0000000000..77d7cae96a --- /dev/null +++ b/apps/cow-fi/app/(mev-blocker)/layout.tsx @@ -0,0 +1,5 @@ +import { Layout } from '@/components/Layout' + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return {children} +} diff --git a/apps/cow-fi/app/(mev-blocker)/mev-blocker/layout.tsx b/apps/cow-fi/app/(mev-blocker)/mev-blocker/layout.tsx new file mode 100644 index 0000000000..314ed8f860 --- /dev/null +++ b/apps/cow-fi/app/(mev-blocker)/mev-blocker/layout.tsx @@ -0,0 +1,16 @@ +import { Metadata } from 'next' +import { getPageMetadata } from '@/util/getPageMetadata' +import { CONFIG } from '@/const/meta' + +export const metadata: Metadata = { + ...getPageMetadata({ + title: 'Mev Blocker - The best MEV protection under the sun', + description: + 'MEV Blocker is your personal protection from frontrunning and sandwich attacks for a broad spectrum of Ethereum transactions', + image: CONFIG.ogImageMEVBLOCKER, + }), +} + +export default function LayoutPage({ children }: { children: React.ReactNode }) { + return children +} diff --git a/apps/cow-fi/app/(mev-blocker)/mev-blocker/page.tsx b/apps/cow-fi/app/(mev-blocker)/mev-blocker/page.tsx new file mode 100644 index 0000000000..7d780da547 --- /dev/null +++ b/apps/cow-fi/app/(mev-blocker)/mev-blocker/page.tsx @@ -0,0 +1,516 @@ +'use client' + +import Script from 'next/script' + +import { Color, ProductLogo, ProductVariant } from '@cowprotocol/ui' + +import FAQ from '@/components/FAQ' +import { AddRpcButton } from '@/components/AddRpcButton' +import { Link, LinkType } from '@/components/Link' + +import useWebShare from '../../../hooks/useWebShare' + +import { WagmiConfig, createConfig, configureChains, mainnet } from 'wagmi' +import { publicProvider } from 'wagmi/providers/public' +import { RainbowKitProvider, getDefaultWallets } from '@rainbow-me/rainbowkit' +import '@rainbow-me/rainbowkit/styles.css' + +import IMAGE_ICON_MEVBLOCKER_PROTECT from '@cowprotocol/assets/images/icon-mevblocker-protect.svg' +import IMAGE_ICON_MEVBLOCKER_PROTECT2 from '@cowprotocol/assets/images/icon-mevblocker-protect2.svg' +import IMAGE_ICON_MEVBLOCKER_CHATBALLOON from '@cowprotocol/assets/images/icon-mevblocker-chatballoon.svg' +import IMAGE_ICON_MEVBLOCKER_TRUST from '@cowprotocol/assets/images/icon-mevblocker-trust.svg' +import IMAGE_ICON_QUESTIONBALLOON from '@cowprotocol/assets/images/icon-question-balloon.svg' +import IMAGE_SANDWICH_GUY from '@cowprotocol/assets/images/image-sandwich-guy.svg' + +import { + PageWrapper, + ContainerCard, + ContainerCardSection, + TopicList, + TopicCard, + TopicImage, + TopicTitle, + TopicDescription, + SectionTitleWrapper, + SectionTitleIcon, + SectionTitleText, + SectionTitleDescription, + TopicCardInner, + HeroContainer, + HeroImage, + HeroDescription, + HeroContent, + HeroTitle, + HeroSubtitle, + MetricsCard, + MetricsItem, + ColorTable, + ColorTableCell, + ColorTableHeader, + ColorTableContainer, + TopicTable, +} from '@/styles/styled' + +import LazySVG from '@/components/LazySVG' + +import { FAQ_DATA, TRUSTED_BY_CONTENT, TESTIMONIAL_LIST, MEV_BLOCKER_LIST } from '@/data/mev-blocker/const' + +import { clickOnMevBlocker } from '../../../modules/analytics' + +const isClient = typeof window === 'object' + +// Configure chains and providers +const { chains, publicClient } = configureChains([mainnet], [publicProvider()]) + +// Get default wallets +const { connectors } = getDefaultWallets({ + appName: 'Your App Name', + projectId: 'YOUR_PROJECT_ID', // TODO: Add project ID here + chains, +}) + +// Create the Wagmi client +const wagmiClient = createConfig({ + autoConnect: isClient, + connectors, + publicClient, +}) + +export default function Page() { + const { share, message } = useWebShare() + + const handleShareClick = () => { + share({ + title: 'MEV Blocker', + text: 'Check out MEV Blocker! It helps protect you from MEV damage.', + url: 'https://cow.fi/mev-blocker', + }) + } + + return ( + + + + + + MEV Blocker + The best MEV protection under the sun + + MEV Blocker is your personal protection from frontrunning and sandwich attacks for a broad spectrum of + Ethereum transactions +
+
+ How it works: +
    +
  1. Add the RPC endpoint directly to your wallet
  2. +
  3. Enjoy full, automatic protection from all types of MEV
  4. +
  5. Get paid by searchers for your transactions
  6. +
+
+ + clickOnMevBlocker('click-get-protected-heroSection')} + > + Get protected + +
+ + + +
+ + + +

$84B+

+

volume protected from MEV, across 20M+ transactions

+
+ +

2.2K+

+

ETH rebated to users

+
+ +

$26

+

USD value of median rebate

+
+ + clickOnMevBlocker('click-metrics-dune')} + > + View all metrics on DUNE ↗ + +
+ + + + + + + + Broad spectrum MEV defense + + MEV bots have extracted more than{' '} + clickOnMevBlocker('click-dune-link')} + > + $1.38 billion + {' '} + from well-meaning Ethereum users across a variety of use cases (trading, providing liquidity, minting + NFTs, etc). MEV Blocker is an RPC endpoint that supports these users by offering: + + + + + {MEV_BLOCKER_LIST.map((item) => ( + + + + {item.description} + + + + + + + ))} + + + + + Curious if you've been the victim of an MEV attack?{' '} + clickOnMevBlocker('click-mev-scanner-link')} + > + Use MEV Scanner + {' '} + to find out + + + + + + + + + + + + Get Protected + + Add this RPC endpoint to your wallet to enjoy the full benefits of MEV Blocker. + + + Note: some wallets make you reselect MEV Blocker every time you change networks. + + + + + + + Click to add to your client + + MEV Blocker (Ethereum Mainnet) + + + + + + + + Add manually + + + + + + Network name + + MEV Blocker + + + + New RPC URL + + https://rpc.mevblocker.io + + + + Chain ID + + 1 + + + + Currency symbol + + ETH + + + + Block Explorer URL + + https://etherscan.io + + + + + + + + + + Having trouble? Check your wallet's documentation for instructions on how to update your RPC endpoint + + + + + + + + + + + + Multiple endpoints for multiple protection types + + Advanced MEV Blocker users can select from a variety of endpoints to suit their specific needs. + + + + + + + + + Frontrunning + Backrunning + Tx Revert + + + + + /fast (default) + Protected + Refund + Not protected + + + /noreverts + Protected + Refund + Protected + + + /fullprivacy + Max protection + No rebate + Protected + + + /maxbackrun + Protected + Refund + Protected + + + /nochecks + Max protection + No rebate + Not protected + + + + + + + + To learn more about each of the endpoints MEV Blocker has to offer,{' '} + clickOnMevBlocker('click-mev-blocker-docs-link')} + > + read the MEV Blocker docs + + . + + + + + + + + + + + + What others are saying... + + + + {TESTIMONIAL_LIST.map((testimonial) => ( + + + {testimonial.title} + + {testimonial.description} + + + + + + + ))} + + + + + + + + + + + + Don't let your users get burned by MEV + + + If you're a wallet, a solver, or any project that settles transactions on behalf of users, you should + integrate MEV Blocker to protect them from MEV and earn some extra revenue. + + + clickOnMevBlocker('click-mev-blocker-learn-more')} + > + Learn more + + + + + + + + + + + + Trusted by the best + + + + {TRUSTED_BY_CONTENT.map((item) => ( + clickOnMevBlocker(`click-trusted-by-${item.href}`)} + > + + {item.component || } + + + ))} + + + + + + + + + + + FAQs + + + + + + + + + + + + + Friends don't let friends suffer from MEV damage + + + Share MEV Blocker + + + {message && {message}} + + + +
+ +