Glued to the exchange: How sticky is the user base of Uniswap pools?
Trading volume and liquidity are main components to determine the success and market share of a pool on a decentralized exchange (DEX). One would think that the market follows a winner-takes-it-all: best APY/APR attracts the most liquidity, which retroactively gets the most trade volume due to best trade execution. We currently observe that this is not the case, as multiple DEXes exist and each have their fair share of liquidity and therefore trading volume. What is driving that behavior?
One concept floated on the Uniswap v3 governance forum caught the team’s idea and was extended beyond theory: pool stickiness. The general concept translates into traders not opting for best execution but rely on the “brand” of an exchange and deep liquidity/small fee charge to execute the trade. The same can count for liquidity providers, which opt for potential less revenue but steady volume, thus return/yield on assets.
This topic has been actively picked up as part of the upcoming fee switch launch as test implementation. Instead of all revenue being allocated to LPs, the fee switch will split the incoming revenue into 90% for LPs with 10% going towards UNI token holders. The latter did not have any financial gain from holding the token so far, with the fee switch being the first step to test the viability of this idea in the future. One major concern is the exodus of liquidity due to upcoming lower yields, resulting in lower volume and the loss as the #1 DEX.
- Stickiness is pool-specific and depends on the pool characteristics
- Lower-volume pools are sticky and would not be heavily affected by the fee switch due their liquidity structure (majority held by whales) and sticky volume.
- High-volume pools are more sensible to stickiness (i.e. less sticky) because of liquidity shifts between exchanges and just-in-time liquidity. Both influence trade execution, which then impacts overall volume of the pool
- Stickiness is a potential method to simulate implemented behavioral actions to run as validation tests prior starting experiments on-chain
This analysis will zoom in on selected Uniswap v3 pools to see whether and how quantifiable pool stickiness is and how to leverage it in the future. Both liquidity and trading will be taken into account and broken down in several key parts. First of all, we will have to define stickiness in this context:
How to determine stickiness
Stickiness has to be defined for both trading volume & liquidity and based on data available on Dune and the contracts of both Uniswap and competitive DEXes.
A trader is considered sticky if the executed trade does not result in the best possible outcome. Despite having the option to go with the highest return, the trading place and the familiarity are more important.
We check the trades of the respective market place at time x and compare the potential execution of other exchanges:
- What would have been the spot rate on other exchanges? We source the latest spot rate from the last trade (as no additional trade has happened) and apply changes to the pool liquidity to get the possible new spot rate of that pool for any competitor. We assume that no additional liquidity is taken into account (which can be added at a later stage)
- What were the respective swap fees for the trade? Swap fees are known in advance for every pool.
- What gas fees would have been paid? We assume gas fees would have been equal across all markets and take them out of the equation.
- What about JIT liquidity to get a better swap rate? See comment on spot rate, this can be included
To know whether liquidity is provided due to an optimal APR/APY or the exchange being a safe haven is tricky, we simply do not know why liquidity is provided. One step to understand how liquidity is distributed are withdrawals.
Once a withdrawal happens, we can track whether, where and how liquidity was redeployed on any other exchange. This leads to a direct comparison of liquidity and its flow around time. It is then an additional modeling job to determine how large the difference in APY is from one pool to another.
Users who do not withdraw their funds are considered sticky at this stage, where an additional action of the fee switch module is not implemented. Yet comparing the APY based on the returns on the capital employed on different exchanges can give an initial hint on how willing users are to hunt for APY.
What pools to analyze?
Selecting relevant pools is the most complex selection of all parts, as all fee tiers have to be analyzed and different asset pairs checked. For simplicity, we opt to go with the pairs initially chosen for the Uniswap Fee Switch trial:
Note that all are stable-volatile pairs, as those pools attract a considerable volume. An additional analysis can be conducted on smaller, more exotic pools at a later stage with more fundamentals set and validated by the community.
Analyzing the different pools: How sticky are LPs & traders?
ETH-USDC is one of the pools that is dominated by Uniswap. An average of 95.4 % of all trades go through either one of the Uniswap pools. The majority is taken by the 0.05% pool, racking up 93% of the Uniswap trades of all three pools.
This leaves little to no volume & liquidity to the pool proposed for the fee switch. Volume share of all ETH-USDC hovers around 0.1%, leading to being in sync with other pools and the current declining trend of DEX volume.Given the overall impact of this pool, stickiness for traders can be set equal to around 1% of the total trade going through. Given the high organic share of trades happening on this pool and the limited impact of liquidity loss along the observed timeframe, liquidity can also be assumed sticky.
Note that the pool is held by a single whale (>50% of pool TVL), which might be subtle to a fee switch and will not stick around. Of the 231 LPs, little to no change in overall liquidity is detected over the observation period.
The respective DAI pool on Uniswap has a larger impact, especially because of its fee tier and more liquidity available. We additionally observe a not so consistent volume share of the pools, with both Sushiswap & 0x partly taking over volume over time. This makes it more appealing to investigate whether and how this is pieced together.
Throughout most of the observation period, the Uniswap take rate hovers around 90%+, with a 2/3 & 1/3 split in volume between the 0.05% & 0.3% pool.
We also note a decrease in volume around that date across all pools, leading to potentially losing it due to worser trade execution. This goes hand-in-hand with a reduction in arbitrage/sandwich share of the pool analyzed but also the larger pool with the same token pair.
What happened? What led to the considerable shift to another DEX? The net liquidity of the pool is positive i.e. more liquidity has been added to the pool over time. Liquidity depth is covered beyond a 1% slippage mark, making it not less attractive for arbitrageurs to trade on this pool.
The simple answer is: single trades from MEV bots influence the volume so much that they distort relations. One single transaction of a bot (tx) on the Sushiswap pool represented 93.2% of the daily volume. Note that this transaction is not due to pool skewness or imbalance, as the trade on Sushiswap happened 8+ hours after large arbitrage trades on Uniswap but rather a sandwich attack, which was an arbitrage trade.
0x Native interaction with Uniswap in the context of ETH-DAI is slightly different, as arbitrage action can only be observed when large trades are looming. The trades executed on the different exchanges are executed swaps on the respective pools and might be associated with the pool stickiness.
But why were there trades executed on 0x native in the first place?
December 7th: Metamask & CowSwap router got a better spot rate for the three trades above >300k, whereas MEV bot chose to go with Uniswap executions in transactions before and after.
December 8th: Due to the larger amount of trades happening (mainly arbitrage), the calculated spot price with slippage/price impact by Paraswap (through which the trade was executed) would only cover half of the transaction, leading to further arbitrage action afterwards.
To conclude, the ETH-DAI pool analyzed is more prone to individual, large trades, which are executed unrelated to any macro-situation and do not follow any stickiness but rather an individual decision to use aggregators. MEV bots do exploit these opportunities but have somewhat of stickiness towards the Uniswap, as potentially better spot rates might be available on other exchanges. Liquidity stickiness plays a limited role in this pool, as the number of liquidity providers is stable, with mainly two whales providing 60% of the pool liquidity.
The by far most interesting pool of the trio is the 0.3% ETH-USDT with the largest volume and biggest volume share compared to sister pools. More competition is present, with mainly Curve sporadically eating up to 50% of the market. A direct comparison of the Curve tricrypto2 pool and the aforementioned Uniswap pool show a break in arbitrage trade with a rising volume on Curve.
Compared to the previous pools, the LP structure is much more fragmented with many more whales contributing to the TVL. Interestingly, the intersection of LP contributors to Curve & Uniswap in the observation period is at 95, i.e. 95 users contributed to either or both pools.
This comes in handy to define Just-In-Time Liquidity (JIT), where arbitrageurs are eager to collect fees on a large trade rather than sandwich it. This is largely not beneficial to regular liquidity providers, as the fees for larger trades are assumed lost to the JIT provider. This ETH-USDT has been “victim” of JIT over time. Yet only three separate users do provide JIT, leaving multiple users’ intention open.
When excluding JIT providers from other users, we observe a high correlation in Curve deposits and Uniswap withdrawals. Both Pearson and Spearman correlation result in 0.7, which can be interpreted as strong correlation.
Furthermore, the yield compared between the two platforms shows a disparity. Yields on Uniswap are throughout higher (smaller window, maintained over total observation period). An additional analysis has to be conducted to analyze the block behavior of liquidity provided throughout the time.
Liquidity stickiness in this pool therefore plays a major role, where more research has to go on and has to be set in context with the motives & connections between different players and analyzed intra-day rather than only on a daily basis.
Trade execution would be the last criteria to check and see whether any strong discrepancies between spot rate and true value can be detected.
Uniswap shows larger margin of errors/slippage in their pools when considering extreme values, yet has on median the better trade execution (Curve has the better average).
Uniswap: 1.00040497618258 (Median), 0.9974149791432757 (Average)
Curve: 1.0004970000000013(Median), 0.9986250920734188 (Average)
More granular trade executions will be part of a follow-up analysis on this topic, as trade execution will be a main metric of the fee switch testing implementation. The current rationale is the tying of arbitrage volume and therefore the majority to any other whale transaction happening on the same pool or competitive DEXes. The same pattern as before emerges, where arbitrageurs per se have the strong tendency to stick to a DEX of their choice.
Both trading and liquidity stickinesses are very pool dependent and rely on in-depth analysis of the respective pool. A general tendency towards less stickiness on larger pools both in liquidity (lesser extent) and volume can be observed, yet might be more obvious when looking at a more granular scale.
The general consensus (to be followed, if needed, on a transaction basis) for the analyzed pools is the following:
- ETH-DAI: High liquidity stickiness, mid trading stickiness (depending on whale behavior and their respective choice to trade on aggregators)
- ETH-USDC: High liquidity, high volume stickiness, very much independent of any market trends
- ETH-USDT: High-Mid liquidity stickiness, which depends on JIT liquidity and more behavioral analysis to understand why yield does not necessarily vouch for all the liquidity. Mid-low volume stickiness with main competition Curve, where trade execution is nearly at the same level with higher extremes on Uniswap.
To conclude, different patterns emerge based on the different pools taken into account in this analysis. Prior to the fee switch implementation, it is unclear how users will behave and whether a sudden drop in liquidity is imminent. Current data shows that the yield on competitive pools is not as high as when the fee switch will be implemented, leading to the open question: How can we get a better estimate of the reaction of users apart without potentially harming the current standing of the protocol?