avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

DEX ایکسچینج مقداری مشق (1) -- dYdX v4 صارف گائیڈ

میں تخلیق کیا: 2024-12-24 17:09:32, تازہ کاری: 2024-12-26 21:41:46
comments   0
hits   1049

[TOC]

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

دیباچہ

کرپٹو کرنسی ٹریڈنگ کے میدان میں وکندریقرت ایکسچینجز (DEX) کے تیزی سے اضافے کے ساتھ، مقداری تاجروں نے آہستہ آہستہ موثر خودکار ٹریڈنگ کے لیے ان پلیٹ فارمز کا رخ کرنا شروع کر دیا ہے۔ سب سے زیادہ مقبول ڈی سینٹرلائزڈ ٹریڈنگ پلیٹ فارمز میں سے ایک کے طور پر، dYdX طاقتور ٹریڈنگ فنکشنز فراہم کرتا ہے اور فیوچر پرپیچوئل کنٹریکٹ ٹریڈنگ کو سپورٹ کرتا ہے، اس کا تازہ ترین ورژن v4 کارکردگی اور صارف کے تجربے کو بہتر بناتا ہے، جس سے یہ بہت سے مقداری تاجروں کا پہلا انتخاب ہے۔

یہ مضمون متعارف کرائے گا کہ dYdX v4 پر مقداری تجارت کی مشق کیسے کی جائے، بشمول اس کے API کو تجارت، مارکیٹ ڈیٹا حاصل کرنے، اور اکاؤنٹس کا نظم کرنے کے لیے کیسے استعمال کیا جائے۔

  • ٹیسٹ ماحول سوئچنگ
  • مارکیٹ کی معلومات کا استفسار
  • آرڈر کی معلومات اور پوزیشن کی معلومات کا سوال
  • آرڈر دیں۔
  • ذیلی اکاؤنٹ کا انتظام
  • نوڈ طریقہ کی درخواست

dYdX v4 DEX

  • dYdX Testnet ایپ صفحہ

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

  • اورdYdX v3اسی طرح، لین دین انعامات، انعامات پیدا کرتا ہے۔dYdXٹوکنز۔

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

والیٹ کنکشن، لاگ ان، اور کنفیگریشن کی معلومات

پچھلا dYdX v3 پروٹوکول DEX ایکسچینج آف لائن ہے موجودہ dYdX v4 ایپ کا پتہ ہے:

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

ایپ کا صفحہ کھولنے کے بعد، بٹوے سے جڑنے کے لیے اوپری دائیں کونے میں ایک بٹن ہوتا ہے۔

اگر آپ ٹیسٹ نیٹ ورک کے ماحول سے پہلے خود کو جانچنا اور واقف کرنا چاہتے ہیں، تو آپ ٹیسٹ نیٹ ورک استعمال کر سکتے ہیں:

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

اس کے علاوہ، اوپری دائیں کونے میں کنیکٹ والیٹ بٹن پر کلک کریں، والیٹ سے جڑنے کے لیے QR کوڈ کو اسکین کریں، اور دستخط کی تصدیق کریں۔ بٹوے کے کامیابی سے منسلک ہونے کے بعد، ایک dydx v4 پتہ خود بخود تیار ہو جائے گا، یہ پتہ ایپ کے صفحہ کے اوپری دائیں کونے میں ظاہر ہو جائے گا۔ ان میں ریچارج، واپسی، اور منتقلی جیسے آپریشن شامل ہیں۔ dYdX مین نیٹ (پیداواری ماحول) اور ٹیسٹ نیٹ کے درمیان ایک فرق یہ ہے کہ جب آپ ٹیسٹ نیٹ پر ٹاپ اپ بٹن پر کلک کرتے ہیں، تو 300 USDC اثاثے خود بخود جانچ کے لیے ٹونٹی میں جمع ہو جائیں گے۔ اگر آپ dYdX پر حقیقی لین دین کرنا چاہتے ہیں تو آپ کو USDC کے اثاثے جمع کرنے کی ضرورت ہے ریچارج بھی بہت آسان اور متعدد اثاثوں اور زنجیروں کے ساتھ مطابقت رکھتا ہے۔

  • dYdX v4 اکاؤنٹ کا پتہ dYdX v4 اکاؤنٹ کا پتہ والٹ ایڈریس سے اخذ کیا گیا ہے dYdX v4 اکاؤنٹ کا پتہ اس طرح لگتا ہے:dydx1xxxxxxxxxxxxxxxxxxxxq2ge5jr4nzfeljxxxx، dydx1 سے شروع ہونے والا پتہ ہے۔ اس ایڈریس کو بلاکچین ایکسپلوررز میں دریافت کیا جا سکتا ہے۔

  • یادداشت آپ اوپری دائیں کونے کے مینو میں “پاس ورڈ ایکسپورٹ کریں” بٹن پر کلک کر کے موجودہ dYdX ایڈریس اکاؤنٹ کی یادداشت برآمد کر سکتے ہیں۔ FMZ پلیٹ فارم پر ایکسچینج شامل کرتے وقت، آپ کو یہ یادداشت کنفیگر کرنے کی ضرورت ہے۔

یادداشت کو براہ راست FMZ پلیٹ فارم پر ترتیب دیا جا سکتا ہے یا مقامی طور پر dydx v4 ایکسچینج آبجیکٹ کا استعمال کرتے وقت، یادداشتوں کو ریکارڈ کرنے والی فائل کا مواد پڑھا جائے گا، جسے اس مضمون کے عملی حصے میں دکھایا جائے گا۔

مینیٹ اور ٹیسٹ نیٹ کے درمیان فرق

ٹیسٹ نیٹ ماحول کچھ پہلوؤں میں مین نیٹ ماحول سے مختلف ہے یہاں کچھ آسان فرق ہیں۔

  • ذیلی اکاؤنٹ اثاثہ کی منتقلی مرکزی نیٹ ورک میں ذیلی اکاؤنٹ کی صفائی کا طریقہ کار ہے۔subAccountNumber >= 128اگر اس ID والے ذیلی اکاؤنٹ میں کوئی پوزیشن نہیں ہے، تو اثاثے خود بخود ذیلی اکاؤنٹ میں subAccountNumber 0 کے ساتھ صاف ہو جائیں گے۔ جانچ کے دوران، یہ پایا گیا کہ ٹیسٹ نیٹ ورک میں ایسا کوئی طریقہ کار نہیں تھا (یا ٹرگر کرنے والے حالات مختلف تھے اور یہ ٹیسٹ نیٹ ورک پر متحرک نہیں ہوا تھا)۔

  • کچھ ٹوکن نام۔ مقامی ٹوکن dydx کا نام مختلف ہے: MainnetDYDX، ٹیسٹ نیٹ ورکDv4TNT

  • ایڈریس کنفیگریشن، جیسے چین آئی ڈی، نوڈ ایڈریس، انڈیکسر ایڈریس وغیرہ۔ بہت سے نوڈس اور کنفیگریشنز ہیں، ان میں سے ایک یہ ہے:

    • مین نیٹ: انڈیکسر کا پتہ:https://indexer.dydx.trade سلسلہ ID:dydx-mainnet-1 ریسٹ نوڈ:https://dydx-dao-api.polkachu.com:443

    • ٹیسٹ نیٹ: انڈیکسر کا پتہ:https://indexer.v4testnet.dydx.exchange سلسلہ ID:dydx-testnet-4 ریسٹ نوڈ:https://dydx-testnet-api.polkachu.com

dYdX v4 پروٹوکول آرکیٹیکچر

dYdX v4 پروٹوکول کوسموس ایکو سسٹم کی بنیاد پر تیار کیا گیا ہے dYdX v4 DEX سسٹم کے لین دین سے متعلق مواد بنیادی طور پر دو حصوں پر مشتمل ہے:

  • مارکیٹ کی معلومات، اکاؤنٹ کی معلومات، وغیرہ کے بارے میں پوچھ گچھ کے لیے ذمہ دار ایک اشاریہ ساز۔
  • dydx blockchain آرڈر کے پیغامات، آرڈر منسوخی کے پیغامات، پیغامات کی منتقلی وغیرہ۔

اشاریہ ساز

انڈیکسر سروس REST اور Websocket پروٹوکول فراہم کرتی ہے۔

  • REST پروٹوکول REST پروٹوکول انٹرفیس مارکیٹ کی معلومات کے استفسار، اکاؤنٹ کی معلومات، پوزیشن کی معلومات، آرڈر کی معلومات، وغیرہ کی حمایت کرتا ہے، اور اسے FMZ پلیٹ فارم پر ایک متحد API انٹرفیس کے طور پر شامل کیا گیا ہے۔

  • ویب ساکٹ پروٹوکول FMZ پلیٹ فارم پر، آپ ویب ساکٹ کنکشن بنانے اور مارکیٹ کی معلومات کو سبسکرائب کرنے کے لیے ڈائل فنکشن استعمال کر سکتے ہیں۔

واضح رہے کہ dydx v4 indexer میں سینٹرلائزڈ ایکسچینج جیسا ہی مسئلہ ہے، یعنی ڈیٹا اپ ڈیٹ اتنا بروقت نہیں ہوتا ہے، مثال کے طور پر، بعض اوقات آرڈر دینے کے فوراً بعد سوال کرنے پر آرڈر نہیں مل پاتا۔ یہ سفارش کی جاتی ہے کہ کچھ آپریشنز کے بعد (Sleep(n)) دوبارہ استفسار کرنے سے پہلے چند سیکنڈ انتظار کریں۔

ویب ساکٹ API کنکشن بنانے اور آرڈر بک ڈیٹا کو سبسکرائب کرنے کے لیے ڈائل فنکشن استعمال کرنے کی ایک مثال یہ ہے:

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
    }
  }
  • حد آرڈر: FMZ پلیٹ فارم پر موجود آرڈر فنکشن میں، حد کے آرڈرز کے لیے استعمال ہونے والی آرڈر فلیگ کی قدر یہ ہے:ORDER_FLAGS_LONG_TERM = 64 # 长期订单DYDX v4 پروٹوکول کی حدود کے مطابق، سب سے طویل آرڈر کی میعاد کی مدت استعمال کی جاتی ہے، جو کہ 90 دن ہے (DYDX v4 پر تمام قسم کے آرڈرز کی میعاد کی مدت ہوتی ہے)۔

  • مارکیٹ آرڈر: FMZ پلیٹ فارم پر موجود آرڈر فنکشن میں، مارکیٹ آرڈر کے ذریعے استعمال ہونے والی آرڈر فلیگ کی قدر یہ ہے:ORDER_FLAGS_SHORT_TERM = 0 # 短期订单DYDX v4 پروٹوکول کی سفارشات کے مطابق:

    // Recommend set to oracle price - 5% or lower for SELL, oracle price + 5% for BUY

    چونکہ یہ ایک حقیقی مارکیٹ آرڈر نہیں ہے، اس لیے مارکیٹ آرڈر کے طور پر اوریکل قیمت، جمع یا مائنس 5% سلپیج استعمال کی جاتی ہے۔ شارٹ ٹرم آرڈرز کی میعاد کی ترتیب بھی طویل مدتی آرڈرز سے مختلف ہوتی ہے جو کہ dydx v4 کی سفارش کے مطابق موجودہ بلاک + 10 بلاک کی اونچائیوں پر سیٹ ہے۔ اس کی میعاد ختم ہونے سے پہلے۔

  • آرڈر ID: چونکہ آرڈر کا عمل براہ راست چین پر کیا جاتا ہے، اس لیے پیغام نشر ہونے کے بعد انڈیکسر کے ذریعے کوئی آرڈر آئی ڈی تیار نہیں کیا جائے گا، اور انفرادیت کو یقینی بنانے کے لیے انڈیکسر آرڈر کو پلیٹ فارم آرڈر کی واپسی کی قدر کے طور پر استعمال نہیں کیا جا سکتا آرڈر کی شناخت اور آرڈر کے استفسار کی درستگی، انڈیکس آرڈر واپس کر دیا جاتا ہے آرڈر ID درج ذیل معلومات پر مشتمل ہوتا ہے (کوما سے الگ کیا گیا):

    • تجارتی جوڑے
    • dydx کرنٹ اکاؤنٹ کا پتہ
    • ذیلی اکاؤنٹ نمبر (subaccountNumber)
    • کلائنٹ آئی ڈی (تصادفی طور پر تیار کردہ)
    • clobPairId (لین دین کی علامت ID)
    • orderFlags
    • goodTilData (ملی سیکنڈز)
  • آرڈر منسوخی کے پیغام کا خلاصہ

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

FMZ پلیٹ فارم آرڈر انٹرفیس کے ذریعہ واپس کردہ آرڈر ID کو پاس کرنے کی ضرورت ہے۔

  • پیغام کا خلاصہ منتقل کریں۔
  {
    "@type": "/dydxprotocol.sending.MsgCreateTransfer",
    "transfer": {
      "sender": {
        "owner": "xxx"
      },
      "recipient": {
        "owner": "xxx",
        "number": 128
      },
      "amount": "10000000"
    }
  }

بہت سے ذیلی اکاؤنٹس موجودہ dydx v4 ایڈریس کے تحت بنائے جا سکتے ہیں ذیلی اکاؤنٹ نمبر 0 پہلا خودکار ذیلی اکاؤنٹ ہے جس کا ذیلی اکاؤنٹ نمبر 128 سے زیادہ یا اس کے برابر ہے، الگ تھلگ پوزیشن ٹریڈنگ کے لیے استعمال کیا جاتا ہے۔ جس کے لیے کم از کم 20 USDC اثاثے درکار ہیں۔ مثال کے طور پر، آپ subAccountNumber 0 -> 128، یا subAccountNumber 128 -> 0 سے جا سکتے ہیں۔ منتقلی کے لیے گیس فیس کی کھپت کی ضرورت ہوتی ہے۔ گیس فیس USDC اور dydx ٹوکن استعمال کر سکتی ہے۔

FMZ پلیٹ فارم dYdX v4 پریکٹس

مندرجہ بالا مواد میں کچھ پیکیجنگ کی تفصیلات بتائی گئی ہیں، آئیے یہاں ڈیمسٹریشن کے لیے dYdX v4 ٹیسٹ نیٹ ورک کا استعمال کرتے ہیں، اور ٹیسٹ کے اثاثوں کو حاصل کرنے کے لیے ایک خودکار ٹونٹی موجود ہے۔ نگہبان تعینات کرتا ہے میں آپریشن کے بارے میں تفصیلات میں نہیں جاؤں گا، اور FMZ پر ایک حقیقی ٹیسٹ تیار کروں گا۔

1. ترتیب

کریپٹو کرنسی والیٹ (میں یہاں imToken والیٹ استعمال کرتا ہوں) کا استعمال کرتے ہوئے dYdX v4 ایپ سے کامیابی کے ساتھ جڑنے کے بعد، اپنے ٹیسٹ اثاثوں کا دعوی کریں اور پھر اپنے موجودہ dYdX v4 اکاؤنٹ (آپ کے بٹوے سے اخذ کردہ) کے لیے یادداشت برآمد کریں۔

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

FMZ پلیٹ فارم پر میمونک کو کنفیگر کریں یہاں ہم اسے کنفیگر کرنے کے لیے مقامی فائل کا طریقہ استعمال کرتے ہیں (آپ اسے براہ راست بھر کر پلیٹ فارم پر کنفیگر کر سکتے ہیں۔ میمونک کو انکرپشن کے بعد کنفیگر کیا جاتا ہے، سادہ متن میں نہیں)۔

  • یادداشت کی فائل: mnemonic.txt

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

اسے اصل ڈسک آئی ڈی فولڈر ڈائرکٹری میں رکھو، بلاشبہ، اسے دوسری ڈائریکٹریوں میں بھی رکھا جا سکتا ہے (کنفیگریشن کے دوران مخصوص راستہ لکھنا ضروری ہے)۔

  • ایف ایم زیڈ پر ایکسچینج کنفیگر کریں۔

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

یادداشت کے ترمیمی خانے کو پُر کریں:file:///mnemonic.txt، متعلقہ اصل راستہ یہ ہے:托管者所在目录/logs/storage/594291

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

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) +  "`")
}

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

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)
}

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

dYdX v4 ایپ کا صفحہ:

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

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) +  "`")
}

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

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) +  "`")
}

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

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)
}

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

ذیلی اکاؤنٹ پر جائیں جس کا ذیلی اکاؤنٹ نمبر 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
}

یہ دیکھا جا سکتا ہے کہ subAccountNumber 128 والے ذیلی اکاؤنٹ نے 20 USDC کو منتقل کیا ہے۔

8. TxHash حاصل کریں اور REST نوڈ انٹرفیس کو کال کریں۔

آرڈر کے مطابق، TxHash حاصل کریں اور IO کالنگ REST نوڈ کے طریقہ کار کی جانچ کریں۔

آرڈر کا 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)
    }
}

DEX ایکسچینج مقداری مشق (1) – dYdX v4 صارف گائیڈ

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": []
			},
      ...

THE END

مندرجہ بالا ٹیسٹ تازہ ترین کسٹوڈین پر مبنی ہیں آپ کو dYdX v4 DEX کو سپورٹ کرنے کے لیے تازہ ترین کسٹوڈین کو ڈاؤن لوڈ کرنے کی ضرورت ہے۔

آپ کے تعاون کا شکریہ اور پڑھنے کے لیے آپ کا شکریہ۔