Baru-baru ini, platform FMZ telah menambahkan dukungan untuk Hyperliquid DEX, pertukaran terdesentralisasi berkinerja tinggi, memberikan pengguna lebih banyak pilihan untuk berpartisipasi dalam perdagangan terdesentralisasi.
Gambaran umum platform hipercairan
Hyperliquid adalah blockchain L1 berkinerja tinggi yang dioptimalkan dari awal, dengan visi membangun sistem keuangan terbuka sepenuhnya on-chain.
Kinerja Hyperliquid L1
cukup untuk mendukung ekosistem aplikasi keuangan tanpa izin. Semua pesanan, penarikan, transaksi, dan likuidasi diselesaikan di rantai dengan cara yang benar-benar transparan, dengan latensi blok kurang dari 1 detik. Saat ini, rantai mendukung kapasitas pemrosesan hingga 100.000 pesanan per detik. Hyperliquid L1 menggunakan algoritma konsensus khusus yang disebut HyperBFT, yang terinspirasi oleh Hotstuff dan algoritmanya berikutnya.
Melalui panduan ini, kami berharap untuk membantu Anda memulai dengan programmatic dan kuantitative trading dengan cepat di Hyperliquid DEX di platform FMZ dan menemukan lebih banyak peluang trading.
Protokol REST
Protokol Websocket
Pada halaman Tambahkan platform dari platform FMZ, Anda dapat mengkonfigurasi objek pertukaran spot dan futures Hyperliquid:
Alamat aplikasi utama:
Dalam penggunaan yang sebenarnya, jaringan utama relatif stabil dan memiliki kecepatan yang baik.
Alamat node antarmuka API protokol REST yang sesuai adalah:https://api.hyperliquid.xyz
Aku tidak tahu.
Informasi yang berhubungan dengan tanda tangan pesan juga berbeda:source == "a",chainId = 42161
.
Alamat APP jaringan uji:
Jaringan uji sering crash, tetapi hanya digunakan sebagai antarmuka uji dan untuk membiasakan diri dengan fungsi perdagangan di DEX.
Alamat node antarmuka API protokol REST yang sesuai adalah:https://api.hyperliquid-testnet.xyz
Aku tidak tahu.
Informasi yang berhubungan dengan tanda tangan pesan juga berbeda:source == "b",chainId = 421614
.
Sama seperti metode koneksi dompet dari sebagian besar bursa DEX, Anda dapat menggunakan dompet APP untuk memindai kode QR untuk terhubung ke Hyperliquid (mengubah dompet ke Arbitrum dan memindai kode untuk masuk, jaringan uji dan jaringan utama adalah sama).
Setelah menerima USDC untuk pengujian, klik tombol
Klik tombol
Ketika melakukan transaksi manual di halaman Hyperliquid APP, halaman akan secara otomatis menghasilkan alamat dompet proxy dan kunci pribadi, yang tercatat di browser dan digunakan untuk operasi seperti menempatkan pesanan di halaman browser.
Anda dapat membuat alamat dompet proxy yang diperlukan dan kunci pribadi yang sesuai di halaman Hyperliquid API:
Kemudian Anda dapat mengkonfigurasi informasi ini pada platform FMZ (interface konfigurasi disebutkan di atas).
Alamat dompet: Alamat dompet yang terhubung ke Hyperliquid (catatan, bukan alamat dompet proxy). Wallet PrivateKey: Kunci pribadi dompet yang terhubung ke Hyperliquid (opsional, hanya diperlukan saat memanggil API seperti transfer, dapat dibiarkan kosong). Kunci Rahasia: Kunci pribadi dompet proxy (digenerasi pada langkah sebelumnya, kunci pribadi ditampilkan setelah otorisasi).
Informasi yang diperlukan untuk mengkonfigurasi objek pertukaran:
Setelah konfigurasi selesai, kita dapat mengujinya di platform FMZ. Kami langsung menggunakan
Jika Anda menggunakan objek pertukaran Hyperliquid yang dikonfigurasi dengan informasi testnet, Anda perlu melakukan beberapa operasi switching saat menggunakannya, misalnya:
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 switching di atas. antarmuka API yang berkaitan dengan produk spot dan futures di bursa Hyperliquid DEX hampir sama, dengan hanya sedikit perbedaan dalam detail. Selanjutnya kita menggunakanFutures HyperliquidTujuan pertukaraninformasi konfigurasi mainnetdanInformasi konfigurasi testnetuntuk pengujian.
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 informasi respons dari permintaan pengaturan leverage:
{
status : ok , response :{ type : default }}
Karena parameter antarmuka pertukaran relatif kompleks dan tidak dapat diteruskan menggunakan metode pengkodean URL, ketika menggunakanexchange.IOfunction
Berikut adalah contoh dari berbagai panggilan antarmuka.
Dokumen referensi 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 {\fnCandara\fs60\b1\4cH000000\4aH80}Diperdagangkan:174.57424.”}: err , response : Tidak dapat mengatur waktu pembatalan yang dijadwalkan sampai volume yang cukup diperdagangkan.
Fungsi ini memiliki batasan: akun harus mencapai tingkat 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, izinkan dompet proxy 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))
}
Otorisasi berhasil, kembali:
{
status : ok , response :{ type : default }}
https://app.hyperliquid-testnet.xyz/API
.Mengambil aset dari brankas.
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))
}
Transfer aset antara spot/future (kontrak abadi).
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
, menunjukkan arah rotasi: berjangka -> spot.true
, yang menunjukkan arah rotasi: spot -> futures.Alamat antarmuka WS jaringan utama:
Mainnet: wss://api.hyperliquid.xyz/ws
Karena antarmuka API protokol REST tidak memiliki antarmuka untuk mendapatkan data transaksi baru-baru ini, antarmuka Websocket memiliki saluran ini yang dapat berlangganan.
Struktur pesan langganan
{
"method": "subscribe",
"subscription": {
"type": "trades",
"coin": "SOL"
}
}
Contoh pengujian 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")
}
Tes di atas didasarkan pada docker terbaru. Anda perlu mengunduh docker terbaru untuk mendukung pertukaran Hyperliquid DEX.
Terima kasih atas dukungannya dan terima kasih sudah membaca.