LAB 05 / AMM & LIQUIDITY
Uniswap 机制与 LP 实验室
从全范围常数乘积到集中流动性和 hooks:版本变化扩展了表达能力,但交换仍要面对流动性、费用与状态变化。
VERSION MATRIX
v1 → v4:什么真正改变了
| 版本 | 配对 / 路由 | 流动性模型 | 费用 | Oracle | 架构 |
|---|---|---|---|---|---|
| v1 | ETH ↔ ERC-20;经 ETH 路由 | 全范围 x·y=k | 固定 swap fee | 无内建通用 oracle | 独立池合约 |
| v2 | 任意 ERC-20 pair;多跳路由 | 全范围 x·y=k | 经典总 swap fee 0.30%;协议费可开启 | 累积价格支持 TWAP | 独立 pair 合约 |
| v3 | 同一 pair 可有多个独立费率档池合约 | 按 tick 区间的集中流动性 | 每个池选择 fee tier | 累积 observations | 每个 fee-tier pool 独立 |
| v4 | Singleton 中的 pool key | 默认支持 v3 风格集中流动性;hooks 可自定义 | 静态/动态,且 hook accounting 可改 token deltas | 核心无内建通用 oracle;hook 可自定义 | Singleton、flash accounting、hooks |
v4 core 默认支持 v3 风格集中流动性、singleton、flash accounting 与 hooks;但 hook custom accounting 可以改变 token deltas 或实现自定义曲线。因此不能把 v2/v3 的曲线、费用或 oracle 假设套用到每个 v4 pool,也不应声称核心有内建通用 oracle。
SWAP LAB
常数乘积交换
报价方程:(x + Δx·(1−f)) · (y − Δy) = x·y
储备实际按完整输入更新:x′=x+Δx,y′=y−Δy。费用留在池内时,k 通常增加。本教学模型假定 protocol fee 关闭,因此建模的 swap fee 全部累积给 LP;这不表示 v2 的 0.30% 总费率在所有配置下永远全归 LP。
STATE-DERIVED X · Y
储备曲线与状态移动
连续 v2-style 教学模型这里使用 JavaScript 浮点连续数学,省略 token decimals、整数运算与每跳向下取整。结果不是链上 quote,也不是利润证明。
输出数量94.9659Y
平均执行价1.8993output / input
结束边际价1.8143新 reserveOut / reserveIn
曲线价格冲击(不含 fee)4.76%含 fee 总短差 5.03% · swap fee 0.15
INVARIANT
k 的变化
k before2,000,000
k after(swap fee 留池)2,000,285.76
Δk285.76
FULL-RANGE 50/50
LP / 无常损失参数
IL(r) = 2·√r / (1+r) − 1
OPPORTUNITY COST
持有 vs LP
HODL15,000
LP(费前)14,142.14
LP(含费用假设)14,262.14
经典无常损失-5.72%
WHY IT HAPPENS
从第一性原理理解 IL
外部价格上涨时,套利者沿曲线买走池中升值资产;LP 自动卖出它,同时积累相对贬值的另一种资产。价格下跌时方向相反。这个持续再平衡使 LP 相比简单持有少享受单边上涨、多持有下跌资产。
IL 是价格仍有差异时相对 HODL 的 mark-to-market underperformance,并非只有撤出时才产生。退出只是固定当时的库存与结果;费用可能抵消它,也可能不够。公式仅适用于全范围 50/50 常数乘积假设,不能直接描述 v3/v4 集中流动性仓位。
PROTOCOL SOURCES
官方资料
版本能力以官方概念文档与核心合约为准;本页经典 IL 公式不适用于所有 v3/v4 仓位或自定义 v4 hooks。