仕組みの詳細
入金:CREATE2プロキシ
入金は、HyperCore上の個人用アドレスにUSDCを送るだけです。そこに届いたものがあなたの残高に反映されます。入金用の関数を呼ぶ必要も、何かを承認する必要もありません。入金はアプリから行ってください。HyperEVM上の同じアドレスに送ったUSDCは反映されません。
あなた専用の入金アドレス
すべてのアカウントには専用の入金アドレスがあり、DepositProxyFactoryがウォレットアドレスからCREATE2で計算します。
proxy = last 20 bytes of keccak256(0xff ‖ factory ‖ keccak256(user) ‖ keccak256(initCode))
initCode = DepositProxy creation code ‖ abi.encode(exchange, user)
入力はすべて公開されているので、誰でもアドレスを再計算できます。また、このアドレスは、背後のコントラクトが存在する前から資金を受け取れます。コントラクトは最初の入金がスイープされるときに、当社のリレイヤーのデプロイ用鍵か、アカウント自身によってデプロイされます。ほかの誰もデプロイできません。
アプリは何かを送る前に、当社のスイーパーにアドレスを登録し、自分の計算結果をサーバーの回答およびチェーンと照合します。一致しなければ何も送りません。どのルートも、このアドレスのHyperCore側に届きます。Hyperliquidからの送金、CircleのCCTPによるミント、そしてAcrossのフィルです。Acrossのフィルは、HyperEVM上のCircleのHyperCore入金コントラクトを通じて届きます。HyperEVM上でプロキシに直接トークンを送っても、監視されず、反映もされません。
スイーパーが拾い上げる
当社のスイーパーは、資金が届いた兆候に反応します。インデックスされたCCTPとHyperEVMの入金、登録済みアドレスへのHyperCore上の送金、そしてアプリが依頼する確認です。入金アドレスに10 USDC以上がある場合、スイーパーはExchangeの二つの呼び出し(どちらも公開)を実行します。
- 要求。 ExchangeがプロキシのHyperCore上の残高を読みます。USDCが無期限先物の担保にある場合は、プロキシに現物へ移すよう求めて止まり、次の要求でスイープします。そうでなければ、保留中のスイープ(その時点の金額とプロキシの残高)を記録し、CoreWriterを通じて、その金額をHyperCore上のExchangeのアカウントに送るようプロキシに求めます。
- 確定。 後のブロック(要求から少なくとも1後)で、Exchangeは二つの確認がどちらも成り立つ場合にだけ、その金額を反映します。一つは、プロキシの残高が記録した額より減っていること(動かせるのはExchangeだけなので、送金が実行されたことを意味します)。もう一つは、Exchange自身のHyperCore上の残高が、すでに負っているすべての額を少なくともその金額だけ上回っていること(資金が届き、まだ誰にも反映されていないことを意味します)です。
プロキシの残高だけを確認すると、手数料が引かれた後に失敗した送金を反映してしまったり、送金が遅れて同じ時間枠に新しい入金が届いたときに二重に反映してしまったりします。資金の到着を条件にすることで、この両方の穴をふさいでいます。確認がまだ成り立たない場合は、次のブロック以降で確定を再試行します。5ブロック以内に届かなかったスイープは未確認として扱われ、その金額が記録されます。後で照合担当がそれを反映できますが、記録された金額までに限られ、到着が検証でき、誰にも割り当てられていない資金からだけで、しかも30日以内に限られます。照合はすべてオンチェーンのイベントになります。アプリが入金を一件ずつ送り、反映を待ってから次を送るのはこのためです。
資金は通常、アドレスに届いてから数ブロック以内に残高に反映されます。最初の入金では、プロキシのデプロイも待ち、HyperCoreの一回限りのアカウント有効化手数料1 USDCもかかります。
直接入金ではなくプロキシを使う理由
理由は二つあります。一つ目は手軽さです。入金用の関数を呼ぶ方式では、承認と入金がそれぞれ必要で、どちらにもガス代がかかります。プロキシを使えば、入金はアドレスへの普通の送金になり、Hyperliquidからでも、Circleのブリッジからでも、Acrossからでも同じように動きます。
二つ目は分離です。各アカウントのプロキシは別々のアドレスなので、ほかの人の資金があなたの資金と混ざることはなく、スイーパーも各アカウントを個別に処理します。あるアカウントの入金に問題があっても、ほかには影響しません。
あなたが信頼しているもの
プロキシは、一つのファクトリーがCREATE2と固定のコードでデプロイします。誰でも任意のウォレットについて期待されるアドレスを導出し、そこにあるコントラクトが一致することを確認できます。ファクトリー、ソルト、コードハッシュはすべて公開されています。仮にコードが変わったとしたら、導出されるアドレスも一緒に変わります。古いアドレスが別のコードを黙って指すのではなく、そこにはコントラクトがない状態になります。ファクトリーもプロキシもアップグレードできません。
プロキシにUSDCを送らせることができるのはExchangeだけで、送り先もExchangeだけです。間違った場所に送られたものは、あなたにしか取り戻せません。HyperEVM上のプロキシコントラクトに届いたトークンやHYPEは、あなたのウォレットからプロキシのwithdrawStuckTokenとwithdrawStuckNativeを呼んで取り戻します。HyperCore上のアカウントに届いたUSDC以外のトークンは、あなたのウォレットからExchangeのrescueProxyCoreTokenを呼んで取り戻します。