وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ڈی ای ایکس ایکسچینجز کی مقداری مشق (1) -- ڈی وائی ڈی ایکس وی 4 صارف گائیڈ

مصنف:FMZ~Lydia, تخلیق: 2024-12-26 15:32:24, تازہ کاری: 2024-12-26 17:36:31

پیش لفظ

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

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

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

dYdX v4 DEX

  • dYdX ٹیسٹ نیٹ ایپ پیج

img

  • بطورdYdX v3ایتھرئم کے ساتھ، ٹریڈنگ انعامات پیدا کرتی ہے، جو انعامات ہیںdYdX tokens.

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

پچھلا 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 پر حقیقی لین دین کرنا چاہتے ہیں تو ، آپ کو USDC اثاثے چارج کرنے کی ضرورت ہے۔ ریچارج بہت آسان اور ریچارج کے لئے متعدد اثاثوں اور زنجیروں کے ساتھ بھی مطابقت رکھتا ہے۔

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

  • یاد دہانی آپ موجودہ ڈی وائی ڈی ایکس ایڈریس اکاؤنٹ کی یاد دہانیوں کو برآمد کرنے کے لئے اوپری دائیں کونے کے مینو میں پاس ورڈ برآمد کریں بٹن کا استعمال کرسکتے ہیں۔ ایف ایم زیڈ پلیٹ فارم پر تبادلہ شامل کرتے وقت ، آپ کو اس یاد دہانی کو تشکیل دینے کی ضرورت ہے۔

میمونکس کو براہ راست ایف ایم زیڈ پلیٹ فارم پر تشکیل دیا جاسکتا ہے یا ڈوکر پر مقامی طور پر محفوظ کیا جاسکتا ہے۔ جب 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 پروٹوکول فن تعمیر

ڈی وائی ایکس وی 4 پروٹوکول کو کاسموس ماحولیاتی نظام کی بنیاد پر تیار کیا گیا ہے۔ ڈی وائی ایکس وی 4 ڈی ای ایکس سسٹم ٹرانزیکشن سے متعلق مواد بنیادی طور پر دو حصوں پر مشتمل ہے:

  • ایک انڈیکسر جو ٹکر کی معلومات ، اکاؤنٹ کی معلومات وغیرہ کی استفسار کے لئے ذمہ دار ہے۔
  • dydx بلاکچین آرڈر پیغامات، آرڈر منسوخی پیغامات، منتقلی پیغامات، وغیرہ

انڈیکسر

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

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

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

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

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

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

    // subscription
    self.CreateWsThread = function (msgSubscribe) {
        self.wsThread = threading.Thread(function (streamingPoint, msgSubscribe) {
            // Order book
            var orderBook = null 

            // Update order book
            var updateOrderbook = function(orderbook, update) {
                // Update bids
                if (update.bids) {
                    update.bids.forEach(([price, size]) => {
                        const priceFloat = parseFloat(price)
                        const sizeFloat = parseFloat(size)

                        if (sizeFloat === 0) {
                            // Delete the buy order with price
                            orderbook.bids = orderbook.bids.filter(bid => parseFloat(bid.price) !== priceFloat)
                        } else {
                            // Update or add a buy order
                            orderbook.bids = orderbook.bids.filter(bid => parseFloat(bid.price) !== priceFloat)
                            orderbook.bids.push({price: price, size: size})
                            // Sort by price descending
                            orderbook.bids.sort((a, b) => parseFloat(b.price) - parseFloat(a.price))
                        }
                    })
                }

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

                        if (sizeFloat === 0) {
                            // Delete the sell order with price
                            orderbook.asks = orderbook.asks.filter(ask => parseFloat(ask.price) !== priceFloat)
                        } else {
                            // Update or add a sell order
                            orderbook.asks = orderbook.asks.filter(ask => parseFloat(ask.price) !== priceFloat)
                            orderbook.asks.push({price: price, size: size})
                            // Sort by price ascending
                            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)
    }

    // monitor
    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 # Long-term orderڈی ڈی ایکس وی 4 پروٹوکول کی حدود کے مطابق ، آرڈر کی سب سے طویل مدت کی مدت استعمال کی جاتی ہے ، جو 90 دن ہے (ڈی ڈی ایکس وی 4 پر تمام قسم کے آرڈرز کی مدت ہوتی ہے) ۔

  • مارکیٹ آرڈر: ایف ایم زیڈ پلیٹ فارم پر شامل آرڈر فنکشن میں ، مارکیٹ آرڈرز کے لئے استعمال ہونے والا آرڈر فلیگ ویلیو:ORDER_FLAGS_SHORT_TERM = 0 # Short-term order، dydx v4 پروٹوکول کی سفارشات کے مطابق:

// تجویز مقرر کرنے کے لئے اوریکل قیمت - فروخت کے لئے 5٪ یا اس سے کم، اوریکل قیمت + 5٪ خریدنے کے لئے

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

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

تجارتی جوڑے dydx کرنٹ اکاؤنٹ کا پتہ سباکاؤنٹ نمبر (سباکاؤنٹ نمبر) کلائنٹ آئی ڈی (بے ترتیب پیدا) clobPairId (ٹرانزیکشن علامت ID) حکمپرچم goodTilData (ملسیکنڈ)

  • آرڈر منسوخی پیغام کا خلاصہ
{
  "@type": "/dydxprotocol.clob.MsgCancelOrder",
  "orderId": {
    "subaccountId": {
      "owner": "xxx"
    },
    "clientId": 2585872024,
    "orderFlags": 64,
    "clobPairId": 1
  },
  "goodTilBlockTime": 1742295981
}

ایف ایم زیڈ پلیٹ فارم آرڈر انٹرفیس کی طرف سے واپس آرڈر ID میں منتقل کرنے کی ضرورت ہے.

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

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

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

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

1. تشکیل

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

img

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

  • یاد دہانی فائل: یاد دہانی.txt

img

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

  • ایف ایم زیڈ پر تبادلہ ترتیب دیں

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

یاد دہانی کا ترمیم خانہ بھریں:file:///mnemonic.txt، اس کے مطابق اصل راستہ ہے:docker directory/logs/storage/594291.

img

2. dydx v4 ٹیسٹ نیٹ ورک پر سوئچ کریں

function main() {
    // Switch the indexer address of the test chain
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // Switch the ChainId of the test chain
    exchange.IO("chainId", "dydx-testnet-4")

    // Switch the REST node address of the test chain
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // Read account information test
    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
}

مارکیٹ انفارمیشن انکوائری

ٹیسٹ نیٹ ورک پر تبدیل نہیں کیا، مرکزی نیٹ ورک کے ساتھ تجربہ کیا

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

۴. کوئی آرڈر دیں

function main() {
    // Switch the indexer address of the test chain
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // Switch the ChainId of the test chain
    exchange.IO("chainId", "dydx-testnet-4")

    // Switch the REST node address of the test chain
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

    // Limit order, pending order
    var idSell = exchange.CreateOrder("ETH_USD.swap", "sell", 4000, 0.002)
    var idBuy = exchange.CreateOrder("ETH_USD.swap", "buy", 3000, 0.003)

    // Market order
    var idMarket = exchange.CreateOrder("ETH_USD.swap", "buy", -1, 0.01)

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

img

dYdX v4 ایپ صفحہ:

img

آرڈر کی معلومات

ٹیسٹ نیٹ ورک پہلے سے دو آرڈر دیتا ہے، موجودہ زیر التواء آرڈرز حاصل کرنے کے ٹیسٹ کرتا ہے، اور آرڈرز کو منسوخ کرتا ہے۔

function main() {    
    // Switch the indexer address of the test chain
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // Switch the ChainId of the test chain
    exchange.IO("chainId", "dydx-testnet-4")

    // Switch the REST node address of the test chain
    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

پوزیشن انفارمیشن انکوائری

function main() {
    // Switch the indexer address of the test chain
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // Switch the ChainId of the test chain
    exchange.IO("chainId", "dydx-testnet-4")

    // Switch the REST node address of the test chain
    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

سب اکاؤنٹ مینجمنٹ

function main() {
    // Switch the indexer address of the test chain
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // Switch the ChainId of the test chain
    exchange.IO("chainId", "dydx-testnet-4")

    // Switch the REST node address of the test chain
    exchange.IO("restApiBase", "https://dydx-testnet-api.polkachu.com")

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

    // Switch to subaccount subAccountNumber 128 and read account information to check
    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 حاصل کریں اور IO REST نوڈ بلا کے طریقہ کار کی جانچ

کسی آرڈر کا TxHash کیسے حاصل کیا جائے؟ تبادلہ آبجیکٹ dydx TxHash کو کیش کرے گا ، جسے آرڈر ID کا استعمال کرتے ہوئے سوال کیا جاسکتا ہے۔ تاہم ، حکمت عملی کو روکنے کے بعد ، کیچڈ آرڈر tx ہیش میپ کو صاف کردیا جائے گا۔

function main() {
    // Switch the indexer address of the test chain
    exchange.SetBase("https://indexer.v4testnet.dydx.exchange")

    // Switch the ChainId of the test chain
    exchange.IO("chainId", "dydx-testnet-4")

    // Switch the REST node address of the test chain
    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)
    
    // To clear the mapping table, use: 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": []
			},
      ...

اختتام

مذکورہ بالا ٹیسٹ تازہ ترین ڈوکر پر مبنی ہیں۔ آپ کو ڈی وائی ڈی ایکس وی 4 ڈی ای ایکس کی حمایت کرنے کے لئے تازہ ترین ڈوکر ڈاؤن لوڈ کرنے کی ضرورت ہے

آپ کی حمایت اور پڑھنے کے لئے شکریہ.


مزید