Flan Genesis Update 1.5 of 2
TL;DR to bootstrap Limbo, Flan will need to target the DAI price instead of a synthetic LP; Flan liquidity will be seeded on more than one external AMM.
The previous dev update was the first in a two part series on the upcoming economics of Limbo, starting with the Flan Genesis event. Since then, local simulations have yielded some interesting implications for the migration and pricing of Flan. Before getting to that, it’s worth highlighting the salient points for discussion from the previous update:
- Nominal price target of Flan: On each migration, Flan would be priced such that its price would be the same as the SCX price if SCX were priced like a traditional LP token. To calculate this number, take total value locked(or TVB in Behodler lingo since the tokens aren’t locked but merely bonded to a curve) and divide it by the SCX total supply. We take a few shortcuts as approximations: simply take the DAI reserve balance of Behodler and multiply it by the number of bonding curves to get the total dollar value of TVB. The deeper liquidity on Behodler gets, the more accurate this approximation will become.
- Flan liquidity seeding of external AMM: When Flan is first created, half of it’s initial supply seeds Behodler, generating SCX. Then approximately 25 SCX is paired with the remaining Flan and used to create a Uniswap LP pair.
After much deliberation, both of these points need revising. This article explains what those adjustments are and what that means for Limbo. The part 2 that was initially promised in the previous article is unchanged by these developments. This part 1.5 is an amendment to part 1.
Nominal Price Target: Buying vs Tilting
When a new token is listed on Behodler, it generates Scarcity. Recall from a previous update that most of this Scarcity needs to be burnt before being distributed and that only a small portion equating to approximately 25 SCX should be kept back. Instead of distributing this Scarcity directly, it is used to support the value of Flan. In this context, the word “support” needs some clarification. We could:
- Buy: use the SCX to buy Flan from an external AMM such as Uniswap. This doesn’t increase Flan liquidity.
- Price tilt: mint a minimal amount of Flan and pair it with SCX as pooled liquidity to push up the price AND increase liquidity.
- Quantitative easing: do not raise the price but instead mint 25 SCX worth of Flan at the current price and pair it with the 25 SCX to deepen liquidity without affecting the price.
Of course we could perform any combination of the above approaches. Only options 2 and 3 increase the level of liquidity for Flan. For a reward token, it is arguably more important to target liquidity growth than anything else. The reason this is important is that when users receive their reward, they should be able to cash in without experiencing significant slippage. One of our goals with Limbo is to increase Flan liquidity with every migration so that we can offer an increasing number of ongoing pools without worrying about intermediate price impact between migrations undermining the given APY.
When you employ strategy 1 only, you can undo the price decline between migrations but you don’t gain any additional liquidity foothold to expand the scope of Limbo. In a sense you’re just treading water. This is why price tilting is preferred as it nudges the price up by increasing liquidity.
Nominal Price Target: The Liquidity Trap
Suppose we have a fictional Behodler that only has 2 tokens listed, DAI and Ether. We wish to migrate Balancer’s BAL token. We also assume that the Uniswap FLN/SCX pair has 25 SCX in it and that the average bonded value on Behodler is $10000. Finally SCX price is $400.
In this scenario, Flan has been set according to the LP formula which is TVB divided by SCX total supply or in numbers, 20000/1000 = 20 DAI. Since SCX is 400 DAI and Flan is worth 20 DAI, we can calculate the relative reserves in Uniswap. There has to be (400/20=)20 times as much Flan in Uniswap as SCX. This means the pair is composed of (25 SCX; 500 Flan).
We set the threshold to $10000 worth of BAL and the target is shortly hit as enthusiastic BAL holders ape in. At this point, anyone can invoke the migration contract and the following happens:
- BAL is listed on Behodler and either the PyroBAL token is deployed or BAL is registered as burnable.
- $10000 of BAL is deposited, generating somewhere around 300 SCX.
- Only 25 SCX is kept and the rest is burnt.
- We calculate the new LP price of Flan: (20000+10000)/(1000+25) = 29.27 DAI. Flan has increased from 20 to 29.27 DAI.
- We know that the new SCX balance on Uniswap will be 50 SCX after this event because an extra 25 SCX is added. Assuming the SCX price is unchanged, the ratio of Flan liquidity to SCX will now be (400/29.27=)13.67. This means there must be 683.29 (=13.67 x 50) Flan on Uniswap for the price to be correct.
The above calculations show that 183.29 Flan should be sent to the Uniswap pair in addition to the existing 500. This provides a simple price tilt operation where we add 25 SCX and mint and add 183.29 Flan.
The problem occurs when we factor in that BAL staking might be live for a few months, during which Flan rewards are issued. If during that time, more than 183.29 Flan is issued as rewards and all of that is sold for SCX then at the time of migration, the numbers will look a bit different. Let’s assume that users receive exactly 183.29 Flan and that they sell it for SCX. Using Uniswap’s constant product formula, we know that if 183.29 Flan is sold into the existing pair, the resultant reserves will be (683.29 FLN;18.32 SCX). This causes Flan’s price to fall to just over 10 DAI which is slippage of around 50%.
If we go through the migration steps above, plugging in these new reserves, we see that the resultant levels of liquidity on the FLN/SCX pair must be (591.955 FLN;43.316 SCX) after migration if the price is to be pushed all the way up to 29.27 DAI. This makes price tilting accurately impossible as the final FLN number is lower that what exists in the pair. The best we can do is mint an ultra small amount of FLN and pair it with the 25 SCX to achieve (683.29 FLN; 43.316 SCX) which takes the FLN price to 25.36 DAI.
What this all means in reality is that price of Flan is no longer equal to the synthetic price of LP. Flan has lost its peg and is trading around 2 DAI less than the implied LP price.
If the liquidity of the FLN/SCX pair were higher for a given price, the sale of 183 would not lead to this problem as it would show up as a blip. However, an even bigger factor is the price calculation of Flan. To see why, suppose we set the price target of Flan to 1 DAI so that Flan is now an algorithmic stablecoin. The initial reserves would be (10000 FLN;25 SCX) because SCX is worth 400 DAI.
Now we list BAL and issue 183 FLN as rewards. The entire allotment of rewards are sold for SCX, leaving the pair looking like (10183;24.552). After migration, SCX in the pair rises to 49.55, implying FLN must be (49.55*400=) 19820.818 which is clearly much higher than 10183. Here price tilting is possible again as we can mint the difference and send it off to Uniswap.
However, 183 FLN in the previous example implied $3660 because the price of FLN was 20 DAI, not 1 DAI. So to compare like with like, we need to see what happens if we hand out 3660 FLN in rewards in the stablecoin scenario. The pair after the rewards are sold now looks like this (13660 FLN;18.31633 SCX). Adding 25 to SCX yields 43.3166 which implies Flan should be 17326.64 after migration. This is still higher than 13660 by a significant margin. Interestingly, although the price impact is similar in both scenarios, the price can be restored more easily in the stablecoin scenario (we can even add a bit of overshoot to compensate for intermediate slippage) and leave the liquidity deeper.
It should be noted that the price change of the synthetic LP price from one migration to the next is initially much higher than in the future when 100s of tokens are live on Behodler.
Suppose we have a follow up migration after the BAL one where we hand out the exact same amount of Flan in rewards, 3660 (which is equal to 3660 DAI). and that all the rewards are sold for SCX. Plugging these numbers into the Uniswap formula yields a final Flan price of 0.68 DAI. Contrast this with the first iteration that left the price 0.536339678. So the first migration had the effect of reducing price slippage from successive migrations. The new SCX balance in the pair after the second is 60.78, implying that Flan should be 24312.32. Before migrating Flan’s balance on the LP had risen to 20975.
Each migration lays the foundation for either higher APYs, more concurrent pools or the presence of non migration “perpetual” pools such as a pool for locking up SCX or EYE (or their LPs). Limbo feeds on its own success. When a FLN/DAI Uniswap V3 pool is created, this effect will be amplified.
In summary, when Flan is first launched, a stablecoin price target such as 1 DAI is far more feasible than a price that rises with each migration because of low liquidity and rising pricing making price tilting impossible after a few migrations.
Some added benefits to targeting DAI
As mentioned in the Behodler white paper, stablecoin pairs are over accommodated in DeFi currently and the rise of concentrated liquidity pools in the form of Uniswap V3 and Sushi Trident only amplifies this trend. If we peg Flan to DAI using the migration incentives, we can ride this trend and create Flan/DAI pools, taking advantage of the best that concentrated liquidity has to offer. This will supercharge Flan’s liquidity, allowing Limbo to offer higher APYs to more pools. Since there are third party dapps that convert Uniswap V3 positions into ERC20 tokens, we can then list a Flan/DAI Uniswap V3 position on Limbo and offer a high APY to encourage lockup.
Another benefit is that the Flan per second you receive is the dollar amount, easing the task of mental calculations when reviewing returns.
Will Flan hold its peg?
This mechanism isn’t immune to black swans. If the price of Flan was knocked off course dramatically, only subsequent migrations are sufficient to bring it back in line. However it’s worth bearing in mind that in sacrificing a bit of interim stability, Flan loses fragility. For instance, if traders know exactly when price tilting will happen, they can time arbitrage trade the price of Flan back towards its target. As the Flan target gains credibility, the band of liquidity provision on concentrated liquidity AMMs will narrow, further entrenching the Flan peg.
If Flan is a stablecoin, why hold it?
Firstly, Limbo will offer a perpetual Flan staking pool with a decent APY. So any Flan you receive can be parked to earn more Flan. If you claim once a day and redeposit into the pool, you can earn compound interest. Secondly, PyroFlan will, by definition, be a thriftcoin. As a refresher, a thriftcoin is a stablecoin that has a built in yield so that it can’t fall in value as measured in dollars but can only grow. Even better is when we list FLN/DAI LP on Behodler and create Pyro(FLN/DAI). The LP component will gain trading revenue without losing its peg and the Pyro wrapper will amplify returns through the usual burn incentives and trade revenue inherent in the Pyrotoken machinery.
Is this permanent?
The price strategy for Flan can be altered with a proposal through LimboDAO. This may just be a bootstrapping phase where we ensure that Flan gains a certain threshold of liquidity, after which the transition to LP pricing or something similarly exotic is chosen or it may be the community decides to stick with stable Flan. What matters now is that we use the power of stablecoin liquidity provision in DeFi to bootstrap Flan and Limbo.
Flan Liquidity seeding
It was mentioned that when Flan is created, half of its initial supply would be seeded into Behodler, generating SCX. This SCX would then be paired with the other half of Flan in Uniswap. However, the SCX generated far exceeds the amount needed for Uniswap. This leaves room to seed more than 1 AMM. For this reason, the Flan Genesis Event will seed liquidity on both Uniswap V2 and Sushiswap.
A word on a Flan burning
By default Flan does not burn on transfer. However, through a governance proposal, burning on transfer can be turned on and set to any percentage. This gives the community a backstop if it ever feels Flan is losing its peg too much.
The front end infrastructure for Limbo is being built out by a very talented front end dev from the community. In the mean time, I’m scrutinising all aspects of security and testing sustainability. No one wants Limbo to launch more than I do (I am more confident of this fact than any other) but Ethereum is a very contentious space and there can be no room for bugs or exploits. For this reason, the development strategy adopted will be the same as the Ethereum foundation approach: as soon as possible but with no shortcuts taken on security and constant reflective scrutiny. Countdown timers are not a responsible way to launch a financial product; but as the testnet version yields feedback, the response to that feedback will be shared openly and we’ll all begin to sense the convergence to mainnet launch.