Gerrad Zhang
AMM 与 Uniswap:没有挂单簿的交易所怎么定价

AMM 与 Uniswap:没有挂单簿的交易所怎么定价

阶段 4(DeFi)开篇:上一篇结尾说「从能点的计数器到能用的交易所,距离没有想象中远」,本篇兑现这一步。问题先行:传统交易所靠订单簿挂单撮合,链上无许可、没人维护订单簿的环境怎么定价?AMM 的答案是把做市商换成一个公式。

Gerrad Zhang
Wuhan, China
3 min read

从「能点的计数器」到「能用的交易所」

上一篇(第一个完整 DApp)的结尾停在:从「一个能点的计数器」到「一个能用的交易所」,距离没有想象中远。本篇就迈这一步——进入阶段 4:DeFi 。而一个「能用的交易所」,核心不是界面,是定价与撮合:买家想买 1 个 ETH,谁报价格?谁当对手方?

传统世界的答案我们已经很熟悉了。但把那套机制原样搬到链上会立刻撞墙——撞的正是本篇要讲清楚的动机。答案是 AMM (自动化做市商),Uniswap 是它最著名的实现。

先说本篇口径:数值例全部沿用本站 Web3 深度报告阶段 4 的示例(src/pages/web3/report.astro 4.2 节),读者可以两边对照。


订单簿的困境:谁来做市

传统交易所(股票交易所、中心化加密交易所)用订单簿:买家挂买单(想买多少、出价多少),卖家挂卖单,价格从低到高排成两列,撮合引擎把能交叉的订单配对成交。中间还有一类关键角色——做市商:持续双边挂单、赚取买卖价差,靠自己的库存给市场提供流动性。

这套东西在链下运行得很好,放到链上有三个问题:

  • 撮合又贵又重。订单簿撮合是高频操作——挂单、撤单、改单每秒可能成千上万次。在以太坊上每一次状态变更都是一笔交易、都要付 Gas 、都要等出块。用订单簿做市,等于把撮合引擎塞进一个每秒只能处理十几笔交易、每步都要收费的虚拟机里。
  • 冷启动没有做市商。无许可环境意味着任何人都能发新代币、开新交易对。可做市商是逐利的:一个没人交易的新交易对,谁愿意投入真金白银双边挂单?没有挂单,就没有价格;没有价格,就更没人来——死循环。
  • 托管问题。中心化交易所的订单簿和资产都在自己手里,这恰恰是「不用信任任何中间商」的 DeFi 要规避的形态。

AMM 的思路是釜底抽薪:不要订单簿了,把「做市」这件事交给一个公式。任何人都能按公式存入资产成为流动性的一方,任何时刻价格都由公式算出来——不需要撮合引擎,不需要做市商团队,一份 智能合约 就是一个交易所。

维度订单簿交易所AMM(Uniswap 式)
价格来源挂单队列的交叉池中两种资产的数量比
流动性来源做市商双边挂单LP 存入资产组成资金池
撮合方式撮合引擎配对订单与合约直接互换,无对手方匹配
冷启动依赖做市商进场一个池一份合约即可开张
适合环境高性能链下系统慢而贵的链上环境

x * y = k:一条曲线替所有挂单

池子与基准价

Uniswap V2 用最简单的 AMM 模型:一个池子装两种资产,数量分别记作 x 和 y,规定二者的乘积恒定

x * y = k

    池中:ETH = 100,USDC = 200,000
    k    = 100 × 200,000 = 20,000,000

    基准价 = USDC ÷ ETH = 200,000 ÷ 100 = $2,000 / ETH

价格不是谁报的,是两种资产数量的比值。想买 ETH?往池子里放 USDC、从池子里拿走 ETH——只要保证拿走和放入之后乘积仍等于 k,合约就放行。买入会让池中 ETH 变少、USDC 变多,于是「ETH ÷ 每单位 USDC」的比值上移:买的人越多,价格越贵。这就是 AMM 版的供需定价。

买 1 ETH 会发生什么

按上面的池子(100 ETH / 200,000 USDC,k = 20,000,000)买入 1 ETH:

  1. 池中 ETH:100 → 99;
  2. USDC 必须满足 99 × y = 20,000,000,反解出 y ≈ 202,020;
  3. 也就是说买家要注入约 2,020 USDC(202,020 − 200,000),换走 1 ETH。
             交易前                          买入 1 ETH 后
      ┌───────────────────┐          ┌───────────────────┐
      │   ETH     100     │          │   ETH      99     │ ← 变少(被买走)
      │   USDC  200,000   │          │   USDC  202,020   │ ← 变多(买家注入)
      └───────────────────┘          └───────────────────┘
        100 × 200,000 = 20,000,000     99 × 202,020 ≈ 20,000,000
              (k 保持不变)
      池价 = $2,000/ETH               池价 ≈ $2,040.6/ETH

成交后池价从 $2,000 抬到约 $2,040.6,上浮约 2%——这就是滑点(价格冲击):你的买压本身改变了价格。成交均价约 $2,020(支付 2,020 USDC 买 1 ETH),介于成交前后的池价之间。

放在曲线上看更直观。x * y = k 是一条双曲线,交易不是「跳」到新价格,而是沿着曲线滑动

 USDC
   │●
   │ ●
   │  ●●            x · y = k 双曲线
   │    ●●
   │      ●●
   │        ●●
   │           ●●
   └──────────────────────────→ ETH
     买入 ETH:池沿曲线向左上滑动
     (ETH 越少、USDC 越多 → ETH 越贵)

滑点大小跟交易量相对池子的比例直接相关:同样的 1 ETH 买单,放在一个 10,000 ETH 的池子里几乎无感,放在 100 ETH 的池子里就是 2% 的冲击。池子越大(流动性越深),同样金额的滑点越小。

另外注意一个巧妙之处:池价偏离外部市场价时,套利者会自动把它搬回来。外面 ETH 涨到 $2,100 而池价还是 $2,000?套利者从池子低价买入、到市场高价卖出,赚取差价的同时把池子推回平衡。AMM 不需要预言机喂价,就能跟住大盘价格——靠的是套利者的贪婪。


LP 与无常损失:公式另一端的人

池子里的资产从哪来?从 LP (流动性提供者)来。任何人按当前比例(上面例子是 1 ETH : 2,000 USDC)存入两种资产,就成了 LP,按份额赚取池子里每笔交易的手续费分成(V2 为 0.3%)。交易越多、池子越大,LP 躺赚的手续费越多——这是 AMM 解决冷启动的另一半答案:用手续费收益换初始流动性

但 LP 不是无风险的。存入之后,你的资产构成就被公式接管了:价格波动时,合约会持续「低买高卖」地调整两种资产的比例——结果是价格偏离存入点越多,取出时的总价值越跑输「一直拿着不动」(HODL)。这个差额叫无常损失

一个简化数值例

沿用同一个池子(100 ETH / 200,000 USDC,k = 20,000,000,存入时价 $2,000):

  • 某 LP 投入 10 ETH + 20,000 USDC,占池子 10%;
  • 之后 ETH 外部价格翻倍到 $4,000,套利者把池子搬到新平衡点:约 (70.7 ETH, 282,843 USDC)(仍满足乘积 ≈ 20,000,000、比值 $4,000);
  • LP 此时取出自己的 10% 份额:约 7.07 ETH + 28,284 USDC,按 $4,000 计价 ≈ $56,568
  • 对照 HODL:10 ETH + 20,000 USDC 原封不动,按 $4,000 计价 = $60,000
  • 差额 ≈ $3,432,约 HODL 价值的 5.7%——这就是无常损失。

「无常」的意思是:这笔损失不是已兑现的亏损。如果价格后来回到 $2,000,池子比例回到原样,LP 取出的价值和 HODL 重新打平,无常损失归零。只有 LP 在价格偏离时取出,损失才落袋。所以 LP 的真实账本是两边对冲的:手续费收入 vs 无常损失——手续费赚不回偏离幅度的行情里,做 LP 不如 HODL;横盘或温和波动的行情里,LP 靠手续费胜出。这也是为什么大额 LP 普遍偏好稳定币交易对(价格不偏离,无常损失趋近于零)。


V2 → V3 → V4:一句话演进史

  • V2:本篇全程讲的模型——流动性沿价格轴均匀铺开,简单、无许可、谁都能开池,代价是绝大多数流动性躺在永远用不到的价格区间里闲置。
  • V3集中流动性——LP 自选价格区间存入流动性,资金效率大幅提升,代价是头寸需要主动管理(区间外要撤、要补)。
  • V4Uniswap V4 引入 Hook——把池子的行为变成可编程的钩子,创新清单沿用 report 页口径:Custom Pools(自定义规则池)、TWAMM(时间加权自动做市)、Limit Orders(内置限价单)、Dynamic Fees(动态费率)。

一句话版本:V2 把做市变成公式,V3 把公式里的流动性排兵布阵,V4 把公式本身开放编程。


总结:价格有了,借贷呢

本篇把「交易所」这个词拆到了公式级:订单簿在链上又贵又难冷启动,AMM 用 x * y = k 一条曲线替代全部挂单——价格是比值,成交是滑动,平衡靠套利;LP 用两种资产换手续费现金流,代价是承担无常损失;V3、V4 沿着资金效率和可编程性继续演进。回头看,阶段 3 结尾那句「距离没有想象中远」到这里有了完整解释:一个 Uniswap 池,本质就是一份几千行的 智能合约 ——和那个 Counter 没有本质区别,只是公式更精巧,且每笔 swap 同样要在 EVM 上执行、同样要付 Gas

交换解决了「定价」,DeFi 的下一块积木是「借贷」:想在不动用本金的前提下借出资产周转,无许可环境谁来当银行?超额抵押为什么是唯一答案?下一篇(借贷协议:Aave 与 MakerDAO)拆它。

相关文章:

Comments

Link copied to clipboard!