4、恒定乘积做市公式:x·y=k的数学原理、推导过程、交易价格计算与滑点产生机制

恒定乘积做市公式(Constant Product Market Maker,简称 CPMM)是去中心化交易所(DEX)最核心的定价引擎,由 Uniswap V2 率先大规模采用。该公式以极简的数学形式——x·y = k——同时解决了流动性供给、资产定价和交易执行三个核心问题。理解这一公式的数学本质、推导逻辑以及滑点产生机制,是掌握 AMM 自动做市原理的基石。本章将从数学推导出发,逐步拆解交易价格的计算过程,并深入剖析滑点的成因与量化方法。

恒定乘积做市公式 x·y = k 核心原理图 双曲线约束关系 x·y = k x( A 数量) y( B 数量) 初始点 (x₀, y₀) 交易后 (x₁, y₁) Δx 交易执行流程 ① 用户输入 Δx ② 计算 Δy = y - k/(x+Δx) ③ 执行兑换,更新储备 ④ 实际价格 = Δy/Δx 滑点 = 实际均价 - 边际价格 交易量越大,滑点越高 关键公式 边际价格 P = y/x (当前储备量之比) 实际均价 P_avg = Δy/Δx (实际兑换数量之比) 滑点 = P_avg - P (相对滑点 = 滑点/P) k 值不变(恒定乘积) 流动性提供者存入时确定 恒定乘积公式:储备量变化保持乘积不变,价格随供需自动调整

4.1 核心原理:为什么是乘积恒定?

恒定乘积做市公式的核心思想可以概括为:在流动性池中,两种代币的储备量乘积始终保持不变。设池中 A 的储备量为 x, B 的储备量为 y,则恒定乘积约束为:

x · y = k

其中 k 是一个常数,由流动性提供者(LP)首次注入资金时确定。当用户向池中注入 Δx 个 A 时,系统会从池中提取 Δy 个 B,使得交易后的储备量 (x+Δx) 与 (y-Δy) 的乘积仍然等于 k。这一约束条件直接决定了交易价格和滑点。

该公式的巧妙之处在于:它不需要外部价格预言机。价格完全由池内两种资产的相对稀缺性决定——当某种资产被大量买入时,其储备量下降,价格自然上升;反之亦然。这种机制使得 AMM 能够自动响应市场供需变化,实现去中心化的价格发现。

核心理解:恒定乘积公式本质上是一条双曲线。在 (x, y) 平面上,所有满足 x·y = k 的点构成一条双曲线。交易就是沿着这条双曲线移动——从初始点 (x₀, y₀) 移动到新点 (x₁, y₁),但始终不离开曲线。

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₀ 时,滑点急剧上升。

风险提示:滑点不是固定值,而是随交易量动态变化的。大额交易在流动性较浅的池子中可能产生 5% 甚至更高的滑点,这意味着用户实际获得的代币远少于预期。在 DeFi 中,攻击者常利用滑点机制进行三明治攻击(Sandwich Attack),通过前置交易推高价格,再从用户交易中获利。

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%。这就是恒定乘积做市的核心特征:流动性深度决定了价格冲击的大小。

实战启示:在 DEX 上进行大额交易前,务必使用滑点保护功能(如 Uniswap 的 slippage tolerance 设置)。一般建议将滑点容忍度设置在 0.5%-1% 之间,超过该范围交易将自动回滚,避免因价格冲击造成不必要的损失。

4.6 常见误区与总结复盘

在学习恒定乘积做市公式时,初学者常犯以下错误:

  • 误区一:认为 k 值会随交易变化。实际上,k 值在正常交易中保持不变,只有流动性提供者存入或提取流动性时才会改变。
  • 误区二:混淆边际价格与成交均价。边际价格是瞬时参考价,实际成交价总是更差(对用户而言),差额就是滑点。
  • 误区三:忽视滑点的非线性增长。滑点随交易量呈非线性增长,而非线性关系。交易量翻倍,滑点可能增长数倍。
  • 误区四:认为池子越大滑点一定越小。滑点取决于交易量相对于池子深度的比例,而非池子的大小。深池子只是允许更大的交易量而不产生显著滑点。

总结复盘:恒定乘积做市公式 x·y = k 是 AMM 的基石,其数学本质是双曲线约束下的供需平衡。交易价格由池内储备量之比决定,滑点则源于双曲线的曲率——交易量越大,价格偏离越远。理解这一机制,是设计交易策略、评估流动性池质量以及防范 DeFi 风险的基础。在实际应用中,交易者应始终关注池子的深度(总锁仓量 TVL)和自身的交易规模,合理设置滑点容忍度,避免因价格冲击造成不必要的损失。