রিসোর্স লোড হচ্ছে... লোডিং...

DEX এক্সচেঞ্জের পরিমাণগত অনুশীলন ((1)-- dYdX v4 ব্যবহারের নির্দেশিকা

লেখক:উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্ন, তৈরিঃ ২০২৪-১২-২৪ ১৭ঃ০৯ঃ৩২, আপডেটঃ ২০২৪-১২-২৬ ২১ঃ৪১ঃ৪৬

[TOC]

img

উপস্থাপনা

বিকেন্দ্রীভূত এক্সচেঞ্জ (DEX) এর দ্রুত উত্থানের সাথে সাথে, পরিমাণগত ব্যবসায়ীরা কার্যকরভাবে স্বয়ংক্রিয় ট্রেডিংয়ের জন্য এই প্ল্যাটফর্মগুলির দিকে ধীরে ধীরে সরে আসতে শুরু করেছে। dYdX অন্যতম জনপ্রিয় বিকেন্দ্রীভূত ট্রেডিং প্ল্যাটফর্ম, এটি শক্তিশালী ট্রেডিং বৈশিষ্ট্য সরবরাহ করে, ভবিষ্যতের চিরস্থায়ী চুক্তির ট্রেডিং সমর্থন করে এবং এর সর্বশেষ সংস্করণ v4 কর্মক্ষমতা এবং ব্যবহারকারীর অভিজ্ঞতাকে অনুকূল করে তোলে, যা অনেক পরিমাণগত ব্যবসায়ীর পছন্দের হয়ে উঠেছে।

এই নিবন্ধটি dYdX v4 এ কীভাবে পরিমাণগত ট্রেডিং অনুশীলন করা যায় তা দেখায়, যার মধ্যে রয়েছে কিভাবে এর API ব্যবহার করে ট্রেডিং করা যায়, বাজার তথ্য পাওয়া যায় এবং অ্যাকাউন্ট পরিচালনা করা যায়।

  • পরীক্ষার পরিবেশ পরিবর্তন
  • বাজার তথ্য অনুসন্ধান
  • অর্ডার তথ্য, স্টক তথ্য অনুসন্ধান
  • লেনদেন
  • সাব অ্যাকাউন্ট পরিচালনা
  • নোড পদ্ধতির অনুরোধ

dYdX v4 DEX

  • dYdX টেস্টিং ওয়েব অ্যাপ পেজ

    img

  • এবংdYdX v3একইভাবে, লেনদেন পুরষ্কার, পুরস্কার সৃষ্টি করে।dYdXটোকেন ।

    img

ওয়ালেট সংযোগ, লগইন, কনফিগারেশন

পূর্ববর্তী ডিওয়াইডিএক্স ভি 3 প্রোটোকল ডিইএক্স এক্সচেঞ্জটি বন্ধ হয়ে গেছে এবং বর্তমানে ডিওয়াইডিএক্স ভি 4 অ্যাপের ঠিকানাঃ

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

অ্যাপ্লিকেশনটি খুলার পরে, উপরের ডানদিকে একটি কানেক্টেড ওয়ালেট বোতাম রয়েছে, যা কানেক্টেড ওয়ালেটের জন্য স্ক্যান কোড।

আপনি যদি প্রথমে টেস্ট নেট পরিবেশের সাথে পরিচিত হতে চান তবে আপনি টেস্ট নেট ব্যবহার করতে পারেনঃ

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

একইভাবে উপরের ডানদিকে ক্লিকে কানেক্ট ওয়ালেট বোতাম, স্ক্যান কোড কানেক্ট ওয়ালেট, স্বাক্ষর যাচাইকরণ; ওয়ালেট সংযোগ সফল হলে স্বয়ংক্রিয়ভাবে একটি dydx v4 ঠিকানা উৎপন্ন হবে, অ্যাপ্লিকেশন পৃষ্ঠার উপরের ডানদিকে এই ঠিকানা প্রদর্শিত হবে, ক্লিক করার পরে একটি মেনু পপ আপ হবে। এটিতে রিফিল, টিকন, স্থানান্তর ইত্যাদি অপারেশন রয়েছে। dYdX মূল নেটওয়ার্ক (উত্পাদন পরিবেশ) পরীক্ষার নেটওয়ার্কের সাথে পার্থক্যগুলির মধ্যে একটি হ'লঃ পরীক্ষার নেটওয়ার্কে ক্লিক রিফিল, স্বয়ংক্রিয়ভাবে নলের সাহায্যে 300 ইউএসডিসি সম্পদ প্রবেশ করে।

  • 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 ব্লকচেইন অর্ডার বার্তা, প্রত্যাহার বার্তা, স্থানান্তর বার্তা ইত্যাদি।

সূচক

সূচক পরিষেবা REST প্রোটোকল এবং ওয়েবসকেট প্রোটোকল সরবরাহ করে।

  • REST প্রোটোকল REST প্রোটোকল ইন্টারফেসটি মার্কেট তথ্য, অ্যাকাউন্ট তথ্য, হোল্ডিং তথ্য, অর্ডার তথ্য ইত্যাদির অনুসন্ধানগুলি সমর্থন করে, যা এফএমজেড প্ল্যাটফর্মে একটি প্ল্যাটফর্ম ইউনিফাইড এপিআই ইন্টারফেস হিসাবে প্যাকেজ করা হয়েছে।

  • ওয়েবসকেট প্রোটোকল এফএমজেড প্ল্যাটফর্মে ডায়াল ফাংশন ব্যবহার করে ওয়েবসকেট সংযোগ, সাবস্ক্রিপশন বাজার ইত্যাদি তথ্য তৈরি করা যায়।

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 # 短期订单ডিডিএক্স ভি৪ প্রোটোকলের পরামর্শ অনুযায়ীঃ

      // অর্ডারের দাম নির্ধারণ করুন - বিক্রয়ের জন্য 5% বা তার কম, ক্রয়ের জন্য অর্ডারের দাম + 5%

      যেহেতু এটি একটি প্রকৃত বাজার তালিকা নয়, তাই পূর্বাভাস মেশিনের দাম এবং 5% ছাড়ের স্লাইডিং মূল্যকে বাজার তালিকা হিসাবে ব্যবহার করা হয়। স্বল্পমেয়াদী অর্ডারের বৈধতা সেটিংটি দীর্ঘমেয়াদী অর্ডারের চেয়ে আলাদা, স্বল্পমেয়াদী অর্ডারগুলি ব্লকের উচ্চ বৈধতার জন্য ব্যবহৃত হয়, যা ডিডএক্স ভি 4 এর পরামর্শ অনুসারে বর্তমান ব্লক + 10 ব্লকের উচ্চতার পরে কার্যকর হয়।

    • অর্ডার আইডিঃ যেহেতু অর্ডার অপারেশন সরাসরি শৃঙ্খলে পরিচালিত হয়, তাই বার্তার সম্প্রচারের পরে কোনও সূচক উত্পন্ন অর্ডার আইডি থাকবে না এবং প্ল্যাটফর্মের অর্ডার ফাংশনের রিটার্নের মান হিসাবে সূচক অর্ডার ব্যবহার করা যাবে না। অর্ডার আইডি অনন্যতা এবং অর্ডার অনুসন্ধান সঠিকতা নিশ্চিত করার জন্য, ফিরে আসা অর্ডার আইডি নিম্নলিখিত তথ্য দিয়ে গঠিতঃ

      • লেনদেন
      • dydx অ্যাকাউন্টের বর্তমান ঠিকানা
      • সাব অ্যাকাউন্ট নম্বর
      • ক্লায়েন্ট আইডি (এলোমেলোভাবে উত্পন্ন)
      • 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 এর সমান উচ্চতর সাব অ্যাকাউন্ট আইডি যা স্টকের জাতের জন্য লেনদেনের জন্য ব্যবহৃত হয় এবং ন্যূনতম 20 ইউএসডিসি সম্পদ প্রয়োজন। উদাহরণস্বরূপ, এটি সাব অ্যাকাউন্ট নম্বর 0 -> 128 থেকে ব্যবহার করা যেতে পারে, অথবা এটি সাব অ্যাকাউন্ট নম্বর 128 -> 0 থেকে ব্যবহার করা যেতে পারে।

FMZ প্ল্যাটফর্ম dYdX v4 অনুশীলন

উপরের বিষয়বস্তুটি কিছু প্যাকেজিংয়ের বিবরণকে সংক্ষিপ্তভাবে বর্ণনা করে, এরপরে আমরা একসাথে ব্যবহারের জন্য অনুশীলন করব, এখানে dYdX v4 এর পরীক্ষার নেট ব্যবহার করে একটি প্রদর্শন করা হয়েছে, যা মূল নেটওয়ার্কের সাথে মূলত সামঞ্জস্যপূর্ণ, এবং একটি স্বয়ংক্রিয় কল রয়েছে যা পরীক্ষার সম্পদ গ্রহণ করতে পারে, হোস্টের স্থাপনার অপারেশনগুলি আর বর্ণনা করে না, এফএমজেডে একটি বাস্তব টেস্ট তৈরি করুন।

১, কনফিগারেশন

dYdX v4 অ্যাপ্লিকেশনটি সফলভাবে সংযোগ করার পরে (আমি এখানে imToken ওয়ালেটটি ব্যবহার করছি), পরীক্ষার সম্পদটি গ্রহণ করুন এবং বর্তমান dYdX v4 অ্যাকাউন্টটি (ওয়ালেট থেকে প্রাপ্ত) উদ্ধৃতিটি রপ্তানি করুন।

img

এফএমজেড প্ল্যাটফর্মে সহায়ক শব্দটি কনফিগার করুন, যেখানে আমরা স্থানীয় ফাইল পদ্ধতিতে কনফিগার করি ((এছাড়াও সরাসরি পূরণ করা যায়, প্ল্যাটফর্মে কনফিগার করা যায়, সহায়ক শব্দটি এনক্রিপশন-পরবর্তী কনফিগারেশনে রয়েছে, স্পষ্ট নয়) ।)

  • 助记词文件:mnemonic.txt

    img

    এটি হোস্ট ডিরেক্টরির অধীনে ভার্চুয়াল ডিস্ক আইডি ফোল্ডার ডিরেক্টরিতে স্থাপন করা যেতে পারে, তবে অবশ্যই এটি অন্য ডিরেক্টরিতেও স্থাপন করা যেতে পারে ((কনফিগারেশনের সময় নির্দিষ্ট পথ লিখতে হবে) ।)

  • এফএমজেডে এক্সচেঞ্জ কনফিগার করুন

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

    আপনি কি জানেন যে, আপনি কিশোরী হতে পারেন?file:///mnemonic.txtএই প্রসঙ্গে, আমি আপনাদের একটি পরামর্শ দিতে চাই।托管者所在目录/logs/storage/594291

    img

২, 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
}

৩। বাজার তথ্য অনুসন্ধান

পরীক্ষার নেটওয়ার্কে স্যুইচ না করে, মূল নেটওয়ার্কে পরীক্ষা করুন

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() {
    // 切换测试链的索引器地址
    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

৫। অর্ডার তথ্য

টেস্ট নেট দুটি অর্ডার প্রাক-উত্তোলন করে, পরীক্ষাটি বর্তমান অর্ডারটি গ্রহণ করে এবং অর্ডারটি বাতিল করে।

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

৬। তথ্য সংগ্রহের জন্য অনুসন্ধান

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

৭। সাব অ্যাকাউন্ট পরিচালনা

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

SubAccountNumber-এ স্যুইচ করুন 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 ইউএসডিসিতে রূপান্তরিত হয়েছে।

৮, TxHash পান, REST নোড ইন্টারফেস কল করুন

অর্ডার অনুযায়ী, TxHash পান, IO REST নোড কল করার পদ্ধতি পরীক্ষা করুন

কিভাবে অর্ডারের 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 সমর্থন করে

ধন্যবাদ সমর্থন করার জন্য, ধন্যবাদ পড়ার জন্য।


আরো