仕組みの詳細
非対称インパクトPnL
Exchangeが決済をどう精算し、プロトコルが取引のどこで取り分を取るのかを説明します。
ポジションはHyperliquidのミッド価格で建ち、決済には執行されたブロックのミッド価格が使われます。スプレッドも、スリッページも、ファンディングも、ポジションサイズにかかる手数料もなく、ガス代もあなたには請求されません。負けで損失より多くを請求されることはありません。キューが空の間は、損失手数料はLPが受け取る額から差し引かれ、キューに請求がある間は免除されます。
勝ち決済では、プロトコルが利益に非対称なインパクトの差し引きを適用します。これは想定元本にかかる手数料でも、価格に上乗せするスプレッドでもありません。エントリーから決済までの値動きの大きさで決まる係数を、利益に掛けるものです。ごく小さな利益ではその大部分を取り、値動きが大きくなるほど取る割合は小さくなります。勝ち決済は、次の四つのステップを順に通ります。
- デッドバンド。 決済価格がエントリー価格より0.002%(エントリー価格を50,000で割った値)不利だったものとして利益を計算します。これより小さな勝ちはゼロになります。
- 差し引き。 値動きの大きさが、適用中の支払いカーブの幅に入っている場合、ほかの計算の前に値動きをさらに少し短く数えます。
- インパクト。 残った利益を下の式で調整します。
- 勝ち手数料。 調整後の利益の2%が手数料で、残りがあなたに支払われます。承認済みのビルダーを指定したセッションキーで署名した決済では、調整後の利益の0.5%がそのビルダーにも支払われます(ビルダーコードを参照)。アプリ自身の鍵はビルダーを指定していません。
二つの支払いカーブ
コントラクトには二つの支払いカーブが固定で定められています。違いは、差し引きの対象になる値動きの幅だけです。
| カーブ | 差し引きの対象になる値動きの幅 | 最大の差し引き |
|---|---|---|
| 標準 | 0.0075%–0.06% | 値動き0.0338%で0.0118% |
| 時間外 | 0.003%–0.1% | 値動き0.0418%で0.0204% |
時間外カーブは、週末や夜間のような、板が薄くなる閑散期に適用されます。専用のキーパーが、公開されたスケジュールに沿って二つを切り替えます。キーパーが選べるのはこの二つのカーブのどちらかだけで、一つのトランザクション内の決済はすべて同じカーブで精算されます。幅の外、そして幅の両端では、何も差し引かれません。幅の中でも、値動きが大きいほど常に多く支払われます。
性質
- 非対称。 調整されるのは勝ち決済だけです。負け決済で余分に払うものはありません。
- ポジションではなく値動きで決まる。 手元に残る割合は、決済するポジションの大小によって変わりません。マーケットごとの基準想定元本が傾きを決め、あなたの取引サイズは計算に入りません。
- 値動きが大きいほど多く残る。 差し引きは値動きが大きくなるにつれてなめらかに小さくなりますが、上限があります。手数料前の利益のうち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そのものが差し引かれることはありません。決済イベントが利益として報告するのは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% |
サイズの項を固定している理由
このカーブをサイズに依存させた場合、二つ目の項はポジションの実際の想定元本とともに大きくなり、大きな取引ほど利益の多くを失います。このレバレッジでは、トレーダーは小さなポジションを大量に建てるようになり(トランザクションも状態もガス代も増えます)、それで誰かの経済性がよくなるわけでもありません。そこでここでは、二つ目の項にマーケットごとの固定の基準想定元本を使い、どのポジションサイズでも差し引きの割合が同じになるようにしています。
この設計にした理由
このレバレッジでは、想定元本にかかる手数料でも、価格に上乗せするスプレッドでも、LPを維持できません。小さすぎて意味がないか、大きすぎて誰も払えないかのどちらかです。インパクト係数は、コストを結果に比例する場所、つまり勝った取引の利益に置きます。負けが余分に払うことはありません。
このカーブは小さな利益にも抵抗を与えます。板を一瞬ゆがめて得られるかもしれない利益も含みます。ただし価格のチェックではなく、操作を割に合わないものにするわけでもありません。リスクをご覧ください。
PnLから支払いへ
調整後の結果は、支払能力とキューの精算ルールに入ります。勝ちはadjustedから勝ち手数料(ビルダーがいればビルダー手数料も)を引いて支払われるか、LPの現金が足りなければキューに入ります。負けは損失手数料を引いてLPに入るか、キューに請求がある間は別枠に入ります。アプリとサービスは、これらの式をTypeScriptに移植したものを使っており、コントラクトが生成したテストベクトルとオンチェーンで観測された値に対して、wei単位まで一致することを確認しています。