AMM机制基础:恒定乘积做市商(CPMM)原理

聊到DeFi,绕不开的就是AMM。我最早接触这个玩意儿是在2019年,当时看到Uniswap的代码,第一反应是——就这么简单?一个公式撑起了一个百亿级别的市场。嗯,今天我们就来拆解这个核心机制。

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

说白了,CPMM的核心就一个公式:x * y = k。其中x是代币A的储备量,y是代币B的储备量,k是一个常数。交易的本质就是改变x和y的比例,但保持乘积不变。

核心逻辑:你往池子里塞一种代币,就能取出另一种。塞得越多,取出的单价就越贵。这就是滑点的来源。

举个例子。假设一个ETH/USDC池子,里面有10个ETH和20000个USDC。那么k = 10 * 20000 = 200000。你想用1个ETH换USDC,会发生什么?

// 交易前
x = 10 ETH, y = 20000 USDC, k = 200000

// 你存入1个ETH,池子变成11个ETH
// 新的y = k / x = 200000 / 11 ≈ 18181.82 USDC
// 你拿到的USDC = 20000 - 18181.82 = 1818.18 USDC

// 实际成交价 = 1818.18 USDC/ETH
// 而原始价格是2000 USDC/ETH
// 滑点 = (2000 - 1818.18) / 2000 ≈ 9.1%

看到了吗?1个ETH的交易就产生了9%的滑点。我在项目中遇到过不少新手,上来就问为什么交易滑点这么大——其实就是池子深度不够。你想想看,一个只有10个ETH的池子,能指望它有多好的流动性?

流动性池的运作方式

流动性池说白了就是一个智能合约管理的资金池。LP(流动性提供者)把两种代币按比例存入,换取LP Token。交易者用这个池子做交易,支付手续费。手续费再分给LP。

我个人习惯把流动性池的运作拆成三个核心动作:

  1. 添加流动性:按当前比例存入两种代币,获得LP Token
  2. 交易:存入一种代币,取出另一种,支付手续费
  3. 移除流动性:销毁LP Token,按比例取回两种代币

我的经验:添加流动性时,一定要按当前池子的比例来。如果你非要单边添加,系统会自动把一半的代币卖掉换成另一种。我曾经见过有人直接往池子里转ETH,结果系统自动卖掉一半,白白损失了手续费。

这里有个关键点——LP Token的定价。当你添加流动性时,系统会根据你存入的金额占总池子的比例,给你铸造相应数量的LP Token。移除时,你销毁LP Token,拿回对应比例的资产。

// 假设池子总价值100万USDC
// 你存入10万USDC等值的ETH+USDC
// 你获得10%的LP Token
// 池子增长到200万USDC后,你的LP Token价值20万USDC

无常损失:LP的隐形杀手

嗯,这里要重点讲一下无常损失。很多新手觉得做LP就是躺着赚钱,其实不然。无常损失是LP面临的最大风险之一。

什么是无常损失?简单说,就是你做LP赚的手续费,可能还比不上你直接持有两种代币的收益。为什么会这样?因为CPMM机制强制你保持两种代币的固定比例,当价格剧烈波动时,你的资产组合会偏离最优配置。

避坑指南:我曾经在2021年5月,把ETH和USDC放进一个池子。当时ETH从2000涨到4000,我满心欢喜以为赚翻了。结果一算账——如果我一直持有ETH,收益是100%;但做LP只赚了60%左右。那40%的差额,就是无常损失。

无常损失的计算公式其实不复杂:

// 假设价格变化倍数为r
// 无常损失 = (2√r / (1 + r)) - 1

// 举例:ETH价格翻倍(r=2)
// 无常损失 = (2√2 / 3) - 1 ≈ 0.057 = 5.7%

// ETH价格涨10倍(r=10)
// 无常损失 = (2√10 / 11) - 1 ≈ 0.424 = 42.4%

你看,价格波动越大,无常损失越严重。但注意,这只是相对于持有不动而言的。如果你做LP赚的手续费超过了无常损失,那还是赚的。

价格变化倍数 无常损失比例 备注
1.25x 0.6% 小波动,基本忽略
2x 5.7% 需要手续费覆盖
5x 25.5% 风险显著增加
10x 42.4% 严重亏损

我的建议:如果你看好某个币的长期上涨,直接持有就好,别做LP。做LP更适合那些价格相对稳定的交易对,比如稳定币对稳定币,或者波动率较低的资产组合。

CPMM的数学本质

其实CPMM的数学本质很简单——它是一条双曲线。价格是这条曲线的切线斜率。交易量越大,价格偏离越远,滑点越高。

我个人习惯用这个视角来理解:CPMM本质上是一个自动化的价格发现机制。它不需要订单簿,不需要做市商,全靠数学公式驱动。但代价就是——深度永远集中在当前价格附近,远离当前价格的地方流动性极差。

// 价格公式
// 代币A的价格 = y / x
// 代币B的价格 = x / y

// 滑点公式
// 滑点 = (实际成交价 - 当前价) / 当前价
// 滑点 ≈ (交易量 / 池子深度) * 100%

你想想看,如果池子深度是100万,你交易1万,滑点大概1%。但如果池子深度只有10万,你交易1万,滑点就变成10%了。这就是为什么大池子更受欢迎——滑点小,交易体验好。

CPMM的局限性

没有完美的机制。CPMM有几个明显的短板:

  • 资金效率低:大部分资金闲置在远离当前价格的位置
  • 滑点不可控:大额交易必然产生高滑点
  • 无常损失:价格波动时LP承担隐性损失
  • MEV风险:三明治攻击、抢跑等问题频发

我在做协议设计时,经常需要权衡这些因素。比如,要不要引入动态费率?要不要做集中流动性?这些都是后续章节会深入讨论的内容。

一句话总结:CPMM是DeFi的基石,简单、透明、无需许可。但它不是银弹。理解它的原理和局限,才能设计出更好的流动性激励模型。

CPMM核心知识体系 恒定乘积做市商 x * y = k 交易机制 存入A → 取出B 滑点 = f(交易量/深度) 流动性池 LP存入双币 获得LP Token 无常损失 价格波动越大 损失越严重 价格发现 自动做市 滑点计算 深度相关 添加/移除 按比例操作 手续费分配 按份额分红 计算公式 2√r/(1+r)-1 风险对冲 手续费覆盖

这张图把CPMM的核心知识体系串起来了。中心是恒定乘积公式,三个分支分别对应交易机制、流动性池和无常损失。每个分支下面还有具体的子知识点。我个人习惯用这种结构图来梳理思路,一目了然。

好了,CPMM的基础就讲到这里。记住,理解这些原理是设计流动性激励模型的前提。下一节我们会深入讨论如何通过激励手段来优化这些机制。

专注资料整理