# AMM 与去中心化交易所

![status](https://img.shields.io/badge/% E7%8A% B6% E6%80%81-% E5% B7% B2% E5% AE%8C% E6%88%90-success)
![author](https://img.shields.io/badge/% E4% BD%9C% E8%80%85-beihaili-blue)
![date](https://img.shields.io/badge/% E6%97% A5% E6%9C%9F-2025--06-orange)
![difficulty](https://img.shields.io/badge/% E9%9A% BE% E5% BA% A6-% E4% B8% AD% E7% BA% A7-yellow)

> 💡 本课将深入解析去中心化交易所（DEX）的核心机制 —— 自动做市商（AMM）。你将理解 Uniswap 的恒定乘积公式、流动性提供的完整流程，以及无常损失这个每个 LP 必须面对的概念。
>
> 欢迎关注我的推特：[@bhbtc1337](https://twitter.com/bhbtc1337)
>
> 进入微信交流群请填表：[表格链接](https://forms.gle/QMBwL6LwZyQew1tX8)
>
> 文章开源在 GitHub：[Get-Started-with-Web3](https://github.com/beihaili/Get-Started-with-Web3)
>
> 购买 BTC / ETH / USDT 等加密货币推荐 [币安](https://www.binance.com/zh-CN)[注册链接](https://www.bsmkweb.cc/register?ref=39797374)

## 目录

- [交易的两种模式：订单簿 vs AMM](# 交易的两种模式订单簿 - vs-amm)
- [恒定乘积公式 x * y = k](# 恒定乘积公式 - x--y--k)
- [流动性池与 LP Token](# 流动性池与 - lp-token)
- [滑点与价格影响](# 滑点与价格影响)
- [无常损失详解](# 无常损失详解)
- [Uniswap V2 vs V3：集中流动性革命](#uniswap-v2-vs-v3 集中流动性革命)
- [主流 DEX 全景](# 主流 - dex - 全景)
- [总结](# 总结)
- [延伸阅读](# 延伸阅读)

---

## 交易的两种模式：订单簿 vs AMM

在理解 DEX 之前，我们需要先理解交易所的两种基本运作模式。

### 订单簿模式（Order Book）

传统交易所（如股票交易所、币安、Coinbase）都采用 ** 订单簿 ** 模式：

```
卖单（Ask）          买单（Bid）
$2,010 - 5 ETH     $1,990 - 3 ETH
$2,005 - 10 ETH    $1,985 - 8 ETH
$2,001 - 2 ETH     $1,980 - 15 ETH
         ↕ 价差（Spread）= $11
```

- 买家和卖家各自挂出自己想要的价格和数量
- 当买价 >= 卖价时，订单匹配成交
- 需要足够多的做市商来保证流动性

** 问题 **：订单簿模式需要高吞吐量和低延迟。以太坊主网每秒约 15 笔交易、每笔交易需要 Gas 费，根本无法支撑频繁的挂单和撤单操作。

### AMM 模式（Automated Market Maker）

AMM 用完全不同的方式解决了这个问题：** 用数学公式代替订单匹配 **。

- 不需要买卖双方匹配，用户直接与智能合约中的流动性池交易
- 价格由池中两种代币的比例和数学公式自动计算
- 任何人都可以向池中添加流动性来赚取手续费

这就像一台永远不关门的自动兑换机：你投入 A 代币，按照当前比例取出 B 代币，机器自动调整价格。

| 对比维度 | 订单簿 | AMM |
|---------|--------|-----|
| 定价方式 | 买卖双方博弈 | 数学公式自动计算 |
| 流动性来源 | 专业做市商 | 任何人都可以提供 |
| 适用环境 | 高性能中心化服务器 | 区块链智能合约 |
| 交易对手 | 另一个交易者 | 流动性池 (智能合约) |
| 代表产品 | 币安、NYSE | Uniswap、Curve |

## 恒定乘积公式 x * y = k

Uniswap 在 2018 年首创的恒定乘积做市商（Constant Product Market Maker, CPMM），是 DeFi 历史上最重要的创新之一。其核心公式极其简洁：

```
x * y = k
```

其中：
- `x` = 池中代币 A 的数量
- `y` = 池中代币 B 的数量
- `k` = 常数（在没有新的流动性增减时保持不变）

### 一个具体的例子

假设有一个 ETH/USDC 流动性池：

```
初始状态：
x = 100 ETH
y = 200,000 USDC
k = 100 × 200,000 = 20,000,000

隐含价格：y/x = 200,000/100 = 2,000 USDC/ETH
```

现在小明想用 USDC 买入 1 ETH：

```
交易后池中 ETH 数量：100 - 1 = 99 ETH
根据 k 不变：99 × y' = 20,000,000
y' = 20,000,000 / 99 ≈ 202,020.20 USDC

小明需要支付的 USDC：202,020.20 - 200,000 = 2,020.20 USDC
实际成交价格：2,020.20 USDC/ETH（比初始价格 2,000 高了约 1%）
```

注意到了吗？买入 1 ETH 的成交价格（2,020.20）高于初始价格（2,000）。这就是 AMM 的定价机制 ——** 每次交易都会改变池中代币比例，从而改变价格 **。买的越多，价格推得越高。

### 价格曲线可视化

```
USDC 数量
  ↑
  |  ╲
  |    ╲
  |      ╲
  |        ╲──── x * y = k 曲线
  |           ╲
  |              ╲
  |                 ╲────
  └──────────────────────→ ETH 数量
```

这条双曲线有一个重要特性：** 价格永远不会真正归零 **。随着某一种代币被大量买走，它的价格会趋向无穷大。这保证了池中始终有两种代币。

### 手续费的作用

实际的 Uniswap 交易还会收取手续费（V2 为 0.3%，V3 有 0.01%/0.05%/0.3%/1% 多档）。手续费不会从池中取走，而是加入到 k 值中，使得：

```
交易后：k_new > k_old
```

这意味着每笔交易都让流动性池变得更大，这些手续费就是流动性提供者的收益来源。

## 流动性池与 LP Token

### 什么是流动性池？

流动性池是一个智能合约，持有两种代币（交易对）。例如 Uniswap 的 ETH/USDC 池就是一个合约地址，里面同时存储着 ETH 和 USDC。

### 如何提供流动性？

任何人都可以成为流动性提供者（Liquidity Provider, LP）：

```
提供流动性的步骤：

1. 准备两种代币（比例需匹配当前池子比例）
   例如：1 ETH + 2,000 USDC

2. 调用合约的 addLiquidity 函数
   → 两种代币转入池子

3. 获得 LP Token（代表你在池中的份额）
   → 假设池子有 100 份，你投入了 1%，获得 1 个 LP Token

4. 赚取交易手续费
   → 手续费自动累积在池中，你的 LP Token 代表的实际资产在增长

5. 随时可以用 LP Token 赎回你的份额
   → 销毁 LP Token，取回对应比例的两种代币
```

### LP Token 的本质

LP Token 就是你在流动性池中的 "份额凭证"，类似于基金份额。它有以下特性：

- ** 可转让 **：LP Token 本身是 ERC-20 代币，可以转账和交易
- ** 可组合 **：LP Token 可以被其他 DeFi 协议使用（如抵押借贷、收益农场）
- ** 价值增长 **：随着交易手续费积累，每个 LP Token 代表的底层资产在增长

## 滑点与价格影响

### 什么是滑点（Slippage）？

** 滑点 ** 是指你的实际成交价格与预期价格之间的差异。在 AMM 中，滑点主要来自两个因素：

1. ** 价格影响（Price Impact）**：你的交易本身改变了池中的代币比例，从而改变了价格
2. ** 市场波动 **：在你提交交易到交易被打包上链之间，其他交易已经改变了池子状态

### 价格影响的大小取决于什么？

核心公式：** 你交易的金额占池子的比例越大，价格影响越大。**

```
场景对比（ETH/USDC 池，初始 k = 20,000,000）

小额交易 —— 买 0.1 ETH：
  实际价格 ≈ 2,002 USDC/ETH
  价格影响 ≈ 0.1%

中额交易 —— 买 10 ETH：
  实际价格 ≈ 2,222 USDC/ETH
  价格影响 ≈ 11.1%

大额交易 —— 买 50 ETH：
  实际价格 ≈ 4,000 USDC/ETH
  价格影响 ≈ 100%！
```

这就是为什么：
- ** 大资金交易者更倾向于使用聚合器 **（如 1inch），将大额交易拆分到多个 DEX 以降低价格影响
- ** 池子越深（TVL 越高）越好 **，因为同样金额的交易对大池子的影响更小

### 滑点保护

在 Uniswap 等 DEX 中，你可以设置 ** 最大可接受滑点 **（如 0.5%）。如果实际滑点超过这个阈值，交易会自动失败（revert）。这是为了防止 "三明治攻击"（Sandwich Attack）—— 恶意矿工在你的交易前后各插入一笔交易来从中获利。

## 无常损失详解

** 无常损失（Impermanent Loss, IL）** 是每一个流动性提供者都必须理解的概念。它是指相比于简单持有（HODL）两种代币，将它们放入 AMM 流动性池可能导致的价值损失。

### 为什么会有无常损失？

还是用 ETH/USDC 的例子：

```
初始状态：
你提供了 1 ETH + 2,000 USDC（合计 4,000 美元）
池子里 ETH 价格 = 2,000 USDC

一段时间后，ETH 涨到 4,000 USDC：
```

如果你只是 HODL：
```
1 ETH × $4,000 + 2,000 USDC = $6,000
```

但在池子里，由于套利者会不断交易使池中价格与外部价格一致，你的份额变成了：
```
根据 x*y=k 和新价格：
x_new = √(k / 新价格) = √(2,000,000 / 4,000) ≈ 0.707 ETH
y_new = √(k × 新价格) = √(2,000,000 × 4,000) ≈ 2,828.43 USDC

你的持仓价值：0.707 × $4,000 + $2,828.43 = $5,656.43
```

** 无常损失 = HODL 价值 - LP 价值 = $6,000 - $5,656.43 = $343.57（约 5.7%）**

### 无常损失计算公式

对于恒定乘积 AMM，无常损失只取决于价格变化比率 r（= 新价格 / 初始价格）：

```
无常损失 = 2√r / (1 + r) - 1
```

| 价格变化 | 无常损失 |
|---------|---------|
| 1.25x (涨 25%) | 0.6% |
| 1.50x (涨 50%) | 2.0% |
| 2x (翻倍) | 5.7% |
| 3x (涨 3 倍) | 13.4% |
| 5x (涨 5 倍) | 25.5% |

注意：价格无论上涨还是下跌相同比例，无常损失是一样的。涨 2 倍和跌 2 倍的无常损失都是 5.7%。

### "无常" 是什么意思？

之所以叫 "无常" 损失而非 "永久" 损失，是因为：
- 如果价格最终回到你提供流动性时的水平，损失就消失了
- 但如果你在价格偏离时撤出流动性，损失就变成 "永久" 的了

实际上，流动性提供者需要权衡：** 交易手续费收入是否能覆盖无常损失 **。如果一个交易对的交易量很大（手续费收入高），而价格波动相对较小，那做 LP 就是划算的。

## Uniswap V2 vs V3：集中流动性革命

### Uniswap V2 的问题

V2 的流动性均匀分布在从 0 到无穷大的整个价格区间。但实际上，大部分交易发生在当前价格附近的一个小区间内。这意味着大量流动性被 "浪费" 在了永远不会被用到的价格区间。

```
V2 流动性分布：
流动性 ↑
       |████████████████████████████████████
       |████████████████████████████████████
       |████████████████████████████████████
       └────────────────────────────────────→ 价格
       $0         $2,000                   $∞
                  (当前价格)
       ← 这些区间的流动性几乎不会被使用 →
```

### Uniswap V3：集中流动性

V3 允许 LP 选择提供流动性的 ** 价格区间 **。例如，你可以只在 $1,800 - $2,200 的区间提供 ETH/USDC 流动性。

```
V3 集中流动性分布：
流动性 ↑
       |              ████████
       |           ██████████████
       |        ████████████████████
       |     ██████████████████████████
       └────────────────────────────────────→ 价格
             $1,800   $2,000   $2,200
```

** 关键优势：资本效率 **

假设 ETH 价格稳定在 $2,000 附近：
- V2 需要提供从 $0 到 $∞ 的流动性
- V3 可以只在 $1,900-$2,100 的区间集中流动性

在相同资金量下，V3 在目标区间提供的流动性深度可以是 V2 的 ** 数百倍甚至上千倍 **，这意味着同样金额的交易滑点更小。

**V3 的权衡：**

| V2 | V3 |
|----|----|
| 流动性覆盖全价格区间 | LP 选择特定价格区间 |
| 无需主动管理 | 价格超出区间后需要重新调整 |
| LP Token 是标准 ERC-20（可互换） | LP Position 是 NFT（不可互换） |
| 资本效率低 | 资本效率高，但管理更复杂 |

V3 的出现让 LP 变成了一种更 "主动" 的投资行为：你需要判断价格区间、定期调整仓位。这也催生了一系列 "LP 管理" 协议（如 Arrakis、Gamma），帮助用户自动调整 V3 仓位。

## 主流 DEX 全景

| DEX | 所属链 | 特色 | AMM 模型 |
|-----|-------|------|----------|
| **Uniswap** | 以太坊，Arbitrum, Base 等 | 最大的通用 DEX，V3 集中流动性 | CPMM (x*y=k) |
| **Curve** | 以太坊，多链 | 专注稳定币交易，超低滑点 | StableSwap (专用曲线) |
| **Balancer** | 以太坊，Arbitrum | 支持多资产加权池（如 80/20 池） | 加权恒定乘积 |
| **PancakeSwap** | BNB Chain, 多链 | BSC 生态最大 DEX | CPMM |
| **Raydium** | Solana | Solana 生态，结合订单簿 | Hybrid AMM+CLOB |
| **Trader Joe** | Avalanche, Arbitrum | 流动性账本 (Liquidity Book) 模型 | Bin-based AMM |

值得注意的是，Curve 使用了一种专为稳定币优化的 AMM 曲线（StableSwap），在价格接近 1:1 时提供极低的滑点。这就是为什么 USDC/USDT/DAI 之间的大额兑换通常会走 Curve 而不是 Uniswap。

## 总结

1. **AMM 用数学公式取代订单匹配 **，使得去中心化交易成为可能，是 DeFi 的基础设施之一
2. ** 恒定乘积公式 x\*y=k** 是最经典的 AMM 模型，简洁优雅但也有资本效率的局限
3. ** 流动性提供者通过 LP Token 赚取手续费 **，但需要承担无常损失的风险
4. ** 滑点与池子深度和交易大小有关 **，大额交易应使用聚合器来降低价格影响
5. ** 无常损失是 LP 必须理解的核心概念 **，只有手续费收入覆盖无常损失时做 LP 才划算
6. **Uniswap V3 的集中流动性 ** 大幅提升了资本效率，但也增加了 LP 管理的复杂度

## 延伸阅读

- [Uniswap V3 白皮书](https://uniswap.org/whitepaper-v3.pdf)
- [Uniswap V2 白皮书](https://uniswap.org/whitepaper.pdf)
- [Curve 白皮书 - StableSwap](https://curve.fi/files/stableswap-paper.pdf)
- [Impermanent Loss 计算器 - DailyDeFi](https://dailydefi.org/tools/impermanent-loss-calculator/)
- [Bancor 无常损失研究报告](https://blog.bancor.network/beginners-guide-to-getting-rekt-by-impermanent-loss-7c9510cb2f22)
- [Uniswap V3 流动性分析 - Revert Finance](https://revert.finance)
