Type/to search
8
Follow
1364
Followers
DEX Exchange Prática Quantitativa (2) - Guia do Usuário Hyperliquid
Discussions
Created 2025-01-15 13:43:15  Updated 2025-01-16 09:52:43
 2
 4152

img

Prefácio

Recentemente, a plataforma FMZ adicionou suporte para Hyperliquid DEX, uma exchange descentralizada de alto desempenho, oferecendo aos usuários mais opções para participar de transações descentralizadas. Atualmente, a função de custódia da plataforma FMZ foi totalmente atualizada para oferecer suporte às transações de contratos spot e perpétuos da Hyperliquid e cobrir todas as funções de API da DEX.

Visão geral da plataforma Hyperliquid

Hyperliquid é uma blockchain L1 de alto desempenho otimizada do zero com a visão de construir um sistema financeiro aberto totalmente on-chain. Os usuários podem criar aplicativos de forma independente, interagindo com componentes nativos eficientes, garantindo ao mesmo tempo uma experiência tranquila para o usuário final.

O desempenho do Hyperliquid L1 é suficiente para suportar um ecossistema sem permissão de aplicativos financeiros. Todos os pedidos, retiradas de pedidos, transações e liquidações são concluídos na cadeia de forma completamente transparente, com atrasos de bloco de menos de 1 segundo. Atualmente, a rede suporta uma capacidade de processamento de até 100.000 pedidos por segundo.

O Hyperliquid L1 usa um algoritmo de consenso personalizado chamado HyperBFT, inspirado no Hotstuff e seus sucessores. Tanto o mecanismo de consenso quanto a arquitetura de rede são otimizados de baixo para cima para atender às necessidades de blockchain de alto desempenho.

Por meio deste guia, esperamos ajudar você a começar rapidamente com a negociação programática e quantitativa da Hyperliquid DEX na plataforma FMZ e descobrir mais oportunidades de negociação.

Conteúdo prático

Protocolo REST

  • Prática de interface de mercado.
  • Prática de interface de negociação (colocação de ordens, cancelamento de ordens).
  • Práticas de consulta relacionadas a transações (contas, pedidos).
  • Outras funções (spot, transferência de contrato, retirada de cofre, transferência de ativos para carteira, etc.).

Protocolo Websocket

  • Prática de assinatura de informações de troca (não há interface de trocas na interface REST, que é complementada pela interface Websocket)

Hyperliquid

  • Tipos de negociação
    O Hyperliquid é dividido em contratos spot e perpétuos com base nas variedades de negociação. Com base na arquitetura da plataforma FMZ, ele também é dividido em objetos de troca spot Hyperliquid e objetos de troca de futuros Hyperliquid na plataforma FMZ. Eles correspondem a diferentes variedades no Hyperliquid DEX, respectivamente.

    Na página Adicionar Bolsa da plataforma FMZ, você pode configurar objetos de bolsa à vista e de futuros da Hyperliquid:

    https://www.fmz.com/m/platforms/add

    img

  • Divisão ambiental
    Como a maioria das exchanges, a Hyperliquid tem um ambiente de testes.

    • Endereço do aplicativo Mainnet:

      https://app.hyperliquid.xyz

      Pela experiência real de uso, a rede principal é relativamente estável e a velocidade também é boa.
      Endereço do nó da interface da API do protocolo REST correspondente:https://api.hyperliquid.xyz
      As informações relacionadas à assinatura de mensagens também são diferentes:source == "a"chainId = 42161

    • Endereço do aplicativo de rede de teste:

      https://app.hyperliquid-testnet.xyz

      A rede de teste frequentemente trava, mas ela é usada apenas como uma interface de teste e para familiarizar-se com as funções de negociação na DEX.
      Endereço do nó da interface da API do protocolo REST correspondente:https://api.hyperliquid-testnet.xyz
      As informações relacionadas à assinatura de mensagens também são diferentes:source == "b"chainId = 421614

Informações de conexão, login e configuração da carteira

Assim como o método de conexão de carteira da maioria das exchanges DEX, você pode usar o APP da carteira para escanear o código QR para se conectar ao Hyperliquid (troque a carteira para Arbitrum e escaneie o código para fazer login, a rede de teste e a rede principal são as mesmas) .

  • Conexão da carteira com o Hyperliquid

    img

  • Testnet Faucet (teste de depósito de ativos USDC)

    Se você quiser se familiarizar com a testnet primeiro, poderá encontrar a faucet diretamente na página da Hyperliquid depois de conectar sua carteira à Hyperliquid.

    img

    Você pode reivindicar ativos de teste. Após receber o USDC para teste, clique no botão "Deposit" para depositá-lo no Hyperliquid (é melhor ter algum ETH para a rede de teste Arbitrum).

  • Deposite ativos USDC na rede principal

    Clique no botão "Depositar" para depositar, o que requer verificação de carteira e consumirá um pouco de ETH na Arbitrum.

  • Crie uma configuração de carteira proxy

    Ao realizar transações manuais na página do Hyperliquid APP, a página gerará automaticamente um endereço de carteira proxy e uma chave privada, que são registrados no navegador e usados ​​para operações como fazer pedidos na página do navegador. Se quisermos fazer programática e quantitativa Como a transação precisa obter essas informações de configuração?

    Você pode criar o endereço da carteira proxy necessária e a chave privada correspondente na página da API do Hyperliquid:

    img

    img

      1. Dê um nome para a carteira proxy a ser criada.
      1. Gere endereço e chave privada.
      1. Autorize a carteira proxy usando a carteira conectada ao Hyperliquid.
  • Configurar o endereço da carteira proxy e a chave privada no FMZ

    Então você pode configurar essas informações na plataforma FMZ (a interface de configuração é mencionada acima).

    https://www.fmz.com/m/platforms/add

    • Endereço da carteira: O endereço da carteira conectada ao Hyperliquid (observe que não é o endereço da carteira proxy).
    • Wallet PrivateKey: A chave privada da carteira conectada ao Hyperliquid (opcional, necessária somente ao chamar APIs como transferências, pode ser deixada em branco).
    • Chave secreta: chave privada da carteira proxy (gerada na etapa anterior, a chave privada é exibida após a autorização).

Prática Hiperlíquida na FMZ

Informações necessárias para configurar o objeto de troca:

  • O endereço da carteira é usado para consultar informações de transações do usuário
  • A Wallet PrivateKey é usada para transferência, transferência e outras operações
  • A chave secreta é usada para operações relacionadas a transações

Uma vez que a configuração esteja completa, podemos testá-la na plataforma FMZ. Usamos diretamente a "ferramenta de depuração" da plataforma FMZ para prática de teste.

https://www.fmz.com/m/debug

Se você estiver usando um objeto de troca Hyperliquid configurado com informações de testnet, será necessário fazer algumas operações de comutação ao usá-lo, por exemplo:

javascript
function main() { // REST协议API地址切换到测试网 exchange.SetBase("https://api.hyperliquid-testnet.xyz") // source : a 主网 , b 测试网 exchange.IO("source", "b") return exchange.GetAccount() }

A configuração da mainnet não requer a operação de comutação acima. As interfaces de API relacionadas a produtos spot e futuros na bolsa Hyperliquid DEX são quase as mesmas, com apenas pequenas diferenças nos detalhes. Em seguida, usamosInformações de configuração da rede principaleInformações de configuração do Testnetde Futuros HiperlíquidosTroque objetos para testar.

Informações sobre variedades

javascript
function main() { var markets = exchange.GetMarkets() if (!markets) { throw "get markets error" } var tbl = { type: "table", title: "test markets", cols: [ "key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal", "CtValCcy" ], rows: [] } for (var symbol in markets) { var market = markets[symbol] tbl.rows.push([ symbol, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal, market.CtValCcy ]) } LogStatus("`" + JSON.stringify(tbl) + "`") }

img

Dados do livro de pedidos

javascript
function main() { var depth = exchange.GetDepth("ETH_USD.swap") var asks = depth.Asks var bids = depth.Bids Log("买3", bids[2]) Log("买2", bids[1]) Log("买1", bids[0]) Log("卖1", asks[0]) Log("卖2", asks[1]) Log("卖3", asks[2]) }

img

Ativos da conta

javascript
function main() { var account = exchange.GetAccount() return account }

img

Encomendar e verificar

javascript
function main() { var symbols = ["ETH_USD.swap", "XRP_USD.swap", "HYPE_USD.swap"] var arrDir = ["market_buy", "sell", "buy"] var markets = exchange.GetMarkets() var ids = [] for (var i in symbols) { var symbol = symbols[i] var side = arrDir[i] var ticker = exchange.GetTicker(symbol) var info = markets[symbol] exchange.SetPrecision(info.PricePrecision, info.AmountPrecision) // USDC var qty = 15 var price = null var amount = null if (side == "market_buy") { price = -1 side = "buy" amount = qty / ticker.Last } else { price = side == "buy" ? ticker.Last * 0.9 : ticker.Last * 1.1 amount = qty / price } var id = exchange.CreateOrder(symbol, side, price, amount) ids.push(id) } var tbl = {type: "table", title: "test", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []} for (var id of ids) { var order = exchange.GetOrder(id) tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType]) Sleep(500) } LogStatus("`" + JSON.stringify(tbl) + "`") }

img

Cancelar todos os pedidos

javascript
function main() { var orders = exchange.GetOrders("USD.swap") for (var order of orders) { exchange.CancelOrder(order.Id, order) Sleep(1000) } var tbl = {type: "table", title: "test", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []} for (var order of orders) { tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType]) } LogStatus("`" + JSON.stringify(tbl) + "`") }

img

Trocar alavancagem, trocar margem cruzada/margem isolada

javascript
function main() { // 设置当前为全仓 exchange.IO("cross", true) // 设置杠杆 exchange.SetMarginLevel("ETH_USD.swap", 10) return exchange.GetRawJSON() }

img

exchange.GetRawJSON() retorna as informações de resposta da solicitação de configuração de alavancagem:

{"status":"ok","response":{"type":"default"}}

Outras interfaces

Como os parâmetros da interface da exchange são complexos, não é possível usar o método de codificação de URL para passar os parâmetros.exchange.IOAo chamar uma função, somente strings JSON podem ser passadas como parâmetros. A seguir estão exemplos de chamada de cada interface.

Documentação de referência do Hyperliquid: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order

Schedule Cancel (dead man's switch)

javascript
var params = {"type": "scheduleCancel", "time": new Date().getTime()} return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))

{"status":"err","response":"Cannot set scheduled cancel time until enough volume traded. Required: $1000000. Traded: $174.57424."}

Esta função tem restrições: a conta deve atingir o nível de negociação para usar esta função.

twapOrder

Crie um pedido TWAP.

javascript
function main() { var params = { "type": "twapOrder", "twap": { "a": 0, "b": true, "s": "1", "r": false, "m": 10, "t": false } } // SOL_USDT.swap , 订单量 : 1 , twapOrder 订单有头寸要求,最少100美元价值 // a : 0 , 即 SOL_USDT.swap 这个品种 return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }

twapCancel

Cancelar pedido TWAP.

javascript
function main() { var params = { "type": "twapCancel", "a": 0, "t": 3805 } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }

approveAgent

Testnet, autorize uma nova carteira proxy.

javascript
function main() { var params = { "type": "approveAgent", "hyperliquidChain": "Testnet", "signatureChainId": "0x66eee", "agentAddress": "0xAAAA", "agentName": "test02", "nonce": new Date().getTime() } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }

A autorização retorna com sucesso:

{"status":"ok","response":{"type":"default"}}

  • Crie uma carteira proxy API. 0xAAAA é o endereço de carteira gerado (apenas um exemplo). Salve a chave privada correspondente ao gerá-la.
  • "test02" é o nome da carteira proxy da API. O par de chaves gerado será exibido na página do APP hyperliquid.https://app.hyperliquid-testnet.xyz/APImeio.

vaultTransfer

Retire ativos do cofre.

javascript
function main() { var params = { "type": "vaultTransfer", "vaultAddress": "0xAAA", "isDeposit": true, "usd": 5000000 } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }
  • "usd": 5000000 significa 5 USDC.
  • "0xAAA": é o endereço do cofre.
  • "isDeposit": true, controla depósito e depósito.

withdraw3

Testnet, retire ativos para a carteira.

javascript
function main() { var params = { "type": "withdraw3", "hyperliquidChain": "Testnet", "signatureChainId": "0x66eee", "amount": "5", "time": new Date().getTime(), "destination": "0xAAA" } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }
  • Retire dinheiro para o endereço da sua carteira atual: "0xAAA".

usdClassTransfer

Transferência de ativos entre spot/futuros (contratos perpétuos).

javascript
function main() { var params = { "type": "usdClassTransfer", "hyperliquidChain": "Testnet", "signatureChainId": "0x66eee", "amount": "5", "toPerp": false, "nonce": new Date().getTime() } return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params)) }
  • O parâmetro "toPerp" está definido comofalseIndica a direção da rotação: futuros -> spot.
  • O parâmetro "toPerp" está definido comotrueIndica a direção da transferência: spot -> futuros.

Uso da interface Websocket

Endereço da interface WS da rede principal:

Mainnet: wss://api.hyperliquid.xyz/ws

Como a interface da API do protocolo REST não possui uma interface para obter dados de transações recentes, a interface Websocket possui este canal que pode ser assinado.

Estrutura da mensagem de assinatura

{ "method": "subscribe", "subscription": { "type": "trades", "coin": "SOL" } }

Exemplo de teste executado no depurador:

javascript
function main() { var loopCount = 20 var subMsg = { "method": "subscribe", "subscription": { "type": "trades", "coin": "SOL" } } var conn = Dial("wss://api.hyperliquid.xyz/ws") conn.write(JSON.stringify(subMsg)) if (conn) { for (var i = 0; i < loopCount; i++) { var msg = conn.read(1000) if (msg) { Log(msg) } } } conn.close() Log("测试结束") }

img

END

Os testes acima são baseados no custodian mais recente. Você precisa baixar o custodian mais recente para dar suporte à exchange Hyperliquid DEX.

Obrigado pelo seu apoio e obrigado pela leitura.

Comment
All comments (2)

    服务器租个地区的

    8 months ago

    日本、新加坡、香港,都可以,具体看使用需求。

    8 months ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)