Uniswap V2 机制深度解析 ——定价过程、流动性演化与滑点的数学本质

本文围绕UniswapV2的三个核心机制展开:定价机制:常数乘积模型下的边际价格、区间价格与TWAP流动性池:储备、LPToken、费用与K的动态演化滑点机制:成因、计算方式。

<!--StartFragment-->

本文假设读者已了解 AMM 基本概念,并对 Uniswap V2 合约结构有初步认识。

概要

本文围绕 Uniswap V2 的三个核心机制展开:

  • 定价机制:常数乘积模型下的边际价格、区间价格与 TWAP
  • 流动性池:储备、LP Token、费用与 K 的动态演化
  • 滑点机制:成因、计算方式及其不可消除性

全文以 “状态变化过程” 为主线,而非将 AMM 简化为一个“给出价格的公式”。


一、定价机制:价格不是一个点,而是一个过程

1. AMM 中“价格”的本质

在 Uniswap V2 中,合约本身并不直接给出价格。\ Pair 合约只施加一个状态约束:

$$ X·Y>=K $$ 其中:

  • (x, y):池中两种资产的实时储备量
  • (k):历史状态下的乘积下界(计入手续费后允许增大)

用户提交交易时:

  • 输入量是确定的
  • 输出量由「满足约束的最大值」决定
  • 价格是从储备变化中反推出来的结果

因此,AMM 的价格不是“查表得到”,而是一次状态迁移的副产品


2. 常数乘积模型(x·y = k)

Uniswap V2 延续 V1 的核心定价逻辑:

$$ x⋅y=k $$

当用户用资产 (X) 去兑换 (Y):

  • (x) 增加
  • (y) 减少
  • 新状态必须满足乘积约束

引入交易费(0.3%)后,约束在源码中表现为:

require(
  balance0Adjusted.mul(balance1Adjusted) 
  >= uint(_reserve0).mul(_reserve1).mul(1000**2),
  'UniswapV2: K'
);

这意味着:

  • 手续费不会破坏模型
  • 而是使得交易后实际的 (x \cdot y) 略大于历史的 (k)
  • 多出来的部分即为 LP 的长期收益来源

二、边际价格与实际价格

3. 边际价格(瞬时价格)

边际价格描述的是:

在当前储备状态下,极小交易量所对应的兑换比例。

对于资产 (X/Y),边际价格为:

image.png

数学上:

  • 这是 AMM 曲线在该点的切线斜率
  • 等价于 $dy/dx($注意买卖方向)

经济上:

  • 它是套利者用来与外部市场对齐的参考价格
  • $仅在dx->0时成立$

因此:

  • 边际价格 = 瞬时价格
  • 不是大多数真实交易的成交价格

4. 实际价格(区间平均价格)

真实交易并非发生在一个点,而是:

沿着 AMM 曲线,从初始状态滑动到终止状态的全过程。

实际价格定义为:

image.png 举例说明(用 X 购买 Y):

  • 初始状态 A:(x=5, y=20)
  • 终止状态 B:(x=10, y=10)

交易结果:

  • 用户支付:5 X
  • 用户获得:10 Y

则 Y 的实际价格为:

image.png 这一定价:

  • 不等于任何一个时刻的边际价格
  • 而是整个区间内价格的平均结果

5. 边际价格与实际价格的关系

  • 边际价格描述的是“此刻多买一点要付出多少”
  • 实际价格描述的是“这一次交易总体花了多少”

当交易规模极小时:

  • 区间几乎退化为一个点
  • 实际价格 ≈ 边际价格

当交易规模较大时:

  • 二者差距显著
  • 差距即为滑点的来源

三、时间加权平均价格(TWAP)

6. 为什么瞬时价格不可靠

由于 AMM 的 spot price 仅由当前储备决定:

  • 单笔大额交易
  • 闪电贷
  • 同一区块内的状态操纵

都可以在极短时间内大幅改变边际价格

这对以下场景是致命的:

  • 预言机报价
  • 衍生品结算
  • 抵押品估值

7. TWAP 的设计思想

TWAP 的核心目标不是“更准”,而是:

让操纵价格的成本随时间线性增长。

Uniswap V2 引入 价格累加器(price accumulator)

  • 每次价格发生变化时
  • 将 当前价格 × 时间差 累加到状态变量中

任意区间 ([t_1, t_2]) 的平均价格为:

image.png

只需记录:

  • 起点累加值
  • 终点累加值

无需保存完整时间序列。


8. 双向价格的非对称性

在 TWAP 语境下:

image.png

原因在于:

  • 价格是非线性的
  • 时间加权后,倒数关系不再严格成立

但在任一瞬时点上:

  • 二者一定互为倒数

这是 TWAP 使用中一个常被忽略、但非常重要的细节。


9. 精度处理:UQ112.112

由于 Solidity 不支持浮点数,V2 使用:

  • UQ112.112 固定点格式
  • 112 位整数 + 112 位小数

好处:

  • 精度高
  • 可安全用于长期累加

同时利用 256 位存储槽剩余空间处理溢出问题:

  • timestamp 溢出约需 136 年
  • 期间至少会有一次价格更新

四、流动性池机制

10. 流动性的经济含义

流动性不是“锁仓”,而是:

池子中可被随时重新定价和交易的资产规模

储备越深:

  • 同等交易量对价格影响越小
  • 滑点越低

11. 任意 ERC-20 交易对

Uniswap V2 通过:

  • Factory 合约
  • Pair 合约

支持任意 ERC-20 对创建交易池,突破 V1 的限制。


12. LP Token 的铸造逻辑

首次初始化池子

image.png

后续添加流动性

image.png

取最小值的原因:

  • 强制按池内比例注入
  • 防止单边资产浪费

LP Token 本质是:

对当前池内全部资产(含手续费)的按比例索取权。


13. K 的动态演化

需要强调的是:

  • K 的增长来源于交易手续费
  • 而不是单纯的 add/remove liquidity 行为

手续费留在池内:

  • 增加了储备
  • 导致实际 (x \cdot y) 随时间上升

14. 储备同步与异常处理

  • skim():提取超过储备记录的余额
  • sync():应对通缩、反射型代币
  • 防止因余额/储备不一致导致交易失败

五、滑点机制

15. 滑点的成因

滑点定义为:

实际成交价格 与 交易前边际价格 的偏差。

本质原因只有一个:

  • 交易改变了储备结构

不是:

  • 前端问题
  • UI 问题
  • 网络延迟问题

16. 滑点的数学表达

设:

  • 初始储备 (x_0, y_0)
  • 输入资产 (dx)
  • 手续费 0.3%

输出资产为:

image.png

滑点率为:

image.png


17. 影响滑点的关键因素

  • 池子深度
  • 交易规模占比
  • 是否使用 TWAP 作为参考价
  • 闪兑是否在交易结束前恢复状态

六、V2 的边界与启示

Uniswap V2 解决了:

  • 去中心化定价
  • 自动做市
  • 抗短期操纵(相对 V1)

但仍然存在:

  • 全区间流动性低效
  • 大资金滑点不可避免
  • 价格发现依赖套利者

这些问题,直接引出了 Uniswap V3 的集中流动性设计。

<!--EndFragment-->

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
麻辣兔变形计
麻辣兔变形计
Solidity & Move 开发者 | DeFi 项目研究者 | 熟悉智能合约安全与 MEV 攻击分析