セキュリティ
セキュリティレビュー
コントラクトのソースコードに対する内部レビューです。第三者による監査はまだ行われておらず、このページがその代わりになるものではありません。
レビューの対象
Exchangeとその管理モジュール、リンクされているライブラリ、注文・支払い・清算のロジック、入金と出金、セッションキー、バッチ実行コントラクト、入金プロキシ、ステーキング、トークンとその報酬です。コードはコミット e456c4d(2026-11-06)の時点のものを読みました。オフチェーンのサービス、アプリ、デプロイ用スクリプトは対象外です。
結果
コントラクトのコードには、重大または高の深刻度の欠陥は見つかりませんでした。資金を動かすすべての経路を一行ずつ読み、問題はありませんでした。最後に追加されたコード(ステーキング、トークン、ウォレットからのクローズ)はレビューの量が最も少ない部分です。全体を読み、ステーキングの会計は以下のとおりテストもしました。
問題がなかった点
- アクセス制御。 状態を変えるすべての関数は、何かを変更する前に呼び出し元を確認します。管理モジュールは単独では使えません。オーナー権限は放棄できず、コントラクトをアップグレードできるのはオーナーだけです。
- 署名。 型付きメッセージにはチェーンと検証用コントラクトが含まれ、可鍛性のある署名は拒否され、nonceは署名の検証後に一回だけ使われ、有効期限があります。セッションキーはウォレット専用のメッセージに署名できず、ウォレットは取引に署名できず、すべてのキーを一度に失効させることもできます。
- 資金の流れ。 プールの現金、追跡されるプール、支払いキュー、専用バケットの間の会計は整合しています。unchecked の演算はなく、縮小変換は検査され、すべての丸めは設計が定める向きに行われます。手数料には上限があり、出金はHyperliquidへのアクションを送る前に残高を減らします。
- 再入。 資金を動かすすべての関数は再入から保護され、外部呼び出しの前に状態を書き込みます。トークンのフックは固定のガス量で実行されるため、呼び出し側が先送りを強制することはできません。
- 入金アドレス。 入金プロキシがHyperCoreのアクションを送れるのはExchange経由だけで、その所有者が取り出せるのはEVMトークンとネイティブのHYPEだけです。アドレスの導出方法は変わっていません。
- コードのパターン。
selfdestruct、tx.origin、.transfer、.send、callcodeはありません。delegatecall は管理モジュールとリンクされたライブラリにだけ向かいます。 - バーンされるトークン。 BACKは発行された瞬間にステークされ、7日後の次の00:00 UTCにバーンされます。記帳上のLPが初めて$500,000に達するまでは、カウントダウンは始まりません。各バッチの満期日、アカウントのバッチを遅延評価で辿る処理、グローバルなスケジュール、再実行されるミント、カウントダウンの開始は、この設計と一致しています。設計は報酬と受け取りに書かれています。
ステーキングの会計のテスト方法
公開されているルールだけから、コントラクトの算術を読まずに別のモデルを書きました。ミント(遅れての再実行を含む)、カウントダウンの開始、分配、請求、時間の跳躍(日付が変わる一秒前、ちょうど日付が変わる時刻、日単位、最長で 150 日の放置)をランダムに並べ、コントラクトとモデルの両方で実行し、毎ステップ後に比較しました。76,800 回の呼び出しと、長い放置を含むさらに 38,400 回の呼び出しで差は出ませんでした。有効残高と供給量は完全に一致し、報酬は丸めの誤差の範囲で一致し、確保された額を超えて請求できるアカウントはなく、請求のたびに支払われた額は未請求額とぴったり同じでした。わざと入れた二つのバグも検出されました。
指摘事項
| 深刻度 | 指摘 | 状況 |
|---|---|---|
| 中(保証) | 静的解析ツールとファザー(Slither、Aderyn、Medusa、Echidna、Halmos、Gambit)を最後に実行したのは、トークンを書き直す前です。新しいコードには、テストスイート、既定の長さの不変条件テスト、上記のモデルがあります。 | 外部監査の前に再実行します。 |
| 中(設計、開示済み) | ローンチ時には、オンチェーンの価格ガードはすべてオフです。約定にはHyperliquidの生の最良気配の中値を使い、レバレッジは高くなります。保護はリレイヤーの制限、キーパー、センチネルによるもので、すべてオフチェーンです。 | 開示済み。リスクを参照。 |
| 低 | セッションキーのビルダー手数料への同意は、そのキーが古い署名タイプで再登録されたときも、失効されたときも消去されません。そのため、後から指定されたビルダーが、以前に同意された料率まで受け取れる可能性があります。ビルダー手数料の上限が影響を抑えます。 | 本番デプロイの前に修正します。 |
| 低 | 先送りされたミントのキューには、エントリを飛ばす手段がありません。あるエントリが再実行のたびに失敗すると、後続のミントはその後ろで待たされます。HyperEVMのガスコストの変化や、将来のアップグレードの不具合が原因になり得ます。 | 復旧はタイムロック経由のアップグレードです。 |
| 中(経済、開示済み) | 2026-11-08以降、損失は発行ベース全体に対して発行されます。勝ちはあとの損失と相殺されず、アカウントごとの上限もありません。トレーダーは反対のポジションを持ち、相場がどう動いても負ける側の脚で発行を受けられます。このレビューは、その変更の前のコードを読んでいます。 |
開示済み。手数料、カウントダウンの後のバーン、ほかの生きているトークンが各分配から取る分だけが歯止めです。リスクを参照してください。 |
| 低 | ガーディアンは、取引の一時停止、マーケットの恒久的な廃止、マーケットキーパーと時間外キーパーの交代、リレイヤーの許可と取り消し、価格読み取りのガス上限の引き上げができます。資金を動かすことも、一時停止を解除することもできません。 | 意図した設計です。リスクを参照。 |
| 情報 | トークンの残高と供給量は常に正確ですが、バーン済みトークンのイベントは、そのアカウントが次に触れられたときにだけ記録されます。そのため、イベントを合計するツールではバーン済みのトークンが有効に見えます。 | イベントではなく残高を読んでください。 |
| 情報 | 報酬のタイミング。分配の直前のミントは按分の取り分を受け取ります。最初の保有者は未割り当て分をすべて受け取ります。長い放置のあとは、期限切れのバッチがその間の分配を分け合います。分配された額を超えて支払われることはありません。 | 文書化済み。テストでは支払い能力を維持。 |
| 情報 | Exchangeのバージョン文字列が、インターフェースのバージョンより古い表記になっています。 | 本番デプロイの前に修正します。 |
| 情報 | 入金プロキシの関数が一つ、一度も呼ばれていません。 | プロキシのコードが入金アドレスをすべて決めているため、残しています。 |
| 情報 | オーナーは、Hyperliquid上の誰も請求していない余剰分から、アカウントに残高を計上できます。 | 信頼の前提です。本番ではタイムロックの背後にあります。 |
対象外としたもの
- 読み取り専用のレンズコントラクト、マーケット管理ライブラリ、境界値ライブラリは、ざっと目を通しただけで、一行ずつのレビューはしていません。
- 完全なテストスイートと、ストレージレイアウト、インターフェース、コントラクトサイズ、入金プロキシのコードの検査は、今回のレビューでは再実行していません。直近の完全な実行の結果を前提にしています。
- Hyperliquidに対するフォークテスト、ロール確認以外のデプロイ用スクリプト、オフチェーンのサービス、アプリ。
2026-11-08の変更後のトークンの発行ルール(勝ちの相殺なし、上限なし)、トークンフックのガスの挙動、Hyperliquidのプリコンパイルがテストの想定どおりに動くかどうか。
このページを正確に保つために
これはある時点での一回のレビューです。上記のコミットより後にコントラクトに加えられた変更については何も述べていません。コントラクトはタイムロックの背後でアップグレードできるため、その時点でデプロイされているものは、必ずコントラクトアドレスと照合して確認してください。