CIP-Draft: Affiliate Program Incentives

CIP: Draft
title: Affiliate Program Incentives
author: @middleway.eth
status: Draft
created: 2022-04-08
requires: <>

Introduction

CowSwap offers a referral feature that allows users to generate their own referral link, which when shared with NEW users, will count their trading volume towards referral balance.

Since the launch of the affiliate program in November, referral links have been shared and used to generate up to $371M of trading volume. This volume was generated during a time period where incentive structures were not yet in place. It has proven to be a tool that can help with onboarding new users and thus achieve higher goals benefitting the CoW Protocol ecosystem. Network effects are crucial to CowSwap, as growing order flow increases the chances for finding CoWs, and hence facilitate better prices to all CowSwap users.

The aim of this proposal is to define an incentive structure which rewards users who use their personal affiliate links to attract new traders. Order volume coming from referral links will count pro rata for the distribution of the affiliate program award payout. We expect this to become a meaningful source of trade flow for the protocol.

In a similar fashion, app IDs which can be used by external integrations to count their order stream to CoW Protocol, should equally be rewarded. The focus for this Affiliate program is incetivizing the onboarding of new users while (frontend) integrations usually are a longer term relationships and thus require a different compensation model. For this reason it is suggested to include APP IDs incentives in a different proposal.

Goals

  • Help new users discover CoW Protocol and consequently increase the trading volume on CowSwap and the number of CoWs
  • Lay out an incentive structure that will allow people to benefit from sharing CowSwap with their audiences and onboarding new users to CowSwap

Compensation model

  • Reward distribution will happen on a monthly basis.
  • For the first three months it is proposed to have a minimum monthly reward of 50,000 COW tokens.
  • In order to not limit the scope of the program, it is proposed to add 1 COW tokens to the monthly reward pool for every $1000 worth of Eligible Affiliate Score generated on that month.
  • Example:
    • At the end of the month the Eligible Affiliate Score is $0.5B
    • Rewards in the pool for that month will be 50k + 500k COW tokens
  • The DAO is expected to adjust the token allocation for this program based on its ability to lead to a meaningful impact on new users and volumes of the protocol.
  • Each month the respective award will be distributed proportionally to the participants’ Affiliate Score generated on that month.
  • Any individual participant will not be able to take more than 20% of total rewards in a given month. If any number of participants reach more than 20% of the overall volume generated, they will get 20% each and the remaining rewards shall be distributed proportionally to the remaining participants.
  • Unclaimed rewards will be kept in the user’s balance to be claimed together with the next month’s distribution, thus low value rewards are not lost and can still be claimed in the future with additional rewards.
  • A Dune Dashboard will publicly track the up-to-date state of the affiliate program. Initial dashboard is available here

Affiliate Score

In order to make a fair and effective compensation, it is proposed to use an affiliate score that will be composed of few parameters. Additionally we define a few token lists that will help to mitigate exploitation of the program.

  • Only trades with both the buy and sell token being in the program’s token list (list still to be specified), will be counted towards the Affiliate Score
  • Stable-Stable trades (out of a dedicated stablecoin list) will be counted as stable-factor*volume where stable factor is proposed to be set to 0.1
  • An address volume will only count if it made its first trade through a referral link
  • A single address will be capped with regards to the volume that can count towards the Affiliate Score:
    • Volume of its first 30 trades
    • Volume traded up to 30 days from its first trade on CowSwap
    • The higher of the two, but anyway no more than $1m worth of Affiliate Score

Retroactive reward

  • Exactly the same compensation model will be used for retroactive reward.
  • (Back of the envelope calculation: ±600k COW tokens in total)

Onboarding Rewards

In order to make the program even more attractive and easier to promote, it is proposed to set a one time reward for new traders that are onboarded through the Affiliate Program. In order to prevent users from creating accounts just for getting the reward, the following reward rules are proposed:

  • Accounts that are onboarded to CowSwap with an affiliate link will get 50 COW tokens claimable on the next reward distribution, as long as they hold an ENS name.
  • Limited to 100 users per Affiliate link (per month?)

Mitigating abuse of the program

As many other pseudonyms systems, the program is expected to bring with it sybil attack vectors. For example, people might try to wash trade with multiple of their accounts and thus generate significant trading volume with low cost and no change in position (low risk), which in turn might boost their rewards although realistically their trades provide low to non value to CoW protocol.

It is proposed to set up a reward for people with data analytics skills that can contribute by finding addresses that clearly try to abuse the Affiliate Program. A committee will review applications and decide on a reward based on the robustness of the data collected, the severity of the abuse found, number of addresses involved etc.

The committee might be the same one for the Grants Program or a dedicated one. The proposed maximum monthly reward is 60k COW tokens which the committee can but is not required to allocate for applications every month.

Main points that still need discussion and decisions:

  • Should the program treat app IDs the same way as referral links?
  • Should the CowDAO come up with a different incentive program for applications and integrations that use app IDs?
  • Token allocation amounts for the retroactive and for the monthly rewards
  • Token lists to be used for counting volume towards the affiliate score
6 Likes

Instead of doing a distribution based on the monthly activity I would like to see something limited to an allocation (not time limited). Distribution can be monthly (or whatever, the easier the implementation is, better it is) but not using a fixed monthly reward. If the monthly referral volume is low, the program should reward less tokens (not the same amount). In my opinion, this solution is more efficient, fair and will avoid people trying to game the system near the end of each month.

For simplicity, if we retroactively reward 500,000 tokens (for ~200m in volume), we will reward an average of 2.5 Token for each 1k traded (via the affiliate program). I think it’s a fair reward for early users. From here (2022-04-08 or any fair date before this), as example, we could give 1 token for each 1k traded, meaning we would need an allocation of 1m tokens to reach 1b in referral volume (we can set a lower goal and extend the program if needed, it’s just an example). Using the affiliate score this numbers should be a bit different but achieving more volume with the same allocation is fine.

Btw, stable coin swaps should be ignored. I get why CoW Team did that for the airdrop but for an affiliate program we shouldn’t count stables at all.

2 Likes

Just as an update - the referral data shown in the linked dashboard was a bit dated (since we have to manually insert IPFS data related to the appId hash in the orders) and hadn’t been refreshed in a couple of months. The actual referral volume at the time of writing is $371M.

Please visit the same linked dashboard above to see the most recent data.

3 Likes

Thanks for your work and proposal Middleway.

I’m not sure if it’s technically possible or relevant here, but I just had this though, about how during the past months with the airdrop we have seen a bunch of people who generated a lot of affiliate trade volume (those are probably Twitter influencers) but never actually really used CowSwap that much themselves (and then were not eligible for the airdrop).

With that future affiliate program (if voted by the Cow DAO) I suppose we might end up again with people who generate a lot of affiliate trade volume but are not necessarily actively using CowSwap themselves which is probably not an optimal solution I think (the best advocates for CowSwap are probably the people who adopted it for their own trades…).

I guess that adding actual trade/volumes requirements for the affiliate incentives receiver address (like they would only receive affiliate incentives if they used CowSwap too) would most likely be counter productive and probably makes the affiliate program less appealing…
But what about proposing trading fee discounts to those who generated a good amount of affiliate volume/trades, in a similar way than for COW holders (CIP-3), so that while they will receive incentives for the affiliate program they would also be directly incentivised to adopt themselves CowSwap as their main DEX too…

(But sorry this is just an idea I had, maybe I’m wrongly focusing on a very small aspect of the whole affiliate program which is possibly not an actual concern at all and the proposed solutions might just add unnecessary cost and complexity to the proposed program…)

1 Like

Good proposal! Is there a way to check if new users that onboarded through referrals also stayed trading and became regular user?
Maybe its also an idea to make a leaderboard with NFTs to create some kind of competition.
For retroactive rewards, maybe its better to keep tokens in the treasury and count past referral volume as volume for the first month this runs. In that way we can keep the tokens and use for other purposes.

1 Like

Yeah this is a different model, giving fixed reward per volume traded. The nice part is affiliates do not compete against each other but gets fixed amount for the volume they were able to refer.
This also introduces potentially uncapped reward amount. So it might exceed what the DAO is willing to distribute, and might increase the profitability of trying to wash trade.
Having said that, I’m not opposed to changing the model, just surfacing some points to consider.

Can you explain the reasoning?
The reason for discounting stable volume is just because it is much easier to create high volumes with low cost. So for mitigating stable-wash-trading, discounting it might make sense. Having said that, stable coin trading is important to enhance CoWs. So I’m not convinced ignoring those completely make sense.

I agree that on the higher level people that are using cowswap might be very good advocates for the product. But sometimes it doesn’t really matter. If someone can leverage their reach to make many new users familiar with cowswap, I think it makes sense to incentivize it. Then the Affiliates will get COW tokens that makes them aligned and also gets then discounts…

We can continue over time to observe if those users are returning to cowswap or not…

This might make it a bit unfair to people that shared the referral link in the past, and also make the first month not attractive as it will have big volume on day 0.

2 Likes

I wouldn’t exclude the Affiliate Score. It’s just a different distribution but we need to keep caps in place (30 trades and 1m seems fine to me) like in your initial proposal. Once the program is depleted it ends (no more distribution). Instead of lasting X time, we don’t know how long it will last (we can still try to dynamically predict) but we know exactly how much we will give.

And about this:

I would suggest this is enforced every time the distribution is made. Meaning, when the distribution is done (monthly, weekly, whatever) no one can receive more than 25% of the overall volume generated in that period. I’m just not exactly sure with the 25%. Maybe it should be even lower. Something between 10 and 20% seems better to me because I believe it will help discouraging and detecting bad actors but who knows. Bad actors always find creative ways to do what they do. For instance they can share their referral links from multiple accounts but it should also be easier to detect patterns at that point.

My reasoning was since we don’t have much CoWs per batch (yet), stable swaps wouldn’t be relevant at all. I didn’t have this notion but if it is so important then just let’s keep it like in the proposal.

I also agree with this. I don’t see any issue if people using the affiliate program don’t trade much but eventually we could at least require this accounts to make a few trades (2, 3…) to validate they used and understand CowSwap. We probably don’t want people just sharing the referral link without understanding how CowSwap works (from a user perspective, they don’t need to be experts or “super” users).

We can make the difference between sharing it earlier or now kind of irrelevant. Making the program completely linear (from day 1) is fine for me but I never shared my referral and people that did may find it unfair to be treated the same way as new participants.

2 Likes

It’s a good idea for the cow protocol. I fully support these ideas, which are a stepping stone to reflect the true value of the cow token.

1 Like

I still have the idea that this system is highly gameable, (maybe too high). I could just make two addresses, let the first refer to the other and start trading on that one and be eligble?

1 Like

Completely true…
I don’t think this is such a bad outcome. If someone refers himself and is actually doing a lot of genuine trading that’s fair (IMO).
The problem start if you refer two of your addresses and try to wash trade. This just extracts value from the program but doesn’t add a lot of value to the protocol.
I hope this kind of activity will be detectable in most cases by analysis of CowSwap trader activity. This is the reason for adding a bounty for anyone that comes up with decent evidence for such activity (which then can just be excluded from the program).

1 Like

I don’t think we will find a perfect solution to prevent all the bad activity that can come but I do believe we can mitigate this issues and we can make it harder for bad actors. The more accounts a bad actor will need to use, easier it is to find them.

For instance if participants revenue is limited to just 10% of the volume (per account) in that period and someone is trying to extract 20%, 30% or more (of the revenue in that period - weekly, monthly, whatever), they will be forced to use multiple accounts, sharing their referrals with even more accounts. The more accounts they use, the more patterns they will create and more prone to mistakes they will be. Also, they probably will end up doing more volume in each account that will not be rewarded. I know that limiting the program reward to 10% in each period can be a bit unfair to some (that’s why I’m still not sure about how much we should allow) but we really need to make the Bad actors life as hard as we can.

About Wash Trading we can enforce that anyone doing some Wash Trades will be banned from the program (meaning all their volume is ignored and if they shared referral links, they will not receive rewards). I know we can just ignore some trades but I believe we should do more and make clear that we don’t promote or encourage Wash Trading in any way or form.

Also, nico_st_29 suggested something on discord that can help:

Thanks for your answer. If there’s a minimum of COW tokens required at least the malicious users would need to split their COW token allocation, possibly needing to buy more to be able to refer their own accounts. That way the ecosystem benefits a bit still

If we require participants to hold a “relatively small” amount of COW (I would say between $100 and $300 USD in COW) it can also be a discouraging factor for bad actors. I think we can put some eligibility factors in place that will force bad actors to fund/activate their accounts and eventually help us detecting them. I would also ban from the program accounts without significant activity funded by tornado cash.

Example, assuming we put in place some factors previously mentioned: If an account was funded by tornado cash and they buy some COW (to be eligible), they do 2 or 3 trades on CowSwap and not much more but they have some rewards from the program (reaching or not the limit) they should be banned from the program (if we make this clear they can’t complain), It’s way to suspicious (and quite impossible to know if everything is legit or not). If someone has quite some significant activity (hundreds of apparently legit transactions to and from that account) we shouldn’t ban that account from the program just because they used tornado cash.

That said, adding eligibility rules to participants seems a good idea. We don’t need to add many, but we need to add some. I like the idea of few CowSwap trades (2 or 3) + holding some COW (or vCOW?).

1 Like

To combat ‘bad actors’ I suggest that, while still permitting wallets not holding any $cow tokens, the DAO implements a claim function of rewards which allow claiming any surplus amount of $cow above a threshold (say: 777 $cow).

The threshold amount of 777 $cow needs to be held on to for any subsequent claiming of rewards, else eligibility to claim rewards if forfeited. Example: a smart marketer with a decent followship pulls in, say, 500 new wallets doing X amount of trades with total volume of Y. Rewards for the referral accumulate in $cow. Whenever the affiliate decides to claim rewards, the claimant will be presented two options:

  • claim any surplus amount, leaving 777 $cow ‘locked’ to be eligible for next rounds of reward claims
  • or, claim the total amount (including the 777 $cow appropriated for future eligibility to receive rewards), but be ineligible to claim rewards for any referees in the future (forfeits any claims for any volume generated for these referred wallets henceforth)

I believe - strongly - the entry barrier should be super-low or even non-existent for new affiliates to bring in new volume and number of trades (no requirements, such as holding X amount of $cow in the first place or any other prohibitive measure).

1 Like

Replacing a “minimum COW holding” for a “minimum affiliate program balance” mechanism is fine for me. I like that idea more than holding some COW because people don’t need to buy COW but they will keep holding the minimum amount (in their affiliate program balance) while they want to be eligible.

I still would lower that limit, let’s say 333 COW (or less, something equivalent to $50 or $100), instead of 777 COW.

I agree with the very low barrier but I wouldn’t make it non-existent to force bad actors to move funds to empty wallets (if they want to go that way). If we set 2 or 3 cowswap trades requirement (no matter what tokens people use) then they will be forced to get funds in their wallets, if we don’t, they can just start with an empty wallet.

I don’t think obligating this is very decentralized or permissionless. That being said, respecting that certain precautions have to be taken to deter abuse of the affiliate system, I like to make it easier for successful affiliates to be onboarded into the CoW Affiliate Programme.

A relatively high chosen number would, imo, aid in funneling ‘profitable’ affiliates into the system (however it is set up finally). Remember: you want to reward and support your performing affiliates in any way possible (also in order to retain them). We would not have to go through the pain of explaining why an affiliate can not set up a fresh wallet to receive rewards or why the affiliate has to fulfil the precondition of ‘moving assets’ (of what amount anyway?) to such a wallet etc.

In any case: if we’re talking performing (well performing) affiliates in our programme, 777 $cow (whatever the actual price at any point) can be a trivial amount for the affiliate, but serves very well as deflationary add-on, if you like.

Wdyt about this?

1 Like

I get your point. I just don’t like a “free-for-all” affiliate program, after all it’s not about using something, it’s about collecting rewards/revenue. If people want to be eligible asking them to do few trades (2 or 3) shouldn’t be an issue and it will help detecting bad actors (the more they need to interact with their wallets better it is to find patterns).

Higher minimum balances (777 as example) as the downside effect that less performing affiliates will give up sooner than later (if they even participate), anyway it’s like you said. If the program wants to focus on participants that perform better I don’t see this 777 as a barrier to them.

It’s more about what the focus of the program should be? Everyone (lower minimum balances)? Or performing affiliates (higher minimum balances)?

if you look at the data, you will notice there are already major referrals driving good chunks of volume to cowswap:

CoW - Referral Data (dune.xyz)

So, I suppose, any kind of programme would be for them (and is for them). It’s nice, when anyone can tell their friends & family and succeeds in attracting $50k volume - anything we set to plan out must involve the highest ranking referrals. All effort is appreciated, get me right here, but let’s not impose restrictions which might turn out to have little to no effect anyhow.

Also, in case you missed my point (could have explained that better I suppose): as a referral (an affiliate) you first have to earn these 777 (or whatever number will be used) $cow tokens; any number of tokens earned after that, you could take out penalty-free and regularly. i.e.: you refer wallets, your wallet (whichever you determine to receive the rewards) gets filled over time with $cow rewards - the moment you like to withdraw/claim, you are presented with the option to claim any amount of tokens above the 777 token threshold and remain eligible to receive rewards from your referees in the future

or - claim all, but forfeit future claims to rewards from your referred wallets (and it goes without saying, that already referred wallets cannot be referred again by another affiliate).

This way, the DAO does not interfere with the freedom of choice of affiliates but rather give them the choice to remain in the programme and generate rewards from their referees - or, the DAO let’s you claim accumulated rewards, though only once (and for all). Without being eligible for future rewards (because the option was chosen to withdraw the ‘safety deposit’ of 777 $cow tokens as well).

You could also say, this incentivizes affiliates to reach the corridor (the 777 $cow threshold) sooner and efficiently (make effort) to claim rewards. It is also not an amount any affiliate needs to purchase (because initial rewards accumulate on the wallet), except they already own that amount of tokens on the designated wallet already. Same rules of staying eligible for rewards apply.

wdyt about this?

1 Like

I updated the proposal, main points are:

  • @prometheus suggestion for performance-based (volume) reward pool
  • Updated rules for the Affiliate Score
  • Added “Onboarding Rewards” for the onboarded users

Trying to better understand @prometheus and @Austrian_Guy suggestions:

  • Allow continued rewards only if a minimum of x COW tokens are kept in the Affiliate’s reward balance
  • Allow continued rewards / eligibility only for accounts that have traded a minimum y trades on CowSwap

My view on those is, both are designed to add friction to the program in order to mitigate abuse. I agree that this is a trade off, and as we add more friction we will get less abuse (but potentially less traction for the program overall).
In my view the ideal way to deter abuse is to filter it retroactively with analytics. Just the fact that this is part of the program should really make people more cautious spending money on an attempt that might yield zero benefit. This adds ZERO friction to legit Affiliates but IMO might be enough to deter abuse.
If you have specific reasons to believe a meaningful “abuse” is practical with minimal detectable patterns and low cost to the abuser, happy to discuss

3 Likes

adds zero friction, but potentially considerable overhead: if compensation for supplying analytical skills is to be provided, I’d like to see the figures or projections included in the proposal. If it will not be added to the workload of the Grants Committee, will a Sub-DAO be created for this purpose with CowDAO as it’s first client?
I’m not opposing anything, just pointing out these parts seem still opaque and not specified.

What’s your suggested timeframe of implementation for this proposal?

1 Like

For people with some knowledge it isn’t that hard to achieve meaningful “abuse” with low cost. If we can detect it or not is something harder to know since some of the strategies that can be used to “drain” the affiliate program can also be legit strategies to do some market arbitrage.

Anyway, I don’t believe in perfect solutions. We can start with this updated version and do some “minor” adjustments if needed in the future. If we need to adjust something, adding/changing rules in the affiliate score should be enough.

About the program token list we probably can and should make it “dynamic” (we can use one list for the retroactive rewards and update that list every month). If we don’t add any “extra” friction for continued rewards/eligibility we can at least make this list non static. This can be a mess for anyone trying to game the system unless they focus on the most traded pairs but at some point if we find something “out of place” in one of this pairs we can just remove that pair from the list (for the specific month). Obviously this will impact everyone for that month but it’s just a last resort option (if needed).

Concept:

  • Default List can be made using the most traded pairs of the month (based on volume and total trades for the month, I will check some stats and provide more details).
  • That list is then adjusted and vetted by the same committee responsible for the Mitigation abuse of the program (in order to be used for the monthly reward distribution).
1 Like

I am still curious how this plays out and if the program will be ‘abused’ massively or it will get the protocol a lot more volume and CoWs. I think therefore its best to let the program run for some months initially and then make a CowDAO vote to see if the program should be running after that or not. Like some sort of testperiod.