Automated Market Makers: Uniswap v3 vs Curve
Note: this article was written on 10th September 2022 and thus all the data used are related to the mentioned date.
Before we start talking about Automated Market Makers (AMMs), let’s begin with defining what Market Makers are first. In traditional stock exchanges or the centralized crypto exchanges, trading an asset can only be done through an Order Book Model where buyers and sellers come together and place their orders. Buyers try to buy a certain asset for the lowest price possible whereas Sellers try to sell the same asset for as high as possible. In order for trades to actually happen, the buyers and sellers have to converge on a price which can happen by either a buyer bidding a higher price or a seller asking for a lower price. But what if they are not willing to place their orders at a fair price? And what if there are not enough coins that you can buy/sell at a fair price? This is where market makers come into play.
In essence, market makers are entities that facilitate trading by always willing to buy or sell a particular asset. By doing that, they provide liquidity so that users can always trade without having to wait for another counterparty to show up.
Now there are two main reasons why the usual market makers make the protocol slow, expensive and provide poor user experience if they are used in decentralized exchanges:
- The traditional Order Book Model relies heavily on market makers “making the market” and in the absence of market makers, the exchange becomes illiquid and unusable for normal users
- Market makers usually track the current price of an asset by constantly changing their prices which results in a huge number of orders and order cancellations. Thus Ethereum with its current throughput of 13 transactions per second on average and 13 second block time, is not a viable option for an order book exchange. Also you need to pay a gas fee for every interaction with a smart contract so market makers could go bankrupt by just updating their orders.
Second layer scaling solutions could be a good counter for the second point but still they would be dependent on market makers and could face liquidity issues. Also if a user wants to execute a single trade, that person would have to move funds in and out of the second layer which adds 2 extra steps to the process. That is why there was a need to invent something new that can work well in the decentralized world and this is where Liquidity Pools come into play.
In its basic form, a liquidity pool holds two tokens and each pool creates a new market for that particular pair of tokens. When a liquidity pool is created, the first liquidity provider (LP) sets the initial price of the assets in the pool. The LP is incentivized to supply an equal value of both tokens in the pool. If the initial price of the tokens in the pool diverges from the current global market price, it creates an instant arbitrage opportunity that can result in lost capital for the LP. The concept of supplying an equal value of both tokens in the pool remains the same for all the other LPs that are willing to add more funds to the pool later.
When LPs provide liquidity to a pool they receive LP tokens* in proportion to how much liquidity they supplied to the pool. When a trade is facilitated by a pool in UniSwap, a 0.30% fee* is proportionally distributed amongst all the LP token holders. If LPs want to get their underlying liquidities plus any accumulated fees back, they must burn their LP tokens.
- LP tokens (ERC-20) are no longer used in Uniswap v3 as in this version, the liquidity positions are no longer fungible and instead providing liquidity is tracked by non-fungible ERC-721 tokens. This also means that trading fees are no longer re-invested back into the liquidity pool on LP’s behalf unlike previous versions but peripheral contracts can be created to offer such functionality.
- Uniswap v3 added flexible trading fees as one of its new features where instead of offering the standard 0.30% trading fee like previous versions, v3 offers three separate fee tiers. The Uniswap team expects the 0.01% and 0.05% fees to be predominantly used for pools with similar priced assets such as different stable coins, 0.30% for other standard pairs and 1% for more exotic pairs.
Each token swap that a liquidity pool facilitates results in a price adjustment according to a deterministic pricing algorithm. This mechanism is also called an Automated Market Maker (AMM). The concepts behind liquidity pools and AMMs are quite simple yet extremely powerful. Liquidity pools across different protocols (for example UniSwap and Curve) use slightly different algorithms.
Before we continue, let’s read a basic definition of what the protocols at discussion are: Uniswap is an AMM protocol for decentralized and permission-less exchange of tokens on the Ethereum blockchain (in short, general purpose DEX on Ethereum). Uniswap v3 focuses on maximizing capital efficiency when compared to v2. This not only allows LPs to earn a higher return on their capital, but also dramatically improves trade execution that can now be compared or even surpass the quality of both centralized exchanges and stable coin focused AMMs.
Curve is an AMM protocol designed for swapping between stable coins with low fees and slippage. Curve v2 marked Curve’s entry as a general purpose DEX with functionality to support volatile, multi-asset pools. The first pool was called Tricrypto — a pool consisting of ETH, WBTC, and USDT.
The concept of Impermanent Loss will be defined here since it is crucial to understand for later discussions:
In essence, impermanent loss is a temporary loss of funds which occurs when providing liquidity. It’s very often explained as the difference between holding an asset vs providing liquidity in that asset. Impermanent loss is usually observed in standard liquidity pools where the LP has to provide both assets in a correct ratio and one of the assets is volatile in relation to the other. The easiest way to fully understand impermanent loss is to go through a quick example:
Let’s assume an LP provides liquidity to a DAI/ETH Uniswap v2 50/50 pool. To do this, the LP needs to provide an equal value of both tokens to the pool. So if the LP provides 10,000 DAI tokens with DAI price at 1$ which will be valued at $10,000 , the LP also has to provide 20 ETH with ETH price at $500 so that it will be equally valued at $10,000. If the ETH price in external venues such as a centralized exchange (CEX) goes to $550, then other market participants called Arbitragers come into play. The arbitrager notices the price difference between the CEX and Uniswap and sees that as an opportunity for arbitrage and thus making profit. Since Uniswap v2 uses a constant product market maker algorithm which will be explained later in this document, the arbitrager is able to buy cheaper ETH on Uniswap until there is no more price discrepancy between Uniswap and the CEX.
By plugging the external price ($550) into a few formulas that can be derived from the constant product market maker formula ( x . y = k ), we can see that at the point where the Uniswap price for ETH will be at $550, there will be 10,488.09 DAI and 19.07 ETH present in the pool. So the arbitrager is able to buy 0.93 ETH in order to achieve equilibrium between Uniswap’s and the CEX’s prices for ETH. The arbitrager paid 488.09 DAI for the 0.93 ETH which means the average price for the trade is 524.83 DAI/ETH and since the new price for ETH is at $550, the arbitrager makes an approximate profit of $23 on the 0.93 ETH minus the fees.
Let’s see what this arbitrage means for the LP. Before the arbitrage, the LP’s total value of assets was $20,000 but after the arbitrage the LP has 10,488.09 DAI plus 19.07 ETH at the price of $550 which adds to a total of $20,976.59. Whereas if the LP had simply held on the assets, the total assets would be at $21,000 with 10,000 DAI plus 20 ETH at $550. Therefore the LP has experienced $23.41 of impermanent loss. This loss is called impermanent because the $23.41 lost is only on paper and if the LP doesn’t withdraw the liquidity at this point and the price of ETH goes back to $500, the impermanent loss is canceled back to zero. On the other hand if the LP decides to withdraw the liquidity at this point, the LP realizes a loss of $23.41 thereby making it permanent loss.
Now let’s compare Uniswap v3 and Curve v2 in order to see which is the best choice for our developers who are:
- New to AMMs
- Not in it for the technology; just want to earn money
- Are not experts with equations but understand the basics
Liquidity Equation
As mentioned previously, liquidity pools across different protocols use different algorithms. Previous versions of Uniswap (v1 and v2) used the most basic form of liquidity pools with a constant product market maker algorithm.
Where x is the quantity of asset A and y is the quantity of asset B and k is constant. This makes sure that the product of the quantities of the two supplied tokens in a pool always remains the same. Also the algorithm enables a pool to always provide liquidity no matter how large a trade is and the only reason for this is that the algorithm asymptotically increases the price of the token as the desired quantity increases.
What’s interesting is the price is automatically set after each trade. Basically the ratio of the tokens in the pool dictates the price. How much the price moves depends on the size of the trade in proportion to the size of the pool. The bigger the pool is in comparison to a trade, the lesser the price impact (Slippage) occurs and vice-versa.
In Order Book Model exchanges, the order book allows us to read how the price will change as we buy or sell huge amounts of an asset, which is called Slippage. In UniSwap, the x . y = k equation and depth of the pool determines the slippage. To avoid huge slippage, deep liquidity is required. But even with little depth, if the tokens are traded elsewhere with some degree of liquidity, draining the pool is expensive.
This demonstrates that it is difficult to run out of tokens as long as the tokens don’t lose value in the markets.
But Uniswap v3 doesn’t use the basic product invariant like earlier versions which were designed to provide liquidity across the entire price range (0, ∞). This was simple to implement and allowed liquidity to be efficiently aggregated, but also meant that much of the assets held in a pool are never touched. Having considered this, v3 allows LPs to concentrate their liquidity to smaller price ranges than (0, ∞). The Uniswap team calls liquidity concentrated to a finite range, a position. A position only needs to maintain enough reserves to support trading within its range, and therefore can act like a constant product pool with larger reserves (virtual reserves) within that range.
Specifically, a position only needs to hold enough of asset X to cover price movement to its upper bound, because upwards price movement corresponds to depletion of the X reserves. Similarly, it only needs to hold enough of asset Y to cover price movement to its lower bound. Fig. 1 depicts this relationship for a position on a range [P𝑎, P𝑏] and a current price P𝑐 ∈ [P𝑎, P𝑏]. The position’s real reserves are denoted by 𝑥real and 𝑦real . When the price exits a position’s range, the position’s liquidity is no longer active, and no longer earns fees. At that point, its liquidity is composed entirely of a single asset, because the reserves of the other asset must have been entirely depleted. If the price ever reenters the range, the liquidity becomes active again. The amount of liquidity provided can be measured by the value 𝐿, which is equal to √ 𝑘. The real reserves of a position are described by the curve:
This curve is a translation of the basic product invariant used by previous Uniswap versions such that the position is solvent exactly within its range.
Liquidity providers are free to create as many positions as they see fit, each on its own price range. In this way, LPs can approximate any desired distribution of liquidity on the price space. Moreover, this serves as a mechanism to let the market decide where liquidity should be allocated. Rational LPs can reduce their capital costs by concentrating their liquidity in a narrow band around the current price, and adding or removing tokens as the price moves to keep their liquidity active.
Curve v1 realized that the UniSwap (v1 and v2) AMM mechanism doesn’t work very well for assets with similar prices such as stable coins and different flavors of the same coin. Curve v1 pools by implementing a slightly different algorithm are able to offer lower fees and slippage when exchanging assets with similar prices. Since Curve v1 mostly focused on stable coins, the AMM algorithm is a middle ground between Uniswap’s product invariant protocol ( x . y = k ) and a linear invariant protocol ( x + y = C ).
Curve v1 also realized that an AMM pool with zero slippage is not possible since the pool will eventually run out of tokens. Hence why Curve tries to achieve a compromise between low slippage and a stable and balanced pool.
Skipping through the mathematics, the Curve v1 Invariant is:
Where A is an amplification coefficient and D is the total number of coins when they have an equal price (total deposits in the pool when it is in equilibrium).
So the process to run a Curve pool will be as follows:
- Decide on the amplification coefficient A (for stable coins, how flat is the curve around $1)
- Add tokens — → Calculate D
- When a trade is done, say x is deposited and apply fees*
- Then solve the equation for y, given the current parameters A, D and x.
- Recalculate D
* fees are set to 0.04% but Curve v2 pools use dynamic fees which varies between 0.04% to 0.40%
Unlike Uniswap, Curve also has multi token pools for which the Curve v1 Invariant can be generalized as follows:
Using this invariant, Curve was able to minimize the slippage while still having the capability to shoot rapidly towards imbalance. As a result, the Curve pools can stay up to 70% imbalanced which means LPs don’t have to provide equal values of the tokens they want to deploy in a pool. This was very useful for Curve v1 which focused extraordinarily on stable coins.
In case you want to see the Math behind the Curve v1 Invariant you can check the Dr. Alvaro Feito link in the references section.
In Curve v2, the team describes a method for creating liquidity for assets which do not necessarily have similar prices to each other in a way more efficient than x · y = k invariant. Curve v2 concentrates liquidity given by the current “internal oracle” price but only moves that price when the loss is smaller than part of the profit which the system makes. The Curve team claimed that Curve v2 invariant creates 5 to 10 times higher liquidity than the Uniswap invariant, as well as higher profits for liquidity providers but that was before the Uniswap team announced Uniswap v3. The Curve team describe the method in general, the invariants chosen, limits of their applicability and results of simulations based on historic pricing data. The Curve v2 invariant is also called the CurveCrypto Invariant which is encouraged by the Curve v1 (stableswap) invariant:
however we define K slightly differently:
where A is the amplification coefficient and γ > 0 (but usually a small number) has a meaning of distance between two dashed curves in the figure below. The invariant works approximately as a superposition of constant-product and stableswap invariants
.
After solving this invariant against xj or D by defining it in a form F(x, D) = 0, we arrive at:
Concentrated Liquidity (Uniswap v3 vs Curve v2)
Although an explanation of concentrated liquidity was given while talking about the Uniswap v3 liquidity equation, let’s briefly define it again. Concentrated liquidity is the liquidity that is allocated within a custom price range whereas if liquidity is not concentrated, it will be distributed uniformly along the price curve between 0 and infinity.
So let’s look at an example to get a better understanding of why the concept of concentrated liquidity is necessary. In the DAI/USDC Uniswap v2 pool, because the liquidity is uniformly distributed along the price curve between 0 and infinity, only 0.5% of the liquidity in the pool is used between the price range of $0.99 — $1.01 where all the trading for this pair occurs and the other 99.5% of the capital is pretty much never used. But in Uniswap v3, LPs can choose a custom price range when providing liquidity which is achieved by creating a separate curve for each LP. So the users here trade against combined liquidity that is available at a certain price point. This combined liquidity comes from all the price curves that overlap at this specific price point.
In order to better understand the capital efficiency created through concentrated liquidity, let’s look at a great example:
Imagine Alice and Bob want to supply liquidity for the ETH/DAI Uniswap v3 pool and each one of them has $10,000 and ETH current price is at $1750. Alice splits her entire capital between equal values of ETH and DAI and deploys it across the entire price range similar to v2. Whereas Bob instead of using his entire capital, decides to concentrate his liquidity and provides capital within the price range of $1500 to $2500. Bob only deposits 600 DAI plus 0.37 ETH which is a total of $1200 and keeps the remaining $8800 for other purposes. What’s interesting is that as long as the ETH/DAI price stays within the $1500 to $2500 range, both Alice and Bob earn the same amount of trading fees. This means that Bob was able to deploy only 12% of Alice’s capital and still make the same returns or in other words Bob made his capital 8.34 times more efficient than Alice’s capital.
In Uniswap v3 using the concept of concentrated liquidity, LPs can provide a single token as liquidity in a custom price range above or below the current market price. When the market price enters into the specified range, one asset is sold for another along a smooth curve while still earning swap fees in the process. This feature when used together with a narrow range allows for achieving a similar goal to a standard limit order that can be set at a specific price. This feature is also called Range Limit Orders. LPs can also provide liquidity in multiple price ranges that may or may not overlap. Also, because of better capital efficiency in Uniswap v3, LPs can create overall portfolios that significantly increase exposure to preferred assets and reduce their downside risk. In Curve, it is not necessary for LPs to deposit all the tokens in a pool (for example the 3pool consisting of USDT, USDC and DAI), LPs can deposit one or several of the tokens in a pool and it won’t affect their returns but being able to provide a single asset as liquidity doesn’t allow the LPs to achieve a similar goal to a standard limit order. This is because of the Automatic Concentrated Liquidity which will be explained below.
So the main difference between Uniswap v3 and Curve v2 in terms of concentrated liquidity is as follows:
- Uniswap v3 enables an Active LP experience: as previously mentioned “When the price exits a LP’s price range, the LP’s liquidity is no longer active, and no longer earns fees. At that point, the LP’s liquidity is composed entirely of a single asset, because the reserves of the other asset must have been entirely depleted. If the price ever reenters the range, the liquidity becomes active again.” This means that LPs in Uniswap v3 have to regularly manage their price ranges in order to avoid impermanent loss.
- Curve v2 enable a Passive LP experience by using Automated Concentrated Liquidity: Instead of following Uniswap’s path of allowing LPs to express their view on markets by providing liquidity within any price range, Curve v2 enables automatic liquidity concentration around an internal oracle price, which is a moving average of all trades that occur in the pool. Curve v2 uses dynamic fees that increase during volatility to compensate for impermanent loss incurred by liquidity providers. This is similar to how traditional market makers increase spreads during volatility. Automated concentrated liquidity is great for unsophisticated LPs but comes at the expense of eliminating price range flexibility for professional/active market makers.
Incentives for LPs
The main incentive for LPs in any AMM is to earn fees from every trade that is executed by the pool that the LP is providing liquidity in. AMMs incentivize LPs by setting their fees in such a way that the LPs can still earn money if they experience impermanent loss under the condition that the impermanent loss is smaller than the fees collected by the LP. Some liquidity pools also provide additional incentives for LPs by offering Liquidity Mining programs. Liquidity mining in essence is a way of rewarding LPs with extra tokens for providing liquidity to certain pools or using a protocol. The value of the additional tokens in some cases can completely negate the value lost by impermanent loss.
Uniswap v3 LPs can earn 0.01%, 0.05% , 0.30% or 1% in fees depending on the pool they chose to provide liquidity in and also they could provide liquidity in multiple pools and multiple price ranges. The LPs can provide single asset liquidity and use a narrow price to concentrate the single asset liquidity thereby making it a Range Limit Order. Uniswap v3 currently has a daily trading volume which is more than 5 times higher than Curve, which means there are much more trading fees to be earned on Uniswap v3 therefore incentivizing more LPs.
Curve LPs can earn a 0.04% fee by supplying liquidity in Curve v1 pools and a flexible fee of 0.04% to 0.40% by supplying liquidity in Curve v2 pools. The LPs don’t have to deposit all the tokens in a pool instead they can choose to deposit one or several assets. While Uniswap only has pools with two assets, Curve currently has pools with up to four assets which allows the LPs to participate in bigger pools even if they don’t have all of the assets in the pool. Curve has greatly minimized the probability of impermanent loss for LPs in both v1 and v2 but the probability of experiencing impermanent loss in Curve v2 pools is higher compared to v1 pools.
Uniswap v3’s concentration of liquidity amplifies the probability of impermanent losses and requires LPs to actively manage their price ranges hence incentivizing more professional/active LPs. Whereas Curve v2 incentivizes more amateur/passive LPs by using automated concentrated liquidity thereby minimizing the probability of impermanent loss.
Also Uniswap’s design enables “Just-In-Time” or JIT attacks, which steal fees from existing liquidity providers. JIT works as follows: MEV searchers see a large trade waiting to be processed, they add liquidity within a very tight range, service the trade, and then remove liquidity afterward. All within a single block. JIT attacks are arguably the most lucrative risk adjusted liquidity provision strategy. And this is because they are able to net healthy profits without providing consistent liquidity and thus eliminate the risks other LPs take.
Since Curve v2’s automated concentrated liquidity comes at the expense of eliminating price range flexibility for professional/active LPs, this fungibility mitigates the JIT attacks Uniswap LPs are experiencing.
But one of the downsides of Curve v2 pools is the re-pegging mechanism. Every time a trade occurs, Curve v2 will measure the difference between the price scale and the internal oracle. It will move the price scale if, and only if, the losses from re-pegging can be offset by at least half of the pool’s profits from fees. To save on computational costs, some additional parameters ensure that this process does not happen too often or result in changes that are too small. This mechanism births a bonding curve that is very capital efficient when spot prices are close to the current price scale, and slowly degrades to behaving like an X*Y=K AMM as prices move away from the price scale. While this represents significantly increased capital efficiency in most scenarios, this mechanism does open up edge cases where Curve v2 pools’ liquidity, for example Tricrypto’s liquidity can get “stuck”. If spot prices move away from the price scale fast enough, without collecting sufficient fees to justify a re-pegging, the pool degrades to offering slightly worse execution than Uniswap v2. It will remain that way until enough fees can be collected to justify a re-pegging, or the price naturally moves back to equilibrium.
Metrics
Uniswap v3 currently has much better metrics in comparison to any other DEX including Curve. On the day of writing this document, Uniswap v3 has a daily volume of $1.02 billion while Curve’s daily volume is at $193 million which means Uniswap v3 has more than 5 times of the daily trading volume on Curve. According to Dapp Radar, Uniswap v3 currently has 11,000 daily users, 53,000 weekly users and around 167,000 monthly users but Dapp Radar doesn’t calculate these metrics for Curve mainly because their user count might not be that significant. The total value locked (TVL) in Uniswap v3 is $12.78 billion while the TVL of Curve is $5.89 billion.
As of July 2022, Uniswap v3 held under 90% market share on ETH and WBTC volume. As a result, Uniswap v3 has been able to attract significantly more liquidity utilization (volume/TVL) than Curve’s Tricrypto pool.
In the spirit of practical analysis, Delphi Digital members pulled data for every trade in 2022 on Ethereum for the ETH/USDT pair on Curve Tricrypto and Uniswap v3. After that, they simulated all of these trades on the opposite exchange based on quoted prices in the block prior to trade execution (i.e. what price the pools quoted while each trade was in the mempool). And to say the least, they uncovered some interesting findings.
If we look strictly at price execution, Tricrypto was quoting a better price than Uniswap v3 for ~65% of volume. However, it only managed to capture about 35%. What caused this massive discrepancy? Before we answer that, we need to figure out how much better quotes offered by Tricrypto really were.
Below is the value forfeited per trade by the ~177K trades that chose Uniswap over Tricrypto, even though Tricrypto was quoting them a better price in the block prior to execution.
The above is a log scale which can make the data appear a bit deceiving, but the median value forfeited was just $6.22 per trade. Note that is purely based on Curve’s quote vs Uniswap’s quote. However, when it comes to true trade execution, it isn’t quite as black and white.
The Delphi Digital members thought this would be interesting to show as it highlights the positive impact that JIT can have on trader execution (even though it hijacks fees from other LPs). The “negative value forfeited” is a result of JIT or other situations that positively affected trade execution, such as a large trade in the opposite direction. The median value forfeited when compared with actual trade execution remained small and positive at $5.81 per trade. It’s safe to say that since the median value forfeited was so low, the discrepancy between “ideal” and actual volume can be mainly attributed to gas costs. Since Curve v2 is more complex, the cost of a swap ranges from 250–300K gas vs 125–175K gas on Uniswap v3.
Even with depressed gas prices, this difference in gas costs is quite a large factor. But with gas costs starting to trend down, Tricrypto utilization has been gathering momentum.
Delphi Digital members in order to verify their hypothesis, simulated the performance of Uniswap v3 and Curve v2 on Arbitrum. The reason for this is simple: Ethereum’s roadmap will see consumer-side execution become dominated by rollups. As rollups can offer cheaper settlement fees to users, they used Arbitrum as a means of figuring out how the Uniswap vs Curve fight shapes up in a lower fee environment.
When using the same methodology as before and looking at actual vs “ideal” volume, the results improve significantly for Curve v2. On Arbitrum, Curve v2 “should” be getting 87% of volume, and in reality, it is getting 83%, these values are significantly closer together than on Ethereum Mainnet. As a result, the Delphi Digital members believe one of the biggest reasons Curve v2 doesn’t enjoy greater volume on Ethereum Mainnet is due to gas costs.
The reality is that psychology and brand value play a big role in consumer product selection and Uniswap enjoys the strongest brand value of virtually any DeFi protocol — perhaps any on-chain product in general. Another factor to consider is that if users are looking to buy a long-tail (exotic) asset on Uniswap (most of which are not on Curve), some trades may be routed through an ETH-USDT/USDC pool first (since a lot of pools are paired against ETH instead of stable coins).
The key takeaway points from this analysis are as follows:
- When compared in a silo (ETH-USDT pool) and in a gas-less environment, we find that Curve v2 has the ability to offer, at the very least, comparable if not superior execution to Uniswap v3.
- Curve v2 is slowly gaining traction. Its merits stand out clear as day, offering a balance between an efficient yet passive market making strategy.
- Curve v2’s UX for traders and pool creators is intimidating. This probably contributes to why altcoin liquidity is still mostly on Uniswap; it’s just so easy to spin up a new pool. And, as always, there’s a trade-off. Uniswap makes actively providing liquidity difficult for unsophisticated users, yet setting up and managing a pool is easy. Curve does the exact opposite.
In terms of pure efficiency, it’s safe to say that Curve v2 is shaping up to be the closest competition to Uniswap v3. For Curve, success now boils down to attracting significant liquidity and improving UX. Usurping Uniswap will be no easy task, and it cannot be achieved on technical merit alone. Curve will have to build up brand value and battle Uniswap for consumer mind share.
As and how the Ethereum scaling roadmap starts to come to life, gas costs for end-users are expected to drop meaningfully. As trade execution costs reduce, Curve v2 has the potential to grab more market share by attracting passive liquidity in mass.
Conclusion
With regards to all the information provided in this document, I would suggest onboarding the solidity developer team to Uniswap v3 and the reason for that is the developers aren’t exactly experts with equations and when compared to Uniswap v3, the Curve v2 implementation is extremely complex. The math used in Curve v2 can be beyond even the University level of Mathematics. This can be very intimidating for pool creators to use as there are 10 parameters to set up a pool.
So the developer team with basic understanding of equations and the main focus being to earn some Money in DeFi, have a better chance of finding a place in the Uniswap v3 ecosystem while the same could be impossible for them in Curve due to complexity of the equations.
Also with regards to the metrics, due to the much higher liquidity utilization (volume/TVL) in Uniswap, there is much more demand for developers and the Uniswap team is capable of being much more flexible with their capital for onboarding new developers compared to Curve.
- *if the “cost of draining xy = k pools” gif and the “AMM pool without slippage” gif don’t play, you can check them in the Dr. Alvaro Feito link in the references.
References