AMM机制与滑点:恒定乘积公式、流动性池深度、滑点计算公式

聊到DEX的滑点,咱们得先搞清楚AMM是怎么定价的。说白了,AMM不像传统交易所那样有个订单簿,它靠的是一个数学公式来算价格。这个公式,就是大名鼎鼎的恒定乘积公式

恒定乘积公式:AMM的定价基石

我记得刚接触Uniswap V2时,第一眼看到 x * y = k 这个公式,觉得也太简单了吧?但实际用起来,你会发现它非常巧妙。

公式里:

  • x 是交易对中代币A的储备量
  • y 是代币B的储备量
  • k 是一个常数,代表流动性池的“深度”

交易的本质是什么?就是往池子里塞一种代币,同时取出另一种。但有个铁律:交易前后,x * y 的乘积必须保持不变(扣除手续费前)。

举个例子:假设一个ETH/USDC池,里面有10个ETH和20,000个USDC。那么 k = 10 * 20000 = 200,000

你想用1个ETH换USDC。交易后,池子里ETH变成11个。为了保持乘积不变,USDC的数量必须变成 200,000 / 11 ≈ 18,181.82 个。

所以你能拿到的USDC是:20,000 - 18,181.82 = 1,818.18 个。

嗯,这里要注意:你实际拿到手的会比这个少一点,因为还要扣手续费。但定价逻辑就是这样。

核心要点: 恒定乘积公式决定了,你交易的数量越大,对池子储备的影响就越大,价格也就越偏离原始价格。这就是滑点的根源。

流动性池深度:滑点的“缓冲垫”

池子深度,说白了就是池子里有多少钱。深度越深,你交易时对价格的影响就越小。

我个人习惯把流动性池想象成一个水池。你往里面扔一块石头(交易),水面会波动(价格变化)。水池越大,波动越小。水池越小,稍微扔块石头就水花四溅。

我在项目中遇到过好几次这样的情况:一个刚上线的土狗币,池子深度可能就几万美金。你买个几百美金,价格就往上窜了5%。这就是典型的“浅池子”问题。

深度通常用两个指标衡量:

  • 总锁仓价值(TVL): 池子里所有代币的总价值。TVL越高,深度越好。
  • 滑点容忍度: 在给定滑点范围内,你能交易的最大金额。
我的建议: 交易前,先看看池子的TVL。如果TVL低于100万美金,建议把滑点设置到1%以上,否则很容易交易失败。

滑点计算公式:量化你的交易成本

滑点到底怎么算?其实公式不复杂。我们一步步来。

假设你想买入 Δx 个代币X(即你往池子里塞的代币)。池子当前有 x 个X和 y 个Y。

交易后,池子里X的数量变成 x + Δx。根据恒定乘积公式:

(x + Δx) * (y - Δy) = x * y

其中 Δy 是你得到的Y代币数量。解这个方程:

Δy = y - (x * y) / (x + Δx)
    = y * [1 - x / (x + Δx)]
    = y * [Δx / (x + Δx)]

这个 Δy 就是你实际得到的数量。但注意,这是理论值。实际交易中还要扣除手续费(比如Uniswap V2是0.3%)。

那滑点怎么算?滑点就是实际成交价格与当前市场价格之间的偏差百分比

当前市场价格(即边际价格)是 P = y / x。你交易的实际平均价格是 P_actual = Δy / Δx

滑点公式:

Slippage = |P_actual - P| / P * 100%
         = |(Δy / Δx) - (y / x)| / (y / x) * 100%

Δy 的表达式代入,化简后得到:

Slippage = Δx / (x + Δx) * 100%

你看,滑点只跟两个因素有关:

  • 你的交易量 Δx:交易量越大,滑点越高
  • 池子深度 x:池子越深,滑点越低
避坑指南: 我曾经在某个DEX上交易,没注意滑点设置,结果一笔交易滑了8%。后来才发现,那个池子的TVL只有2万美金。所以,永远不要忽视滑点设置,尤其是大额交易。

知识体系结构图

下面这张图,帮你理清AMM、滑点和流动性池之间的关系:

AMM 机制 恒定乘积公式 x * y = k 流动性池深度 TVL / 储备量 滑点 价格偏差百分比 交易后: (x+Δx) * (y-Δy) = k Δy = y * Δx / (x+Δx) 深度越大 → 滑点越小 深度越小 → 滑点越大 TVL是核心指标 滑点 = Δx / (x+Δx) * 100% 交易量↑ → 滑点↑ 储备量↑ → 滑点↓ 定价机制 决定交易价格 风险评估 判断交易是否安全 滑点设置 控制交易成本 三者共同决定DEX交易体验

实际交易中的滑点计算示例

咱们用个真实数据算一遍,你感受一下。

假设ETH/USDC池子:

  • ETH储备:100个
  • USDC储备:300,000个
  • 当前ETH价格:3,000 USDC

你想买入10个ETH(即往池子里塞USDC,取出ETH)。

根据公式,你塞入的USDC数量 Δy 和取出的ETH数量 Δx 满足:

(100 - Δx) * (300,000 + Δy) = 100 * 300,000

解出 Δy

Δy = (100 * 300,000) / (100 - 10) - 300,000
    = 30,000,000 / 90 - 300,000
    = 333,333.33 - 300,000
    = 33,333.33 USDC

你的实际买入价格是 33,333.33 / 10 = 3,333.33 USDC/ETH

滑点 = (3,333.33 - 3,000) / 3,000 * 100% ≈ 11.11%

你看,买10个ETH,滑点就超过11%了。这就是为什么大额交易一定要拆分,或者用聚合器。

一个小技巧: 我一般用滑点公式反推,看自己最多能买多少而不超过目标滑点。比如设定滑点不超过1%,那么 Δx / (x + Δx) ≤ 0.01,解出 Δx ≤ x / 99。也就是说,你的交易量不要超过池子储备的1%。

好了,这一章的内容就这些。记住三个关键词:恒定乘积公式是定价基础,流动性池深度是滑点的缓冲垫,滑点计算公式帮你量化交易成本。下次交易前,先算算滑点,别让钱白白流失。


专注资料整理