# Uniswap V2

The constant product market maker is the most common AMM invariant that was made popular with Uniswap. It can be simply modeled as `x * y = k` . X and Y are the reserves for each asset, as assets are traded through this function X and Y increase or decrease in their reserves in a way that keeps a constant K (not counting fees charged).&#x20;

<figure><img src="https://github.com/0xperp/awesome-amm/blob/main/images/constant_product.png?raw=true" alt="Constant Product Market Maker"><figcaption><p>Constant Product</p></figcaption></figure>

## Example — Trader Swap Tokens <a href="#f7f5" id="f7f5"></a>

Assume there are two ERC-20 tokens: ABC and USDT, and there is a ABC/USDT Uniswap liquidity pool created. Let’s say this ABC/USDT liquidity pool currently has 10 ABC and 40 USDT in it, so the ratio is 1 ABC : 4 USDT. Assuming that’s the current market ratio, 1 ABC is now worth 4 USDT.

Now if John swaps his 1 ABC for USDT, the pool will take his 1 ABC, transfer a certain amount of USDT from the pool to him.

Uniswap determines the output token amount by using a constant product formula:

```
x * y = k
```

Instead of 4 USDT, John will actually receive a bit less: 3.626444 USDT.

The constant product formula requires the trades should not change the product (K) of a pair’s reserved balances (X and Y). Let’s walk through the calculation step by step.

Originally, the liquidity pool has 10 ABC and 40 USDT, so X = 10 and Y = 40. When John swaps 1 ABC , he will pay a 0.3% fee first, which is 0.003 ABC (0.3% \* 1). After the fee is paid, the remaining ABC, which is 0.997 ABC, will be swapped for USDT, so the new X becomes 10.997 ABC. Since K must remain unchanged, the new Y can be calculated from the formula `X * Y = newX * newY`. So newY is 36.373556 `(X * Y / newX = 10 * 40 / 10.997 = 36.373556)`. This means the pool will hold 36.373556 USDT, the remaining USDT will be sent to John, which means John will receive 3.626444 USDT`(Y — newY = 40 – 36.373556 = 3.626444)`. After the swap, the pool has 11 ABC and 36.373556 USDT.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.native.org/native-whitepaper/introduction/flexible-market-making/pricing-models/on-chain-pricing/uniswap-v2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
