Let's talk about optimal methods to balance JLP pool.

If you feel like playing with numbers, then scroll to the bottom!

Before we begin, let's define what we are actually talking about.

JLP Pool provides liquidity to JUP-perps project. Investors provide liquidity into the pool, receiving JLP token as a right to claim small share of pool back. Traders take liquidity to leverage their positions, paying fees for borrowed collateral, as well as open/close position. Part of this fees goes back to liquidity pool. There are two types of assets in pool: stable price assets, representing US dollars, used for opening short positions and non-stable price assets, representing popular crypto currencies, used for long positions. For simplicity we will talk about pool which have 2 assets: asset S is a stablecoin and asset C is a non-stable cryptocurrency.

Let's talk about perfect scenario, how things should look like, when everything goes the best way possible.

First, investor provides an asset into the pool, then immediately trader borrows all that liquidity and opens position. Liquidity utilization is close to 100%, but there is still some space for another trader to open another position. When utilization hits 100% and there are no more funds to use by traders, another investor adds more liquidity and another trader uses it. Vice versa, when traders are inactive and don't want to open positions, then investors will take away liquidity from the pool, increasing efficiency of remaining funds, which are used by traders at the moment.

Traders wants to have available liquidity to allow them to open one more position. If utilization is 100% and no liquidity available, this leads to inability to trade and ruins customer experience. Traders don't care much about utilization, as long as there are some money available for them to trade. There is no difference for trader wanting to use 1k collateral, how much is left in pool, 1k or 100k. As long as it is more then her request she is fine with that. Obviously, traders want to make correct prediction on price movement, to realize profits, which are paid from pool.

Investors care about two things: first thing is their profits, which are realized in form of JLP price going up. The more traders are using the platform, the more positions they open and hold, the more fees are generated. Another thing to consider is token stability. Because there are asset C in the pool, the pool usd value is going up and down with asset price fluctuations. But with high, close to 100% asset utilization, all price movements are reflected by trader's uPnL and investor receive only fees. So unutilized asset C brings potential risk for investors, if its price will go down and should be avoided. For asset S this is not the case, as it's price rarely fluctuates much. Still higher utilization is prefered to minimize stale liquidity, which takes part of the fees, but is not used for traders.

There are two ways for investor to participate in JLP pool. First she can put assets directly into pool, minting new JLP tokens at the base (virtual) price. Second way is to buy JLP on the market. Due to currently implosed AUM cap, market premium exists, varying from 0 to 5%+. This market premium is taken by arbitragers, who provide liquidity at premium, while minting cheap JLP when aum cap is increased or market goes down leading to selloff on the market.

OK, now let's get to the point.

Optimal situation is when almost all provided liquidity is used by traders, leaving only amount which is enough for fullfilling next trade request. When this amount is taken new liquidity is added by investors. When there is more then enough liquidity, then it is taken back by investors, for increased efficiency of funds remaining in the pool. Basically, all we care about is to keep utilization of pool high, but not maxed.

Now we need to set the rules, necessary to achieve this situation. I do not like to have any kind or restrictions or limits, well-thought rules will make market participants to pursue their own goals and act the way we need. Especially in crypto project, where one can easily automate it's actions and receive reward for optimizing other participants non-optimal actions (arbitrage).

Basically, we have some level of "optimal utilization". Let's assume it is 95% (can be as high as 97%, doubt it can be lower then 90%) for asset C and 90% (it might be as low as 80%) for asset S. Traders usually do not pay attention to utilization or variable borrow rates, if they want to go long - they will go long regardless of this numbers. So the only way to quickly react to suboptimal utilization is to attract investors. There are two types of investors: long-term, who want just to put liquidity into the pool and appreciate gains from fees and short-term, who are happy to move money around for receiving arbitrage premium (premium around 1% is usually enough to start things rolling).

Let's set the "normal fee" to 4%. This is the premium, which user has to pay when pool utilization is optimal. If user action improves utilization premium goes down to "minimal fee", let's say it is 0.1%. If utilization is bad and user action makes things even worse he has to pay additional restricting "maximal fee", let's say it can be as high as 25%. Exact numbers should be discussed, this are just starting point.

Possible risks

  1. Lack of trading activity: In this case utilization will go lower then target, adding funds will incur the huge fee (close to restricting "maximal fee") and withdrawing will be relatively cheap (close to incentivizing "minimal fee", which can be even negative). Basically, unused liquidity will be slowly drained from pool and no incoming deposits will arrive (and even if arrive - they will pay huge fee to the pool, contributing to it's growth).
  2. Oversupply of cheap token: let's suppose that asset C is highly volatile meme coin (or behaves like it at particular moment) and is hitting ATH. People might want to dump this tokens into pool, receiving instant liquidity for their tokens, which are expensive today but have huge chances to go lower later. For this situation we should have separate settings for separate classes of assets. With Memecoins or other volatile assets target utilization, minimal possible utilization and maximal fee must be quite high, basically disallowing to deposit coin which does not have enough demand. See below for examples of settings.
  3. Constant lack of liquidity: some can expect, that it is possible, that no one will provide liquidity to 100% utilized pool. In case this problem persists, easy solution is to make minimal fee negative, even a little bit. This way there will be an opportunity to earn for short-term liquidity providers, by providing asset which pool need, receive a reward and then wait untill one of the assets becomes underutilized, for example because of liquidations. During wait they will still hold JLP tokens so will receive some fees as well.
  4. Pool manipulation: because we need to keep utilization number pretty high, there will be a big difference in fees for every percent of utilization. Someone might open big position (to increase utilization) and close it after depositing at favorable fees. It will give him favourable deposit fee, but because of relatively high "normal fee", which acts like a margin for deposits/withdrawals, he will not be able to withdraw, after closing position, as utilization will go higher making whole idea useless.

Another risk is that investors will not like the idea to pay high, occasionally ridiculosly high fees for minting/burning JLP. But we have examples, that this investors were willing to pay market premium 5%+ for JLP several times already, so it shouldn't be a concern. Also, we rarely see situation, when utilization on all crypto coins is not 100% on this bull market, this means that liquidity is always welcome. When market turns red, there will be another problem - how to make investors withdraw their liquidity to shrink the pool and improve utilization. But during bear markets people are usually withdrawing funds, so this is not an issue as well.

Because now utilization will always be high, there is no need in variable borrows rate. It can be set to fixed value, somewhere in the middle of current ranges, I would say 0.005% / hour. This simplifies things for traders, now they are able to calculate how much exactly they have to pay to hold position for given time. Investors profits will not decrease much, because of improved pool optimization.

Also pool AUM and target weights become obsolete, as each asset is balanced separately with separate deposit/withdrawal fees targeted to high utilization. This system is very simple and looks to be working on paper. Usually simple things which looks to be working are indeed working well.

Conclusion

The proposed model of pool utilization balancing is so simple, that one can call it primitive. Nevertheless it succesfully serves to the primary purpose: keep utilization of any asset in pool high, but not maxed. If liquidity providers are smart, they will obey the rules and keep utilization at desired level. High utilization moves risk of asset depreciation to traders and makes every dollar in pool work, increasing JLP profitability. It is hard to think of scenarios, where high utilization in pool-to-peer model will become disadvantage, this is why I believe that this proposal should be considered for implementation.

Feel free to direct your questions and concerns to @smartpunter on Telegram or Discord or, preferrably, to JLP channel of JUP Discord Server.


%
Balancing fee for depositing coin into pool: %
Balancing fee for withdrawing coin from pool: %

MAX_POSSIBLE_UTILIZATION: %
MIN_POSSIBLE_UTILIZATION: %

NORMAL_FEE: %
MINIMAL_FEE: %
MAXIMAL_FEE: %

TARGET_UTILIZATION: %