संसाधन लोड हो रहा है... लोड करना...

DEX एक्सचेंज क्वांटिफाइड प्रैक्टिस ((1)-- dYdX v4 उपयोग गाइड

लेखक:आविष्कारक मात्रा - छोटे सपने, बनाया गयाः 2024-12-24 17:09:32, अद्यतनः 2024-12-26 21:41:46

[TOC]

img

प्रस्तावना

विकेंद्रीकृत एक्सचेंजों (DEX) के तेजी से उदय के साथ, क्वांटिफाइड ट्रेडर्स ने कुशल स्वचालित ट्रेडिंग के लिए इन प्लेटफार्मों की ओर रुख करना शुरू कर दिया है। dYdX सबसे लोकप्रिय विकेंद्रीकृत ट्रेडिंग प्लेटफार्मों में से एक है, जो शक्तिशाली ट्रेडिंग सुविधाएं प्रदान करता है, वायदा स्थायी अनुबंधों के व्यापार का समर्थन करता है, और इसका नवीनतम संस्करण v4 प्रदर्शन और उपयोगकर्ता अनुभव को अनुकूलित करता है, जो कई क्वांटिफाइड ट्रेडर्स के लिए पसंदीदा है।

इस लेख में dYdX v4 पर ट्रेडिंग प्रथाओं को परिमाणित करने के बारे में बताया गया है, जिसमें ट्रेडिंग के लिए इसके एपीआई का उपयोग करना, बाजार डेटा प्राप्त करना और खाते का प्रबंधन करना शामिल है।

  • परीक्षण वातावरण स्विच
  • बाजार की जानकारी
  • ऑर्डर की जानकारी, स्टॉक की जानकारी पूछें
  • अनुसूची सौदा
  • उप खाते प्रबंधित करें
  • नोड विधि अनुरोध

dYdX v4 DEX

  • dYdX टेस्टिंग वेब ऐप पेज

    img

  • के साथdYdX v3एक तरह से, लेन-देन से इनाम मिलता है, इनाम।dYdXटोकन ।

    img

वॉलेट कनेक्शन, लॉगिन, प्रोफाइल जानकारी

पहले के dYdX v3 प्रोटोकॉल DEX एक्सचेंज को बंद कर दिया गया है और वर्तमान में dYdX v4 ऐप का पता हैः

https://dydx.trade/trade/ETH-USD

ऐप पेज खोलने के बाद, ऊपर दाईं ओर वॉलेट कनेक्ट करने के लिए एक बटन है, और वॉलेट कनेक्ट करने के लिए एक स्कैन कोड है।

यदि आप पहले टेस्टिंग नेट के साथ परिचित होना चाहते हैं, तो आप टेस्टिंग नेट का उपयोग कर सकते हैंः

https://v4.testnet.dydx.exchange/trade/ETH-USD

इसी तरह, ऊपर दाएं कोने में, कनेक्ट वॉलेट बटन पर क्लिक करें, वॉलेट को कनेक्ट करें, हस्ताक्षर सत्यापित करें। वॉलेट कनेक्ट करने के बाद स्वचालित रूप से एक dydx v4 पता उत्पन्न होता है, ऐप पेज के ऊपरी दाएं कोने में यह पता दिखाई देगा, क्लिक करने के बाद एक मेनू पॉप अप होगा। इसमें रिफिल, टिकट, ट्रांसफर आदि ऑपरेशन शामिल हैं। dYdX मुख्य नेटवर्क (उत्पादन वातावरण) परीक्षण नेटवर्क से एक अंतर हैः परीक्षण नेटवर्क पर क्लिक करें, स्वचालित रूप से नल का उपयोग करें। परीक्षण के लिए 300 USDC परिसंपत्तियों में घुसपैठ करें। यदि आप dYdX पर वास्तविक लेनदेन करना चाहते हैं, तो यूएसडीसी परिसंपत्तियों में घुसपैठ की आवश्यकता होती है, मूल्य भी बहुत सुविधाजनक है, कई परिसंपत्ति श्रृंखलाओं को भरने के लिए संगत है।

  • dYdX v4 खाता पता dYdX v4 खाता पता वॉलेट पता से प्राप्त होता है, dYdX v4 खाता पता कुछ इस तरह दिखता हैःdydx1xxxxxxxxxxxxxxxxxxxxq2ge5jr4nzfeljxxxx, dydx1 के आरंभ का पता है. यह पता ब्लॉकचेन एक्सप्लोरर्स में पूछा जा सकता है.

  • सहायक शब्द वर्तमान dYdX पते के खाते के पासवर्ड को निर्यात करने के लिए शीर्ष दाएं मेनू में "पासवर्ड निर्यात करें" बटन पर क्लिक करें। FMZ प्लेटफॉर्म पर एक्सचेंजों को जोड़ने पर इस पासवर्ड को कॉन्फ़िगर करना आवश्यक है।

    सहायक शब्द को सीधे एफएमजेड प्लेटफॉर्म में कॉन्फ़िगर किया जा सकता है, या इसे स्थानीय रूप से संरक्षक के रूप में भी रखा जा सकता है, जब dydx v4 एक्सचेंज ऑब्जेक्ट का उपयोग किया जाता है, तो सहायक शब्द के रिकॉर्ड फ़ाइल सामग्री को पढ़ा जाता है।

मुख्य नेटवर्क, परीक्षण नेटवर्क के अंतर

परीक्षण नेटवर्क के वातावरण में मुख्य नेटवर्क के वातावरण से कुछ अंतर होते हैं, जिनकी सूची नीचे दी गई है।

  • इस तरह के मामलों में, आप अपने बच्चों के लिए कुछ कर सकते हैं। मुख्य नेटवर्क में उप-खाता सफाई तंत्र है।subAccountNumber >= 128यदि उस आईडी का उप खाते में कोई स्टॉक नहीं है, तो उप खाता संख्या 0 के उप खाते में संपत्ति स्वचालित रूप से साफ हो जाती है। परीक्षण में पाया गया कि परीक्षण जाल में ऐसा कोई तंत्र नहीं है (या ट्रिगर की स्थिति अलग है, परीक्षण जाल में ट्रिगर नहीं किया गया है) ।
  • कुछ टोकन के नाम। मूल टोकन dydx का नाम बदल गयाः मुख्यपृष्ठDYDX, परीक्षण नेटवर्कDv4TNT
  • पता विन्यास, जैसे कि चेन आईडी, नोड पता, इंडेक्सर पता आदि। कई नोड्स और कॉन्फ़िगरेशन हैं, उनमें से एक को यहां सूचीबद्ध किया गया हैः
    • मुख्य पृष्ठः सूचकांक का पताःhttps://indexer.dydx.tradeचेन आईडीःdydx-mainnet-1REST नोडःhttps://dydx-dao-api.polkachu.com:443

    • टेस्टिंग नेटः सूचकांक का पताःhttps://indexer.v4testnet.dydx.exchangeचेन आईडीःdydx-testnet-4REST नोडःhttps://dydx-testnet-api.polkachu.com

dYdX v4 प्रोटोकॉल आर्किटेक्चर

dYdX v4 प्रोटोकॉल कॉस्मोस पारिस्थितिकी तंत्र पर आधारित है। dYdX v4 DEX प्रणाली के लेनदेन से संबंधित सामग्री में मुख्य रूप से दो भाग शामिल हैंः

  • सूचकांक जो बाजार की जानकारी, खाता जानकारी आदि के लिए पूछताछ के लिए जिम्मेदार है।
  • dydx ब्लॉकचेन ऑर्डर संदेश, निकासी संदेश, स्थानांतरण संदेश आदि।

सूचकांक

सूचकांक सेवा REST प्रोटोकॉल और Websocket प्रोटोकॉल प्रदान करती है।

  • REST प्रोटोकॉल REST प्रोटोकॉल इंटरफ़ेस बाजार जानकारी, खाता जानकारी, स्टॉक जानकारी, ऑर्डर जानकारी और अन्य प्रश्नों का समर्थन करता है, जो FMZ प्लेटफॉर्म पर एक मंच-एकीकृत एपीआई इंटरफ़ेस के रूप में पैक किया गया है।

  • वेबसॉकेट प्रोटोकॉल एफएमजेड प्लेटफॉर्म पर, डायल फ़ंक्शन का उपयोग करके वेबसॉकेट कनेक्शन, सदस्यता बाजार आदि जानकारी बनाने के लिए किया जा सकता है।

ध्यान दें कि dydx v4 के सूचकांक में सभी केंद्रीकृत लेनदेन के साथ एक ही समस्या है, डेटा अपडेट समय पर नहीं होता है, उदाहरण के लिए कभी-कभी ऑर्डर देने के तुरंत बाद क्वेरी, ऑर्डर नहीं हो सकता है। कुछ कार्यों के बाद क्वेरी करने की सलाह दी जाती है।Sleep(n)) कुछ सेकंड प्रतीक्षा करें और फिर से पूछें।

यहाँ एक उदाहरण दिया गया है कि कैसे डायल फ़ंक्शन का उपयोग करके वेबसॉकेट एपीआई कनेक्शन बनाने के लिए ऑर्डर थिन डेटा को सब्सक्राइब करना हैः

function dYdXIndexerWSconnManager(streamingPoint) {
    var self = {}
    self.base = streamingPoint
    self.wsThread = null

    // 订阅
    self.CreateWsThread = function (msgSubscribe) {
        self.wsThread = threading.Thread(function (streamingPoint, msgSubscribe) {
            // 订单薄
            var orderBook = null 

            // 更新订单薄
            var updateOrderbook = function(orderbook, update) {
                // 更新 bids
                if (update.bids) {
                    update.bids.forEach(([price, size]) => {
                        const priceFloat = parseFloat(price)
                        const sizeFloat = parseFloat(size)

                        if (sizeFloat === 0) {
                            // 删除价格为 price 的买单
                            orderbook.bids = orderbook.bids.filter(bid => parseFloat(bid.price) !== priceFloat)
                        } else {
                            // 更新或新增买单
                            orderbook.bids = orderbook.bids.filter(bid => parseFloat(bid.price) !== priceFloat)
                            orderbook.bids.push({price: price, size: size})
                            // 按价格降序排序
                            orderbook.bids.sort((a, b) => parseFloat(b.price) - parseFloat(a.price))
                        }
                    })
                }

                // 更新 asks
                if (update.asks) {
                    update.asks.forEach(([price, size]) => {
                        const priceFloat = parseFloat(price)
                        const sizeFloat = parseFloat(size)

                        if (sizeFloat === 0) {
                            // 删除价格为 price 的卖单
                            orderbook.asks = orderbook.asks.filter(ask => parseFloat(ask.price) !== priceFloat)
                        } else {
                            // 更新或新增卖单
                            orderbook.asks = orderbook.asks.filter(ask => parseFloat(ask.price) !== priceFloat)
                            orderbook.asks.push({price: price, size: size})
                            // 按价格升序排序
                            orderbook.asks.sort((a, b) => parseFloat(a.price) - parseFloat(b.price))
                        }
                    })
                }

                return orderbook
            }

            var conn = Dial(`${streamingPoint}|reconnect=true&payload=${JSON.stringify(msgSubscribe)}`)
            if (!conn) {
                Log("createWsThread failed.")
                return
            }
            while (true) {
                var data = conn.read()
                if (data) {
                    var msg = null                    
                    try {
                        msg = JSON.parse(data)
                        if (msg["type"] == "subscribed") {
                            orderBook = msg["contents"]
                            threading.currentThread().postMessage(orderBook)
                        } else if (msg["type"] == "channel_data") {
                            orderBook = updateOrderbook(orderBook, msg["contents"])
                            threading.currentThread().postMessage(orderBook)
                        }
                    } catch (e) {
                        Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
                    }
                }
            }
        }, streamingPoint, msgSubscribe)
    }

    // 监听
    self.Peek = function () {
        return self.wsThread.peekMessage()
    }

    return self
}

function main() {
    // real : wss://indexer.dydx.trade/v4/ws
    // simulate : wss://indexer.v4testnet.dydx.exchange/v4/ws

    var symbol = "ETH-USD"
    var manager = dYdXIndexerWSconnManager("wss://indexer.dydx.trade/v4/ws")
    manager.CreateWsThread({"type": "subscribe", "channel": "v4_orderbook", "id": symbol})

    var redCode = "#FF0000"
    var greenCode = "#006400"
    while (true) {
        var depthTbl = {type: "table", title: symbol + " / depth", cols: ["level", "price", "amount"], rows: []}
        var depth = manager.Peek()
        if (depth) {
            for (var i = 0; i < depth.asks.length; i++) {
                if (i > 9) {
                    break
                }
                var ask = depth.asks[i]
                depthTbl.rows.push(["asks " + (i + 1) + greenCode, ask.price + greenCode, ask.size + greenCode])
            }
            depthTbl.rows.reverse()

            for (var i = 0; i < depth.bids.length; i++) {
                if (i > 9) {
                    break
                }
                var bid = depth.bids[i]
                depthTbl.rows.push(["bids " + (i + 1) + redCode, bid.price + redCode, bid.size + redCode])
            }
        }
        LogStatus(_D(), "\n`" + JSON.stringify(depthTbl) + "`")
    }
}

dYdX चेन नोड समाचार प्रसारण

लेन-देन में सबसे अधिक इस्तेमाल किया जाने वाला संदेश ऑर्डर संदेश, निकासी संदेश, स्थानांतरण संदेश है।

  • आदेश समाचार सारांश

    {
      "@type": "/dydxprotocol.clob.MsgPlaceOrder",
      "order": {
        "orderId": {
          "subaccountId": {
            "owner": "xxx"
          },
          "clientId": xxx,
          "orderFlags": 64,
          "clobPairId": 1
        },
        "side": "SIDE_BUY",
        "quantums": "2000000",
        "subticks": "3500000000",
        "goodTilBlockTime": 1742295981
      }
    }
    
    • सीमित मूल्य सूचीः एफएमजेड प्लेटफॉर्म पर लिमिटेड ऑर्डर ऑर्डर के लिए उपयोग किए जाने वाले ऑर्डर फ्लैग्स के लिए ऑर्डर फ्लैग्स का मान लिया जाता हैःORDER_FLAGS_LONG_TERM = 64 # 长期订单, dydx v4 प्रोटोकॉल की सीमाओं के अनुसार, सबसे लंबे समय तक ऑर्डर की वैधता अवधि का उपयोग किया जाता है, जो कि 90 दिन है ((dydx v4 पर सभी प्रकार के ऑर्डर वैध हैं) ।) ।

    • बाजार की सूचीः एफएमजेड प्लेटफॉर्म पर लिपटे ऑर्डर फंक्शन, बाजार मूल्य ऑर्डर ऑर्डर के लिए उपयोग किए जाने वाले ऑर्डर फ्लैग का मानःORDER_FLAGS_SHORT_TERM = 0 # 短期订单Dydx v4 प्रोटोकॉल के अनुसारः

      // ओरेकल मूल्य पर सेट की सिफारिश - 5% या कम के लिए बेचने के लिए, ओरेकल मूल्य + 5% के लिए खरीदें

      चूंकि यह एक वास्तविक बाजार सूची नहीं है, इसलिए भविष्यवाणी करने वाले मूल्य का उपयोग करें और 5% की कमी के साथ स्लाइडिंग मूल्य को बाजार सूची के रूप में लें। अल्पकालिक ऑर्डर की वैधता सेटिंग भी लंबी अवधि के ऑर्डर से अलग है, अल्पकालिक ऑर्डर ब्लॉक की उच्च वैधता अवधि का उपयोग करता है, जो वर्तमान ब्लॉक + 10 ब्लॉक की ऊंचाई के बाद निष्क्रिय हो जाता है।

    • आदेश आईडीः चूंकि ऑर्डर ऑर्डर ऑपरेशन सीधे चेन पर किया जाता है, इसलिए संदेश प्रसारण के बाद कोई इंडेक्सर उत्पन्न ऑर्डर आईडी नहीं होती है, और इंडेक्सर ऑर्डर का उपयोग प्लेटफॉर्म ऑर्डर फ़ंक्शन के लिए रिटर्न मान के रूप में नहीं किया जा सकता है। ऑर्डर आईडी की विशिष्टता और ऑर्डर क्वेरी की सटीकता सुनिश्चित करने के लिए, लौटाए गए ऑर्डर आईडी में निम्नलिखित जानकारी शामिल हैः

      • सौदा सही
      • dydx के वर्तमान खाते का पता
      • उप खाता संख्या
      • clientId (जैविक रूप से उत्पन्न)
      • clobPairId (ट्रांजेक्शन किस्म आईडी)
      • आदेशध्वज
      • goodTilData ((मिलीसेकंड)
  • समाचार का सारांश

    {
      "@type": "/dydxprotocol.clob.MsgCancelOrder",
      "orderId": {
        "subaccountId": {
          "owner": "xxx"
        },
        "clientId": 2585872024,
        "orderFlags": 64,
        "clobPairId": 1
      },
      "goodTilBlockTime": 1742295981
    }
    

    एफएमजेड प्लेटफॉर्म पर ऑर्डर करने के लिए इंटरफेस को वापस करने के लिए ऑर्डर आईडी की आवश्यकता होती है।

  • ट्रांसफर समाचार सारांश

    {
      "@type": "/dydxprotocol.sending.MsgCreateTransfer",
      "transfer": {
        "sender": {
          "owner": "xxx"
        },
        "recipient": {
          "owner": "xxx",
          "number": 128
        },
        "amount": "10000000"
      }
    }
    

    वर्तमान dydx v4 पते के तहत कई उप खाते बनाए जा सकते हैं, जिनमें से उप खाता संख्या 0 पहली स्वचालित रूप से बनाई गई उप खाता है, उप खाता संख्या 128 के बराबर है। उदाहरण के लिए, यह सब अकाउंट नंबर 0 -> 128 या सब अकाउंट नंबर 128 -> 0 से किया जा सकता है.

FMZ प्लेटफार्म dYdX v4 अभ्यास

उपरोक्त सामग्री कुछ पैकेजिंग विवरणों को सरलता से बताती है, अब हम एक साथ विशिष्ट उपयोगों का अभ्यास करते हैं, यहां dYdX v4 के परीक्षण नेटवर्क का उपयोग करके प्रदर्शन किया गया है, परीक्षण नेटवर्क मुख्य नेटवर्क के साथ मूल रूप से संगत है, और स्वचालित नल परीक्षण संपत्ति ले सकते हैं, होस्ट तैनाती संचालन के बारे में और अधिक नहीं बताता है, एफएमजेड पर वास्तविक परीक्षण बनाने के लिए।

1, कॉन्फ़िगरेशन

dYdX v4 App को सफलतापूर्वक कनेक्ट करने के बाद (मैं यहाँ imToken वॉलेट का उपयोग कर रहा हूँ), परीक्षण संपत्ति प्राप्त करें और वर्तमान dYdX v4 खाते (वॉलेट से व्युत्पन्न) के लिए सहायक शब्द निकालें।

img

FMZ प्लेटफ़ॉर्म पर सहायक शब्द कॉन्फ़िगर करें, जहां हम स्थानीय फ़ाइल विधि का उपयोग करके कॉन्फ़िगर करते हैं ((आप सीधे भर सकते हैं और प्लेटफ़ॉर्म पर कॉन्फ़िगर कर सकते हैं, सहायक शब्द एन्क्रिप्टेड कॉन्फ़िगरेशन पर हैं, न कि स्पष्ट) ।) ।

  • 助记词文件:mnemonic.txt

    img

    डिस्क आईडी फ़ोल्डर को प्रबंधक निर्देशिका के अंतर्गत रखा जाता है, और निश्चित रूप से इसे अन्य निर्देशिकाओं में भी रखा जा सकता है (यदि कॉन्फ़िगरेशन के लिए विशिष्ट पथ लिखना आवश्यक है) ।

  • एफएमजेड पर एक्सचेंजों को कॉन्फ़िगर करें

    https://www.fmz.com/m/platforms/add

    यह एक बहुत ही दिलचस्प लेख है।file:///mnemonic.txtइस तरह के लोगों के लिए, यह एक वास्तविक रास्ता हैः托管者所在目录/logs/storage/594291

    img

2, dydx v4 परीक्षण नेटवर्क पर स्विच करें

function main() {
    // 切换测试链的索引器地址
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // 切换测试链的ChainId 
    exchange.IO("chainId", "dydx-testnet-4")

    // 切换测试链的REST节点地址
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // 读取账户信息测试
    Log(exchange.GetAccount()) 
}

टेस्ट नेट के खाते के बारे में पढ़ेंः

{
	"Info": {
		"subaccounts": [{
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"subaccountNumber": 0,
			"equity": "300.386228",
			"latestProcessedBlockHeight": "28193227",
			"freeCollateral": "300.386228",
			"openPerpetualPositions": {},
			"assetPositions": {
				"USDC": {
					"subaccountNumber": 0,
					"size": "300.386228",
					"symbol": "USDC",
					"side": "LONG",
					"assetId": "0"
				}
			},
			"marginEnabled": true,
			"updatedAtHeight": "28063818"
		}, {
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"equity": "0",
			"freeCollateral": "0",
			"openPerpetualPositions": {},
			"marginEnabled": true,
			"subaccountNumber": 1,
			"assetPositions": {},
			"updatedAtHeight": "27770289",
			"latestProcessedBlockHeight": "28193227"
		}, {
			"equity": "0",
			"openPerpetualPositions": {},
			"marginEnabled": true,
			"updatedAtHeight": "28063818",
			"latestProcessedBlockHeight": "28193227",
			"subaccountNumber": 128,
			"freeCollateral": "0",
			"assetPositions": {},
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez"
		}],
		"totalTradingRewards": "0.021744179376211564"
	},
	"Stocks": 0,
	"FrozenStocks": 0,
	"Balance": 300.386228,
	"FrozenBalance": 0,
	"Equity": 300.386228,
	"UPnL": 0
}

3। बाजार की जानकारी का पता लगाएं

परीक्षण नेटवर्क पर स्विच न करें, मुख्य नेटवर्क पर परीक्षण करें

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"], 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])
    }
    LogStatus("`" + JSON.stringify(tbl) +  "`")
}

img

4. नीचे की सूची

function main() {
    // 切换测试链的索引器地址
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // 切换测试链的ChainId 
    exchange.IO("chainId", "dydx-testnet-4")

    // 切换测试链的REST节点地址
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // 限价单,挂单
    var idSell = exchange.CreateOrder("ETH_USD.swap", "sell", 4000, 0.002)
    var idBuy = exchange.CreateOrder("ETH_USD.swap", "buy", 3000, 0.003)

    // 市价单
    var idMarket = exchange.CreateOrder("ETH_USD.swap", "buy", -1, 0.01)

    Log("idSell:", idSell)
    Log("idBuy:", idBuy)
    Log("idMarket:", idMarket)
}

img

dYdX v4 ऐप पेजः

img

5. ऑर्डर की जानकारी

परीक्षण नेटवर्क दो आदेशों को पहले से लटका देता है, परीक्षण वर्तमान लटकन प्राप्त करता है, और आदेश को रद्द करता है।

function main() {    
    // 切换测试链的索引器地址
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // 切换测试链的ChainId 
    exchange.IO("chainId", "dydx-testnet-4")

    // 切换测试链的REST节点地址
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    var orders = exchange.GetOrders()
    Log("orders:", orders)
    for (var order of orders) {
        exchange.CancelOrder(order.Id, order)
        Sleep(2000)
    }

    var tbl = {type: "table", title: "test GetOrders", cols: ["Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
    for (var order of orders) {
        tbl.rows.push([order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
    }
    LogStatus("`" + JSON.stringify(tbl) +  "`")
}

img

6। जानकारी के लिए पूछताछ

function main() {
    // 切换测试链的索引器地址
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // 切换测试链的ChainId 
    exchange.IO("chainId", "dydx-testnet-4")

    // 切换测试链的REST节点地址
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    var p1 = exchange.GetPositions("USD.swap")
    var p2 = exchange.GetPositions("ETH_USD.swap")
    var p3 = exchange.GetPositions()
    var p4 = exchange.GetPositions("SOL_USD.swap")

    var tbls = []
    for (var positions of [p1, p2, p3, p4]) {
        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])
        } 
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

7. उप खाते प्रबंधित करें

function main() {
    // 切换测试链的索引器地址
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // 切换测试链的ChainId 
    exchange.IO("chainId", "dydx-testnet-4")

    // 切换测试链的REST节点地址
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // subAccountNumber 0 -> 128 : 20 USDC , Gas Fee 为 adv4tnt 即 dydx token
    var ret = exchange.IO("transferUSDCToSubaccount", 0, 128, "adv4tnt", 20)  
    Log("ret:", ret)

    // 切换到子账号subAccountNumber 128 ,读取账户信息检查
    exchange.IO("subAccountNumber", 128)

    var account = exchange.GetAccount()
    Log("account:", account)
}

img

उप खाते संख्या में स्विच करने के लिए 128 के लिए उप खाते, GetAccount द्वारा लौटाए गए डेटाः

{
	"Info": {
		"subaccounts": [{
			"subaccountNumber": 0,
			"assetPositions": {
				"USDC": {
					"size": "245.696892",
					"symbol": "USDC",
					"side": "LONG",
					"assetId": "0",
					"subaccountNumber": 0
				}
			},
			"updatedAtHeight": "28194977",
			"latestProcessedBlockHeight": "28195008",
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"freeCollateral": "279.5022142346",
			"openPerpetualPositions": {
				"ETH-USD": {
					"closedAt": null,
					"size": "0.01",
					"maxSize": "0.01",
					"exitPrice": null,
					"unrealizedPnl": "-0.17677323",
					"subaccountNumber": 0,
					"status": "OPEN",
					"createdAt": "2024-12-26T03:36:09.264Z",
					"createdAtHeight": "28194494",
					"sumClose": "0",
					"netFunding": "0",
					"market": "ETH-USD",
					"side": "LONG",
					"entryPrice": "3467.2",
					"realizedPnl": "0",
					"sumOpen": "0.01"
				}
			},
			"marginEnabled": true,
			"equity": "280.19211877"
		}, {
			"openPerpetualPositions": {},
			"assetPositions": {},
			"marginEnabled": true,
			"latestProcessedBlockHeight": "28195008",
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"subaccountNumber": 1,
			"equity": "0",
			"freeCollateral": "0",
			"updatedAtHeight": "27770289"
		}, {
			"openPerpetualPositions": {},
			"updatedAtHeight": "28194977",
			"latestProcessedBlockHeight": "28195008",
			"address": "dydx1fzsndj35a26maujxff88q2ge5jr4nzfeljn2ez",
			"subaccountNumber": 128,
			"assetPositions": {
				"USDC": {
					"assetId": "0",
					"subaccountNumber": 128,
					"size": "20",
					"symbol": "USDC",
					"side": "LONG"
				}
			},
			"marginEnabled": true,
			"equity": "20",
			"freeCollateral": "20"
		}],
		"totalTradingRewards": "0.021886899964446858"
	},
	"Stocks": 0,
	"FrozenStocks": 0,
	"Balance": 20,
	"FrozenBalance": 0,
	"Equity": 20,
	"UPnL": 0
}

जैसा कि आप देख सकते हैं, सब अकाउंट नंबर 128 का सब अकाउंट है, जिसे 20 यूएसडीसी में परिवर्तित किया गया है।

8. TxHash प्राप्त करें और REST नोड इंटरफेस को कॉल करें

ऑर्डर के आधार पर, TxHash प्राप्त करें, REST नोड्स को कॉल करने के लिए IO परीक्षण विधि

ऑर्डर का TxHash कैसे प्राप्त करें, एक्सचेंज ऑब्जेक्ट dydx TxHash को कैश करता है, जिसे ऑर्डर आईडी के साथ क्वेरी किया जा सकता है; लेकिन जब नीति बंद हो जाती है, तो कैश किए गए ऑर्डर का tx हैश मैपिंग खाली हो जाता है।

function main() {
    // 切换测试链的索引器地址
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // 切换测试链的ChainId 
    exchange.IO("chainId", "dydx-testnet-4")

    // 切换测试链的REST节点地址
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    var id1 = exchange.CreateOrder("ETH_USD.swap", "buy", 3000, 0.002)
    var hash1 = exchange.IO("getTxHash", id1)
    Log("id1:", id1, "hash1:", hash1)

    var id2 = exchange.CreateOrder("ETH_USD.swap", "buy", 2900, 0.003)
    var hash2 = exchange.IO("getTxHash", id2)
    Log("id2:", id2, "hash2:", hash2)
    
    // 清空映射表可以使用:exchange.IO("getTxHash", "")
    var arr = [hash1, hash2]
    
    Sleep(10000)
    for (var txHash of arr) {
        // GET https://docs.cosmos.network   /cosmos/tx/v1beta1/txs/{hash}
        var ret = exchange.IO("api", "GET", "/cosmos/tx/v1beta1/txs/" + txHash)
        Log("ret:", ret)
    }
}

img

TxHash के माध्यम से पूछताछ के लिए संदेशः

var ret =exchange.IO("api", GET, /cosmos/tx/v1beta1/txs/ + txHash)

यह बहुत लंबा है, और कुछ अंशों में दिखाया गया हैः

{
	"tx_response": {
		"codespace": "",
		"code": 0,
		"logs": [],
		"info": "",
		"height": "28195603",
		"data": "xxx",
		"raw_log": "",
		"gas_wanted": "-1",
		"gas_used": "0",
		"tx": {
			"@type": "/cosmos.tx.v1beta1.Tx",
			"body": {
				"messages": [{
					"@type": "/dydxprotocol.clob.MsgPlaceOrder",
					"order": {
						"good_til_block_time": 1742961542,
						"condition_type": "CONDITION_TYPE_UNSPECIFIED",
						"order_id": {
							"clob_pair_id": 1,
							"subaccount_id": {
								"owner": "xxx",
								"number": 0
							},
							"client_id": 2999181974,
							"order_flags": 64
						},
						"side": "SIDE_BUY",
						"quantums": "3000000",
						"client_metadata": 0,
						"conditional_order_trigger_subticks": "0",
						"subticks": "2900000000",
						"time_in_force": "TIME_IN_FORCE_UNSPECIFIED",
						"reduce_only": false
					}
				}],
				"memo": "FMZ",
				"timeout_height": "0",
				"extension_options": [],
				"non_critical_extension_options": []
			},
      ...

अंत

उपरोक्त परीक्षण, नवीनतम होस्ट पर आधारित है, नवीनतम होस्ट डाउनलोड करने के लिए आवश्यक है dYdX v4 DEX का समर्थन करने के लिए

धन्यवाद समर्थन के लिए, और पढ़ने के लिए धन्यवाद।


अधिक