[TOC]

Dengan peningkatan pesat pertukaran terdesentralisasi (DEX) dalam bidang perdagangan mata wang kripto, pedagang kuantitatif secara beransur-ansur mula beralih kepada platform ini untuk perdagangan automatik yang cekap. Sebagai salah satu platform dagangan terdesentralisasi yang paling popular, dYdX menyediakan fungsi dagangan yang berkuasa dan menyokong dagangan kontrak kekal niaga hadapan Versi terbaharunya v4 mengoptimumkan prestasi dan pengalaman pengguna, menjadikannya pilihan pertama bagi ramai pedagang kuantitatif.
Artikel ini akan memperkenalkan cara mengamalkan dagangan kuantitatif pada dYdX v4, termasuk cara menggunakan APInya untuk berdagang, mendapatkan data pasaran dan mengurus akaun.

dYdX v3Begitu juga, urus niaga menjana ganjaran, ganjarandYdXToken.
Pertukaran DEX protokol dYdX v3 sebelumnya telah di luar talian Alamat aplikasi dYdX v4 semasa ialah:
Selepas membuka halaman Apl, terdapat butang untuk menyambung ke dompet di penjuru kanan sebelah atas Imbas kod QR untuk menyambung ke dompet.
Jika anda ingin menguji dan membiasakan diri dengan persekitaran rangkaian ujian terlebih dahulu, anda boleh menggunakan rangkaian ujian:
Selain itu, klik butang sambung dompet di penjuru kanan sebelah atas, imbas kod QR untuk menyambung ke dompet dan sahkan tandatangan. Selepas dompet berjaya disambungkan, alamat dydx v4 akan dijana secara automatik Alamat ini akan dipaparkan di penjuru kanan sebelah atas halaman Apl akan muncul selepas mengkliknya. Ini termasuk operasi seperti cas semula, pengeluaran dan pemindahan. Salah satu perbezaan antara mainnet dYdX (persekitaran pengeluaran) dan testnet ialah apabila anda mengklik butang tambah nilai pada testnet, 300 USDC aset akan didepositkan secara automatik ke dalam faucet untuk ujian. Jika anda ingin melakukan transaksi sebenar di dYdX, anda perlu mendepositkan aset USDC Recharge juga sangat mudah dan serasi dengan berbilang aset dan rantai.
Alamat Akaun dYdX v4
Alamat akaun dYdX v4 diperoleh daripada alamat dompet Alamat akaun dYdX v4 kelihatan seperti ini:dydx1xxxxxxxxxxxxxxxxxxxxq2ge5jr4nzfeljxxxx, ialah alamat yang bermula dengan dydx1. Alamat ini boleh ditanya dalam peneroka blokchain.
Mnemonik Anda boleh mengeksport mnemonik akaun alamat dYdX semasa dengan mengklik butang “Eksport Kata Laluan” di menu penjuru kanan sebelah atas. Apabila menambah pertukaran pada platform FMZ, anda perlu mengkonfigurasi mnemonik ini.
Mnemonik boleh dikonfigurasikan terus pada platform FMZ atau disimpan secara tempatan pada penjaga Apabila menggunakan objek pertukaran dydx v4, kandungan fail yang merakam mnemonik akan dibaca, yang akan ditunjukkan dalam bahagian praktikal artikel ini.
Persekitaran testnet berbeza daripada persekitaran mainnet dalam beberapa aspek. Berikut adalah beberapa perbezaan mudah.
Pemindahan aset subakaun.
Rangkaian utama mempunyai mekanisme pembersihan sub-akaun.subAccountNumber >= 128Jika sub-akaun dengan ID ini tidak mempunyai kedudukan, aset akan dikosongkan secara automatik ke sub-akaun dengan subAccountNumber 0.
Semasa ujian, didapati bahawa rangkaian ujian tidak mempunyai mekanisme sedemikian (atau keadaan pencetus adalah berbeza dan ia tidak dicetuskan pada rangkaian ujian).
Beberapa nama token.
Token dydx asli dinamakan berbeza: MainnetDYDX, rangkaian ujianDv4TNT
Konfigurasi alamat, seperti ID rantai, alamat nod, alamat pengindeks, dsb. Terdapat banyak nod dan konfigurasi, berikut adalah salah satu daripadanya:
Mainnet:
Alamat pengindeks:https://indexer.dydx.trade
ID rantai:dydx-mainnet-1
Nod REST:https://dydx-dao-api.polkachu.com:443
Testnet:
Alamat pengindeks:https://indexer.v4testnet.dydx.exchange
ID rantai:dydx-testnet-4
Nod REST:https://dydx-testnet-api.polkachu.com
Protokol dYdX v4 dibangunkan berdasarkan ekosistem kosmos Kandungan berkaitan transaksi sistem dYdX v4 DEX terutamanya terdiri daripada dua bahagian:
Perkhidmatan pengindeks menyediakan protokol REST dan Websocket.
Protokol REST Antara muka protokol REST menyokong pertanyaan maklumat pasaran, maklumat akaun, maklumat kedudukan, maklumat pesanan, dsb., dan telah dirangkumkan sebagai antara muka API bersatu pada platform FMZ.
Protokol WebSocket Pada platform FMZ, anda boleh menggunakan fungsi Dail untuk mencipta sambungan Websocket dan melanggan maklumat pasaran.
Perlu diingatkan bahawa pengindeks dydx v4 mempunyai masalah yang sama seperti pertukaran terpusat, iaitu, kemas kini data tidak begitu tepat pada masanya. Adalah disyorkan bahawa selepas operasi tertentu (Sleep(n)) Tunggu beberapa saat sebelum bertanya lagi.
Berikut ialah contoh menggunakan fungsi Dail untuk mencipta sambungan API Websocket dan melanggan data buku pesanan:
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) + "`")
}
}
Mesej yang paling biasa digunakan dalam urus niaga ialah mesej pesanan, mesej pembatalan pesanan dan mesej pemindahan.
{
"@type": "/dydxprotocol.clob.MsgPlaceOrder",
"order": {
"orderId": {
"subaccountId": {
"owner": "xxx"
},
"clientId": xxx,
"orderFlags": 64,
"clobPairId": 1
},
"side": "SIDE_BUY",
"quantums": "2000000",
"subticks": "3500000000",
"goodTilBlockTime": 1742295981
}
}
Had Pesanan:
Dalam fungsi pesanan yang terkandung pada platform FMZ, nilai orderFlags yang digunakan untuk pesanan had ialah:ORDER_FLAGS_LONG_TERM = 64 # 长期订单Mengikut batasan protokol DYDX v4, tempoh sah pesanan terpanjang digunakan, iaitu 90 hari (semua jenis pesanan pada DYDX v4 mempunyai tempoh sah).
Pesanan Pasaran:
Dalam fungsi pesanan yang terkandung pada platform FMZ, nilai orderFlags yang digunakan oleh pesanan pasaran ialah:ORDER_FLAGS_SHORT_TERM = 0 # 短期订单, menurut cadangan protokol DYDX v4:
// Recommend set to oracle price - 5% or lower for SELL, oracle price + 5% for BUY
Oleh kerana ia bukan pesanan pasaran yang benar, harga oracle digunakan, tambah atau tolak 5% gelinciran sebagai pesanan pasaran. Tetapan tempoh sah bagi pesanan jangka pendek juga berbeza daripada pesanan jangka pendek menggunakan tempoh sah ketinggian blok Menurut pengesyoran dydx v4, ia ditetapkan kepada blok semasa + 10 ketinggian blok sebelum ia luput.
ID Pesanan: Memandangkan operasi pesanan dilakukan secara langsung pada rantai, tidak akan ada ID pesanan yang dijana oleh pengindeks selepas mesej disiarkan, dan pesanan pengindeks tidak boleh digunakan sebagai nilai pulangan fungsi pesanan platform untuk memastikan keunikan daripada ID pesanan dan ketepatan pertanyaan pesanan, pesanan pengindeks dikembalikan ID pesanan terdiri daripada maklumat berikut (dipisahkan koma):
Ringkasan mesej pembatalan pesanan
{
"@type": "/dydxprotocol.clob.MsgCancelOrder",
"orderId": {
"subaccountId": {
"owner": "xxx"
},
"clientId": 2585872024,
"orderFlags": 64,
"clobPairId": 1
},
"goodTilBlockTime": 1742295981
}
ID pesanan yang dikembalikan oleh antara muka pesanan platform FMZ perlu dihantar masuk.
{
"@type": "/dydxprotocol.sending.MsgCreateTransfer",
"transfer": {
"sender": {
"owner": "xxx"
},
"recipient": {
"owner": "xxx",
"number": 128
},
"amount": "10000000"
}
}
Banyak sub-akaun boleh dibuat di bawah alamat dydx v4 semasa Sub-akaun dengan subAccountNumber 0 ialah sub-akaun yang pertama dibuat secara automatik ID subakaun dengan subAccountNumber lebih besar daripada atau sama dengan 128 digunakan untuk perdagangan kedudukan terpencil. yang memerlukan sekurang-kurangnya 20 aset USDC. Sebagai contoh, anda boleh pergi dari subAccountNumber 0 -> 128, atau dari subAccountNumber 128 -> 0. Pemindahan memerlukan penggunaan Yuran Gas. Yuran Gas boleh menggunakan token USDC dan dydx.
Kandungan di atas menerangkan secara ringkas beberapa butiran pembungkusan Seterusnya, mari kita praktikkan penggunaan khusus Di sini kita menggunakan rangkaian ujian dYdX v4 untuk demonstrasi pada asasnya sama dengan rangkaian utama, dan terdapat keran automatik untuk menerima aset ujian . Kustodian menggunakan Saya tidak akan pergi ke butiran tentang operasi, dan membuat ujian sebenar pada FMZ.
Selepas berjaya menyambung ke Apl dYdX v4 menggunakan dompet mata wang kripto (saya menggunakan dompet imToken di sini), tuntut aset ujian anda dan kemudian eksport mnemonik untuk akaun dYdX v4 semasa anda (diperolehi daripada dompet anda).

Konfigurasikan mnemonik pada platform FMZ Di sini kami menggunakan kaedah fail tempatan untuk mengkonfigurasinya (anda juga boleh mengisi terus dan mengkonfigurasinya ke platform. Mnemonik dikonfigurasikan selepas penyulitan, bukan dalam teks biasa).

Letakkannya dalam direktori folder ID cakera sebenar di bawah direktori penjaga Sudah tentu, ia juga boleh diletakkan dalam direktori lain (laluan khusus perlu ditulis semasa konfigurasi).
Isikan kotak suntingan mnemonik:file:///mnemonic.txt, laluan sebenar yang sepadan ialah:托管者所在目录/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())
}
Baca maklumat akaun rangkaian ujian:
{
"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
}
Tidak beralih ke rangkaian ujian, diuji dengan rangkaian utama
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)
}

Halaman Apl dYdX v4:

Rangkaian ujian membuat dua pesanan lebih awal, menguji mendapatkan pesanan belum selesai semasa dan membatalkan pesanan.
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)
}

Beralih kepada subakaun yang subAccountNumbernya ialah 128 dan data yang dikembalikan oleh GetAccount ialah:
{
"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
}
Dapat dilihat bahawa sub-akaun dengan subAccountNumber 128 telah memindahkan 20 USDC.
Mengikut perintah itu, dapatkan TxHash dan uji kaedah IO memanggil nod REST
Bagaimana untuk mendapatkan TxHash pesanan? Objek pertukaran dydx akan cache TxHash, yang boleh ditanya menggunakan ID pesanan. Walau bagaimanapun, selepas strategi berhenti, peta cincang tx pesanan cache akan dikosongkan.
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)
}
}

Mesej yang ditanya melalui TxHash:
var ret = exchange.IO(“api”, “GET”, “/cosmos/tx/v1beta1/txs/” + txHash)
Kandungannya terlalu panjang, jadi berikut adalah beberapa petikan untuk demonstrasi:
{
"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": []
},
...
Ujian di atas adalah berdasarkan kustodian terkini Anda perlu memuat turun kustodian terkini untuk menyokong dYdX v4 DEX
Terima kasih atas sokongan anda dan terima kasih kerana membaca.