Type/to search
8
Follow
1364
Followers
DEX Exchange Quantitative Praxis (3) - Vertex Protocol Benutzerhandbuch
Discussions
Created 2025-02-09 16:05:08  Updated 2025-02-19 10:37:07
 0
 1254

img

Dies ist der dritte Artikel über die quantitative Praxis von DEX-Börsen. Dieses Mal stellen wir die Nutzungsanleitung des Vertex-Protokolls vor.

Vorwort

Im Rahmen traditioneller dezentraler Börsen (DEX) müssen quantitative Händler häufig Kompromisse eingehen: Entweder sie akzeptieren die hohe Slippage und die geringe Ausführungseffizienz des Automated Market Maker-Modells (AMM) oder sie geraten in das technische Dilemma der kettenübergreifenden Liquiditätsfragmentierung und einzelner Derivatefunktionen. Die Entstehung des Vertex-Protokolls definiert die On-Chain-Grenzen quantitativer Strategien durch ein Fusionsexperiment auf „dezentraler + institutioneller Ebene“ neu – es gibt hier kein „Wähle eines von beiden“-Dilemma, sondern nur die ultimative Balance zwischen Geschwindigkeit, Tiefe und Freiheit.

Als erster DEX, der einen einheitlichen Multi-Chain-Liquiditätspool, ein Hybrid Order Book (CLOB) und einen eingebetteten Währungsmarkt integriert, legt Vertex den Schwerpunkt auf „zentralisierte Erfahrung, dezentrale Seele“ und eröffnet einen einzigartigen Weg für quantitative Händler:

Eine neue Definition von Geschwindigkeit und Flüssigkeit

Mit der kontinuierlichen Weiterentwicklung der Blockchain-Technologie verschwimmt die Grenze zwischen traditionellen zentralisierten Börsen (CEX) und dezentralen Börsen (DEX) allmählich. Als Dreh- und Angelpunkt der Vertex-Plattform gestaltet Vertex Edge nicht nur die Transaktionsgeschwindigkeit und Liquidität neu, sondern kombiniert durch die kettenübergreifende Integration auch perfekt hervorragende Order-Matching-Technologie und Vorteile der Selbstverwahrung und bietet so globalen Händlern ein neues DeFi-Erlebnis.

  • Vereinheitlichung der Cross-Chain-Liquidität: Abbau der Liquiditätsfragmentierung
    Auf traditionellen Märkten ist die Liquidität zwischen verschiedenen Ketten oft fragmentiert, was dazu führt, dass Händler nicht in den Genuss der besten Transaktionspreise und -tiefe kommen. In diesem Zusammenhang wurde Vertex Edge geboren, das die synchrone gemeinsame Nutzung permanenter Liquidität über mehrere Ketten hinweg durch ein einheitliches Orderbuchnetzwerk ermöglicht.
    Derzeit deckt Vertex Edge die unbefristete Vertragsliquidität auf 7 Mainstream-Ketten ab, darunter Arbitrum, Base, Sei, Blast, Mantle, Sonic und Abstract, sodass sich Händler keine Sorgen mehr über die Liquiditätsstreuung machen müssen und zum besten Preis handeln können, wodurch wirklich eine nahtlose Verbindung der globalen Liquidität erreicht wird.

  • Hybrider Orderbuchhandel: die perfekte Balance zwischen ultraschnellem Matching und On-Chain-Abwicklung
    Vertex Edge verwendet ein hybrides Orderbuch-Handelsmodell. Zu seinen Kerntechnologien gehören:

    Off-Chain-Orderbook-Matcher: Verwendet einen ultraschnellen Off-Chain-Matching-Mechanismus, um ein Order-Matching mit einer Latenz von nur 5–15 Millisekunden zu erreichen, vergleichbar mit den meisten zentralisierten Börsen;
    On-Chain-Risiko-Engine und AMM: Auf jeder unterstützten Kette werden Risikomanagementsysteme und automatisierte Market Maker (AMMs) eingesetzt, um sicherzustellen, dass Aufträge nach der Zuordnung sicher und transparent abgewickelt werden können.
    Diese Architektur gewährleistet nicht nur eine extrem schnelle Transaktionsreaktion, sondern bietet Benutzern durch On-Chain-Abwicklung auch dezentrale Sicherheit, sodass Händler von einer Leistung auf CEX-Niveau profitieren und gleichzeitig die Unabhängigkeit der Selbstverwahrung von Vermögenswerten wahren können.

  • Einheitliches Cross-Margin-Management: jeden Cent Ihres Kapitals effizient nutzen
    Die Vertex-Plattform bietet Benutzern einheitliche Cross-Margin-Management-Funktionen. Ob Spot-, unbefristete Verträge oder eingebettete Finanzierungsmärkte, alle Vermögenswerte und Positionen können in ein einheitliches Margin-Konto integriert werden.
    Dieses Design ermöglicht Benutzern:

    Multi-Account-Funktion: Verwalten Sie mehrere Konten in einer einzigen Wallet und verteilen Sie Geldmittel effizienter.
    Gehebelte Spot-Positionen: Nutzen Sie alle Vermögenswerte als Marge, um eine höhere Kapitaleffizienz zu erreichen;
    Flexibles Risikomanagement: Einlagen, Positionen sowie Gewinn- und Verlustdaten werden einheitlich berücksichtigt, um die Risikobelastung präzise zu steuern.

Scheitelpunkt verbinden

Adresse der Login-Seite „Vertex Protocol“:

https://app.vertexprotocol.com/

Verbinde dein Wallet

Vertex ist dasselbe wie die meisten DEXs. Nachdem Sie sich bei der Dapp angemeldet haben, müssen Sie sich zur Autorisierung mit der Wallet verbinden. Das Unterkontosystem von Vertex wird anhand eines Labels unterschieden. Das Label nimmt an der Wallet-Adressberechnung teil, um eine Unterkonto-Wallet-Adresse zu erhalten. Gleichzeitig ist diese Adresse autorisiert, Bestellungen und andere Vorgänge aufzugeben.

Verwenden Sie beispielsweiseWalletConnectDie Wallet-Adresse beim Verbinden lautet:0x7a5ec2748e9065794491a8d29dcf3f9edb8d7c43, die Standardbezeichnung lautet „Standard“ und die berechnete Unterkontoadresse lautet:0x7a5ec2748e9065794491a8d29dcf3f9edb8d7c4364656661756c740000000000. Die Standard-Tags sind:64656661756c740000000000

Vertex unterstützt das Aufladen mehrerer Assets. Im Allgemeinen laden Sie USDC als Marge auf und verwenden die verbundene Wallet direkt zum Übertragen von Transaktionen. Es ist zu beachten, dass Vorgänge wie Abheben, Überweisen, Senden von Token und Übertragen von Unterkonten auf Vertex USDC verbrauchen und die Gebühren nicht niedrig sind. Daher müssen diese Vorgänge mit Vorsicht aufgerufen werden.

Wechseln Sie zu einer anderen Kette:

img

Auf dem Scheitelpunkt haben verschiedene Ketten unterschiedliche Konfigurationsinformationen wie Knoten, Indexer und Ketten-IDs. Die Standardkette für die FMZ-Kapselung istArbitrum OneEs ist möglich.Log(HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=contracts"))Fragen Sie die ID einer Kette, bereitgestellte Vertragsinformationen usw. ab.

Konfigurieren auf FMZ

Nachdem Sie sich bei FMZ.COM angemeldet haben, wählen Sie auf der Exchange-Konfigurationsseite „Kryptowährung“ und dann Vertex Exchange. Sie können den Wallet-Proxy-Schlüssel direkt auf der Dapp konfigurieren. Natürlich können Sie auch den privaten Wallet-Schlüssel konfigurieren. Auf Vertex können Sie die Schnittstelle verwenden, um die Autorisierung/Deautorisierung des Proxy-Schlüssels und andere Vorgänge zu verwalten, was auch bequemer ist.

Proxy-Schlüssel:

Beispielsweise auf der Frontend-Seite der Vertex DEX-Börse: Chrome-Browser (Debugging aktivieren) -> Anwendung -> Lokaler Speicher -> https://app.vertex -> Vertex-Benutzereinstellungen

Vertex Exchange konfigurieren

Auf FMZ müssen zwei Dinge konfiguriert werden. Das erste ist die Wallet-Adresse (nicht die Adresse des zum Signieren verwendeten Proxy-Schlüssels, es muss die mit der Dapp verbundene Wallet-Adresse sein). Der zweite ist der geheime Schlüssel, der zum Signieren verwendet wird (es kann sich um einen privaten Wallet-Schlüssel oder einen Proxy-Schlüssel handeln). Da Proxy-Schlüssel verwendet werden können, sind die konfigurierte Wallet-Adresse und der Schlüssel nicht notwendigerweise ein Paar.

Das Unterkontensystem von Vertex wird durch Tags identifiziert. Das Standard-Tag, das auf FMZ verwendet wird, istdefaultDas Hauptkonto des Tags. Wenn Sie wechseln müssen, können Sie es im Code verwenden:

javascript
exchange.IO("subAccountTag", "default") // 切换到主子账号 exchange.IO("subAccountTag", "test01") // 切换到标签名为 test01 的子账号

Praxis auf FMZ

Nachdem wir die Exchange-Konfigurationsinformationen konfiguriert und ein Custodian-Programm bereitgestellt haben, das auf die Vertex-Schnittstelle zugreifen kann, können wir mit dem Schreiben von Code für praktische Vorgänge beginnen.

Wir verwenden zum Testen das Haupt-Unterkonto (das Unterkonto mit dem Tag: default) und wir verwendenArbitrumNetzwerk.

Marktbedingungen und Ketteninformationen

  1. Informationen zum Vertragsmarkt einholen
javascript
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) + "`") return markets }

img

Es ist ersichtlich, dass der Vertragstyp auf Vertex ein USDC-basierter Vertrag ist, die Marge ist USDC und der Wert eines Vertrags stellt beispielsweise eine entsprechende Währung darBTC_USDC.swapDas heißt, beim USDC-basierten BTC-Vertrag repräsentiert ein Vertrag eine BTC-Position. Der obige Code zeigt, wie Vertragsmarktinformationen angefordert und verschiedene Inhalte ausgegeben werden.

  1. Holen Sie sich detaillierte Informationen (Orderbuch)
javascript
function main() { var depths = [{"symbol": "ETH_USDC"}, {"symbol": "SOL_USDC"}, {"symbol": "BTC_USDC"}] for (var ele of depths) { ele["depth"] = exchange.GetDepth(ele["symbol"] + ".swap") } var tbls = [] for (var ele of depths) { var tbl = {"type": "table", "title": ele["symbol"], "cols": ["level", "price", "amount"], "rows": []} var depth = ele["depth"] for (var i = 0 ; i < 3 ; i++) { tbl["rows"].push(["卖" + (i + 1), depth.Asks[i].Price, depth.Asks[i].Amount]) } tbl["rows"].reverse() for (var i = 0 ; i < 3 ; i++) { tbl["rows"].push(["买" + (i + 1), depth.Bids[i].Price, depth.Bids[i].Amount]) } tbls.push(tbl) } LogStatus("`" + JSON.stringify(tbls) + "`") }

img

  1. Orderflow-Informationen von Markttransaktionen
javascript
function main() { var arrTrades = [{"symbol": "ETH_USDC"}, {"symbol": "SOL_USDC"}, {"symbol": "BTC_USDC"}] for (var ele of arrTrades) { ele["trades"] = exchange.GetTrades(ele["symbol"] + ".swap") } var tbls = [] for (var ele of arrTrades) { var tbl = {"type": "table", "title": ele["symbol"], "cols": ["Time", "Price", "Amount", "side"], "rows": []} var trades = ele["trades"] for (var trade of trades) { tbl["rows"].push([_D(trade.Time), trade.Price, trade.Amount, trade.Type == 0 ? "买入" : "卖出"]) } tbls.push(tbl) } LogStatus("`" + JSON.stringify(tbls) + "`") }

img

  1. K-Line-Daten
javascript
function main() { let c = KLineChart({ overlay: true }) let bars = exchange.GetRecords("SOL_USDC.swap") if (!bars) { return } bars.forEach(function(bar, index) { c.begin(bar) Log(index, bar) c.close() }) }

Scheitelpunktdiagramm
img

FMZ Strategie-Einsatzzeichnung
img

  1. Finanzierungsrate
javascript
function main() { var fundings = exchange.GetFundings() var tbl = { "type": "table", "title": "GetFundings", "cols": ["Symbol", "Interval", "Time", "Rate"], "rows": [], } for (var f of fundings) { tbl["rows"].push([f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate * 100 + " %"]) } LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`") }

img

Der Finanzierungszyklus beträgt 1 Stunde.

  1. Abfrage der On-Chain-Daten und des maximalen Bestellvolumens für ein bestimmtes Konto und Produkt

Max Order Size
Gets the max order size possible of a given product for a given subaccount.

javascript
function main() { // GET [GATEWAY_REST_ENDPOINT]/query?type=max_order_size&product_id={product_id}&sender={sender}&price_x18={price_x18}&direction={direction} // price_x18=3000000000000000000000 : 3000 USDC // product_id=4 : ETH_USDC.swap // sender=0x123 : e.g. 0x123 return HttpQuery("https://gateway.prod.vertexprotocol.com/query?type=max_order_size&product_id=4&sender=0x123&price_x18=3000000000000000000000&direction=short") }
  • Der Skalierungsfaktor beträgt meistens: 1e18, also: 300000000000000000000000 sind 3000 USDC.
  • product_id=4 Handelsprodukt-ID, 4 ist ein Ethereum-Vertrag, ETH_USDC.swap
  • Absender ist die Unterkontoadresse, die aus der Wallet-Adresse und dem Unterkonto-Tag berechnet wird.

Die von der letzten Anfrage zurückgegebenen Daten lauten:{"status":"success","data":{"max_order_size":"170536415320344899"},"request_type":"query_max_order_size"}
Es ist ersichtlich, dass das derzeit verfügbare Vermögen für den unbefristeten Ethereum-Vertrag mit einem Preis von 3000, die maximale Bestellmenge für eine Verkaufsorder beträgt: 0,17 ETH

  1. Fragen Sie die Proxy-Schlüsselinformationen der Wallet-Autorisierung ab

Linked Signer
Retrieves current linked signer of a provided subaccount

javascript
function main() { return HttpQuery("https://gateway.prod.vertexprotocol.com/query?type=linked_signer&subaccount=0x123") }

Autorisierungsinformationen gefunden:

{"status":"success","data":{"linked_signer":"0x79119..."},"request_type":"query_linked_signer"}
Die Adresse „0x79119…“ ist die Proxy-Adresse für die Autorisierung von Auftragstransaktionen bei der Verbindung mit dem Wallet auf der Vertex-Frontend-Seite. Diese Autorisierung kann widerrufen oder hinzugefügt werden (durch API-Aufrufe).

Handel

Im Folgenden soll der Fokus dieses Artikels liegen. Wir beschäftigen uns schon seit längerem damit, Transaktionen einfach und schnell auf dezentralen Börsen durchzuführen.

  1. Bestellung aufgeben

Testen Sie einen einfacheren Handel und platzieren Sie eine normale Limit-Order.

javascript
function main() { var id1 = exchange.CreateOrder("ETH_USDC.swap", "buy", 2000, 0.1) var id2 = exchange.CreateOrder("SOL_USDC.swap", "buy", 60, 2) Log("ETH_USDC.swap id1:", id1) Log("SOL_USDC.swap id2:", id2) var orders = exchange.GetOrders("USDC.swap") var tbl = {type: "table", title: "test GetOrders", 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) + "`") }

img

  1. Stornierung der Bestellung
javascript
function main() { var orders = exchange.GetOrders("USDC.swap") var tbl = {type: "table", title: "test GetOrders", 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]) exchange.CancelOrder(order.Id) } LogStatus("`" + JSON.stringify(tbl) + "`") return exchange.GetOrders() }

img

  1. Positionen abfragen
javascript
function main() { // 使用市价单下单持仓 exchange.SetCurrency("ETH_USDC") exchange.SetContractType("swap") exchange.Buy(-1, 0.01) var positions = exchange.GetPositions() var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []} for (var p of positions) { tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel]) } LogStatus("`" + JSON.stringify(tbl) + "`") }

img

img

Es ist zu beachten, dass die von der Vertex-API bereitgestellten Daten von den auf der Vertex-Frontend-Seite angezeigten Inhalten abweichen, hauptsächlich aufgrund von Unterschieden beim durchschnittlichen Beteiligungspreis und beim Gewinn und Verlust der Beteiligungen. Dies wurde an das Vertex-Team zurückgemeldet und kann später aktualisiert und aktualisiert werden.

4、Trigger Order

Da die Triggerreihenfolge von vertex unabhängig von endPoint ist,exchange.IOWenn Sie eine bedingte Bestellung für eine Funktion aufgeben, müssen Sie angebenTrigger: https://trigger.prod.vertexprotocol.com, fahren wir mit der praktischen Bedienung fort.

  • nonce: Für die nächste Trigger-Reihenfolge muss ein Nonce-Parameter übergeben werden. Vertex hat Berechnungsanforderungen, daher wird zur einfacheren Verwendung während der Kapselung eine Methode entwickelt, um den berechneten Nonce abzurufen.
  • Ablauf: Für den Ablaufparameter gilt die gleiche Anforderung, und der berechnete Ablauf muss ebenfalls abgerufen werden.
javascript
function main() { // isTrigger : true var nonce = exchange.IO("nonce", true) // 如果是 Trigger Order 订单用到的 nonce 需要指定 isTrigger : true // flag , reduceOnly var expiration = exchange.IO("expiration", "GTC", false) // 设置订单为GTC类型,非只减仓 // params var params = { "place_order": { "product_id": 4, "order": { "sender": "0x123...", "priceX18": "4100000000000000000000", "amount": "-100000000000000000", "expiration": expiration, "nonce": nonce }, "trigger": { "price_above": "4000000000000000000000" } } } return exchange.IO("api", "POST", "https://trigger.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params)) }

img

Unter dem Trigger-Endpunkt gibt es außerdem:

  • Schnittstelle für Listen-Trigger-Aufträge
  • Cancel Trigger Orders
  • Cancel Product Trigger Orders

Die Aufrufmethode ähnelt „Place Trigger Order“, daher werde ich hier nicht ins Detail gehen.

Unterkontenverwaltung

  1. Unterkonto-Tag wechseln

Das Standard-Unterkonto-Tag ist:defaultwechseln wir zu einem benutzerdefinierten Tag:subAcc02

javascript
function main() { exchange.IO("subAccountTag", "subAcc02") return exchange.GetAccount() }

img

img

Wenn Sie Geld an eine Unterkontoadresse überweisen, erstellt Vertex tatsächlich dieses Unterkonto.

  1. Überweisen Sie Geld auf das Vertex-Unterkonto

Hierzu muss der Nonce des Accounts abgefragt und als Parameter an die Parameter der Transferschnittstelle übergeben werden.

https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x6B3f11d807809B0b1E5e3243df04a280d9F94bF4

javascript
function main() { var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...") var obj = JSON.parse(ret) var nonce = obj["data"]["tx_nonce"] Log("nonce:", nonce) var params = { "transfer_quote": { "tx": { // default -> subAcc02 "sender": "0xabc...", // default "recipient": "0xdef...", // subAcc02 "amount": "7000000000000000000", "nonce": nonce } } } return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params)) }

Beispiel: 0xabc... entspricht der Unterkontoadresse mit dem Tag „default“.
0xdef... entspricht der Unterkontoadresse mit dem Tag subAcc02.
0x123... ist die Wallet-Adresse.

Abhebung, Prägung/Vernichtung von Liquiditätstoken usw.

  1. Münzen von Vertex in die Wallet abheben
javascript
function main() { var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...") var obj = JSON.parse(ret) var nonce = obj["data"]["tx_nonce"] Log("nonce:", nonce) var params = { "withdraw_collateral": { "tx": { "sender": "0xabc...", // default "productId": 0, // USDC : 0 , precision : 6 "amount": "10000000", // 10 USDC "nonce": nonce } } } return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params)) }

Achten Sie auf die Genauigkeit von USDC.

  1. LP prägen
javascript
function main() { var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...") var obj = JSON.parse(ret) var nonce = obj["data"]["tx_nonce"] Log("nonce:", nonce) var params = { "mint_lp": { "tx": { "sender": "0xabc...", // default "productId": 31, // USDT_USDC "amountBase": "10000000000000000000", "quoteAmountLow": "9999900000000000000", "quoteAmountHigh": "10100000000000000000", "nonce": nonce, } } } return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params)) }

Prägen Sie LP-Token für HandelspaareUSDT_USDCDer Börsenpool sorgt für zusätzliche Liquidität.

  1. LP zerstören
javascript
function main() { var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...") var obj = JSON.parse(ret) var nonce = obj["data"]["tx_nonce"] Log("nonce:", nonce) var params = { "burn_lp": { "tx": { "sender": "0xabc...", // default "productId": 31, // USDT_USDC "amount": "7500000000000000000", "nonce": nonce, } } } return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params)) }

WebSocket-Schnittstelle

Endpunkt der WebSocket-Schnittstelle:wss://gateway.prod.vertexprotocol.com/v1/ws

[🚧🚧🚧ing...]

END

Die obigen Tests basieren auf dem neuesten Custodian. Sie müssen den neuesten Custodian herunterladen, um den Vertex DEX-Aggregator zu unterstützen.

Vielen Dank für Ihre Unterstützung und fürs Lesen.

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)