[TOC] Je vous en prie.
Plus récemment, la plate-forme FMZ a ajouté une nouvelle prise en charge de l'échange décentralisé Hyperliquid DEX, offrant aux utilisateurs plus d'options pour participer à des transactions décentralisées. Actuellement, la fonctionnalité de l'administrateur de la plate-forme FMZ a été entièrement mise à jour pour prendre en charge les transactions instantanées et permanentes de Hyperliquid et couvrir toutes les fonctionnalités de l'API de la DEX.
Hyperliquid est une plateforme
Hyperliquid est une blockchain L1 hautement performante optimisée à partir de zéro, dont la vision est de construire un système financier ouvert entièrement en chaîne. Les utilisateurs peuvent créer leurs propres applications en interagissant avec des composants natifs efficaces tout en assurant la fluidité de l'expérience utilisateur final.
Hyperliquid L1 a suffisamment de performance pour supporter un écosystème d'applications financières sans licence. Toutes les commandes, retraits, transactions et liquidations sont effectuées sur la chaîne de manière totalement transparente, avec un délai de blocage inférieur à 1 seconde. La chaîne est actuellement capable de traiter jusqu'à 100 000 commandes par seconde.
Hyperliquid L1 utilise un algorithme de consensus personnalisé appelé HyperBFT, inspiré de Hotstuff et de ses successeurs. Le mécanisme de consensus et l'architecture du réseau sont optimisés à partir de la base pour répondre aux besoins des chaînes de blocs de haute performance.
Nous espérons que ce guide vous aidera à maîtriser rapidement les transactions programmatiques et quantitatives de Hyperliquid DEX sur la plateforme FMZ et à explorer davantage d'opportunités.
Protocole REST - Des pratiques d'interface de communication. - Les pratiques de l'interface de transaction (commander, retirer) - Les pratiques de consultation concernant les transactions (comptes, commandes) - Autres fonctions (cash, détournement de contrats, accès à la caisse, détournement d'actifs vers le portefeuille, etc.)
Le protocole Websocket - Pratique de souscription à des échanges d'informations (pas d'interface Trades dans l'interface REST, complétée par l'interface Websocket)
Sur la page d'ajout d'échanges de la plateforme FMZ, vous pouvez configurer les objets d'échange Hyperliquid:
Le classement environnemental Comme la plupart des bourses, Hyperliquid propose également des environnements de test.
Il y a des gens qui utilisent des applications comme les réseaux sociaux, qui utilisent des outils comme les réseaux sociaux, qui utilisent des outils comme les réseaux sociaux.
L'adresse du nœud d'interface API correspondant au protocole REST:https://api.hyperliquid.xyz
Je ne sais pas.
Les informations relatives à la signature des messages sont également différentes:source == "a"
,chainId = 42161
Le testnet est souvent désactivé, mais il sert uniquement d'interface de test et de fonctionnalité de transaction familière sur le DEX.
L'adresse du nœud d'interface API correspondant au protocole REST:https://api.hyperliquid-testnet.xyz
Je ne sais pas.
Les informations relatives à la signature des messages sont également différentes:source == "b"
,chainId = 421614
Comme pour la plupart des échanges DEX, vous pouvez connecter votre portefeuille à Hyperliquid en utilisant l'application de balayage de portefeuille à code bidimensionnel.
Si vous souhaitez que les élèves qui connaissent le réseau de test puissent trouver le robinet directement sur la page Hyperliquid après avoir connecté le portefeuille à Hyperliquid.
Après avoir reçu les actifs de test et les USDC pour le test, cliquez sur le bouton "Déposer" pour déposer des fonds dans Hyperliquid (Arbitrum Testing Net préférerait un peu d'ETH).
En cliquant sur le bouton "Déposer", vous devrez vérifier votre portefeuille et dépenser un peu d'ETH sur Arbitrum.
Lorsqu'une transaction est effectuée manuellement sur la page Hyperliquid APP, la page génère automatiquement une adresse de portefeuille proxy et une clé privée, qui sont enregistrées dans le navigateur pour les opérations de souscription sur la page du navigateur.
Les adresses de portefeuille d'agent et les clés privées correspondantes peuvent être créées sur la page API de Hyperliquid:
1° Nommer le portefeuille d'agents qui va être créé.
2° Générer des adresses et des clés privées.
3° Utiliser un portefeuille connecté à Hyperliquid pour autoriser un portefeuille d'agent.
Configurer l'adresse du portefeuille de l'agent, la clé privée sur FMZ
L'information peut ensuite être configurée sur la plateforme FMZ (voir l'interface de configuration mentionnée ci-dessus).
Les informations requises pour configurer les objets d'un échange:
Une fois la configuration terminée, nous pouvons tester la plateforme FMZ et nous pouvons directement utiliser le "Tool de débogage" de la plateforme FMZ pour effectuer des tests pratiques.
Si vous utilisez un objet Hyperliquid Exchange configuré pour tester les informations du réseau, vous devrez effectuer certaines opérations de commutation, telles que:
function main() {
// REST协议API地址切换到测试网
exchange.SetBase("https://api.hyperliquid-testnet.xyz")
// source : a 主网 , b 测试网
exchange.IO("source", "b")
return exchange.GetAccount()
}
La configuration du réseau principal ne nécessite pas les opérations de commutation ci-dessus. Les interfaces API liées à la variété de devises et de contrats à terme de l'échange Hyperliquid DEX sont presque les mêmes, avec seulement de légères différences de détails.Configuration du réseau principaletConfiguration du réseau de testJe ne sais pasLes futures HyperliquidLes objets de l'échange sont testés.
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 () renvoie le message de réponse à la requête de levier:
Je ne sais pas si je peux le faire.
Comme les paramètres d'interface des bourses sont plus complexes et ne peuvent pas être transférés en utilisant l'encodeur d'url, il est préférable d'utiliser des paramètres d'encodeur d'url.exchange.IO
Pour les appels à des fonctions, il est possible d'utiliser uniquement des chaînes JSON comme paramètres d'entrée. Voici quelques exemples d'appels à des interfaces.
Hyperliquid est une société basée au Royaume-Uni.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 On a échangé:174.57424.”}: err , response : Impossible de définir l'heure d'annulation prévue jusqu'à ce que suffisamment de volume soit échangé.
Cette fonctionnalité est limitée: les comptes atteignent le niveau de transaction pour l'utiliser.
Créer une commande TWAP.
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))
}
Les commandes de TWAP ont été annulées.
function main() {
var params = {
"type": "twapCancel",
"a": 0,
"t": 3805
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Le réseau de test autorise un nouveau portefeuille d'agents.
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))
}
L'autorisation a été renvoyée avec succès:
Je ne sais pas si je peux le faire.
https://app.hyperliquid-testnet.xyz/API
Je suis désolé.Il a également déclaré que le gouvernement avait décidé d'envoyer des fonds au Trésor.
function main() {
var params = {
"type": "vaultTransfer",
"vaultAddress": "0xAAA",
"isDeposit": true,
"usd": 5000000
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Le réseau de test, les actifs proposés au portefeuille.
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))
}
Les actifs sont répartis entre les produits actuels et les produits futurs (contrats permanents).
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
Les futures -> spot indiquent la direction dans laquelle vous allez.true
Indique la direction de défilement: spot -> futures.L'adresse de l'interface WS du réseau principal est:
Le réseau principal: wss://api.hyperliquid.xyz/ws
Comme l'API du protocole REST n'a pas accès aux interfaces pour les données de transaction récentes, l'interface Websocket a ce canal qui peut être souscrit.
Structure de l'abonnement
{
"method": "subscribe",
"subscription": {
"type": "trades",
"coin": "SOL"
}
}
Les exemples de tests effectués dans les outils de débogage:
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("测试结束")
}
Les tests ci-dessus sont basés sur les derniers gestionnaires, et il est nécessaire de télécharger les derniers gestionnaires pour prendre en charge Hyperliquid DEX.
Merci pour votre soutien et merci de lire.