Cómo funciona por dentro
Depósitos: proxies CREATE2
Los depósitos funcionan enviando USDC a una dirección personal en HyperCore. Lo que llega ahí se te acredita; no hay que llamar a ninguna función de depósito ni aprobar nada. Deposita a través de la app: los USDC enviados a la misma dirección en HyperEVM no se acreditan.
Tu propia dirección de depósito
Cada cuenta tiene su propia dirección de depósito, que el DepositProxyFactory calcula a partir de la dirección de la billetera con CREATE2:
proxy = last 20 bytes of keccak256(0xff ‖ factory ‖ keccak256(user) ‖ keccak256(initCode))
initCode = DepositProxy creation code ‖ abi.encode(exchange, user)
Todos los datos de entrada son públicos, así que cualquiera puede recalcular la dirección, y esta puede recibir fondos antes de que exista el contrato que hay detrás. El contrato se despliega cuando se barre el primer depósito, ya sea con la clave de despliegue de nuestro relayer o por la propia cuenta; nadie más puede desplegarlo.
La app registra la dirección en nuestro sweeper antes de enviar nada, y compara su propio cálculo con la respuesta del servidor y con la cadena; si no coinciden, no se envía nada. Todas las rutas llegan al lado HyperCore de la dirección: las transferencias de Hyperliquid, las acuñaciones de CCTP de Circle y las ejecuciones de Across, que llegan a través del contrato de depósito a HyperCore de Circle en HyperEVM. Una transferencia simple del token al proxy en HyperEVM no se vigila y no se acredita.
El sweeper lo recoge
Nuestro sweeper reacciona a las señales de que llegaron fondos: depósitos de CCTP y de HyperEVM indexados, transferencias de HyperCore hacia direcciones registradas y comprobaciones que pide la app. Cuando una dirección de depósito tiene al menos 10 USDC, ejecuta dos llamadas al Exchange, ambas públicas:
- Solicitud. El Exchange lee los saldos del proxy en HyperCore. Si los USDC están como colateral de perps, le pide al proxy que los pase a spot y se detiene; la siguiente solicitud los barre. Si no, registra un barrido pendiente (el monto y el saldo del proxy en ese momento) y le pide al proxy que envíe ese monto a la cuenta del Exchange en HyperCore a través de CoreWriter.
- Finalización. En un bloque posterior (al menos 1 después de la solicitud), el Exchange acredita el monto si, y solo si, se cumplen las dos comprobaciones: el saldo del proxy ahora está por debajo del registrado (solo el Exchange puede moverlo, así que el envío se ejecutó), y el saldo propio del Exchange en HyperCore supera todo lo que ya debe en al menos ese monto (los fondos llegaron y todavía no se le acreditaron a nadie).
Comprobar solo el saldo del proxy acreditaría un envío que falló después de cobrarse una comisión, o acreditaría dos veces cuando un envío se retrasa y llega un depósito nuevo en la misma ventana; exigir que los fondos lleguen cierra ambos huecos. Si las comprobaciones todavía no se cumplen, la finalización se reintenta en los bloques siguientes. Un barrido que no llegó dentro de 5 bloques se marca como no confirmado y se registra su monto; un conciliador puede acreditarlo más tarde, pero solo hasta el monto registrado, solo con fondos que llegaron de forma verificable y que no están atribuidos a nadie, y solo dentro de 30 días. Cada conciliación es un evento on-chain. Por eso la app envía un depósito a la vez y espera a que se acredite.
Los fondos suelen llegar a tu saldo pocos bloques después de llegar a tu dirección; un primer depósito además espera a que se despliegue su proxy y paga la activación única de cuenta de HyperCore, de 1 USDC.
Por qué proxies y no depósitos directos
Por dos razones. La primera es la comodidad: una llamada de depósito necesitaría una aprobación y un depósito, cada uno con su gas. Un proxy convierte un depósito en una simple transferencia a una dirección, que funciona igual venga de Hyperliquid, de un puente de Circle o de Across.
La segunda es el aislamiento: el proxy de cada cuenta es una dirección aparte, así que los fondos de nadie pueden mezclarse con los tuyos, y el sweeper trata cada cuenta por separado. Un problema con el depósito de una cuenta no afecta a las demás.
En qué estás confiando
Los proxies los despliega una sola factory, con CREATE2 y código fijo. Cualquiera puede derivar la dirección esperada para cualquier billetera y comprobar que el contrato que hay ahí coincide: la factory, la sal y el hash del código son públicos. Si el código cambiara alguna vez, la dirección derivada cambiaría con él; tu dirección anterior quedaría sin contrato, en lugar de apuntar en silencio a un código distinto. Ni la factory ni el proxy se pueden actualizar.
Solo el Exchange puede hacer que un proxy envíe USDC, y solo al Exchange. Lo que se envíe al lugar equivocado solo lo puedes recuperar tú: los tokens o el HYPE que lleguen al contrato del proxy en HyperEVM, con withdrawStuckToken y withdrawStuckNative, llamados desde tu billetera sobre el proxy, y los tokens distintos de USDC que lleguen a su cuenta de HyperCore, con rescueProxyCoreToken, llamado desde tu billetera sobre el Exchange.