永续合约 05 - vAMM 永续合约演进史
vAMM (Virtual AMM) 是 DeFi 永续合约的第一代链上定价方案, 借用 x * y = k 曲线定价但不持有真实代币. 本文梳理从 Perpetual Protocol v1 到 v2 集中流动性再到 Drift 的 vAMM+DLOB 混合方案的演进过程, 分析每一代的改进点和遗留问题.
一、术语表
1.1 vAMM 基础
| 术语 | 英文 | 含义 |
|---|---|---|
| vAMM | Virtual AMM | 虚拟自动做市商, 用 AMM 公式定价但不持有真实代币 |
| 虚拟储备 | Virtual Reserves | vAMM 中的 x_v 和 y_v, 仅用于计算价格, 不是实际代币余额 |
| k 值 | k (Constant Product) | x_v * y_v = k 中的常数, 决定池子的虚拟深度和滑点 |
| 保证金池 | Margin Vault / Clearing House | 存放所有交易者保证金的合约, 负责真实资金的结算 |
| 虚拟价格 | vAMM Price | 由虚拟储备计算的价格, price = y_v / x_v |
1.2 协议与架构
| 术语 | 英文 | 含义 |
|---|---|---|
| Clearing House | 清算所 | 管理保证金、开平仓、清算的核心合约 |
| Insurance Fund | 保险基金 | 用于覆盖穿仓损失的资金池 |
| DLOB | Decentralized Limit Order Book | 去中心化限价订单簿, Drift 的混合流动性层之一 |
| JIT | Just-In-Time Liquidity | Drift 中做市商在交易执行前一刻注入的即时流动性 |
| Maker | 流动性提供者 | Perp v2 中在 vAMM 内提供集中流动性的角色 |
| Taker | 交易者 | 在 vAMM 中执行交易的一方 |
1.3 风险
| 术语 | 英文 | 含义 |
|---|---|---|
| Squeeze | 挤压/逼仓 | 大户通过大量单边交易推动虚拟价格到极端, 触发他人清算 |
| 脱锚 | De-peg / Price Divergence | vAMM 价格长时间偏离现货指数价格 |
| k 值治理 | k Governance | 通过治理调整 k 值, 平衡滑点和价格灵敏度 |
二、vAMM 概念: 虚拟的做市商
2.1 从真实 AMM 到虚拟 AMM
在 Uniswap (真实 AMM) 中:
- LP 存入真实的 token0 和 token1, 形成储备 x, y
- 交易者用一种 token 换另一种, x * y = k 决定价格
- LP 承担无常损失, 交易者获得真实 token
vAMM 的核心洞察: 永续合约不需要真实的 token 交换, 只需要一个定价机制.
在 vAMM 中:
- 没有 LP 存入代币, x_v 和 y_v 是协议设定的虚拟数字
- 交易者开多/开空, 虚拟储备发生变化, 产生一个虚拟价格
- 所有资金结算在独立的保证金池 (Clearing House) 中进行
关键洞察: vAMM 把 AMM 的两个功能拆开了:
- 定价功能 → vAMM (虚拟池)
- 资金托管功能 → Clearing House (保证金池)
这样就不需要 LP 存入两种 token, 只要交易者存入 USDC 保证金就够了.
2.2 为什么叫 “虚拟”?
1 | |
三、Perpetual Protocol v1
3.1 历史背景
Perpetual Protocol v1 (2020 年底, xDai/Gnosis Chain) 是第一个将 vAMM 概念落地的永续合约协议. 它证明了一个重要的事情: 链上永续合约不需要订单簿, 也不需要 LP.
3.2 架构
三个核心组件:
| 组件 | 职责 | 是否持有真实资金 |
|---|---|---|
| vAMM | 定价: 根据交易方向和大小, 计算成交价格 | 否 |
| Clearing House | 结算: 管理保证金, 计算盈亏, 执行清算 | 是 |
| Insurance Fund | 兜底: 当清算不足以覆盖亏损时, 由保险基金补偿 | 是 |
3.3 开多/开空在 vAMM 中的运作
核心直觉:
- 开多 (Long) = 在虚拟池中用 quote token (USDC) 买入 base token (ETH) → 推高虚拟价格
- 开空 (Short) = 在虚拟池中卖出 base token (ETH) 换取 quote token → 压低虚拟价格
- 平仓 = 反向操作
1 | |
1 | |
对比: 同样的交易, k 值差 10,000 倍, 滑点从 0.5% 飙到 56%.
k 值本质上决定了 vAMM 的 “虚拟深度”. 实际协议会设置很大的 k 来模拟合理的市场深度.
但 k 值设多大, 本身就是一个治理难题 (后面第 6 节讨论).
3.4 k 值的设定
k 值决定了 vAMM 的 “虚拟深度”:
| k 值 | 影响 | 类比 |
|---|---|---|
| k 大 | 滑点小, 交易体验好, 但价格对交易不敏感 | 像一个深水游泳池, 扔石头几乎没波浪 |
| k 小 | 滑点大, 价格对交易敏感, 容易被操纵 | 像一个浅水杯, 滴一滴水就溢出 |
Perpetual Protocol v1 中, k 值由治理 (governance) 调整, 不是市场自然形成的.
这是 vAMM 最根本的设计缺陷之一: 深度是人为设定的, 不是真实供需决定的.
四、vAMM 的数学
4.1 虚拟储备常数乘积
vAMM 复用了 Uniswap V2 的常数乘积公式 (参见 Uniswap V2 常数乘积公式):
1 | |
4.2 开多仓位计算
交易者用 notional_quote 金额开多 (实际支付 notional_quote / leverage 的保证金):
1 | |
4.3 开空仓位计算
1 | |
4.4 滑点公式
1 | |
4.5 数值验证
1 | |
五、Perpetual Protocol v2 (Curie)
5.1 v1 的问题
Perpetual Protocol v1 上线后暴露了几个关键问题:
- k 值治理: 人为设定深度, 调整滞后
- 资本效率低: 虚拟深度在全价格范围均匀分布 (和 Uniswap V2 一样的问题)
- Maker 无激励: 没有 LP 的角色, 协议无法吸引做市流动性
- 滑点竞争力差: 和 CEX 及 Oracle 型协议相比, 滑点偏大
5.2 v2 的方案: 用 Uniswap V3 做 vAMM
Perpetual Protocol v2 (2021, Optimism) 做了一个大胆的决定: 直接复用 Uniswap V3 合约作为 vAMM 引擎.
5.3 Maker vs Taker
v2 引入了 Maker 角色 (类比 Uniswap V3 的 LP):
| 角色 | 行为 | 盈利来源 | 风险 |
|---|---|---|---|
| Taker | 开多/开空 (交易) | 仓位盈利 | 仓位亏损, 清算 |
| Maker | 在 vAMM 的 tick 范围内提供流动性 | 手续费 + funding 收入 | 无常损失 (虚拟), 对手方风险 |
Maker 存入保证金到 Clearing House, 然后在 Uniswap V3 vAMM 的指定价格区间提供虚拟流动性. 这和在 Uniswap V3 做 LP 的体验类似, 但所有流动性都是虚拟的.
5.4 为什么选 Uniswap V3?
- 成熟 & 经过审计: Uniswap V3 是最经过实战检验的 AMM 合约
- 集中流动性: Maker 可以在当前价格附近集中提供流动性, 大幅减少滑点
- Tick 系统: 现成的离散价格点和 bitmap 结构, 适合永续合约的精确定价
- 手续费机制: 可以复用 Uniswap V3 的手续费累积逻辑, 激励 Maker
关于 Uniswap V3 的集中流动性机制, 详见 Uniswap V3 集中流动性机制.
六、Drift Protocol (Solana)
6.1 混合流动性模型
Drift Protocol (Solana, 2021) 采用了 vAMM + DLOB + JIT 的三层混合架构, 试图解决纯 vAMM 的流动性问题:
6.2 为什么用混合而不是纯 vAMM?
| 纯 vAMM | Drift 混合模型 |
|---|---|
| 所有交易都和虚拟池成交 | JIT 做市商提供真实报价, 滑点更小 |
| k 值决定一切 | vAMM 只是兜底, 大部分交易在 JIT/DLOB 完成 |
| 容易被操纵 | 多层流动性分散操纵风险 |
| 价格可能长期脱锚 | DLOB 的限价单提供锚定力 |
6.3 JIT 做市商 (Just-In-Time Liquidity) 详解
JIT 做市是 Drift 最核心的创新: 做市商不是提前挂单等着, 而是看到交易请求后, 在执行前的瞬间注入流动性.
1 | |
JIT 的完整流程:
为什么 JIT 只在 Solana 可行?
1 | |
JIT vs 普通做市 vs AMM LP:
| 维度 | JIT 做市 (Drift) | 普通做市 (dYdX) | AMM LP (Uniswap) |
|---|---|---|---|
| 流动性注入时机 | 看到交易后瞬间注入 | 提前挂单等待 | 存入池子长期锁定 |
| 风险暴露时间 | ~400ms (1 个 slot) | 秒~小时 (挂单期间) | 永久 (直到撤出) |
| 逆向选择风险 | 极低 (已知价格) | 高 (价格可能跳变) | 高 (无常损失) |
| 资金效率 | 极高 (按需使用) | 中 (资金锁在挂单里) | 低 (大部分闲置) |
| 技术门槛 | 高 (需要监听 + 快速响应) | 高 (高频交易基础设施) | 低 (存钱就行) |
| 对用户的好处 | 更窄 spread, 更好价格 | 深度好, 大单滑点低 | 无需许可, 人人可参与 |
JIT 做市的本质: 做市商最怕的是 “我挂了单, 价格突然变了, 我被吃掉了” (逆向选择). JIT 把做市从 “猜价格方向的赌博” 变成了 “看到确定订单再报价的生意”. 风险大幅降低, 做市商愿意给更窄的 spread, 用户得到更好的价格. 这是 Drift 能在 Solana 上和订单簿型 DEX 竞争的关键.
6.4 为什么 Drift 选 Solana
Drift 选择 Solana 而非 EVM 链, 正是因为 JIT 做市需要 Solana 的特性:
- 低延迟 (~400ms slot time): JIT 做市商必须在交易前瞬间响应, 400ms 窗口刚好够
- 低 Gas: 频繁更新订单簿不会造成高成本
- 并行执行: Sealevel 运行时允许不同市场并行处理
七、vAMM 的问题
7.1 Squeeze 风险 (挤压/逼仓)
这是 vAMM 最严重的问题:
1 | |
在真实 AMM (如 Uniswap) 中, 如果价格偏离, 套利者会立即搬砖纠正.
但 vAMM 没有真实的代币可以搬, 只有 funding rate 这一个纠偏手段, 而 funding rate 的纠偏速度太慢.
7.2 k 值治理难题
1 | |
7.3 脱锚风险
vAMM 价格可能长时间偏离现货:
| 场景 | 原因 | 后果 |
|---|---|---|
| 单边行情 (如暴跌) | 大量开空推低 vAMM 价格, 但 k 值限制纠偏速度 | vAMM 价格 < 现货价格 |
| 流动性真空 | 某方向没人开仓, 无法推回价格 | 长期脱锚 |
| Funding rate 不足 | 即使 funding rate 很高, 如果没人愿意反方向开仓, 价格也回不来 | 持续偏离 |
7.4 Funding Rate 的局限性
在 Oracle 型协议 (如 GMX) 中, funding rate 直接基于 OI 偏差计算, 且价格来自 Oracle.
在 vAMM 中, funding rate = f(vAMM_price - index_price), 但:
- vAMM price 本身可能被操纵
- Funding rate 是 “事后纠偏”, 无法阻止 “事中操纵”
- 如果套利者不够多, funding 的经济激励不足以吸引反方向交易
八、vAMM vs Oracle 型 vs 订单簿: 综合对比
| 维度 | vAMM (Perp v1/v2) | Oracle 型 (GMX) | 订单簿 (dYdX/Hyperliquid) |
|---|---|---|---|
| 定价来源 | 虚拟储备计算 | Chainlink Oracle | 买卖挂单撮合 |
| 滑点 | 取决于 k 值和交易量 | 零滑点 (有 OI 上限) | 取决于订单簿深度 |
| 流动性来源 | 协议设定 (v1) / Maker (v2) | GLP 池 (LP 做对手方) | 做市商挂单 |
| 价格锚定 | Funding rate (慢) | Oracle 直接锚定 | 套利者撮合 |
| 操纵风险 | 高 (Squeeze) | 中 (Oracle 抢跑) | 低 (需要真实挂单) |
| 资本效率 | 中 (v2 用集中流动性) | 高 (零滑点复用) | 高 (做市商管理) |
| 无许可性 | 高 (无需做市商) | 高 (LP 即可) | 中 (依赖做市商) |
| 上线新市场 | 容易 (设 k 值即可) | 需要 Oracle 支持 | 需要做市商愿意做市 |
| 链上成本 | 低 (一次合约调用) | 低 | 高 (频繁挂撤单) |
| 代表协议 | Perp Protocol, Drift | GMX, Jupiter Perps | dYdX, Hyperliquid |
九、Solidity 实现: vAMM 核心逻辑
9.1 vAMM 合约 (简化版)
1 | |
9.2 Go 实现: vAMM 模拟器
1 | |
运行输出:
1 | |
十、小结: 为什么 vAMM 在竞争中逐渐落后
10.1 数据说话
Perpetual Protocol 的 TVL 和交易量变化:
1 | |
10.2 落后的根本原因
总结:
| 竞争对手 | 对 vAMM 的优势 |
|---|---|
| GMX (Oracle 型) | 零滑点, 简单直觉, LP 只需存入即可, 价格由 Oracle 保证 |
| dYdX (订单簿) | 真实订单深度, 专业交易体验, 做市商竞争提供最优价格 |
| Hyperliquid (链上订单簿) | 链上订单簿 + 自研 L1, 兼具去中心化和性能 |
vAMM 的历史贡献:
- 开创了链上永续合约的定价范式, 证明了不需要订单簿就能做永续
- 无许可性最强: 不需要 LP, 不需要做市商, 设个 k 值就能启动新市场
- 但这些优势在市场成熟后变得不那么重要, 用户更在意滑点和安全性
十一、下一步
vAMM 型永续的故事, 本质上是 DeFi 永续合约定价机制探索的第一个阶段.
- 从 vAMM 的 “虚拟深度” 到 Oracle 型的 “零滑点”, 再到订单簿的 “真实深度”
- 市场在 2023-2024 年明确选择了 订单簿型 作为主流方向
下一篇: Hyperliquid 深度解析 - 看链上订单簿如何在自研 L1 上实现 CEX 级体验.