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。
我个人习惯把流动性池的运作拆成三个核心动作:
- 添加流动性:按当前比例存入两种代币,获得LP Token
- 交易:存入一种代币,取出另一种,支付手续费
- 移除流动性:销毁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的核心知识体系串起来了。中心是恒定乘积公式,三个分支分别对应交易机制、流动性池和无常损失。每个分支下面还有具体的子知识点。我个人习惯用这种结构图来梳理思路,一目了然。
好了,CPMM的基础就讲到这里。记住,理解这些原理是设计流动性激励模型的前提。下一节我们会深入讨论如何通过激励手段来优化这些机制。