[TOC]

최근 FMZ 플랫폼은 고성능 분산형 거래소인 Hyperliquid DEX에 대한 지원을 추가하여 사용자에게 분산형 거래에 참여할 수 있는 더 많은 옵션을 제공합니다. 현재 FMZ 플랫폼의 보관 기능은 Hyperliquid의 현물 및 영구 계약 거래를 지원하고 DEX의 모든 API 기능을 포함하도록 완전히 업데이트되었습니다.
하이퍼리퀴드 플랫폼 개요
하이퍼리퀴드는 완전한 온체인 개방형 금융 시스템을 구축한다는 비전을 가지고 처음부터 최적화된 고성능 L1 블록체인입니다. 사용자는 원활한 최종 사용자 경험을 보장하면서 효율적인 네이티브 구성 요소와 상호 작용하여 독립적으로 애플리케이션을 만들 수 있습니다.
Hyperliquid L1의 성능은 허가 없이도 금융 애플리케이션을 구동할 수 있는 생태계를 지원하기에 충분합니다. 모든 주문, 주문 철회, 거래 및 청산은 완전히 투명한 방식으로 체인상에서 완료되며 블록 지연은 1초 미만입니다. 현재 이 체인은 초당 최대 100,000개의 주문을 처리할 수 있는 용량을 지원합니다.
Hyperliquid L1은 Hotstuff와 그 후속 제품에서 영감을 받은 HyperBFT라는 맞춤형 합의 알고리즘을 사용합니다. 합의 메커니즘과 네트워크 아키텍처는 모두 고성능 블록체인의 요구 사항을 충족하도록 하향식으로 최적화되었습니다.
이 가이드를 통해 FMZ 플랫폼에서 Hyperliquid DEX의 프로그래밍 방식 및 양적 거래를 빠르게 시작하고 더 많은 거래 기회를 발견하는 데 도움이 되기를 바랍니다.
REST 프로토콜
웹소켓 프로토콜
FMZ 플랫폼의 거래소 추가 페이지에서 Hyperliquid 현물 및 선물 거래 객체를 구성할 수 있습니다.

환경부 대부분의 거래소와 마찬가지로 Hyperliquid에도 테스트 환경이 있습니다.
실제 사용 경험에 따르면, 주요 네트워크는 비교적 안정적이고 속도도 좋습니다.
해당 REST 프로토콜 API 인터페이스 노드 주소:https://api.hyperliquid.xyz。
메시지 서명과 관련된 정보도 다릅니다.source == "a",chainId = 42161
테스트 네트워크는 종종 작동이 중단되지만, 이는 테스트 인터페이스로만 사용되며 DEX의 거래 기능에 익숙해지는 데 사용됩니다.
해당 REST 프로토콜 API 인터페이스 노드 주소:https://api.hyperliquid-testnet.xyz。
메시지 서명과 관련된 정보도 다릅니다.source == "b",chainId = 421614
대부분 DEX 거래소의 지갑 연결 방식과 마찬가지로, 지갑 APP를 사용하여 QR 코드를 스캔하여 Hyperliquid에 연결할 수 있습니다(지갑을 Arbitrum으로 전환하고 코드를 스캔하여 로그인, 테스트 네트워크와 메인 네트워크는 동일합니다) .

먼저 테스트넷에 대해 알아보고 싶다면 지갑을 Hyperliquid에 연결한 후 Hyperliquid 페이지에서 바로 faucet을 찾을 수 있습니다.

테스트 자산을 청구할 수 있습니다. 테스트를 위해 USDC를 받은 후 “입금” 버튼을 클릭하여 Hyperliquid에 입금합니다(Arbitrum 테스트 네트워크를 위해 ETH를 약간 보유하는 것이 가장 좋습니다).
“입금” 버튼을 클릭하여 입금합니다. 입금에는 지갑 확인이 필요하며 Arbitrum에서 약간의 ETH가 소모됩니다.
Hyperliquid APP 페이지에서 수동 거래를 수행할 때, 페이지는 자동으로 프록시 지갑 주소와 개인 키를 생성하며, 이는 브라우저에 기록되고 브라우저 페이지에서 주문을 하는 것과 같은 작업에 사용됩니다. 프로그래밍 방식과 양적 작업을 수행하려는 경우 거래에서 이러한 구성 정보를 얻으려면 어떻게 해야 합니까?
Hyperliquid API 페이지에서 필요한 프록시 지갑 주소와 해당 개인 키를 생성할 수 있습니다.


1. 생성할 프록시 지갑의 이름을 지정하세요.
2. 주소와 개인키를 생성합니다.
FMZ에서 프록시 지갑 주소와 개인 키 구성
그런 다음 FMZ 플랫폼에서 이 정보를 구성할 수 있습니다(구성 인터페이스는 위에 언급되어 있습니다).
교환 객체를 구성하는 데 필요한 정보:
구성이 완료되면 FMZ 플랫폼에서 테스트할 수 있습니다. FMZ 플랫폼의 “디버깅 도구”를 직접 사용하여 테스트 연습을 합니다.
테스트넷 정보로 구성된 Hyperliquid 교환 객체를 사용하는 경우 사용 시 다음과 같이 일부 전환 작업을 수행해야 합니다.
function main() {
// REST协议API地址切换到测试网
exchange.SetBase("https://api.hyperliquid-testnet.xyz")
// source : a 主网 , b 测试网
exchange.IO("source", "b")
return exchange.GetAccount()
}
메인넷 구성에는 위의 스위칭 작업이 필요하지 않습니다. Hyperliquid DEX 거래소의 현물 및 선물 상품과 관련된 API 인터페이스는 거의 동일하며 세부 사항에 약간의 차이만 있습니다. 다음으로,메인넷 구성 정보그리고테스트넷 구성 정보의 하이퍼리퀴드 선물물건을 교환하여 테스트합니다.
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()은 레버리지 설정 요청에 대한 응답 정보를 반환합니다.
{“status”:“ok”,“response”:{“type”:“default”}}
거래소의 인터페이스 매개변수가 복잡하기 때문에 URL 인코딩 방식을 사용하여 매개변수를 전달하는 것이 불가능합니다.exchange.IO함수를 호출할 때 JSON 문자열만 매개변수로 전달할 수 있습니다. 다음은 각 인터페이스를 호출하는 예입니다.
Hyperliquid 참조 문서: 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.”}
이 기능에는 제한이 있습니다. 이 기능을 사용하려면 계정이 거래 레벨에 도달해야 합니다.
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))
}
TWAP 주문을 취소합니다.
function main() {
var params = {
"type": "twapCancel",
"a": 0,
"t": 3805
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
테스트넷에서 새로운 프록시 지갑을 승인합니다.
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))
}
인증이 성공적으로 반환되었습니다:
{“status”:“ok”,“response”:{“type”:“default”}}
https://app.hyperliquid-testnet.xyz/API가운데.금고에서 자산을 인출합니다.
function main() {
var params = {
"type": "vaultTransfer",
"vaultAddress": "0xAAA",
"isDeposit": true,
"usd": 5000000
}
return exchange.IO("api", "POST", "/exchange", null, JSON.stringify(params))
}
테스트넷, 지갑으로 자산 출금.
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))
}
현물/선물 간 자산 이전(무기한 계약).
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회전 방향을 나타냅니다: 선물 -> 현물.true거래 방향을 나타냅니다: 현물 -> 선물.메인 네트워크 WS 인터페이스 주소:
Mainnet: wss://api.hyperliquid.xyz/ws
REST 프로토콜 API 인터페이스에는 최근 거래 데이터를 얻기 위한 인터페이스가 없으므로, Websocket 인터페이스에는 구독 가능한 채널이 있습니다.
구독 메시지 구조
{
"method": "subscribe",
"subscription": {
"type": "trades",
"coin": "SOL"
}
}
디버거에서 실행되는 테스트의 예:
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("测试结束")
}

위의 테스트는 최신 커스터디언을 기반으로 합니다. Hyperliquid DEX 거래소를 지원하려면 최신 커스터디언을 다운로드해야 합니다.
여러분의 지지에 감사드리며, 읽어주셔서 감사드립니다.