[TOC]

Vor Kurzem hat die FMZ-Plattform Unterstützung für Hyperliquid DEX hinzugefügt, eine dezentrale Hochleistungsbörse, die den Benutzern mehr Möglichkeiten zur Teilnahme an dezentralen Transaktionen bietet. Derzeit wurde die Depotbankfunktion der FMZ-Plattform vollständig aktualisiert, um die Spot- und Perpetual-Contract-Transaktionen von Hyperliquid zu unterstützen und alle API-Funktionen des DEX abzudecken.
Übersicht zur Hyperliquid-Plattform
Hyperliquid ist eine von Grund auf optimierte, leistungsstarke L1-Blockchain mit der Vision, ein vollständig offenes On-Chain-Finanzsystem aufzubauen. Benutzer können durch die Interaktion mit effizienten nativen Komponenten eigenständig Anwendungen erstellen und gleichzeitig ein reibungsloses Endbenutzererlebnis gewährleisten.
Die Leistung von Hyperliquid L1 reicht aus, um ein genehmigungsfreies Ökosystem von Finanz-Anwendungen zu unterstützen. Alle Aufträge, Auftragsrücknahmen, Transaktionen und Liquidationen werden in der Blockchain völlig transparent und mit Blockverzögerungen von weniger als 1 Sekunde ausgeführt. Derzeit unterstützt die Kette eine Verarbeitungskapazität von bis zu 100.000 Bestellungen pro Sekunde.
Hyperliquid L1 verwendet einen benutzerdefinierten Konsensalgorithmus namens HyperBFT, der von Hotstuff und seinen Nachfolgern inspiriert ist. Sowohl der Konsensmechanismus als auch die Netzwerkarchitektur sind von Grund auf optimiert, um die Anforderungen einer Hochleistungs-Blockchain zu erfüllen.
Mit diesem Leitfaden möchten wir Ihnen den schnellen Einstieg in den programmatischen und quantitativen Handel von Hyperliquid DEX auf der FMZ-Plattform erleichtern und Ihnen helfen, weitere Handelsmöglichkeiten zu entdecken.
REST-Protokoll
Websocket-Protokoll
Auf der Seite „Börse hinzufügen“ der FMZ-Plattform können Sie Hyperliquid-Spot- und Futures-Börsenobjekte konfigurieren:

Abteilung Umwelt Wie die meisten Börsen verfügt Hyperliquid über eine Testumgebung.
Aus der tatsächlichen Nutzungserfahrung ist das Hauptnetzwerk relativ stabil und die Geschwindigkeit ist auch gut.
Die entsprechende Knotenadresse der REST-Protokoll-API-Schnittstelle:https://api.hyperliquid.xyz。
Auch die Informationen zur Nachrichtensignierung sind unterschiedlich:source == "a",chainId = 42161
Das Testnetzwerk stürzt häufig ab, dient aber nur als Testoberfläche und zum Kennenlernen der Handelsfunktionen auf DEX.
Die entsprechende Knotenadresse der REST-Protokoll-API-Schnittstelle:https://api.hyperliquid-testnet.xyz。
Auch die Informationen zur Nachrichtensignierung sind unterschiedlich:source == "b",chainId = 421614
Genau wie bei der Wallet-Verbindungsmethode der meisten DEX-Börsen können Sie die Wallet-App verwenden, um den QR-Code zu scannen und eine Verbindung zu Hyperliquid herzustellen (schalten Sie die Wallet auf Arbitrum um und scannen Sie den Code, um sich anzumelden, das Testnetzwerk und das Hauptnetzwerk sind identisch). .

Wenn Sie sich zunächst mit dem Testnet vertraut machen möchten, finden Sie den Faucet direkt auf der Hyperliquid-Seite, nachdem Sie Ihr Wallet mit Hyperliquid verbunden haben.

Sie können Testvermögenswerte beanspruchen. Nachdem Sie die USDC zum Testen erhalten haben, klicken Sie auf die Schaltfläche „Einzahlen“, um sie bei Hyperliquid einzuzahlen (am besten haben Sie einige ETH für das Arbitrum-Testnetzwerk).
Klicken Sie zum Einzahlen auf die Schaltfläche „Einzahlen“. Dies erfordert eine Wallet-Verifizierung und verbraucht ein wenig ETH auf Arbitrum.
Bei der Durchführung manueller Transaktionen auf der Hyperliquid APP-Seite generiert die Seite automatisch eine Proxy-Wallet-Adresse und einen privaten Schlüssel, die im Browser aufgezeichnet und für Vorgänge wie das Aufgeben von Bestellungen auf der Browserseite verwendet werden. Wenn wir programmatische und quantitative Wie muss die Transaktion diese Konfigurationsinformationen erhalten?
Sie können die erforderliche Proxy-Wallet-Adresse und den entsprechenden privaten Schlüssel auf der Hyperliquid-API-Seite erstellen:


1. Geben Sie der zu erstellenden Proxy-Wallet einen Namen.
2. Adresse und privaten Schlüssel generieren.
Konfigurieren Sie die Proxy-Wallet-Adresse und den privaten Schlüssel auf FMZ
Anschließend können Sie diese Angaben auf der FMZ-Plattform konfigurieren (die Konfigurationsoberfläche ist oben erwähnt).
Erforderliche Informationen zur Konfiguration des Austauschobjekts:
Sobald die Konfiguration abgeschlossen ist, können wir sie auf der FMZ-Plattform testen. Für die Testpraxis verwenden wir direkt das „Debugging-Tool“ der FMZ-Plattform.
Wenn Sie ein mit Testnet-Informationen konfiguriertes Hyperliquid-Austauschobjekt verwenden, müssen Sie bei der Verwendung einige Umschaltvorgänge durchführen, zum Beispiel:
function main() {
// REST协议API地址切换到测试网
exchange.SetBase("https://api.hyperliquid-testnet.xyz")
// source : a 主网 , b 测试网
exchange.IO("source", "b")
return exchange.GetAccount()
}
Die Mainnet-Konfiguration erfordert den oben genannten Umschaltvorgang nicht. Die API-Schnittstellen für Spot- und Futures-Produkte an der Hyperliquid DEX-Börse sind nahezu identisch und unterscheiden sich nur geringfügig in den Details. Als nächstes verwenden wirMainnet-KonfigurationsinformationenUndInformationen zur Testnet-Konfigurationvon Hyperliquide FuturesTauschen Sie Objekte zum Testen aus.
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) + "`")
}

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])
}

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

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) + "`")
}

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) + "`")
}

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

exchange.GetRawJSON() gibt die Antwortinformationen der Leverage-Einstellungsanfrage zurück:
{“status”:“ok”,“response”:{“type”:“default”}}
Da die Schnittstellenparameter der Börse komplex sind, ist es nicht möglich, zur Übergabe der Parameter die URL-Kodierungsmethode zu verwenden.exchange.IOBeim Aufrufen einer Funktion können nur JSON-Zeichenfolgen als Parameter übergeben werden. Im Folgenden finden Sie Beispiele für den Aufruf der einzelnen Schnittstellen.
Hyperliquid-Referenzdokumentation: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order
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.”}
Diese Funktion unterliegt Einschränkungen: Um diese Funktion nutzen zu können, muss das Konto die Handelsebene erreichen.
Erstellen Sie eine TWAP-Bestellung.
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))
}
TWAP-Bestellung stornieren.
function main() {
var params = {
"type": "twapCancel",
"a": 0,
"t": 3805
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Testnetz, autorisieren Sie ein neues Proxy-Wallet.
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))
}
Die Autorisierung gibt erfolgreich Folgendes zurück:
{“status”:“ok”,“response”:{“type”:“default”}}
https://app.hyperliquid-testnet.xyz/APIMitte.Vermögenswerte aus dem Tresor abheben.
function main() {
var params = {
"type": "vaultTransfer",
"vaultAddress": "0xAAA",
"isDeposit": true,
"usd": 5000000
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Testnetz, Vermögenswerte ins Wallet abheben.
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))
}
Übertragung von Vermögenswerten zwischen Spot/Futures (unbefristete Verträge).
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))
}
falseGibt die Rotationsrichtung an: Futures -> Spot.trueGibt die Übertragungsrichtung an: Spot -> Futures.Hauptnetzwerk-WS-Schnittstellenadresse:
Mainnet: wss://api.hyperliquid.xyz/ws
Da die API-Schnittstelle des REST-Protokolls über keine Schnittstelle zum Abrufen aktueller Transaktionsdaten verfügt, verfügt die Websocket-Schnittstelle über diesen Kanal, der abonniert werden kann.
Struktur der Abonnementnachricht
{
"method": "subscribe",
"subscription": {
"type": "trades",
"coin": "SOL"
}
}
Beispiel für einen im Debugger ausgeführten Test:
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("测试结束")
}

Die obigen Tests basieren auf dem neuesten Custodian. Sie müssen den neuesten Custodian herunterladen, um die Hyperliquid DEX-Börse zu unterstützen.
Vielen Dank für Ihre Unterstützung und fürs Lesen.