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:
-
Divisão ambiental
Como a maioria das exchanges, a Hyperliquid tem um ambiente de testes.-
Endereço do aplicativo Mainnet:
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:
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
-
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.
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:
-
- Dê um nome para a carteira proxy a ser criada.
-
- Gere endereço e chave privada.
-
- 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).
- 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.
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) + "`")
}
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])
}
Ativos da conta
javascript
function main() {
var account = exchange.GetAccount()
return account
}
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) + "`")
}
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) + "`")
}
Trocar alavancagem, trocar margem cruzada/margem isolada
javascript
function main() {
// 设置当前为全仓
exchange.IO("cross", true)
// 设置杠杆
exchange.SetMarginLevel("ETH_USD.swap", 10)
return exchange.GetRawJSON()
}
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 como
falseIndica a direção da rotação: futuros -> spot. - O parâmetro "toPerp" está definido como
trueIndica 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("测试结束")
}
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.
- 1













