第 14 章 · DEX 为什么可以没有中心交易所
没有做市商坐在中间,价格由谁决定?
- 练习的能力
- Financial LiteracyOnchain Literacy
- 动手
- 在一个 DEX 上查同一个池子的深度,分别模拟买入 100 美元和 10 万美元,记录两次滑点。
- AI Lab
- 让 AI 用恒定乘积公式算一次报价,自己用池子的真实储备量手算一遍,比对结果。
一个现实问题
凌晨三点,你想买一个刚上线几小时的代币。
在传统交易所,这件事能成交,是因为有人在另一边挂着卖单。挂单的通常不是散户,而是一批专门做这件事的公司:他们同时挂出买价和卖价,赚中间的差价,用速度和库存管理控制风险。他们不关心涨跌,只关心成交量。
这批人有几个硬性需求:报价要快、撤单要更快。行情变了,他们必须在几毫秒内把旧价格撤掉,否则就会被人按过时的价格打穿。一家做市商一天撤单上百万次,是很正常的事。
现在把这套东西搬到链上。链几秒才出一个区块,每一次挂单和撤单都是一笔交易,都要付 Gas,都要排队,还要被所有人提前看见。
在这样的环境里,传统意义上的做市商根本活不下去。
可是链上的代币确实能交易,而且是 7×24 小时随时成交。没有人在报价,价格是谁定的?
思想实验
设想一个无人看守的摊位。
摊位上有两个箱子。左边箱子里放着 100 个苹果,右边箱子里放着 1000 块钱。摊位前面贴了一张纸,上面只写了一条规则:
你可以从任何一个箱子里拿东西,但拿完之后,两个箱子里的数量相乘,必须还等于原来那个数。
原来那个数是 100 × 1000 = 100000。
现在你想买 10 个苹果。拿走之后左边剩 90 个,为了让乘积还等于 100000,右边必须变成 100000 ÷ 90 ≈ 1111.11 块。也就是说,你得往右边箱子里放 111.11 块钱。
有意思的地方在这里:摊位上明明写着「100 个苹果对 1000 块钱」,看起来一个苹果 10 块,但你买 10 个实际付了 111.11,均价 11.11。
再试一次,这次买 50 个。左边剩 50,右边必须变成 2000,你要付 1000 块,均价 20 块——是「标价」的两倍。
买得越多,单价越贵。而且不管你买多少,箱子永远不会空:想拿走全部 100 个苹果,需要往右边放入无穷多的钱。
这个摊位有三个性质:它永远有报价,不需要任何人值守;它的价格完全由两个箱子里的存货比例决定,与外界无关;它的报价会随着你的交易而移动,而且总是朝着对你不利的方向。
第 13 章你拖过的那个滑块,背后就是这条规则。这一章讲的是它到底怎么运转,以及一个更要命的问题——这两个箱子里的东西,是谁放进去的?
你来决定
假设你手上有价值 5000 美元的某个代币,和 5000 美元的稳定币。
一个链上池子邀请你把这一万美元全放进去,成为它的「流动性提供者」。作为回报,所有经过这个池子的交易都会付一笔手续费,按份额分给你。界面上显示的年化看起来相当可观。
你怎么做?
观察结果
先把那个摊位换成真实一点的数字。
假设池子里有 1 个 ETH 和 1000 美元稳定币,此刻 ETH 价格是 1000 美元。池子总价值 2000 美元,其中一半是你的(为了算得干净,就假设全是你的)。乘积是 1000。
现在 ETH 涨到 4000 美元。外面涨了,池子不知道,池子里还是老比例。套利者会立刻发现这个差价,冲进来用稳定币把便宜的 ETH 买走,一直买到池子里的价格也等于 4000 为止。
买完之后,池子里剩下 0.5 个 ETH 和 2000 美元。
- 池子现在值:0.5 × 4000 + 2000 = 4000 美元
- 如果你当初什么都没做:1 × 4000 + 1000 = 5000 美元
差了 1000 美元,整整 20%。
这不是手续费能不能覆盖的问题,这是结构性的。把几个价格都算一遍:
| ETH 价格变化 | 原地持有值多少 | 做 LP 值多少 | 差额 |
|---|---|---|---|
| 不变(1000) | 2000 | 2000 | 0 |
| 涨 1 倍(2000) | 3000 | 2828 | −5.7% |
| 涨 3 倍(4000) | 5000 | 4000 | −20% |
| 跌一半(500) | 1500 | 1414 | −5.7% |
| 跌 90%(100) | 1100 | 632 | −42.5% |
三件事值得注意:
- 只要价格离开了你入场时的比例,差额就是负的。 涨也负,跌也负。
- 差额只和价格变动的倍数有关,和方向无关。涨 1 倍和跌一半,差额一模一样。
- 价格回到原点,差额就归零。这就是它被叫作「无常」的全部理由——而这个名字骗了非常多人。
它不是「暂时的亏损」。它是「做 LP 的结果」和「原地不动」之间的差额。价格不回来,这个差额就不会消失;你撤出池子的那一刻,它就被固定下来了。它也不一定是亏——币价跌 90% 时你做 LP 确实亏了,但你拿着不动也亏了,只是亏得少一点。
更准确的说法是:做 LP 让你在上涨时少赚,在下跌时少亏,代价是永远吃不到大行情,收益是一笔手续费。
现在回到「谁提供流动性」这个问题。答案是:有人真金白银把两种资产放了进去,并且接受了上面这张表。 拖动下面两个滑块,看看交易者为此付出了什么:
没有做市商在报价,价格只由 x·y=k 这条曲线决定。池子越浅、买得越多,你付的价格就越偏离市价—— 这笔差价不会凭空消失,它被套利者和 LP 拿走了。
把左边深度拉到最小、右边金额拉到最大,成交均价能偏离市价几十个百分点。这笔偏离出去的钱不会消失,它分成了两份:一份是手续费,归 LP;另一份被套利者拿走,用来把价格拉回市场水平——而套利者赚的那部分,恰好就是 LP 少掉的那部分。
- 外部价格变了
- 池子价格滞后
- 套利者进场买走便宜的一侧
- 池子价格被拉平
- 差价从 LP 转移给套利者
建立模型
把订单簿和这个摊位放在一起,能看清楚 AMM 到底替换掉了什么:
| 订单簿交易所 | AMM 池子 | |
|---|---|---|
| 价格由谁给出 | 挂单的人 | 一条数学曲线 |
| 报价更新方式 | 有人主动撤单改价 | 每笔成交自动移动 |
| 没人值守时 | 无法成交 | 照常成交 |
| 提供流动性的人 | 做市商,可随时撤单 | LP,撤出要发一笔交易 |
| 大单的代价 | 吃穿几档挂单 | 沿曲线滑上去 |
| 价格怎样跟上外部市场 | 做市商主动改价 | 套利者被动拉平 |
| 提供者靠什么赚钱 | 买卖价差 | 手续费 |
| 提供者的主要风险 | 库存单边暴露 | 价格偏离带来的差额 |
有一件事没变:两边都需要有人拿出真实的资产。 AMM 取消的是「报价的人」,不是「出钱的人」。
LP 的收益其实是一道四项加减法,绝大多数界面只显示第一项:
| 项目 | 正负 | 谁付的 | 什么时候大 |
|---|---|---|---|
| 交易手续费 | + | 来这个池子交易的人 | 成交量大时 |
| 代币补贴 | + | 发行补贴的协议 | 项目方想冲 TVL 时 |
| 价格偏离的差额 | − | 套利者从你这里赚走 | 价格单边大幅移动时 |
| Gas 与操作成本 | − | 你自己 | 频繁进出时 |
一条经验:手续费收入和价格偏离的差额,往往在同一时间同时放大。 行情剧烈的时候成交量最大,手续费最多;而行情剧烈恰恰意味着价格移动最大,差额也最大。它们不是此消彼长,它们是一起来的。哪一边更大,事前算不出来,只能事后对账。
它叫什么
把所有买单和卖单按价格排成两列的撮合方式。成交发生在买卖双方价格相遇时。
它的前提是有人愿意持续挂单。没有挂单,订单簿就是一张空表。
同时挂出买价和卖价、赚取价差的参与者。他们提供的不是方向判断,而是「随时有人接你的单」这件事本身。
链上的高 Gas 成本和几秒的出块间隔,让传统做市模式在链上难以运转——这正是 AMM 出现的原因。
用一条公式替代人工报价的机制。任何人随时可以和这条公式交易,价格由池子里两种资产的存量比例决定。
它最重要的性质是无需许可:不需要申请上市,不需要做市团队同意,任何人都可以为任意两种代币创建一个池子。这也是链上能在几小时内交易一个全新代币的原因。
最常见的那条曲线:两种资产储备量的乘积保持不变。
它有两个关键性质:池子永远不会被买空(价格会趋向无穷),以及成交量越大、价格偏离越远。第 15 章会把第二条变成一个可以随手算的公式。
后来出现了很多变形——为稳定币优化的曲线、允许把资金集中在某个价格区间的曲线——但核心取舍是一样的。
把两种资产按比例存入池子的人。他拿到一张凭证,代表池子的一部分份额,随时可以按当前比例取回。
注意「按当前比例」:你存进去的是 1 个 ETH 加 1000 美元,取出来的很可能不是这个组合。你存的是两种资产,你取的是池子的一个份额。
做 LP 的价值与「原地持有同样资产」之间的差额。
三件事要记住:它不是暂时的(价格不回来就不会消失,撤出即固定);它不是亏损而是少赚(下跌时它反而让你亏得少一点);它与方向无关,只与价格变动的倍数有关。
更贴切的名字是「偏离损失」(Divergence Loss)。不少人是被「无常」这两个字坑进去的。
动手
这个 Lab 不需要任何资金。全程只在输入框里打数字,看它算出什么,不要点最后那个确认按钮。
挑一个池子。 选一个交易量不大不小的代币对——太大的池子滑点小到看不出效果,太小的池子数字会夸张到失真。记下它两侧的储备量和当前价格。
买 100 美元。 在交易界面输入 100 美元,记下三个数:你能拿到多少枚代币、界面显示的滑点或价格影响是多少、手续费是多少。
买 100000 美元。 同一个池子,只改金额。记下同样三个数。
注意看「你能拿到多少枚」这一行:如果滑点是线性的,10 万美元应该拿到 100 美元的 1000 倍。实际是多少?
手算一遍。 用你记下的储备量,按恒定乘积自己算一次 10 万美元能买到多少:
买入前:池子里有 x 枚代币、y 美元稳定币,k = x × y
投入 A 美元后:稳定币变成 y + A
代币剩下 k ÷ (y + A)
你拿到的枚数 = x − k ÷ (y + A)把你算出的结果和界面显示的结果比。差异应该只来自手续费(以及池子在你查看期间发生的变化)。对不上就说明你漏掉了某个环节——找出来,这比算对更有价值。
填一行结论。
| 买 100 美元 | 买 100000 美元 | |
|---|---|---|
| 拿到多少枚 | ||
| 单价比市价高多少 | ||
| 池子价格被推高多少 | ||
| 手算结果对得上吗 |
做完之后回答一个问题:这个池子里,多大的一笔单会让你的成交价比市价差 10%? 记住这个数量级,第 15 章整章都在用它。
AI Lab
先把你在上一个 Lab 里查到的真实储备量交给它,然后要求它输出计算过程而不只是结果:
一个恒定乘积池子当前储备:代币 [X] 枚,稳定币 [Y] 美元,手续费率 [F]%。
请分别计算投入 100、10000、1000000 美元稳定币买入代币的结果,每一档给出:
- 拿到多少枚代币
- 成交均价
- 成交均价相对买入前价格高出的百分比
- 成交后池子里的新价格,以及它相对旧价格的变化
- 手续费在哪一步扣、扣了多少
要求:写出每一步的算式和代入的数字,不要只给结论。
然后用一句话说明:为什么投入金额翻 100 倍,拿到的代币远不到 100 倍。然后自己用计算器把中间那一档重算一遍。
这个 Lab 的价值在于,恒定乘积是一个模型完全有能力算对的题目——它不需要查资料,不需要联网,只需要四则运算。如果它在这里都会出错,那么在需要查真实数据的题目上,它出错的方式只会更隐蔽。
常见的三种错误:把手续费扣在错误的位置、把「成交均价偏离」和「价格冲击」混成一个数、以及在你给的储备量之外偷偷引入一个「市场价格」。第三种最危险,因为结果看起来完全合理。
AI 说完之后,你必须自己验证
- 它用的储备量是你给它的那两个数,没有自己换成别的数
- 它有没有把手续费算进去,算在了哪一步——扣在输入端还是输出端,结果会差一点
- 它给的「滑点」定义是成交均价对市价的偏离,还是成交后的新价格对旧价格的偏离,这是两个数
- 把买入金额翻 10 倍,它算出的拿到枚数是否明显不到 10 倍
- 它有没有把无常损失说成「价格回来就没事了」这种说法
- 让它算一次极端值:投入金额等于池子稳定币储备的 100 倍,看它的结果是否仍然收敛
真实案例
最早的恒定乘积交易所合约,核心逻辑只有几百行。它没有撮合引擎,没有订单簿,没有做市商,没有上市审核。
它带来的最大改变不是效率,而是准入:在此之前,一个新资产能不能被交易,取决于交易所愿不愿意上它、做市商愿不愿意接。在此之后,任何人可以在几分钟内为任意两种代币建一个池子。
代价也很直接——这个门槛同样为骗局敞开了大门。第 22、24 章会讲这一面。
一段时间里,大量协议用自己发行的代币补贴 LP,年化数字非常夸张。流动性确实涌了进来。
后来发生了两件事:一是有竞争协议用更高的补贴把同一批 LP 整体挖走,前后不过几天;二是补贴代币本身的价格跌下来之后,剩下的手续费收入远不足以覆盖价格偏离的差额,LP 陆续撤出。
结论不是「补贴无效」,而是:靠补贴买来的流动性,忠诚度等于补贴的差额。 第 17 章会把这件事拆到底。
由于链上交易在打包前是公开的,有人会盯着待处理的大额买单,抢在它前面买、在它后面卖,赚走那笔滑点。这类行为统称 MEV。
关键在于理解这笔钱本来就存在:它是交易者为了在浅池子里成交而付出的价格偏离。AMM 的结构决定了它必然产生,区别只在于最终落到谁手里——套利者、LP、验证者,还是抢跑的机器人。第 24 章会把 MEV 作为一类独立风险处理。
后来的版本允许 LP 把资金只投在某个价格区间内,同样的钱在区间内提供的深度可以高出很多倍。
副作用是:一旦价格跑出你设的区间,你的资金会全部变成走势较弱的那一种资产,而且不再赚手续费。资本效率的提升,本质上是把偏离损失也一起放大了。 它变成了一个需要持续管理的仓位,而不是存进去就不管的东西。
改一个变量
交易者更便宜了,成交量大概率上升。
但 LP 的那道加减法里,正项变小了,负项一点没变。结果是资金会流向手续费更高、或波动更小的池子,这个池子的深度下降,滑点上升——最后交易者未必更便宜。
手续费率不是越低越好,它是在「吸引交易者」和「留住 LP」之间的一个平衡点。所以你会看到不同波动率的资产对,用着完全不同的费率档。
池子价格会永远停在上一笔成交的位置。第一个发现这件事的人,可以用市场价的一半从池子里买走资产——他就成了套利者。套利者不是一种职业,而是一个必然出现的角色。
真正值得问的是反过来的情况:如果套利成本高到没人愿意做(Gas 极贵,或者这条链上没有足够的资金),池子的价格会脱节多久?这时候你在这个池子里看到的价格,还是价格吗?
无常损失就消失了——LP 只在有利的时候留下,不利时走人。
问题是套利者和 LP 看到的是同一份链上数据。如果 LP 能在价格移动前撤出,那么价格移动本身就不会发生在池子里,池子也就没有任何报价功能了。
这说明偏离损失不是一个可以修掉的 Bug,而是「用存货代替报价」这件事必然带来的成本。所有声称消除了它的方案,值得你仔细找一找那笔成本被转移到了哪里。
在价格接近 1:1 时深度大幅提升,滑点很小,非常适合两种应该等价的资产(两种美元稳定币、一种资产和它的质押凭证)。
代价是一旦其中一方真的脱锚,曲线的平坦区会让池子以接近 1:1 的价格把好资产源源不断地换给坏资产,LP 手里会迅速只剩下出问题的那一种。
第 13 章那张「储备与赎回」的表,在这里换了个形式出现:曲线假设两边等价,而现实里等价是有条件的。
带走的问题
这一章的核心。AMM 取消了报价的人,没有取消出钱的人。看任何一个 DEX,先问:池子里的钱是谁的?他为什么愿意放在这里?如果手续费和补贴都归零,他还会留下吗?
LP 的手续费收入,由每一个来交易的人支付;LP 的偏离损失,由套利者拿走。同一个池子里,交易者和套利者一起构成了 LP 的全部收入来源和全部损失来源。 把这两个方向都找出来,你才算看懂了一个池子。
补贴代币是最常见的 LP 激励。问三件事:一天发多少枚、按什么价格折算成年化、什么时候停。第 17 章会告诉你,界面上那个年化数字经常是用补贴代币的当前价格算出来的——而补贴本身会压低这个价格。
LP 承担价格偏离、合约漏洞和代币归零三重风险;交易者承担滑点和抢跑。把 LP 的身份看清楚:他不是储户,他是一个被动的、永远在逆势操作的交易对手。
本章自测
对的一半:它不需要有人主动报价。价格由曲线和存货比例自动给出,没人值守也能成交。
错的一半:它仍然需要有人出资产。池子里的每一枚代币和每一美元都是 LP 真金白银放进去的,没有 LP 就没有池子,交易一笔都做不成。
AMM 把做市这件事拆成了两部分——报价的智力工作交给了公式,承担库存风险的资本工作交给了 LP。被自动化的是前者,不是后者。
「无常」指的是:如果价格回到你入场时的比例,这个差额会完全消失。数学上确实如此。
误导有三处:
- 价格通常不会回来,尤其是波动大的资产。你撤出的那一刻,差额就永久固定了。
- 它不是亏损,是「比不做 LP 少赚」。下跌行情里做 LP 亏得反而更少。
- 它让人以为这是一个可以靠「等」解决的问题,于是低估了它的规模——价格涨 3 倍时差额是 20%,这不是一个小数字。
改叫「偏离损失」会准确得多。
因为那个数字通常只算了四项里的一项。
完整的账是:手续费 + 补贴 − 偏离损失 − Gas。前两项是界面上的数,后两项要你自己算。
而且有一个陷阱:高手续费年化往往意味着高成交量,高成交量往往意味着价格在大幅移动,价格大幅移动正是偏离损失最大的时候。 这三件事是同时发生的,不是互相抵消的。
正确的做法是等你撤出之后,把最终拿到的两种资产按当时价格折成美元,和「当初什么都不做」直接比。这是唯一不会骗人的口径。
套利者会在便宜的那边买、贵的那边卖,直到两边的价格差小于他的交易成本(Gas + 手续费 + 滑点)为止。
所以价格不会完全一致,会收敛到一个由成本决定的带宽内。链越贵、池子越浅,这个带宽越宽。
有两种情况值得警惕:价差长期存在(说明套利成本太高,或者一边的资产根本换不出去),以及价差突然扩大(说明某一边的深度正在消失)。这两种都是第 15 章要教你识别的信号。
没有标准答案,但至少要把下面几件事说清楚:
- 初始池子放多少钱、放什么比例。 这个比例直接决定了第一笔成交的价格。
- 这笔钱是谁的。 项目方自己的?那它什么时候会撤出?撤出时流动性归零吗?
- 要不要锁。 不锁的话,项目方可以在任何一刻把另一侧的资产全部取走。
- 补贴发多久、发多少、停了之后剩下什么。 用第 17 章的四问检查一遍。
- 有人卖出 5% 流通量,价格会跌多少。 这是第 15 章的动作,现在就可以先算一遍。
检查你的方案时问一句:如果代币价格跌 80%,这个池子还在吗? 答不上来,说明方案还没做完。
一句话带走
AMM 用一条曲线替代了报价的人,但流动性仍然得有人真金白银提供。