2、AMM机制详解:恒定乘积公式(x*y=k)的数学原理、滑点与无常损失、流动性池的运作逻辑
大家好,我是你们的DeFi工程师。今天我们来聊聊AMM,也就是自动做市商。说实话,我刚入行时也觉得这东西挺玄乎的,不就是个公式吗?后来在项目中踩过几次坑,才真正理解了它的精妙之处。
AMM的核心,说白了就是一条曲线。这条曲线决定了你交易时能拿到多少代币。我们一步步拆解。
2.1 恒定乘积公式:x * y = k
这是Uniswap V2的核心公式。假设一个池子里有x个A代币,y个B代币。那么无论你怎么交易,x和y的乘积始终等于一个常数k。
举个例子:
- 池子里有100个ETH和200,000个USDC
- 那么k = 100 * 200,000 = 20,000,000
- 你想用ETH换USDC,你往池子里放Δx个ETH
- 池子里的ETH变成x + Δx
- 为了保持k不变,USDC的数量必须变成y' = k / (x + Δx)
- 你拿到的USDC就是Δy = y - y'
公式很简单,但背后有大学问。我习惯用这个公式来快速估算交易成本:
// 假设当前池子状态
x = 100 ETH
y = 200,000 USDC
k = 20,000,000
// 你想买入1个ETH,即Δx = 1
x' = 101
y' = 20,000,000 / 101 ≈ 198,019.8
Δy = 200,000 - 198,019.8 = 1,980.2 USDC
// 你花了1,980.2 USDC买了1个ETH
// 而当前市价是2,000 USDC/ETH
// 你多付了19.8 USDC,这就是滑点
核心要点:滑点的大小取决于你的交易量相对于池子深度的大小。交易量越大,滑点越高。
2.2 滑点:为什么大额交易不划算?
滑点,就是实际成交价和预期价格之间的差距。为什么会这样?因为AMM的定价曲线是凸的。
你想想看,池子里的流动性是有限的。你买得越多,价格就涨得越快。这就像你去买一个稀缺商品,买的人多了,价格自然就上去了。
我在项目中遇到过最典型的案例:一个用户想用100万USDC买一个冷门代币,结果滑点高达15%。他以为能按市价成交,结果多花了15万USDC。嗯,这就是不看滑点的代价。
滑点的计算公式:
滑点 = (实际成交价 - 预期价格) / 预期价格 * 100%
// 还是上面的例子
预期价格 = 2,000 USDC/ETH
实际成交价 = 1,980.2 USDC/ETH
滑点 = (1,980.2 - 2,000) / 2,000 * 100% = -0.99%
// 注意:这里是负滑点,因为你买ETH时支付了更多USDC
避坑指南:我曾经在交易时没设置滑点保护,结果一笔交易因为链上拥堵,滑点从1%飙到了8%。从那以后,我每次交易都会设置滑点容忍度,一般不超过2%。
2.3 无常损失:做市商的隐形杀手
无常损失,是流动性提供者(LP)最头疼的问题。简单说,就是你把代币放进池子后,价格变化了,你发现你的资产价值比单纯持有少了。
为什么会这样?因为AMM的定价机制迫使池子里的代币比例随着价格变化而调整。
举个例子:
- 你存入1个ETH和2,000个USDC(当时ETH=2,000 USDC)
- 你的总资产价值 = 1 * 2,000 + 2,000 = 4,000 USDC
- 如果ETH涨到4,000 USDC,单纯持有的话,你的资产价值 = 1 * 4,000 + 2,000 = 6,000 USDC
- 但在池子里,由于套利者的存在,池子里的ETH会减少,USDC会增加
- 最终你的资产价值可能只有5,657 USDC
- 无常损失 = (5,657 - 6,000) / 6,000 ≈ -5.7%
我刚开始做LP时,觉得无常损失就是个理论概念。直到有一次,我存了ETH-USDC池子,ETH涨了50%,我兴冲冲地去算收益,结果发现无常损失吃掉了大部分利润。嗯,从那以后我再也不敢忽视它了。
注意:无常损失不是真正的损失,而是相对于「单纯持有」的机会成本。如果你长期持有,并且池子的交易手续费足够高,无常损失是可以被覆盖的。
无常损失的计算公式:
无常损失 = 2 * sqrt(价格变化比例) / (1 + 价格变化比例) - 1
// 价格变化比例 = 新价格 / 旧价格
// 如果价格翻倍(变化比例=2)
无常损失 = 2 * sqrt(2) / (1 + 2) - 1
= 2 * 1.414 / 3 - 1
= 2.828 / 3 - 1
= 0.943 - 1
= -0.057
= -5.7%
| 价格变化比例 | 无常损失 |
|---|---|
| 1.25x(涨25%) | -0.6% |
| 1.5x(涨50%) | -2.0% |
| 2x(翻倍) | -5.7% |
| 3x(涨200%) | -13.4% |
| 4x(涨300%) | -20.0% |
2.4 流动性池的运作逻辑
流动性池,说白了就是一个智能合约管理的代币池子。任何人都可以往里面存代币,成为LP,然后赚取交易手续费。
运作流程是这样的:
- 创建池子:有人调用合约,存入两种代币的初始数量,设定初始价格
- 添加流动性:LP按照当前池子比例存入代币,获得LP代币作为凭证
- 交易:用户用A代币换B代币,池子自动计算价格和滑点
- 手续费分配:每笔交易收取0.3%的手续费,按LP代币比例分给所有LP
- 移除流动性:LP销毁LP代币,按比例取回池子中的代币
我个人习惯用这个思维模型来理解:流动性池就像一个自动化的外汇兑换机。你放进去两种货币,机器自动维持汇率。每次有人兑换,机器就调整汇率,同时给你一点手续费作为回报。
关键点:LP代币代表了你在池子中的份额。你存入的越多,赚的手续费就越多。但要注意,你的份额是动态变化的,因为池子里的代币比例会随着交易而改变。
下面我用一张SVG图来展示整个AMM的核心逻辑:
这张图展示了AMM的核心流程。交易者和LP通过流动性池交互,池子用恒定乘积公式自动定价。你想想看,整个系统不需要传统的订单簿,也不需要做市商,全靠数学公式驱动。这就是DeFi的魅力所在。
个人经验:我建议新手LP先从稳定币池子开始,比如USDC-DAI。这类池子的无常损失几乎为零,手续费收益稳定。等熟悉了再考虑波动性大的池子。
好了,这一章的内容就到这里。记住三个核心点:恒定乘积公式决定了价格和滑点,无常损失是LP必须面对的风险,流动性池的运作逻辑其实很简单。下一章我们会深入讨论如何计算最优交易路径,以及如何利用闪贷进行套利。