恒定乘积 · 流动性 · 集中区间

没有做市商,
没有订单簿,
只有一条公式

Uniswap 把"定价"这件事从人交给了数学。理解它只需要一个盒子、两种代币,和一条乘积不变的规则——后面所有复杂的东西,包括滑点、无常损失、集中流动性,全部是从这一条推出来的。

先动手,再讲道理拖动滑块,看盒子里发生什么

这是一个装着 100 ETH 和 200,000 USDC 的池子。拖动滑块投入 USDC 买 ETH——注意两个储备量怎么变、价格怎么被你自己的交易推动。先建立手感,公式在下一节。

池中 ETH
池中 USDC
乘积 k
你拿到
ETH
成交均价
新的池价
§1 · 问题的由来

为什么链上必须发明 AMM

不是因为 AMM 更好,而是因为传统的那套在链上根本跑不起来。

订单簿是怎么工作的

你在币安、纳斯达克看到的都是订单簿:买家挂出愿意买的价格和数量,卖家挂出愿意卖的,系统撮合价格重叠的部分。

这套机制有一个隐形的支柱:做市商。必须有人时刻在买卖两侧都挂着单,别人才能随时成交。做市商靠赚买卖价差(bid-ask spread)获利,代价是承担库存风险。没有做市商,订单簿就是空的——你想买,但没人挂卖单。

搬到链上,立刻撞墙

做市商的核心动作是不停地改报价。市场每跳动一下,就要撤单、重新挂单。一个活跃做市商一天可能改几万次报价。

致命的成本结构

在链上,每一次挂单、改单、撤单都是一笔交易,都要付 gas、都要等出块。做市商改一次报价的成本从"几乎为零"变成"几美元 + 十几秒延迟"。这让链上做市在经济上不可行。早期的链上订单簿 DEX 几乎全部因为这个原因失败——不是设计不好,是底层成本结构不允许。

Uniswap 的答案:换一个问题

与其想办法降低做市成本,不如取消做市商

核心思路是:让流动性提供者一次性把资产存进一个池子,然后用一条数学公式自动决定任何时刻的成交价格。存钱是一次交易,之后无论多少人来交易、价格怎么波动,LP 都不需要再做任何操作。

范式对比 订单簿 人报价 → 撮合 → 成交 // 需要持续维护,链上成本高 AMM 公式定价 → 直接兑换 // 存入一次,永远在线

"AMM"是 Automated Market Maker(自动做市商)的缩写。这里的"自动"要精确理解:不是有个机器人在报价,而是根本没有报价这个动作——价格是从池子的状态里算出来的。

§2 · 核心机制

一个盒子,两种代币,一条规则

Uniswap V2 的全部机制可以写在一行里。真的只有一行。

流动性池

想象一个盒子,里面装着两种代币,比如 ETH 和 USDC。这个盒子就是流动性池(liquidity pool)。它是一个智能合约,资产真实地锁在里面。

任何人都可以做两件事:交易(放进一种、取走另一种),或者提供流动性(按比例放进两种,获得份额凭证)。

唯一的规则

恒定乘积不变式(constant product invariant) x · y = k

x 是池里 ETH 的数量,y 是 USDC 的数量,k 是它们的乘积。规则是:任何一笔交易前后,k 必须保持不变。

交易的本质就是:你往池子里放进一些 USDC,拿走一些 ETH。能拿走多少,由"乘积不变"这一条唯一确定——没有别的输入,没有预言机,没有人工干预。

这条规则为什么"聪明"

它保证了两件事:① 池子永远不会被掏空。因为 x 越接近 0,为保持乘积不变,需要投入的 y 就越接近无穷大——买光池子的成本是无限的。② 价格自动随供需调整。你买得越多,剩下的越少,下一单就越贵。这两个性质都不需要额外代码,是公式自带的。

把它画出来

x·y=k 在坐标系里是一条双曲线。池子的全部状态,就是这条曲线上的一个点。交易 = 这个点沿着曲线滑动。

曲线上的一个点拖动看点如何沿曲线移动

横轴是池里的 ETH 数量,纵轴是 USDC 数量。无论你怎么交易,这个点永远不会离开这条曲线——这就是"k 不变"的几何含义。

x (ETH)
y (USDC)
x · y
此处价格 y/x

注意读数里的 x · y:无论你把点拖到哪里,它始终等于 20,000,000。而价格 y/x 则一直在变。这一句话就是整个 Uniswap。

§3 · 亲手算一遍

这个例子请务必自己算

这一节只有一道算术题。算明白它,V2 就学完了八成。

题目

池里有 100 ETH200,000 USDC。你投入 2,000 USDC 买 ETH。你能拿到多少?

先别往下看——凭直觉,当前价格是 200,000 ÷ 100 = 2,000 USDC/ETH,那 2,000 USDC 应该正好买到 1 个 ETH,对吗?

按规则计算

第一步:算出 k k = 100 × 200,000 = 20,000,000 第二步:投入后 USDC 变多 y′ = 200,000 + 2,000 = 202,000 第三步:为保持 k 不变,ETH 必须变成 x′ = ky′ = 20,000,000202,000 = 99.0099 第四步:你拿走的就是减少的那部分 Δx = 100 − 99.0099 = 0.9901 ETH
关键时刻

你拿到的不是 1.0000 ETH,而是 0.9901 ETH。少了 0.0099
这少掉的部分不是手续费(这里还没算手续费),也不是被谁扣走了。它是"乘积必须不变"这条规则的纯数学后果
这就是滑点(slippage)。你之前所有关于"看到价差却赚不到钱"的困惑,源头都在这 0.0099 里。

先猜一下
如果投入的不是 2,000 USDC,而是 20,000 USDC(十倍),你拿到的 ETH 会是多少?
投入十倍,拿到的远不到十倍。x′ = 20,000,000 ÷ 220,000 = 90.909,所以你拿到 9.091 ETH,而按中间价"应该"拿到 10 个。

滑点从 99 bps 暴涨到 909 bps——规模放大十倍,滑点也放大了约十倍。这就是为什么"加大本金"永远救不了一个薄利策略:利润线性增长,滑点也线性增长,而且滑点是从利润里扣的。

加上手续费的完整公式

真实的 V2 会先抽走手续费(0.3%),剩下的部分才参与兑换。记 γ = 1 − f:

getAmountOut · V2 的精确成交公式 Δy = y · γ · Δxx + γ · Δx // 分母里含 Δx —— 你的订单越大,分母越大,单位产出越少 // 这个"分母里的 Δx"就是滑点的数学来源

这个公式是精确的,不是近似。任何人拿到池子的状态,都能算出确定的输出结果——这一点后面 §14 讲 MEV 时会变得很重要。

滑点的速算法

小额时的近似(极其有用) 滑点 ≈ 你的订单池中该侧储备 // 订单占储备的百分之几,滑点就大约是百分之几
用它算一个数,你对链上流动性的认知会永久改变

一个 TVL 300 万美元的池子(两侧各约 150 万),想把滑点控制在 0.1% 以内,最多能下多大的单?
0.001 × $1,500,000 = $1,500
一千五百美元。而且这还没算 0.3% 的手续费。这个数字解释了链上流动性的真实规模。

§4 · 最重要的认知

价格不是被设定的,是被算出来的

Uniswap 合约里没有任何一个变量叫"价格"。这不是实现细节,而是理解一切的关键。

价格只是两个储备量的比值 P = yx // 它是被推导出来的,不是被存储的

这个简单的事实带来三个深远的后果:

① 你的交易改变价格

你买走 ETH,x 变小、y 变大,价格 y/x 自动上涨。你在推高你自己的成交价。订单簿里叫"吃穿几档",这里是连续发生的。

② 池子不知道外面的价格

它不看币安,不用预言机。如果外面 ETH 涨到 2,200 而没人来交易,池价就一直停在 2,000。价格是上一笔交易留下的状态残留。

③ 所以需要套利者

池价 2,000、外面 2,200,就有人来买便宜 ETH 去外面卖。这个牟利行为本身把池价推了上去——不需要任何人负责校准。

整个系统最精妙的地方

Uniswap 的价格准确性,完全是被套利者的贪婪维持的。协议本身什么都不做,它只是构造了一个"价格错了就有钱赚"的结构,然后让市场自己去修。
这也直接推出一个你之前会关心的结论:修价格这件事是有人抢着做的。能赚的价差早就被做掉了,你屏幕上还留着的,大概率是不够本的那些。§8 会把这句话变成一个可计算的判据。

§5 · 参与者之一

交易者:你付出的三种成本

很多人只算手续费,结果实际到手总是比预期少。因为成本有三层,手续费往往是最小的那一层。

成本来源随规模如何变化能否避免
手续费协议抽成,归 LP线性(固定比例)选低费率档的池
滑点曲线的数学后果线性甚至更快上升拆单、换深池
MEV 提取被抢跑/三明治取决于你设的滑点上限私有 RPC、收紧滑点
成本分解器看三种成本各占多少

全条代表"按中间价理想应得的量"。青色是你实际到手,其余是被吃掉的部分。拖动订单规模,观察滑点如何迅速超过手续费。

理想应得
实际到手
手续费
bps
滑点
bps
合计成本
bps
观察这个规律

小额时手续费占主导,滑点几乎看不见;规模一上去,滑点迅速反超并主导一切。这就是为什么"这个池手续费才 0.05%"这种判断是不完整的——真正决定成本的是你的订单相对池子有多大

§6 · 参与者之二

LP:池子里的钱是谁的

池子里的资产不属于协议,属于流动性提供者。理解 LP 的处境,是理解 AMM 经济学的核心。

怎么做 LP

按当前池内比例存入两种资产(比如 1 ETH + 2,000 USDC),获得 LP 代币作为份额凭证。想退出时,销毁 LP 代币,按当时的池内比例取回资产。

注意"按当时的比例"——这是后面无常损失的伏笔。你存进去的比例,和你取出来的比例,大概率是不一样的。

手续费怎么发给 LP

这里有个巧妙的设计:手续费不单独发放,而是直接留在池子里。

手续费的流向 每笔交易抽 0.3% → 留在池内 → k 缓慢变大 ↓ LP 份额不变,但每份能赎回的资产变多 // 不需要分红逻辑,不需要 claim,数学自动完成分配

所以 LP 的收益体现为"份额对应的资产变多",而不是账户里多出一笔钱。这也意味着手续费收益是自动复投的

LP 收益累积交易量如何转化为 LP 收益
池日收入
你的日收入
年化(不计 IL)
%
日换手率
×
这个年化数字是骗人的

上面算出的年化只是收入,不是利润。它完全没有减去无常损失。你在各种平台上看到的 APY 大多也是这么算的——这是 DeFi 里最常见的误导。真实收益必须减去下一节的内容。

§7 · LP 的代价

无常损失:为什么 LP 总是站在错误的一边

这是整份文档最重要的一节。理解它,你就理解了 AMM 的全部经济学。

先看现象

池子初始:100 ETH + 200,000 USDC,ETH 价格 2,000。现在 ETH 外部价格翻倍到 4,000。套利者会来把池价推到 4,000。推完之后,池子里剩下什么?

价格变为 m 倍后的储备(由 xy=k 与 P=y/x 联立) x′ = xm = 1002 = 70.71 ETH     y′ = y·√m = 200,000×√2 = 282,843 USDC

ETH 从 100 个变成了 70.71 个,USDC 从 200,000 变成了 282,843。池子在 ETH 上涨的过程中,把 ETH 卖掉了。

算一下亏了多少

两种选择的对比(ETH 现价 4,000) 做 LP: 70.71 × 4,000 + 282,843 = $565,685 什么都不做: 100 × 4,000 + 200,000 = $600,000 ───────────── 差额 = −$34,315 (−5.72%)
无常损失(Impermanent Loss)

这 5.72% 就是无常损失。注意:LP 并没有亏钱(从 40 万变成了 56.5 万),但他比"什么都不做"少赚了 3.4 万。
"无常"这个词有误导性——它的原意是"如果价格回到原点,损失就消失"。但只要你在价格没回到原点时退出,损失就是永久的

为什么会这样:被迫的反向操作

因为 LP 承诺"任何时候都按公式和你交易",他是完全被动的:

ETH → 套利者来买走池里的 ETH → LP 手里 ETH 变少、USDC 变多 // 涨了在卖 ETH → 套利者来卖出 ETH 给池子 → LP 手里 ETH 变多、USDC 变少 // 跌了在买
一句话概括 LP 的处境

LP 总是在上涨时卖出、在下跌时买入。这是被公式自动执行的、方向永远错的再平衡。
所以做 LP 的本质是:收取手续费作为报酬,承担"总是站在错误一边"的代价。手续费 > 无常损失就赚,反之就亏。
再进一步:LP 实际上是在卖出波动率——价格越震荡,被套走的越多。这就是为什么专业机构把 LP 头寸当作期权空头来管理。

无常损失曲线拖动价格变化倍数

注意曲线的形状:无论涨还是跌,都是损失。只有价格回到原点(m=1)时损失才为零——这说明 IL 与方向无关,只与「偏离程度」有关。默认值对应上面的例子(投入 $400k = 100 ETH + 200,000 USDC,价格 ×2)。

无常损失
%
LP 持仓价值
若持币不动
差额
价格变化无常损失直观理解
±0%(不变)0%纯赚手续费,LP 的理想状态
×1.25 或 ×0.8−0.62%小幅波动,手续费通常能覆盖
×1.5−2.02%开始明显
×2 或 ×0.5−5.72%需要可观的手续费才能覆盖
×3−13.40%手续费很难覆盖
×5−25.46%单边行情对 LP 是灾难
检验理解
一个 ETH/USDC 池和一个 USDC/USDT 池,哪个的无常损失风险更大?
无常损失只取决于两种资产的相对价格变化幅度。USDC 和 USDT 都锚定美元,相对价格几乎恒为 1,所以 m≈1,IL≈0。

这就是为什么稳定币池是 LP 的低风险选择,也是为什么它们能用极低的费率档(0.01%)——LP 不需要高手续费来补偿风险。反过来,高波动的币对必须配高费率,否则没人愿意做 LP。费率档的设计,本质上是在给波动率定价。
§8 · 参与者之三

套利者:系统的免费校准工

他们不是寄生虫,而是这套机制不可或缺的一环。没有他们,池价会永远停留在错误的地方。

套利的机制

池价 2,000,外部 2,020(高 100 bps)。套利者在池里买 ETH、去外面卖。这个动作把池内 ETH 买少、价格推高,直到池价 = 外部价时,利润恰好归零,套利自然停止。

最优套利规模与利润(Vhalf = 池的单侧价值) Δopt = Vhalf · S − f2      利润 = Vhalf · (S − f)²4 // S = 价差,f = 手续费率。注意分子是平方
两个立刻能用的结论

① 手续费是硬门槛。若价差 S ≤ 手续费 f,套利在数学上就不存在——与你的速度、gas 优化、技术水平毫无关系。一个 17 bps 的价差在 0.3% 手续费的池子上,永远不可能盈利。
② 利润按平方衰减。价差减半,利润变成四分之一。小价差不是"利润薄",而是"利润以二次速度趋近于零"。

套利计算器平方律的直观演示
有效价差
bps
最优规模
毛利润
扣 gas 后
盈亏平衡价差
bps
套利者与 LP 是同一枚硬币

回头看 §7:LP 亏掉的无常损失,正是套利者赚走的那部分。价格变动时,套利者以"旧价"从 LP 手里买走便宜资产,这个转移就是 IL 的物理来源。
所以整个系统是一个清晰的三方结构:交易者付手续费 → LP 收手续费但被套利者收割 → 套利者维持价格准确。你参与 AMM,就是在选择站在哪个位置。§14 会把这个循环完整画出来。

§9 · V2 的问题

绝大部分钱从来没被用过

V2 的公式很优雅,但有一个巨大的浪费。看懂这个浪费,就知道 V3 为什么必须出现。

回到那条双曲线:它从 x→0 一直延伸到 x→∞。这意味着 V2 池的流动性,均匀铺在从 0 到无穷大的整条价格范围上

如果 ETH 现价 2,000,那么池子里有一部分钱在等着"ETH 跌到 5 美元时买入",还有一部分在等着"ETH 涨到 50 万时卖出"。这些钱永远不会被用到,但它们真实地占用着 LP 的资金。

闲置资金可视化阴影 = 实际会被用到的部分

拖动"价格实际波动范围",看看在这个范围内真正被动用的流动性只占多小一部分。剩下的全是死钱。

实际动用
%
完全闲置
%
若集中于此
×
把这个浪费翻译成钱

回到 §3 那个数字:TVL 300 万的 V2 池,10 bps 滑点下只能吃 $1,500
不是因为池子小,而是因为那 300 万里只有极小一部分在当前价格附近工作。V3 要解决的就是这件事。

§10 · V3 的核心想法

让 LP 自己选价格区间

既然 ETH 大概率就在某个范围内波动,为什么要为 5 美元和 50 万美元准备流动性?

V3 允许 LP 指定一个价格区间 [pa, pb],资金只在这个区间内提供流动性。同样的钱,在你关心的价格附近深得多

资本效率倍数(区间 [P/r, P·r]) E = 11 − r−1/2 // 区间越窄,E 越大,且是超线性增长
区间宽度资本效率$3M 池在 10bps 下的容量代价
V2 全区间$1,500永不失效,但资金几乎全闲置
±25%9.5×$14,208较稳,适合高波动币对
±10%21.5×$32,232偶尔需要调整
±5%41.5×$62,241需要定期管理
±1%201.5×$302,248频繁失效,管理成本高
±0.5%401.5×$602,249波动稍大即失效
V2 vs V3 深度对比同样的钱,不同的分布

上下两条是同样金额的流动性。上面按 V2 均匀铺开,下面集中在你选的区间内。柱子的高度就是那个价格上的深度。

资本效率
×
当前状态
V3 相对深度
×

把"当前价格偏移"拖到区间之外,你会看到 V3 的深度直接归零——这是理解 V3 的关键,下一节展开。

§11 · V3 的内部构造

虚拟储备与 Tick

好消息:在当前价格所在的区间内,V3 的行为和 V2 完全一样。你已经学的东西全部可以复用。

虚拟储备:把 V3 变回 V2

V3 在当前区间内,等价于一个储备量被"放大"了的 V2 池。这个放大后的储备叫虚拟储备:

虚拟储备(区间内完全等价于 V2) xvirtual = LP      yvirtual = L · √P // L = 流动性深度,P = 当前价格 // 有了这两个,§2-§8 的所有公式原样适用
这是学习 V3 最省力的路径

不要把 V3 当成新东西学。它就是 V2 + 一个"当前区间"的概念。价格在区间内移动时,用虚拟储备套 V2 公式即可;唯一的新内容是价格跨越区间边界时会发生什么

Tick:价格的离散刻度

LP 不能随意选任意价格作为边界,只能选预设的刻度点,这些点叫 tick:

tick 与价格的关系 P = 1.0001tick // 相邻两个 tick 相差 0.01% = 1 bps // tickSpacing 决定 LP 实际能选的粒度,费率档越高间距越大

必须认识的四个字段

sqrtPriceX96

当前价格的平方根,以 Q64.96 定点数存储。之所以存平方根,是因为上面的公式里全是 √P,存平方根可以避免反复开方。它是价格,不是价格的平方。

tick

当前价格对应的刻度序号。用它可以快速定位在哪个区间内,以及距离下一个边界还有多远。

liquidity

只是当前激活区间内的 L,不是全池总流动性。这是最容易误读的字段——用它估算大额订单会出错。

slot0 的价格

它是中间价,不是你能成交的价格。直接拿它当成交价,就会重复本文开头那个 0.9901 的错误。

Tick 穿越:深度不是一个数,是一条阶梯

不同 LP 选了不同区间,所以流动性沿价格轴的分布是不均匀的。你的订单吃穿当前区间后,会进入下一个 L 可能完全不同的区间。

Tick 穿越模拟紫色 = 你的订单吃掉的部分

每根柱子是一个 tick 区间的流动性。拖动订单规模,看它逐个吃穿。下方两条曲线对比真实滑点(逐段积分)与把 L 当常数的估计——两者的分岔就是模型误差。

穿越 tick 数
真实滑点
bps
恒定 L 估计
bps
估计误差
×
误差可以往两个方向走

把分布形态切到「双峰」,你会看到误差倍数掉到 1 以下:
· 单峰/参差:流动性向外变薄,恒定 L 低估滑点 → 你以为能成交,实际亏损;
· 双峰:外侧还有一座流动性山,恒定 L 高估滑点 → 你错过本可以做的交易。
你无法靠加安全边际兜底,因为你不知道误差朝哪边。这就是为什么必须用 Quoter 实测,而不是自己套公式估算。

§12 · 没有免费的午餐

V3 的代价

资本效率提高 200 倍,不可能没有代价。代价有两个,而且都是结构性的。

代价一:价格跑出区间就完全失效

当价格离开你设定的区间,你的资金全部变成单一资产,不再赚取任何手续费,也不再参与做市。你相当于被动完成了一次全额换仓,然后闲置。

价格跌破下界 → 你的仓位 100% 变成 ETH(在下跌中接了全部的盘) 价格涨破上界 → 你的仓位 100% 变成 USDC(在上涨中卖光了全部) // 两种情况都是:你在最不该换仓的方向上,被换到了底

代价二:无常损失同比放大

这一点更根本。资本效率和无常损失是同一枚硬币的两面。

你把 200 倍的深度提供在一个窄区间内,意味着在这个区间内的价格波动中,套利者能从你手里拿走的量也放大了约 200 倍。不存在"只要效率、不要风险"的选项——这在数学上就是同一个 L。

区间宽度的权衡效率、失效风险、IL 三者联动
资本效率
×
单日失效概率
%
IL 放大倍数
×
评价
V3 把 LP 从"存钱"变成了"经营"

V2 的 LP 可以存进去就不管;V3 的 LP 必须持续判断波动率会有多大、区间设多宽、什么时候该调整。这是一份主动管理的工作。
好消息是:这份工作拼的是判断力和纪律,不是速度。它不需要和高频机器人抢毫秒——这一点使它比套利更适合个人参与。

§13 · 串起来

一笔交易的完整旅程

从你点下"swap"到代币到账,中间发生的每一步。这一节把前面所有零件装回整机。

交易生命周期待播放
第 3 步是你唯一能控制的地方

路由器算出预期输出后,你需要设定一个最小可接受输出(slippage tolerance)。这个数字既保护你不被极端价格成交,也公开宣布了你愿意承受的最大损失——§14 会讲为什么这是个悬赏。

§14 · 全景

三方博弈与价值流向

交易者、LP、套利者构成一个闭环。看清这个闭环,你就知道自己站在哪个位置、赚谁的钱、被谁赚。

价值流向图箭头粗细 = 价值流量

拖动市场波动率,观察价值在三方之间的分配如何变化。波动率是这个系统的核心变量

LP 手续费收入
LP 被套走
LP 净结果
当前环境利于
角色收入来源承担的风险核心能力要求
交易者不为赚钱,为换资产滑点、MEV 提取选对池子、设对滑点
LP手续费(自动复投)无常损失 / 卖出波动率判断波动率、管理区间
套利者价格偏离的修正差额失败成本、被抢先速度、覆盖面、资本

MEV:第四个玩家

回忆 §3:AMM 的输出是完全可预测的。任何人看到内存池里你的待处理交易,都能精确算出它会把价格推到哪。于是:

三明治攻击 ① 抢先买入 → 把价格推高到接近你设的滑点上限 ② 你的交易成交 → 你以被推高的价格买入,吃满滑点 ③ 立即卖出 → 攻击者在你推高的价位上出货 攻击者的利润上界 ≈ 你自己设定的 slippage tolerance
滑点容忍度不是安全垫,是悬赏金额

把 slippage 设成 3%,等于公开宣布你愿意承受 3% 的损失,攻击者会精确地吃掉接近这个上限的部分。
正确做法:根据实际池深度计算出所需的最小值,而不是"设大一点免得交易失败"。更进一步可以用 MEV 保护型 RPC,让交易不进入公开内存池。

§15 · 纠错

八个常见误解

这些误解每一个都会直接导致亏损。对照检查一遍。

常见说法为什么错
"TVL 高 = 深度好"V3 里 TVL 可能分散在很宽的区间上。决定深度的是当前价格附近的 L,不是总额。两个同样 $10M 的池,深度可能差 50 倍。
"看到的价格就是能成交的价格"那是中间价,只对无穷小的订单成立。你的实际成交价必然更差,差多少取决于你的订单相对池子的大小。
"无常损失会自动恢复"只有价格回到原点才恢复。你在任何其他时点退出,损失都是永久的。"无常"这个词本身就有误导性。
"APY 20% 的池子稳赚"APY 通常只算手续费收入,不减无常损失。高 APY 往往正是因为高波动——而高波动恰恰意味着高 IL。
"滑点设大一点免得失败"你设的滑点就是攻击者的利润上限。设大 = 主动提高悬赏。
"加大本金能提高套利利润"滑点随规模同步上升,而且 利润 ∝ (S−f)² 的容量由池子决定。超过最优规模后,做得越大赚得越少甚至亏。
"手续费低的池子一定更划算"低费率档通常也意味着LP 得到的补偿少,深度可能更差。总成本 = 手续费 + 滑点,要一起算。
"V3 就是更好的 V2"V3 是用管理成本换资本效率。对于不想管理的 LP,V2 式的宽区间反而更合适。没有普遍更优,只有更适合。
最后一道
某池 TVL 显示 $50M,你想下一笔 $200k 的单。以下哪个判断是对的?
正确答案是信息不足。如果这是 V3 池,那 $50M 可能大部分分布在远离当前价格的区间上,当前价格附近的实际深度也许只有几十万——你的 $200k 会吃穿多个 tick,滑点远超预期。

反过来,如果流动性高度集中在当前价格,$200k 的滑点可能只有几个 bps。同样的 TVL,同样的订单,结果可以差几十倍。

唯一可靠的做法:调 Quoter 拿真实报价,或者读取 tick 分布自己逐段积分。
§16 · 收束

回到你最初的问题

现在可以回答"为什么监控价格没有意义"了——而且是从第一性原理回答。

为什么中间价不可成交

因为 P = y/x 是曲线上那一点的瞬时比值,而你的交易会让这个点滑动。中间价只对无穷小订单成立。

为什么容量由池子决定

滑点 ≈ 订单 ÷ 储备。储备就那么多,容量就那么大,和你多想下大单无关

为什么利润随价差平方衰减

推动价格 S 所需的量 ∝ S,每单位量赚的利润也 ∝ S。两者相乘就是 S²

为什么手续费是硬门槛

套利必须在池里成交,必然付费。价差没超过手续费,数学上就没有正利润——和速度无关。

这套数学同时打开的那扇门

如果结论是"套利对个人基本关闭",那么同一套数学指向了另一边:做 LP 就是站到这个等式的另一侧
套利者赚的钱,正是 LP 亏的无常损失;LP 赚的手续费,正是交易者付的成本。你可以选择做那个被收割的被动方,也可以选择理解波动率之后主动管理区间的那个人。
后者拼的是判断力,不是毫秒。这是个人在这个系统里唯一有结构性优势的位置。

如果只做一件事

拿纸笔算这一道题

池里 100 ETH / 200,000 USDC,投入 2,000 USDC,算出你拿到 0.9901 ETH 而不是 1.0000。
0.0099 就是滑点的全部本质。算明白它,V2 学完八成,V3 只是在上面加一层区间。

接下来的顺序

  1. V2 公式(半天)—— 推导 getAmountOut,算几个不同规模的滑点
  2. 容量反解(半天)—— 给定滑点预算,算最大可下单金额。这是最实用的一个技能
  3. V3 概念层(1–2 天)—— 虚拟储备、tick、资本效率公式。先别碰定点数运算
  4. Quoter 实测(1 天)—— 用 staticCall 调 QuoterV2,和你的手算对拍
  5. 选定方向 —— 用真实数据判断:继续做套利,还是转向 LP 与区间管理
§17 · 沙盘

三条链,三个池子,一个能跑起来的市场

前面十六章都是静态的。这一章给你一个活的市场:价格自己波动,机器人自己套利,你和它们在同一套规则下竞争。

这个沙盘不是动画,是模拟

没有任何脚本在"播放"剧情。外部参考价按几何布朗运动随机游走,噪声交易者随机下单推动池价偏离,机器人用 §8 那个平方律判据自主决策是否套利。你看到的每一个价差,都是这些机制真实作用的结果——所以你可以反过来追问它为什么出现、为什么消失。

17.1 三条链的设定

三个池子交易同一种资产(ETH/USDC),但参数不同。这些差异不是随便设的,它们会导致完全不同的行为:

池 TVL手续费gas出块预期表现
Ethereum$40M5 bps$1412s深、慢、贵。小机会不值得动
Arbitrum$8M5 bps$0.150.25s中深、快、便宜。套利最活跃
Base$3M30 bps$0.052s浅、费率高。价差常驻但难赚

先算一个数,它决定了每条链上"价差要多大才值得动手":

盈亏平衡价差(由 §8 的平方律反解) Sbe = f + 2√( gas / Vhalf ) Ethereum 5bps + 2√(14 / 20M) = 21.7 bps // gas 贵抬高门槛 Arbitrum 5bps + 2√(0.15 / 4M) = 8.9 bps // 两头都低,门槛最低 Base 30bps + 2√(0.05 / 1.5M) = 33.7 bps // 手续费主导
这三个数解释了你之前观察到的现象

为什么某些池子的价差长期挂在那里没人管?因为它没超过那个池子的盈亏平衡线。Base 上一个 25bps 的价差会稳定存在,而同样的价差在 Arbitrum 上会在几秒内被抹平。不同池子的"常驻价差水平"天然不同,这是参数决定的,不是市场效率的差异。

17.2 沙盘

下面就是那个市场。先点「开始」让它跑几十秒,只看不动手,观察三条链的池价怎么围绕外部价上下摆动、机器人什么时候出手。

实时市场沙盘 未开始
外部参考价
最大价差
bps
机器人累计获利
机器人出手次数
LP 累计手续费
LP 累计被套走
先观察这三件事,再往下读

① 关掉机器人,看池价怎么慢慢漂离外部价、越飘越远——这就是"AMM 不知道外面的价格"。
② 重新打开机器人,看它们怎么把三条线迅速拽回。价格准确性是被贪婪维持的,不是被协议维持的。
③ 注意 Base(黄线)总是偏离得最久——因为它的盈亏平衡线是 33.7bps,小偏离根本不值得机器人动手。

§18 · 动手

你来做这笔交易

看懂了机器人在做什么,现在换你上场。每一步都会给出计算过程、依据的原理,以及这一步对市场的影响。

交易台 · 六步向导 第 1 步 / 共 6 步

这个交易台连接上面的沙盘,用的是当前真实的池子状态。市场在跑的时候数据会变——这本身就是一个重要的体验:你决策所依据的价格,可能在你决策的过程中就已经变了。

为什么要走完这六步

大多数人对套利的心智模型是两步:「看到价差 → 赚到价差」。真实流程有六步,而其中四步都在吃掉你的利润。走完一遍,你对"利润实现率"会有完全不同的直觉。

§19 · 结果分析

为什么你算的和实际拿到的差这么多

这一节把上面那笔交易的每一分钱去向拆开。这是整个沙盘最有价值的一屏。

利润实现率分析天真估算 vs 实际到手

左边是"价差 × 本金"的天真估算,右边是真实结果。中间每一段都是被吃掉的部分。拖动规模,注意净利润会先升后降,然后变成负数

天真估算
源池滑点
目标池滑点
手续费+桥费
实际净利
利润实现率
%
最优规模曲线净利润随规模先升后降

这条曲线是上面那些参数的直接后果。峰值就是你的最优下单量,越过峰值后,滑点上升的速度超过收益增长的速度。

最优规模
峰值净利
盈亏翻负于
你当前规模
这组数字请记住

默认参数(Base $3M → Arbitrum $8M,价差 200 bps)下:
· 最优规模只有 约 $8,000,峰值净利 约 $67;
· 下到 $50,000 时,天真估算说赚 $1,010,实际亏 $1,432——连符号都是反的;
· 下到 $400,000,亏损超过 $100,000
200 bps 是一个巨大的价差,现实中极少出现。而它能承载的利润是 67 美元。这就是链上流动性的真实规模。

§20 · 竞速

和机器人抢同一个机会

前面假设机会一直在等你。现实里它不会。这一节模拟真实的竞争环境。

抢单模拟按下开始

价差出现的那一刻,你和几个机器人同时看到了它。谁先落地谁吃掉,后到的人面对的是已经被抹平的池子——不是少赚,是白付 gas。

本轮结果
100 轮胜率
%
100 轮净收益
失败的 gas 损耗
这里有一个隐藏的陷阱

把胜率调到很低时,你会发现净收益是负的,即使每次赢都赚钱。因为输掉的那些交易仍然要付 gas。
更糟的是逆向选择:你能抢到的单,往往正是机器人算完之后主动放弃的那些——可能是有毒代币、可能是有它们看到而你没看到的成本。成交率高不一定是好事。

§21 · 换个位置

做 LP:站到等式的另一边

同一个沙盘,同一批机器人,但这次你不是去抢价差,而是去当那个被套利的人——然后看手续费能不能补回来。

LP 头寸模拟与沙盘同步

在某条链的池子里放入流动性。每一笔经过的交易给你手续费,每一次机器人套利从你手里拿走一点。两者的赛跑就是 LP 的全部经济学。

资本效率
×
累计手续费
累计无常损失
净结果
区间状态
年化(推算)
%
把区间调窄再看一次

调窄区间,资本效率上去了,手续费收入随之上升——但无常损失同比放大,而且价格更容易跑出区间。跑出去之后,手续费收入直接归零,而你已经承受的损失不会退回来。
这就是 §12 说的那个权衡,现在你可以在一个真实波动的市场里亲手试。试着找到那个让净结果最大的区间宽度——你会发现它取决于波动率,而不是取决于你想赚多少。

§22 · 复盘

这个沙盘想让你带走的六件事

如果前面的操作只留下六句话,应该是这些。

① 价差是有成本的信号,不是钱

价差存在,只说明"还没有人觉得值得动手"。它的大小要和那个池子的盈亏平衡线比,而不是和零比。

② 容量比价差更稀缺

200bps 的巨大价差只能承载 $8,000 和 $67 的利润。限制你的从来不是找不到机会,是机会装不下钱。

③ 天真估算会算错符号

不是"高估了利润",是把亏损算成了盈利。$50k 那一档:估算 +$1,010,实际 −$1,432。

④ 每条链有自己的门槛

21.7 / 8.9 / 33.7 bps。先看门槛再看价差,能过滤掉绝大部分无效计算。

⑤ 输掉的单也要付钱

胜率不够时,即使每次赢都赚钱,总账仍是负的。而且你能抢到的,常常是别人放弃的。

⑥ 另一边不需要抢速度

做 LP 拼的是对波动率的判断和区间管理的纪律。这是个人唯一有结构性优势的位置。

把沙盘接到现实

沙盘里所有参数都对应一个你能在链上实测的量。想把它变成真实工具,只需替换这些输入:

沙盘里的参数现实中怎么拿注意
池子状态 x, yV2 读 getReserves();V3 读 slot0 + liquidity + tick 分布V3 只读 slot0 会严重出错
成交输出QuoterV2.quoteExactInputSingle 静态调用它不是 view,必须 staticCall
手续费档同一对要枚举全部档位分别报价深度常在你没查的那档
gas 成本各链 gas oracle,base + priority拥堵时会翻数倍,要动态取
桥费与延迟桥的 quoteSend() / 报价接口延迟期内价格会漂移
竞争强度观察你的历史成交率成交率异常高要警惕逆向选择
最后一步,一个下午就能做完

把你已经采集的历史价差,逐条用 Quoter 在你真实打算的规模上重算一遍,统计有多少条净利仍然为正。
这个比例会告诉你该继续做套利,还是转向 §21。它比继续采集新数据有用得多。