[TOC]

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

dYdX v3اسی طرح، لین دین انعامات، انعامات پیدا کرتا ہے۔dYdXٹوکنز۔
پچھلا dYdX v3 پروٹوکول DEX ایکسچینج آف لائن ہے موجودہ dYdX v4 ایپ کا پتہ ہے:
ایپ کا صفحہ کھولنے کے بعد، بٹوے سے جڑنے کے لیے اوپری دائیں کونے میں ایک بٹن ہوتا ہے۔
اگر آپ ٹیسٹ نیٹ ورک کے ماحول سے پہلے خود کو جانچنا اور واقف کرنا چاہتے ہیں، تو آپ ٹیسٹ نیٹ ورک استعمال کر سکتے ہیں:
اس کے علاوہ، اوپری دائیں کونے میں کنیکٹ والیٹ بٹن پر کلک کریں، والیٹ سے جڑنے کے لیے 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 DEX سسٹم کے لین دین سے متعلق مواد بنیادی طور پر دو حصوں پر مشتمل ہے:
انڈیکسر سروس 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) + "`")
}
}
لین دین میں سب سے زیادہ استعمال ہونے والے پیغامات آرڈر کے پیغامات، آرڈر منسوخی کے پیغامات، اور پیغامات کی منتقلی ہیں۔
{
"@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 درج ذیل معلومات پر مشتمل ہوتا ہے (کوما سے الگ کیا گیا):
آرڈر منسوخی کے پیغام کا خلاصہ
{
"@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 ٹوکن استعمال کر سکتی ہے۔
مندرجہ بالا مواد میں کچھ پیکیجنگ کی تفصیلات بتائی گئی ہیں، آئیے یہاں ڈیمسٹریشن کے لیے dYdX v4 ٹیسٹ نیٹ ورک کا استعمال کرتے ہیں، اور ٹیسٹ کے اثاثوں کو حاصل کرنے کے لیے ایک خودکار ٹونٹی موجود ہے۔ نگہبان تعینات کرتا ہے میں آپریشن کے بارے میں تفصیلات میں نہیں جاؤں گا، اور FMZ پر ایک حقیقی ٹیسٹ تیار کروں گا۔
کریپٹو کرنسی والیٹ (میں یہاں imToken والیٹ استعمال کرتا ہوں) کا استعمال کرتے ہوئے dYdX v4 ایپ سے کامیابی کے ساتھ جڑنے کے بعد، اپنے ٹیسٹ اثاثوں کا دعوی کریں اور پھر اپنے موجودہ dYdX v4 اکاؤنٹ (آپ کے بٹوے سے اخذ کردہ) کے لیے یادداشت برآمد کریں۔

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

اسے اصل ڈسک آئی ڈی فولڈر ڈائرکٹری میں رکھو، بلاشبہ، اسے دوسری ڈائریکٹریوں میں بھی رکھا جا سکتا ہے (کنفیگریشن کے دوران مخصوص راستہ لکھنا ضروری ہے)۔
یادداشت کے ترمیمی خانے کو پُر کریں:file:///mnemonic.txt، متعلقہ اصل راستہ یہ ہے:托管者所在目录/logs/storage/594291。

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

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

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

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

ذیلی اکاؤنٹ پر جائیں جس کا ذیلی اکاؤنٹ نمبر 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 کو منتقل کیا ہے۔
آرڈر کے مطابق، 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)
}
}

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 کو سپورٹ کرنے کے لیے تازہ ترین کسٹوڈین کو ڈاؤن لوڈ کرنے کی ضرورت ہے۔
آپ کے تعاون کا شکریہ اور پڑھنے کے لیے آپ کا شکریہ۔