永续合约 11 - 一些边界问题

本文整理了永续合约相关的 30 个边界问题, 涵盖 OI 机制, 保证金细节, 清算边界条件, vAMM 可行性, JIT 做市以及 JELLY 攻击等场景, 每个问题附对应文档链接.


一、目录

# 分类 问题
1 基础概念 OI (未平仓合约) 为什么 long = short?
2 交易 开仓后亏了能取消吗?
3 保证金 合约盈利了, 为什么显示的保证金反而在减少?
4 保证金 持仓保证金 vs 维持保证金到底什么关系?
5 保证金 $300 → $90 之间发生了什么?
6 保证金 维持保证金率是谁定的?
7 清算 ADL 触发后盈利方怎么被选中?
8 清算 Chainlink Keepers 是 Chainlink 自己的清算机器人吗?
9 清算 级联清算为什么会进入死亡螺旋? 为什么没人去 “捡钱”?
10 模型 vAMM 还有人在用吗?
11 Oracle CEX 互相引用价格会不会 “死锁”?
12 Funding 为什么用 premium 而不是 basis 计算资金费率?
13 Funding 资金费率计算方式是公开的吗?
14 撮合 买单最高价优先, 卖单为什么最低价优先?
15 撮合 买方出 $3000, 卖方要 $2900, 差价归谁?
16 撮合 为什么交易所不自己赚差价?
17 JIT JIT 做市靠的是 Solana 原生支持永续合约吗?
18 JIT JIT 窗口只有 400ms, 做市商来得及吗?
19 JIT JIT 失败只损失 gas 吗?
20 GMX GMX Swap vs Uniswap, 能替代 DEX 换币吗?
21 GMX GLP vs 直接持有资产, 谁更划算?
22 GMX GLP 持有者和 GMX Staker 什么区别?
23 GMX 为什么 GMX 需要双代币设计?
24 Hyperliquid 为什么要做现货订单簿?
25 Hyperliquid 代码不开源怎么确认安全?
26 Hyperliquid HIP-1 意味着任何人发币就有流动性?
27 攻击 JELLY 攻击者怎么用两个账户盈利?
28 攻击 Hyperliquid 为什么没发现异常?
29 基础设施 OP Stack 是什么?
30 术语 L2 Book 里的 L2 是什么意思?

二、基础概念

2.1 OI (未平仓合约) 为什么 long 总量 = short 总量? {#q1}

相关: 永续合约机制详解 §1

因为每一笔成交必然同时产生 1 个 long position + 1 个 short position. 这是撮合机制的数学必然, 不是市场行为的结果.

1
OI = Σ long notional = Σ short notional    // 恒等式, 不是取 min 也不是取 max

常见误解: “我做多, 没人做空, OI 怎么算?”

答案: 没人做空, 你的订单就不会成交, OI 不增加.

交易所类型 没有对手方时的表现
订单簿型 (dYdX, Hyperliquid) 你的 long order 挂在 order book 上, 无人吃单, 不成交, OI 不变
Oracle 型 (GMX) LP 池 (GLP/GM) 充当对手方, 但有 OI 上限 (max open interest cap), 超限拒绝开仓

“未平仓” 这个翻译容易误导. “未平仓合约” 不是 “还没成交的合约”, 而是 “已成交但还没关闭的合约”:

1
挂单 (order) → 成交/开仓 (fill) → 持仓中 (open position, 计入 OI) → 平仓 (close, OI 减少)

杠杆不影响配对关系. 假设 ETH @ $3,000:

角色 保证金 杠杆 名义价值 数量
A (Long) $300 10x $3,000 1 ETH
B (Short) $150 20x $3,000 1 ETH

撮合按数量 (1 ETH) 匹配, 不看保证金和杠杆. OI += 1 ETH. 如果 B 想做空 2 ETH 但只有 A 的 1 ETH 买单, 则成交 1 ETH, B 剩余 1 ETH 卖单继续挂着, 不计入 OI.

平仓不需要原对手方配合. 你平仓 long = 你在市场上卖出, 接单的可以是任何人:

接单方 结果
新人开 long 你的仓位关了, 新人开了, OI 不变
某个 short 平仓 两个仓位都关了, OI -= 1

你和原对手方之间没有绑定关系, 开仓和平仓是两笔独立的撮合.

OI 的计价单位. 各平台不统一, 常见三种 (以 ETH @ $3,000 为例, 同一笔 OI):

计价方式 例子 使用平台
张 (contracts) OI = 50,000 张, 每张 = 0.01 ETH → 500 ETH Binance, OKX (币本位合约)
底层资产数量 OI = 500 ETH Hyperliquid, dYdX, GMX
USD 名义价值 OI = $1,500,000 数据聚合平台 (Coinglass, DeFiLlama)

互转公式:

1
2
张数 × 面值 = 底层资产数量        // 50,000 × 0.01 = 500 ETH
底层资产数量 × 价格 = USD 名义价值 // 500 × $3,000 = $1,500,000

注意: Binance 币本位合约 (coin-margined) 的 “张” = 固定 USD 面值 (BTC 合约 1 张 = $100, ETH 合约 1 张 = $10); U 本位合约 (USDT-margined) 通常直接用底层资产数量, 没有 “张” 的概念.

USD 计价的 OI 会随价格波动: ETH 从 $3,000 涨到 $4,000, 即使没有新开仓, USD OI 也会从 $1,500,000 变成 $2,000,000. 所以看 OI 变化时要区分 “真实开仓增加” 还是 “价格波动导致的名义值变化”.


三、交易

3.1 开仓后亏了能取消吗?

相关: GMX 协议深度解析 §4

不能. 永续合约开仓执行后, 没有 “撤回” 操作, 只能平仓止损.

1
2
3
4
5
6
7
8
9
10
11
12
GMX Two-Step 开仓流程:

Step 1: createIncreasePosition() → 创建请求, 进入队列
Step 2: Keeper 执行 → 查 oracle 价格 → 开仓成交

Step 1Step 2 之间有极短窗口 (~30s):
→ 可以调 cancelOrder() 取消请求
→ 但这个窗口极短, 且只能取消未执行的请求

Step 2 执行后:
→ 仓位已开, 无法取消
→ 只能通过平仓 (close position) 退出

为什么不允许 “亏了撤回”? 因为这会产生 free option (免费期权) 漏洞:

1
2
3
4
5
6
7
8
9
假设允许亏损时撤回:

1. 你做多 ETH @ $3000, 10x 杠杆
2. ETH 涨到 $3100 → 你赚了, 不撤回, 平仓获利 $1000
3. ETH 跌到 $2900 → 你亏了, 撤回, 假装没开过仓

结果: 你永远只赚不亏
LP 的处境: 只要交易者赚, 就要赔; 交易者亏, 拿不回来
LP 几天内被抽干, 没人愿意当 LP

限制损失的正确手段:

手段 说明
Acceptable Price 开仓时设最大滑点, oracle 价超过则拒绝执行
Stop-Loss 设止损价, 亏损到阈值自动平仓
Take-Profit 设止盈价, 达到目标自动平仓
小仓位试探 先开小仓位测试方向, 确认后再加仓

四、保证金

4.1 合约盈利了, 为什么显示的保证金反而在减少? {#q3}

相关: 保证金管理与清算引擎

现象: 做空盈利时, 未实现盈亏 ↑ 但 “保证金” ↓; 反之亏损时保证金 ↑. 看起来钱在变少.

原因: 交易所界面显示的 “保证金” 不是你最初存入的固定金额, 而是按当前标记价格动态计算的:

1
2
显示的保证金 = 当前仓位名义价值 / 杠杆
= mark_price × size / leverage

做空时, 价格跌 (你盈利) → 仓位名义价值变小 → 显示的保证金跟着变小:

1
2
3
4
5
6
7
8
开仓: mark_price=$100, size=100, 10x
名义价值 = $10,000 → 显示保证金 = $1,000, 未实现盈亏 = $0

价格跌到 $95 (盈利):
名义价值 = $9,500 → 显示保证金 = $950, 未实现盈亏 = +$500

价格涨到 $103 (亏损):
名义价值 = $10,300 → 显示保证金 = $1,030, 未实现盈亏 = -$300

关键: 你的钱没有变少. 真正要看的是 仓位权益:

1
2
3
仓位权益 = 初始保证金 + 未实现盈亏
= $1,000 + $500 = $1,500 (价格 $95 时)
= $1,000 - $300 = $700 (价格 $103 时)
概念 含义 是否变化
初始保证金 (Initial Margin) 你投入的 $1,000 固定不变
显示保证金 (Displayed Margin) mark_price × size / leverage 随价格变化
未实现盈亏 (Unrealized PnL) 当前浮盈浮亏 随价格变化
仓位权益 (Position Equity) 初始保证金 + 未实现盈亏 才是你真正拥有的

区分真实损耗: funding rate 扣款会让仓位权益下降, 那才是真正在 “吃” 你的钱. 而显示保证金的变化只是名义价值重算, 不影响仓位权益.


4.2 持仓保证金 vs 维持保证金到底什么关系?

相关: 保证金管理与清算引擎

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
例: 做多 ETH $3000, 10x 杠杆

持仓保证金 (Initial Margin, IM):
= 仓位价值 / 杠杆 = $3000 / 10 = $300
→ 开仓时实际掏的钱, 可以理解为 "本金" / "押金"
→ 这是开仓的最低门槛

维持保证金 (Maintenance Margin, MM):
= 仓位价值 × 维持保证金率
→ 比如维持保证金率 3%, MM = $3000 × 3% = $90
→ 这是 "保住仓位" 的最低底线

关系:
IM ($300) > MM ($90)
IM = "开仓要多少钱" (入场门票)
MM = "什么时候被清算" (清算红线)

4.3 $300 → $90 之间发生了什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
开仓后, 保证金余额 = 初始保证金 - 未实现亏损:

ETH 从 $3000 跌到 $2930:
未实现亏损 = $70
保证金余额 = $300 - $70 = $230

这 $230 就是你此刻的 "账面本金":
平仓 → 拿回 $230, 确认亏 $70
不平仓 → 继续扛, 等反弹

$300 → $90 之间: 你有选择权 (扛或跑)
到 $90 以下: 选择权没了, 系统替你做决定 (强制清算)

清算后能拿回多少?
理想: 剩余保证金扣掉清算罚金 → 剩几块钱还给你
穿仓: 价格跳空, 亏损 > 保证金 → 差额由 Insurance Fund / ADL 承担

4.4 维持保证金率是谁定的?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CEX (Binance, OKX):
- 平台单方面设定, 随时可调
- 通常阶梯制: 仓位越大, 保证金率越高
- 极端行情前可能临时上调
- 用户没有话语权

DEX:
- 初始参数由团队设定
- 之后走链上治理:
dYdX v4: DYDX 持有者投票 (链上提案 → 投票 → 自动执行)
GMX: Snapshot 投票 (实际团队影响力大)
Hyperliquid: 团队直接调整 (偏中心化)

现实矛盾:
维持保证金率是风控参数, 需要快速响应 (行情剧变时几分钟内调)
但链上治理投票要好几天
→ 大部分 DEX 给团队 "紧急调参" 权限, 事后补治理流程
→ 本质上和 CEX 没太大区别

五、清算

5.1 ADL 触发后盈利方怎么被选中?

相关: 保证金管理与清算引擎, dYdX 演进之路 §5.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ADL (Auto-Deleveraging, 自动减仓) 触发链:

穿仓 → Insurance Fund 兜底 → Insurance Fund 耗尽 → ADL

选中规则:
系统按 "盈利比例 × 杠杆倍数" 排序
排名越靠前 → 越先被强制减仓

:
李四: 做空 ETH, 浮盈 200%, 5x 杠杆 → 分数 = 200% × 5 = 10
王五: 做空 ETH, 浮盈 50%, 2x 杠杆 → 分数 = 50% × 2 = 1
→ 李四先被 ADL

这就是为什么很多交易者会:
- 主动降杠杆 (降低分数)
- 分批止盈 (降低盈利比例)
→ 避免成为 ADL 首选目标

相关: 清算引擎架构与实现

不是. Chainlink Keepers (现已改名 Chainlink Automation) 是一个通用的链上自动化服务, 不是专门的清算机器人. 它的作用是 “当条件满足时, 帮你调一个合约函数”, 仅此而已.

和清算 Keeper 的区别:

Chainlink Automation 清算 Keeper
本质 通用任务调度服务 专门的清算机器人
运行者 Chainlink 节点网络 协议自建 or 第三方套利者
懂清算吗 不懂, 只检查条件调函数 懂, 专门为此设计
驱动力 按 LINK 付费 清算奖励 (0.25%~1%)

工作流程: 你的合约实现两个函数:

  • checkUpkeep(): Chainlink 节点链下模拟调用 (不花 gas), 你在里面写 “有没有仓位 margin <= MM?”, 返回 true 则触发
  • performUpkeep(): 条件满足时 Chainlink 发链上交易执行, 你在里面写实际清算逻辑

实际上谁在用什么?

协议 清算方式
Aave Chainlink Automation 触发清算 + 利率更新
GMX 自建 Keeper 网络
dYdX 链下清算引擎, 不需要链上 Keeper
大部分 DeFi 套利者自建 Keeper (利润驱动)

为什么高利润清算不用 Chainlink Automation? 大仓位清算奖励高, 被专业 MEV 搜索者盯上 — 他们自建机器人 + Flashbots 抢跑, 延迟比 Chainlink 节点网络低得多. Chainlink Automation 更适合 “没人抢但必须有人做” 的任务: 定时更新价格, 自动复投收益, 喂价超时检测等.

一句话: Chainlink Automation 是 “通用闹钟”, 不是 “清算专家”. 协议可以用它来触发清算, 但高竞争场景下自建机器人更有优势.

5.3 级联清算为什么会进入死亡螺旋? 为什么没人去 “捡钱”?

相关: 保证金管理与清算引擎, 永续合约中的 MEV §7

为什么会进入死亡螺旋?

直觉上, 清算 = 有人爆仓 = 有人能低价接盘赚钱, 应该自动恢复平衡. 但实际上级联清算是一个正反馈循环, 越清算越跌, 越跌越清算:

1
2
3
4
5
6
价格下跌 → 多头仓位触发清算
→ 清算 = 强制平仓 = 在订单簿上挂卖单
→ 卖压增大 → 价格进一步下跌
→ 更多多头仓位触发清算
→ 更多卖单涌入 → 价格继续跌
→ 循环...

关键: 做空的人并不能帮忙 “接盘”. 清算多头 = 卖出, 新开空单 = 也是卖出. 两者站在订单簿的同一边, 都在竞争稀缺的买方流动性:

操作 在订单簿上等价于 需要谁来接?
清算多头 卖出 买方
新开空单 卖出 买方

真正能 “接住” 清算单的只有: 新开多仓的人空头获利了结 (= 买入). 但暴跌时几乎没人愿意做这两件事.

为什么没人去 “捡钱”?

正常行情下, 清算人 (Keeper/MEV Searcher) 确实会抢着接盘, 因为有清算奖励可赚. 但极端行情下 “捡钱” 变成了 “接刀”:

1. 不确定性 — 不知道底在哪

价格还在跌, 你 “捡” 到的仓位可能马上又被清算. 2022 年 LUNA 从 $80 跌到 $0.00001, 每个价位都有人觉得 “到底了”, 结果都成了新的被清算者.

2. 流动性枯竭 — 做市商主动撤单

极端行情时做市商会关掉机器人撤走挂单, 因为提供流动性的风险远大于赚价差的收益. 订单簿买方深度瞬间变薄, 即使想接盘也可能滑点巨大.

3. 基础设施过载 — 交易发不出去

链上拥堵 (gas 暴涨), 交易所 API 延迟/宕机, 清算机器人的交易发不出去. 2021 年 5.19 期间以太坊 gas 飙到几千 gwei, 很多链上清算机器人因为 gas 不够直接停摆.

4. 对冲困难 — 小市值 token 无处可对冲

清算人的标准操作: 接盘 → 立刻在其他交易所对冲锁定利润. 但如果被清算的是 JELLY 这种垃圾 token, 根本没有足够的对冲场所, 接盘 = 纯赌方向.

防线逐层击穿的过程

1
2
3
4
5
6
7
8
9
10
11
12
13
第一层: 清算人/Keeper       — 正常情况下抢着接, 有利可图
击穿: 价格跌太快 / 标的流动性太差 / 基础设施过载

第二层: 保险基金 — 兜底清算中的穿仓亏损
击穿: 亏损金额 > 基金余额 (LUNA 崩盘时多个平台被打穿)

第三层: ADL (自动减仓) — 强制减仓盈利方, 不依赖订单簿
击穿: 没有盈利的对手方可减 (单边行情, 所有人都在亏)

最终: 各平台的兜底策略不同
- GMX: GLP/GM 池承担
- Hyperliquid: HLP vault 接管
- dYdX: 坏账挂账 + 治理介入

核心结论: 级联清算的本质是 — 卖压自我强化, 而买方在恐慌中消失. 所有防护机制 (保险基金, ADL) 都基于一个假设: “有足够的对手方”. 当这个假设不成立时, 系统就会进入死亡螺旋.


六、模型

6.1 vAMM 还有人在用吗?

相关: vAMM 永续合约演进史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
纯 vAMM → 基本死了:
Perpetual Protocol: 2021 巅峰 $60M TVL → 现在 < $2M, 基本停滞

死因:
- 滑点大 (k 值靠治理调)
- 容易被操纵 (大户单边推价格逼仓)
- 脱锚 (vAMM 价格经常偏离现货)
- Oracle 型和订单簿型全面碾压

混合模型 → 还活着:
Drift Protocol (Solana): vAMM 只作兜底, 优先 JIT 做市商 + DLOB 限价单
→ vAMM 已经不是核心, 是 fallback
→ 有一定用户量, 但远不如 Hyperliquid / dYdX

根本问题:
虚拟流动性 ≠ 真实流动性
GMX 用 oracle 绕开了流动性问题
dYdX 用真实订单簿正面解决了
vAMM 用虚拟数字模拟 → 两头不靠

七、Oracle

7.1 CEX 互相引用价格会不会 “死锁”? {#q11}

相关: 永续合约机制详解 §2 (Index Price / Mark Price)

多家 CEX 互相引用对方价格来计算 Index Price (指数价格), 看起来像循环依赖:

1
2
3
Binance Index = Coinbase 现货价 + Kraken 现货价 + ...
Coinbase Index = Binance 现货价 + Kraken 现货价 + ...
Kraken Index = Binance 现货价 + Coinbase 现货价 + ...

不会死锁. 因为 Index Price 引用的是对方的 现货成交价 (spot last traded price), 不是对方的 Index Price. 现货价由各自订单簿上的真实买卖交易独立产生, 不依赖任何外部 index, 所以没有环.

用代码类比: 不是 A.lock() → wait B.lock() (互相等待), 而是 A.read(B.spot)B.read(A.spot), 两个 spot 都是独立可读的值.

但有回声效应 (Echo Effect):

1
2
3
4
5
6
7
8
9
虽然不会死锁, 但存在价格传染:

1. 攻击者在 Kraken (流动性薄) 砸盘, Kraken 现货暴跌
2. Binance Index 引用了 Kraken → Binance Mark Price 下降 → 触发部分清算
3. 清算卖压让 Binance 现货也下跌
4. Coinbase Index 引用了 Binance → Coinbase 也受影响
5. 波动在多个交易所之间来回放大

这是级联故障 (cascading failure), 不是死锁.

防护手段:

手段 作用
偏离剔除 某 CEX 价格偏离中位数 > 阈值时自动踢出
权重按流动性分配 薄流动性的 CEX 权重低, 影响小
EMA 平滑 不用瞬时价格, 用时间窗口内的加权平均
熔断机制 价格短时间剧烈波动时暂停引用

真正的风险场景: 小市值 token, 各 CEX 流动性都很薄, 攻击者用很少的钱就能在多个交易所制造价格偏移, 回声放大后触发大量清算. 这也是 JELLY 事件能发生的背景条件之一 (Q27).


八、Funding

8.1 为什么用 premium 而不是 basis 计算资金费率? {#q12}

相关: 永续合约机制详解 §2.3 (Basis), §3 (Funding Rate)

两者都在描述 “永续价格偏离现货”, 但取值来源不同:

1
2
basis   = mark_price - index_price    (标记价格 - 指数价格)
premium = mid_price - index_price (订单簿中间价 - 指数价格)

关键区别:

  • mark_price 经过 EMA/TWAP 平滑, 变化慢, 抗操纵
  • mid_price = (best_bid + best_ask) / 2, 实时反映订单簿当前供需
basis (mark - index) premium (mid - index)
数据源 mark (已平滑) mid (实时订单簿)
反应速度 慢 (EMA/TWAP 滞后) 快 (瞬时)
抗操纵 弱 (一笔大单能影响)
用途 描述市场整体趋势 计算 funding rate

为什么 funding rate 需要用 premium: 资金费率的目标是 纠偏, 必须感知当下. 有人拉盘 → mid_price 瞬间偏离 → premium 立刻变大 → funding rate 加重惩罚偏离方. 如果用 basis (已平滑), 拉盘后要等几轮 EMA 才反映出来, 纠偏太慢.

但也不能直接用单次 premium (容易被一笔大单操纵), 所以对 premium 再做一次 TWAP/EMA 平滑后才作为最终费率:

1
2
3
4
5
6
7
8
9
10
完整链路:
订单簿 mid_price (实时)

premium = mid - index (实时偏差, 可能被操纵)

TWAP/EMA 平滑 premium (抗操纵)

funding_rate (最终费率, 既及时又稳定)

如果用 basis: 等于从一个已被平滑过的值再出发, 灵敏度不够 (二阶滞后)

8.2 资金费率计算方式是公开的吗? {#q13}

相关: 永续合约机制详解 §3 (Funding Rate), dYdX 演进之路 §6 (dYdX Funding)

全部公开, CEX 和 DEX 都是. 不公开的话交易者没法做套利, 没人套利费率就拉不回来, 整个锚定机制失效. 公开公式是 机制正常运行的前提.

平台 公开程度 说明
Binance 公开公式 + 实时数据 文档详列 premium index, interest rate, clamp 规则, API 可查
OKX / Bybit 同上 各家公式略有差异, 但都完整公开
dYdX v4 开源代码 费率逻辑在链上模块, 任何人可审计
Hyperliquid 公开公式 文档描述计算方式, 但代码不开源, 无法验证实现是否与文档一致
GMX v2 开源合约 资金费率逻辑在 Solidity 合约中, 链上可验证

“公开” 不等于 “相同”, 各平台差异点:

参数 可能不同的地方
采样频率 每 15s / 每 1min / 每个区块
平滑方式 TWAP (Binance) / EMA (GMX) / 每分钟采样取中位数 (dYdX)
Clamp 范围 ±0.05%/8h ~ ±0.75%/8h, 各家不同
Interest Rate 有的固定 0.01%/8h, 有的为 0, 有的可治理调整
结算频率 每 8h / 每 1h / 每个区块连续累积

同一时刻, 同一个 ETH-USD 永续合约, Binance 和 dYdX 的 funding rate 可能完全不同. 这也是跨平台 funding rate 套利能存在的原因: 在费率高的平台做反向, 在费率低的平台做正向, 吃差价.


九、撮合引擎

9.1 买单最高价优先, 卖单为什么最低价优先?

相关: 撮合引擎原理与 Go 实现 §3.2 Price-Time Priority

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
两边的目标都是 "让交易尽快发生":

你想买 ETH, 卖家有三个:
Dave $3003, Eve $3005, Frank $3010
→ 你当然想买最便宜的 → 卖单最低价排最前

你想卖 ETH, 买家有三个:
Alice $3002, Bob $3001, Carol $3000
→ 你当然想卖给出价最高的 → 买单最高价排最前

本质: 让最容易成交的订单排在最前面

Bids: $3002 > $3001 > $3000 (高→低)
Asks: $3003 < $3005 < $3010 (低→高)
↑ ↑
$3002 和 $3003 最接近 → 各自排第一
如果反过来排: $3002 配 $3010 → 根本成交不了

9.2 买方出 $3000, 卖方要 $2900, 差价归谁?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
成交价按 maker (先挂单的人) 的价格, 差价归 taker (后到的人):

场景 A: 卖方先挂
Dave 先挂 Sell @ $2900 (maker)
Alice 后下 Buy @ $3000 (taker)
→ 成交价 = $2900
→ Alice 本想花 $3000, 实际花 $2900, 省了 $100

场景 B: 买方先挂
Alice 先挂 Buy @ $3000 (maker)
Dave 后下 Sell @ $2900 (taker)
→ 成交价 = $3000
→ Dave 本想卖 $2900, 实际卖 $3000, 多赚 $100

为什么用 maker 的价格:
maker 先挂单, 他的报价 = 他愿意接受的价格 → 按此成交他满意
taker 后到, 获得 "价格改善" (比预期更好) → 他也满意
双方都不吃亏, 交易所也不从中抽差价

实际上大差价很少出现: 做市商在 bid/ask 两侧密集挂单, spread 通常只有几美分.

9.3 为什么交易所不自己赚差价?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
三种现实中的处理方式:

1. 标准撮合 (主流 CEX/DEX):
成交价 = maker 价, 差价归 taker
交易所不碰差价, 只收手续费
Binance, dYdX, Hyperliquid 都是这样
→ 公平透明, 用户信任 = 长期利益

2. 交易所吃差价 (早期/小型 CEX):
对买方报 $3000, 对卖方报 $2900, 中间 $100 归平台
合规的叫 "internalization" (内部化)
不合规的叫 "吃客损" / 对赌

3. PFOF (Payment for Order Flow, 订单流付费):
Robinhood 模式 (美国股市):
用户下单 Buy @ $100
Robinhood 卖给 Citadel (做市商)
Citadel 以 $99.90 成交, 给用户 $99.95
差价 $0.05: Citadel 和 Robinhood 分
→ 用户以为 "零佣金", 实际被吃了差价
→ 欧盟已经禁了 PFOF

为什么正规交易所不吃:
- 信任崩塌: 用户发现 → 跑了 (DEX 链上可验证, 一眼看出)
- 手续费更赚: Binance 日交易量 $10B, 0.1% 手续费 = $10M/天
- 监管风险: 不披露吃差价 = 违法
- DEX 做不到: 开源代码 + 链上可查, 改不了成交价
(但 Hyperliquid 闭源... 理论上可以做手脚, 用户无法验证)

十、JIT 做市

10.1 JIT 做市靠的是 Solana 原生支持永续合约吗?

相关: vAMM 永续合约演进史 §5.3 JIT 做市商

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
不是. Solana 是通用公链, 不原生支持永续合约.
JIT 能在 Solana 上实现, 靠的是链的两个底层能力:

1. 交易可见性 (Transaction Visibility)
交易提交后, 执行前, 其他人能看到
Solana: 验证者 / RPC 可见待执行交易
Ethereum: mempool 公开可见

2. 交易排序可控性 (Transaction Ordering)
能在目标交易之前插入自己的交易
Solana: Leader 控制排序, 做市商可通过 Priority Fee 争取优先
Ethereum: Block Builder 控制排序 (Flashbots)

Solana 的优势不是 "原生支持永续":
- slot 时间短 (400ms) → JIT 响应窗口合理
- gas 极低 (~$0.001) → 高频操作成本可接受
- 并行执行 → 不同市场的 JIT 互不干扰

同样的技术在 Ethereum 上:
"看到交易 → 抢先插入" 如果害用户 = 三明治攻击 (MEV)
"看到交易 → 注入流动性" 如果帮用户 = JIT 做市
技术完全相同, 区别在于用户是否得到更好价格

10.2 JIT 窗口只有 400ms, 做市商来得及吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
很紧张, 而且需要验证者配合:

拆解 400ms 窗口:
网络传播 (收到交易通知): ~50-100ms
计算报价 (查价格, 算 spread): ~1-5ms
提交 JIT 交易 (发给 Leader): ~50-100ms
Leader 排序: 不确定
────────────────────────────────
剩余窗口: 100-200ms, 可能来不及

做市商怎么抢到排序?
1. 地理优势: 服务器和 Leader 放同一机房 (co-location)
2. Priority Fee: 给更多小费, Leader 优先排你
3. 直连 Leader: 不走公开 RPC, 私有端口直连

所以 JIT 做市商往往是:
- 专业量化团队 (Wintermute, Jump)
- 有自己的 Solana 验证者节点
- 服务器在验证者同机房
→ 普通人根本做不了

成功率:
~60-70% 交易通过 JIT 成交 (最优价格)
~20-30% 通过 DLOB 成交
~5-10% 通过 vAMM 兜底
→ 这就是 Drift 需要三层架构的原因: JIT 不保证成功

和 CEX 高频交易本质一样:
CEX: 服务器放交易所机房, 专线网络, 抢速度
Solana JIT: 服务器放验证者机房, 直连 Leader, 抢速度
"去中心化" 的永续合约, 做市环节其实非常中心化

10.3 JIT 失败只损失 gas 吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
几乎是, JIT 失败的成本极低:

场景 1: 交易没被打包 (超时/Leader 没收到)
→ 损失: $0 (没上链, 不扣 gas)

场景 2: 被打包但排序靠后 (别人抢先了)
→ 损失: ~$0.001 (Solana gas)
→ 注入的流动性没人吃, 自动过期或撤回

Solana vs Ethereum 失败成本:
Solana: ~$0.001/tx → 10 万笔失败 = $100/天
Ethereum: ~$0.5-5/tx → 10 万笔失败 = $50,000-500,000/天
→ 500-5000 倍差距, 这是 JIT 在 Solana 可行的关键

真正的风险不是 gas, 而是 JIT 成功后:

1. 价格移动风险
JIT 成交后做市商持有敞口 ~400ms
如果这 400ms 内价格跳变 → 亏损
→ 但 400ms 极短, 且可以立即对冲

2. 毒流量 (Toxic Flow)
知情交易者 (知道即将有大新闻) 下单
做市商不知情, JIT 给了报价 → 成交 → 价格暴动 → 亏了
→ 和传统做市的逆向选择风险一样, 只是时间窗口缩短了

3. 利润被竞争压缩
多个做市商竞争同一笔 JIT → spread 越报越窄
→ 最终只有基础设施最好的团队能赚钱 (速度军备竞赛)

总结: JIT 失败 ≈ 免费 (Solana gas 可忽略)
JIT 成功后的风险也很小 (400ms 暴露时间)
→ 这是做市商愿意给更窄 spread 的根本原因

十一、GMX

11.1 GMX Swap vs Uniswap, 能替代 DEX 换币吗?

相关: GMX 协议深度解析 §3.1

GMX Swap 看起来很诱人: 零滑点 (基于 oracle 价格成交) + 不被 MEV 三明治攻击. 但手续费 0.2%~0.8%, 远高于 Uniswap 的 0.01%~0.3%.

1
2
3
4
5
6
7
小额交易 ($100~$5000):
Uniswap: 手续费低, 滑点小 → 总成本更低
GMX Swap: 手续费高, 吃掉了零滑点的优势

大额交易 ($50,000+):
Uniswap: 手续费低, 但滑点大 (吃掉深度)
GMX Swap: 手续费固定比例, 零滑点 → 可能更便宜

“零滑点” 不是免费午餐:

Uniswap GMX Swap
定价 AMM 曲线 (供需决定) Oracle 喂价 (外部决定)
滑点 有, 随金额增大 无 (oracle 价格不受单笔交易影响)
手续费 0.01%~0.3% 0.2%~0.8%
MEV 风险 有 (三明治攻击) 无 (不走 mempool 撮合)
LP 风险 无常损失 (Impermanent Loss) 方向性风险 (交易者赚 = LP 亏)

GMX 的高费率是 LP 承担方向性风险的补偿 – LP 本质上在做交易者的对手方, 必须收更高费率覆盖风险.

结论: GMX 核心优势是杠杆交易, 不是现货兑换. 日常换币用 Uniswap/1inch, 大额 swap 可以比较一下 GMX 的报价.

11.2 GLP vs 直接持有资产, 谁更划算?

相关: GMX 协议深度解析 §7

1
2
3
4
5
6
7
直接买 ETH + BTC:
收益 = 资产涨跌
就这么简单

买 GLP:
收益 = 资产涨跌 + 手续费 (APR ~15-40%) + 交易者净亏损
风险 = 资产涨跌 + 交易者净盈利 (你赔)

GLP 本质: 持有一篮子加密资产 + 卖出 “交易者盈利” 的看涨期权.

直接持有 GLP
资产组合 你自己决定 固定比例 (~50% 稳定币, ~25% ETH, ~25% BTC)
额外收益 手续费分成 (70%) + 交易者亏损
额外风险 交易者盈利时 LP 亏损
灵活性 随时调仓 赎回有冷却期, 组合比例固定
牛市表现 纯跟涨 涨幅被稳定币稀释, 但手续费补偿
熊市表现 纯跟跌 跌幅被稳定币缓冲, 手续费补偿

如果你本来就打算 hold 一篮子加密资产, GLP 是增强收益的选择. 手续费 APR 15-40% 不是白给的 – 你在用方向性风险换取这个收益. 历史上交易者整体净亏损, 所以 GLP 持有者整体是赚的, 但不保证未来也是.

11.3 GLP 持有者和 GMX Staker 什么区别?

相关: GMX 协议深度解析 §7

用赌场类比最直观:

1
2
3
4
5
6
7
8
9
10
11
GLP 持有者 = 赌场庄家 (LP)
投入: 真金白银 (ETH, BTC, USDC 等)
收入: 70% 手续费 + 交易者亏损
风险: 交易者赚钱时你赔钱 (方向性风险)
本质: 用资产做对手方, 承担风险换收益

GMX Staker = 赌场股东
投入: GMX 代币
收入: 30% 手续费 (以 ETH/AVAX 发放, 不是代币通胀)
风险: GMX 代币价格波动 (无对赌风险)
本质: 持有治理代币, 分享协议利润
GLP 持有者 GMX Staker
角色 LP (庄家) 质押者 (股东)
投入资产 ETH, BTC, USDC 等 GMX 代币
手续费分成 70% 30%
收益形式 ETH/AVAX + esGMX ETH/AVAX + esGMX + MP
对赌风险 有 (交易者盈利 = 你亏损)
收益稳定性 波动大 (取决于交易者盈亏) 相对稳定 (只看手续费)

MP = Multiplier Points, 质押越久积累越多, 增加 ETH 分成比例, 激励长期持有.

11.4 为什么 GMX 需要双代币设计 (GLP + GMX)?

相关: GMX 协议深度解析 §7

GLP 解决 “谁来出钱当庄家”, GMX 解决 “谁来长期拥有和治理赌场”.

1
2
3
4
5
6
7
8
9
10
11
12
13
如果只有 GLP, 没有 GMX:

问题 1: LP 没有长期绑定
手续费高 → LP 涌入; 手续费低 → LP 跑路
流动性不稳定, 交易体验忽好忽坏

问题 2: 没有治理
参数调整 (手续费率, OI 上限, 支持哪些资产) 谁决定?
GLP 持有者目标不统一 (有人要高收益, 有人要低风险)

问题 3: 无法融资
协议早期需要资金开发, GLP 是 LP 资产, 不能拿来花
需要一个可以出售的 "股权代币" 募资

GMX 代币的三个作用:

作用 机制
治理 GMX 持有者投票决定协议参数
利润分享 30% 手续费以 ETH/AVAX 发放 (real yield, 不是通胀代币)
长期绑定 esGMX + Multiplier Points 奖励长期质押者

esGMX (Escrowed GMX) 的设计巧妙之处:

1
2
3
4
5
6
7
8
9
质押 GMX → 获得 esGMX 奖励
esGMX 不能直接卖, 有两个选择:

选择 1: 质押 esGMX → 和 GMX 一样获得手续费分成
选择 2: Vest esGMX → 1 年线性解锁为 GMX → 可以卖

→ 想卖要等 1 年, 短期投机者没耐心
→ 长期持有者不在乎, 边等边赚手续费
→ 自然过滤出真正的长期参与者

Real Yield 模式 vs 通胀代币模式:

GMX (Real Yield) 典型 DeFi 协议 (通胀)
质押收益来源 协议真实手续费收入 增发新代币
收益币种 ETH/AVAX (硬通货) 自家代币 (不断稀释)
可持续性 只要有交易量就有收益 通胀停止则收益归零
代币价格压力 小 (收益不靠增发) 大 (持续卖压)

十二、Hyperliquid

12.1 Hyperliquid 为什么要做现货订单簿?

相关: Hyperliquid 深度解析 §7 Spot 交易

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
三个战略价值:

1. 价格自主权
永续合约需要现货价格做锚点
没有自己的现货市场 → 依赖外部 oracle / CEX 价格
JELLY 事件就是被外部价格操纵搞垮的
有自己的现货 → 套利者在内部搬砖, 天然锚定

2. 上币权 = 收入 + 生态
HIP-1 荷兰拍卖: 新 token 上线要竞拍 ticker
拍卖收入归协议 (热门 ticker 拍出几百万美元)
项目方选择在 Hyperliquid 首发 = 用户留在生态内

3. 套利闭环
现货 + 永续在同一条链 → 套利者天然活跃
套利行为 = 免费的价格锚定 + 手续费收入

本质: 永续是赚钱的, 但现货是根基.
没有自己的现货 = 建在别人地基上的楼.

12.2 代码不开源怎么确认安全?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
简短回答: 没法确认, 只能选择信不信.

当前信任来源 (都不是技术验证):
1. 链上可审计 → 能验证 "结果", 但无法验证 "过程" (撮合引擎是黑盒)
2. 验证者声誉 → 约 16 个, 多数知名机构, 但他们也看不到源码
3. Bridge 合约有审计 → 但核心撮合引擎 (Rust) 没有公开审计
4. 市场验证 → 跑了一年多没出资金安全事故 (≠ 安全)

社区质疑:
- 撮合公平性: 团队能不能 "偷看" 订单簿抢跑? → 不知道
- 紧急干预权限: 边界是什么? → 不透明
- 验证者跑的是编译好的二进制, 无法确认内容一致性

透明度对比:
dYdX v4: 全开源 (Go), 多次审计, 任何人可审查撮合逻辑
GMX: 全开源 (Solidity), 多次审计
Hyperliquid: 仅 Bridge 审计, 核心闭源

不开源的可能原因:
- 竞争壁垒 (HyperBFT 是核心竞争力, 开源 = 被 fork)
- 快速迭代 (闭源不受社区约束)
- "Security through obscurity" (靠隐藏求安全, 安全界普遍不认可)

12.3 HIP-1 意味着任何人发币就有流动性?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
不完全是, 有门槛:

第 1 步: 荷兰拍卖竞拍 Ticker (门槛在这)
热门 ticker: 几十万~几百万美元
冷门 ticker: 几千~几万美元
→ 不是免费的, 拍卖费 = 上币成本

第 2 步: 部署代币

第 3 步: HIP-2 自动做市 (流动性来了)
协议自动在订单簿两侧挂单
→ 不需要自己找做市商

但这个 "流动性" 质量有限:
- 协议做市不是无限资金, spread 可能很大
- 没有外部做市商补充, 深度很差
- 流动性薄 → 容易被操纵 (JELLY 事件的根源)

更准确的说法:
HIP-2 提供的是 "能交易" 的最低流动性
不是 "交易体验好" 的充足流动性

vs 其他上币方式:
Uniswap: 无门槛, 但需要自己注入真金白银做 LP
pump.fun: 零门槛, 几美元, 99% rug pull
HIP-1: 拍卖过滤, 但有钱的骗子也拍得起
Binance: 极高门槛 (审核 + 做市商协议)

十三、攻击

13.1 JELLY 攻击者怎么用两个账户盈利?

相关: Hyperliquid 深度解析 §11.2 JELLY 事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
核心: 两个市场联动 + 两个账户配合

账户 A: $2M 做空 JELLY (故意送死的 "炸弹")
账户 B: $5M 做多 JELLY (赚钱的主力)

1 步: 现货拉盘
花 $3M 在 DEX 买 JELLY, 价格从 $0.01 → $0.03

2 步: 账户 A 空头爆仓
价格涨 200%, 5x 杠杆空头 → 穿仓
损失 = $2M 保证金 (全没了)
剩余亏损 → HLP 自动接盘 (被迫持有这个毒空头)

3 步: 账户 B 做多猛赚
价格涨 200%, 做多盈利 = $5M × 200% = $10M

算账:
账户 A: -$2M
账户 B: +$10M
现货买卖: 约持平
净利润: ~$8M
谁亏了: HLP 用户 (存 USDC 的普通人)

本质:
做空亏损有上限 = 保证金没了就没了 (穿仓后 HLP 兜底)
做多收益无上限 = 价格涨多少赚多少
→ 用有限亏损换无限收益, 差额转嫁给 HLP

13.2 Hyperliquid 为什么没发现异常?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
三个风控漏洞 (缺一不可):

1. 无关联账户检测
- 账户 A 做空, 账户 B 做多, 同一个人
- CEX 有 KYC + IP + 行为分析, 能识别
- Hyperliquid 无 KYC, 钱包地址随便建 → 无法检测

2. 单方向 OI 异常没触发风控
- 小 token 突然出现巨额空头, 应该触发警报
- 实际 OI 上限设置过高, 没拦截

3. OI 与市值不匹配
- JELLY 市值 ~$10M, 但允许远超市值的 OI
- 操纵现货的成本 << 永续端能获取的利润
- 合理做法: OI 上限 ≤ 现货市值的 20-30%

CEX 为什么很少被这样攻击:
不是技术更好, 而是有 KYC (追溯到人), 实时风控团队 (异常冻结),
法律威慑 (市场操纵 = 刑事犯罪).
DEX 拆掉了这些 "中心化护栏", 就必须用纯技术手段补, Hyperliquid 没补到位.

十四、基础设施

14.1 OP Stack 是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
类比:
Cosmos SDK → 造 L1 的工具包 (dYdX v4 用它造链)
OP Stack → 造 L2 的工具包 (Base, Worldcoin 用它造 L2)

组成:
执行层 (op-geth) → 修改版 go-ethereum, 处理交易
排序器 (op-node) → 接收交易, 排序, 出块
数据发布 (DA) → 压缩后发到 Ethereum L1
欺诈证明 (Fault Proof) → L1 上的挑战合约 (7 天窗口)
跨链桥 (Bridge) → L1 ↔ L2 资产转移

谁在用 (Superchain 生态):
Base (Coinbase), Worldcoin, Mantle, Zora, Mode, Lisk

vs 其他方案:
OP Stack → Optimistic Rollup 工具包 (7 天挑战期)
Arbitrum Orbit → 类似定位, Arbitrum 生态
ZK Stack → ZK Rollup 工具包 (无需 7 天等待)
Cosmos SDK → 独立 L1 工具包 (不是 L2)

十五、术语

15.1 L2 Book 里的 L2 是什么意思?

相关: Hyperliquid 深度解析 §10.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
L2 = Level 2 (二档行情), 不是 Layer 2 (二层网络)!

这是交易所 API 的通用术语, 来自传统金融 (比区块链早几十年):

L1 (Level 1): 只有最优报价
best bid: $3000 × 50 ETH
best ask: $3001 × 30 ETH

L2 (Level 2): 多档聚合报价
bid: $3000 × 50, $2999 × 120, $2998 × 200 ...
ask: $3001 × 30, $3002 × 80, $3003 × 150 ...
→ 同一价格的订单合并, 只显示总量

L3 (Level 3): 每笔订单明细
bid: $3000 × 10 (order #1), $3000 × 25 (order #2) ...
→ 不聚合, 每笔单独显示, 做市商用

Binance, OKX, dYdX, Hyperliquid 的 API 都用同样的命名.

这些问题的共同特点: 都是 “教程不会讲, 但实战中一定会遇到” 的问题. 理解这些延伸 case, 比背诵主线机制更能帮你判断一个协议的真实风险.


永续合约 11 - 一些边界问题
https://mritd.com/2025/12/10/perp-faq/
作者
Kovacs
发布于
2025年12月10日
许可协议