Uniswap v3 is AWESOME, but complicated. So here's a walkthrough!
Uniswap v3's bounded liquidity generates massive capital efficiency (i.e. ROI) opportunities but it can be tough to wrap your head around. Here's a high-level guide with a real life example.
Uniswap v3 introduces concentrated liquidity, time-weighted average price oracles, flexible fees, range orders, and more. The goal of this installment of Off the Cuff is to go through the high-level aspects of bounded liquidity and how my efforts have worked so far. (This is not financial advice, purely informational! Do your research).
NOTE: I am going to significantly simplify the technical aspects to focus on the fundamental idea: providing liquidity within a specified price range. Even so, this is a quite long piece but I am trying my best to not make it 2 parts.
It may help to have read Part I and Part II of my cash flow newsletters before diving into this one.
I’m pretty bullish on ETH, so I wanted to make a heavy bet on ETH while still generating cash flow through swap fees.
ETH-2X-FLI is a flexible leverage token. It attempts to fluctuate (i.e. grow and shrink) twice the amount of Ethereum does. This is great when ETH is rising, terrible when it’s falling. Normally leverage (which I’ll quickly note, also exists in traditional finance, there are numerous S&P500 3-5x leverage ETFs out there) is dangerous to hold for longer than even a few hours. This is because volatility decays value. If you’re down 20%, you have to grow 25% to be back where you started. ( 0.8 * initial = current ==> current * 1.25 = initial).
ETH-2X-FLI uses flexible leverage to partially solve for this volatility decay. This makes it significantly safer to hold. But I don’t want to hold, I want to earn. So I used the ETH-2X-FLI / ETH liquidity pool on Uniswap to keep my bet on ETH AND generate swap fees.
I wanted to try out Uniswap v3 because of all this “capital efficiency” talk. Capital efficiency simply means swap fees relative to liquidity provided, i.e., a more technical sounding way of saying return on investment (ROI).
Ok, so I’ve given you this premise upfront, we’ll re-visit it after I walk through how bounded liquidity works. Here’s how it works in a very trivialized example.
People want to make trades, but they want to make them at certain prices.
Bobby, Sade, and Natalie each have a desired trade between A and B tokens. Because Uniswap is an automatic market maker (AMM) there is already a pile (liquidity pool) of both A tokens and B tokens available for swapping. Bobby, Sade, and Natalie simply need to check the relative prices of the liquidity pool and either do the swap at the pool’s prices, or wait for a more favorable trade. Notice that each of their desired trades have an implied price for the swap they hope to make. This will make sense soon.
People want to generate swap fees. Traditionally, i.e., on Uniswap v2 and virtually all other AMMs, this meant providing liquidity between tokens and earning fees from trades between your liquidity.
Here Andre, Marge, and Jemma bring different amounts of capital (here denominated in US dollars) for liquidity. In Uniswap v2 and other AMMs this is really simple. The pool has $11,500 of funds: $5,750 of A and $5,750 of B. Swaps cost 0.3% of the token you are selling to the pool. Andre earns 4.3% of fees (500/11,500); Marge earns 8.7%; and Jemma earns a whopping 87% of all fees.
But here’s the thing about AMMs. They maintain a balance between the value of A and the value of B NOT the amounts of each.
If the market has a large demand for token B (causing price of B to go up); then this pool will get filled up with token A as people do swaps. Andre, Marge, and Jemma might get stuck with more token A than they really want. This is a fundamental deficiency in the unbounded liquidity model.
Just to say it again in reverse for clarity: if the price of token A is falling relative to token B, the overall crypto market will offload their As and stockpile Bs. The liquidity pool, being an AMM, is where the market does their offloading.
So while Andre may end up with $550 total value from after his swap fees (nice 10% gains!); if he put in 250 B and 125 A originally, but now has 400 A and 100 B from the market dumping As on his liquidity pool to take his Bs: he may have been better off just holding his original 250 B and 125 A.
This is called impermanent loss, but it’s easier to just think of it as opportunity cost. Do I want to hold 250 B and 125 A? Or do I want to put them in the liquidity pool, and hope that the swap fees make up for any changes in my underlying token amounts?
People want to generate swap fees, but they want to make them at certain prices.
Bounded liquidity gives people a defense against opportunity cost by allowing them to infuse their preferences with their provided liquidity.
Ok, so I’ve added a few columns, let’s go through the translation. Andre, Marge, and Jemma put in the their money just like before. But now we know Andre doesn’t really like token B that much and doesn’t want to get stuck with too many of them. Marge feels similarly, but prefers B and is worried about ending up with too many A.
Jemma is just here for swap fees and couldn’t care less about the tokens. She trusts they’ll both grow over time long term and is happy to ignore short term volatility. Bounded liquidity is still important for her to understand, we’ll get to that soon too.
Uniswap v3 allows our liquidity providers to infuse these preferences into their providing of liquidity.
Andre: if As become more valuable (it only costs 0.55 A to get 1 B), stop letting people give me Bs for my As. Pull my liquidity.
Marge: If As become less valuable (it costs 2 A to get 1 B), stop letting people give me As for my Bs. Pull my liquidity.
Jemma: Keep the meter running.Let’s focus in on Jemma’s situation and see how her strategy plays out in maximizing swap fees.
Bounded liquidity rewards being correct about the volatility between assets.
It’s been awhile, but remember Bobby, Sade, and Natalie from (1)? This is where their implied prices come into play. You see, when Andre and Marge bound their liquidity, they are giving up the chance to earn swap fees outside of their range. Bobby’s trade is too low a price for Andre; while Natalie’s is too low for anyone except Jemma.
How does Uniswap v3 make up for this and incentivize people to actually use boundaries? Capital Efficiency.
Jemma gets 100% of Natalie’s swap fees because she’s the only one providing liquidity.
But she does NOT get 90.9% of Bobby’s swap fees.
Wait what? Marge puts in $1,000. Jemma puts in $10,000. They’re the only 2 in the pool that Bobby using liquidity from. Why would it not be proportionate?
The fees are not allocated proportionally, because the liquidity is not allocated equally. Their liquidities have different boundaries. Thus, they share fees based on how much those boundaries overlap to provide Bobby his needed liquidity.It’s difficult to calculate, click here to get overwhelmed trying, but for illustrative purposes let’s say Marge gets 35% of Bobby’s swap fees with 1/10th the capital of Jemma simply for being more correct on how the prices fluctuate. This is a massive return in investment!
In reality, the overlap is measured in something called ticks and ticks are based on 0.1% movements in relative price, which means you could calculate how many ticks Marge’s range overlaps relative to Jemma’s tick overlap but you probably don’t need to get that granular unless you’re a real pro doing multiple decentralized range orders and complex limits, etc.
Ok, so I know that was a lot. The summary is: Uniswap v3 gives liquidity providers the same price-desire options as traders! These price desires are translated via boundaries around the liquidity enabling liquidity providers to strategically be 100% in one asset when the price is outside of their boundary. This is super powerful stuff that is taking the market awhile to really understand but the total liquidity (in dollars) on v3 is now larger than v2! So it’s happening.
Let’s get into the mechanics of how I did my ETH-2X-FLI/ETH LP and what the results have been so far.
I went to CoinGecko and checked the price of ETH-2X-FLI in ETH not in dollars.
I noticed that ETH-2X-FLI had been hovering between 0.04 ETH and 0.05 ETH for more than a few days. I knew that Uniswap v2 had the same pool, with unbounded liquidity, and that it was pretty popular and generated a good amount of fees. But I wanted to be rewarded with capital efficiency for trying out v3 and setting an accurate range of volatility.
Wanting to try out the capital efficiency of very narrow boundaries, I committed to a range of 0.044 to 0.05 ETH-2X-FLI / ETH.
The tradeoff is that widening the band to something like 0.04 - 0.05 would increase my range (opening more swap fee opportunities) but it will give me less concentration (remember Marge & Jemma?). Remember, concentration is rewarded with capital efficiency! Frankly, I don’t know how to optimize this stuff, I just wanted to go from 0 - Infinity to a much smaller range haha.
In my brain, I wanted to absorb a good chunk of volatility without overly widening my band. 0.04 - 0.05 would double my range, but it would less than double the amount of volatility I profit from (here measured by the amount of red line inside my box versus outside the box).
I clicked the buttons on Uniswap v3
The pair stuff should be pretty obvious, you pick the tokens. The fees are a little more complicated but 0.3% is the Uniswap v2 rate and somewhat of a standard across AMMs. 1% is crazy high, but it’s for insanely volatile pairs that diverge regularly in which case you need the high fees to validate opportunity cost. And I explained how I chose my price range using CoinGecko. For pairs that don’t include a USD stablecoin or a standard coin like BTC or ETH, you’ll want to do your research separately, maybe pull data and compare the two price histories to get your target, i.e. get the USD price of X and the USD price of Y and divide them over time to see if there is a stable band of volatility.
I received by Uniswap v3 LP Non-Fungible Token!
Because of all the customization, your liquidity is best represented as a non-fungible token. This enables it to be traded (if you actually wanted to sell your liquidity all in 1 go to someone- I don’t recommend that) and tracked. Something important in v3 is that your swap fees are not re-invested. In v2 and in other AMMs your swap fees are automatically added to the pool to increase your pool position (and thus compound). In v3, you get the benefits of capital efficiency, but not compounding. You have to manually look at your fees and withdraw them and then choose to reinvest them (and get a new NFT).
My results have been pretty good so far!
I put in 1.5 ETH total (split into 0.75 worth of ETH-2X-FLI and 0.75 of ETH) and in less than 1 week (falling out of range a few times if you look at the chart over the last 14 days) I’ve generated about 0.025 ETH equivalent across both assets. This is a 1.6% return on investment so far! Annualized that’s over 80%! Of course, I expect I’ll fall out of range eventually and thus earn noticeably less as I have to either hope to get back in range or pull my liquidity and put it back in at a different range.
Thanks for reading all this! I know it was a lot, hopefully you have enough information to do some more research and consider if concentrated liquidity is something you’re interested in engaging with. As always, this is not financial advice and is for informational purposes only.
I hope you subscribe and share!