Crypto OS
Non-Technical Crypto OS第三阶段 · Crypto 如何重新创造金融

第 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)200020000
涨 1 倍(2000)30002828−5.7%
涨 3 倍(4000)50004000−20%
跌一半(500)15001414−5.7%
跌 90%(100)1100632−42.5%

三件事值得注意:

  1. 只要价格离开了你入场时的比例,差额就是负的。 涨也负,跌也负。
  2. 差额只和价格变动的倍数有关,和方向无关。涨 1 倍和跌一半,差额一模一样。
  3. 价格回到原点,差额就归零。这就是它被叫作「无常」的全部理由——而这个名字骗了非常多人。

它不是「暂时的亏损」。它是「做 LP 的结果」和「原地不动」之间的差额。价格不回来,这个差额就不会消失;你撤出池子的那一刻,它就被固定下来了。它也不一定是亏——币价跌 90% 时你做 LP 确实亏了,但你拿着不动也亏了,只是亏得少一点。

更准确的说法是:做 LP 让你在上涨时少赚,在下跌时少亏,代价是永远吃不到大行情,收益是一笔手续费。

现在回到「谁提供流动性」这个问题。答案是:有人真金白银把两种资产放了进去,并且接受了上面这张表。 拖动下面两个滑块,看看交易者为此付出了什么:

你实际拿到
45,455
成交均价比市价高
10.00%
成交后池子价格被推高
21.00%

没有做市商在报价,价格只由 x·y=k 这条曲线决定。池子越浅、买得越多,你付的价格就越偏离市价—— 这笔差价不会凭空消失,它被套利者和 LP 拿走了。

把左边深度拉到最小、右边金额拉到最大,成交均价能偏离市价几十个百分点。这笔偏离出去的钱不会消失,它分成了两份:一份是手续费,归 LP;另一份被套利者拿走,用来把价格拉回市场水平——而套利者赚的那部分,恰好就是 LP 少掉的那部分。

  1. 外部价格变了
  2. 池子价格滞后
  3. 套利者进场买走便宜的一侧
  4. 池子价格被拉平
  5. 差价从 LP 转移给套利者
这个循环每天发生成千上万次。它保证了池子价格跟得上市场,代价由 LP 支付。

建立模型

把订单簿和这个摊位放在一起,能看清楚 AMM 到底替换掉了什么:

订单簿交易所AMM 池子
价格由谁给出挂单的人一条数学曲线
报价更新方式有人主动撤单改价每笔成交自动移动
没人值守时无法成交照常成交
提供流动性的人做市商,可随时撤单LP,撤出要发一笔交易
大单的代价吃穿几档挂单沿曲线滑上去
价格怎样跟上外部市场做市商主动改价套利者被动拉平
提供者靠什么赚钱买卖价差手续费
提供者的主要风险库存单边暴露价格偏离带来的差额

有一件事没变:两边都需要有人拿出真实的资产。 AMM 取消的是「报价的人」,不是「出钱的人」。

LP 的收益其实是一道四项加减法,绝大多数界面只显示第一项:

项目正负谁付的什么时候大
交易手续费+来这个池子交易的人成交量大时
代币补贴+发行补贴的协议项目方想冲 TVL 时
价格偏离的差额套利者从你这里赚走价格单边大幅移动时
Gas 与操作成本你自己频繁进出时

一条经验:手续费收入和价格偏离的差额,往往在同一时间同时放大。 行情剧烈的时候成交量最大,手续费最多;而行情剧烈恰恰意味着价格移动最大,差额也最大。它们不是此消彼长,它们是一起来的。哪一边更大,事前算不出来,只能事后对账。

它叫什么

Order Book订单簿

把所有买单和卖单按价格排成两列的撮合方式。成交发生在买卖双方价格相遇时。

它的前提是有人愿意持续挂单。没有挂单,订单簿就是一张空表。

Market Maker做市商

同时挂出买价和卖价、赚取价差的参与者。他们提供的不是方向判断,而是「随时有人接你的单」这件事本身。

链上的高 Gas 成本和几秒的出块间隔,让传统做市模式在链上难以运转——这正是 AMM 出现的原因。

AMMAutomated Market Maker,自动做市商

用一条公式替代人工报价的机制。任何人随时可以和这条公式交易,价格由池子里两种资产的存量比例决定。

它最重要的性质是无需许可:不需要申请上市,不需要做市团队同意,任何人都可以为任意两种代币创建一个池子。这也是链上能在几小时内交易一个全新代币的原因。

x·y=k恒定乘积

最常见的那条曲线:两种资产储备量的乘积保持不变。

它有两个关键性质:池子永远不会被买空(价格会趋向无穷),以及成交量越大、价格偏离越远。第 15 章会把第二条变成一个可以随手算的公式。

后来出现了很多变形——为稳定币优化的曲线、允许把资金集中在某个价格区间的曲线——但核心取舍是一样的。

LPLiquidity Provider,流动性提供者

把两种资产按比例存入池子的人。他拿到一张凭证,代表池子的一部分份额,随时可以按当前比例取回。

注意「按当前比例」:你存进去的是 1 个 ETH 加 1000 美元,取出来的很可能不是这个组合。你存的是两种资产,你取的是池子的一个份额。

Impermanent Loss无常损失

做 LP 的价值与「原地持有同样资产」之间的差额。

三件事要记住:它不是暂时的(价格不回来就不会消失,撤出即固定);它不是亏损而是少赚(下跌时它反而让你亏得少一点);它与方向无关,只与价格变动的倍数有关。

更贴切的名字是「偏离损失」(Divergence Loss)。不少人是被「无常」这两个字坑进去的。

动手

动手同一个池子,两笔不同大小的单任意一个 DEX 的交易界面 + 一个区块浏览器0 元,全程只看报价不点确认

这个 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

AI Lab让 AI 用恒定乘积算一次报价,你用真实储备量手算复核Level 2 · AI Copilot

先把你在上一个 Lab 里查到的真实储备量交给它,然后要求它输出计算过程而不只是结果:

一个恒定乘积池子当前储备:代币 [X] 枚,稳定币 [Y] 美元,手续费率 [F]%。

请分别计算投入 100、10000、1000000 美元稳定币买入代币的结果,每一档给出:
- 拿到多少枚代币
- 成交均价
- 成交均价相对买入前价格高出的百分比
- 成交后池子里的新价格,以及它相对旧价格的变化
- 手续费在哪一步扣、扣了多少

要求:写出每一步的算式和代入的数字,不要只给结论。
然后用一句话说明:为什么投入金额翻 100 倍,拿到的代币远不到 100 倍。

然后自己用计算器把中间那一档重算一遍

这个 Lab 的价值在于,恒定乘积是一个模型完全有能力算对的题目——它不需要查资料,不需要联网,只需要四则运算。如果它在这里都会出错,那么在需要查真实数据的题目上,它出错的方式只会更隐蔽。

常见的三种错误:把手续费扣在错误的位置、把「成交均价偏离」和「价格冲击」混成一个数、以及在你给的储备量之外偷偷引入一个「市场价格」。第三种最危险,因为结果看起来完全合理。

AI 说完之后,你必须自己验证

  • 它用的储备量是你给它的那两个数,没有自己换成别的数
  • 它有没有把手续费算进去,算在了哪一步——扣在输入端还是输出端,结果会差一点
  • 它给的「滑点」定义是成交均价对市价的偏离,还是成交后的新价格对旧价格的偏离,这是两个数
  • 把买入金额翻 10 倍,它算出的拿到枚数是否明显不到 10 倍
  • 它有没有把无常损失说成「价格回来就没事了」这种说法
  • 让它算一次极端值:投入金额等于池子稳定币储备的 100 倍,看它的结果是否仍然收敛

真实案例

几百行代码替代了一个做市团队2018 年起

最早的恒定乘积交易所合约,核心逻辑只有几百行。它没有撮合引擎,没有订单簿,没有做市商,没有上市审核。

它带来的最大改变不是效率,而是准入:在此之前,一个新资产能不能被交易,取决于交易所愿不愿意上它、做市商愿不愿意接。在此之后,任何人可以在几分钟内为任意两种代币建一个池子。

代价也很直接——这个门槛同样为骗局敞开了大门。第 22、24 章会讲这一面。

补贴拉来的流动性,也会被补贴带走2020 年至今

一段时间里,大量协议用自己发行的代币补贴 LP,年化数字非常夸张。流动性确实涌了进来。

后来发生了两件事:一是有竞争协议用更高的补贴把同一批 LP 整体挖走,前后不过几天;二是补贴代币本身的价格跌下来之后,剩下的手续费收入远不足以覆盖价格偏离的差额,LP 陆续撤出。

结论不是「补贴无效」,而是:靠补贴买来的流动性,忠诚度等于补贴的差额。 第 17 章会把这件事拆到底。

把交易者的滑点变成别人的利润持续发生

由于链上交易在打包前是公开的,有人会盯着待处理的大额买单,抢在它前面买、在它后面卖,赚走那笔滑点。这类行为统称 MEV。

关键在于理解这笔钱本来就存在:它是交易者为了在浅池子里成交而付出的价格偏离。AMM 的结构决定了它必然产生,区别只在于最终落到谁手里——套利者、LP、验证者,还是抢跑的机器人。第 24 章会把 MEV 作为一类独立风险处理。

集中流动性:效率上去了,风险也跟着上去了2021 年起

后来的版本允许 LP 把资金只投在某个价格区间内,同样的钱在区间内提供的深度可以高出很多倍。

副作用是:一旦价格跑出你设的区间,你的资金会全部变成走势较弱的那一种资产,而且不再赚手续费。资本效率的提升,本质上是把偏离损失也一起放大了。 它变成了一个需要持续管理的仓位,而不是存进去就不管的东西。

改一个变量

如果手续费率从 0.3% 降到 0.05%

交易者更便宜了,成交量大概率上升。

但 LP 的那道加减法里,正项变小了,负项一点没变。结果是资金会流向手续费更高、或波动更小的池子,这个池子的深度下降,滑点上升——最后交易者未必更便宜。

手续费率不是越低越好,它是在「吸引交易者」和「留住 LP」之间的一个平衡点。所以你会看到不同波动率的资产对,用着完全不同的费率档。

如果没有任何套利者

池子价格会永远停在上一笔成交的位置。第一个发现这件事的人,可以用市场价的一半从池子里买走资产——他就成了套利者。套利者不是一种职业,而是一个必然出现的角色。

真正值得问的是反过来的情况:如果套利成本高到没人愿意做(Gas 极贵,或者这条链上没有足够的资金),池子的价格会脱节多久?这时候你在这个池子里看到的价格,还是价格吗?

如果LP 可以在价格移动前免费撤出

无常损失就消失了——LP 只在有利的时候留下,不利时走人。

问题是套利者和 LP 看到的是同一份链上数据。如果 LP 能在价格移动前撤出,那么价格移动本身就不会发生在池子里,池子也就没有任何报价功能了。

这说明偏离损失不是一个可以修掉的 Bug,而是「用存货代替报价」这件事必然带来的成本。所有声称消除了它的方案,值得你仔细找一找那笔成本被转移到了哪里。

如果池子的曲线改成在 1:1 附近极其平坦

在价格接近 1:1 时深度大幅提升,滑点很小,非常适合两种应该等价的资产(两种美元稳定币、一种资产和它的质押凭证)。

代价是一旦其中一方真的脱锚,曲线的平坦区会让池子以接近 1:1 的价格把好资产源源不断地换给坏资产,LP 手里会迅速只剩下出问题的那一种。

第 13 章那张「储备与赎回」的表,在这里换了个形式出现:曲线假设两边等价,而现实里等价是有条件的。

带走的问题

8
谁提供流动性?

这一章的核心。AMM 取消了报价的人,没有取消出钱的人。看任何一个 DEX,先问:池子里的钱是谁的?他为什么愿意放在这里?如果手续费和补贴都归零,他还会留下吗?

5
谁在支付?

LP 的手续费收入,由每一个来交易的人支付;LP 的偏离损失,由套利者拿走。同一个池子里,交易者和套利者一起构成了 LP 的全部收入来源和全部损失来源。 把这两个方向都找出来,你才算看懂了一个池子。

10
激励是什么?

补贴代币是最常见的 LP 激励。问三件事:一天发多少枚、按什么价格折算成年化、什么时候停。第 17 章会告诉你,界面上那个年化数字经常是用补贴代币的当前价格算出来的——而补贴本身会压低这个价格。

9
谁承担风险?

LP 承担价格偏离、合约漏洞和代币归零三重风险;交易者承担滑点和抢跑。把 LP 的身份看清楚:他不是储户,他是一个被动的、永远在逆势操作的交易对手。

本章自测

一句话带走

AMM 用一条曲线替代了报价的人,但流动性仍然得有人真金白银提供。

做完这一章的动手环节了?勾上它查看全部进度

本页目录