FLX Emission Boosties

I think reward boosting is very hard to design.

  1. The goal is to give individual reward boost when fulfilling certain requirements. These requirements comes with a cost. People will work around that cost by pooling together to get a single boost shared for multiple people. Examples are Convex/Curve. If such tools aren’t available, you’ll only get concentration (aka: whales only) because of point 2. Imo, to be effective, boost require sibyl resistance.

  2. If the boost is meaningful, game theoretically, you participate with max boost or you don’t (Again, see what’s happening with Curve). Because by farming with boost you earn at the detriment of others without boost. This would force smaller players out. So at equilibrium, everyone is boosted. Instead, you could have simply enforce the rules on the original distro.

  3. Time weighting with past participation is problematic to me. This will discourage new people to join. I would prefer time weighting by commitment of future participation (aka: locking). However, this is harder to do off-chain.

  4. About giving boost based on staked amount. Philosophically, it makes little sense to give extra the more you already have. Ideally, Increased capital should translates into diminishing returns. However, in practice the boost is capped, so the effect is limited.

TLDR: I strongly support new ideas to better aligned participants and I think everyone agree. But I think when discussing boost, we’re all taking sibyl resistance for granted. Boost will strictly result in increased concentration. Either driving out smaller participants either through pooling mechanisms that basically bypass boost, making it inefficient.

  1. is the magic of Convex, unfortunately this is what the market likes and wants.

  2. is different for us, you don’t max boost, you earn boost over time.

  3. we don’t do past participation. Commitment has to be done through smart contracts and at this point it can take months to ship, auditors are full and this is critical infra.

  4. need a way to prevent someone staking $0.001 and get max boost, not fair to those who stake more.

@pelvis4084 reposting formulas but now I discount the boost for stake size by 10x. Instead of doing 1 + percentage_staking_pool / 100 we do 1 + percentage_staking_pool / 1000.


Notice that Anna has 33.33% (0.3333x) of the staking pool and Bob has about 66.67% (0.6667x). For each staker, we determine their stake size weight by doing 1 + percentage_staking_pool / 1000. So the weights will be as follows:

Name Dollar Amount Staked Boost
Anna $1M 1.0333
Bob $2M 1.0667
Charlie N/A 1

Finally, we multiply the reward boosts from each stake’s age with the reward boost calculated for each stake size in USD. We get the following results:

Name Total Boost
Anna 2.58325
Bob 1.60005
Charlie 1

Applying the Boost to Monthly Rewards

Assume that this is the monthly reward distribution without applying reward boosts:

Name Base FLX Rewards Boost
Anna 200 FLX 1
Bob 350 FLX 1
Charlie 200 FLX 1

Taking into account the total boost calculated in the last step, the adjusted rewards would look like this:

Name Boosted FLX Rewards Boost
Anna 373.72 FLX 2.58325
Bob 231.51 FLX 1.60005
Charlie 144.77 FLX 1

Basically, we sum up all boosts, then determine what percentage of the summed up boost is allocated to each staker and then that same percentage is used to determine how much FLX is given to each staker out of total FLX distributed in a campaign.

Practical example to determine Anna’s reward:

  1. Sum up all FLX rewards: 200 + 200 + 350 = 750 FLX
  2. Sum up all boosts: 2.58325 + 1.60005 + 1 = 5.1833
  3. Determine Anna’s percentage out of the summed up boost: 2.58325 * 100 / 5.1833 = 49.83%
  4. Use the percentage to calculate the FLX reward allocated to Anna out of the total FLX rewards: 0.4983 * 750 = 373.725 FLX

A few comments on Dr Stone’s proposal as it currently stands:

  1. I agree that retrospectively crediting time in FLX/ETH should not be applied. Retrospective credits would be a bad move for the health of the protocol. Short term it would favour loyal early stakers at the expense of all others. Medium to long term it will drive away some of the existing user base and drive away new users entirely. I think it would be a grave error and note Dr. Stone is not proposing this.

  2. I agree in priniciple to the veCRV idea to encourage staking but it can’t be too heavy handed. It should be recognised that much of the FLX selling pressure comes from people trying to accumulate more ETH and RAI to add back into the protocols liquidity pool. This is still net positive for the protocol.

  3. I think the boost can’t be linear based on staked amount, or the protocol will be shut for business for everyone other than the biggest, oldest whale FLX stakers. Would it work if non-linear? I don’t know.

I am always apprehensive of major changes like this as the RAI is growing in strength, FLX is appreciating faster than ETH for months now and I would hate to unravel a positive future with mistakes. However, the team is very capable and tends to get the big decisions right so I will support this if not retrospectively applied.

1 Like

is the magic of Convex, unfortunately this is what the market likes and wants.

Convex exist solely to bypass limitations that Curve put in place:

  1. veCRV transfer restrictions
  2. Democratize access to boost

You would just incentives people building the same: A contract that pool FLX/ETH deposits and farming positions. People using these get max boost while not needing to stake long term + not needing to stake a large amount. Therefore, rendering the boost useless, failing at its original goal.

I didn’t support backdating

Right now there’s no way to align farmers with long term holders and this is a proposal to fix that.

Thanks, I’ve worded my post badly. I will try to correct it.

The fun thing is that teams building veToken mechanisms want a Convex to be built for their protocol because it’s attractive for tokenholders. It’s what they want.

So it’s actually a success because that’s how DeFi works unfortunately.

1 Like

Slight tangent: it’s way harder to build a Convex for RAI. Farming strategies always change and doing it off-chain means any contract that tries to pool like this can be banned. We can make it a rule to ignore Convex like contracts that pool liquidity.

We can mention Gnosis Safe like contracts are allowed although someone might say it’s still possible to pool capital from multiple people in a Safe and do Convex that way. Still way harder to build vs vanilla Convex, you need to trust the multisig operators.

Is this possible in a world of ungovernance? Wouldn’t the rule require governance of some kind?

Treasury doesn’t have ungovernance, it’s not possible to autonomously allocate capital. Ungovernance is at the RAI protocol level.

I thought the initial idea was good but needed some fine tuning with the details, and I’m really happy to see that the latest proposal addresses some of my concerns already, but I think there might be some issues still. Nonetheless:

  1. This provides buying pressure for FLX for people to participate in this staking mechanism, but I wish it provided a bit more than just boost to staking. Perhaps additional ungovernance votes? Is that possible? RAI is about as far away from some pyramidal themed (:wink:) DeFi protocols as it can be, but this new mechanism would introduce a “buy X to stake in Y which will give you a boost to get more X”. Now, this staking actually directly provides health to the protocol by protecting it with FLX/ETH LPs in catastrophic events, but it will also act as exit liquidity… or entry liquidity too I suppose. That said, we already have incentives for stakers in this pool, so this isn’t that different. Just wanted to point out the first gut feeling I had when I saw this proposal, which was “this mechanism gives people proportionally more tokens to lock in their token + ETH more into a pool which would act as liquidity for both traders and the protocol.”
  2. Some people already mentioned how this would favor whales as they’d get more boosts. I share those thoughts, but I’m afraid there might be no way around this. The latest proposal talks about reducing how much the stake size affects the boost by a factor of 10, and only then multiplying the initial boost by the age boost. However, consider a scenario where a whale separates his stake into a lot of smaller accounts. My math might be off, but from my calculations I could see that it would be relatively trivial for a whale to separate his stake into ~100 accounts to get the lion share of the boost. Basically, it comes down to the fact that no matter your stake size, you’ll be multiplying something 1.1>=x>=1 by the stake age. For argument’s sake, assume that we have 100 good stakers who all have good stake size and max age, i.e. their boosts are at least 2.5 but necessarily less than 2.75 (since with max boost of 100% of the stake size would give them 1.12.5=2.75), and a malicious whale staker who has minimal stake size boost (let’s assume 0) and max stake age (let’s assume 2.5) with 1,000,000 of these mini staked addresses. This gives:
    1,000,000
    2.5+100*2.75= 2500275 total boost, of which 99.99% is stake boost under the control of the whale. This is assuming literally 0 for stake boosts for malicious whale controlled mini stakes and 100% of stake size weight for all non malicious stakers, which is of course impossible but is done to make a point. The reality would be even worse. This is basically a sybil attack on this boost mechanism. Looking back at the other proposed calculations, I think there is the same problem there. My conclusion is that the only way around this sybil attack would be to honor the stake size weight above all, thus encouraging whales to pool their stake size into one account, which would make it a whale game, but at least not gameable entirely.

Re: your second point, we can cap the effect of sybil and put an upper limit on total boosted power vs unboosted.

Let’s say Anna & Bob together have a total boost of 5x, Charlie has no boost, so 1x. Boosted amounts can only sum up to 4x (now they sum to 5x). 1. Anna and Bob have pro-rata % of capped boost. Before Anna had 3x, Bob 2x. Adjusting to cap, Anna has 2.4x, Bob 1.6x.

Together with Charlie, total boosted + unboosted power is 5x whereas before it was 6x.

I have been researching boosties for a bit and found a more optimal way to implement it.

First, I think It is unnecessary to consider the stake age because of the 21 days thawing period. If someone stakes right before the snapshot date to get the boost over the whole period, that’s fine. They are gonna be in there for at least 21 days. If this is a farmer-dumper, they will be dumping on their own liquidity. Staked FLX in the process of being unstaked should not qualify for boost calculation. Stake age criteria like they were proposed in the original post are complicated and will always be gamed.

Second, regarding the boost eligibility: I think it makes much more sense to consider “what % of your Reflexer farming rewards do you have in the FLX staking pool” rather than “what’s your share of the FLX staking pool”. The latter would favor whales and exclude smaller players from getting boost if the threshold is too high. Or even worse, it would be useless if the threshold is too low (bigger players only need to stake an insignificant share of their capital to qualify for max boost).

We need to make the boost eligibility criteria proportional to the scale at which someone is farming FLX. It is, in my opinion, the fairest way to align farmers with FLX holders. As a proxy for the size of your Reflexer farming stack, we can simply use your monthly FLX earning. For example, if you earned 100 FLX worth about $50k during the month through distros like Uni V2 RAI/ETH, Uni V3 RAI/DAI, Aave, Idle, Fuse, etc you need to have staked, at the time of the snapshot, at least $100k worth in the Pool to qualify for max boost. If you have less than $100K, it is interpolated linearly. The boost is capped at something like 2x. Assuming a farmer has max boost, they will end up receiving 200 FLX.

There are 2 important parameters to consider:

  • The maximum boost factor, I would do something between 1.5x and 3x.
  • The max boost conversion factor from monthly FLX earnings in USD to FLX staking value in USD. In the example above I used a conversion factor of 2 ($50k of FLX earning means I need $50k * 2 = $100k worth staked to get max boost).

The boost calculation is happening at the time of the snapshot, using the FLX market price at the time of the snapshot and the boost is applied over the whole monthly distro.

There is something important to keep in mind tho: where FLX rewards are coming from to cover boosties. They are simply coming from the people faming without boost. Practically, it means that after the boost is applied to all participants, the rewards are normalized backed down to the original overall intended distribution amount.

So in simple terms, all this boost shenanigans does, is a transfer of rewards from non-staker farmers to staker farmers.

Challenges

  • It becomes complicated to calculate you true real-time APR for each RAI farm. Assuming you know your boost, the rewards you will get depend on whether other participants are boosted or not. If you are the only boosted participant, you will get a lot more rewards than if everyone if boosted.
  • It is hard to know your boost. It will be hard to know ahead of time how much you need to stake so you match (or 2x in the example above) the dollar value of the FLX reward you accrued
2 Likes

For the first challenge re: true real-time APR, we could take inspiration from Curve.

We can show an APR range, the lower range being the case where everyone is staked except you, the upper one being the case where everyone is staked, including you and everyone staked at least as much liquidity as they can get max boost. The lower bound will probably show a tiny APR but it at least encourages people to stake.

If we go forward with boosties we will also need a calculator on the Incentives page where people can simulate different scenarios and get different boosts.

For the second issue I don’t have ideas right now and it’s pretty bad in terms of farmer UX.

I like this a lot! For challenge #2 if we just cap the stake size at a number of months of reward (I propose 4 months or 4x the reward because that’s just 2 months of FLX plus 2 months of ETH), then it’s pretty safe for example to have 5 months of your latest distribution and you know you’ll be maxed. On the rest it’s sort of like the other stuff you’ll receive your exact boost math and result at end of month. And for the graph we can show min-max like curve. I like how simple this solution is personally.

And also everyone can sort of calculate their expected FLX and then multiply by 4 or 5 if it’s their first month and want max boost.

Eliminating time staked is genius. Better make the size larger for max boost then mess with time.

What do you think about creating a deposit receipt token, either for our staking contract or for this one, and allowing it to be staked in the other contract? That would permit FLX stakers to get the best of both worlds.

Hmm can’t change the implementation for the main staking contract, for ungovernance reasons and for keeping everything simple.

Then there’s H20 and potentially other teams that join the League and would need to handle all of them.

Any updates on this?