深入理解Uniswap的XYK模型基本原理

XYK 就是:把一对资产放进一个“水池”,规定池里两种资产数量的乘积始终相等 x * y = k; 所有交易都必须沿着这条规则移动,于是价格、滑点、收益、风险都从这个公式里自然长出来。

接下来我们通过简单推导,一步一步厘清这其中的数学逻辑。

一、传统交易:为什么非得有个订单簿?

在传统交易所里,核心是一个订单簿(Order Book):

  • A 在 100 元挂买 1 个 ETH
  • B 在 101 元挂卖 2 个 ETH
  • 系统把买单卖单匹配,撮合成交

这种模式有几个典型特点:

  1. 需要专业做市商

    • 如果没人挂单,普通人根本没法交易
    • 做市商需要 24 小时盯盘、调价
  2. 需要一个中心化撮合引擎

    • 由交易所运营
    • 你必须“相信”这个中间人
  3. 普通人难以参与做市

    • 提供流动性门槛很高
    • 很多收益只掌握在少数机构手里

对于区块链这种“人人都可以参与”的世界来说,这种设计太“中心化”了。

二、AMM:把做市变成一个资金池

AMM(自动做市商)最大的创新,是把交易市场从“挂单撮合 → 双边参与”变成了“资金池 → 任何人都能加入”。

资金池(Liquidity Pool)里同时放入两种资产,例如 ETH 和 USDT。池子运行遵循一个数学规则:

x * y = k

这就是所谓的 XYK(x*y=k)恒定乘积做市模型

只要有人用 USDT 买 ETH,那么 ETH 减少、USDT 增多,就必须自动调整数值,使乘积保持不变。

这个规则取代了订单簿:

  • 无需挂买卖单
  • 无需专业做市商
  • 无需中心化撮合引擎
  • 任意用户都能参与

所以 AMM 的本质是:

用一个资金池 + 一个数学公式 替代传统撮合系统。

价格、滑点、流动性深度等概念,全部从这个公式里自然推导出来。

三、价格是怎么算出来的?

先设定一个具体例子:

池子里有:

  • ETH:x = 100
  • USDT:y = 10000

那 ETH 的价格是什么?

很自然的想法:

价格 = USDT 数量 / ETH 数量 = y / x = 10000 / 100 = 100 USDT

几点关键认识:

  1. 价格不是“挂出来的”,而是由池子状态算出来的
  2. 池子状态一变,价格就自动变化
  3. 这个价格是“池内价格”,会被外部市场套利修正

所以在 AMM 中:

价格 = 池内两种资产的数量比

四、交易是怎么推动价格变动的?

现在我们来做一个简单但非常重要的例子。

4.1 初始状态

x = 100 ETH
y = 10000 USDT

k = x * y = 100 * 10000 = 1,000,000
价格 P₀ = y / x = 100 USDT/ETH

有个用户想用 1000 USDT 买 ETH

在 AMM 中,交易规则是:

交易前后都要满足:x * y = k

4.2 交易后的新状态

用户往池子里加入 1000 USDT,记为 Δy = +1000

交易后 USDT 数量:
y₂ = 10000 + 1000 = 11000

因为 x * y 要保持等于 1,000,000:
x₂ = k / y₂ = 1,000,000 / 11000 ≈ 90.909 ETH

那么,用户从池子里拿走的 ETH 是:

Δx = x₁ - x₂ = 100 - 90.909 ≈ 9.091 ETH

他实际上用 1000 USDT 买到了约 9.091 ETH:

平均买入价格 ≈ 1000 / 9.091 ≈ 110 USDT/ETH

而此时新价格为:

P₁ = y₂ / x₂ ≈ 11000 / 90.909 ≈ 121 USDT/ETH

你会看到三件事:

  1. 用户最后的平均买价 ≈ 110
  2. 交易结束时的最新价格 ≈ 121
  3. 一开始池子的价格是 100

这就是现实里感受到的:

“怎么我一买,价格就上去了,还越买越贵?”

这就是 滑点(Slippage) 的来源。

五、滑点:不是费用,而是你自己推高的价格

从上面的例子可以总结:

  • 滑点并不是额外收费
  • 而是:因为你的这笔交易改变了池子的价格

可以粗略理解为:

你在交易的过程中,从便宜 → 贵 的一整条价格区间上买了一段货。

交易越大,沿着曲线走得越远,平均买入价就比起点价格高得越多。

六、为什么池子越大,滑点越小?

做一个对比试验。

6.1 小池子:100 ETH / 10000 USDT

还是刚才的池子:

  • 100 ETH
  • 10000 USDT
  • 用 1000 USDT 买,价格从 100 → 121,变化很明显

6.2 大池子:1000 ETH / 100000 USDT

换成一个更大的池子(放大 10 倍):

x = 1000
y = 100000
k = 1000 * 100000 = 100,000,000
初始价格 = 100,000 / 1000 = 100 USDT/ETH

同样用 1000 USDT 买:

y₂ = 100000 + 1000 = 101000
x₂ = k / y₂ = 100,000,000 / 101000 ≈ 990.099 ETH
Δx ≈ 1000 - 990.099 ≈ 9.901 ETH
平均买入价 ≈ 1000 / 9.901 ≈ 101.0 USDT/ETH
新价格 P₁ ≈ 101000 / 990.099 ≈ 102.0 USDT/ETH

对比一下:

池子大小 初始价 平均买价 最终价格 价格涨幅
小池(100 / 10000) 100 ≈110 ≈121 涨 21%
大池(1000 / 100000) 100 ≈101 ≈102 涨 2%

结论:

池子越大,单笔交易对价格的影响越小,滑点就越低。

直觉类比:

  • 小池子像一个脸盆,你舀一桶水进去,水位变化很明显
  • 大池子像一个湖,你舀一桶水进去,没啥感觉

这就是“流动性深度”的直观意义。

七、流动性:到底是什么?

在 AMM 中,“流动性”不再是一个抽象词,而是池子里真实存在的资产数量

  • 流动性越多 → 曲线越“平滑” → 价格越稳定
  • 流动性越少 → 曲线越“陡峭” → 价格更容易被推飞

更重要的是:在 AMM 中,任何人都可以提供流动性

这意味着:

原本只有专业做市商能干的事,现在所有用户都能做,而且还能赚手续费。

八、作为普通人,你怎么参与这个池子?

假设现在有一个 ETH/USDT 池,状态是:

x = 100 ETH
y = 10000 USDT

价格是 100 USDT/ETH。

你想成为 LP(流动性提供者),往里加一点资金。

8.1 必须按当前价格比例存入

因为:

  • 池子里的资产比例本身就是价格
  • 如果你随便乱放,只放 ETH 不放 USDT,就会破坏价格

所以系统要求:

你要按当前价格的比例同时存入两种资产。

比如:

  • 想存入 1 ETH
  • 当前价格是 100 USDT/ETH
  • 那就需要再存入 100 USDT

这时:

x_new = 101 ETH
y_new = 10100 USDT
价格仍然 = 10100 / 101 = 100 USDT/ETH

价格没有被你改变,池子只是变大了一点

8.2 你获得“份额凭证”

每个 LP 存入资产后,会得到一个代表池子份额的代币(LP Token)。

  • 整个池子好比一个“蛋糕”
  • 你按照你贡献的资产获得“蛋糕份额”

将来你退出时:

你拿回的是 当时池子里的一部分资产,而不是你最初存进去的那一模一样的组合。

这一点,是理解“无常损失”的基础。

九、手续费:LP 是怎么赚钱的?

每一笔交易,协议一般会收取一小部分手续费(比如 0.3%),这笔钱:

  • 不是给“平台”拿走
  • 而是直接进入资金池,按份额分给所有 LP

可以这样理解:

交易者在用你的资产做交换,你从中抽取一点点“路费”。

简单模拟:

  1. 你占池子 10% 的份额
  2. 全池一共累积了 1000 USDT 的手续费
  3. 你退出时,就拿到大约 100 USDT 的手续费收益(再加上池子里的资产变化)

所以 LP 的收入来源主要有:

  • 交易手续费
  • 某些协议发放的激励(比如奖励代币)

十、无常损失:为什么 LP 会看起来亏了?

虽然 LP 可以赚手续费,但也会面临一个著名问题:无常损失(Impermanent Loss)。

先看一个最直观、最典型、最容易理解的例子。

假设池子里只有:

1 ETH + 100 USDT

这表示当前价格隐含为:

1 ETH = 100 USDT

现在你作为 LP 存入等价的资产(即同样按照当前价格比例):

再存入 1 ETH + 100 USDT(价值 200 USDT)

池子变成:

2 ETH + 200 USDT

总价值 400 USDT,而你贡献了其中 200 USDT,也就是:

你占整个池子的 50%

10.1 LP 份额不会变,但池子的资产会变

注意:作为 LP,你拥有的是池子整体的 份额(%),不是具体资产数量。

也就是说:

你拥有池子 50%,但未来那“50%”里面,ETH 和 USDT 的数量会变。

10.2 假设市场发生变化

经过一段时间,如果 ETH 相对 USDT 的价格下降,为了维持恒定乘积规则,池子里的 ETH 会变多,USDT 会变少。

假设最终池子变成:

4 ETH + 100 USDT

别看:数量看起来好像多了,但我们来计算 LP 的实际资产。

你拥有 50%,所以你取出:

2 ETH + 50 USDT

10.3 来算一下实际价值

现在池子隐含价格为:

100 / 4 = 25 USDT/ETH

因此你实际得到的价值是:

2 ETH = 2 * 25 = 50 USDT
50 USDT + 50 USDT = 100 USDT

也就是说:

你投入价值 200 USDT,最后只剩价值 100 USDT

注意这里还没算手续费,所以我们可以说你经历了一个典型的“无常损失”。

10.4 为什么会这样?

仔细观察资产变化:

项目 初始 退出
ETH 1 2
USDT 100 50

因为 ETH 比例增加、USDT 减少,说明市场认为 ETH “更不值钱”,套利者从池子里拿走 USDT、往池子里丢 ETH,让价格回归外部市场。

最终表现是:

你成了“接盘 ETH”那部分人

当价格下跌时,池子倾向变成“ETH 更多、USDT 更少”,而你的份额跟着变,因此导致资产缩水。

10.5 最重要的理解

LP 不是持有一组固定数量的资产,而是持有池子的一段“动态资产组合”。

而这个组合会自动调整方向

  • ETH 上涨 → 资产组合偏向 USDT
  • ETH 下跌 → 资产组合偏向 ETH

因此:

价格波动越大,无常损失越明显。

这才是无常损失本质。

十一、XYK 模型到底解决了什么?

总结一下 XYK 带来的改变:

  1. 不再需要订单簿

    • 没有挂单,也没有撮合引擎
    • 一切都在一个池子里完成
  2. 价格靠算法决定

    • x * y = k + 价格 = y / x
    • 所有价格变动都是公式推出来的
  3. 任何人都能成为做市商

    • 只要照比例存入两种资产
    • 不需要 24 小时盯盘,也不需要写交易策略
  4. 交易基础设施变成公共的

    • 不是某个中心化机构专有
    • 而是任何人都能参与、共享收益

十二、XYK 的局限与后续演进

XYK 虽然经典,但也有明显缺点:

  1. 滑点较大

    • 对于价格波动小、稳定币之间的交易,XYK 不够“省滑点”
    • 于是出现了像 Curve 那样的“稳定币专用曲线”
  2. 资本利用率不高

    • 资金需要覆盖一个宽范围的价格区间,却不一定都被用到
    • Uniswap v3 通过“集中流动性”优化了这一点
  3. 无常损失

    • LP 承担价格波动风险
    • 对只想“躺平持币”的人不够友好

尽管如此:

XYK 仍然是所有后续 AMM 设计的入门钥匙。 理解了 XYK,后面看 Uniswap v2/v3、Curve、Balancer 等模型都会轻松很多。

十三、总结:再看一眼那条简单的公式

我们再回到那条看似朴素的公式:

x * y = k

在这条公式之上,实际上生长出了:

  • 价格P = y / x
  • 滑点:交易沿曲线移动带来的价格变化
  • 流动性深度:池子大小决定曲线陡峭程度
  • LP 收益:手续费分配机制
  • 无常损失:LP 与单纯持币的结果对比差额

你可以把 XYK 看成 DeFi 里的“F=ma”:

它简单到一句话就能写完,但几乎整个去中心化交易市场,都建立在它的思想之上