Changing formula for MNGO rewards in Liquidity Mining

The liquidity incentives formula Liquidity Mining - Mango Markets

Liquidity “points” are defiend as:

points= reverse_dist * reverse_dist * time_on_book * quantity

and the incentives are paramaterised at the moment with max_depth_bps=200

This means that large orders which are 100bp+ out are hogging a lot of the MNGO reward distributions, where they have minimal risk of being hit.

For three users providing same liquidity size for same time, one at 1bp away from price, one at 50bp away from price, and 100bp away and 150bp away from price their points are:

points_1bp = 199^2 = 39,601
points_50bp=150^2 = 22.500
points_100bp=100^2= 10,000
points_150bp = 50^2= 2,500

This means that someone who is risk-averse and wants to just farm MNGO while totally avoiding to get hit can simply quote 1.76 BTC at 0.5% wider and get the same exact points, or 3.96 BTC at 1% wider to get the same points, or 15.8 BTC at 1.5% wider

Furthermore, it would be easier for them to do this at higher leverage (up to 10x) which, while would be riskier, is actually not as risky because they can requote much more frequently to avoid getting hit.

And, this is what is observed, just days after this liquidity mining has gone live:

Lots of large orders 50bp+, and 100bp+, who are earning more than those with less capital quoting nearer the front of the book.

This has to stop and we need to incentivise the people closer to the book more

Solution

There are a number of ways to fix this, in Discord a couple of things have been suggested:

(a) reduce max_depth_bps to 100
(b) change the points formula from quadratic function of reverse_dist to a higher power

The problem with (a) is that it attaches zero value to liquidity outside of 1% of price. This is not realistic because liquidators and arbitrageurs need deeper liquidity to feel secure about taking positions and being able to offload the risk on the Mango books.

The main thing we need to do is enhance the reward given closer to the price so that it’s not as easy for people to add size further away to gain points.

Here’s the current curvature using quadratic:

image

Here’s comparison with doing reverse_dist^3, reverse_dist^4 , and reverse_dist^8 instead (normalised to quadratic approach):

image

As you see, we can effectively drop the max bps without totally eliminating some benefit to those who are further out. This gives the benefit of more people getting MNGO rewards, even if a little, to boost distribution in general

If anyone has other ideas on this we can discuss in this thread

2 Likes

This is an excellent analysis of the issue. The charts make it pretty clear, and I would say the reverse_dist^8 looks like a reasonable chart. Someone at the inside should make 3x the points as someone ~25bps back.

There is some argument that having a liquidity far back in the book is good for liquidations, but I’m not sure that applies here, since liquidations don’t hit the book directly, but are instead handled by a dedicated liquidator.

I like the idea of just reducing max_depth to 100. Then, quoting 1 BTC top of book is equivalent to 4 BTC 50bps deep. Even if we switched to (max_depth 200, reverse_dist ^ 4), 50bps away needs 3.2x size.

Liquidity deep in the book is less of a concern, for me because I think the MMs will just requote at a higher price after they’ve been hit. The liquidators right now are not smart and just offload onto the book, but can be made smarter to offload a little at a time or even hedge on the spot margin side.

We have to figure out these params for all the more volatile markets as well and maybe that’s a reason to prefer (200, ^4) or (200, ^8) instead of (100, ^2). Then we just keep those same params for the more volatile markets

I think (200, ^8) is the right decision, for the simple reason that it would result in the tightest book and incentivize better MMs that can keep up with more volatile markets in the future. Simply reducing the max_depth to 100 wouldn’t do well for more volatile markets, as daffy mentioned, but it would also result in a marginally less sexy BTC-PERP book–which we don’t want.

Ultimately, it’s the liquidity at the top of the book that traders will most care about when trying out Mango.

2 Likes

just for clarity, the max 100bp does create a curvature that is about between ^4 and ^8:

image

but, again, attaches zero value to anything above 100bp

re @Hactar 's point on volatility. it would be super cool if we could generate a measure of short-term volatility and attach a multiplier to the liquidity points that rewards people EXTRA if they are staying in the market during these periods (traditional markets use the term “stressed market conditions”, see e.g., https://www.deutsche-boerse-cash-market.com/resource/blob/279694/db2b59f7075f9fa28bb9268b0e1c4dd4/data/market-making-handbook.pdf ) where marketmakers get extra credit for being in during such volatility

Yeah of course, hence “marginally” less sexy. Also, in theory attaching some value to orders above 100bp makes sense, but I do think our #1 priority here should be a laser-focus on incentivizing as much liquidity as possible at the very top of the book, so I don’t really care about that much.

Here’s an idea: 1000 MNGO per hour along the (200, ^4) curve, and 250 MNGO per hour given proportionally to those responsible for the orders at the literal top of the book (in addition to existing rewards). I like this because the ^4 curve is more reasonable in terms of incentivizing liquidity deep in the book as well, and the extra reward would incentivize a race to the middle / competition to tighten spreads. This is of course replicable with a more complex curve but this seems super simple to me and I like simplicity. Or we can do 750 and 250 in order to keep the total amount of rewards constant.

And then if we ever get around to implementing an indicator of short-term volatility, the “top of the book” award would be something like 250*volatility_coeff per hour, with BTC-PERP’s volatility_coeff set to 1 (for now at least).

(200, ^8) effectively doesn’t reward past 100bps anyway.

another point, the exponent is not a configurable parameter (yet). So it would have to be a program upgrade across all markets. So that’s another reason to disfavor it in my opinion.

EDIT: But ^8 does fall off more quickly which is nice.

In that case, I’m in favor of reducing max_depth to 100 as a quick fix.

After changing to (100, ^2) it’s still pretty bad. How about (100, ^8) which can be done in the next program upgrade?

I see people quoting massive size pretty deep in the book and getting almost no fills but collecting a lot of MNGO.

My only fear with (100, ^8) this is that there wont be enough liquidity deeper in the book in the case of stop losses or mass liquidations. We will definitely see more participation closer to the top of the book which will help the user experience. There should still be some incentive for sticking out further back as well but without hurting those that are risking higher up.

In my eyes the big players with large stacks sort of sap the rewards from the front but they still deserve some reward for this right? Give these liquidity providers the option to do this without hurting those near the top. I suggest possibly 2 functions that distribute mango one with an emission period of 1500 mango/hr and one with 500 mango/hr. The first function will be as you describe (100, ^8) to encourage people to provide liquidity at the front of the book. The second function can be (200, ^4) and just be very rewarding to big stacks without really affecting those that want to provide liquidity near the top.

In addition to this I noticed that sometimes in times of high market volatility some bids are pulled which can lead to some very bad results. I believe this is what happened with BTC perp went down to 35k. Sometime in the near future we should incorporate some sort of volatility parameter into the reward system.

Well how do CEXes get liquidity deeper in the book? The market maker programs I’ve seen usually only give rebates and incentives to quote near top of book and leave the deeper liquidity up to the market to provide.

One reason why ppl provide liquidity further out is to catch “wicks” from liquidation mechanisms. But because of how Mango does liquidations, where it is off-book, this is not providing that incentive.

TBH i think the bigger problem is flow not being there. I know it’s chicken/egg, but if more ppl go to Mango and use it to trade perps then liquidity will fill out, esp with incentives within 100bp. Are we just hoping that word of mouth makes this happen? Should we be talking marketing instead?

Alternatively, I remember someone on Discord suggesting (sorry can’t remember who to give credit, but was not my original idea) – to have “bands” where you offer say 2,000 MNGO within 100bp, but then 500 MNGO from 100-200 bp and then 100 MNGO at 200-300bp (with similar curves within each to keep the incentive closer to bbo)

1 Like

A trading competition was suggested in another thread Incentivising trading on PERP markets - #7 by plopps

Which is not without some dev work and there may be easier forms of marketing (some kind of referral mechanism to turn users into shills?)

I think its important to remember that market makers do in fact an overhead cost of transaction fees and have a 400ms delay when putting up orders so its not as easy as a CEX. Not really sure how many people will market make with almost 0 reward and not enough volume to actually get hit.

Going off what austerity said bands or a multitude of functions is probably the best way to get around the lack of liquidity up close while still rewarding some liquidity in the back. It is a great idea but you would have to tweak them to overlap or else there will be “deadzones” which actually give less rewards than being a little bit further back.

Adding on to this the 2000 mango/hr is enough it just has to get distributed in the correct way.

I’m just thinking more about incentivising liquidity closer to the book, and it occurs to me that we should just incentivise maker volume.

What if you cut mango rewards back down to 1000/hr, but gave ~5bps worth of mango out to makers. It keeps fee structure at 0bps/5bps, so it doesn’t look like a shady 0-take exch, but really incentivises people not only to provide liquidity that never gets hit, but to compete to be the maker.

It could effectively cut the SOL spread in half… (if it’s currently averaging ~20bps, and makers are willing to move each side in by 5bps).

2 Likes

I like this idea, -5bps/5bps so DAO revenue is 0 for now

1 Like

Having a maker rebate would incentivize thick, tight books. I would look to make it a permanent feature though.

I’m going around in circles here, but I’d like to propose another solution that I hashed out in discord:

What if we split the rewards into two 1000 MNGO buckets,

  1. 100 bps depth - just like it is now, this incentivises deep books.
  2. 0 bps depth - Only rewards those who place orders at or improving the inside. It will encourage tight markets as improving the inside will offer serious rewards.

We can avoid having to hash out a number for a maker rebate, but also incentivise and reward those making the closest, tightest market. I would put a minimum size to earn on #2, having someone set a new bid with 0.01 sol shouldn’t get all the points. Potentially, we consider the first $1k as within 0bps. Open to ideas here.

Wow this actually a very good idea and I think it has potential. This really could have a good effect and probably wont fall victim to wash trading. Reading more on the algorithm used to award mango the calculation is only done once making the function O(1). I think a few improvements can be made to make this function even better and more rewarding overall when considering how the function currently works.

Any of these conditions can trigger a reward from the second bucket:

  1. 0 bps start - This will give mango rewards to those who place their orders at the top of the book or match the top offer. Order must be canceled within 20 bps or get filled to receive points from this secondary bucket.
  2. Depth <= 20 bps start + Maker - This reward will only be considered for this bucket if the order actually becomes the maker in the future. Otherwise this reward will get the normal distribution of points from the normal bucket. (Unsure how the formula could work with partial fills)

Extra limitations and restrictions to these orders to avoid abuse:

  1. Unix time limit for rewards are capped at 10-15 minutes to avoid farming points when you don’t get filled for a long time. Important to note that this bucket is a fast moving incentive and not supposed to be farmed for hours on 1 order.
  2. Order must start with a size more than $250-$1000 depending on what we see fit.