深入原理
非对称冲击盈亏
Exchange 如何结算平仓,以及协议在一笔交易中从哪里收取分成。
仓位按 Hyperliquid 中间价开仓,平仓使用执行所在区块的中间价。没有点差、没有滑点、没有资金费、不按仓位规模收费,也不向你收取 gas。亏损的扣款永远不会超过亏损本身:队列为空时,亏损手续费从 LP 收到的部分中扣出;有待付款排队时则免收。
盈利平仓时,协议会对收益施加非对称的冲击折减。它不是按名义价值收取的手续费,也不是价格上的点差:它把收益乘以一个系数,这个系数取决于开仓到平仓之间价格变动的幅度。收益很小时,它拿走大部分;变动越大,拿走得越少。盈利平仓依次经过四步:
- 死区:计算收益时,把平仓价向不利方向移动开仓价的 0.002%(开仓价除以 50,000)。不超过这个幅度的盈利记为零。
- 留存:如果价格变动落在当前生效的派付曲线的区间内,计算其他各项之前,变动会再被缩短一点。
- 冲击:剩余收益按下面的公式缩放。
- 盈利手续费:缩放后收益的 2% 作为手续费,其余归你。如果平仓所用的会话密钥指定了一个已获批准的构建者,还要向该构建者支付缩放后收益的 0.5%(见构建者代码);应用自己的密钥不指定任何构建者。
两条派付曲线
合约中固定了两条派付曲线,它们只在被留存的变动区间上不同:
| 曲线 | 被留存的价格变动区间 | 最大留存 |
|---|---|---|
| 标准 | 0.0075%–0.06% | 0.0118% at 0.0338% |
| 非交易时段 | 0.003%–0.1% | 0.0204% at 0.0418% |
非交易时段曲线用于周末、夜间等订单簿较薄的安静时段。一个专门的维护程序按公布的时间表在两者之间切换;它只能在这两条曲线中选择,不能做其他任何事,同一笔交易中的所有平仓都按同一条曲线结算。区间之外以及区间边界上不留存任何部分。在区间之内,变动越大,派付仍然一定越多。
特性
- 非对称:只有盈利平仓会被缩放。亏损平仓不额外付费。
- 按变动幅度,而不是按仓位规模:保留的比例与你平的是小仓位还是大仓位无关。每个市场有一个参考名义价值,决定曲线的陡峭程度;你的交易规模不参与计算。
- 变动越大,保留越多:折减随变动增大而平滑缩小,直到一个上限:扣除手续费前,盈利保留的比例永远不超过收益的 90%。在留存区间内,保留的比例低于这条平滑曲线,但派付仍随变动的每一个价位上升。
公式
所有数值都是整数,每次除法都向下取整。价格为原始价格(Hyperliquid 价格乘以市场的价格倍数);wad 值带 18 位小数,因此 1e18 即一。
db = entry / D deadband in raw units, D = deadbandDivisor
d = |exit − entry| − db zero or less: no gain
pnl = N · d / entry N = margin × leverage
move = d · 1e18 / entry the move beyond the deadband, as a wad
lo, hi = entry · a / 1e6, entry · z / 1e6 the curve's band in raw units; in band when lo < |exit − entry| < hi
move = (d · 1e18 − h) / entry in band, h the holdback (below); zero or less: no gain
gain = N · move / 1e18 in band, else pnl
term1 = 1e36 / (move · rm / 1e18) rm = rateMultiplier
term2 = rn · 1e18 / (1e6 · move · pm / 1e18) rn = referenceNotional, pm = positionMultiplier
scale = (1e18 − b) · 1e18 / (1e18 + term1 + term2) b = baseRate
adjusted = gain · scale / 1e18
区间为 (a, z)(以入场价的百万分之一计)、系数为 k 的曲线,对区间内的有利价格变动 p = |exit − entry|(原始价格单位)的留存如下,其中 u 是 p 在区间中的位置:
w = hi − lo, u = (p − lo) · 1e18 / w, v = 1e18 − u, t = u · v / 1e18
standard: h = k · w · (t · t / 1e18) / 1e18 k = 3.597 · 1e18
off-hours: h = k · w · ((t · t / 1e18) · v / 1e18) / 1e18 k = 6.085 · 1e18
每一步都向下取整。h 以原始价格单位乘以 1e18 计;上面那一次除以 entry 把留存后的变动变成 wad。pnl 本身永远不被留存:它就是平仓事件报告的收益。
变动增大时,两项都缩小,分母趋近于一,保留的比例趋近于 1 − b。变动趋近于零时,两项无限增大,缩放后的收益随之坍缩到接近零;如果任一项的分母取整后为零,缩放系数即为零。亏损就是 min(N · |exit − entry| / entry, margin),没有死区,也没有缩放。
已部署参数
| 参数 | BTC | ETH |
|---|---|---|
| 死区 | 0.002% | 0.002% |
基础费率 b |
10% | 10% |
速率乘数 rm |
15,000 | 15,000 |
仓位乘数 pm |
814.598 | 483.979 |
参考名义价值 rn |
$100,000 | $100,000 |
对盈利方而言,计入死区后的效果如下:
| 价格变动 | 保留的收益 · BTC | 保留的收益 · ETH |
|---|---|---|
| 2 bp | 20.3% | 16% |
| 5 bp | 54.6% | 48.1% |
| 10 bp | 73.9% | 69% |
| 25 bp | 82.9% | 80.4% |
| 50 bp | 86.4% | 85% |
| 100 bp | 88.1% | 87.4% |
| 200 bp | 89.1% | 88.7% |
| 500 bp | 89.6% | 89.5% |
为什么规模项是固定的
在与规模挂钩的版本中,这条曲线的第二项随仓位的实际名义价值增长,仓位越大,损失的收益比例就越大。在这样的杠杆下,这会促使交易者拆成许多小仓位(更多交易、更多状态、更多 gas),却不会改善任何人的经济结果。这里的第二项改用每个市场固定的参考名义价值,因此无论仓位大小,折减的百分比都相同。
为什么这样设计
在这样的杠杆下,无论是按名义价值收费,还是在价格上加点差,都无法维持一个 LP:要么太小而无济于事,要么太大而没人付得起。冲击系数把成本放在随结果增长的地方:盈利交易的收益。亏损永远不会额外付费。
这条曲线还会给小额收益增加摩擦,包括可能来自短暂扭曲订单簿的收益。不过它不是价格检查,也不能让操纵无利可图;见风险。
从盈亏到支付
调整后的结果进入偿付能力与队列中的结算规则:盈利支付 adjusted 减去盈利手续费(有构建者时再减去构建者费),池中现金不足时则进入队列;亏损扣除亏损手续费后进入 LP,有待付款排队时则进入专用桶。应用和服务使用这些公式的 TypeScript 移植版本,它与合约生成的测试向量以及链上观测值逐 wei 核对一致。