Prefacio
Recientemente, la plataforma FMZ ha agregado soporte para Hyperliquid DEX, un intercambio descentralizado de alto rendimiento, que brinda a los usuarios más opciones para participar en transacciones descentralizadas. Actualmente, la función de custodia de la plataforma FMZ se ha actualizado completamente para admitir las transacciones de contratos al contado y perpetuos de Hyperliquid y cubrir todas las funciones API del DEX.
Descripción general de la plataforma HyperLiquid
Hyperliquid es una cadena de bloques L1 de alto rendimiento optimizada desde cero con la visión de construir un sistema financiero completamente abierto en cadena. Los usuarios pueden crear aplicaciones de forma independiente interactuando con componentes nativos eficientes y garantizando al mismo tiempo una experiencia fluida para el usuario final.
El rendimiento de Hyperliquid L1 es suficiente para soportar un ecosistema de aplicaciones financieras sin permisos. Todos los pedidos, retiros de pedidos, transacciones y liquidaciones se completan en cadena de manera completamente transparente, con retrasos de bloque de menos de 1 segundo. Actualmente, la cadena admite una capacidad de procesamiento de hasta 100.000 pedidos por segundo.
Hyperliquid L1 utiliza un algoritmo de consenso personalizado llamado HyperBFT, que está inspirado en Hotstuff y sus sucesores. Tanto el mecanismo de consenso como la arquitectura de la red están optimizados de abajo hacia arriba para satisfacer las necesidades de la cadena de bloques de alto rendimiento.
A través de esta guía, esperamos ayudarlo a comenzar rápidamente con el comercio programático y cuantitativo de Hyperliquid DEX en la plataforma FMZ y descubrir más oportunidades comerciales.
Contenido de práctica
Protocolo REST
- Práctica de interfaz de mercado.
- Práctica de interfaz comercial (colocación de órdenes, cancelación de órdenes).
- Prácticas de consulta relacionadas con transacciones (cuentas, pedidos).
- Otras funciones (spot, transferencia de contrato, retiro de bóveda, transferencia de activos a billetera, etc.).
Protocolo WebSocket
- Práctica de suscripción de información de intercambio (no existe una interfaz de Trades en la interfaz REST, que se complementa con la interfaz Websocket)
Hyperliquid
-
Tipos de comercio
Hyperliquid se divide en contratos al contado y perpetuos según las variedades de negociación. Según la arquitectura de la plataforma FMZ, también se divide en objetos de intercambio al contado de Hyperliquid y objetos de intercambio de futuros de Hyperliquid en la plataforma FMZ. Corresponden a diferentes variedades en Hyperliquid DEX respectivamente.En la página Agregar intercambio de la plataforma FMZ, puede configurar objetos de intercambio de futuros y spot de Hyperliquid:
-
División ambiental
Como la mayoría de los intercambios, Hyperliquid tiene un entorno de prueba.-
Dirección de la aplicación de red principal:
Según la experiencia de uso real, la red principal es relativamente estable y la velocidad también es buena.
La dirección del nodo de interfaz API del protocolo REST correspondiente:https://api.hyperliquid.xyz。
La información relacionada con la firma de mensajes también es diferente:source == "a",chainId = 42161 -
Dirección de la aplicación de red de prueba:
La red de prueba a menudo falla, pero solo se utiliza como interfaz de prueba y para familiarizarse con las funciones comerciales en DEX.
La dirección del nodo de interfaz API del protocolo REST correspondiente:https://api.hyperliquid-testnet.xyz。
La información relacionada con la firma de mensajes también es diferente:source == "b",chainId = 421614
-
Información de conexión, inicio de sesión y configuración de la billetera
Al igual que el método de conexión de billetera de la mayoría de los intercambios DEX, puede usar la aplicación de billetera para escanear el código QR para conectarse a Hyperliquid (cambie la billetera a Arbitrum y escanee el código para iniciar sesión, la red de prueba y la red principal son las mismas) .
-
Conexión de la billetera a Hyperliquid
-
Grifo de red de prueba (depósito de activos de USDC de prueba)
Si primero desea familiarizarse con la red de prueba, puede encontrar la faucet directamente en la página de Hyperliquid después de conectar su billetera a Hyperliquid.
Puedes reclamar activos de prueba. Después de recibir los USDC para la prueba, haz clic en el botón "Depositar" para depositarlos en Hyperliquid (es mejor tener algo de ETH para la red de prueba de Arbitrum).
-
Deposite activos de USDC en la red principal
Haga clic en el botón "Depositar" para depositar, lo que requiere verificación de billetera y consumirá un poco de ETH en Arbitrum.
-
Crear una configuración de billetera proxy
Al realizar transacciones manuales en la página de la aplicación Hyperliquid, la página generará automáticamente una dirección de billetera proxy y una clave privada, que se registran en el navegador y se utilizan para operaciones como realizar pedidos en la página del navegador. Si queremos realizar transacciones programáticas y cuantitativas ¿Cómo necesita la transacción obtener esta información de configuración?
Puede crear la dirección de billetera proxy requerida y la clave privada correspondiente en la página de API de Hyperliquid:
-
- Dale un nombre a la billetera proxy que se creará.
-
- Generar dirección y clave privada.
-
- Autorice la billetera proxy utilizando la billetera conectada a Hyperliquid.
-
-
Configurar la dirección de la billetera proxy y la clave privada en FMZ
Luego puedes configurar esta información en la plataforma FMZ (la interfaz de configuración se menciona arriba).
- Dirección de billetera: la dirección de billetera conectada a Hyperliquid (nota: no es la dirección de billetera proxy).
- Clave privada de la billetera: la clave privada de la billetera conectada a Hyperliquid (opcional, solo se requiere cuando se invocan API como transferencias, se puede dejar en blanco).
- Clave secreta: clave privada de la billetera proxy (generada en el paso anterior, la clave privada que se muestra después de la autorización).
Práctica de hiperlíquidos en FMZ
Información necesaria para configurar el objeto de intercambio:
- La dirección de la billetera se utiliza para consultar información de transacciones del usuario.
- La clave privada de la billetera se utiliza para transferencias, transferencias y otras operaciones.
- La clave secreta se utiliza para operaciones relacionadas con transacciones.
Una vez completada la configuración, podemos probarla en la plataforma FMZ. Para la práctica de pruebas, utilizamos directamente la "herramienta de depuración" de la plataforma FMZ.
Si está utilizando un objeto de intercambio Hyperliquid configurado con información de red de prueba, deberá realizar algunas operaciones de conmutación al usarlo, por ejemplo:
javascript
function main() {
// REST协议API地址切换到测试网
exchange.SetBase("https://api.hyperliquid-testnet.xyz")
// source : a 主网 , b 测试网
exchange.IO("source", "b")
return exchange.GetAccount()
}
La configuración de la red principal no requiere la operación de conmutación anterior. Las interfaces API relacionadas con los productos spot y futuros en el intercambio Hyperliquid DEX son casi las mismas, con solo ligeras diferencias en los detalles. A continuación, utilizamosInformación de configuración de la red principalyInformación de configuración de la red de pruebade Futuros hiperlíquidosIntercambiar objetos para probar.
Información sobre la variedad
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) + "`")
}
Datos de la cartera 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])
}
Activos de la cuenta
javascript
function main() {
var account = exchange.GetAccount()
return account
}
Ordenar y comprobar
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 los 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) + "`")
}
Cambiar apalancamiento, cambiar margen cruzado/margen aislado
javascript
function main() {
// 设置当前为全仓
exchange.IO("cross", true)
// 设置杠杆
exchange.SetMarginLevel("ETH_USD.swap", 10)
return exchange.GetRawJSON()
}
exchange.GetRawJSON() devuelve la información de respuesta de la solicitud de configuración de apalancamiento:
{"status":"ok","response":{"type":"default"}}
Otras interfaces
Dado que los parámetros de la interfaz del intercambio son complejos, no es posible utilizar el método de codificación de URL para pasar los parámetros.exchange.IOAl llamar a una función, solo se pueden pasar cadenas JSON como parámetros. A continuación, se muestran ejemplos de llamadas a cada interfaz.
Documentación de referencia de 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 función tiene restricciones: la cuenta debe alcanzar el nivel comercial para utilizar esta función.
twapOrder
Crear una orden 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, autoriza una nueva billetera 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))
}
La autorización se devuelve correctamente:
{"status":"ok","response":{"type":"default"}}
- Crea una billetera proxy de API. 0xAAAA es la dirección de la billetera generada (solo un ejemplo). Guarda la clave privada correspondiente al generarla.
- "test02" es el nombre de la billetera del proxy de API. El par de claves generado se mostrará en la página de la aplicación HyperLiquid.
https://app.hyperliquid-testnet.xyz/APImedio.
vaultTransfer
Retirar activos de la bóveda.
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": es la dirección de la bóveda.
- "isDeposit": verdadero, controla el depósito y el depósito.
withdraw3
Testnet, retira activos a la billetera.
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))
}
- Retirar dinero a su dirección de billetera actual: "0xAAA".
usdClassTransfer
Transferencia de activos entre spot/futuros (contratos perpetuos).
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))
}
- El parámetro "toPerp" está establecido en
falseIndica la dirección de rotación: futuros -> spot. - El parámetro "toPerp" está establecido en
trueIndica la dirección de transferencia: spot -> futuros.
Uso de la interfaz WebSocket
Dirección de la interfaz WS de la red principal:
Mainnet: wss://api.hyperliquid.xyz/ws
Dado que la interfaz API del protocolo REST no tiene una interfaz para obtener datos de transacciones recientes, la interfaz Websocket tiene este canal al que se puede suscribir.
Estructura del mensaje de suscripción
{
"method": "subscribe",
"subscription": {
"type": "trades",
"coin": "SOL"
}
}
Ejemplo de prueba ejecutada en el 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
Las pruebas anteriores se basan en el último custodio. Debe descargar el último custodio para admitir el intercambio DEX Hyperliquid.
Gracias por su apoyo y gracias por leer.
- 1













