Op-Ed: The Case for Savers to be Sunset
By Boone Wheeler (https://x.com/boonew)
The opinions expressed here belong solely to the author and do not necessarily reflect the views of THORChain University.
TL;DR:
- Dual Liquidity Providers (DLPs) are the heart of THORChain.
- Synth Leverage to the downside is a big disincentive for users to DLP.
- Once the bull turns to the bear, LPs will be game theoretically forced to race for the exits due to Synth Leverage. This will tank RUNE price.
- The existence of Savers in the pools exposes DLPs to loss of capital separate from Impermanent Loss. I will refer to this as Synth Loss.
- Because of these factors, Savers is a much greater liability than it is an asset to THORChain.
It is my position that pool liquidity providers are the heart of THORChain. All of THORChain sits on top of its liquidity pools. No dual liquidity providers (DLPs), no THORChain. This is why we used to call our LPs THORChain’s First Class citizens. They are the engine that makes the rest of the protocol possible. No DLPs, no cross-chain swapping — which is of course TC’s primary value proposition. The only reason TC makes money is because people pay TC swap fees in order to non-custodialy and permissionlessly swap native L1 assets from one chain to another. I am convinced that the introduction of Savers has made DLPing a demonstrably worse financial proposition and thus is a net negative to the protocol.
What originally drew me to TC was it is all based on real yield — those swap fees. TC relies on market participants to be rational actors seeking return on their capital. Capital in TC swap pools is subject to IL. Thus for a rational actor to deploy capital to a TC swap pool swap fees MUST be greater than IL. I will attempt to demonstrate that Savers exacerbates losses to DLPs, and thus discourages participants from deploying capital into TC’s pools to the detriment of the protocol.
I completely acknowledge that Savers is a wonderful user experience for those using it. It also onboarded a bunch of capital into the TC pools initially. Whenever a user deposited BTC into Savers, half of it was sold for RUNE. These are great things. Synths were big on improving arb efficiency. I consider both Synths and Savers to be huge successes.
That said, I think they have served their purpose and should now be sunset.
Streaming Swaps have changed the game for TC. They enable the best price execution for swaps in all of crypto, more or less regardless of swap pool depth. In other words, TC no longer needs really deep pools to have really good swap rates.
To me, it makes far more sense to let the market determine the depths of the pools, rather than artificially manipulate them through Savers and POL. Instead of liquidity being necessary to drive volume, now it makes sense to let swap fees drive liquidity. The more swap fees TC brings in, the more liquidity it will naturally and sustainably attract via the free market. We no longer need Savers to attract liquidity.
As far as I know, that was the whole point of Savers — to attract liquidity into the protocol. Since that’s no longer necessary, Savers are no longer necessary. Worse yet, I will make the case that they actively harm those that should be TC’s First Class citizens — dual liquidity providers. In doing so, they now perversely keep capital out of the TC pools — the exact opposite result for which they were intended.
Furthermore, Savers have demonstrably failed at their stated goal of increasing pool TVL. Pool TVL is DOWN (in RUNE terms) in the two years since Savers were introduced.
Now this is speculation — there are many variables in play — but here’s the story I see in this chart. At first Savers onboarded capital into the pools (this is the big uptrend immediately after the introduction of Savers). As Synth Utilization grew larger, it started to negatively impact DLPs in the ways I will explore shortly and DLPs started to withdraw (the broken uptrend and following prolonged downtrend). This is true even with the protocol’s thumb on the scale by way of POL. This fits with my contention that the presence of Savers disincentivizes DLPs. At the same time I could just have this wrong, and am open to other explanations from people who have more information than I do.
I believe that Savers break the positive incentives and flywheels of TC in two key ways, much to TC’s detriment.
Background
TC liquidity pools are more or less constant product AMM pools (with the addition of slip-based fees). This means that the pools are composed 50:50 of two assets — RUNE and the paired asset.
TC synthetic assets (Synths) are an accounting fiction superimposed on top of these paired assets. For example, one synth BTC is actually composed of .5BTC and an equal dollar value amount of RUNE. It is this fiction — pretending that a basket of RUNE and BTC combined is the same as BTC itself — that is the source of the problems I have identified.
Synths are entirely composed of DLPs. No DLPs, no Synths. Savers are Synths, so you can’t have Savers without DLPs.
Savers change the nature of DLP
The original TC pools were close to x * y = k continuous liquidity pools. I’m going to assume everyone reading this knows how they work. I will call them OGDLPs going forward.
The introduction of Savers/Synths (henceforth Savers) changes two key aspects of OGDLPs and makes them what I will call Synthed DLPs (SDLPs).
The first change is pretty well discussed in TC land. SDLPs are leveraged on RUNE’s price performance.
Savers moves RUNE price exposure from one set of capital deployers to another. When rune outperforms the paired asset capital moves from Savers to SDLPs. When rune underperforms capital moves from SDLPs to Savers. Thus, rune’s performance relative to the paired asset has a large impact on the return on SDLP capital. If rune outperforms the SDLPs end up better than a similar OGDLP. If rune underperforms the paired asset SDLPs can lose a significant chunk of their capital.
The following table and chart compare SDLP vs HODL performance to OGDLP vs HODL. It shows the performance of SDLP in a pool with 33% synth utilization as RUNE price varies against the paired asset. Comparing DLP to HODL is proper because rational actors seek to maximize value.
Synth Leverage
This chart demonstrates what we call Synth Leverage. SDLPs outperform OGDLPs when RUNE outperforms the paired asset, and underperforms OGDLPs when RUNE underperforms the paired asset. This table and chart do not account for swap fees.
It’s important to note that SDLPs suffer significantly more IL than OGDLPs when RUNE underperforms. The Savers suck capital from the DLPs. This alone is a huge disincentive for people to DLP on TC. There are sadly quite a few community members who are currently underwater on their DLP positions because of this synth leverage.
It is also important to note that Synth Leverage is asymmetric to the downside. What this means is that synth leverage hurts DLPs more when RUNE underperforms than it helps them when RUNE overperforms. The last column of the table expresses how SDLPs perform relative to OGDLPs as a percentage. I think this asymmetric risk to the downside is a particularly large disincentive to DLPs. Why take on significant downside risk for marginal upside benefit? Not very rational to do so.
The existence of Savers in a TC pool materially changes the nature of DLP. For a rational actor to want to SDLP, they must now be convinced that RUNE will outperform the paired asset. This is not the case for OGDLPs. For a rational actor to want to OGDLP, they only have to be convinced that swap fees will be greater than IL over time. In contrast, an SDLP is making a directional bet that RUNE will appreciate in price more than the paired asset or else suffer significant loss of capital. Why should the protocol force DLPs to be traders? To bet that RUNE will outperform the paired asset? I think this significantly shrinks the number of potential LPs.
Liquidity Death Spiral
RUNE is by nature a reflexive token, and thus can be expected to underperform in a bear market. In a prolonged bear market — when RUNE underperforms the paired asset — Savers will suck capital from SDLPs. Rather than let Savers take their gains, SDLPs will pull their capital. Even worse, SDLPs are exposed to Synth Loss (which I will soon explain) in this scenario, compounding their losses. Also, if RUNE:Asset price ratio decreases too much, there is a scenario where the whole pool is unable to fully back the Savers/Synths, aka Synth Liability >100%. This could potentially cause a bank run by the Savers depositors. All of these will drastically shrink TC’s pools. This is as good as deterministic game theory wise. Huge liability if you ask me. RUNE price would TANK.
To me, this liability alone is reason enough to sunset Savers. Let’s call this the Liquidity Death Spiral.
Synth Loss
Separate from Leveraged IL, Savers exiting the pool can lock in losses for the SDLPs and permanently shrink their capital. I will refer to this phenomenon as Synth Loss. I’ll run through an example to show what I mean.
Let’s imagine a USDT/RUNE pool that has a Savers Utilization of 33%. This means that 33% of the non-rune asset — in this case USDT — is composed of Savers. In our example the Savers position will start as 16.67% of the pool. The scenario is a 50% drawdown in rune, the Savers position withdrawing, and then a full retracement in price. Warning: lots of numbers, you can skip down to the colored chart below for the summary.
Initial State of the Liquidity Pool:
- RUNE balance: 5
- USDT balance: 500
- RUNE price: $100
- USDT price: $1
- USDT synths: 166.67
- Liquidity Units (L): 500
- Synth Units (U): 100
- Total Pool Units (P): 600
State of the Liquidity Pool after RUNE falls from $100 to $50:
- Asset Balances:
- RUNE balance: 7.07
- USDT balance: 353.55
2. Asset Prices:
- RUNE price: $50
- USDT price: $1
3. Synth Balance:
- USDT synths: 166.67
4. Liquidity Units (L):
- L = 500 (unchanged)
5. Synth Units (U):
- U ≈ 154.17
6. Total Pool Units (P):
- P ≈ 654.17
7. Pool Balances in USD:
- RUNE balance in USD: $353.55 (7.07 × $50)
- USDT balance in USD: $353.55
- Total pool balance in USD: $707.10
8. Liquidity Provider’s Share:
- 76.43% of the pool (500 units out of 654.17 total pool units) = $540.44. This would be $589.23 if not for the Synth leverage. This is the Synth Leveraged IL we discussed earlier.
This state represents the liquidity pool after the price of RUNE has fallen from $100 to $50, while the price of USDT remained stable at $1.
Then let’s say the Saver wants to withdraw their position. They think the bottom is in and want to deploy their stables.
Updated State of the Liquidity Pool after 166.67 USDT Synths Withdrawn and Arb Bot Balancing:
- Asset Balances:
- RUNE balance: 5.40
- USDT balance: 270.22
2. Asset Prices:
- RUNE price: $50
- USDT price: $1
3. Synth Balance:
- USDT synths: 0
4. Liquidity Units (L):
- L = 500 (unchanged)
5. Synth Units (U):
- U = 0
6. Total Pool Units (P):
- P = 500
7. Pool Balances in USD:
- RUNE balance in USD: $270.22 (5.40 × $50)
- USDT balance in USD: $270.22
- Total pool balance in USD: $540.43
8. Liquidity Provider’s Share:
- 100% of the pool (500 units out of 500 total pool units). Equal to $540.43.
The updated state reflects the changes in the liquidity pool after the withdrawal of 166.67 USDT synths and an arb bot balancing out the remaining USDT and RUNE. Now let’s see what happens as RUNE retraces the drawdown and returns to $100.
When RUNE returns to $100:
Updated State of Pool:
- Asset Balances:
- RUNE balance: 3.82
- USDT balance: 382.00
2. Asset Prices:
- RUNE price: $100
- USDT price: $1
3. Synth Balance:
- USDT synths: 0
4. Liquidity Units (L):
- L = 500
5. Synth Units (U):
- U = 0
6. Total Pool Units (P):
- P = 500
7. Pool Balances in USD:
- RUNE balance in USD: $382.00 (3.82 × $100)
- USDT balance in USD: $382.00
- Total pool balance in USD: $764.00
8. Liquidity Provider’s Share:
- 100% of the pool (500 units out of 500 total pool units) = $764, an 8.3% loss on the initial $833.33 of capital. Note this number here, we will return to it soon.
Now let’s compare the same situation in a TC pool without Savers.
OGDLP
Let’s set up the initial state of the liquidity pool with two Dual Liquidity Providers (DLPs) and no synths. Let’s give the two positions the same relative ownership of the pool as our first example.
Initial State of the Liquidity Pool (with 2 OGDLPs, no synths):
- Asset Balances:
- RUNE balance: 5
- USDT balance: 500
2. Asset Prices:
- RUNE price: $100
- USDT price: $1
3. Synth Balance:
- USDT synths: 0
4. Liquidity Units (L):
- LP1: 83.33 (16.67% of 500)
- LP2: 416.67 (83.33% of 500)
- Total: 500
5. Total Pool Units (P):
- P = 500
6. Pool Balances in USD:
- RUNE balance in USD: $500 (5 × $100)
- USDT balance in USD: $500
- Total pool balance in USD: $1000
7. Liquidity Providers’ Shares:
- LP1: 16.67% of the pool (83.33 liquidity units out of 500 total pool units)
- LP2: 83.33% of the pool (416.67 liquidity units out of 500 total pool units)
Each LP’s value in USD:
- LP1: $166.70 (16.67% of $1000)
- LP2: $833.30 (83.33% of $1000)
Let’s update the state of the liquidity pool after the RUNE price drops from $100 to $50, considering the two DLPs and no synths.
Updated State of the Liquidity Pool after RUNE Price Change to $50 (with 2 DLPs, no synths):
- Asset Balances:
- RUNE balance: 7.07
- USDT balance: 353.55
2. Asset Prices:
- RUNE price: $50
- USDT price: $1
3. Synth Balance:
- USDT synths: 0
4. Liquidity Units (L):
- LP1: 83.33 (unchanged)
- LP2: 416.67 (unchanged)
- Total: 500
5. Total Pool Units (P):
- P = 500 (unchanged)
6. Pool Balances in USD:
- RUNE balance in USD: $353.55 (7.07 × $50)
- USDT balance in USD: $353.55
- Total pool balance in USD: $707.10
7. Liquidity Providers’ Shares:
- LP1: 16.67% of the pool (unchanged)
- LP2: 83.33% of the pool (unchanged)
Each LP’s new value in USD:
- LP1: $117.87 (16.67% of $707.10)
- LP2: $589.23 (83.33% of $707.10)
After the RUNE price drops from $100 to $50, the pool rebalances to maintain the 50/50 ratio of value between RUNE and USDT. The RUNE balance increases while the USDT balance decreases, but the total value of the pool in USD decreases from $1000 to $707.10.
Since there are no synths in the pool, the liquidity providers’ shares remain unchanged, as the total pool units (P) remain the same. However, the value of their shares in USD has decreased due to the overall decrease in the pool’s value. We see here that OGDLP2 fares better than SDLP in the same scenario.
Updated State of the Liquidity Pool after DLP1 Removes Their Liquidity:
Updated State of Pool:
- Asset Balances:
- RUNE balance: 5.89
- USDT balance: 294.62
2. Asset Prices:
- RUNE price: $50
- USDT price: $1
3. Synth Balance:
- USDT synths: 0
4. Liquidity Units (L):
- LP1: 0 (withdrawn)
- LP2: 416.67 (unchanged)
- Total: 416.67
5. Total Pool Units (P):
- P = 416.67
6. Pool Balances in USD:
- RUNE balance in USD: $294.50 (5.89 × $50)
- USDT balance in USD: $294.62
- Total pool balance in USD: $589.12
7. Liquidity Provider’s Share:
- LP2: 100% of the pool (416.67 liquidity units out of 416.67 total pool units)
LP2’s value in USD: $589.12 because they own 100% of the pool.
When RUNE returns to $100:
- Asset Balances:
- RUNE balance: 4.17
- USDT balance: 416.38
2. Asset Prices:
- RUNE price: $100
- USDT price: $1
3. Synth Balance:
- USDT synths: 0
4. Liquidity Units (L):
- LP1: 0 (withdrawn)
- LP2: 416.67
- Total: 416.67
5. Total Pool Units (P):
- P = 416.67
6. Pool Balances in USD:
- RUNE balance in USD: $417.00 (4.17 × $100)
- USDT balance in USD: $416.38
- Total pool balance in USD: $833.38
7. Liquidity Provider’s Share:
- LP2: 100% of the pool (416.67 liquidity units out of 416.67 total pool units)
LP2’s value in USD: $833.38 (100% of pool). Notice that DLP2’s position returned to its original value.
Summary of Examples
Clearly I’ve left out fees and block rewards in these examples.
Now let’s compare them side by side. In particular we want to compare the performance of Synthed DLP to OGDLP2 (cyan).
We can clearly see that the Saver, by withdrawing capital while RUNE was underperforming, gave a forced haircut to the SDLP. The SDLP suffered a 8.3% loss, while the OGDLP remained whole. This is what I mean by Savers exiting “locking in” IL for SDLPs, what I’m calling Synth Loss. Very important to note that Synth Loss is separate and in addition to impermanent loss. Also note that Synth Loss can eat whatever yield the SDLP might have earned.
Loss of Determinability
Synth Loss changes the proposition of DLPing in a very significant and material way: it makes DLP performance non-deterministic.
All passive LP performance is dependent on price action and fees, and thus is non-deterministic (since price movements and fees can’t be predicted in advance). But if we accept price movement as a given, then LP performance is determined. One can precisely calculate how much IL a position will suffer given a specific movement in price.
Synth Loss breaks this determinability. Because Savers can withdraw whenever they like and there is no way to predict this, there is no way for a DLP to even attempt to reason about how much Synth Loss they might be subject to. Large scale capital deployers HATE not being able to predict their returns.
Conclusion
DLPing in a Synthed pool seems like a fool’s bargain to me.
I don’t have the data to prove it, but I’m all but certain that Synth Loss is why TC DLPs have been performing so poorly over the last year. There are threads in the Dev Discord that explore this phenomenon in much greater detail.
As far as I can tell the whole justification for these three huge liabilities associated with Savers — Asymmetric Synth Leveraged Downside, Liquidity Death Spiral, Synth Loss — is so that TC can have deeper pools. But the main reason to have deeper pools was to have efficient swaps, which Streaming Swaps now give us anyway. And the TC pools are shallower now (in rune terms) than they were when Savers launched! I see the benefits of Savers to be marginal, if any, while adding a LOT of unnecessary risk to the protocol.
In short, I see Savers as very detrimental to DLPs. Since Savers are built out of DLPs, this seems backwards. Why is the protocol favoring users who take on no RUNE exposure (Savers) over those that do (DLPs)? It makes no sense to me.
For these reasons I would like to see Savers sunset.
I think Savers could be wound down gracefully. First, by closing further deposits to Savers. Then eventually, much later on, by gradually throttling yield to Savers, eventually down to 0. I could see this allowing new DLP liquidity to offset the loss of Savers liquidity so that protocol liquidity doesn’t take a big hit all at once. Eventually we return to OGDLPs and let the market determine pool depth.
The Counter Argument
There are two main reasons I can think of to not sunset Savers:
- Savers exiting would lower TVL. Lower TVL means less volume, less volume, less swap fees.
- Savers exiting would also mean RUNE sell pressure, equal to half of Savers TVL.
I agree that both of these reasons are real and uncomfortable, but find the Liquidity Death Spiral worse. Better to rip this band-aid off now in my opinion.
Furthermore, I am convinced that with Savers gone there would be a lot more DLP since they’re no longer facing Synth Loss and synth leveraged IL. Pool TVL could finally break the downtrend of the last year and start growing again.
One other argument I’ve encountered is that current DLPs are significantly underwater due to Synth leverage, and we should wait to sunset Savers until after RUNE price has improved and they can exit more or less whole.
While I 100% feel for their pain, I think my suggestion of simply stopping new Savers adds is a great middle ground. They’ll still have synth leverage from the existing Savers, and the protocol wouldn’t be taking on any additional Savers liability.
Make DLP Great Again
There’s been a lot of talk about improving the DLP experience, and I think the best and simplest thing we can do to make DLPing better on TC is to remove Synth Leverage and the potential for Synth Loss and the Liquidity Death Spiral by sunsetting Savers.
This all said, I really respect all the devs, and don’t want to step on their toes. I’ve been vocal in the Dev Discord about this issue, and there seemed to be a consensus forming around lowering MAXSYNTHPERPOOLDEPTH -> 3333. This would in practice stop new Savers adds until Synth Utilization was under 33%. When I recently asked when this would be implemented, JP said to hold off for now. I am happy to wait. I obviously am convinced that Savers aren’t good for the protocol, but I am even more happy to let the devs cook and not step on their toes.
An alternative way to offer single-sided LP
This would be a separate ADR, but there’s another way TC could offer Single Sided LP without taking on any additional economic risk. Because there absolutely is demand for SSLP.
Paired Liquidity — An alternate design for Single Sided Liquidity providers
I don’t know how technically difficult this would be to implement, but conceptually I think it’s pretty clean.
User A wants single-sided yield on an asset, let’s say BTC. They convert their BTC to a Trade Asset, and tell the protocol how long they’re willing to have it locked in the LP pools. This is publicly viewable.
User B wants single sided yield on their RUNE. They choose from the assets that Users A have posted, and deposit a commensurate amount of RUNE.
The protocol moves User A’s BTC and User B’s RUNE into the BTC/RUNE pool. It’s locked there for the duration of the the time preference that User A set. THORChain notes the relative value of the two assets.
Locked in this case means that both User A and User B would have to sign a transaction requesting to withdraw the paired liquidity. Kinda like a 2/2 multi-sig.
Once the time preference of the paired liquidity has passed, a signed transaction from either of the two users would be sufficient to withdraw the paired liquidity. Switches to “1/2 multi-sig”.
The protocol then sends the assets to the Users wallets at the same ratio at which they were deposited. Meaning if BTC:RUNE was 10,000:1 at the start, that ratio is preserved upon exit (via an exit swap).
Thus, each user keeps price exposure to only their asset. If their joint DLP exits up 10% vs. HODL, then User A made 10% on their BTC and User B made 10% on their RUNE.
Of course Paired Liquidity still has to contend with IL, but given enough time the yield should be greater.
If we wanted to make it more complex, preferences other than time could be expressed on the initial posting such as, “it unlocks once the position is up 50%” or whatever.
This wouldn’t work with Savers and Synths in the pools, but theoretically could replace Savers.
===
Please feel welcome to join the THORChain University Discord to chat about this topic or any other THORChain interest you may have.
*New!* The Bifröst School: A robust, incentivized, free on-chain learning program that teaches THORChain users everything about its mechanics, design, and features.
Explore THORChain: Website, X, Telegram, Developer Discord.
Explore Maya Protocol, the first friendly fork of THORChain: Website, X, Discord, Telegram.
Decentralized, permissionless, non-custodial, trust-minimized, open-sourced, economically-secured, non-wrapped, native-to-native cross-chain swaps, and savings!