Vor kurzem hat die FMZ-Plattform die Unterstützung für Hyperliquid DEX, eine leistungsstarke dezentrale Börse, hinzugefügt, die den Benutzern mehr Optionen für die Teilnahme an dezentralen Handelsgeschäften bietet.
Übersicht über die Hyperflüssigkeitsplattform
Hyperliquid ist eine leistungsstarke L1-Blockchain, die von Grund auf optimiert wurde, mit der Vision, ein vollständig auf der Kette befindliches offenes Finanzsystem aufzubauen. Benutzer können Anwendungen unabhängig erstellen, indem sie mit effizienten native Komponenten interagieren und gleichzeitig eine reibungslose Endbenutzererfahrung gewährleisten.
Die Leistung von Hyperliquid L1
ist ausreichend, um ein erlaubnisloses Finanz-Anwendungs-Ökosystem zu unterstützen. Alle Aufträge, Auszahlungen, Transaktionen und Liquidationen werden in der Kette vollständig transparent abgeschlossen, mit einer Block-Latenz von weniger als 1 Sekunde. Derzeit unterstützt die Kette eine Verarbeitungskapazität von bis zu 100.000 Aufträgen pro Sekunde. Hyperliquid L1 verwendet einen benutzerdefinierten Konsensalgorithmus namens HyperBFT, der von Hotstuff und seinen nachfolgenden Algorithmen inspiriert ist.
Durch diesen Leitfaden hoffen wir, Ihnen zu helfen, schnell mit programmatischem und quantitativen Handel auf Hyperliquid DEX auf der FMZ-Plattform zu beginnen und weitere Handelsmöglichkeiten zu entdecken.
REST-Protokoll
Websocket-Protokoll
Auf der Seite Plattform hinzufügen der FMZ-Plattform können Sie Hyperliquid Spot- und Futures-Austauschobjekte konfigurieren:
Hauptnetz-APP-Adresse:
Im tatsächlichen Einsatz ist das Hauptnetz relativ stabil und hat eine gute Geschwindigkeit.
Die entsprechende REST-Protokoll-API-Schnittstellenknotenadresse lautet:https://api.hyperliquid.xyz
- Ich weiß.
Die Informationen zur Nachrichtensignatur unterscheiden sich ebenfalls:source == "a",chainId = 42161
.
Testnetzwerk-APP-Adresse:
Das Testnetzwerk stürzt häufig ab, wird aber nur als Testschnittstelle verwendet und um sich mit den Handelsfunktionen auf DEX vertraut zu machen.
Die entsprechende REST-Protokoll-API-Schnittstellenknotenadresse lautet:https://api.hyperliquid-testnet.xyz
- Ich weiß.
Die Informationen zur Nachrichtensignatur unterscheiden sich ebenfalls:source == "b",chainId = 421614
.
Genau wie die Wallet-Verbindungsmethode der meisten DEX-Börsen können Sie die Wallet APP verwenden, um den QR-Code zu scannen, um sich mit Hyperliquid zu verbinden (schalten Sie die Wallet auf Arbitrum um und scannen Sie den Code, um sich anzumelden, das Testnetzwerk und das Hauptnetzwerk sind dasselbe).
Nach Erhalt des USDC zum Testen klicken Sie auf die Schaltfläche
Klicken Sie auf die Schaltfläche
Bei manuellen Transaktionen auf der Hyperliquid APP Seite erzeugt die Seite automatisch eine Proxy-Wallet-Adresse und einen privaten Schlüssel, die im Browser aufgezeichnet und für Operationen wie das Platzieren von Bestellungen auf der Browserseite verwendet werden.
Sie können die erforderliche Proxy-Wallet-Adresse und den entsprechenden privaten Schlüssel auf der Hyperliquid API-Seite erstellen:
Dann können Sie diese Informationen auf der FMZ-Plattform konfigurieren (die Konfigurationsoberfläche ist oben erwähnt).
Wallet-Adresse: Die mit Hyperliquid verbundene Wallet-Adresse (Anmerkung, nicht die Proxy-Wallet-Adresse). Wallet PrivateKey: Der mit Hyperliquid verbundene private Schlüssel der Brieftasche (optional, nur erforderlich, wenn APIs wie Überweisungen aufgerufen werden, er kann leer gelassen werden). Geheimer Schlüssel: Proxy-Wallets privater Schlüssel (im vorherigen Schritt generiert, der private Schlüssel nach der Autorisierung angezeigt).
Informationen, die für die Konfiguration des Austauschobjekts erforderlich sind:
Sobald die Konfiguration abgeschlossen ist, können wir sie auf der FMZ-Plattform testen.
Wenn Sie ein Hyperliquid-Austauschobjekt verwenden, das mit Testnet-Informationen konfiguriert ist, müssen Sie einige Schaltvorgänge durchführen, wenn Sie es verwenden, zum Beispiel:
function main() {
// REST protocol API address switched to testnet
exchange.SetBase("https://api.hyperliquid-testnet.xyz")
// source : a Mainnet, b Testnet
exchange.IO("source", "b")
return exchange.GetAccount()
}
Die Mainnet-Konfiguration erfordert nicht den oben genannten Schaltvorgang. Die API-Schnittstellen für Spot- und Futures-Produkte in der Hyperliquid DEX-Börse sind nahezu identisch, mit nur geringen Unterschieden in den Details. Als nächstes verwenden wir dieFutures mit hoher LiquiditätAustausch vonInformationen zur Mainnet-Konfigurationund derInformationen zur Testnetzkonfigurationzur Prüfung.
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("asks 3", bids[2])
Log("asks 2", bids[1])
Log("asks 1", bids[0])
Log("bids 1", asks[0])
Log("bids 2", asks[1])
Log("bids 3", asks[2])
}
function main() {
var account = exchange.GetAccount()
return account
}
Funktionsergebnisse:
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() {
// Set the current position to cross position
exchange.IO("cross", true)
// Set leverage
exchange.SetMarginLevel("ETH_USD.swap", 10)
return exchange.GetRawJSON()
}
Funktionsergebnisse:
exchange.GetRawJSON() gibt die Antwortinformationen der Leverage-Einstellungsanfrage zurück:
Ich bin nicht derjenige, der das Problem hat.
Da die Schnittstellenparameter des Austauschs relativ komplex sind und nicht mit der URL-Codierungsmethode übermittelt werden können, werdenexchange.IOfunction
Bei Anrufen können nur JSON-Strings als Parameter eingegeben werden.
Referenzdokumentation für Hyperflüssigkeit: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 Ich bin nicht derjenige, der das Problem hat, aber ich bin derjenige, der es hat.174.57424.”}: err , response : Kann die geplante Stornierungszeit nicht festlegen, bis genügend Volumen gehandelt wurde.
Diese Funktion hat Einschränkungen: Das Konto muss das Handelsniveau erreichen, um diese Funktion nutzen zu können.
Erstellen Sie einen TWAP-Befehl.
function main() {
var params = {
"type": "twapOrder",
"twap": {
"a": 0,
"b": true,
"s": "1",
"r": false,
"m": 10,
"t": false
}
}
// SOL_USDT.swap , Order Quantity: 1 , twapOrder order has position requirement, minimum value of 100 USD
// a: 0, i.e. SOL_USDT.swap
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Stornieren Sie den TWAP-Befehl.
function main() {
var params = {
"type": "twapCancel",
"a": 0,
"t": 3805
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Testnet, autorisieren Sie eine neue 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))
}
Autorisierung erfolgreich, ergibt:
Ich bin nicht derjenige, der das Problem hat.
https://app.hyperliquid-testnet.xyz/API
.Nehmen Sie Vermögenswerte aus dem Tresor.
function main() {
var params = {
"type": "vaultTransfer",
"vaultAddress": "0xAAA",
"isDeposit": true,
"usd": 5000000
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Testnet, ziehen Sie das Vermögen in die Brieftasche.
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- und Futures-Verträgen (perpetual contracts).
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))
}
false
, die Rotationsrichtung anzeigt: Futures -> Spot.true
, die Rotationsrichtung anzeigt: Spot -> Futures.Hauptnetzwerk-WS-Schnittstellenadresse:
Mainnet: wss://api.hyperliquid.xyz/ws
Da die REST-Protokoll-API-Schnittstelle keine Schnittstelle für die Erfassung aktueller Transaktionsdaten hat, hat die Websocket-Schnittstelle diesen Kanal, der abonniert werden kann.
Abonnementnachrichtenstruktur
{
"method": "subscribe",
"subscription": {
"type": "trades",
"coin": "SOL"
}
}
Beispiel für eine Prüfung in Debuggern:
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 of test")
}
Sie müssen den neuesten Docker herunterladen, um den Hyperliquid DEX Exchange zu unterstützen.
Vielen Dank für Ihre Unterstützung und für das Lesen.