USDC–USDT Pool in Practice (Uniswap V3)
In this lesson, we begin working with the decentralized exchange Uniswap and will open our first liquidity position with stablecoins in practice. I will demonstrate the difference between version-two liquidity and version-three liquidity, and I will add liquidity to a version-three stablecoin pool. Overall, this is an introductory lesson designed to help you understand how liquidity works, how V2 and V3 differ, and why V3 is more efficient. Everything will be shown clearly and in practice.
As a reminder, in this example I am using the MetaMask wallet. You may use any wallet you prefer. On our platform, we have the “Crypto Wallets” module, where you can review all popular wallets and choose the one that suits you.
Right now, I am using MetaMask. Let me connect to Uniswap through MetaMask and show you what I will be doing.
This is the standard interface of a decentralized exchange. There are many functions here, but we will not go into detail — this belongs to the more advanced part of the course, which we cover step-by-step in the main module. In this lesson, I want to focus only on the practical difference between version-two and version-three liquidity.
You can switch between versions here. First, let’s select version two and click “Add Liquidity (V2).” For example, we choose the ETH–USDC trading pair. Recall that version-two liquidity always holds assets in a fifty–fifty ratio based on their dollar value. No matter how much ETH I deposit, the system will always balance it to a 50/50 ratio.
This is why version-two pools are considered inefficient. They are outdated. They can only be interesting if additional token rewards are issued on top — that is, incentive emissions from major projects.
Here is the current statistic for the ETH–USDC V2 pool on Ethereum: the annual fee yield is only about eight percent. This is extremely low, although some users may find it acceptable given that nothing needs to be managed here. There are no ranges, no adjustments — you simply provide liquidity at a 50/50 ratio and receive around eight percent in organic fee income, which is automatically reinvested into the pool.
The same applies to other V2 pools. No matter what amount I deposit, the assets will always be held in a 50/50 proportion — with a slight deviation due to price differences at the time of swap.
These are the old version-two pools. Now let’s see how version-three liquidity works.
Here is another statistic: the USDC–USDT trading pair in version three shows an annual yield of only about three percent. This is also a low level of yield — and now I will show why this happens and what the difference is.
Now let me show why version-three liquidity is more efficient than version-two liquidity. I click “New Position,” select USDC and USDT, and here I can set a range from zero to infinity. This is essentially the same as providing version-two liquidity — just presented in another interface.
Why is this inefficient? Because trading between USDC and USDT takes place around the one-to-one price. Deviations are possible but very small. If I set the range from zero to infinity, I effectively spread my liquidity across the entire price curve. Imagine that my liquidity is distributed over this full spectrum.
What does this mean? Suppose I want to deposit one hundred dollars in USDC and one hundred dollars in USDT. In this case, my assets will be allocated across the entire infinite range. This means that most of my capital will always be idle, because trading occurs only in a very narrow zone around the one-to-one peg. The outer parts of the range will never be used — except in rare cases of strong stablecoin depegs.
If we consider the standard situation, where the price stays near one dollar, using a very wide range — or the range from zero to infinity — results in extremely inefficient capital usage. In the zone where the actual trading volume takes place and where fees are generated, only a tiny fraction of my capital will be active. This is why the yield ends up being around three percent per year — similar to version two.
If instead I use version-three liquidity and set a narrow range around the current price — exactly where trading is happening — the yield increases sharply. Why? Because my capital is concentrated in the active trading zone, where swaps occur and where fees are generated. In the areas where no trading happens, I have no capital — unlike in version two.
The asset ratio in version three constantly changes depending on the position of the current price within the chosen range. Version two always maintains a fifty–fifty ratio. Version three uses a different formula, so the distribution of capital depends on how the range is positioned. If I set a narrow range around the current price, the ratio will be close to 50/50, but this is not a strict rule.
At the same time, there is no “perfect” range for stablecoin pairs. We can only rely on trading-volume statistics and on the ranges chosen by other liquidity providers who have been active for a long time.
For example, here we see a position from a user who contributed liquidity and has kept it active for about one hundred fifty days. He earns nearly nine percent APY on stablecoins simply because his liquidity is concentrated in the active trading zone. This is not the most efficient position and not an ideal range, but it allows passive capital placement and stable fee income.
This range captures almost one hundred percent of all price movements, and we earn fees from it. I set the range to approximately 0.999–1.001, and once again, note that the price of one stablecoin can deviate slightly from its standard value on certain days. Because of this small deviation, my current range looks as if the active price is sitting at the upper boundary. In reality, if we look at a broader timeframe, such a range captures the maximum number of price moves, the highest trading volume, and the most fees, because the asset will stay inside this zone most of the time.
Sometimes the price goes outside the range. During these periods, you stop earning fees. This does happen, but it does not mean you must adjust the range. It simply means you wait. We focus on long-term behavior and identify where the asset spends most of its time — that is where we set our range.
Here is an objective example of a user who has held a position for one hundred fifty days. His range is set like this, and during this period he earned about eight percent APY. Were there days when the price moved outside his range? Yes. Does this mean that we will receive the same yield if we set the same range? No. Yield depends on trading volume and the specific time period.
Trading volumes vary from day to day. Sometimes a particular event causes extremely high trading activity in the pool. If a user was present during such a day, it will significantly boost his annual yield. If we open a position right now, we may capture only an hour or two of activity — tomorrow one full day — and we may simply miss the high-volume days that produce the strongest fees. Therefore, if we open a position right now, our fifteen-day or thirty-day yield will almost certainly be lower than eight percent. Maybe five or six percent. This does not reflect the true annual yield — it only means we did not catch the high-volume periods.
Overall, concentrated liquidity has a huge number of nuances. There are so many subtleties, conditions, and edge cases that it is impossible to fully explain them in one or even ten lessons. That is why there is a full module dedicated to liquidity pools, volatile asset pairs, ranges, and all relevant mechanics.
The purpose of this lesson is simply to show how to provide liquidity and how to set ranges. Also note the fee tiers. For stablecoins, the common fee tier is 0.01 percent. For volatile assets, it is typically 0.05 percent. The 0.3 percent tier is used for more volatile trading pairs, and 1 percent is used for new tokens with low liquidity. This is simply the percentage fee you will receive for each swap inside the trading pair — proportionally to your share of the total pool liquidity.
Now let’s add liquidity to the trading pair. At the moment, I need 1 USDC and 1.23 USDT — the proportion may be non-standard, and this is normal. The first transaction is an approval, allowing Uniswap to use my USDC for creating the position. The same approval is needed for USDT — I confirm it. After that, I can create any positions because I granted unlimited approval. This is safe in this context because Uniswap is one of the most trusted protocols.
I click “Preview,” then “Add,” the third transaction is confirmed, and I receive an NFT representing my liquidity position on the decentralized exchange. The transaction is confirmed; I click “Close,” and the position appears in the positions section.
This section is where fees will gradually accumulate as users swap one asset for another inside the trading pair. Fees will appear here in USDC and USDT, and the proportion of my stablecoins will also change continuously depending on the current exchange rate. Right now, one USDC is worth this amount of USDT. If the rate decreases slightly — and eventually it will drift back toward parity, because stablecoins trade near 1:1 — then the amount of USDC in my position will increase and the amount of USDT will decrease. Fees will also accumulate over time.
This is how concentrated liquidity works on Uniswap. This is just an example. Most decentralized exchanges use exactly two liquidity models. The first is version two — the 50/50 model, where assets are always held in a fifty–fifty ratio by market value. The second is version three — where you set a specific price range to allocate your assets efficiently in the area where most trading volume occurs.
Today’s lesson is intended to help you understand and practice working with concentrated liquidity, and to see the difference between version two and version three. This does not mean you should copy the exact setup I used. Later, there will be a lesson where I show a practical beginner’s portfolio — what anyone can do right now to start earning.
What I demonstrated today is simply an example for gaining experience and practicing interaction with Uniswap. The skill of opening a concentrated liquidity position is very important. For stablecoins — it is essential. For volatile assets — that is a separate topic covered in detail in the module. For stablecoins, it is crucial to learn how to set ranges and understand how they work, because the baseline commission yield is about 7–8% APY over long horizons.
But we will not work only with Uniswap. We will also use other DEXes where additional token rewards are distributed. This means we will receive the base yield from commissions and, on top of that, extra tokens. This is important. And in most cases, you will be working with concentrated liquidity. Sometimes you will also see traditional 50/50 pools — these are simpler: you just deposit stablecoins and receive commissions plus additional tokens. But it is important to understand the fundamentals of version two and version three first.
You can withdraw liquidity using the “Remove liquidity” button — either partially or fully. Keep in mind that as the price changes, the proportions of the assets in the position will also change. You can also increase liquidity in an existing position: once fees accumulate (currently there are none, because almost no swaps have occurred since adding liquidity), you can click “Add liquidity” to deposit additional tokens in the required proportions. These proportions change dynamically based on the exchange rate. These are the two main functions when working with Uniswap.
You can also reinvest — collect fees and add them back into the position to increase the pool size and boost APY through compound growth.
After some time, the first fees from providing liquidity will appear. They can be claimed. Of course, this example uses a very small amount, and adding liquidity with such a small amount is inefficient — the fees will be tiny. Even if the position yields 10% APY over a year, that’s only around two and a half dollars. This is simply a demonstration.
In the next lesson, I will cover lending markets, where you can deposit stablecoins in a single click and earn a stable interest rate. For beginners, this is a better option than providing liquidity to stablecoin pairs at the early stage.
These materials are created for educational purposes only and do not constitute financial advice.