क्रिप्टोक्यूरेंसी ट्रेडिंग के क्षेत्र में विकेन्द्रीकृत एक्सचेंजों (डीईएक्स) के तेजी से उदय के साथ, मात्रात्मक व्यापारी कुशल स्वचालित ट्रेडिंग के लिए धीरे-धीरे इन प्लेटफार्मों की ओर रुख कर रहे हैं। सबसे लोकप्रिय विकेन्द्रीकृत ट्रेडिंग प्लेटफार्मों में से एक के रूप में, डीवाईडीएक्स शक्तिशाली ट्रेडिंग कार्य प्रदान करता है और वायदा स्थायी अनुबंध व्यापार का समर्थन करता है। इसका नवीनतम संस्करण वी 4 प्रदर्शन और उपयोगकर्ता अनुभव को अनुकूलित करता है, जिससे यह कई मात्रात्मक व्यापारियों के लिए पहली पसंद बन जाता है।
यह लेख dYdX v4 पर मात्रात्मक व्यापार का अभ्यास करने का परिचय देगा, जिसमें व्यापार करने, बाजार डेटा प्राप्त करने और खातों का प्रबंधन करने के लिए इसके एपीआई का उपयोग करना शामिल है।
dYdX v3
एथेरियम के साथ, व्यापार पुरस्कार उत्पन्न करता है, जो पुरस्कार हैंdYdX
tokens.पिछला dYdX v3 प्रोटोकॉल DEX एक्सचेंज ऑफ़लाइन था. वर्तमान dYdX v4 ऐप पता हैः
ऐप पेज खोलने के बाद, ऊपर दाएं कोने में वॉलेट से कनेक्ट करने के लिए एक बटन है। वॉलेट से कनेक्ट करने के लिए क्यूआर कोड स्कैन करें।
यदि आप परीक्षण करना चाहते हैं और पहले परीक्षण नेटवर्क वातावरण से परिचित होना चाहते हैं, तो आप परीक्षण नेटवर्क का उपयोग कर सकते हैंः
इसके अलावा, ऊपरी दाएं कोने में वॉलेट कनेक्ट बटन पर क्लिक करें, वॉलेट को कनेक्ट करने के लिए कोड को स्कैन करें, और हस्ताक्षर की पुष्टि करें। वॉलेट को सफलतापूर्वक कनेक्ट करने के बाद, एक dydx v4 पता स्वचालित रूप से उत्पन्न हो जाएगा। यह पता ऐप पेज के ऊपरी दाएं कोने में प्रदर्शित होगा। इसे क्लिक करें और एक मेनू पॉप अप होगा। रिचार्ज, निकासी और स्थानांतरण जैसे ऑपरेशन हैं। dYdX मेइननेट (उत्पादन वातावरण) और टेस्टनेट के बीच एक अंतर यह है कि जब आप टेस्टनेट पर रिचार्ज पर क्लिक करते हैं, तो परीक्षण के लिए नल का उपयोग करके 300 USDC संपत्ति स्वचालित रूप से चार्ज हो जाएगी। यदि आप dYdX पर वास्तविक लेनदेन करना चाहते हैं, तो आपको USDC संपत्ति चार्ज करने की आवश्यकता है। रिचार्ज भी बहुत सुविधाजनक है और रिचार्ज के लिए कई संपत्ति और श्रृंखलाओं के साथ संगत है।
dYdX v4 खाता पता
dYdX v4 खाता पता वॉलेट पता से व्युत्पन्न होता है. dYdX v4 खाता पता इस तरह दिखता हैःdydx1xxxxxxxxxxxxxxxxxxxxq2ge5jr4nzfeljxxxx
, जो कि dydx1 से शुरू होने वाला एक पता है। यह पता ब्लॉकचेन एक्सप्लोरर में क्वेरी किया जा सकता है।
स्मरणिकी
आप वर्तमान dYdX पते खाते के mnemonics को निर्यात करने के लिए ऊपरी दाएं कोने मेनू में
एमनेमोनिक्स को सीधे एफएमजेड प्लेटफॉर्म पर कॉन्फ़िगर किया जा सकता है या डॉकर पर स्थानीय रूप से सहेजा जा सकता है। जब dydx v4 एक्सचेंज ऑब्जेक्ट का उपयोग किया जाता है, तो एमनेमोनिक्स को रिकॉर्ड करने वाली फ़ाइल सामग्री पढ़ी जाएगी, जिसे इस लेख के व्यावहारिक भाग में प्रदर्शित किया जाएगा।
टेस्टनेट वातावरण कुछ पहलुओं में मेननेट वातावरण से भिन्न होता है। यहाँ कुछ सरल अंतर हैं।
subAccountNumber >= 128
, यदि आईडी के उप-खाते में कोई स्थिति नहीं है, तो संपत्ति स्वचालित रूप से उस उप-खाते में साफ की जाएगी जिसका उप-खाते संख्या 0 है।
परीक्षण के दौरान, यह पाया गया कि परीक्षण नेटवर्क में यह तंत्र नहीं है (या ट्रिगरिंग स्थितियां भिन्न हैं और यह परीक्षण नेटवर्क में ट्रिगर नहीं किया गया है) ।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
dYdX v4 प्रोटोकॉल को cosmos पारिस्थितिकी तंत्र के आधार पर विकसित किया गया है। dYdX v4 DEX प्रणाली लेनदेन से संबंधित सामग्री में मुख्य रूप से दो भाग होते हैंः
सूचकांक सेवा REST और Websocket प्रोटोकॉल प्रदान करती है.
REST प्रोटोकॉल REST प्रोटोकॉल इंटरफेस बाजार जानकारी क्वेरी, खाता जानकारी, स्थिति जानकारी, आदेश जानकारी और अन्य क्वेरी का समर्थन करता है, और FMZ प्लेटफॉर्म पर एक एकीकृत एपीआई इंटरफ़ेस के रूप में कैप्सूलित किया गया है।
वेबसॉकेट प्रोटोकॉल एफएमजेड प्लेटफॉर्म पर, आप डायल फ़ंक्शन का उपयोग वेबसॉकेट कनेक्शन बनाने और बाजार की जानकारी की सदस्यता लेने के लिए कर सकते हैं।
यह ध्यान दिया जाना चाहिए कि 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
• dydx v4 प्रोटोकॉल की सीमाओं के अनुसार, सबसे लंबी ऑर्डर वैधता अवधि का उपयोग किया जाता है, जो 90 दिन है ( dydx v4 पर सभी प्रकार के ऑर्डर की वैधता अवधि होती है) ।
बाज़ार का क्रम:
एफएमजेड प्लेटफॉर्म पर समाहित ऑर्डर फ़ंक्शन में, मार्केट ऑर्डर के लिए उपयोग किया जाने वाला ऑर्डरफ़्लैग मान हैःORDER_FLAGS_SHORT_TERM = 0 # Short-term order
, dydx v4 प्रोटोकॉल की सिफारिशों के अनुसारः
// ओरेकल मूल्य पर सेट की सिफारिश - 5% या कम के लिए बेचने के लिए, ओरेकल मूल्य + 5% के लिए खरीदें
चूंकि यह एक वास्तविक बाजार आदेश नहीं है, इसलिए बाजार आदेश के रूप में ओरेकल मूल्य का उपयोग किया जाता है, प्लस या माइनस 5% स्लिप। अल्पकालिक आदेशों की वैधता अवधि भी दीर्घकालिक आदेशों से अलग होती है। अल्पकालिक आदेश ब्लॉक ऊंचाई वैधता अवधि का उपयोग करते हैं, जो dydx v4 की सिफारिश के अनुसार वर्तमान ब्लॉक + 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 USDC संपत्ति की आवश्यकता होती है। उदाहरण के लिए, आप उपखाते संख्या 0 -> 128 से जा सकते हैं, या उपखाते संख्या 128 -> 0 से। स्थानांतरण के लिए गैस शुल्क की आवश्यकता होती है। गैस शुल्क USDC या dydx टोकन हो सकते हैं।
उपरोक्त सामग्री संक्षेप में कुछ पैकेजिंग विवरणों की व्याख्या करती है। अगला, आइए विशिष्ट उपयोग का अभ्यास करें। यहां हम प्रदर्शन के लिए dYdX v4 परीक्षण नेटवर्क का उपयोग करते हैं। परीक्षण नेटवर्क मूल रूप से मुख्य नेटवर्क के समान है, और परीक्षण संपत्ति प्राप्त करने के लिए एक स्वचालित नल है। डॉकर तैनाती ऑपरेशन दोहराया नहीं जाएगा। एफएमजेड पर एक लाइव ट्रेडिंग परीक्षण बनाएं।
dYdX v4 एप्लिकेशन से सफलतापूर्वक कनेक्ट करने के बाद क्रिप्टोक्यूरेंसी वॉलेट का उपयोग करके (मैं यहां imToken वॉलेट का उपयोग करता हूं), अपनी परीक्षण संपत्ति का दावा करें और फिर अपने वर्तमान dYdX v4 खाते के लिए mnemonic निर्यात करें (आपके वॉलेट से व्युत्पन्न) ।
एफएमजेड प्लेटफॉर्म पर mnemonic को कॉन्फ़िगर करें. यहाँ हम इसे कॉन्फ़िगर करने के लिए स्थानीय फ़ाइल विधि का उपयोग करते हैं (आप इसे सीधे भर सकते हैं और इसे प्लेटफॉर्म पर कॉन्फ़िगर कर सकते हैं. mnemonic को एन्क्रिप्शन के बाद कॉन्फ़िगर किया जाता है, सादे पाठ में नहीं) ।
इसे डॉकर निर्देशिका के नीचे लाइव ट्रेडिंग आईडी फ़ोल्डर निर्देशिका में रखें। बेशक, इसे अन्य निर्देशिकाओं में भी रखा जा सकता है (निर्दिष्ट पथ को कॉन्फ़िगरेशन के दौरान लिखने की आवश्यकता है) ।
सम्पादकीय सम्पादन बॉक्स भरें: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
}
यह देखा जा सकता है कि उप-खाता संख्या 128 के उप-खाता में 20 अमरीकी डालर ट्रांसफर किए गए हैं।
आदेश के अनुसार, TxHash प्राप्त करें और आरईएसटी नोड को कॉल करने वाले IO की विधि का परीक्षण करें
आदेश का 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 का समर्थन करने के लिए नवीनतम डॉकर डाउनलोड करने की आवश्यकता है
आपके समर्थन के लिए धन्यवाद और पढ़ने के लिए धन्यवाद।