Pular para o conteúdo

    Aperte / para buscar e [ ou ] para ir à página anterior ou à próxima.

    Como funciona por dentro

    Depósitos: proxies CREATE2

    Para depositar, você envia USDC para um endereço pessoal na HyperCore. O que chega ali é creditado para você; não há chamada de depósito a fazer nem nada para aprovar. Deposite pelo app: USDC enviados ao mesmo endereço na HyperEVM não são creditados.

    Depositar pelo seu endereço de depósitoO USDC enviado ao seu endereço de depósito na HyperCore é varrido para o Exchange, conferido duas vezes e creditado no seu saldo.1Você envia USDCpara o seu endereço de depósito2Proxy de depósitoum contrato que só o Exchange pode esvaziar3Pedido de varreduraproxy → Exchange na HyperCore4Duas conferênciaso saldo do proxy caiu e os fundos chegaram5Creditadoseu saldo para operar
    Depositar pelo seu endereço de depósito. O USDC enviado ao seu endereço de depósito na HyperCore é varrido para o Exchange, conferido duas vezes e creditado no seu saldo.

    Seu próprio endereço de depósito

    Cada conta tem o próprio endereço de depósito, calculado a partir do endereço da carteira com CREATE2 pelo DepositProxyFactory:

    proxy    = last 20 bytes of keccak256(0xff ‖ factory ‖ keccak256(user) ‖ keccak256(initCode))
    initCode = DepositProxy creation code ‖ abi.encode(exchange, user)
    

    Todas as entradas são públicas, então qualquer pessoa pode recalcular o endereço, e ele pode receber fundos antes de o contrato por trás dele existir. O contrato é implantado quando o primeiro depósito é varrido, pela chave de implantação do nosso relayer ou pela própria conta; ninguém mais pode implantá-lo.

    O app registra o endereço no nosso sweeper antes de enviar qualquer coisa, e confere o próprio cálculo com a resposta do servidor e com a rede; se eles não baterem, nada é enviado. Todas as rotas caem no lado HyperCore do endereço: transferências da Hyperliquid, cunhagens do CCTP da Circle e execuções da Across, que chegam pelo contrato de depósito na HyperCore da Circle na HyperEVM. Uma transferência simples do token para o proxy na HyperEVM não é monitorada e não é creditada.

    O sweeper assume

    O nosso sweeper reage a sinais de que os fundos chegaram: depósitos CCTP e da HyperEVM indexados, transferências da HyperCore para endereços registrados e verificações pedidas pelo app. Quando um endereço de depósito tem pelo menos 10 USDC, ele dispara duas chamadas ao Exchange, ambas públicas:

    1. Pedido. O Exchange lê os saldos do proxy na HyperCore. Se os USDC estiverem como colateral de perps, ele pede ao proxy que os mova para o spot e para; o próximo pedido faz a varredura. Caso contrário, ele registra uma varredura pendente (o valor e o saldo do proxy naquele momento) e pede ao proxy que envie esse valor para a conta do Exchange na HyperCore pelo CoreWriter.
    2. Finalização. Num bloco posterior (pelo menos 1 depois do pedido), o Exchange credita o valor se, e somente se, as duas verificações passarem: o saldo do proxy agora está abaixo do registrado (só o Exchange pode movê-lo, então o envio foi executado), e o saldo do próprio Exchange na HyperCore supera tudo o que ele já deve em pelo menos esse valor (os fundos chegaram e ainda não foram creditados a ninguém).

    Conferir só o saldo do proxy creditaria um envio que falhou depois de cobrada uma taxa, ou creditaria duas vezes quando um envio atrasa e um novo depósito chega na mesma janela; exigir que os fundos cheguem fecha as duas brechas. Se as verificações ainda não passarem, a finalização é tentada de novo nos blocos seguintes. Uma varredura que não chegou em 5 blocos é marcada como não confirmada e o valor dela é registrado; um conciliador pode creditá-la depois, mas só até o valor registrado, só com fundos que comprovadamente chegaram e não estão atribuídos a ninguém, e só dentro de 30 dias. Toda conciliação é um evento on-chain. É por isso que o app envia um depósito por vez e espera que ele seja creditado.

    Os fundos costumam chegar ao seu saldo poucos blocos depois de chegarem ao seu endereço; um primeiro depósito também espera a implantação do proxy e paga a ativação única de conta da HyperCore, de 1 USDC.

    Por que proxies, e não depósitos diretos

    Por dois motivos. O primeiro é a conveniência: uma chamada de depósito exigiria uma aprovação e um depósito, cada um com gas. Um proxy transforma um depósito numa simples transferência para um endereço, que funciona do mesmo jeito venha ela da Hyperliquid, de uma ponte da Circle ou da Across.

    O segundo é o isolamento: o proxy de cada conta é um endereço separado, então os fundos de ninguém podem se misturar com os seus, e o sweeper trata cada conta separadamente. Um problema com o depósito de uma conta não afeta as outras.

    Em que você está confiando

    Os proxies são implantados por uma única factory, com CREATE2 e código fixo. Qualquer pessoa pode derivar o endereço esperado para qualquer carteira e conferir se o contrato que está ali corresponde: a factory, o salt e o hash do código são públicos. Se o código mudasse algum dia, o endereço derivado mudaria junto; o seu endereço antigo ficaria sem contrato, em vez de apontar silenciosamente para outro código. Nem a factory nem o proxy podem ser atualizados.

    Só o Exchange pode fazer um proxy enviar USDC, e só para o Exchange. O que for enviado para o lugar errado só pode ser recuperado por você: tokens ou HYPE que cheguem ao contrato do proxy na HyperEVM, com withdrawStuckToken e withdrawStuckNative, chamados da sua carteira no proxy, e tokens que não sejam USDC que cheguem à conta dele na HyperCore, com rescueProxyCoreToken, chamado da sua carteira no Exchange.

    Última atualização: