[TOC]
ڈیسینٹرلائزڈ ایکسچینجز (DEX) کے کرپٹو کرنسی ٹریڈنگ کے میدان میں تیزی سے ابھرنے کے ساتھ، کوانٹیٹیو ٹریڈرز ان پلیٹ فارمز پر آٹومیٹڈ ٹریڈنگ کے لیے منتقل ہو رہے ہیں۔ dYdX جو کہ سب سے مقبول ڈیسینٹرلائزڈ ٹریڈنگ پلیٹ فارمز میں سے ایک ہے، فیوچرز پرپیچوئل کنٹریکٹس کی سپورٹ کے ساتھ مضبوط ٹریڈنگ فنکشنلٹیز پیش کرتا ہے۔ اس کا تازہ ترین ورژن v4 کارکردگی اور یوزر ایکسپیرئنس کو مزید بہتر بنا چکا ہے، جس کی وجہ سے یہ بہت سے کوانٹیٹیو ٹریڈرز کی اولین پسند بن گیا ہے۔
یہ مضمون dYdX v4 پر کوانٹیٹیو ٹریڈنگ کے عملی اطلاق کو بیان کرے گا، بشمول اس کے API کا استعمال کرتے ہوئے ٹریڈنگ، مارکیٹ ڈیٹا حاصل کرنے، اور اکاؤنٹ مینجمنٹ وغیرہ۔
dYdX v3
کی طرح، ٹریڈنگ پر dYdX
ٹوکنز کے طور پر انعامات ملتے ہیں۔سابقہ dYdX v3 پروٹوکول DEX ایکسچینج اب دستیاب نہیں ہے، موجودہ dYdX v4 ایپ ایڈریس:
ایپ پیج کھولنے کے بعد، اوپر دائیں جانب والیٹ کنیکٹ کا بٹن ہوتا ہے، QR کوڈ سکین کر کے والیٹ کنیکٹ کریں۔
اگر آپ پہلے ٹیسٹ نیٹ ماحول میں تجربہ کرنا چاہتے ہیں تو ٹیسٹ نیٹ استعمال کریں:
اسی طرح اوپر دائیں جانب والیٹ کنیکٹ بٹن پر کلک کریں، والیٹ کو سگنیچر کی تصدیق کے ساتھ کنیکٹ کریں۔ والیٹ کے کنیکٹ ہونے پر خود بخود ایک dydx v4 ایڈریس جنریٹ ہوگا، ایپ پیج کے اوپر دائیں جانب یہ ایڈریس دکھائی دے گا۔ کلک کرنے پر ایک مینو کھلے گا جس میں ڈپازٹ، وِتھڈراوال، ٹرانسفر وغیرہ کے آپشنز ہوں گے۔ dYdX مین نیٹ (پروڈکشن ماحول) اور ٹیسٹ نیٹ میں ایک فرق یہ ہے کہ ٹیسٹ نیٹ پر ڈپازٹ پر کلک کرنے سے خودکار طریقے سے 300 USDC ٹیسٹنگ کے لیے ڈپازٹ ہو جاتے ہیں۔ اگر حقیقی ٹریڈنگ کرنی ہو تو USDC اثاثے ڈپازٹ کرنے ہوں گے، یہ عمل بھی کئی اثاثوں اور چینز کے ساتھ مطابقت رکھتا ہے۔
dYdX v4 اکاؤنٹ ایڈریس
dYdX v4 اکاؤنٹ ایڈریس والیٹ ایڈریس سے مشتق ہوتا ہے، مثال کے طور پر: dydx1xxxxxxxxxxxxxxxxxxxxq2ge5jr4nzfeljxxxx
، جو dydx1 سے شروع ہوتا ہے۔ یہ ایڈریس بلاکچین ایکسپلوررز میں سرچ کیا جا سکتا ہے۔
یاد داشت کے الفاظ (میمونک) اوپر دائیں مینو میں “ایکسپورٹ پاس فریز” بٹن پر کلک کر کے موجودہ dYdX ایڈریس کا میمونک حاصل کیا جا سکتا ہے۔ FMZ پلیٹ فارم پر ایکسچینج شامل کرتے وقت اس میمونک کو کنفیگر کرنا ضروری ہے۔
میمونک کو براہ راست FMZ پلیٹ فارم پر سیٹ کیا جا سکتا ہے یا ہوسٹڈ کمپیوٹر پر محفوظ کیا جا سکتا ہے۔ dydx v4 ایکسچینج آبجیکٹ استعمال کرتے وقت یہ فائل پڑھی جاتی ہے، جیسا کہ عملی حصے میں دکھایا جائے گا۔
ٹیسٹ نیٹ ماحول کچھ پہلوؤں میں مین نیٹ سے مختلف ہے، ذیل میں کچھ اہم نکات درج ہیں۔
سب اکاؤنٹس میں اثاثے کی منتقلی۔
مین نیٹ پر سب اکاؤنٹ کلیئرنگ میکانزم موجود ہے، جب subAccountNumber >= 128
ہو اور اس ID والے سب اکاؤنٹ میں کوئی پوزیشن نہ ہو تو اثاثے خودکار طور پر subAccountNumber 0 والے اکاؤنٹ میں منتقل ہو جاتے ہیں۔
ٹیسٹنگ کے دوران دیکھا گیا کہ ٹیسٹ نیٹ پر یہ میکانزم موجود نہیں (یا ٹرگرنگ کنڈیشنز مختلف ہیں)۔
کچھ ٹوکن نام۔
نیٹیو ٹوکن dydx کے نام مختلف ہیں: مین نیٹ پر DYDX
، ٹیسٹ نیٹ پر Dv4TNT
ایڈریس کنفیگریشنز، جیسے چین ID، نوڈ ایڈریس، انڈیکسر ایڈریس وغیرہ۔ نوڈز اور کنفیگریشنز کی مثالیں:
مین نیٹ:
انڈیکسر ایڈریس: https://indexer.dydx.trade
چین ID: dydx-mainnet-1
REST نوڈ: https://dydx-dao-api.polkachu.com:443
ٹیسٹ نیٹ:
انڈیکسر ایڈریس: https://indexer.v4testnet.dydx.exchange
چین ID: dydx-testnet-4
REST نوڈ: https://dydx-testnet-api.polkachu.com
dYdX v4 پروٹوکول cosmos ایکو سسٹم پر ڈویلپ کیا گیا ہے۔ dYdX v4 DEX سسٹم کے ٹریڈنگ سے متعلقہ حصے دو اہم اجزاء پر مشتمل ہیں:
انڈیکسر سروس REST اور WebSocket پروٹوکولز سپورٹ کرتی ہے۔
REST پروٹوکول REST انٹرفیس مارکیٹ ڈیٹا، اکاؤنٹ انفارمیشن، پوزیشنز، آرڈرز کیوری کرنے کے لیے استعمال ہوتا ہے۔ FMZ پلیٹ فارم پر یہ یونیفائیڈ API انٹرفیس کے طور پر ایمپلیمنٹ کیا گیا ہے۔
WebSocket پروٹوکول FMZ پلیٹ فارم پر Dial فنکشن کا استعمال کرتے ہوئے WebSocket کنیکشن بنائی جا سکتی ہے، مارکیٹ ڈیٹا وغیرہ سبسکرائب کیا جا سکتا ہے۔
نوٹ کریں کہ dydx v4 کا انڈیکسر بھی سینٹرلائزڈ ایکسچینجز کی طرح ڈیٹا اپڈیٹس میں تھوڑی تاخیر رکھتا ہے۔ مثال کے طور پر کبھی کبھار آرڈر پلیس کرنے کے فوراً بعد کیوری کرنے پر آرڈر نظر نہیں آتا۔ تجویز ہے کہ ایسے آپریشنز کے بعد Sleep(n)
کا استعمال کر کے چند سیکنڈز انتظار کریں۔
ذیل میں Dial فنکشن کا استعمال کرتے ہوئے WebSocket کنیکشن بنانے اور آرڈر بک ڈیٹا سبسکرائب کرنے کی مثال دی گئی ہے:
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) {
// بڈز اپڈیٹ
if (update.bids) {
update.bids.forEach(([price, size]) => {
const priceFloat = parseFloat(price)
const sizeFloat = parseFloat(size)
if (sizeFloat === 0) {
// قیمت پر موجود بڈز کو ڈیلیٹ کریں
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))
}
})
}
// اَسکز کو اپ ڈیٹ کریں
if (update.asks) {
update.asks.forEach(([price, size]) => {
const priceFloat = parseFloat(price)
const sizeFloat = parseFloat(size)
if (sizeFloat === 0) {
// قیمت والی اَسک کو حذف کریں
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() {
// اصل سرور: wss://indexer.dydx.trade/v4/ws
// ٹیسٹ سرور: wss://indexer.v4testnet.dydx.exchange/v4/ws
var symbol = "ETH-USD"
var manager = dYdXIndexerWSconnManager("wss://indexer.dydx.trade/v4/ws")
مینیجر.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
}
}
orderFlags
کی ویلیو:ORDER_FLAGS_LONG_TERM = 64 # طویل مدتی آرڈر
dydx v4 پروٹوکول کی پابندیوں کے مطابق، زیادہ سے زیادہ آرڈر ایکسپائری (90 دن) استعمال کی گئی ہے۔
- مارکیٹ آرڈر:
FMZ پلیٹ فارم پر انکیپسولیٹڈ آرڈر فنکشن میں، market order کے لیے orderFlags
کی ویلیو:
ORDER_FLAGS_SHORT_TERM = 0 # قلیل مدتی آرڈر
dydx v4 پروٹوکول کی سفارش کے مطابق:
// Recommend set to oracle price - 5% or lower for SELL, oracle price + 5% for BUY
اصلی مارکیٹ آرڈر نہ ہونے کی وجہ سے، اوریکل قیمت کو بنیاد بنا کر ±5% سلپج شامل کیا جاتا ہے۔ short-term order کی ایکسپائری بھی مختلف ہے، جو بلاک ہائٹ پر مبنی ہے (موجودہ بلاک + 10 بلاکس)۔
آرڈر کینسل میسیج سمیری
{
"@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 ایڈریسز کے تحت متعدد سب اکاؤنٹس بنائے جا سکتے ہیں۔ subAccountNumber=0
پہلا آٹو-جنریٹڈ سب اکاؤنٹ ہے۔ subAccountNumber≥128
والے IDs عموماً isolated positions کے لیے استعمال ہوتے ہیں، جن کے لیے کم از کم 20 USDC کی ضرورت ہوتی ہے۔
مثال: subAccountNumber 0 → 128 یا 128 → 0 ٹرانسفرز۔ ہر ٹرانسفر پر گیس فیس (USDC/dydx ٹوکن) لاگو ہوتی ہے۔
مندرجہ بالا مواد نے کچھ انکیپسولیشن تفصیلات کی وضاحت کی ہے۔ اب ہم عملی استعمال کا تجربہ کریں گے۔ یہاں dYdX v4 ٹیسٹ نیٹ ورک کو ڈیمو کے لیے استعمال کیا گیا ہے۔ ٹیسٹ نیٹ ورک مین نیٹ ورک کے ساتھ مطابقت رکھتا ہے اور خودکار faucet کے ذریعے ٹیسٹ اثاثے حاصل کیے جا سکتے ہیں۔ ہوسٹ کی ڈیپلائمنٹ آپریشنز کو دہرایا نہیں جائے گا، FMZ پر حقیقی ٹیسٹ بنائیں۔
کریپٹو کرنسی والیٹ کو کامیابی سے dYdX v4 ایپ سے منسلک کرنے کے بعد (میں نے imToken والیٹ استعمال کیا)، ٹیسٹ اثاثے وصول کریں، پھر موجودہ dYdX v4 اکاؤنٹ (والیٹ سے نکالا گیا) کا میمونک فارم برآمد کریں۔
میمونک الفاظ کو FMZ پلیٹ فارم پر کنفیگر کریں۔ ہم یہاں لوکل فائل طریقہ استعمال کریں گے (براہ راست بھرنے یا پلیٹ فارم پر کنفیگر کرنے کی بھی اجازت ہے، میمونک الفاظ کو انکرپٹ کر کے کنفیگر کیا جاتا ہے، واضح متن نہیں)۔
ہوسٹ ڈائریکٹری کے اندر ریئل اکاؤنٹ ID فولڈر میں رکھیں، یا کسی دوسری ڈائریکٹری میں بھی رکھ سکتے ہیں (کنفیگریشن کے وقت مکمل راستہ لکھیں)۔
میمونک ایڈیٹ باکس میں درج کریں: 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])
}
### 4、آرڈر پلیسمنٹ
```js
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: "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: "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")
// سب اکاؤنٹ نمبر 0 -> 128 : 20 USDC ، گیس فیس adv4tnt یعنی dydx ٹوکن
var ret = exchange.IO("transferUSDCToSubaccount", 0, 128, "adv4tnt", 20)
Log("ret:", ret)
// سب اکاؤنٹ نمبر 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
}
سب اکاؤنٹ نمبر 128 میں 20 USDC کی منتقلی دیکھی جا سکتی ہے۔
آرڈر کے مطابق TxHash حاصل کریں، REST نوڈ کال کرنے کا طریقہ ٹیسٹ کریں
آرڈر کا TxHash حاصل کرنے کے لیے، dydx ایکسچینج آبجیکٹ TxHash کو کیش کرتا ہے۔ آرڈر ID کے ذریعے دریافت کیا جا سکتا ہے۔ لیکن اسٹریٹیجی بند ہونے پر کیش شدہ آرڈر 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)
مواد بہت طویل ہے، جزوی نمائش:
”`JSON
{
“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”: []
},
…
مندرجہ بالا ٹیسٹ، تازہ ترین Hosted Trading Platform پر مبنی ہے۔ dYdX v4 DEX کی سپورٹ کیلئے نئے ورژن ڈاؤن لوڈ کرنا ضروری ہے
تعاون کا شکریہ، آپ کے مطالعہ کا شکریہ۔