Uniswap V2 是以太坊上最具影响力的去中心化交易所(DEX),开创了 AMM(自动做市商)模式的先河,成为 DeFi 基础设施的重要组成部分。
1. Uniswap V2 简介
1.1 什么是 Uniswap
Uniswap 是一个运行在以太坊上的去中心化交易协议,允许用户在无需中心化中介的情况下交换 ERC-20 代币。与传统订单簿交易所不同,Uniswap 使用**自动做市商(AMM)**机制,通过智能合约和流动性池实现代币交换。
1.2 V2 的改进
相比 V1,Uniswap V2 带来了多项重要改进:
| 特性 | V1 | V2 |
|---|---|---|
| 交易对 | 仅支持 ETH/ERC-20 | 支持任意 ERC-20/ERC-20 |
| 价格预言机 | 无 | 内置 TWAP 预言机 |
| 闪电贷 | 不支持 | 支持 Flash Swap |
| 协议费用 | 无 | 可开启 0.05% 协议费 |
2. 核心概念
2.1 自动做市商(AMM)
传统交易所依赖订单簿撮合买卖双方,而 AMM 使用数学公式自动计算价格。
1 | ┌─────────────────────────────────────────────────────────┐ |
2.2 恒定乘积公式
Uniswap V2 的核心是恒定乘积公式:
1 | x × y = k |
- x:池中 Token A 的数量
- y:池中 Token B 的数量
- k:常数(在没有添加/移除流动性时保持不变)
价格计算示例:
假设池中有 10 ETH 和 20,000 USDC:
1 | 初始状态: |
用户用 1 ETH 换 USDC:
1 | 交易后(忽略手续费): |
关键特性:交易量越大,滑点越大(价格偏离越多)。
2.3 流动性池原理
流动性池是存放两种代币的智能合约,任何人都可以成为流动性提供者(LP):
1 | ┌─────────────────────────────────────────┐ |
3. 架构概览
3.1 合约层级
Uniswap V2 分为 Core 和 Periphery 两层:
1 | ┌─────────────────────────────────────────────────────────┐ |
3.2 各合约职责
| 合约 | 层级 | 职责 |
|---|---|---|
| UniswapV2Factory | Core | 创建和管理所有交易对 |
| UniswapV2Pair | Core | 单个交易对的 AMM 逻辑 |
| UniswapV2ERC20 | Core | LP Token 标准实现 |
| UniswapV2Router | Periphery | 用户友好的交互接口 |
| UniswapV2Library | Periphery | 价格和数量计算 |
4. 核心功能
4.1 添加流动性
LP 按当前比例存入两种代币,获得 LP Token 作为凭证:
1 | 存入前: |
4.2 移除流动性
LP 销毁 LP Token,按比例取回代币 + 累积的手续费:
1 | Alice 持有 1% LP Token |
4.3 代币交换
用户通过 Router 进行交换,支持多跳路径:
1 | 直接交换: |
4.4 闪电贷(Flash Swap)
无需抵押,在单笔交易中借出代币,只要在交易结束前归还即可:
1 | // 闪电贷流程 |
5. LP Token 与手续费
5.1 LP Token 机制
LP Token 代表流动性份额,其数量计算方式:
首次添加流动性:
1 | liquidity = sqrt(amount0 × amount1) - MINIMUM_LIQUIDITY |
后续添加流动性:
1 | liquidity = min( |
5.2 手续费分配
每笔交换收取 0.3% 手续费:
1 | 手续费分配: |
手续费不直接发放,而是累积在池中,LP 的份额价值自动增长。
6. 价格预言机(TWAP)
6.1 什么是 TWAP
**TWAP(Time-Weighted Average Price)**是时间加权平均价格,用于提供抗操纵的价格数据。
6.2 实现原理
Uniswap V2 在每个区块首次交易时记录累积价格:
1 | price0CumulativeLast += reserve1 / reserve0 × timeElapsed |
计算 TWAP:
1 | TWAP = (priceCumulativeEnd - priceCumulativeStart) / timeElapsed |
6.3 使用场景
- 借贷协议的抵押品估值
- 合成资产定价
- 清算触发条件
7. 安全考虑
7.1 滑点保护
交易时设置 amountOutMin 防止价格剧烈波动:
1 | swapExactTokensForTokens( |
7.2 重入攻击防护
Pair 合约使用 lock 修饰器防止重入:
1 | uint private unlocked = 1; |
7.3 最小流动性
首次添加流动性时,锁定 MINIMUM_LIQUIDITY(1000 wei)防止池被完全抽空。
8. 总结
Uniswap V2 的核心创新:
| 特性 | 说明 |
|---|---|
| AMM 模式 | 无需订单簿,算法自动定价 |
| 无许可 | 任何人可创建交易对、提供流动性 |
| ERC-20 对 | 支持任意代币对交易 |
| TWAP 预言机 | 提供抗操纵的链上价格 |
| Flash Swap | 无抵押闪电贷 |
V2 的局限性:
- 流动性分散在整个价格范围,资本效率低
- 无法自定义费率
- LP 面临无常损失
这些问题在 Uniswap V3 中通过集中流动性得到解决。