# MIP-420: Merp Liquidity Incentives Model ## Objectives - To incentivise tight, fat liquidity in merp orderbooks - Should not be gameable - Implementation should not be technically overbearing - Using MNGO tokens for the incentives ## High-level - We take minutely orderbook snapshots of a merp contract, which captures all of the existing resting limit orders in the book. - They should occur at randomised seconds of the minute so as not to be gameable by flashing liquidity. - Based on the order size and the price from the mid, a certain number of "merp points" exists in a given orderbook, and a given account has a certain proportion of these merp points (representing their portion of "weighted orderbook presence") - For a given time period, let's say 24-hours, we have then 1440 observations that capture the total merp points over the time period for a contract, and the total points an account has out of that. - We apportion some MNGO tokens per 24 hours to be given out pro rata to each account's share of the total merp points on a contract ## Merp Points Formula This will focus on a given merp contract. Upon each minutely snapshot we need to have a function that rewards liquidity proportionally based on the size and proximity to the mid price of the book. $mid Price = \frac{(bestBid + bestOffer)}{2}$ $x=distance From Mid = \frac{\lvert orderPrice - midPrice \rvert}{midPrice}$ $weightFactor = 2^{(1-(x*k))}$ $y = size (Contracts)$ Now to find the merp points of this order $i$ of a given size we just: $merpPointsOrder_i = y_i * weightFactor_i$ Then a given account $a$ with $n$ orders has total merp points of: $merpPoints_a = \sum_{i=1}^n merpPointsOrder_i$ And a given merp contract with $b$ accounts with active orders has total merp points: $merpPointsContract = \sum_{i=1}^b merpPoints_i$ The above is only for a given snapshot, so we need to sum across 1440 observations if using minutely data and a 24-hour payout. Finally, if we are distributing then, say, 1,000 MNGO tokens per day for a given merp contract, then Alice's payout is simply a function of the proportion of merp points in a contract that she earned: $payoutAlice = 1,000* \frac{\sum_{t=1}^{1440}merpPoints_{at}}{\sum_{t=1}^{1440}merpPointsContract_t}$ ## Calibration The coefficient $k$ is used to adjust the measured mid price deviation in the exponential function. So by deciding the parameter $k$ we determine how deep we want to reward liquidity, it will determine at what point the function decays to where the distance is no longer significant enough to give weighting on an order that is far enough away from mid price. k=1000: ![](https://i.imgur.com/7ubeKi6.png) k=500: ![](https://i.imgur.com/0GNYEHZ.png) k=250 ![](https://i.imgur.com/tEUkkaY.png) ## Other Considerations For each orderbook snap, there are other coefficients that can be added to account for incentivising liquidity in times when it matters most: - A running measure of volatility to reward people quoting in distressed market conditions - Using some volume measure to reward people who quote while there is actual trades vs when there is no activity ## Questions - What is the technical process to trustlessly pull the snapshots, aggregate the ratios per account, and disburse the MNGO payouts? - What should k be? i.e., where do we no longer want to effectively reward liquidity away from mid? - Do we need to make a compromise on frequency of snaps (not per minute but every 10 minutes)? - Instead of each period being 24 hours should it be longer, like 1 week?