[TOC]

Недавно платформа FMZ добавила поддержку Hyperliquid DEX — высокопроизводительной децентрализованной биржи, предоставляющей пользователям больше возможностей для участия в децентрализованных транзакциях. В настоящее время функция кастодиана платформы FMZ полностью обновлена для поддержки спотовых и бессрочных контрактных транзакций Hyperliquid и охвата всех функций API DEX.
Обзор платформы Hyperliquid
Hyperliquid — это высокопроизводительный блокчейн L1, оптимизированный с нуля с целью создания полностью открытой финансовой системы на основе блокчейна. Пользователи могут создавать приложения независимо, взаимодействуя с эффективными собственными компонентами, обеспечивая при этом удобство работы конечного пользователя.
Производительность Hyperliquid L1 достаточна для поддержки экосистемы финансовых приложений, не требующей разрешений. Все заказы, снятия заказов, транзакции и ликвидации выполняются в блокчейне абсолютно прозрачным образом, с задержкой блоков менее 1 секунды. В настоящее время сеть поддерживает мощность обработки до 100 000 заказов в секунду.
Hyperliquid L1 использует собственный алгоритм консенсуса HyperBFT, созданный по мотивам Hotstuff и его последователей. Как механизм консенсуса, так и архитектура сети оптимизированы снизу вверх для удовлетворения потребностей высокопроизводительного блокчейна.
С помощью этого руководства мы надеемся помочь вам быстро начать программную и количественную торговлю Hyperliquid DEX на платформе FMZ и открыть для себя больше торговых возможностей.
REST-протокол
Протокол веб-сокета
На странице «Добавить биржу» платформы FMZ вы можете настроить объекты спотовой и фьючерсной биржи Hyperliquid:

Экологический отдел Как и большинство бирж, Hyperliquid имеет тестовую среду.
По опыту реального использования основная сеть относительно стабильна, а скорость также хорошая.
Соответствующий адрес узла интерфейса API протокола REST:https://api.hyperliquid.xyz。
Информация, связанная с подписанием сообщений, также отличается:source == "a",chainId = 42161
Тестовая сеть часто дает сбои, но она используется только как тестовый интерфейс и для ознакомления с торговыми функциями на DEX.
Соответствующий адрес узла интерфейса API протокола REST:https://api.hyperliquid-testnet.xyz。
Информация, связанная с подписанием сообщений, также отличается:source == "b",chainId = 421614
Как и в случае с большинством бирж DEX, вы можете использовать приложение кошелька для сканирования QR-кода для подключения к Hyperliquid (переключите кошелек на Arbitrum и отсканируйте код для входа, тестовая сеть и основная сеть одинаковы). .

Если вы хотите сначала ознакомиться с тестовой сетью, вы можете найти кран прямо на странице Hyperliquid после подключения своего кошелька к Hyperliquid.

Вы можете запросить тестовые активы. Получив USDC для тестирования, нажмите кнопку «Депозит», чтобы внести его в Hyperliquid (лучше всего иметь немного ETH для тестовой сети Arbitrum).
Нажмите кнопку «Депозит», чтобы внести депозит. Для этого потребуется верификация кошелька и будет потрачено немного ETH на Arbitrum.
При выполнении ручных транзакций на странице Hyperliquid APP, страница автоматически сгенерирует адрес прокси-кошелька и закрытый ключ, которые записываются в браузер и используются для таких операций, как размещение заказов на странице браузера. Если мы хотим сделать программные и количественные Каким образом транзакция должна получить эту информацию о конфигурации?
Создать необходимый адрес прокси-кошелька и соответствующий ему закрытый ключ можно на странице API Hyperliquid:


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()
}
Конфигурация mainnet не требует вышеуказанной операции переключения. Интерфейсы API, связанные со спотовыми и фьючерсными продуктами на бирже Hyperliquid DEX, почти одинаковы, с небольшими различиями в деталях. Далее мы используемИнформация о конфигурации основной сетииИнформация о конфигурации тестовой сетииз Гиперликвидные фьючерсыОбменяйтесь объектами для тестирования.
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
Поскольку интерфейс API протокола REST не имеет интерфейса для получения данных о последних транзакциях, интерфейс 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.
Спасибо за вашу поддержку и спасибо за чтение.