第一章:AMM 起源与核心思想
从订单簿到自动做市商
说实话,我第一次接触去中心化交易所时,第一反应是:这不就是把币安搬上链吗?
后来我发现,我错了。而且错得离谱。
传统交易所用的是订单簿模型。你想买,我正好想卖,咱们撮合一下,成交。这个模式在中心化交易所跑了十几年,很成熟。但把它搬到区块链上,问题就来了——
你想想看,以太坊每笔交易都要等矿工打包,区块间隔十几秒。如果我用订单簿,挂单、撤单、吃单,每一步都要等确认。这体验,说实话,比蜗牛还慢。
更致命的是,链上流动性极度分散。一个交易对可能只有几百 ETH 的深度,大单一来,滑点直接让你怀疑人生。
所以,AMM 的出现,本质上是在解决一个问题:如何在去中心化环境下,让用户随时能交易,而且价格还算合理?
核心洞察:AMM 放弃了「买卖双方直接撮合」的思路,转而用算法和资金池来提供流动性。你不需要等对手盘,你只需要跟合约做交易。
为什么需要 AMM?
我个人习惯把这个问题拆成三个层面来看:
- 用户体验层面:订单簿需要挂单、等待、撤单,操作复杂。AMM 只需要你选币、输入数量、确认,三步搞定。
- 技术实现层面:链上订单簿的 gas 成本高得吓人。每次挂单都要写状态,每次撤单也要写状态。AMM 把流动性集中到一个池子里,交易只需要跟池子交互,gas 省了一大截。
- 流动性层面:订单簿需要做市商持续报价,这在链上几乎不可能。AMM 让任何人都能成为流动性提供者,你存点 ETH 和 USDC 进去,就能赚手续费。
我在项目中遇到过一件事,印象很深。有个团队想做一个链上期权交易所,用的就是订单簿模型。结果上线第一天,gas 费就把用户吓跑了。后来他们改成 AMM 风格的资金池模式,用户量翻了十倍。
嗯,这里要注意:AMM 不是万能的。它有自己的问题,比如无常损失、资金利用率低。但至少在「让去中心化交易跑起来」这件事上,AMM 是当前最靠谱的方案。
AMM 的核心思想:用数学代替撮合
说白了,AMM 就是一条数学曲线。
你往池子里放两种代币,比如 ETH 和 USDC。合约规定一个公式,比如 x * y = k。x 是 ETH 数量,y 是 USDC 数量,k 是常数。
当你想用 USDC 买 ETH 时,你往池子里加 USDC,池子里的 USDC 变多,ETH 变少。公式自动算出新的价格。
这个过程不需要任何人批准,不需要等待对手盘。合约就是你的交易对手。
一个小技巧:我刚开始学 AMM 时,总把 x * y = k 当成一个静态公式。后来才意识到,k 其实会变——流动性提供者加池子时 k 变大,撤池子时 k 变小。交易本身不改变 k,只改变 x 和 y 的比例。
为什么这个公式能工作?因为它在数学上保证了:
- 池子里永远有流动性(只要 k > 0)
- 价格随买卖行为自动调整(买的人多,价格涨;卖的人多,价格跌)
- 套利者会拉平链上价格和外部市场价格
我曾经踩过一个坑:以为 AMM 的价格就是「公允价格」。后来发现,如果外部市场价格剧烈波动,而套利者来不及操作,AMM 的价格会严重偏离。嗯,这就是为什么很多 DeFi 协议要加价格预言机。
一张图看懂 AMM 的核心逻辑
下面这张 SVG 图,是我自己画的。它展示了 AMM 最核心的运作流程:
避坑指南:我曾经在测试网上部署 AMM 时,忘记设置滑点保护。结果一个测试用户用 1 ETH 买走了池子里 80% 的 USDC。嗯,从那以后,我写的每个 AMM 合约都会加滑点检查和最小输出量验证。
AMM 的三种主流模型
不是所有 AMM 都用 x * y = k。我整理了一下,目前主流的有三种:
| 模型 | 公式 | 代表项目 | 特点 |
|---|---|---|---|
| 恒定乘积 | x * y = k | Uniswap V2 | 简单通用,适合长尾资产 |
| 恒定和 | x + y = k | 早期稳定币池 | 价格不变,但容易耗尽流动性 |
| 混合模型 | 自定义曲线 | Curve, Uniswap V3 | 资金利用率高,适合稳定币或主流资产 |
我个人最常用的是恒定乘积模型。为什么?因为它简单。你写合约时,核心逻辑就一行代码:require(x * y == k)。但简单不代表弱,它在数学上保证了池子永远不会枯竭。
不过,如果你做稳定币交易对,比如 USDC/USDT,恒定乘积就不太合适了。价格波动极小,但滑点却很大。这时候 Curve 的混合模型更香。
一个小经验:选模型时,先想清楚你的目标用户是谁。如果是散户交易山寨币,用恒定乘积。如果是机构做稳定币兑换,用 Curve 那种。别想着一个模型打天下,我在项目里见过太多这种翻车案例了。
AMM 的代价:无常损失
说到 AMM,不能不提无常损失。这是流动性提供者最大的痛。
简单说:你往池子里存了 1 ETH 和 2000 USDC。ETH 价格涨到 3000 USDC。套利者会来买走你的 ETH,直到池子里的价格跟外部一致。最后你发现,你手里的 ETH 变少了,USDC 变多了。总价值算下来,比直接拿着 ETH 和 USDC 少了 5% 到 10%。
这个损失,就叫无常损失。说它「无常」,是因为只要你不撤池子,价格再跌回来,损失就消失了。但现实中,价格很少会完美回归。
我曾经在 Uniswap V2 上做过一个实验:存了 10 ETH 和 20000 USDC,放了一个月。ETH 涨了 30%,我赚了 500 USDC 的手续费,但无常损失吃掉了 800 USDC。算下来还亏了 300。
嗯,所以我现在做流动性提供时,会优先选波动小的交易对,或者用 V3 的集中流动性来规避这个问题。
总结一下
AMM 的核心思想,就是用一条数学曲线,替代了传统交易所的订单簿撮合机制。它让去中心化交易变得可能,但也带来了无常损失、资金利用率低等新问题。
我个人觉得,AMM 最大的贡献不是技术本身,而是它让「任何人都能做市」这件事变成了现实。你不需要几百万美元,不需要高频交易策略,只需要往池子里存点币,就能赚手续费。
当然,前提是你理解无常损失,知道怎么选池子,会看 k 值变化。这些内容,我们后面会慢慢展开。
一句话记住本章:AMM 用数学公式代替了订单簿,让去中心化交易从「不可能」变成了「可能但需谨慎」。
公众号:蓝海资料掘金营,微信deep3321