第三章:DEX机制深度解析:AMM自动做市商原理、恒定乘积公式、滑点与无常损失、流动性池分析

聊到DeFi,绕不开的就是DEX。我个人觉得,DEX是DeFi世界里最性感的发明之一。它把传统金融里那个西装革履的做市商,变成了一段跑在链上的代码。今天我们就来拆开看看,这个自动做市商到底是怎么玩的。

一、AMM自动做市商:从订单簿到流动性池

传统交易所用的是订单簿模式。你想买,得有人卖。价格由买卖双方博弈决定。但DEX不一样,它用的是AMM——自动做市商。

说白了,AMM就是让用户跟一个「池子」做交易。这个池子里锁着两种资产,比如ETH和USDC。你往池子里扔ETH,池子就按某个规则给你USDC。价格不是由人喊出来的,而是由池子里两种资产的比例算出来的。

我记得第一次接触这个概念时,脑子里冒出一个问题:那池子里的价格怎么保证跟外面一致?嗯,这里有个关键机制——套利者。如果池子里的ETH比外面便宜,套利者就会买走ETH,直到价格拉平。所以AMM的价格锚定,其实是靠套利者来维护的。

核心要点:AMM用流动性池替代了订单簿,用数学公式替代了买卖双方的博弈。这是DeFi最底层的创新之一。

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

AMM最经典的公式就是恒定乘积公式:x * y = k

x是池子里代币A的数量,y是代币B的数量,k是一个常数。每次交易后,x和y会变化,但它们的乘积k保持不变。

举个例子。假设一个ETH/USDC池子里有10个ETH和20000个USDC。那么k = 10 * 20000 = 200000。

你想用1个ETH换USDC。交易后,池子里ETH变成11个。要保持k不变,USDC的数量y应该满足:11 * y = 200000,所以y ≈ 18181.82。也就是说,你能换到20000 - 18181.82 = 1818.18个USDC。

你看,你投入1个ETH,换到了1818.18 USDC。但如果你再投1个ETH呢?池子里ETH变成12个,y = 200000 / 12 ≈ 16666.67,这次只能换到18181.82 - 16666.67 = 1515.15 USDC。

同样的1个ETH,第二次换到的USDC变少了。为什么会这样?因为池子里的ETH变多了,ETH相对USDC就「不值钱」了。这就是AMM的价格发现机制——交易量越大,价格滑得越厉害。

// 恒定乘积公式的简单实现
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure returns (uint amountOut) {
    require(amountIn > 0, 'INSUFFICIENT_INPUT_AMOUNT');
    uint amountInWithFee = amountIn * 997; // 0.3%手续费
    uint numerator = amountInWithFee * reserveOut;
    uint denominator = reserveIn * 1000 + amountInWithFee;
    amountOut = numerator / denominator;
}

个人经验:我在做量化策略时,经常用这个公式来模拟交易对价格的影响。但要注意,实际链上交易还有gas费和区块确认时间,这些都会影响你的实际成交价。

三、滑点:你看到的价,不是你买到的价

滑点,就是预期成交价和实际成交价之间的差值。在AMM里,滑点几乎是不可避免的。

滑点的大小取决于两个因素:

  • 交易量大小:你交易得越多,滑点越大。上面那个例子,第一次交易滑点很小,第二次就明显了。
  • 池子深度:池子里的流动性越多,同样一笔交易造成的滑点就越小。这就是为什么大池子(比如Uniswap的ETH/USDC池)交易体验更好。

我建议你在做交易时,一定要设置滑点容忍度。比如你预期1 ETH换2000 USDC,但实际可能只换到1980。如果你不设滑点保护,可能会被MEV机器人抢跑,成交价惨不忍睹。

避坑指南:我曾经在某个新币的池子里做交易,没设滑点保护,结果一笔交易被三明治攻击,损失了15%。从那以后,我每次交易都会把滑点容忍度设在0.5%以内,并且用限价单工具。

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

无常损失,是流动性提供者(LP)最头疼的问题。你往池子里存了两种代币,结果价格波动后,你发现手里的代币价值还不如直接拿着不动。

为什么会这样?因为AMM的机制决定了,当价格变化时,池子会自动调整两种代币的比例。比如ETH涨了,套利者会买走池子里的ETH,导致你手里的ETH变少、USDC变多。最终你持有的资产组合,跟「持有不动」相比,出现了价值损失。

无常损失的大小跟价格波动幅度直接相关:

价格变化幅度 无常损失比例
±25% 约0.6%
±50% 约2.0%
±75% 约4.3%
±100% 约5.7%
±200% 约13.4%

你看,价格翻倍或腰斩,无常损失也就5.7%。但如果你存的是稳定币对(比如USDC/USDT),价格波动极小,无常损失几乎可以忽略。

关键认知:无常损失不是真正的「损失」,而是「机会成本」。只要你不撤出流动性,价格涨回来,损失就消失了。但如果你在价格波动后撤出,那就真的亏了。

五、流动性池分析:怎么选池子?

做LP不是随便找个池子往里扔钱就行的。我一般会从这几个维度来评估一个流动性池:

  1. 交易量:池子的日交易量越大,你赚的手续费就越多。但也要注意,高交易量往往意味着高波动。
  2. 池子深度:总锁仓价值(TVL)越高,滑点越小,用户体验越好。但TVL太高,你的份额占比就小了。
  3. 手续费率:Uniswap V3支持不同费率(0.05%、0.3%、1%),你可以根据自己的风险偏好选。稳定币对选低费率,波动大的币对选高费率。
  4. 价格波动:波动越大,无常损失风险越高。但波动大也意味着套利机会多,手续费收入可能更高。

我个人习惯用「年化收益率」来综合评估。但要注意,年化收益率是动态变化的,不能只看过去的数据。我建议你用一些分析工具(比如APY.vision)来查看池子的历史表现。

一个小技巧:如果你看好某个币的长期上涨,但又不想承担无常损失,可以考虑做「单边流动性」。比如你只存ETH,不存USDC,这样ETH涨了你不会亏。但这种方式收益会低一些,因为你的资金利用率不高。

六、AMM知识体系总览

下面这张图是我自己整理的AMM知识体系,你可以把它当作一个快速索引。每次做策略时,我都会先过一遍这个框架,确保没有遗漏关键点。

AMM自动做市商 恒定乘积公式 x*y=k 滑点分析 无常损失 流动性池分析 价格发现机制 交易量影响 交易量 vs 池子深度 MEV与三明治攻击 价格波动影响 机会成本分析 TVL / 交易量 / 费率 年化收益率评估 核心:理解机制 → 控制风险 → 优化收益

这张图把AMM的核心知识点串起来了。你从中心开始,沿着分支往下走,就能把整个知识体系过一遍。我每次做新策略前,都会对着这张图检查自己有没有遗漏什么。


好了,AMM的底层逻辑就聊到这儿。记住一句话:AMM不是魔法,是数学。理解了恒定乘积公式,你就掌握了DEX的命门。下次做交易或提供流动性时,多想想池子里的x和y是怎么变的,滑点有多大,无常损失能不能承受。这些思考,就是你从普通用户进阶为DeFi玩家的第一步。