Skip to content

Commit

Permalink
Split refactor faq (#2592)
Browse files Browse the repository at this point in the history
* Update FAQ to reflect Token Launch

This PR pushes a new content section from lines 559 - 627 that addresses questions related to the token launch. I have tried format everything as good as I possibly know/can, apologies if it needs to be reworked. 

Questions are: 
562 - Does CowSwap Have a token? 
580 - Is there a proposal to make vCOW transferrable?
585 - what is the purspose of the COW tokens?
605 - what was the criteria for the token airdrop?

* Fix code style issues with Prettier

* Fix building error

* Add space

* Update index.tsx

* Fix code style issues with Prettier

* Split and refactor FAQ

* Fix links

* Add footer

* Add footer to index too

* Update metrics

* Fix internal links

* Hide back in home

* Link to FAQ

* Correct year

* Fix typo. Fixes #2067

Co-authored-by: Alex V <[email protected]>
Co-authored-by: Lint Action <[email protected]>
  • Loading branch information
3 people authored Mar 30, 2022
1 parent 97a9e05 commit e3df73a
Show file tree
Hide file tree
Showing 14 changed files with 1,184 additions and 1,016 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ function RequestCancellationModal(props: RequestCancellationModalProps): JSX.Ele
<p>
This means that a solver might already have included the order in a solution even if this cancellation
is successful. Read more in the{' '}
<a target="_blank" href="/#/faq#can-i-cancel-an-order">
<a target="_blank" href="/#/faq/trading#can-i-cancel-an-order">
FAQ
</a>
.
Expand Down
2 changes: 1 addition & 1 deletion src/custom/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export const GAS_FEE_ENDPOINTS = {
[ChainId.XDAI]: 'https://blockscout.com/xdai/mainnet/api/v1/gas-price-oracle',
}

export const UNSUPPORTED_TOKENS_FAQ_URL = '/faq#what-token-pairs-does-cowswap-allow-to-trade'
export const UNSUPPORTED_TOKENS_FAQ_URL = '/faq/trading#what-token-pairs-does-cowswap-allow-to-trade'

// fee threshold - should be greater than percentage, show warning
export const FEE_SIZE_THRESHOLD = new Fraction(10, 100) // 30%
Expand Down
13 changes: 12 additions & 1 deletion src/custom/pages/App/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,17 @@ const CookiePolicy = lazy(() => import(/* webpackChunkName: "cookie_policy" */ '
const TermsAndConditions = lazy(() => import(/* webpackChunkName: "terms" */ 'pages/TermsAndConditions'))
const About = lazy(() => import(/* webpackChunkName: "about" */ 'pages/About'))
const Profile = lazy(() => import(/* webpackChunkName: "profile" */ 'pages/Profile'))
const Faq = lazy(() => import(/* webpackChunkName: "faq" */ 'pages/Faq'))
const NotFound = lazy(() => import(/* webpackChunkName: "not_found" */ 'pages/error/NotFound'))
const CowRunner = lazy(() => import(/* webpackChunkName: "cow_runner" */ 'pages/games/CowRunner'))
const MevSlicer = lazy(() => import(/* webpackChunkName: "mev_slicer" */ 'pages/games/MevSlicer'))

const Faq = lazy(() => import(/* webpackChunkName: "faq" */ 'pages/Faq'))
const GeneralFaq = lazy(() => import(/* webpackChunkName: "faq" */ 'pages/Faq/GeneralFaq'))
const ProtocolFaq = lazy(() => import(/* webpackChunkName: "faq" */ 'pages/Faq/ProtocolFaq'))
const TokenFaq = lazy(() => import(/* webpackChunkName: "faq" */ 'pages/Faq/TokenFaq'))
const TradingFaq = lazy(() => import(/* webpackChunkName: "faq" */ 'pages/Faq/TradingFaq'))
const AffiliateFaq = lazy(() => import(/* webpackChunkName: "faq" */ 'pages/Faq/AffiliateFaq'))

if (SENTRY_DSN) {
Sentry.init({
dsn: process.env.REACT_APP_SENTRY_DSN,
Expand Down Expand Up @@ -101,6 +107,11 @@ export default function App() {
<Route exact strict path="/about" component={About} />
<Route exact strict path="/profile" component={Profile} />
<Route exact strict path="/faq" component={Faq} />
<Route exact strict path="/faq/general" component={GeneralFaq} />
<Route exact strict path="/faq/protocol" component={ProtocolFaq} />
<Route exact strict path="/faq/token" component={TokenFaq} />
<Route exact strict path="/faq/trading" component={TradingFaq} />
<Route exact strict path="/faq/affiliate" component={AffiliateFaq} />
<Route exact strict path="/play/cow-runner" component={CowRunner} />
<Route exact strict path="/play/mev-slicer" component={MevSlicer} />
<Route exact strict path="/anyswap-affected-users" component={AnySwapAffectedUsers} />
Expand Down
185 changes: 185 additions & 0 deletions src/custom/pages/Faq/AffiliateFaq.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
import Page, { Content } from 'components/Page'
import { LinkScrollable } from 'components/Link'

import { ExternalLinkFaq, Wrapper } from './styled'
import { Footer } from '.'
import { useToC } from './hooks'
import ToC from './ToC'

export default function AffiliateFaq() {
const { toc, faqRef } = useToC()

return (
<Wrapper ref={faqRef}>
<ToC toc={toc} name="Affiliate Program FAQ" />
<Page>
<Content>
<h2 id="affiliate">Affiliate program</h2>

<h3 id="what-is-the-profile-page">What is the Profile page?</h3>

<p>
It is a page where you can see your number of trades and volume that you have done with the wallet you have
connected with.
</p>

<p>
Additionally, you will be able to get your own referral/affiliate link, so you can share it with others, and
if you do so, you will also be able to see the number of trades and volume that your referral link gets
credited from the users who followed your link and interacted with the DEX.
</p>

<h3 id="in-which-networks-it-is-available">In which networks is it available?</h3>

<p>At this time, the affiliate program only works for Ethereum Mainnet.</p>

<h3 id="are-there-any-rewards-for-sharing-the-referral-link">
Are there any rewards for sharing the referral link?
</h3>

<p>
The affiliate program will initially run as a trial and therefore there are currently no announced rewards.
The tracking, however, has already started.
</p>

<p>
CowSwap&apos;s positive network effect scales exponentially with more people using it, therefore, the
affiliate program aims to acknowledge which users are contributing more to the success of the protocol.{' '}
</p>

<p>
We now briefly explain CowSwap’s positive network effect. CowSwap&apos;s name comes from the economic
phenomenon &quot;Coincidence of Wants&quot;, where users&apos; orders can be matched with each other to
obtain better prices. When the protocol finds a CoW, trades are directly settled among traders, which allows
saving on slippage, gas, and LP fees. The network effect of CoWs increases alongside with the number of
traders using the protocol&#59; the more users we have sending orders to the protocol, the better the prices
and gas savings the protocol is able to offer. Our new CoW-filiate program is aiming to increase this
positive network effect.
</p>

<h3 id="who-can-share-the-referral-link">Who can share the referral link?</h3>

<p>
Everyone can share a link, you only need a valid Ethereum wallet address to create your own personal link.
</p>

<h3 id="who-can-follow-the-referral-link">Who can follow the referral link?</h3>

<p>
Everyone! Please share the excitement for the CowSwap protocol & dapp. It would really make a difference for
the Cow-mmunity if you share it with your friends, Twitter/YouTube followers, or anyone that would be
interested.
</p>

<p>
Share your referral link with all your friends if you think they can be interested in the qualities Cowswap
has to offer. These qualities range from ETH-less trading experience, MEV protection, no fees for failed
transactions, and more.{' '}
<span role="img" aria-label="cow">
🐮
</span>
</p>

<p>
Note that trades and volume will only be credited to your wallet if the user has not traded in CowSwap with
that address before, and their first trade is done after following your link.
</p>

<h3 id="what-is-the-source-of-truth-for-accounting-trade-volume">
What is the source of truth for accounting trade volume?
</h3>

<p>
The referral program fetches data from Dune, and therefore, the USD value is taken from the information
available in Dune under price feed. If the token is not in the Dune price feed, then volume will not be
counted.
</p>

<h3 id="why-do-not-i-see-any-referral-trades-in-my-profile-page">
I shared my referral with a friend, who then also traded. Why do I not see any referral trades in my profile
page?
</h3>

<p>There could be a few reasons for this:</p>
<ol>
<li>
Your friend was trading tokens that do not have a price feed available (see FAQ entry{' '}
<LinkScrollable
href={'/faq/affiliate#why-is-my-total-trade-referral-trade-volume-smaller-than-the-real-volume'}
>
Why is the volume smaller than the real volume?
</LinkScrollable>
).
</li>
<li>The data has not yet propagated from the chain to our backend.</li>
<li>
Your friend had already traded with that account, which does not count towards referral volume (see FAQ
entry{' '}
<LinkScrollable href={'/faq/affiliate#who-can-follow-the-referral-link'}>
Who can follow the referral link?
</LinkScrollable>
).
</li>
</ol>

<h3 id="why-is-my-total-trade-referral-trade-volume-smaller-than-the-real-volume">
Why is my total trade/referral trade volume smaller than the real volume?
</h3>

<p>
Some tokens might not yet have a proper price feed linking them to a USD estimation at the date/time when
your trade was executed. When that happens the trade volume is set to 0. Thus, your total volume can be
smaller, or even be shown as 0 (see FAQ entry{' '}
<LinkScrollable href={'/faq/affiliate#what-is-the-source-of-truth-for-accounting-trade-volume'}>
What is the source of truth for accounting trade volume?
</LinkScrollable>
).
</p>

<h3 id="why-do-i-see-more-trades">
Why do I see more trades and referrals in my profile page than I actually see in the activity list?
</h3>

<p>The number of trades on the profile page is calculated based on on-chain data.</p>
<p>We have two publicly facing interfaces where both use the same contracts, which are:</p>
<ul>
<li>
The production version:{' '}
<ExternalLinkFaq href="https://cowswap.exchange" target="_blank" rel="noopener noreferrer">
https://cowswap.exchange
</ExternalLinkFaq>
</li>
<li>
The public test version:{' '}
<ExternalLinkFaq href="https://barn.cowswap.exchange" target="_blank" rel="noopener noreferrer">
https://barn.cowswap.exchange
</ExternalLinkFaq>
</li>
</ul>

<p>
Even though both use the same contract, the backend services, solvers and infrastructure are independent.
</p>

<p>
Thus, when accessing{' '}
<ExternalLinkFaq href="https://cowswap.exchange" target="_blank" rel="noopener noreferrer">
https://cowswap.exchange
</ExternalLinkFaq>{' '}
you will see orders/trades placed only using this interface. The same is true for orders/trades placed on{' '}
<ExternalLinkFaq href="https://barn.cowswap.exchange" target="_blank" rel="noopener noreferrer">
https://barn.cowswap.exchange
</ExternalLinkFaq>
.
</p>

<p>If you ever traded on both, you might have more trades than you would expect.</p>

<p>In the future, the data will be consolidated and this number will match your expectations.</p>

<Footer />
</Content>
</Page>
</Wrapper>
)
}
162 changes: 162 additions & 0 deletions src/custom/pages/Faq/GeneralFaq.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
import Page, { Content } from 'components/Page'
import { ExternalLinkFaq, Wrapper } from './styled'
import { StyledInternalLink } from 'theme'
import { Footer } from '.'

import { useToC } from './hooks'
import ToC from './ToC'

export default function GeneralFaq() {
const { toc, faqRef } = useToC()

return (
<Wrapper ref={faqRef}>
<ToC toc={toc} name="General FAQ" />
<Page>
<Content>
<h2 id="general">General</h2>
<h3 id="what-is-cowswap">What is CowSwap?</h3>
<p>CowSwap is the first trading interface built on top of CoW Protocol.</p>
<p>
CowSwap is a Meta DEX aggregator that allows you to buy and sell tokens using gasless orders that are
settled peer-to-peer among its users, or into any on-chain liquidity source while providing MEV protection.
</p>

<h3 id="why-is-cowswap-a-meta-dex-aggregator">What makes CowSwap a &quot;Meta&quot; DEX aggregator?</h3>
<p>
Cowswap is built on top of the CoW Protocol which matches trades via batch auctions for a variety of
on-chain liquidity sources.
</p>
<p>
Trades can be settled via underlying on-chain AMMs directly or via DEX Aggregators, depending on which
pool/path offers the best price. It is thus essentially acting as a DexAggregator of the DexAggregators.
</p>
<p>
In addition to that, before finding the best price for a trade from available on-chain liquidity, CoW
Protocol first seeks a coincidence of wants within the existing batch to offer an even better price than any
pool can.
</p>

<h3 id="what-is-mev-and-how-much-mev-has-been-extracted-from-users-to-date">
What is MEV and how much MEV has been extracted from users to date?
</h3>

<p>
Defined by Phil Daian et al. in the{' '}
<ExternalLinkFaq href="https://arxiv.org/abs/1904.05234">paper Flash Boys 2.0 </ExternalLinkFaq>, MEV is a
measure of the profit a miner (or validator, sequencer, etc.) can make through their ability to arbitrarily
include, exclude, or re-order transactions within the blocks they produce.
</p>

<p>
Since January 2020 until now (March&#39;22), the total amount of value extracted by miners (etc.) on
Ethereum transactions has reached{' '}
<ExternalLinkFaq href="https://explore.flashbots.net/">
$ 605 Million, including successful and failed transactions.
</ExternalLinkFaq>
</p>

<h3 id="to-what-does-the-term-coincidence-of-wants-cows-refer">
To what does the term Coincidence of Wants (CoWs) refer?
</h3>

<p>
<ExternalLinkFaq href="https://en.wikipedia.org/wiki/Coincidence_of_wants">
Coincidence of Wants (CoWs)
</ExternalLinkFaq>{' '}
can be explained as “an economic phenomenon where two parties each hold an item the other wants, so they
exchange these items directly.” CowSwap facilitates CoWs among traders and their orders through using batch
auctions as a core mechanism.
</p>

<p>
This means, on CowSwap, when two traders each hold an asset the other wants, a trade can be settled directly
between them without an external market maker or liquidity provider. This leads to better prices for the
individual traders (because traditionally market makers add a fee — referred to as spread — for their
service).
</p>

<p>
CowSwap allows for coincidence of wants (CoWs) orders to be traded directly against one another. Only the
excess order amounts that cannot be settled directly with other CowSwap traders are sent to the underlying
AMMs (automated market makers).
</p>

<h3 id="how-am-i-protected-from-mev-arbitrage-front-running-sandwiching-with-cowswap">
How am I protected from MEV (Arbitrage, Front running, Sandwiching) with CowSwap?
</h3>

<p>
CowSwap leverages batch auctions with uniform clearing prices for all trades in the same batch. Because of
the uniform clearing price, there is no need for ordering the transactions within a single batch. Because
everyone receives the same price across assets it’s not possible for <b>any</b> value to be extracted by
placing transactions in a certain order. This prevents the primary strategy used in MEV.
</p>

<p>
Batches are decentrally settled by external, independent parties (called “solvers”) on-chain. A solver is a
person or entity who submits order settlement solutions that maximize trade surplus for a given batch.
Solvers are incentivized to implement professional transaction management techniques that allow them to set
very tight slippage bounds on any interactions with external liquidity sources (e.g., trading CoW excess on
Uniswap). This dramatically reduces the manipulation surface of miners and front-runners.
</p>

<p>
Additionally, depending on the composition of the orders that are submitted and are valid for a given batch,
the existence of CoWs may significantly reduce the amount that has to be exchanged via external MEV-prone
protocols, such as Uniswap.
</p>

<h3 id="how-does-cowswap-determine-prices">How does CowSwap determine prices?</h3>

<p>
CowSwap settles batch auctions in discrete time intervals. In the absence of other traders, CowSwap matches
traders against the best available on-chain liquidity (note: currently the solvers have integrated liquidity
from Uni v2, Uni v3, Balancer, Balancer v2, Sushiswap and the liquidity that Aggregators such as Paraswap,
Matcha and 1inch leverage).
</p>

<p>
If CoWs (Coincidence of Wants) orders exist in a batch, the “smaller” order is matched fully with the larger
order. The excess of the larger order is settled with the best available base liquidity CowSwap integrates
with, which is, for now, Uniswap. The clearing price for both orders will be the price of the token with the
excess amount on external liquidity sources to which the protocol is connected.
</p>

<p>
Finding the best settlement for orders is a challenging task, which very soon may have its own{' '}
<ExternalLinkFaq href="https://forum.gnosis.io/t/gpv2-road-to-decentralization/1245">
decentralized competition
</ExternalLinkFaq>
.
</p>

<h3 id="is-cowswap-secure-to-use">Is CowSwap secure to use?</h3>

<p>
As of August 11th, 2021, CowSwap is no longer in alpha and moves to a final, stable version. The underlying
CoW Protocol Smart contracts have been upgraded to integrate tightly with Balancer v2.
</p>

<p>
With this upgrade, CowSwap evolves into its most stable, performant form: the code has been thoroughly and
carefully tested, peer-reviewed and fully{' '}
<ExternalLinkFaq href="https://github.com/gnosis/gp-v2-contracts/blob/main/audits/GnosisProtocolV2May2021.pdf">
audited
</ExternalLinkFaq>
. Whilst CowSwap has taken a major step forward in terms of security and stability, as with other crypto
protocols or dapps, your use is at your own risk.{' '}
<strong>
Please review our{' '}
<StyledInternalLink to="/terms-and-conditions">
<strong>Terms and Conditions</strong>
</StyledInternalLink>
.
</strong>
</p>
<Footer />
</Content>
</Page>
</Wrapper>
)
}
Loading

0 comments on commit e3df73a

Please sign in to comment.