2、AMM机制详解:恒定乘积公式(x*y=k)的数学原理、滑点与无常损失、流动性池的运作逻辑

大家好,我是你们的DeFi工程师。今天我们来聊聊AMM,也就是自动做市商。说实话,我刚入行时也觉得这东西挺玄乎的,不就是个公式吗?后来在项目中踩过几次坑,才真正理解了它的精妙之处。

AMM的核心,说白了就是一条曲线。这条曲线决定了你交易时能拿到多少代币。我们一步步拆解。

2.1 恒定乘积公式:x * y = k

这是Uniswap V2的核心公式。假设一个池子里有x个A代币,y个B代币。那么无论你怎么交易,x和y的乘积始终等于一个常数k。

举个例子:

  • 池子里有100个ETH和200,000个USDC
  • 那么k = 100 * 200,000 = 20,000,000
  • 你想用ETH换USDC,你往池子里放Δx个ETH
  • 池子里的ETH变成x + Δx
  • 为了保持k不变,USDC的数量必须变成y' = k / (x + Δx)
  • 你拿到的USDC就是Δy = y - y'

公式很简单,但背后有大学问。我习惯用这个公式来快速估算交易成本:

// 假设当前池子状态
x = 100 ETH
y = 200,000 USDC
k = 20,000,000

// 你想买入1个ETH,即Δx = 1
x' = 101
y' = 20,000,000 / 101 ≈ 198,019.8
Δy = 200,000 - 198,019.8 = 1,980.2 USDC

// 你花了1,980.2 USDC买了1个ETH
// 而当前市价是2,000 USDC/ETH
// 你多付了19.8 USDC,这就是滑点

核心要点:滑点的大小取决于你的交易量相对于池子深度的大小。交易量越大,滑点越高。

2.2 滑点:为什么大额交易不划算?

滑点,就是实际成交价和预期价格之间的差距。为什么会这样?因为AMM的定价曲线是凸的。

你想想看,池子里的流动性是有限的。你买得越多,价格就涨得越快。这就像你去买一个稀缺商品,买的人多了,价格自然就上去了。

我在项目中遇到过最典型的案例:一个用户想用100万USDC买一个冷门代币,结果滑点高达15%。他以为能按市价成交,结果多花了15万USDC。嗯,这就是不看滑点的代价。

滑点的计算公式:

滑点 = (实际成交价 - 预期价格) / 预期价格 * 100%

// 还是上面的例子
预期价格 = 2,000 USDC/ETH
实际成交价 = 1,980.2 USDC/ETH
滑点 = (1,980.2 - 2,000) / 2,000 * 100% = -0.99%
// 注意:这里是负滑点,因为你买ETH时支付了更多USDC

避坑指南:我曾经在交易时没设置滑点保护,结果一笔交易因为链上拥堵,滑点从1%飙到了8%。从那以后,我每次交易都会设置滑点容忍度,一般不超过2%。

2.3 无常损失:做市商的隐形杀手

无常损失,是流动性提供者(LP)最头疼的问题。简单说,就是你把代币放进池子后,价格变化了,你发现你的资产价值比单纯持有少了。

为什么会这样?因为AMM的定价机制迫使池子里的代币比例随着价格变化而调整。

举个例子:

  • 你存入1个ETH和2,000个USDC(当时ETH=2,000 USDC)
  • 你的总资产价值 = 1 * 2,000 + 2,000 = 4,000 USDC
  • 如果ETH涨到4,000 USDC,单纯持有的话,你的资产价值 = 1 * 4,000 + 2,000 = 6,000 USDC
  • 但在池子里,由于套利者的存在,池子里的ETH会减少,USDC会增加
  • 最终你的资产价值可能只有5,657 USDC
  • 无常损失 = (5,657 - 6,000) / 6,000 ≈ -5.7%

我刚开始做LP时,觉得无常损失就是个理论概念。直到有一次,我存了ETH-USDC池子,ETH涨了50%,我兴冲冲地去算收益,结果发现无常损失吃掉了大部分利润。嗯,从那以后我再也不敢忽视它了。

注意:无常损失不是真正的损失,而是相对于「单纯持有」的机会成本。如果你长期持有,并且池子的交易手续费足够高,无常损失是可以被覆盖的。

无常损失的计算公式:

无常损失 = 2 * sqrt(价格变化比例) / (1 + 价格变化比例) - 1

// 价格变化比例 = 新价格 / 旧价格
// 如果价格翻倍(变化比例=2)
无常损失 = 2 * sqrt(2) / (1 + 2) - 1
         = 2 * 1.414 / 3 - 1
         = 2.828 / 3 - 1
         = 0.943 - 1
         = -0.057
         = -5.7%
价格变化比例 无常损失
1.25x(涨25%) -0.6%
1.5x(涨50%) -2.0%
2x(翻倍) -5.7%
3x(涨200%) -13.4%
4x(涨300%) -20.0%

2.4 流动性池的运作逻辑

流动性池,说白了就是一个智能合约管理的代币池子。任何人都可以往里面存代币,成为LP,然后赚取交易手续费。

运作流程是这样的:

  1. 创建池子:有人调用合约,存入两种代币的初始数量,设定初始价格
  2. 添加流动性:LP按照当前池子比例存入代币,获得LP代币作为凭证
  3. 交易:用户用A代币换B代币,池子自动计算价格和滑点
  4. 手续费分配:每笔交易收取0.3%的手续费,按LP代币比例分给所有LP
  5. 移除流动性:LP销毁LP代币,按比例取回池子中的代币

我个人习惯用这个思维模型来理解:流动性池就像一个自动化的外汇兑换机。你放进去两种货币,机器自动维持汇率。每次有人兑换,机器就调整汇率,同时给你一点手续费作为回报。

关键点:LP代币代表了你在池子中的份额。你存入的越多,赚的手续费就越多。但要注意,你的份额是动态变化的,因为池子里的代币比例会随着交易而改变。

下面我用一张SVG图来展示整个AMM的核心逻辑:

AMM恒定乘积做市商核心逻辑 流动性池 x * y = k ETH: 100 | USDC: 200,000 k = 20,000,000 交易者 用USDC买ETH 流动性提供者 存入代币赚手续费 存入USDC 取出ETH 存入ETH+USDC 取出代币+手续费 核心公式与关键概念 恒定乘积:x * y = k 滑点:交易量越大,滑点越高 无常损失:价格变化越大,损失越大 手续费:0.3%每笔交易,按份额分配 价格曲线: 凸曲线

这张图展示了AMM的核心流程。交易者和LP通过流动性池交互,池子用恒定乘积公式自动定价。你想想看,整个系统不需要传统的订单簿,也不需要做市商,全靠数学公式驱动。这就是DeFi的魅力所在。

个人经验:我建议新手LP先从稳定币池子开始,比如USDC-DAI。这类池子的无常损失几乎为零,手续费收益稳定。等熟悉了再考虑波动性大的池子。

好了,这一章的内容就到这里。记住三个核心点:恒定乘积公式决定了价格和滑点,无常损失是LP必须面对的风险,流动性池的运作逻辑其实很简单。下一章我们会深入讨论如何计算最优交易路径,以及如何利用闪贷进行套利。

专注资料整理