1. AMM概述:从订单簿到AMM的演变
大家好,我是你们的老朋友。今天咱们聊聊AMM——自动做市商。说实话,这个机制改变了整个DeFi的格局。我2019年刚接触Uniswap时,第一反应是:这玩意儿能行?没有订单簿,没有做市商,光靠一个公式就能做交易?后来我亲自部署了几个池子,才真正体会到它的精妙之处。
1.1 传统订单簿模式
先说说传统交易所怎么玩的。你打开币安或者Coinbase,看到的是密密麻麻的买卖挂单。买方出价,卖方要价,系统帮你撮合。这叫订单簿模式。
举个例子:
- 张三想用100 USDT买ETH,挂单价格2000 USDT
- 李四想卖ETH,挂单价格2010 USDT
- 系统撮合,成交价在2000-2010之间
听起来很合理对吧?但问题来了——谁来提供流动性?
传统交易所里,有专业的做市商。他们用算法和资金,在订单簿两边挂单。赚的是买卖价差。但做市商门槛很高,需要大量资金和复杂策略。普通用户根本玩不了。
核心痛点:订单簿需要持续维护,做市商需要24小时在线。链上环境里,gas费高、速度慢,订单簿模式基本跑不动。
1.2 AMM的诞生
2017年,Vitalik提出了AMM的雏形。但真正让它火起来的,是Uniswap在2018年的上线。
AMM的核心思想很简单:用数学公式代替订单簿。不需要买卖双方挂单,不需要做市商。流动性提供者把资产存入一个池子,交易者直接跟池子交易。
我刚开始做DeFi开发时,总觉得这有点反直觉。你想想看,没有对手盘,价格怎么定?
答案就在公式里。以Uniswap V2为例:
x * y = k
其中x是代币A的数量,y是代币B的数量,k是常数。这个公式保证了池子里的总流动性不变。你买入代币A,池子里A变少,B变多,价格自然上涨。
个人经验:我曾在测试网上部署过Uniswap V2的克隆版。第一次看到交易自动成交时,说实话挺震撼的。没有订单簿,没有撮合引擎,就靠一个公式。这就是链上金融的魅力。
1.3 AMM的核心思想
AMM的核心可以概括为三点:
- 流动性池:用户存入资产,形成共享流动性
- 定价公式:用数学公式自动计算价格
- 无常损失:流动性提供者承担的价格风险
咱们展开说说。
流动性池
流动性池就像一个公共资金池。任何人都可以存入资产,成为流动性提供者(LP)。交易者支付手续费,这些手续费分给LP。
我记得有个项目方问我:为什么用户愿意提供流动性?我说:因为有利可图。Uniswap上,LP可以赚取0.3%的交易手续费。年化收益率有时候能达到20%-50%。当然,也有风险——无常损失。
定价公式
AMM的定价公式有很多种:
| 协议 | 公式 | 特点 |
|---|---|---|
| Uniswap V2 | x * y = k | 恒定乘积,简单通用 |
| Uniswap V3 | 集中流动性 | 资本效率高,但复杂 |
| Curve | 混合公式 | 稳定币交易,滑点低 |
| Balancer | 加权池 | 多资产,自定义权重 |
每种公式都有适用场景。我个人习惯用Uniswap V2做原型开发,因为它最简单。但生产环境里,V3的资本效率更高。
无常损失
这是AMM里最容易被忽视的风险。说白了,就是价格波动导致LP的资产价值低于持有不动的情况。
避坑指南:我曾经在2021年牛市里,把ETH和USDT存入Uniswap池子。结果ETH涨了3倍,我取出时发现,如果当时没存池子,收益会高得多。这就是无常损失。记住:波动越大的资产对,无常损失越严重。
1.4 为什么AMM适合链上环境
这个问题我思考了很久。链上环境有三大限制:
- 高延迟:以太坊出块时间12秒,订单簿根本跑不动
- 高gas费:频繁挂单撤单,gas费会吃掉利润
- 缺乏隐私:所有订单公开,容易被抢跑
AMM完美避开了这些问题:
- 无需持续维护:池子部署后自动运行,不需要做市商24小时盯盘
- 低gas消耗:一次交易只需要一次链上交互,比订单簿的多次挂单省gas
- 抗审查:任何人都可以交易,不需要KYC,不需要白名单
- 可组合性:AMM池子可以被其他合约调用,这是DeFi乐高的基础
你想想看,如果DeFi用订单簿,那每个DEX都需要自己的做市商团队。小项目根本玩不起。但AMM让任何人都能提供流动性,这就是去中心化的精髓。
核心观点:AMM不是订单簿的替代品,而是链上环境的原生解决方案。它牺牲了价格发现效率,换来了去中心化和可组合性。这个取舍,在区块链世界里是值得的。
1.5 知识体系总览
下面这张图展示了AMM的核心知识结构。我画这张图时,特意把「无常损失」放在显眼位置——因为这是新手最容易踩的坑。
这张图把AMM的三大模块串起来了。从左到右:演变历史、核心机制、链上优势。我建议你把这个框架记在脑子里,后面讲具体实现时,你会更容易理解。
学习建议:如果你刚开始学AMM,先别急着看代码。把这张图里的概念搞懂,尤其是「无常损失」和「定价公式」。我见过太多人一上来就写合约,结果连基本概念都没搞清,debug时一脸懵。