4、恒定乘积做市公式:x·y=k的数学原理、推导过程、交易价格计算与滑点产生机制
恒定乘积做市公式(Constant Product Market Maker,简称 CPMM)是去中心化交易所(DEX)最核心的定价引擎,由 Uniswap V2 率先大规模采用。该公式以极简的数学形式——x·y = k——同时解决了流动性供给、资产定价和交易执行三个核心问题。理解这一公式的数学本质、推导逻辑以及滑点产生机制,是掌握 AMM 自动做市原理的基石。本章将从数学推导出发,逐步拆解交易价格的计算过程,并深入剖析滑点的成因与量化方法。
4.1 核心原理:为什么是乘积恒定?
恒定乘积做市公式的核心思想可以概括为:在流动性池中,两种代币的储备量乘积始终保持不变。设池中 A 的储备量为 x, B 的储备量为 y,则恒定乘积约束为:
x · y = k
其中 k 是一个常数,由流动性提供者(LP)首次注入资金时确定。当用户向池中注入 Δx 个 A 时,系统会从池中提取 Δy 个 B,使得交易后的储备量 (x+Δx) 与 (y-Δy) 的乘积仍然等于 k。这一约束条件直接决定了交易价格和滑点。
该公式的巧妙之处在于:它不需要外部价格预言机。价格完全由池内两种资产的相对稀缺性决定——当某种资产被大量买入时,其储备量下降,价格自然上升;反之亦然。这种机制使得 AMM 能够自动响应市场供需变化,实现去中心化的价格发现。
4.2 推导过程:从交易约束到价格公式
假设流动性池初始储备为 (x₀, y₀),用户希望用 Δx 个 A 兑换 B。交易完成后,池内储备变为 (x₁, y₁),其中:
x₁ = x₀ + Δx
y₁ = y₀ - Δy
根据恒定乘积约束:
x₀ · y₀ = x₁ · y₁ = k
代入 x₁ 和 y₁ 的表达式:
(x₀ + Δx) · (y₀ - Δy) = x₀ · y₀
展开并整理:
x₀·y₀ - x₀·Δy + Δx·y₀ - Δx·Δy = x₀·y₀
Δx·y₀ = Δy·(x₀ + Δx)
Δy = y₀ · Δx / (x₀ + Δx)
因此,用户获得的 B 数量为:
Δy = y₀ · Δx / (x₀ + Δx)
这个公式是恒定乘积做市的核心交易公式。它表明:用户获得的输出代币数量不仅取决于输入数量,还取决于池内当前的储备量。池子越深(x₀ 和 y₀ 越大),同样的 Δx 能换到的 Δy 就越多,滑点也越小。
4.3 交易价格计算:边际价格与实际均价
在 AMM 中,价格有两种理解方式:边际价格和实际成交均价。
| 价格类型 | 定义 | 计算公式 | 含义 |
|---|---|---|---|
| 边际价格(瞬时价格) | 当前储备量下,极小量交易的价格 | P = y₀ / x₀ | 池内两种资产的相对稀缺程度 |
| 实际成交均价 | 完成一笔交易后,实际兑换的比率 | P_avg = Δy / Δx = y₀ / (x₀ + Δx) | 用户实际支付的价格 |
边际价格 P = y₀ / x₀ 是池内当前的价格信号,也是外部套利者参考的价格基准。而实际成交均价 P_avg = Δy / Δx 则反映了用户完成整笔交易后的平均兑换比率。由于双曲线的凸性,实际成交均价总是低于边际价格(当用户买入 B 时),两者之差即为滑点。
4.4 滑点产生机制:数学根源与量化分析
滑点(Slippage)是指实际成交价格与预期价格之间的偏差。在恒定乘积做市中,滑点产生的数学根源在于双曲线的曲率——交易量越大,价格偏离越显著。
滑点的量化公式为:
滑点 = P_avg - P = y₀/(x₀ + Δx) - y₀/x₀ = -y₀·Δx / (x₀·(x₀ + Δx))
相对滑点(百分比)为:
相对滑点 = |滑点| / P = Δx / (x₀ + Δx)
从公式可以看出,相对滑点仅取决于交易量 Δx 与池内储备量 x₀ 的比值。当 Δx 远小于 x₀ 时,滑点趋近于零;当 Δx 接近甚至超过 x₀ 时,滑点急剧上升。
4.5 实战案例:ETH/USDC 池交易拆解
假设一个 ETH/USDC 流动性池,初始储备为:
x₀ = 100 ETH( A)
y₀ = 200,000 USDC( B)
k = 100 × 200,000 = 20,000,000
边际价格 P = 200,000 / 100 = 2,000 USDC/ETH。
场景一:小额交易——用户用 1 ETH 兑换 USDC:
Δx = 1 ETH
Δy = 200,000 × 1 / (100 + 1) = 200,000 / 101 ≈ 1,980.20 USDC
实际均价 = 1,980.20 USDC/ETH
滑点 = 2,000 - 1,980.20 = 19.80 USDC(约 0.99%)
场景二:大额交易——用户用 20 ETH 兑换 USDC:
Δx = 20 ETH
Δy = 200,000 × 20 / (100 + 20) = 4,000,000 / 120 ≈ 33,333.33 USDC
实际均价 = 33,333.33 / 20 = 1,666.67 USDC/ETH
滑点 = 2,000 - 1,666.67 = 333.33 USDC(约 16.67%)
对比可见,交易量从 1 ETH 增加到 20 ETH,滑点从约 1% 飙升至约 16.7%。这就是恒定乘积做市的核心特征:流动性深度决定了价格冲击的大小。
4.6 常见误区与总结复盘
在学习恒定乘积做市公式时,初学者常犯以下错误:
- 误区一:认为 k 值会随交易变化。实际上,k 值在正常交易中保持不变,只有流动性提供者存入或提取流动性时才会改变。
- 误区二:混淆边际价格与成交均价。边际价格是瞬时参考价,实际成交价总是更差(对用户而言),差额就是滑点。
- 误区三:忽视滑点的非线性增长。滑点随交易量呈非线性增长,而非线性关系。交易量翻倍,滑点可能增长数倍。
- 误区四:认为池子越大滑点一定越小。滑点取决于交易量相对于池子深度的比例,而非池子的大小。深池子只是允许更大的交易量而不产生显著滑点。
总结复盘:恒定乘积做市公式 x·y = k 是 AMM 的基石,其数学本质是双曲线约束下的供需平衡。交易价格由池内储备量之比决定,滑点则源于双曲线的曲率——交易量越大,价格偏离越远。理解这一机制,是设计交易策略、评估流动性池质量以及防范 DeFi 风险的基础。在实际应用中,交易者应始终关注池子的深度(总锁仓量 TVL)和自身的交易规模,合理设置滑点容忍度,避免因价格冲击造成不必要的损失。