第二章:AMM自动做市商原理
做市商这个词,在传统金融里听起来挺高大上的。说白了就是有人挂买单、有人挂卖单,中间商赚差价。但DeFi里的AMM(自动做市商)完全换了个玩法——没有订单簿,全靠数学公式。
我第一次接触AMM时,心里直犯嘀咕:这玩意儿靠谱吗?后来亲自部署了几个池子,踩过坑也赚过钱,才真正理解它的精妙之处。今天咱们就把AMM的底裤扒干净。
2.1 恒定乘积公式:x * y = k
这是AMM最核心的公式,没有之一。你想想看,一个交易对,比如ETH/USDC,池子里有x个ETH和y个USDC。它们的乘积永远等于一个常数k。
核心公式:x * y = k
其中x是代币A的数量,y是代币B的数量,k是恒定常数
举个例子。假设一个ETH/USDC池子里有10个ETH和20000个USDC。那么k = 10 * 20000 = 200000。
这时候你想买1个ETH。你要往池子里放多少USDC?
买完之后,池子里还剩9个ETH。根据公式:9 * y = 200000,算出y ≈ 22222.22 USDC。
也就是说,你需要支付22222.22 - 20000 = 2222.22 USDC。
嗯,这里要注意:你买1个ETH花了2222.22 USDC,但池子里原来的价格是2000 USDC/ETH。为什么贵了?这就是滑点。
// 恒定乘积公式的简单实现
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) {
uint amountInWithFee = amountIn * 997; // 0.3%手续费
uint numerator = amountInWithFee * reserveOut;
uint denominator = reserveIn * 1000 + amountInWithFee;
return numerator / denominator;
}
我的经验:在实际项目中,我见过不少新手直接拿x*y=k算价格,忽略了手续费。Uniswap的0.3%手续费其实已经算进公式里了,别自己再扣一遍。
2.2 滑点:为什么交易越大会越亏?
滑点,说白了就是你交易时的价格和预期价格之间的差距。在AMM里,滑点是不可避免的。
为什么会这样?因为AMM的流动性是「集中」的。你想想看,池子里的深度是有限的。你买得越多,价格就被推得越高。
| 交易数量 | 预期价格 | 实际均价 | 滑点 |
|---|---|---|---|
| 0.1 ETH | 2000 USDC | 2002 USDC | 0.1% |
| 1 ETH | 2000 USDC | 2222 USDC | 11.1% |
| 5 ETH | 2000 USDC | 4000 USDC | 100% |
你看这个表就明白了。买0.1个ETH几乎没滑点,买5个ETH直接翻倍。这就是为什么大额交易要拆单,或者找深度更好的池子。
避坑指南:我曾经在某个新项目上做市,池子深度只有几万美金。有个大户一次性买了池子20%的代币,滑点直接飙到40%。那笔交易我亏惨了。所以做市商一定要关注池子的深度和滑点容忍度。
2.3 无常损失:做市商最大的敌人
无常损失,英文叫Impermanent Loss。这名字起得好——「无常」,因为它是暂时的,但如果你在错误的时间退出,就变成永久损失了。
简单来说,你往池子里存了ETH和USDC。如果ETH价格涨了,你手里的ETH数量会变少,USDC数量会变多。最终你拿回的总价值,可能比单纯持有ETH要少。
我画个图你就明白了:
你看这条曲线,价格变化越大,损失越严重。价格翻倍时损失约5.7%,价格跌一半时损失也差不多。这就是为什么做市商最怕价格剧烈波动。
关键数据:
- 价格变化 ±25% → 无常损失约 0.5%
- 价格变化 ±50% → 无常损失约 2%
- 价格变化 ±100% → 无常损失约 5.7%
- 价格变化 ±200% → 无常损失约 13.4%
2.4 流动性池的运作机制
流动性池,说白了就是一个智能合约管理的资金池。LP(流动性提供者)把两种代币按比例存进去,交易者在这个池子里买卖,LP赚取手续费。
我习惯把流动性池比作一个自动售货机。你投进去USDC,它吐出ETH。价格由池子里的库存决定,库存越少价格越贵。
池子的运作有几个关键点:
- 添加流动性:LP需要按当前比例存入两种代币。比如ETH/USDC池子价格是2000,你存1个ETH就要同时存2000个USDC。
- 赚取手续费:每笔交易收取0.3%手续费,按LP的份额比例分配。这部分收益可以弥补无常损失。
- 移除流动性:LP可以随时撤回资金,拿回两种代币。但数量会根据池子状态变化。
- 价格发现:池子的价格会跟随外部市场变化。如果池子价格和外部有差异,套利者会来搬平。
我的建议:做市商不是无脑存钱。我一般会看三个指标:交易量、手续费率、池子深度。交易量大但池子浅的,滑点高但手续费收入也高。需要自己权衡。
2.5 实战中的注意事项
说了这么多理论,来点实际的。我在做市商实战中总结了几条铁律:
- 永远不要在高波动期做市:比如重大新闻发布前后,价格剧烈波动,无常损失会吃掉你几个月的手续费。
- 选择稳定币对:USDC/DAI这种稳定币对,价格几乎不变,无常损失可以忽略。但手续费也低,适合大资金。
- 关注池子的年化收益率:有些池子APY高得离谱,那说明风险也大。我见过APY 1000%的池子,一周后归零。
- 用工具监控:我习惯用Zapper或DeBank看池子状态,设置价格预警。价格偏离超过5%就考虑撤资。
曾经踩过的坑:有一次我在一个ETH/UNI池子里做市,UNI价格一天跌了60%。我心想跌了这么多应该到底了,就没撤。结果第二天又跌了40%。无常损失加上本金损失,亏了70%。从那以后我给自己定了个规矩:单日价格波动超过20%,无条件撤资。
好了,AMM的原理就讲到这里。记住三个关键词:恒定乘积、滑点、无常损失。这三兄弟决定了你做市商的盈亏。下一章咱们聊聊实战中的策略选择。