Baru-baru ini, platform FMZ telah menambah sokongan untuk Hyperliquid DEX, pertukaran terdesentralisasi berprestasi tinggi, memberikan pengguna lebih banyak pilihan untuk mengambil bahagian dalam perdagangan terdesentralisasi.
Gambaran keseluruhan platform hipercairan
Hyperliquid adalah blockchain L1 berprestasi tinggi yang dioptimumkan dari awal, dengan visi membina sistem kewangan terbuka sepenuhnya.
Kinerja Hyperliquid L1
mencukupi untuk menyokong ekosistem aplikasi kewangan tanpa kebenaran. Semua pesanan, pengeluaran, transaksi, dan pembubaran diselesaikan di rantaian dengan cara yang sepenuhnya telus, dengan latensi blok kurang dari 1 saat. Pada masa ini, rantaian menyokong kapasiti pemprosesan sehingga 100,000 pesanan sesaat. Hyperliquid L1 menggunakan algoritma konsensus tersuai yang dipanggil HyperBFT, yang diilhamkan oleh Hotstuff dan algoritma berikutnya.
Melalui panduan ini, kami berharap dapat membantu anda memulakan perdagangan programatik dan kuantitatif dengan cepat di Hyperliquid DEX di platform FMZ dan menemui lebih banyak peluang perdagangan.
Protokol REST
Protokol Websocket
Pada halaman Tambah platform platform FMZ, anda boleh mengkonfigurasi objek pertukaran spot dan niaga hadapan Hyperliquid:
Alamat APP utama:
Dalam penggunaan sebenar, rangkaian utama agak stabil dan mempunyai kelajuan yang baik.
Alamat nod antara muka API protokol REST yang sepadan adalah:https://api.hyperliquid.xyz
.
Maklumat yang berkaitan dengan tandatangan mesej juga berbeza:source == "a",chainId = 42161
.
Alamat APP rangkaian ujian:
Rangkaian ujian sering terhempas, tetapi ia hanya digunakan sebagai antara muka ujian dan untuk membiasakan diri dengan fungsi perdagangan pada DEX.
Alamat nod antara muka API protokol REST yang sepadan adalah:https://api.hyperliquid-testnet.xyz
.
Maklumat yang berkaitan dengan tandatangan mesej juga berbeza:source == "b",chainId = 421614
.
Sama seperti kaedah sambungan dompet kebanyakan pertukaran DEX, anda boleh menggunakan APP dompet untuk mengimbas kod QR untuk menyambung ke Hyperliquid (tukar dompet ke Arbitrum dan imbas kod untuk log masuk, rangkaian ujian dan rangkaian utama adalah sama).
Anda boleh menuntut aset ujian. Selepas menerima USDC untuk ujian, klik butang
Klik butang
Apabila melakukan transaksi manual di halaman Hyperliquid APP, halaman akan secara automatik menjana alamat dompet proksi dan kunci peribadi, yang direkodkan di penyemak imbas dan digunakan untuk operasi seperti meletakkan pesanan di halaman penyemak imbas.
Anda boleh membuat alamat dompet proksi yang diperlukan dan kunci peribadi yang sepadan di halaman Hyperliquid API:
Kemudian anda boleh mengkonfigurasi maklumat ini di platform FMZ (sambungan konfigurasi disebutkan di atas).
Alamat dompet: Alamat dompet yang disambungkan ke Hyperliquid (catatan, bukan alamat dompet proksi). Wallet PrivateKey: Kunci peribadi dompet yang disambungkan ke Hyperliquid (pilihan, hanya diperlukan apabila memanggil API seperti pemindahan, ia boleh dibiarkan kosong). Kunci Rahsia: Kunci peribadi dompet proksi (dijana dalam langkah sebelumnya, kunci peribadi yang dipaparkan selepas pengesahan).
Maklumat yang diperlukan untuk mengkonfigurasi objek pertukaran:
Setelah konfigurasi selesai, kita boleh menguji ia di platform FMZ. Kami secara langsung menggunakan
Jika anda menggunakan objek pertukaran Hyperliquid yang dikonfigurasikan dengan maklumat testnet, anda perlu melakukan beberapa operasi beralih semasa menggunakannya, contohnya:
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()
}
Konfigurasi mainnet tidak memerlukan operasi beralih di atas. Antara muka API yang berkaitan dengan produk spot dan niaga hadapan dalam pertukaran Hyperliquid DEX hampir sama, dengan hanya sedikit perbezaan dalam butiran. Seterusnya kita menggunakanMasa Depan HyperliquidObjek pertukaranMaklumat konfigurasi mainnetdanMaklumat konfigurasi testnetuntuk ujian.
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
}
Hasil fungsi:
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()
}
Hasil fungsi:
exchange.GetRawJSON() mengembalikan maklumat tindak balas permintaan tetapan leverage:
{
status : ok , response :{ type : default }}
Memandangkan parameter antara muka pertukaran agak kompleks dan tidak boleh dihantar menggunakan kaedah pengekodan URL, apabila menggunakanexchange.IOfunction
panggilan, hanya rentetan JSON boleh dihantar sebagai parameter. Berikut adalah contoh pelbagai panggilan antara muka.
Dokumen rujukan hipercairan: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 Perdagangan:174.57424.”}: err , response : Tidak boleh menetapkan masa pembatalan yang dijadualkan sehingga jumlah yang mencukupi didagangkan.
Fungsi ini mempunyai sekatan: akaun mesti mencapai tahap perdagangan untuk menggunakan fungsi ini.
Buat perintah TWAP.
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))
}
Batalkan perintah TWAP.
function main() {
var params = {
"type": "twapCancel",
"a": 0,
"t": 3805
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Testnet, membenarkan dompet proksi baru.
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))
}
Pengesahan berjaya, kembali:
{
status : ok , response :{ type : default }}
https://app.hyperliquid-testnet.xyz/API
.Keluarkan aset dari peti besi.
function main() {
var params = {
"type": "vaultTransfer",
"vaultAddress": "0xAAA",
"isDeposit": true,
"usd": 5000000
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
Testnet, tarik aset ke dompet.
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))
}
Pemindahan aset antara spot/futures (kontrak kekal).
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
, yang menunjukkan arah putaran: niaga hadapan -> spot.true
, yang menunjukkan arah putaran: spot -> niaga hadapan.Alamat antara muka WS rangkaian utama:
Mainnet: wss://api.hyperliquid.xyz/ws
Oleh kerana antara muka API protokol REST tidak mempunyai antara muka untuk mendapatkan data transaksi baru-baru ini, antara muka Websocket mempunyai saluran ini yang boleh dilabel.
Struktur mesej langganan
{
"method": "subscribe",
"subscription": {
"type": "trades",
"coin": "SOL"
}
}
Contoh ujian yang dijalankan dalam alat debugging:
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")
}
Ujian di atas adalah berdasarkan docker terkini. Anda perlu memuat turun docker terkini untuk menyokong pertukaran Hyperliquid DEX.
Terima kasih atas sokongan anda dan terima kasih kerana membaca.