2、恒定乘积公式:x*y=k的数学推导与经济学含义

好,咱们直接进入正题。恒定乘积公式,说白了就是 Uniswap 的命根子。你打开任何一个 AMM 协议,背后几乎都能看到 x*y=k 的影子。这个公式看起来简单到离谱——两个数相乘等于一个常数,但它的内涵,远比表面复杂得多。

我记得刚接触 DeFi 那会儿,看到这个公式第一反应是:「就这?」后来在项目中实际部署过几个流动性池子,踩过坑之后才明白,这个公式背后藏着博弈论、市场微观结构和无套利定价的精髓。今天我就带你把它彻底拆开。

2.1 数学推导:从交易场景到公式落地

我们先从最朴素的场景出发。假设有一个交易对,比如 ETH/USDC。池子里有 x 个 ETH 和 y 个 USDC。用户想用 Δx 个 ETH 换出 Δy 个 USDC。

交易完成后,池子里的 ETH 变成 x+Δx,USDC 变成 y-Δy。恒定乘积公式要求:

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

注意,这里的 k 是常数。交易前后乘积不变。展开一下:

x*y + Δx*y - x*Δy - Δx*Δy = k
由于 x*y = k,两边消去:
Δx*y - x*Δy - Δx*Δy = 0
整理得:
Δy = (y * Δx) / (x + Δx)

这个公式就是 Uniswap 的定价核心。你拿 Δx 个 ETH 进去,能换出多少 USDC,完全由当前池子的存量决定。

关键点:Δy 的计算公式里,分母是 x+Δx,而不是 x。这意味着你交易的规模越大,滑点越明显。这就是为什么大额交易在 Uniswap 上总是吃亏——你推高了价格。

我建议你把这个公式记在心里。很多 DeFi 攻击事件,本质上都是利用了这个公式的某些特性。比如闪电贷攻击,就是通过短时间内改变 x 和 y 的比例,让预言机或者套利者有机可乘。

2.2 经济学含义:价格、滑点与无常损失

公式本身是数学,但它的经济学含义才是真正有意思的部分。咱们一个一个来看。

2.2.1 瞬时价格与边际价格

在 Uniswap 里,一个资产相对于另一个资产的「瞬时价格」,其实就是曲线的斜率。对 x*y=k 求导:

y = k / x
dy/dx = -k / x² = -y / x

所以,ETH 相对于 USDC 的价格就是 y/x。举个例子,如果池子里有 10 个 ETH 和 20000 个 USDC,那么 1 ETH = 2000 USDC。

但注意,这只是「边际价格」。你实际交易时,成交价格是平均价格,比边际价格要差一些。这就是滑点的来源。

个人经验:我在做流动性挖矿策略时,经常需要估算滑点。直接用 Δy 公式算一下,就能知道一笔交易会吃掉多少价格空间。如果你做高频做市,这个计算是基本功。

2.2.2 滑点与深度

滑点说白了就是「你交易得越多,价格越不利」。为什么?因为恒定乘积曲线是一条双曲线,越往两边走,斜率变化越快。

举个例子:

交易规模 (ETH) 预期价格 (USDC/ETH) 实际成交均价 (USDC/ETH) 滑点
1 2000 1990 0.5%
10 2000 1818 9.1%
100 2000 1000 50%

你看,交易 1 个 ETH 时滑点几乎可以忽略,但交易 100 个 ETH 时,价格直接腰斩。这就是为什么大额交易需要拆分,或者走聚合器。

2.2.3 无常损失:做市商的隐形成本

嗯,这里要重点说一下无常损失。很多新手觉得做市就是躺着赚钱,其实不然。当外部市场价格变动时,LP 的资产价值会发生变化,而且往往比单纯持有要差。

为什么?因为恒定乘积公式强制要求池子里的资产比例随着交易变化。假设 ETH 从 2000 涨到 4000,套利者会进来买走 ETH,直到池子里的 ETH 变少、USDC 变多,重新达到平衡。结果就是:你作为 LP,在价格上涨时反而卖出了 ETH。

我曾经踩过的坑:有一次我在 ETH 2000 时提供了流动性,结果 ETH 涨到 3000,我一看 LP 价值居然只涨了 30%,而单纯持有能涨 50%。这就是无常损失在作祟。后来我学乖了,只在波动率低的时候做市,或者用对冲策略。

无常损失的公式其实也不复杂。假设价格从 P0 变到 P1,无常损失的百分比是:

无常损失 = 2 * sqrt(r) / (1 + r) - 1
其中 r = P1 / P0

举个例子,如果价格翻倍(r=2),无常损失大约是 5.7%。如果价格跌一半(r=0.5),损失也是 5.7%。对称的。所以别以为只有涨才亏,跌也一样亏。

2.3 恒定乘积的深层逻辑:为什么是乘法?

你可能会问:为什么是 x*y=k,而不是 x+y=k 或者 x²+y²=k?这个问题我在项目评审时被问过很多次。

其实答案很简单:乘法保证了「无论价格怎么变,池子永远不会枯竭」。如果是加法,价格会线性变化,极端情况下池子可能被掏空。而双曲线是渐近的,x 趋近于 0 时 y 趋近于无穷,反过来也一样。这意味着你永远可以用无限高的价格买到最后一枚代币。

当然,实际中不可能真的买到最后一枚,因为价格会高到离谱。但理论上,这个机制保证了流动性永远不会消失。这是 Uniswap 能成为 DeFi 基石的原因之一。

2.4 核心逻辑图:恒定乘积的运作机制

下面我用一张 SVG 图来展示整个流程。你可以把它当作本章的知识地图。

恒定乘积公式 x*y=k 核心逻辑 x * y = k 用户输入 Δx (如 ETH) 用户获得 Δy (如 USDC) 瞬时价格 P = y / x 边际价格 = 曲线斜率 滑点 Δy = y*Δx / (x+Δx) 交易规模越大,滑点越高 无常损失 2√r/(1+r) - 1 价格偏离越大,损失越大 核心:双曲线特性保证流动性永不枯竭

这张图把整个逻辑串起来了。从左到右:用户输入 Δx,经过恒定乘积公式计算,输出 Δy。下方三个核心概念——瞬时价格、滑点、无常损失——是你在实际做市时必须时刻关注的三个维度。

2.5 实战中的注意事项

最后,我分享几个实战中容易忽略的点:

  • k 值不是绝对常数:每次添加或移除流动性,k 值都会重新计算。所以别以为 k 永远不变,它只是在一笔交易内不变。
  • 手续费的影响:实际 Uniswap 会收 0.3% 的手续费,这部分费用会累积到池子里,导致 k 值缓慢增长。所以长期做市其实是赚的,前提是无常损失不要太大。
  • 滑点保护:我建议你在前端交易时,永远设置滑点容忍度。比如 0.5% 或 1%。否则遇到极端行情,你可能被三明治攻击吃掉所有利润。

一个小技巧:如果你想快速估算一笔交易的滑点,可以用 Δy 公式的反向形式:Δx = x * Δy / (y - Δy)。这样你就能知道,想换出多少 USDC,需要准备多少 ETH。我在写交易机器人时经常用这个。

好了,恒定乘积公式就讲到这里。记住,它不只是数学,更是 DeFi 世界的底层逻辑。理解了它,你就理解了 Uniswap 的一半。


公众号:蓝海资料掘金营,微信deep3321