第二章: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要少。

我画个图你就明白了:

无常损失示意图 ETH价格变化倍数 损失比例 -20% -10% 0% 0.5x 1x 2x 价格不变时无损失 价格翻倍时损失约5.7% 价格变化越大,无常损失越严重

你看这条曲线,价格变化越大,损失越严重。价格翻倍时损失约5.7%,价格跌一半时损失也差不多。这就是为什么做市商最怕价格剧烈波动。

关键数据:

  • 价格变化 ±25% → 无常损失约 0.5%
  • 价格变化 ±50% → 无常损失约 2%
  • 价格变化 ±100% → 无常损失约 5.7%
  • 价格变化 ±200% → 无常损失约 13.4%

2.4 流动性池的运作机制

流动性池,说白了就是一个智能合约管理的资金池。LP(流动性提供者)把两种代币按比例存进去,交易者在这个池子里买卖,LP赚取手续费。

我习惯把流动性池比作一个自动售货机。你投进去USDC,它吐出ETH。价格由池子里的库存决定,库存越少价格越贵。

池子的运作有几个关键点:

  1. 添加流动性:LP需要按当前比例存入两种代币。比如ETH/USDC池子价格是2000,你存1个ETH就要同时存2000个USDC。
  2. 赚取手续费:每笔交易收取0.3%手续费,按LP的份额比例分配。这部分收益可以弥补无常损失。
  3. 移除流动性:LP可以随时撤回资金,拿回两种代币。但数量会根据池子状态变化。
  4. 价格发现:池子的价格会跟随外部市场变化。如果池子价格和外部有差异,套利者会来搬平。

我的建议:做市商不是无脑存钱。我一般会看三个指标:交易量、手续费率、池子深度。交易量大但池子浅的,滑点高但手续费收入也高。需要自己权衡。

2.5 实战中的注意事项

说了这么多理论,来点实际的。我在做市商实战中总结了几条铁律:

  • 永远不要在高波动期做市:比如重大新闻发布前后,价格剧烈波动,无常损失会吃掉你几个月的手续费。
  • 选择稳定币对:USDC/DAI这种稳定币对,价格几乎不变,无常损失可以忽略。但手续费也低,适合大资金。
  • 关注池子的年化收益率:有些池子APY高得离谱,那说明风险也大。我见过APY 1000%的池子,一周后归零。
  • 用工具监控:我习惯用Zapper或DeBank看池子状态,设置价格预警。价格偏离超过5%就考虑撤资。

曾经踩过的坑:有一次我在一个ETH/UNI池子里做市,UNI价格一天跌了60%。我心想跌了这么多应该到底了,就没撤。结果第二天又跌了40%。无常损失加上本金损失,亏了70%。从那以后我给自己定了个规矩:单日价格波动超过20%,无条件撤资。

好了,AMM的原理就讲到这里。记住三个关键词:恒定乘积、滑点、无常损失。这三兄弟决定了你做市商的盈亏。下一章咱们聊聊实战中的策略选择。

专注资料整理