本文整理了永续合约相关的 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
|
常见误解: “我做多, 没人做空, 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 1 和 Step 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 杠杆
持仓保证金 : = 仓位价值 / 杠杆 = $3000 / 10 = $300 → 开仓时实际掏的钱, 可以理解为 "本金" / "押金" → 这是开仓的最低门槛
维持保证金 : = 仓位价值 × 维持保证金率 → 比如维持保证金率 3%, MM = $3000 × 3% = $90 → 这是 "保住仓位" 的最低底线
关系: IM > MM 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 首选目标
|
5.2 Chainlink Keepers 是 Chainlink 自己的清算机器人吗?
相关: 清算引擎架构与实现
不是. 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: 收益 = 资产涨跌 + 手续费 + 交易者净亏损 风险 = 资产涨跌 + 交易者净盈利
|
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 → 不聚合, 每笔单独显示, 做市商用
Binance, OKX, dYdX, Hyperliquid 的 API 都用同样的命名.
|
这些问题的共同特点: 都是 “教程不会讲, 但实战中一定会遇到” 的问题. 理解这些延伸 case, 比背诵主线机制更能帮你判断一个协议的真实风险.