本文围绕UniswapV2的三个核心机制展开:定价机制:常数乘积模型下的边际价格、区间价格与TWAP流动性池:储备、LPToken、费用与K的动态演化滑点机制:成因、计算方式。
<!--StartFragment-->
本文假设读者已了解 AMM 基本概念,并对 Uniswap V2 合约结构有初步认识。
本文围绕 Uniswap V2 的三个核心机制展开:
全文以 “状态变化过程” 为主线,而非将 AMM 简化为一个“给出价格的公式”。
在 Uniswap V2 中,合约本身并不直接给出价格。\ Pair 合约只施加一个状态约束:
$$ X·Y>=K $$ 其中:
用户提交交易时:
因此,AMM 的价格不是“查表得到”,而是一次状态迁移的副产品。
Uniswap V2 延续 V1 的核心定价逻辑:
$$ x⋅y=k $$
当用户用资产 (X) 去兑换 (Y):
引入交易费(0.3%)后,约束在源码中表现为:
require(
balance0Adjusted.mul(balance1Adjusted)
>= uint(_reserve0).mul(_reserve1).mul(1000**2),
'UniswapV2: K'
);
这意味着:
边际价格描述的是:
在当前储备状态下,极小交易量所对应的兑换比例。
对于资产 (X/Y),边际价格为:

数学上:
经济上:
因此:
真实交易并非发生在一个点,而是:
沿着 AMM 曲线,从初始状态滑动到终止状态的全过程。
实际价格定义为:
举例说明(用 X 购买 Y):
交易结果:
则 Y 的实际价格为:
这一定价:
当交易规模极小时:
当交易规模较大时:
由于 AMM 的 spot price 仅由当前储备决定:
都可以在极短时间内大幅改变边际价格。
这对以下场景是致命的:
TWAP 的核心目标不是“更准”,而是:
让操纵价格的成本随时间线性增长。
Uniswap V2 引入 价格累加器(price accumulator):
任意区间 ([t_1, t_2]) 的平均价格为:

只需记录:
无需保存完整时间序列。
在 TWAP 语境下:

原因在于:
但在任一瞬时点上:
这是 TWAP 使用中一个常被忽略、但非常重要的细节。
由于 Solidity 不支持浮点数,V2 使用:
好处:
同时利用 256 位存储槽剩余空间处理溢出问题:
流动性不是“锁仓”,而是:
池子中可被随时重新定价和交易的资产规模。
储备越深:
Uniswap V2 通过:
支持任意 ERC-20 对创建交易池,突破 V1 的限制。
首次初始化池子:

后续添加流动性:

取最小值的原因:
LP Token 本质是:
对当前池内全部资产(含手续费)的按比例索取权。
需要强调的是:
手续费留在池内:
skim():提取超过储备记录的余额sync():应对通缩、反射型代币滑点定义为:
实际成交价格 与 交易前边际价格 的偏差。
本质原因只有一个:
不是:
设:
输出资产为:

滑点率为:

Uniswap V2 解决了:
但仍然存在:
这些问题,直接引出了 Uniswap V3 的集中流动性设计。
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!