ক্রিপ্টোকারেন্সি ট্রেডিংয়ের ক্ষেত্রে বিকেন্দ্রীভূত এক্সচেঞ্জের (ডিইএক্স) দ্রুত উত্থানের সাথে সাথে পরিমাণগত ব্যবসায়ীরা কার্যকর স্বয়ংক্রিয় ট্রেডিংয়ের জন্য ধীরে ধীরে এই প্ল্যাটফর্মগুলির দিকে ফিরেছে। সর্বাধিক জনপ্রিয় বিকেন্দ্রীভূত ট্রেডিং প্ল্যাটফর্মগুলির মধ্যে একটি হিসাবে, ডিওয়াইডএক্স শক্তিশালী ট্রেডিং ফাংশন সরবরাহ করে এবং ফিউচার চিরস্থায়ী চুক্তি বাণিজ্যকে সমর্থন করে। এর সর্বশেষ সংস্করণ ভি 4 কর্মক্ষমতা এবং ব্যবহারকারীর অভিজ্ঞতা অনুকূল করে তোলে, এটি অনেক পরিমাণগত ব্যবসায়ীদের জন্য প্রথম পছন্দ করে তোলে।
এই নিবন্ধটি dYdX v4 এ পরিমাণগত ট্রেডিং অনুশীলন করার পদ্ধতি সম্পর্কে পরিচয় করিয়ে দেবে, যার মধ্যে ট্রেডিং, বাজার তথ্য প্রাপ্তি এবং অ্যাকাউন্ট পরিচালনার জন্য এর API ব্যবহার করার পদ্ধতি অন্তর্ভুক্ত রয়েছে।
dYdX v3
ইথেরিয়ামের সাথে, ট্রেডিং পুরস্কার উৎপন্ন করে, যা পুরস্কারdYdX
tokens.পূর্ববর্তী dYdX v3 প্রোটোকল DEX এক্সচেঞ্জ অফলাইনে ছিল। বর্তমান dYdX v4 অ্যাপ্লিকেশন ঠিকানা হলঃ
অ্যাপ্লিকেশন পৃষ্ঠাটি খোলার পরে, উপরের ডান কোণে ওয়ালেটে সংযোগ করার জন্য একটি বোতাম রয়েছে। ওয়ালেটে সংযোগ করার জন্য QR কোডটি স্ক্যান করুন।
আপনি যদি প্রথমে পরীক্ষার নেটওয়ার্ক পরিবেশের সাথে নিজেকে পরিচিত করতে চান এবং পরীক্ষা করতে চান তবে আপনি পরীক্ষার নেটওয়ার্কটি ব্যবহার করতে পারেনঃ
এছাড়াও, উপরের ডান কোণে থাকা কানেক্ট ওয়ালেট বোতামটি ক্লিক করুন, ওয়ালেটটি সংযুক্ত করতে কোডটি স্ক্যান করুন এবং স্বাক্ষরটি যাচাই করুন। ওয়ালেটটি সফলভাবে সংযুক্ত হওয়ার পরে, একটি dydx v4 ঠিকানা স্বয়ংক্রিয়ভাবে উত্পন্ন হবে। এই ঠিকানাটি অ্যাপ্লিকেশন পৃষ্ঠার উপরের ডান কোণে প্রদর্শিত হবে। এটিতে ক্লিক করুন এবং একটি মেনু পপ আপ হবে। রিচার্জ, প্রত্যাহার এবং স্থানান্তর যেমন অপারেশন রয়েছে। ডিওয়াইডএক্স মেইননেট (উত্পাদন পরিবেশ) এবং টেস্টনেট এর মধ্যে পার্থক্যগুলির মধ্যে একটি হ'ল আপনি যখন টেস্টনেটটিতে রিচার্জ ক্লিক করেন, তখন পরীক্ষার জন্য কলটি ব্যবহার করে 300 ইউএসডিসি সম্পদগুলি স্বয়ংক্রিয়ভাবে চার্জ করা হবে। আপনি যদি ডিওয়াইডএক্সে আসল লেনদেন করতে চান তবে আপনাকে ইউএসডিসি সম্পদ চার্জ করতে হবে। রিচার্জটি পুনরায় চার্জ করার জন্য একাধিক সম্পদ এবং চেইনের সাথে খুব সুবিধাজনক এবং সামঞ্জস্যপূর্ণ।
dYdX v4 অ্যাকাউন্টের ঠিকানা
dYdX v4 অ্যাকাউন্টের ঠিকানাটি ওয়ালেট ঠিকানা থেকে উদ্ভূত। dYdX v4 অ্যাকাউন্টের ঠিকানাটি এরকম দেখাচ্ছেঃdydx1xxxxxxxxxxxxxxxxxxxxq2ge5jr4nzfeljxxxx
, যা dydx1 দিয়ে শুরু হওয়া একটি ঠিকানা। এই ঠিকানাটি ব্লকচেইন এক্সপ্লোরারগুলিতে অনুসন্ধান করা যেতে পারে।
স্মৃতিশক্তি
আপনি বর্তমান ডিওয়াইডএক্স ঠিকানা অ্যাকাউন্টের স্মারকগুলি রপ্তানি করতে উপরের ডানদিকে কোণার মেনুতে
এমএনএমনিক্স সরাসরি এফএমজেড প্ল্যাটফর্মে কনফিগার করা যেতে পারে বা ডকারে স্থানীয়ভাবে সংরক্ষণ করা যেতে পারে। যখন dydx v4 এক্সচেঞ্জ অবজেক্ট ব্যবহার করা হয়, তখন এমএনএমনিক্স রেকর্ডিং ফাইলের সামগ্রী পড়া হবে, যা এই নিবন্ধের ব্যবহারিক অংশে প্রদর্শিত হবে।
টেস্ট নেট পরিবেশটি কিছু দিক থেকে মেইন নেট পরিবেশ থেকে আলাদা। এখানে কয়েকটি সহজ পার্থক্য রয়েছে।
subAccountNumber >= 128
, যদি আইডি-র উপ-অ্যাকাউন্টে কোন পজিশন না থাকে, তাহলে স্বয়ংক্রিয়ভাবে সেই উপ-অ্যাকাউন্টে সম্পত্তি পরিষ্কার করা হবে যার উপ-অ্যাকাউন্ট নম্বর ০।
পরীক্ষার সময় দেখা গেছে যে পরীক্ষার নেটওয়ার্কে এই প্রক্রিয়াটি নেই (বা ট্রিগারিং শর্ত আলাদা এবং এটি পরীক্ষার নেটওয়ার্কে ট্রিগার করা হয়নি) ।DYDX
, টেস্ট নেটDv4TNT
মেইননেট:
সূচক ঠিকানাঃhttps://indexer.dydx.trade
চেইন আইডিঃdydx-mainnet-1
REST নোডঃhttps://dydx-dao-api.polkachu.com:443
টেস্ট নেট:
সূচক ঠিকানাঃhttps://indexer.v4testnet.dydx.exchange
চেইন আইডিঃdydx-testnet-4
REST নোডঃhttps://dydx-testnet-api.polkachu.com
ডিওয়াইডিএক্স ভি 4 প্রোটোকলটি মহাবিশ্বের বাস্তুতন্ত্রের উপর ভিত্তি করে তৈরি করা হয়েছে। ডিওয়াইডিএক্স ভি 4 ডিএক্স সিস্টেমের লেনদেন সম্পর্কিত সামগ্রীতে মূলত দুটি অংশ রয়েছেঃ
সূচক পরিষেবা REST এবং ওয়েবসকেট প্রোটোকল সরবরাহ করে।
REST প্রোটোকল REST প্রোটোকল ইন্টারফেসটি বাজার তথ্য অনুসন্ধান, অ্যাকাউন্ট তথ্য, অবস্থান তথ্য, অর্ডার তথ্য এবং অন্যান্য অনুসন্ধানগুলিকে সমর্থন করে এবং এটি FMZ প্ল্যাটফর্মে একটি ইউনিফাইড API ইন্টারফেস হিসাবে ক্যাপসুল করা হয়েছে।
ওয়েবসকেট প্রোটোকল এফএমজেড প্ল্যাটফর্মে, আপনি ডায়াল ফাংশনটি ব্যবহার করে একটি ওয়েবসকেট সংযোগ তৈরি করতে এবং বাজার তথ্য সাবস্ক্রাইব করতে পারেন।
এটি লক্ষ করা উচিত যে dydx v4 এর সূচককে কেন্দ্রীয় এক্সচেঞ্জের মতো একই সমস্যা রয়েছে, অর্থাৎ ডেটা আপডেটগুলি এত সময়মত নয়। উদাহরণস্বরূপ, কখনও কখনও আপনি অর্ডার দেওয়ার পরে অবিলম্বে এটি অনুসন্ধান করলে আপনি অর্ডারটি খুঁজে পেতে সক্ষম হতে পারেন না। অর্ডার দেওয়ার পরে কয়েক সেকেন্ড অপেক্ষা করার পরামর্শ দেওয়া হয় (Sleep(n)
) কিছু ক্রিয়াকলাপ জিজ্ঞাসা করার আগে।
ওয়েবসকেট এপিআই সংযোগ তৈরি করতে এবং অর্ডার বুক ডেটা সাবস্ক্রাইব করতে ডায়াল ফাংশন ব্যবহারের একটি উদাহরণ এখানে দেওয়া হল:
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) + "`")
}
}
লেনদেনের ক্ষেত্রে সর্বাধিক ব্যবহৃত বার্তাগুলি হ'ল অর্ডার বার্তা, অর্ডার বাতিলকরণ বার্তা এবং স্থানান্তর বার্তা।
{
"@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
ডাইডেক্স ভি৪ প্রোটোকলের সীমাবদ্ধতা অনুযায়ী, সবচেয়ে দীর্ঘ অর্ডার বৈধতার সময়কাল ব্যবহার করা হয়, যা ৯০ দিন (ডাইডেক্স ভি৪-এ সমস্ত ধরণের অর্ডারের বৈধতার সময়কাল রয়েছে) ।
মার্কেট অর্ডার:
FMZ প্ল্যাটফর্মে অর্ডার ফাংশনে, মার্কেট অর্ডারের জন্য ব্যবহৃত অর্ডারফ্লেগ মান হলঃORDER_FLAGS_SHORT_TERM = 0 # Short-term order
, dydx v4 প্রোটোকলের সুপারিশ অনুযায়ীঃ
// অর্ডারের দাম নির্ধারণ করুন - বিক্রয়ের জন্য 5% বা তার কম, ক্রয়ের জন্য অর্ডারের দাম + 5%
যেহেতু এটি একটি সত্যিকারের বাজার অর্ডার নয়, তাই বাজারের অর্ডার হিসাবে ওরাকল মূল্য, প্লাস বা বিয়োগ 5% স্লিপ ব্যবহার করা হয়। স্বল্পমেয়াদী অর্ডারের বৈধতার সময়কাল দীর্ঘমেয়াদী অর্ডারের চেয়েও আলাদা। স্বল্পমেয়াদী অর্ডারগুলি ব্লক উচ্চতার বৈধতার সময়কাল ব্যবহার করে, যা বর্তমান ব্লক + 10 ব্লক উচ্চতার জন্য নির্ধারিত হয় dydx v4 এর সুপারিশ অনুযায়ী।
ট্রেডিং জুটি dydx বর্তমান অ্যাকাউন্টের ঠিকানা উপ-অ্যাকাউন্ট নম্বর (sub-accountNumber) ক্লায়েন্ট আইডি (এলোমেলোভাবে তৈরি) 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 থেকে। স্থানান্তরগুলির জন্য গ্যাস ফি প্রয়োজন। গ্যাস ফি USDC বা dydx টোকেন হতে পারে।
উপরের বিষয়বস্তু কিছু প্যাকেজিং বিবরণ সংক্ষেপে ব্যাখ্যা করে। পরবর্তী, আসুন নির্দিষ্ট ব্যবহার অনুশীলন করি। এখানে আমরা বিক্ষোভের জন্য dYdX v4 পরীক্ষা নেটওয়ার্ক ব্যবহার করি। পরীক্ষা নেটওয়ার্ক মূলত প্রধান নেটওয়ার্কের মতোই, এবং পরীক্ষার সম্পদ গ্রহণের জন্য একটি স্বয়ংক্রিয় কল রয়েছে। ডকার স্থাপনার অপারেশন পুনরাবৃত্তি হবে না। এফএমজেডে একটি লাইভ ট্রেডিং পরীক্ষা তৈরি করুন।
একটি ক্রিপ্টোকারেন্সি ওয়ালেট ব্যবহার করে dYdX v4 অ্যাপে সফলভাবে সংযোগ করার পরে (আমি এখানে imToken ওয়ালেট ব্যবহার করি), আপনার পরীক্ষার সম্পদ দাবি করুন এবং তারপরে আপনার বর্তমান dYdX v4 অ্যাকাউন্টের জন্য (আপনার ওয়ালেট থেকে উদ্ভূত) মেনেমিক এক্সপোর্ট করুন।
এফএমজেড প্ল্যাটফর্মে ম্নেমোনিক কনফিগার করুন। এখানে আমরা এটি কনফিগার করতে স্থানীয় ফাইল পদ্ধতি ব্যবহার করি (আপনি এটি সরাসরি পূরণ করতে পারেন এবং এটি প্ল্যাটফর্মে কনফিগার করতে পারেন। ম্নেমোনিকটি এনক্রিপশনের পরে কনফিগার করা হয়, সরল পাঠ্যে নয়) ।
এটি ডকার ডিরেক্টরির অধীনে লাইভ ট্রেডিং আইডি ফোল্ডার ডিরেক্টরিতে রাখুন। অবশ্যই, এটি অন্যান্য ডিরেক্টরিতেও স্থাপন করা যেতে পারে (নির্দিষ্ট পথটি কনফিগারেশনের সময় লিখতে হবে) ।
স্মারক সম্পাদনা বাক্সটি পূরণ করুনঃfile:///mnemonic.txt
, সংশ্লিষ্ট প্রকৃত পথ হলঃdocker directory/logs/storage/594291
.
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) + "`")
}
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)
}
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")
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) + "`")
}
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) + "`")
}
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)
}
লগ তথ্যঃ
উপ-অ্যাকাউন্টে স্যুইচ করুন যার উপ-অ্যাকাউন্ট নম্বর 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
}
আপনি দেখতে পাচ্ছেন যে, সাব-অ্যাকাউন্ট নম্বর ১২৮-এর সাব-অ্যাকাউন্ট থেকে ২০ ডলার ট্রান্সফার করা হয়েছে।
আদেশ অনুযায়ী, TxHash পান এবং IO REST নোড কলিং পদ্ধতি পরীক্ষা
কিভাবে একটি অর্ডারের TxHash পাবেন? এক্সচেঞ্জ অবজেক্ট dydx TxHash কেশ করবে, যা অর্ডার আইডি ব্যবহার করে অনুসন্ধান করা যেতে পারে। তবে, কৌশলটি বন্ধ হওয়ার পরে, ক্যাশেড অর্ডার 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)
}
}
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 সমর্থন করার জন্য সর্বশেষ ডকার ডাউনলোড করতে হবে
আপনার সমর্থনের জন্য ধন্যবাদ এবং পড়ার জন্য ধন্যবাদ।