ccxt 4.5.18 → 4.5.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1007) hide show
  1. package/README.md +7 -6
  2. package/dist/ccxt.browser.min.js +40 -16
  3. package/dist/cjs/_virtual/index.cjs.js +1459 -9
  4. package/dist/cjs/ccxt.js +8 -2
  5. package/dist/cjs/src/abstract/alpaca.js +1 -1
  6. package/dist/cjs/src/abstract/apex.js +1 -1
  7. package/dist/cjs/src/abstract/arkham.js +1 -1
  8. package/dist/cjs/src/abstract/ascendex.js +1 -1
  9. package/dist/cjs/src/abstract/backpack.js +1 -1
  10. package/dist/cjs/src/abstract/bigone.js +1 -1
  11. package/dist/cjs/src/abstract/binance.js +1 -1
  12. package/dist/cjs/src/abstract/bingx.js +1 -1
  13. package/dist/cjs/src/abstract/bit2c.js +1 -1
  14. package/dist/cjs/src/abstract/bitbank.js +1 -1
  15. package/dist/cjs/src/abstract/bitbns.js +1 -1
  16. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  17. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  18. package/dist/cjs/src/abstract/bitget.js +1 -1
  19. package/dist/cjs/src/abstract/bithumb.js +1 -1
  20. package/dist/cjs/src/abstract/bitmart.js +1 -1
  21. package/dist/cjs/src/abstract/bitmex.js +1 -1
  22. package/dist/cjs/src/abstract/bitopro.js +1 -1
  23. package/dist/cjs/src/abstract/bitrue.js +1 -1
  24. package/dist/cjs/src/abstract/bitso.js +1 -1
  25. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  26. package/dist/cjs/src/abstract/bitteam.js +1 -1
  27. package/dist/cjs/src/abstract/bittrade.js +1 -1
  28. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  29. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  30. package/dist/cjs/src/abstract/blofin.js +1 -1
  31. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  32. package/dist/cjs/src/abstract/btcbox.js +1 -1
  33. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  34. package/dist/cjs/src/abstract/btcturk.js +1 -1
  35. package/dist/cjs/src/abstract/bybit.js +1 -1
  36. package/dist/cjs/src/abstract/cex.js +1 -1
  37. package/dist/cjs/src/abstract/coinbase.js +1 -1
  38. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  39. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  40. package/dist/cjs/src/abstract/coincatch.js +1 -1
  41. package/dist/cjs/src/abstract/coincheck.js +1 -1
  42. package/dist/cjs/src/abstract/coinex.js +1 -1
  43. package/dist/cjs/src/abstract/coinmate.js +1 -1
  44. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  45. package/dist/cjs/src/abstract/coinone.js +1 -1
  46. package/dist/cjs/src/abstract/coinsph.js +1 -1
  47. package/dist/cjs/src/abstract/coinspot.js +1 -1
  48. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  49. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  50. package/dist/cjs/src/abstract/deepcoin.js +1 -1
  51. package/dist/cjs/src/abstract/defx.js +1 -1
  52. package/dist/cjs/src/abstract/delta.js +1 -1
  53. package/dist/cjs/src/abstract/deribit.js +1 -1
  54. package/dist/cjs/src/abstract/derive.js +1 -1
  55. package/dist/cjs/src/abstract/digifinex.js +1 -1
  56. package/dist/cjs/src/abstract/dydx.js +11 -0
  57. package/dist/cjs/src/abstract/exmo.js +1 -1
  58. package/dist/cjs/src/abstract/foxbit.js +1 -1
  59. package/dist/cjs/src/abstract/gate.js +1 -1
  60. package/dist/cjs/src/abstract/gemini.js +1 -1
  61. package/dist/cjs/src/abstract/hashkey.js +1 -1
  62. package/dist/cjs/src/abstract/hibachi.js +1 -1
  63. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  64. package/dist/cjs/src/abstract/hollaex.js +1 -1
  65. package/dist/cjs/src/abstract/htx.js +1 -1
  66. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  67. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  68. package/dist/cjs/src/abstract/indodax.js +1 -1
  69. package/dist/cjs/src/abstract/kraken.js +1 -1
  70. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  71. package/dist/cjs/src/abstract/kucoin.js +1 -1
  72. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  73. package/dist/cjs/src/abstract/latoken.js +1 -1
  74. package/dist/cjs/src/abstract/lbank.js +1 -1
  75. package/dist/cjs/src/abstract/luno.js +1 -1
  76. package/dist/cjs/src/abstract/mercado.js +1 -1
  77. package/dist/cjs/src/abstract/mexc.js +1 -1
  78. package/dist/cjs/src/abstract/modetrade.js +1 -1
  79. package/dist/cjs/src/abstract/ndax.js +1 -1
  80. package/dist/cjs/src/abstract/novadax.js +1 -1
  81. package/dist/cjs/src/abstract/oceanex.js +1 -1
  82. package/dist/cjs/src/abstract/okx.js +1 -1
  83. package/dist/cjs/src/abstract/onetrading.js +1 -1
  84. package/dist/cjs/src/abstract/oxfun.js +1 -1
  85. package/dist/cjs/src/abstract/p2b.js +1 -1
  86. package/dist/cjs/src/abstract/paradex.js +1 -1
  87. package/dist/cjs/src/abstract/paymium.js +1 -1
  88. package/dist/cjs/src/abstract/phemex.js +1 -1
  89. package/dist/cjs/src/abstract/poloniex.js +1 -1
  90. package/dist/cjs/src/abstract/probit.js +1 -1
  91. package/dist/cjs/src/abstract/timex.js +1 -1
  92. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  93. package/dist/cjs/src/abstract/toobit.js +1 -1
  94. package/dist/cjs/src/abstract/upbit.js +1 -1
  95. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  96. package/dist/cjs/src/abstract/whitebit.js +1 -1
  97. package/dist/cjs/src/abstract/woo.js +1 -1
  98. package/dist/cjs/src/abstract/woofipro.js +1 -1
  99. package/dist/cjs/src/abstract/xt.js +1 -1
  100. package/dist/cjs/src/abstract/yobit.js +1 -1
  101. package/dist/cjs/src/abstract/zaif.js +1 -1
  102. package/dist/cjs/src/abstract/zonda.js +1 -1
  103. package/dist/cjs/src/alpaca.js +1 -1
  104. package/dist/cjs/src/apex.js +1 -1
  105. package/dist/cjs/src/arkham.js +1 -1
  106. package/dist/cjs/src/ascendex.js +1 -1
  107. package/dist/cjs/src/backpack.js +1 -1
  108. package/dist/cjs/src/base/Exchange.js +158 -1
  109. package/dist/cjs/src/base/Precise.js +0 -6
  110. package/dist/cjs/src/base/errors.js +0 -6
  111. package/dist/cjs/src/base/functions/crypto.js +1 -1
  112. package/dist/cjs/src/base/functions/encode.js +1 -1
  113. package/dist/cjs/src/base/functions/misc.js +0 -1
  114. package/dist/cjs/src/base/functions/number.js +0 -6
  115. package/dist/cjs/src/base/functions/platform.js +0 -6
  116. package/dist/cjs/src/base/functions/rsa.js +0 -1
  117. package/dist/cjs/src/base/functions/string.js +0 -6
  118. package/dist/cjs/src/base/functions/throttle.js +1 -1
  119. package/dist/cjs/src/base/functions/time.js +0 -6
  120. package/dist/cjs/src/base/functions/totp.js +0 -1
  121. package/dist/cjs/src/base/functions/type.js +0 -6
  122. package/dist/cjs/src/base/functions.js +1 -1
  123. package/dist/cjs/src/base/ws/Cache.js +0 -6
  124. package/dist/cjs/src/base/ws/Client.js +0 -1
  125. package/dist/cjs/src/base/ws/Future.js +1 -1
  126. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  127. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  128. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  129. package/dist/cjs/src/bequant.js +1 -1
  130. package/dist/cjs/src/bigone.js +1 -1
  131. package/dist/cjs/src/binance.js +1 -1
  132. package/dist/cjs/src/binancecoinm.js +1 -1
  133. package/dist/cjs/src/binanceus.js +1 -1
  134. package/dist/cjs/src/binanceusdm.js +1 -1
  135. package/dist/cjs/src/bingx.js +21 -1
  136. package/dist/cjs/src/bit2c.js +1 -1
  137. package/dist/cjs/src/bitbank.js +1 -1
  138. package/dist/cjs/src/bitbns.js +1 -1
  139. package/dist/cjs/src/bitfinex.js +1 -1
  140. package/dist/cjs/src/bitflyer.js +1 -1
  141. package/dist/cjs/src/bitget.js +44 -42
  142. package/dist/cjs/src/bithumb.js +1 -1
  143. package/dist/cjs/src/bitmart.js +1 -1
  144. package/dist/cjs/src/bitmex.js +1 -1
  145. package/dist/cjs/src/bitopro.js +1 -1
  146. package/dist/cjs/src/bitrue.js +1 -1
  147. package/dist/cjs/src/bitso.js +1 -1
  148. package/dist/cjs/src/bitstamp.js +1 -1
  149. package/dist/cjs/src/bitteam.js +1 -1
  150. package/dist/cjs/src/bittrade.js +1 -1
  151. package/dist/cjs/src/blockchaincom.js +1 -1
  152. package/dist/cjs/src/blofin.js +1 -1
  153. package/dist/cjs/src/btcalpha.js +1 -1
  154. package/dist/cjs/src/btcbox.js +1 -1
  155. package/dist/cjs/src/btcmarkets.js +1 -1
  156. package/dist/cjs/src/btcturk.js +1 -1
  157. package/dist/cjs/src/bybit.js +1 -1
  158. package/dist/cjs/src/cex.js +1 -1
  159. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  160. package/dist/cjs/src/coincatch.js +1 -1
  161. package/dist/cjs/src/coincheck.js +1 -1
  162. package/dist/cjs/src/coinex.js +1 -1
  163. package/dist/cjs/src/coinmate.js +1 -1
  164. package/dist/cjs/src/coinmetro.js +1 -1
  165. package/dist/cjs/src/coinone.js +1 -1
  166. package/dist/cjs/src/coinsph.js +0 -1
  167. package/dist/cjs/src/coinspot.js +1 -1
  168. package/dist/cjs/src/cryptocom.js +1 -1
  169. package/dist/cjs/src/cryptomus.js +1 -1
  170. package/dist/cjs/src/deepcoin.js +1 -1
  171. package/dist/cjs/src/defx.js +1 -1
  172. package/dist/cjs/src/delta.js +1 -1
  173. package/dist/cjs/src/deribit.js +7 -1
  174. package/dist/cjs/src/derive.js +1 -1
  175. package/dist/cjs/src/digifinex.js +1 -1
  176. package/dist/cjs/src/dydx.js +2453 -0
  177. package/dist/cjs/src/exmo.js +1 -1
  178. package/dist/cjs/src/fmfwio.js +1 -1
  179. package/dist/cjs/src/foxbit.js +1 -1
  180. package/dist/cjs/src/gate.js +1 -1
  181. package/dist/cjs/src/gateio.js +1 -1
  182. package/dist/cjs/src/gemini.js +1 -1
  183. package/dist/cjs/src/hashkey.js +1 -1
  184. package/dist/cjs/src/hibachi.js +2 -2
  185. package/dist/cjs/src/hitbtc.js +0 -1
  186. package/dist/cjs/src/hollaex.js +1 -1
  187. package/dist/cjs/src/htx.js +1 -1
  188. package/dist/cjs/src/huobi.js +1 -1
  189. package/dist/cjs/src/hyperliquid.js +1 -1
  190. package/dist/cjs/src/independentreserve.js +1 -1
  191. package/dist/cjs/src/indodax.js +1 -1
  192. package/dist/cjs/src/kraken.js +1 -1
  193. package/dist/cjs/src/krakenfutures.js +1 -1
  194. package/dist/cjs/src/kucoin.js +712 -110
  195. package/dist/cjs/src/kucoinfutures.js +1 -1
  196. package/dist/cjs/src/latoken.js +1 -1
  197. package/dist/cjs/src/lbank.js +1 -1
  198. package/dist/cjs/src/luno.js +1 -1
  199. package/dist/cjs/src/mercado.js +1 -1
  200. package/dist/cjs/src/mexc.js +1 -1
  201. package/dist/cjs/src/modetrade.js +1 -1
  202. package/dist/cjs/src/myokx.js +1 -1
  203. package/dist/cjs/src/ndax.js +1 -1
  204. package/dist/cjs/src/novadax.js +1 -1
  205. package/dist/cjs/src/oceanex.js +1 -1
  206. package/dist/cjs/src/okx.js +1 -1
  207. package/dist/cjs/src/okxus.js +1 -1
  208. package/dist/cjs/src/onetrading.js +1 -1
  209. package/dist/cjs/src/oxfun.js +1 -1
  210. package/dist/cjs/src/p2b.js +1 -1
  211. package/dist/cjs/src/paradex.js +1 -1
  212. package/dist/cjs/src/paymium.js +1 -1
  213. package/dist/cjs/src/poloniex.js +1 -1
  214. package/dist/cjs/src/pro/alpaca.js +1 -1
  215. package/dist/cjs/src/pro/apex.js +1 -1
  216. package/dist/cjs/src/pro/arkham.js +1 -1
  217. package/dist/cjs/src/pro/ascendex.js +1 -1
  218. package/dist/cjs/src/pro/backpack.js +1 -1
  219. package/dist/cjs/src/pro/bequant.js +1 -1
  220. package/dist/cjs/src/pro/binance.js +59 -144
  221. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  222. package/dist/cjs/src/pro/binanceus.js +1 -1
  223. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  224. package/dist/cjs/src/pro/bingx.js +1 -1
  225. package/dist/cjs/src/pro/bitfinex.js +1 -1
  226. package/dist/cjs/src/pro/bitget.js +1 -1
  227. package/dist/cjs/src/pro/bithumb.js +1 -1
  228. package/dist/cjs/src/pro/bitmart.js +1 -1
  229. package/dist/cjs/src/pro/bitmex.js +1 -1
  230. package/dist/cjs/src/pro/bitrue.js +1 -1
  231. package/dist/cjs/src/pro/bitstamp.js +1 -1
  232. package/dist/cjs/src/pro/bitvavo.js +1 -1
  233. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  234. package/dist/cjs/src/pro/blofin.js +1 -1
  235. package/dist/cjs/src/pro/bybit.js +1 -1
  236. package/dist/cjs/src/pro/cex.js +1 -1
  237. package/dist/cjs/src/pro/coinbase.js +1 -1
  238. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  239. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  240. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  241. package/dist/cjs/src/pro/coincatch.js +1 -1
  242. package/dist/cjs/src/pro/coincheck.js +1 -1
  243. package/dist/cjs/src/pro/coinex.js +1 -1
  244. package/dist/cjs/src/pro/coinone.js +1 -1
  245. package/dist/cjs/src/pro/cryptocom.js +1 -1
  246. package/dist/cjs/src/pro/deepcoin.js +1 -1
  247. package/dist/cjs/src/pro/defx.js +1 -1
  248. package/dist/cjs/src/pro/deribit.js +1 -1
  249. package/dist/cjs/src/pro/dydx.js +418 -0
  250. package/dist/cjs/src/pro/exmo.js +1 -1
  251. package/dist/cjs/src/pro/gate.js +1 -1
  252. package/dist/cjs/src/pro/gateio.js +1 -1
  253. package/dist/cjs/src/pro/gemini.js +1 -1
  254. package/dist/cjs/src/pro/hashkey.js +1 -1
  255. package/dist/cjs/src/pro/hitbtc.js +1 -1
  256. package/dist/cjs/src/pro/hollaex.js +1 -1
  257. package/dist/cjs/src/pro/htx.js +1 -1
  258. package/dist/cjs/src/pro/huobi.js +1 -1
  259. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  260. package/dist/cjs/src/pro/independentreserve.js +1 -1
  261. package/dist/cjs/src/pro/kraken.js +5 -4
  262. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  263. package/dist/cjs/src/pro/kucoin.js +1 -1
  264. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  265. package/dist/cjs/src/pro/lbank.js +0 -1
  266. package/dist/cjs/src/pro/luno.js +1 -1
  267. package/dist/cjs/src/pro/mexc.js +1 -1
  268. package/dist/cjs/src/pro/myokx.js +1 -1
  269. package/dist/cjs/src/pro/ndax.js +1 -1
  270. package/dist/cjs/src/pro/okx.js +1 -1
  271. package/dist/cjs/src/pro/okxus.js +1 -1
  272. package/dist/cjs/src/pro/onetrading.js +1 -1
  273. package/dist/cjs/src/pro/oxfun.js +1 -1
  274. package/dist/cjs/src/pro/p2b.js +1 -1
  275. package/dist/cjs/src/pro/paradex.js +1 -1
  276. package/dist/cjs/src/pro/phemex.js +1 -1
  277. package/dist/cjs/src/pro/poloniex.js +1 -1
  278. package/dist/cjs/src/pro/probit.js +1 -1
  279. package/dist/cjs/src/pro/toobit.js +1 -1
  280. package/dist/cjs/src/pro/upbit.js +1 -1
  281. package/dist/cjs/src/pro/whitebit.js +1 -1
  282. package/dist/cjs/src/pro/xt.js +218 -5
  283. package/dist/cjs/src/probit.js +1 -1
  284. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +2 -0
  285. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +55 -0
  286. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +55 -0
  287. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +47 -0
  288. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +342 -0
  289. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +716 -0
  290. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +59 -0
  291. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +44 -0
  292. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +379 -0
  293. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +71 -0
  294. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +210 -0
  295. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +194 -0
  296. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +48 -0
  297. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +56 -0
  298. package/dist/cjs/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +55 -0
  299. package/dist/cjs/src/static_dependencies/dydx-v4-client/helpers.js +37 -0
  300. package/dist/cjs/src/static_dependencies/dydx-v4-client/long/index.cjs.js +9 -0
  301. package/dist/cjs/src/static_dependencies/dydx-v4-client/onboarding.js +58 -0
  302. package/dist/cjs/src/static_dependencies/dydx-v4-client/registry.js +38 -0
  303. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
  304. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  305. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  306. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  307. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  308. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  309. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  310. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  311. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  312. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  313. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  314. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  315. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  316. package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
  317. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  318. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  319. package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
  320. package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
  321. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  322. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  323. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  324. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
  325. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  326. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  327. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  328. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  329. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  330. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  331. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  332. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  333. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  334. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  335. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  336. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  337. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  338. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  339. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  340. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  341. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  342. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  343. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  344. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  345. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  346. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  347. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  348. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  349. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  350. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  351. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  352. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  353. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  354. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  355. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  356. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  357. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  358. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  359. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  360. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  361. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  362. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  363. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  364. package/dist/cjs/src/static_dependencies/noble-hashes/pbkdf2.js +68 -0
  365. package/dist/cjs/src/static_dependencies/noble-hashes/ripemd160.js +107 -0
  366. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  367. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  368. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  369. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  370. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +51 -2
  371. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  372. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  373. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  374. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  375. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  376. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
  377. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  378. package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
  379. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  380. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  381. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  382. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  383. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  384. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  385. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  386. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  387. package/dist/cjs/src/static_dependencies/qs/formats.js +0 -6
  388. package/dist/cjs/src/static_dependencies/qs/index.js +0 -1
  389. package/dist/cjs/src/static_dependencies/qs/parse.js +0 -1
  390. package/dist/cjs/src/static_dependencies/qs/stringify.js +0 -1
  391. package/dist/cjs/src/static_dependencies/qs/utils.js +0 -6
  392. package/dist/cjs/src/static_dependencies/scure-base/index.js +29 -6
  393. package/dist/cjs/src/static_dependencies/scure-bip32/index.js +296 -0
  394. package/dist/cjs/src/static_dependencies/scure-bip39/index.js +97 -0
  395. package/dist/cjs/src/static_dependencies/scure-bip39/wordlists/english.js +2054 -0
  396. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  397. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  398. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  399. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  400. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  401. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  402. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  403. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
  404. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  405. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  406. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  407. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  408. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  409. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  410. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  411. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  412. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
  413. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  414. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  415. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  416. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  417. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
  418. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
  419. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
  420. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  421. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
  422. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  423. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  424. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  425. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  426. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  427. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  428. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  429. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  430. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +1 -5
  431. package/dist/cjs/src/timex.js +0 -1
  432. package/dist/cjs/src/tokocrypto.js +1 -1
  433. package/dist/cjs/src/toobit.js +3 -2
  434. package/dist/cjs/src/upbit.js +1 -1
  435. package/dist/cjs/src/wavesexchange.js +1 -1
  436. package/dist/cjs/src/whitebit.js +1 -1
  437. package/dist/cjs/src/woo.js +1 -1
  438. package/dist/cjs/src/woofipro.js +1 -1
  439. package/dist/cjs/src/xt.js +1 -1
  440. package/dist/cjs/src/yobit.js +1 -1
  441. package/dist/cjs/src/zaif.js +1 -1
  442. package/dist/cjs/src/zonda.js +1 -1
  443. package/js/ccxt.d.ts +8 -2
  444. package/js/ccxt.js +6 -8
  445. package/js/src/abstract/alpaca.js +0 -6
  446. package/js/src/abstract/apex.js +0 -6
  447. package/js/src/abstract/arkham.js +0 -6
  448. package/js/src/abstract/ascendex.js +0 -6
  449. package/js/src/abstract/backpack.js +0 -6
  450. package/js/src/abstract/bequant.js +0 -6
  451. package/js/src/abstract/bigone.js +0 -6
  452. package/js/src/abstract/binance.js +0 -6
  453. package/js/src/abstract/binancecoinm.js +0 -6
  454. package/js/src/abstract/binanceus.js +0 -6
  455. package/js/src/abstract/binanceusdm.js +0 -6
  456. package/js/src/abstract/bingx.js +0 -6
  457. package/js/src/abstract/bit2c.js +0 -6
  458. package/js/src/abstract/bitbank.js +0 -6
  459. package/js/src/abstract/bitbns.js +0 -6
  460. package/js/src/abstract/bitfinex.js +0 -6
  461. package/js/src/abstract/bitflyer.js +0 -6
  462. package/js/src/abstract/bitget.d.ts +1 -0
  463. package/js/src/abstract/bitget.js +0 -6
  464. package/js/src/abstract/bithumb.js +0 -6
  465. package/js/src/abstract/bitmart.js +0 -6
  466. package/js/src/abstract/bitmex.js +0 -6
  467. package/js/src/abstract/bitopro.js +0 -6
  468. package/js/src/abstract/bitrue.js +0 -6
  469. package/js/src/abstract/bitso.js +0 -6
  470. package/js/src/abstract/bitstamp.js +0 -6
  471. package/js/src/abstract/bitteam.js +0 -6
  472. package/js/src/abstract/bittrade.js +0 -6
  473. package/js/src/abstract/bitvavo.js +0 -6
  474. package/js/src/abstract/blockchaincom.js +0 -6
  475. package/js/src/abstract/blofin.js +0 -6
  476. package/js/src/abstract/btcalpha.js +0 -6
  477. package/js/src/abstract/btcbox.js +0 -6
  478. package/js/src/abstract/btcmarkets.js +0 -6
  479. package/js/src/abstract/btcturk.js +0 -6
  480. package/js/src/abstract/bybit.js +0 -6
  481. package/js/src/abstract/cex.js +0 -6
  482. package/js/src/abstract/coinbase.js +0 -6
  483. package/js/src/abstract/coinbaseadvanced.js +0 -6
  484. package/js/src/abstract/coinbaseexchange.js +0 -6
  485. package/js/src/abstract/coinbaseinternational.js +0 -6
  486. package/js/src/abstract/coincatch.js +0 -6
  487. package/js/src/abstract/coincheck.js +0 -6
  488. package/js/src/abstract/coinex.js +0 -6
  489. package/js/src/abstract/coinmate.js +0 -6
  490. package/js/src/abstract/coinmetro.js +0 -6
  491. package/js/src/abstract/coinone.js +0 -6
  492. package/js/src/abstract/coinsph.js +0 -6
  493. package/js/src/abstract/coinspot.js +0 -6
  494. package/js/src/abstract/cryptocom.js +0 -6
  495. package/js/src/abstract/cryptomus.js +0 -6
  496. package/js/src/abstract/deepcoin.js +0 -6
  497. package/js/src/abstract/defx.js +0 -6
  498. package/js/src/abstract/delta.js +0 -6
  499. package/js/src/abstract/deribit.js +0 -6
  500. package/js/src/abstract/derive.js +0 -6
  501. package/js/src/abstract/digifinex.js +0 -6
  502. package/js/src/abstract/dydx.d.ts +61 -0
  503. package/js/src/abstract/dydx.js +5 -0
  504. package/js/src/abstract/exmo.js +0 -6
  505. package/js/src/abstract/fmfwio.js +0 -6
  506. package/js/src/abstract/foxbit.js +0 -6
  507. package/js/src/abstract/gate.js +0 -6
  508. package/js/src/abstract/gateio.js +0 -6
  509. package/js/src/abstract/gemini.js +0 -6
  510. package/js/src/abstract/hashkey.js +0 -6
  511. package/js/src/abstract/hibachi.js +0 -6
  512. package/js/src/abstract/hitbtc.js +0 -6
  513. package/js/src/abstract/hollaex.js +0 -6
  514. package/js/src/abstract/htx.js +0 -6
  515. package/js/src/abstract/huobi.js +0 -6
  516. package/js/src/abstract/hyperliquid.js +0 -6
  517. package/js/src/abstract/independentreserve.js +0 -6
  518. package/js/src/abstract/indodax.js +0 -6
  519. package/js/src/abstract/kraken.js +0 -6
  520. package/js/src/abstract/krakenfutures.js +0 -6
  521. package/js/src/abstract/kucoin.d.ts +1 -1
  522. package/js/src/abstract/kucoin.js +0 -6
  523. package/js/src/abstract/kucoinfutures.d.ts +1 -1
  524. package/js/src/abstract/kucoinfutures.js +0 -6
  525. package/js/src/abstract/latoken.js +0 -6
  526. package/js/src/abstract/lbank.js +0 -6
  527. package/js/src/abstract/luno.js +0 -6
  528. package/js/src/abstract/mercado.js +0 -6
  529. package/js/src/abstract/mexc.js +0 -6
  530. package/js/src/abstract/modetrade.js +0 -6
  531. package/js/src/abstract/myokx.js +0 -6
  532. package/js/src/abstract/ndax.js +0 -6
  533. package/js/src/abstract/novadax.js +0 -6
  534. package/js/src/abstract/oceanex.js +0 -6
  535. package/js/src/abstract/okx.js +0 -6
  536. package/js/src/abstract/okxus.js +0 -6
  537. package/js/src/abstract/onetrading.js +0 -6
  538. package/js/src/abstract/oxfun.js +0 -6
  539. package/js/src/abstract/p2b.js +0 -6
  540. package/js/src/abstract/paradex.js +0 -6
  541. package/js/src/abstract/paymium.js +0 -6
  542. package/js/src/abstract/phemex.js +0 -6
  543. package/js/src/abstract/poloniex.js +0 -6
  544. package/js/src/abstract/probit.js +0 -6
  545. package/js/src/abstract/timex.js +0 -6
  546. package/js/src/abstract/tokocrypto.js +0 -6
  547. package/js/src/abstract/toobit.js +0 -6
  548. package/js/src/abstract/upbit.js +0 -6
  549. package/js/src/abstract/wavesexchange.js +0 -6
  550. package/js/src/abstract/whitebit.js +0 -6
  551. package/js/src/abstract/woo.js +0 -6
  552. package/js/src/abstract/woofipro.js +0 -6
  553. package/js/src/abstract/xt.js +0 -6
  554. package/js/src/abstract/yobit.js +0 -6
  555. package/js/src/abstract/zaif.js +0 -6
  556. package/js/src/abstract/zonda.js +0 -6
  557. package/js/src/alpaca.js +0 -6
  558. package/js/src/apex.js +0 -6
  559. package/js/src/arkham.js +0 -6
  560. package/js/src/ascendex.js +0 -6
  561. package/js/src/backpack.js +0 -6
  562. package/js/src/base/Exchange.d.ts +7 -0
  563. package/js/src/base/Exchange.js +157 -7
  564. package/js/src/base/Precise.js +0 -6
  565. package/js/src/base/errorHierarchy.js +0 -6
  566. package/js/src/base/errors.js +0 -6
  567. package/js/src/base/functions/crypto.js +0 -6
  568. package/js/src/base/functions/encode.js +0 -6
  569. package/js/src/base/functions/generic.js +0 -6
  570. package/js/src/base/functions/misc.js +0 -6
  571. package/js/src/base/functions/number.js +0 -6
  572. package/js/src/base/functions/platform.js +0 -6
  573. package/js/src/base/functions/rsa.js +0 -6
  574. package/js/src/base/functions/string.js +0 -6
  575. package/js/src/base/functions/throttle.js +0 -6
  576. package/js/src/base/functions/time.js +0 -6
  577. package/js/src/base/functions/totp.js +0 -6
  578. package/js/src/base/functions/type.js +0 -6
  579. package/js/src/base/functions.js +0 -6
  580. package/js/src/base/types.js +0 -6
  581. package/js/src/base/ws/Cache.js +0 -6
  582. package/js/src/base/ws/Client.js +0 -6
  583. package/js/src/base/ws/Future.js +0 -6
  584. package/js/src/base/ws/OrderBook.js +0 -6
  585. package/js/src/base/ws/OrderBookSide.js +0 -6
  586. package/js/src/base/ws/WsClient.js +0 -6
  587. package/js/src/base/ws/functions.js +0 -6
  588. package/js/src/bequant.js +0 -6
  589. package/js/src/bigone.js +0 -6
  590. package/js/src/binance.js +0 -6
  591. package/js/src/binancecoinm.js +0 -6
  592. package/js/src/binanceus.js +0 -6
  593. package/js/src/binanceusdm.js +0 -6
  594. package/js/src/bingx.js +20 -6
  595. package/js/src/bit2c.js +0 -6
  596. package/js/src/bitbank.js +0 -6
  597. package/js/src/bitbns.js +0 -6
  598. package/js/src/bitfinex.js +0 -6
  599. package/js/src/bitflyer.js +0 -6
  600. package/js/src/bitget.d.ts +3 -3
  601. package/js/src/bitget.js +43 -47
  602. package/js/src/bithumb.js +0 -6
  603. package/js/src/bitmart.js +0 -6
  604. package/js/src/bitmex.js +0 -6
  605. package/js/src/bitopro.js +0 -6
  606. package/js/src/bitrue.js +0 -6
  607. package/js/src/bitso.js +0 -6
  608. package/js/src/bitstamp.js +0 -6
  609. package/js/src/bitteam.js +0 -6
  610. package/js/src/bittrade.js +0 -6
  611. package/js/src/bitvavo.js +0 -6
  612. package/js/src/blockchaincom.js +0 -6
  613. package/js/src/blofin.js +0 -6
  614. package/js/src/btcalpha.js +0 -6
  615. package/js/src/btcbox.js +0 -6
  616. package/js/src/btcmarkets.js +0 -6
  617. package/js/src/btcturk.js +0 -6
  618. package/js/src/bybit.js +0 -6
  619. package/js/src/cex.js +0 -6
  620. package/js/src/coinbase.js +0 -6
  621. package/js/src/coinbaseadvanced.js +0 -6
  622. package/js/src/coinbaseexchange.js +0 -6
  623. package/js/src/coinbaseinternational.js +0 -6
  624. package/js/src/coincatch.js +0 -6
  625. package/js/src/coincheck.js +0 -6
  626. package/js/src/coinex.js +0 -6
  627. package/js/src/coinmate.js +0 -6
  628. package/js/src/coinmetro.js +0 -6
  629. package/js/src/coinone.js +0 -6
  630. package/js/src/coinsph.js +0 -6
  631. package/js/src/coinspot.js +0 -6
  632. package/js/src/cryptocom.js +0 -6
  633. package/js/src/cryptomus.js +0 -6
  634. package/js/src/deepcoin.js +0 -6
  635. package/js/src/defx.js +0 -6
  636. package/js/src/delta.js +0 -6
  637. package/js/src/deribit.js +6 -6
  638. package/js/src/derive.js +0 -6
  639. package/js/src/digifinex.js +0 -6
  640. package/js/src/dydx.d.ts +364 -0
  641. package/js/src/dydx.js +2446 -0
  642. package/js/src/exmo.js +0 -6
  643. package/js/src/fmfwio.js +0 -6
  644. package/js/src/foxbit.js +0 -6
  645. package/js/src/gate.js +0 -6
  646. package/js/src/gateio.js +0 -6
  647. package/js/src/gemini.js +0 -6
  648. package/js/src/hashkey.js +0 -6
  649. package/js/src/hibachi.js +1 -7
  650. package/js/src/hitbtc.js +0 -6
  651. package/js/src/hollaex.js +0 -6
  652. package/js/src/htx.js +0 -6
  653. package/js/src/huobi.js +0 -6
  654. package/js/src/hyperliquid.js +0 -6
  655. package/js/src/independentreserve.js +0 -6
  656. package/js/src/indodax.js +0 -6
  657. package/js/src/kraken.js +0 -6
  658. package/js/src/krakenfutures.js +0 -6
  659. package/js/src/kucoin.d.ts +48 -1
  660. package/js/src/kucoin.js +711 -115
  661. package/js/src/kucoinfutures.js +0 -6
  662. package/js/src/latoken.js +0 -6
  663. package/js/src/lbank.js +0 -6
  664. package/js/src/luno.js +0 -6
  665. package/js/src/mercado.js +0 -6
  666. package/js/src/mexc.js +0 -6
  667. package/js/src/modetrade.js +0 -6
  668. package/js/src/myokx.js +0 -6
  669. package/js/src/ndax.js +0 -6
  670. package/js/src/novadax.js +0 -6
  671. package/js/src/oceanex.js +0 -6
  672. package/js/src/okx.js +0 -6
  673. package/js/src/okxus.js +0 -6
  674. package/js/src/onetrading.js +0 -6
  675. package/js/src/oxfun.js +0 -6
  676. package/js/src/p2b.js +0 -6
  677. package/js/src/paradex.js +0 -6
  678. package/js/src/paymium.js +0 -6
  679. package/js/src/phemex.js +0 -6
  680. package/js/src/poloniex.js +0 -6
  681. package/js/src/pro/alpaca.js +0 -6
  682. package/js/src/pro/apex.js +0 -6
  683. package/js/src/pro/arkham.js +0 -6
  684. package/js/src/pro/ascendex.js +0 -6
  685. package/js/src/pro/backpack.js +0 -6
  686. package/js/src/pro/bequant.js +0 -6
  687. package/js/src/pro/binance.d.ts +2 -2
  688. package/js/src/pro/binance.js +59 -150
  689. package/js/src/pro/binancecoinm.js +0 -6
  690. package/js/src/pro/binanceus.js +0 -6
  691. package/js/src/pro/binanceusdm.js +0 -6
  692. package/js/src/pro/bingx.js +0 -6
  693. package/js/src/pro/bitfinex.js +0 -6
  694. package/js/src/pro/bitget.js +0 -6
  695. package/js/src/pro/bithumb.js +0 -6
  696. package/js/src/pro/bitmart.js +0 -6
  697. package/js/src/pro/bitmex.js +0 -6
  698. package/js/src/pro/bitopro.js +0 -6
  699. package/js/src/pro/bitrue.js +0 -6
  700. package/js/src/pro/bitstamp.js +0 -6
  701. package/js/src/pro/bittrade.js +0 -6
  702. package/js/src/pro/bitvavo.js +0 -6
  703. package/js/src/pro/blockchaincom.js +0 -6
  704. package/js/src/pro/blofin.js +0 -6
  705. package/js/src/pro/bybit.js +0 -6
  706. package/js/src/pro/cex.js +0 -6
  707. package/js/src/pro/coinbase.js +0 -6
  708. package/js/src/pro/coinbaseadvanced.js +0 -6
  709. package/js/src/pro/coinbaseexchange.js +0 -6
  710. package/js/src/pro/coinbaseinternational.js +0 -6
  711. package/js/src/pro/coincatch.js +0 -6
  712. package/js/src/pro/coincheck.js +0 -6
  713. package/js/src/pro/coinex.js +0 -6
  714. package/js/src/pro/coinone.js +0 -6
  715. package/js/src/pro/cryptocom.js +0 -6
  716. package/js/src/pro/deepcoin.js +0 -6
  717. package/js/src/pro/defx.js +0 -6
  718. package/js/src/pro/deribit.js +0 -6
  719. package/js/src/pro/derive.js +0 -6
  720. package/js/src/pro/dydx.d.ts +81 -0
  721. package/js/src/pro/dydx.js +411 -0
  722. package/js/src/pro/exmo.js +0 -6
  723. package/js/src/pro/gate.js +0 -6
  724. package/js/src/pro/gateio.js +0 -6
  725. package/js/src/pro/gemini.js +0 -6
  726. package/js/src/pro/hashkey.js +0 -6
  727. package/js/src/pro/hitbtc.js +0 -6
  728. package/js/src/pro/hollaex.js +0 -6
  729. package/js/src/pro/htx.js +0 -6
  730. package/js/src/pro/huobi.js +0 -6
  731. package/js/src/pro/hyperliquid.js +0 -6
  732. package/js/src/pro/independentreserve.js +0 -6
  733. package/js/src/pro/kraken.js +4 -9
  734. package/js/src/pro/krakenfutures.js +0 -6
  735. package/js/src/pro/kucoin.js +0 -6
  736. package/js/src/pro/kucoinfutures.js +0 -6
  737. package/js/src/pro/lbank.js +0 -6
  738. package/js/src/pro/luno.js +0 -6
  739. package/js/src/pro/mexc.js +0 -6
  740. package/js/src/pro/modetrade.js +0 -6
  741. package/js/src/pro/myokx.js +0 -6
  742. package/js/src/pro/ndax.js +0 -6
  743. package/js/src/pro/okx.js +0 -6
  744. package/js/src/pro/okxus.js +0 -6
  745. package/js/src/pro/onetrading.js +0 -6
  746. package/js/src/pro/oxfun.js +0 -6
  747. package/js/src/pro/p2b.js +0 -6
  748. package/js/src/pro/paradex.js +0 -6
  749. package/js/src/pro/phemex.js +0 -6
  750. package/js/src/pro/poloniex.js +0 -6
  751. package/js/src/pro/probit.js +0 -6
  752. package/js/src/pro/toobit.js +0 -6
  753. package/js/src/pro/upbit.js +0 -6
  754. package/js/src/pro/whitebit.js +0 -6
  755. package/js/src/pro/woo.js +0 -6
  756. package/js/src/pro/woofipro.js +0 -6
  757. package/js/src/pro/xt.d.ts +85 -2
  758. package/js/src/pro/xt.js +217 -10
  759. package/js/src/probit.js +0 -6
  760. package/js/src/protobuf/mexc/compiled.cjs +0 -6
  761. package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.d.ts +90 -0
  762. package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +157 -0
  763. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.d.ts +26 -0
  764. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.js +45 -0
  765. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.d.ts +48 -0
  766. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +79 -0
  767. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.d.ts +40 -0
  768. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +71 -0
  769. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.d.ts +162 -0
  770. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +323 -0
  771. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.d.ts +460 -0
  772. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +692 -0
  773. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.d.ts +127 -0
  774. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +280 -0
  775. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.d.ts +66 -0
  776. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.js +103 -0
  777. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.d.ts +127 -0
  778. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +251 -0
  779. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.d.ts +48 -0
  780. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.js +87 -0
  781. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.d.ts +23 -0
  782. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.js +37 -0
  783. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.d.ts +92 -0
  784. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.js +158 -0
  785. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.d.ts +124 -0
  786. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.js +190 -0
  787. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.d.ts +159 -0
  788. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.js +318 -0
  789. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.d.ts +546 -0
  790. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +866 -0
  791. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.d.ts +84 -0
  792. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +175 -0
  793. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.d.ts +397 -0
  794. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +751 -0
  795. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.d.ts +120 -0
  796. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +240 -0
  797. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.d.ts +79 -0
  798. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +141 -0
  799. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.d.ts +32 -0
  800. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.js +53 -0
  801. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.d.ts +34 -0
  802. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.js +60 -0
  803. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.d.ts +62 -0
  804. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +105 -0
  805. package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.d.ts +207 -0
  806. package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +44 -0
  807. package/js/src/static_dependencies/dydx-v4-client/helpers.d.ts +82 -0
  808. package/js/src/static_dependencies/dydx-v4-client/helpers.js +144 -0
  809. package/js/src/static_dependencies/dydx-v4-client/long/index.cjs +1467 -0
  810. package/js/src/static_dependencies/dydx-v4-client/long/index.d.cts +2 -0
  811. package/js/src/static_dependencies/dydx-v4-client/onboarding.d.ts +35 -0
  812. package/js/src/static_dependencies/dydx-v4-client/onboarding.js +50 -0
  813. package/js/src/static_dependencies/dydx-v4-client/registry.d.ts +7 -0
  814. package/js/src/static_dependencies/dydx-v4-client/registry.js +30 -0
  815. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  816. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  817. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  818. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  819. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  820. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  821. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  822. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  823. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  824. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  825. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  826. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  827. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  828. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  829. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  830. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  831. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  832. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  833. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  834. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  835. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  836. package/js/src/static_dependencies/ethers/index.js +0 -6
  837. package/js/src/static_dependencies/ethers/interface.js +0 -6
  838. package/js/src/static_dependencies/ethers/typed.js +0 -6
  839. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  840. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  841. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  842. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  843. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  844. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  845. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  846. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  847. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  848. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  849. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  850. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  851. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  852. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  853. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  854. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  855. package/js/src/static_dependencies/fflake/browser.js +0 -6
  856. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  857. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  858. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  859. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  860. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  861. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  862. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  863. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  864. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  865. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  866. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  867. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  868. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  869. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  870. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  871. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  872. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  873. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  874. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  875. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  876. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  877. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  878. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  879. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  880. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  881. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  882. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  883. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  884. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  885. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  886. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  887. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  888. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  889. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  890. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  891. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  892. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  893. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  894. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  895. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  896. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  897. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  898. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  899. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  900. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  901. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  902. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  903. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  904. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  905. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  906. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  907. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  908. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  909. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  910. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  911. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  912. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  913. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  914. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  915. package/js/src/static_dependencies/noble-hashes/utils.d.ts +1 -0
  916. package/js/src/static_dependencies/noble-hashes/utils.js +4 -6
  917. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  918. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  919. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  920. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  921. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  922. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  923. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  924. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  925. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  926. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  927. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  928. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  929. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  930. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  931. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  932. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  933. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  934. package/js/src/static_dependencies/qs/formats.js +0 -6
  935. package/js/src/static_dependencies/qs/index.js +0 -6
  936. package/js/src/static_dependencies/qs/parse.js +0 -6
  937. package/js/src/static_dependencies/qs/stringify.js +0 -6
  938. package/js/src/static_dependencies/qs/utils.js +0 -6
  939. package/js/src/static_dependencies/scure-base/index.js +0 -6
  940. package/js/src/static_dependencies/scure-bip32/index.d.ts +49 -0
  941. package/js/src/static_dependencies/scure-bip32/index.js +289 -0
  942. package/js/src/static_dependencies/scure-bip39/index.d.ts +54 -0
  943. package/js/src/static_dependencies/scure-bip39/index.js +134 -0
  944. package/js/src/static_dependencies/scure-bip39/wordlists/english.d.ts +1 -0
  945. package/js/src/static_dependencies/scure-bip39/wordlists/english.js +2048 -0
  946. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  947. package/js/src/static_dependencies/starknet/constants.js +0 -6
  948. package/js/src/static_dependencies/starknet/index.js +0 -6
  949. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  950. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  951. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  952. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  953. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  954. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  955. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  956. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  957. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  958. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  959. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  960. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  961. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  962. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  963. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  964. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  965. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  966. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  967. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  968. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  969. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  970. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  971. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  972. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  973. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  974. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  975. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  976. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  977. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  978. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  979. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  980. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  981. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  982. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  983. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  984. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  985. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  986. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  987. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  988. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  989. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  990. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  991. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  992. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  993. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  994. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  995. package/js/src/timex.js +0 -6
  996. package/js/src/tokocrypto.js +0 -6
  997. package/js/src/toobit.js +2 -7
  998. package/js/src/upbit.js +0 -6
  999. package/js/src/wavesexchange.js +0 -6
  1000. package/js/src/whitebit.js +0 -6
  1001. package/js/src/woo.js +0 -6
  1002. package/js/src/woofipro.js +0 -6
  1003. package/js/src/xt.js +0 -6
  1004. package/js/src/yobit.js +0 -6
  1005. package/js/src/zaif.js +0 -6
  1006. package/js/src/zonda.js +0 -6
  1007. package/package.json +9 -3
package/js/src/dydx.js ADDED
@@ -0,0 +1,2446 @@
1
+ // ---------------------------------------------------------------------------
2
+ import Exchange from './abstract/dydx.js';
3
+ import { ArgumentsRequired, NotSupported, ExchangeError, InsufficientFunds, InvalidOrder, BadRequest } from './base/errors.js';
4
+ import { TICK_SIZE } from './base/functions/number.js';
5
+ import Precise from './base/Precise.js';
6
+ import { keccak_256 as keccak } from './static_dependencies/noble-hashes/sha3.js';
7
+ import { secp256k1 } from './static_dependencies/noble-curves/secp256k1.js';
8
+ import { ecdsa } from './base/functions/crypto.js';
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * @class dydx
12
+ * @augments Exchange
13
+ */
14
+ export default class dydx extends Exchange {
15
+ describe() {
16
+ return this.deepExtend(super.describe(), {
17
+ 'id': 'dydx',
18
+ 'name': 'dYdX',
19
+ 'countries': ['US'],
20
+ 'rateLimit': 100,
21
+ 'version': 'v4',
22
+ 'certified': false,
23
+ 'pro': true,
24
+ 'has': {
25
+ 'CORS': undefined,
26
+ 'spot': false,
27
+ 'margin': false,
28
+ 'swap': true,
29
+ 'future': false,
30
+ 'option': false,
31
+ 'addMargin': false,
32
+ 'cancelAllOrders': false,
33
+ 'cancelAllOrdersAfter': false,
34
+ 'cancelOrder': true,
35
+ 'cancelOrders': true,
36
+ 'cancelWithdraw': false,
37
+ 'closeAllPositions': false,
38
+ 'closePosition': false,
39
+ 'createConvertTrade': false,
40
+ 'createDepositAddress': false,
41
+ 'createMarketBuyOrderWithCost': false,
42
+ 'createMarketOrder': false,
43
+ 'createMarketOrderWithCost': false,
44
+ 'createMarketSellOrderWithCost': false,
45
+ 'createOrder': true,
46
+ 'createOrderWithTakeProfitAndStopLoss': false,
47
+ 'createReduceOnlyOrder': false,
48
+ 'createStopLimitOrder': false,
49
+ 'createStopLossOrder': false,
50
+ 'createStopMarketOrder': false,
51
+ 'createStopOrder': false,
52
+ 'createTakeProfitOrder': false,
53
+ 'createTrailingAmountOrder': false,
54
+ 'createTrailingPercentOrder': false,
55
+ 'createTriggerOrder': false,
56
+ 'fetchAccounts': true,
57
+ 'fetchBalance': true,
58
+ 'fetchCanceledOrders': false,
59
+ 'fetchClosedOrder': false,
60
+ 'fetchClosedOrders': true,
61
+ 'fetchConvertCurrencies': false,
62
+ 'fetchConvertQuote': false,
63
+ 'fetchConvertTrade': false,
64
+ 'fetchConvertTradeHistory': false,
65
+ 'fetchCurrencies': false,
66
+ 'fetchDepositAddress': false,
67
+ 'fetchDepositAddresses': false,
68
+ 'fetchDepositAddressesByNetwork': false,
69
+ 'fetchDeposits': true,
70
+ 'fetchDepositsWithdrawals': true,
71
+ 'fetchFundingHistory': false,
72
+ 'fetchFundingInterval': false,
73
+ 'fetchFundingIntervals': false,
74
+ 'fetchFundingRate': false,
75
+ 'fetchFundingRateHistory': true,
76
+ 'fetchFundingRates': false,
77
+ 'fetchIndexOHLCV': false,
78
+ 'fetchLedger': true,
79
+ 'fetchLeverage': false,
80
+ 'fetchMarginAdjustmentHistory': false,
81
+ 'fetchMarginMode': false,
82
+ 'fetchMarkets': true,
83
+ 'fetchMarkOHLCV': false,
84
+ 'fetchMyTrades': false,
85
+ 'fetchOHLCV': true,
86
+ 'fetchOpenInterestHistory': false,
87
+ 'fetchOpenOrder': false,
88
+ 'fetchOpenOrders': true,
89
+ 'fetchOrder': true,
90
+ 'fetchOrderBook': true,
91
+ 'fetchOrders': true,
92
+ 'fetchOrderTrades': false,
93
+ 'fetchPosition': true,
94
+ 'fetchPositionHistory': false,
95
+ 'fetchPositionMode': false,
96
+ 'fetchPositions': true,
97
+ 'fetchPositionsHistory': false,
98
+ 'fetchPremiumIndexOHLCV': false,
99
+ 'fetchStatus': false,
100
+ 'fetchTicker': false,
101
+ 'fetchTickers': false,
102
+ 'fetchTime': true,
103
+ 'fetchTrades': true,
104
+ 'fetchTradingFee': false,
105
+ 'fetchTradingFees': false,
106
+ 'fetchTransactions': false,
107
+ 'fetchTransfers': true,
108
+ 'fetchWithdrawals': true,
109
+ 'reduceMargin': false,
110
+ 'sandbox': false,
111
+ 'setLeverage': false,
112
+ 'setMargin': false,
113
+ 'setPositionMode': false,
114
+ 'transfer': true,
115
+ 'withdraw': true,
116
+ },
117
+ 'timeframes': {
118
+ '1m': '1MIN',
119
+ '5m': '5MINS',
120
+ '15m': '15MINS',
121
+ '30m': '30MINS',
122
+ '1h': '1HOUR',
123
+ '4h': '4HOURS',
124
+ '1d': '1DAY',
125
+ },
126
+ 'urls': {
127
+ 'logo': 'https://github.com/user-attachments/assets/617ea0c1-f05a-4d26-9fcb-a0d1d4091ae1',
128
+ 'api': {
129
+ 'indexer': 'https://indexer.dydx.trade/v4',
130
+ 'nodeRpc': 'https://dydx-ops-rpc.kingnodes.com',
131
+ 'nodeRest': 'https://dydx-rest.publicnode.com',
132
+ },
133
+ 'test': {
134
+ 'indexer': 'https://indexer.v4testnet.dydx.exchange/v4',
135
+ 'nodeRpc': 'https://test-dydx-rpc.kingnodes.com',
136
+ 'nodeRest': 'https://test-dydx-rest.kingnodes.com',
137
+ },
138
+ 'www': 'https://www.dydx.xyz',
139
+ 'doc': [
140
+ 'https://docs.dydx.xyz',
141
+ ],
142
+ 'fees': [
143
+ 'https://docs.dydx.exchange/introduction-trading_fees',
144
+ ],
145
+ 'referral': 'dydx.trade?ref=ccxt',
146
+ },
147
+ 'api': {
148
+ 'indexer': {
149
+ 'get': {
150
+ 'addresses/{address}': 1,
151
+ 'addresses/{address}/parentSubaccountNumber/{number}': 1,
152
+ 'addresses/{address}/subaccountNumber/{subaccountNumber}': 1,
153
+ 'assetPositions': 1,
154
+ 'assetPositions/parentSubaccountNumber': 1,
155
+ 'candles/perpetualMarkets/{market}': 1,
156
+ 'compliance/screen/{address}': 1,
157
+ 'fills': 1,
158
+ 'fills/parentSubaccountNumber': 1,
159
+ 'fundingPayments': 1,
160
+ 'fundingPayments/parentSubaccount': 1,
161
+ 'height': 0.1,
162
+ 'historical-pnl': 1,
163
+ 'historical-pnl/parentSubaccountNumber': 1,
164
+ 'historicalBlockTradingRewards/{address}': 1,
165
+ 'historicalFunding/{market}': 1,
166
+ 'historicalTradingRewardAggregations/{address}': 1,
167
+ 'orderbooks/perpetualMarket/{market}': 1,
168
+ 'orders': 1,
169
+ 'orders/parentSubaccountNumber': 1,
170
+ 'orders/{orderId}': 1,
171
+ 'perpetualMarkets': 1,
172
+ 'perpetualPositions': 1,
173
+ 'perpetualPositions/parentSubaccountNumber': 1,
174
+ 'screen': 1,
175
+ 'sparklines': 1,
176
+ 'time': 1,
177
+ 'trades/perpetualMarket/{market}': 1,
178
+ 'transfers': 1,
179
+ 'transfers/between': 1,
180
+ 'transfers/parentSubaccountNumber': 1,
181
+ 'vault/v1/megavault/historicalPnl': 1,
182
+ 'vault/v1/megavault/positions': 1,
183
+ 'vault/v1/vaults/historicalPnl': 1,
184
+ //
185
+ 'perpetualMarketSparklines': 1,
186
+ 'perpetualMarkets/{ticker}': 1,
187
+ 'perpetualMarkets/{ticker}/orderbook': 1,
188
+ 'trades/perpetualMarket/{ticker}': 1,
189
+ 'historicalFunding/{ticker}': 1,
190
+ 'candles/{ticker}/{resolution}': 1,
191
+ 'addresses/{address}/subaccounts': 1,
192
+ 'addresses/{address}/subaccountNumber/{subaccountNumber}/assetPositions': 1,
193
+ 'addresses/{address}/subaccountNumber/{subaccountNumber}/perpetualPositions': 1,
194
+ 'addresses/{address}/subaccountNumber/{subaccountNumber}/orders': 1,
195
+ 'fills/parentSubaccount': 1,
196
+ 'historical-pnl/parentSubaccount': 1,
197
+ },
198
+ },
199
+ 'nodeRpc': {
200
+ 'get': {
201
+ 'abci_info': 1,
202
+ 'block': 1,
203
+ 'broadcast_tx_async': 1,
204
+ 'broadcast_tx_sync': 1,
205
+ 'tx': 1,
206
+ },
207
+ },
208
+ 'nodeRest': {
209
+ 'get': {
210
+ 'cosmos/auth/v1beta1/account_info/{dydxAddress}': 1,
211
+ },
212
+ 'post': {
213
+ 'cosmos/tx/v1beta1/encode': 1,
214
+ 'cosmos/tx/v1beta1/simulate': 1,
215
+ },
216
+ },
217
+ },
218
+ 'fees': {
219
+ 'trading': {
220
+ 'tierBased': true,
221
+ 'percentage': true,
222
+ 'maker': this.parseNumber('0.0001'),
223
+ 'taker': this.parseNumber('0.0005'),
224
+ },
225
+ },
226
+ 'requiredCredentials': {
227
+ 'apiKey': false,
228
+ 'secret': false,
229
+ 'privateKey': false,
230
+ },
231
+ 'options': {
232
+ 'mnemonic': undefined,
233
+ 'chainName': 'dydx-mainnet-1',
234
+ 'chainId': 1,
235
+ 'sandboxMode': false,
236
+ 'defaultFeeDenom': 'uusdc',
237
+ 'defaultFeeMultiplier': '1.6',
238
+ 'feeDenom': {
239
+ 'USDC_DENOM': 'ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5',
240
+ 'USDC_GAS_DENOM': 'uusdc',
241
+ 'USDC_DECIMALS': 6,
242
+ 'USDC_GAS_PRICE': '0.025',
243
+ 'CHAINTOKEN_DENOM': 'adydx',
244
+ 'CHAINTOKEN_DECIMALS': 18,
245
+ 'CHAINTOKEN_GAS_PRICE': '25000000000',
246
+ },
247
+ },
248
+ 'features': {
249
+ 'default': {
250
+ 'sandbox': true,
251
+ 'createOrder': {
252
+ 'marginMode': false,
253
+ 'triggerPrice': true,
254
+ 'triggerPriceType': {
255
+ 'last': true,
256
+ 'mark': true,
257
+ 'index': false,
258
+ },
259
+ 'triggerDirection': false,
260
+ 'stopLossPrice': false,
261
+ 'takeProfitPrice': false,
262
+ 'attachedStopLossTakeProfit': undefined,
263
+ 'timeInForce': {
264
+ 'IOC': true,
265
+ 'FOK': true,
266
+ 'PO': true,
267
+ 'GTD': true,
268
+ },
269
+ 'hedged': false,
270
+ 'trailing': false,
271
+ 'leverage': false,
272
+ 'marketBuyByCost': false,
273
+ 'marketBuyRequiresPrice': false,
274
+ 'selfTradePrevention': false,
275
+ 'iceberg': false,
276
+ },
277
+ 'createOrders': undefined,
278
+ 'fetchMyTrades': {
279
+ 'marginMode': false,
280
+ 'limit': 500,
281
+ 'daysBack': 90,
282
+ 'untilDays': 10000,
283
+ 'symbolRequired': false,
284
+ },
285
+ 'fetchOrder': {
286
+ 'marginMode': false,
287
+ 'trigger': true,
288
+ 'trailing': false,
289
+ 'symbolRequired': false,
290
+ },
291
+ 'fetchOpenOrders': {
292
+ 'marginMode': false,
293
+ 'limit': 500,
294
+ 'trigger': true,
295
+ 'trailing': true,
296
+ 'symbolRequired': false,
297
+ },
298
+ 'fetchOrders': {
299
+ 'marginMode': false,
300
+ 'limit': 500,
301
+ 'daysBack': undefined,
302
+ 'untilDays': 100000,
303
+ 'trigger': true,
304
+ 'trailing': true,
305
+ 'symbolRequired': false,
306
+ },
307
+ 'fetchClosedOrders': {
308
+ 'marginMode': false,
309
+ 'limit': 500,
310
+ 'daysBack': undefined,
311
+ 'daysBackCanceled': undefined,
312
+ 'untilDays': 100000,
313
+ 'trigger': true,
314
+ 'trailing': true,
315
+ 'symbolRequired': false,
316
+ },
317
+ 'fetchOHLCV': {
318
+ 'limit': 1000,
319
+ },
320
+ },
321
+ 'forSwap': {
322
+ 'extends': 'default',
323
+ 'createOrder': {
324
+ 'hedged': true,
325
+ },
326
+ },
327
+ 'swap': {
328
+ 'linear': {
329
+ 'extends': 'forSwap',
330
+ },
331
+ 'inverse': undefined,
332
+ },
333
+ 'future': {
334
+ 'linear': undefined,
335
+ 'inverse': undefined,
336
+ },
337
+ },
338
+ 'commonCurrencies': {},
339
+ 'exceptions': {
340
+ 'exact': {
341
+ // error collision for clob and sending modules from 2 - 8
342
+ // https://github.com/dydxprotocol/v4-chain/blob/5f9f6c9b95cc87d732e23de764909703b81a6e8b/protocol/x/clob/types/errors.go#L320
343
+ // https://github.com/dydxprotocol/v4-chain/blob/5f9f6c9b95cc87d732e23de764909703b81a6e8b/protocol/x/sending/types/errors.go
344
+ '9': InvalidOrder,
345
+ '10': InvalidOrder,
346
+ '11': InvalidOrder,
347
+ '12': InvalidOrder,
348
+ '13': InvalidOrder,
349
+ '14': InvalidOrder,
350
+ '15': InvalidOrder,
351
+ '16': InvalidOrder,
352
+ '17': InvalidOrder,
353
+ '18': InvalidOrder,
354
+ '19': InvalidOrder,
355
+ '20': InvalidOrder,
356
+ '21': InvalidOrder,
357
+ '22': InvalidOrder,
358
+ '23': InvalidOrder,
359
+ '24': InvalidOrder,
360
+ '25': InvalidOrder,
361
+ '26': InvalidOrder,
362
+ '27': InvalidOrder,
363
+ '28': InvalidOrder,
364
+ '29': InvalidOrder,
365
+ '30': InvalidOrder,
366
+ '31': InvalidOrder,
367
+ '32': InvalidOrder,
368
+ '33': InvalidOrder,
369
+ '34': InvalidOrder,
370
+ '35': InvalidOrder,
371
+ '36': InvalidOrder,
372
+ '37': InvalidOrder,
373
+ '39': InvalidOrder,
374
+ '40': InvalidOrder,
375
+ '41': InvalidOrder,
376
+ '42': InvalidOrder,
377
+ '43': InvalidOrder,
378
+ '44': InvalidOrder,
379
+ '45': InvalidOrder,
380
+ '46': InvalidOrder,
381
+ '47': InvalidOrder,
382
+ '48': InvalidOrder,
383
+ '49': InvalidOrder,
384
+ '50': InvalidOrder,
385
+ '1000': BadRequest,
386
+ '1001': BadRequest,
387
+ '1002': BadRequest,
388
+ '1003': InvalidOrder,
389
+ '1004': InvalidOrder,
390
+ '1005': InvalidOrder,
391
+ '1006': InvalidOrder,
392
+ '1007': InvalidOrder,
393
+ '1008': InvalidOrder,
394
+ '1009': InvalidOrder,
395
+ '1010': InvalidOrder,
396
+ '1011': InvalidOrder,
397
+ '1012': InvalidOrder,
398
+ '1013': InvalidOrder,
399
+ '1014': InvalidOrder,
400
+ '1015': InvalidOrder,
401
+ '1017': InvalidOrder,
402
+ '1018': InvalidOrder,
403
+ '1019': InvalidOrder,
404
+ '1020': InvalidOrder,
405
+ '1021': InvalidOrder,
406
+ '1022': InvalidOrder,
407
+ '2000': InvalidOrder,
408
+ '2001': InvalidOrder,
409
+ '2002': InvalidOrder,
410
+ '2003': InvalidOrder,
411
+ '2004': InvalidOrder,
412
+ '2005': InvalidOrder,
413
+ '3000': InvalidOrder,
414
+ '3001': InvalidOrder,
415
+ '3002': InvalidOrder,
416
+ '3003': InvalidOrder,
417
+ '3004': InvalidOrder,
418
+ '3005': InvalidOrder,
419
+ '3006': InvalidOrder,
420
+ '3007': InvalidOrder,
421
+ '3008': InvalidOrder,
422
+ '3009': InvalidOrder,
423
+ '3010': InvalidOrder,
424
+ '4000': InvalidOrder,
425
+ '4001': InvalidOrder,
426
+ '4002': InvalidOrder,
427
+ '4003': InvalidOrder,
428
+ '4004': InvalidOrder,
429
+ '4005': InvalidOrder,
430
+ '4006': InvalidOrder,
431
+ '4007': InvalidOrder,
432
+ '4008': InvalidOrder,
433
+ '5000': InvalidOrder,
434
+ '5001': InvalidOrder,
435
+ '6000': InvalidOrder,
436
+ '6001': InvalidOrder,
437
+ '6002': InvalidOrder,
438
+ '9000': InvalidOrder,
439
+ '9001': InvalidOrder,
440
+ '9002': InvalidOrder,
441
+ '9003': InvalidOrder,
442
+ '10000': InvalidOrder,
443
+ '10001': InvalidOrder,
444
+ '11000': InvalidOrder, // Invalid order router address
445
+ },
446
+ 'broad': {
447
+ 'insufficient funds': InsufficientFunds,
448
+ },
449
+ },
450
+ 'precisionMode': TICK_SIZE,
451
+ });
452
+ }
453
+ /**
454
+ * @method
455
+ * @name dydx#fetchTime
456
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
457
+ * @see https://docs.dydx.xyz/indexer-client/http#get-time
458
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
459
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
460
+ */
461
+ async fetchTime(params = {}) {
462
+ const response = await this.indexerGetTime(params);
463
+ //
464
+ // {
465
+ // "iso": "2025-07-20T15:12:13.466Z",
466
+ // "epoch": 1753024333.466
467
+ // }
468
+ //
469
+ return this.safeInteger(response, 'epoch');
470
+ }
471
+ parseMarket(market) {
472
+ //
473
+ // {
474
+ // "clobPairId": "0",
475
+ // "ticker": "BTC-USD",
476
+ // "status": "ACTIVE",
477
+ // "oraclePrice": "118976.5376",
478
+ // "priceChange24H": "659.9736",
479
+ // "volume24H": "1292729.3605",
480
+ // "trades24H": 9387,
481
+ // "nextFundingRate": "0",
482
+ // "initialMarginFraction": "0.02",
483
+ // "maintenanceMarginFraction": "0.012",
484
+ // "openInterest": "52.0691",
485
+ // "atomicResolution": -10,
486
+ // "quantumConversionExponent": -9,
487
+ // "tickSize": "1",
488
+ // "stepSize": "0.0001",
489
+ // "stepBaseQuantums": 1000000,
490
+ // "subticksPerTick": 100000,
491
+ // "marketType": "CROSS",
492
+ // "openInterestLowerCap": "0",
493
+ // "openInterestUpperCap": "0",
494
+ // "baseOpenInterest": "50.3776",
495
+ // "defaultFundingRate1H": "0"
496
+ // }
497
+ //
498
+ const quoteId = 'USDC';
499
+ const marketId = this.safeString(market, 'ticker');
500
+ const parts = marketId.split('-');
501
+ const baseName = this.safeString(parts, 0);
502
+ const base = this.safeCurrencyCode(baseName);
503
+ const quote = this.safeCurrencyCode(quoteId);
504
+ const baseId = this.safeString(market, 'baseId');
505
+ const settleId = 'USDC';
506
+ const settle = this.safeCurrencyCode(settleId);
507
+ const symbol = base + '/' + quote + ':' + settle;
508
+ const contract = true;
509
+ const swap = true;
510
+ const amountPrecisionStr = this.safeString(market, 'stepSize');
511
+ const pricePrecisionStr = this.safeString(market, 'tickSize');
512
+ const status = this.safeString(market, 'status');
513
+ let active = true;
514
+ if (status !== 'ACTIVE') {
515
+ active = false;
516
+ }
517
+ return this.safeMarketStructure({
518
+ 'id': this.safeString(market, 'ticker'),
519
+ 'symbol': symbol,
520
+ 'base': base,
521
+ 'quote': quote,
522
+ 'settle': settle,
523
+ 'baseId': baseId,
524
+ 'baseName': baseName,
525
+ 'quoteId': quoteId,
526
+ 'settleId': settleId,
527
+ 'type': 'swap',
528
+ 'spot': false,
529
+ 'margin': undefined,
530
+ 'swap': swap,
531
+ 'future': false,
532
+ 'option': false,
533
+ 'active': active,
534
+ 'contract': contract,
535
+ 'linear': true,
536
+ 'inverse': false,
537
+ 'taker': undefined,
538
+ 'maker': undefined,
539
+ 'contractSize': undefined,
540
+ 'expiry': undefined,
541
+ 'expiryDatetime': undefined,
542
+ 'strike': undefined,
543
+ 'optionType': undefined,
544
+ 'precision': {
545
+ 'amount': this.parseNumber(amountPrecisionStr),
546
+ 'price': this.parseNumber(pricePrecisionStr),
547
+ },
548
+ 'limits': {
549
+ 'leverage': {
550
+ 'min': undefined,
551
+ 'max': undefined,
552
+ },
553
+ 'amount': {
554
+ 'min': undefined,
555
+ 'max': undefined,
556
+ },
557
+ 'price': {
558
+ 'min': undefined,
559
+ 'max': undefined,
560
+ },
561
+ 'cost': {
562
+ 'min': undefined,
563
+ 'max': undefined,
564
+ },
565
+ },
566
+ 'created': undefined,
567
+ 'info': market,
568
+ });
569
+ }
570
+ /**
571
+ * @method
572
+ * @name dydx#fetchMarkets
573
+ * @description retrieves data on all markets for hyperliquid
574
+ * @see https://docs.dydx.xyz/indexer-client/http#get-perpetual-markets
575
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
576
+ * @returns {object[]} an array of objects representing market data
577
+ */
578
+ async fetchMarkets(params = {}) {
579
+ const request = {
580
+ // 'limit': 1000,
581
+ };
582
+ const response = await this.indexerGetPerpetualMarkets(this.extend(request, params));
583
+ //
584
+ // {
585
+ // "markets": {
586
+ // "BTC-USD": {
587
+ // "clobPairId": "0",
588
+ // "ticker": "BTC-USD",
589
+ // "status": "ACTIVE",
590
+ // "oraclePrice": "118976.5376",
591
+ // "priceChange24H": "659.9736",
592
+ // "volume24H": "1292729.3605",
593
+ // "trades24H": 9387,
594
+ // "nextFundingRate": "0",
595
+ // "initialMarginFraction": "0.02",
596
+ // "maintenanceMarginFraction": "0.012",
597
+ // "openInterest": "52.0691",
598
+ // "atomicResolution": -10,
599
+ // "quantumConversionExponent": -9,
600
+ // "tickSize": "1",
601
+ // "stepSize": "0.0001",
602
+ // "stepBaseQuantums": 1000000,
603
+ // "subticksPerTick": 100000,
604
+ // "marketType": "CROSS",
605
+ // "openInterestLowerCap": "0",
606
+ // "openInterestUpperCap": "0",
607
+ // "baseOpenInterest": "50.3776",
608
+ // "defaultFundingRate1H": "0"
609
+ // }
610
+ // }
611
+ // }
612
+ //
613
+ const data = this.safeDict(response, 'markets', {});
614
+ const markets = Object.values(data);
615
+ return this.parseMarkets(markets);
616
+ }
617
+ parseTrade(trade, market = undefined) {
618
+ //
619
+ // {
620
+ // "id": "02ac5b1f0000000200000002",
621
+ // "side": "BUY",
622
+ // "size": "0.0501",
623
+ // "price": "115732",
624
+ // "type": "LIMIT",
625
+ // "createdAt": "2025-07-25T05:11:09.800Z",
626
+ // "createdAtHeight": "44849951"
627
+ // }
628
+ //
629
+ const timestamp = this.parse8601(this.safeString(trade, 'createdAt'));
630
+ const symbol = market['symbol'];
631
+ const price = this.safeString(trade, 'price');
632
+ const amount = this.safeString(trade, 'size');
633
+ const side = this.safeStringLower(trade, 'side');
634
+ const id = this.safeString(trade, 'id');
635
+ return this.safeTrade({
636
+ 'id': id,
637
+ 'timestamp': timestamp,
638
+ 'datetime': this.iso8601(timestamp),
639
+ 'symbol': symbol,
640
+ 'side': side,
641
+ 'price': price,
642
+ 'amount': amount,
643
+ 'cost': undefined,
644
+ 'order': undefined,
645
+ 'takerOrMaker': undefined,
646
+ 'type': undefined,
647
+ 'fee': undefined,
648
+ 'info': trade,
649
+ }, market);
650
+ }
651
+ /**
652
+ * @method
653
+ * @name dydx#fetchTrades
654
+ * @description get the list of most recent trades for a particular symbol
655
+ * @see https://developer.woox.io/api-reference/endpoint/public_data/marketTrades
656
+ * @param {string} symbol unified symbol of the market to fetch trades for
657
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
658
+ * @param {int} [limit] the maximum amount of trades to fetch
659
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
660
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
661
+ */
662
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
663
+ await this.loadMarkets();
664
+ const market = this.market(symbol);
665
+ const request = {
666
+ 'market': market['id'],
667
+ };
668
+ if (limit !== undefined) {
669
+ request['limit'] = limit;
670
+ }
671
+ const response = await this.indexerGetTradesPerpetualMarketMarket(this.extend(request, params));
672
+ //
673
+ // {
674
+ // "trades": [
675
+ // {
676
+ // "id": "02ac5b1f0000000200000002",
677
+ // "side": "BUY",
678
+ // "size": "0.0501",
679
+ // "price": "115732",
680
+ // "type": "LIMIT",
681
+ // "createdAt": "2025-07-25T05:11:09.800Z",
682
+ // "createdAtHeight": "44849951"
683
+ // }
684
+ // ]
685
+ // }
686
+ //
687
+ const rows = this.safeList(response, 'trades', []);
688
+ return this.parseTrades(rows, market, since, limit);
689
+ }
690
+ parseOHLCV(ohlcv, market = undefined) {
691
+ //
692
+ // {
693
+ // "startedAt": "2025-07-25T09:47:00.000Z",
694
+ // "ticker": "BTC-USD",
695
+ // "resolution": "1MIN",
696
+ // "low": "116099",
697
+ // "high": "116099",
698
+ // "open": "116099",
699
+ // "close": "116099",
700
+ // "baseTokenVolume": "0",
701
+ // "usdVolume": "0",
702
+ // "trades": 0,
703
+ // "startingOpenInterest": "54.0594",
704
+ // "orderbookMidPriceOpen": "115845.5",
705
+ // "orderbookMidPriceClose": "115845.5"
706
+ // }
707
+ //
708
+ return [
709
+ this.parse8601(this.safeString(ohlcv, 'startedAt')),
710
+ this.safeNumber(ohlcv, 'open'),
711
+ this.safeNumber(ohlcv, 'high'),
712
+ this.safeNumber(ohlcv, 'low'),
713
+ this.safeNumber(ohlcv, 'close'),
714
+ this.safeNumber(ohlcv, 'baseTokenVolume'),
715
+ ];
716
+ }
717
+ /**
718
+ * @method
719
+ * @name dydx#fetchOHLCV
720
+ * @see https://docs.dydx.xyz/indexer-client/http#get-candles
721
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
722
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
723
+ * @param {string} timeframe the length of time each candle represents
724
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
725
+ * @param {int} [limit] the maximum amount of candles to fetch
726
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
727
+ * @param {int} [params.until] the latest time in ms to fetch entries for
728
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
729
+ */
730
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
731
+ await this.loadMarkets();
732
+ const market = this.market(symbol);
733
+ const request = {
734
+ 'market': market['id'],
735
+ 'resolution': this.safeString(this.timeframes, timeframe, timeframe),
736
+ };
737
+ if (limit !== undefined) {
738
+ request['limit'] = Math.min(limit, 1000);
739
+ }
740
+ if (since !== undefined) {
741
+ request['fromIso'] = this.iso8601(since);
742
+ }
743
+ const until = this.safeInteger(params, 'until');
744
+ params = this.omit(params, 'until');
745
+ if (until !== undefined) {
746
+ request['toIso'] = this.iso8601(until);
747
+ }
748
+ const response = await this.indexerGetCandlesPerpetualMarketsMarket(this.extend(request, params));
749
+ //
750
+ // {
751
+ // "candles": [
752
+ // {
753
+ // "startedAt": "2025-07-25T09:47:00.000Z",
754
+ // "ticker": "BTC-USD",
755
+ // "resolution": "1MIN",
756
+ // "low": "116099",
757
+ // "high": "116099",
758
+ // "open": "116099",
759
+ // "close": "116099",
760
+ // "baseTokenVolume": "0",
761
+ // "usdVolume": "0",
762
+ // "trades": 0,
763
+ // "startingOpenInterest": "54.0594",
764
+ // "orderbookMidPriceOpen": "115845.5",
765
+ // "orderbookMidPriceClose": "115845.5"
766
+ // }
767
+ // ]
768
+ // }
769
+ //
770
+ const rows = this.safeList(response, 'candles', []);
771
+ return this.parseOHLCVs(rows, market, timeframe, since, limit);
772
+ }
773
+ /**
774
+ * @method
775
+ * @name dydx#fetchFundingRateHistory
776
+ * @description fetches historical funding rate prices
777
+ * @see https://docs.dydx.xyz/indexer-client/http#get-historical-funding
778
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
779
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
780
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
781
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
782
+ * @param {int} [params.until] timestamp in ms of the latest funding rate
783
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
784
+ */
785
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
786
+ if (symbol === undefined) {
787
+ throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
788
+ }
789
+ await this.loadMarkets();
790
+ const market = this.market(symbol);
791
+ const request = {
792
+ 'market': market['id'],
793
+ };
794
+ if (limit !== undefined) {
795
+ request['limit'] = limit;
796
+ }
797
+ const until = this.safeInteger(params, 'until');
798
+ if (until !== undefined) {
799
+ request['effectiveBeforeOrAt'] = this.iso8601(until);
800
+ }
801
+ const response = await this.indexerGetHistoricalFundingMarket(this.extend(request, params));
802
+ //
803
+ // {
804
+ // "historicalFunding": [
805
+ // {
806
+ // "ticker": "BTC-USD",
807
+ // "rate": "0",
808
+ // "price": "116302.62419",
809
+ // "effectiveAtHeight": "44865196",
810
+ // "effectiveAt": "2025-07-25T11:00:00.013Z"
811
+ // }
812
+ // ]
813
+ // }
814
+ //
815
+ const rates = [];
816
+ const rows = this.safeList(response, 'historicalFunding', []);
817
+ for (let i = 0; i < rows.length; i++) {
818
+ const entry = rows[i];
819
+ const timestamp = this.parse8601(this.safeString(entry, 'effectiveAt'));
820
+ const marketId = this.safeString(entry, 'ticker');
821
+ rates.push({
822
+ 'info': entry,
823
+ 'symbol': this.safeSymbol(marketId, market),
824
+ 'fundingRate': this.safeNumber(entry, 'rate'),
825
+ 'timestamp': timestamp,
826
+ 'datetime': this.iso8601(timestamp),
827
+ });
828
+ }
829
+ const sorted = this.sortBy(rates, 'timestamp');
830
+ return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
831
+ }
832
+ handlePublicAddress(methodName, params) {
833
+ let userAux = undefined;
834
+ [userAux, params] = this.handleOptionAndParams(params, methodName, 'user');
835
+ let user = userAux;
836
+ [user, params] = this.handleOptionAndParams(params, methodName, 'address', userAux);
837
+ if ((user !== undefined) && (user !== '')) {
838
+ return [user, params];
839
+ }
840
+ if ((this.walletAddress !== undefined) && (this.walletAddress !== '')) {
841
+ return [this.walletAddress, params];
842
+ }
843
+ throw new ArgumentsRequired(this.id + ' ' + methodName + '() requires a user parameter inside \'params\' or the walletAddress set');
844
+ }
845
+ parseOrder(order, market = undefined) {
846
+ //
847
+ // {
848
+ // "id": "dad46410-3444-5566-a129-19a619300fb7",
849
+ // "subaccountId": "8586bcf6-1f58-5ec9-a0bc-e53db273e7b0",
850
+ // "clientId": "716238006",
851
+ // "clobPairId": "0",
852
+ // "side": "BUY",
853
+ // "size": "0.001",
854
+ // "totalFilled": "0.001",
855
+ // "price": "400000",
856
+ // "type": "LIMIT",
857
+ // "status": "FILLED",
858
+ // "timeInForce": "GTT",
859
+ // "reduceOnly": false,
860
+ // "orderFlags": "64",
861
+ // "goodTilBlockTime": "2025-07-28T12:07:33.000Z",
862
+ // "createdAtHeight": "45058325",
863
+ // "clientMetadata": "2",
864
+ // "updatedAt": "2025-07-28T12:06:35.330Z",
865
+ // "updatedAtHeight": "45058326",
866
+ // "postOnly": false,
867
+ // "ticker": "BTC-USD",
868
+ // "subaccountNumber": 0
869
+ // }
870
+ //
871
+ const status = this.parseOrderStatus(this.safeStringUpper(order, 'status'));
872
+ const marketId = this.safeString(order, 'ticker');
873
+ const symbol = this.safeSymbol(marketId, market);
874
+ const filled = this.safeString(order, 'totalFilled');
875
+ const timestamp = this.parse8601(this.safeString(order, 'updatedAt'));
876
+ const price = this.safeString(order, 'price');
877
+ const amount = this.safeString(order, 'size');
878
+ const type = this.parseOrderType(this.safeStringUpper(order, 'type'));
879
+ const side = this.safeStringLower(order, 'side');
880
+ const timeInForce = this.safeStringUpper(order, 'timeInForce');
881
+ return this.safeOrder({
882
+ 'info': order,
883
+ 'id': this.safeString(order, 'id'),
884
+ 'clientOrderId': this.safeString(order, 'clientId'),
885
+ 'timestamp': timestamp,
886
+ 'datetime': this.iso8601(timestamp),
887
+ 'lastTradeTimestamp': undefined,
888
+ 'lastUpdateTimestamp': timestamp,
889
+ 'symbol': symbol,
890
+ 'type': type,
891
+ 'timeInForce': timeInForce,
892
+ 'postOnly': this.safeBool(order, 'postOnly'),
893
+ 'reduceOnly': this.safeBool(order, 'reduceOnly'),
894
+ 'side': side,
895
+ 'price': price,
896
+ 'triggerPrice': undefined,
897
+ 'amount': amount,
898
+ 'cost': undefined,
899
+ 'average': undefined,
900
+ 'filled': filled,
901
+ 'remaining': undefined,
902
+ 'status': status,
903
+ 'fee': undefined,
904
+ 'trades': undefined,
905
+ }, market);
906
+ }
907
+ parseOrderStatus(status) {
908
+ const statuses = {
909
+ 'UNTRIGGERED': 'open',
910
+ 'OPEN': 'open',
911
+ 'FILLED': 'closed',
912
+ 'CANCELED': 'canceled',
913
+ 'BEST_EFFORT_CANCELED': 'canceling',
914
+ };
915
+ return this.safeString(statuses, status, status);
916
+ }
917
+ parseOrderType(type) {
918
+ const types = {
919
+ 'LIMIT': 'LIMIT',
920
+ 'STOP_LIMIT': 'LIMIT',
921
+ 'TAKE_PROFIT_LIMIT': 'LIMIT',
922
+ 'MARKET': 'MARKET',
923
+ 'STOP_MARKET': 'MARKET',
924
+ 'TAKE_PROFIT_MARKET': 'MARKET',
925
+ 'TRAILING_STOP': 'MARKET',
926
+ };
927
+ return this.safeStringUpper(types, type, type);
928
+ }
929
+ /**
930
+ * @method
931
+ * @name dydx#fetchOrder
932
+ * @description fetches information on an order made by the user
933
+ * @see https://docs.dydx.xyz/indexer-client/http#get-order
934
+ * @param {string} id the order id
935
+ * @param {string} symbol unified symbol of the market the order was made in
936
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
937
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
938
+ */
939
+ async fetchOrder(id, symbol = undefined, params = {}) {
940
+ await this.loadMarkets();
941
+ const request = {
942
+ 'orderId': id,
943
+ };
944
+ const order = await this.indexerGetOrdersOrderId(this.extend(request, params));
945
+ return this.parseOrder(order);
946
+ }
947
+ /**
948
+ * @method
949
+ * @name dydx#fetchOrders
950
+ * @description fetches information on multiple orders made by the user
951
+ * @see https://docs.dydx.xyz/indexer-client/http#list-orders
952
+ * @param {string} symbol unified market symbol of the market orders were made in
953
+ * @param {int} [since] the earliest time in ms to fetch orders for
954
+ * @param {int} [limit] the maximum number of order structures to retrieve
955
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
956
+ * @param {string} [params.address] wallet address that made trades
957
+ * @param {string} [params.subAccountNumber] sub account number
958
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
959
+ */
960
+ async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
961
+ let userAddress = undefined;
962
+ let subAccountNumber = undefined;
963
+ [userAddress, params] = this.handlePublicAddress('fetchOrders', params);
964
+ [subAccountNumber, params] = this.handleOptionAndParams(params, 'fetchOrders', 'subAccountNumber', '0');
965
+ await this.loadMarkets();
966
+ const request = {
967
+ 'address': userAddress,
968
+ 'subaccountNumber': subAccountNumber,
969
+ };
970
+ let market = undefined;
971
+ if (symbol !== undefined) {
972
+ market = this.market(symbol);
973
+ request['ticker'] = market['id'];
974
+ }
975
+ if (limit !== undefined) {
976
+ request['limit'] = limit;
977
+ }
978
+ const response = await this.indexerGetOrders(this.extend(request, params));
979
+ //
980
+ // [
981
+ // {
982
+ // "id": "dad46410-3444-5566-a129-19a619300fb7",
983
+ // "subaccountId": "8586bcf6-1f58-5ec9-a0bc-e53db273e7b0",
984
+ // "clientId": "716238006",
985
+ // "clobPairId": "0",
986
+ // "side": "BUY",
987
+ // "size": "0.001",
988
+ // "totalFilled": "0.001",
989
+ // "price": "400000",
990
+ // "type": "LIMIT",
991
+ // "status": "FILLED",
992
+ // "timeInForce": "GTT",
993
+ // "reduceOnly": false,
994
+ // "orderFlags": "64",
995
+ // "goodTilBlockTime": "2025-07-28T12:07:33.000Z",
996
+ // "createdAtHeight": "45058325",
997
+ // "clientMetadata": "2",
998
+ // "updatedAt": "2025-07-28T12:06:35.330Z",
999
+ // "updatedAtHeight": "45058326",
1000
+ // "postOnly": false,
1001
+ // "ticker": "BTC-USD",
1002
+ // "subaccountNumber": 0
1003
+ // }
1004
+ // ]
1005
+ //
1006
+ return this.parseOrders(response, market, since, limit);
1007
+ }
1008
+ /**
1009
+ * @method
1010
+ * @name dydx#fetchOpenOrders
1011
+ * @description fetch all unfilled currently open orders
1012
+ * @see https://docs.dydx.xyz/indexer-client/http#list-orders
1013
+ * @param {string} symbol unified market symbol of the market orders were made in
1014
+ * @param {int} [since] the earliest time in ms to fetch orders for
1015
+ * @param {int} [limit] the maximum number of order structures to retrieve
1016
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1017
+ * @param {string} [params.address] wallet address that made trades
1018
+ * @param {string} [params.subAccountNumber] sub account number
1019
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1020
+ */
1021
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1022
+ const request = {
1023
+ 'status': 'OPEN', // ['OPEN', 'FILLED', 'CANCELED', 'BEST_EFFORT_CANCELED', 'UNTRIGGERED', 'BEST_EFFORT_OPENED']
1024
+ };
1025
+ return await this.fetchOrders(symbol, since, limit, this.extend(request, params));
1026
+ }
1027
+ /**
1028
+ * @method
1029
+ * @name dydx#fetchClosedOrders
1030
+ * @description fetches information on multiple closed orders made by the user
1031
+ * @see https://docs.dydx.xyz/indexer-client/http#list-orders
1032
+ * @param {string} symbol unified market symbol of the market orders were made in
1033
+ * @param {int} [since] the earliest time in ms to fetch orders for
1034
+ * @param {int} [limit] the maximum number of order structures to retrieve
1035
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1036
+ * @param {string} [params.address] wallet address that made trades
1037
+ * @param {string} [params.subAccountNumber] sub account number
1038
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1039
+ */
1040
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1041
+ const request = {
1042
+ 'status': 'FILLED', // ['OPEN', 'FILLED', 'CANCELED', 'BEST_EFFORT_CANCELED', 'UNTRIGGERED', 'BEST_EFFORT_OPENED']
1043
+ };
1044
+ return await this.fetchOrders(symbol, since, limit, this.extend(request, params));
1045
+ }
1046
+ parsePosition(position, market = undefined) {
1047
+ //
1048
+ // {
1049
+ // "market": "BTC-USD",
1050
+ // "status": "OPEN",
1051
+ // "side": "SHORT",
1052
+ // "size": "-0.407",
1053
+ // "maxSize": "-0.009",
1054
+ // "entryPrice": "118692.04840909090909090909",
1055
+ // "exitPrice": "119526.565625",
1056
+ // "realizedPnl": "476.42665909090909090909088",
1057
+ // "unrealizedPnl": "-57.26681734000000000000037",
1058
+ // "createdAt": "2025-07-14T07:53:55.631Z",
1059
+ // "createdAtHeight": "44140908",
1060
+ // "closedAt": null,
1061
+ // "sumOpen": "0.44",
1062
+ // "sumClose": "0.032",
1063
+ // "netFunding": "503.13121",
1064
+ // "subaccountNumber": 0
1065
+ // }
1066
+ //
1067
+ const marketId = this.safeString(position, 'market');
1068
+ market = this.safeMarket(marketId, market);
1069
+ const symbol = market['symbol'];
1070
+ const side = this.safeStringLower(position, 'side');
1071
+ let quantity = this.safeString(position, 'size');
1072
+ if (side !== 'long') {
1073
+ quantity = Precise.stringMul('-1', quantity);
1074
+ }
1075
+ const timestamp = this.parse8601(this.safeString(position, 'createdAt'));
1076
+ return this.safePosition({
1077
+ 'info': position,
1078
+ 'id': undefined,
1079
+ 'symbol': symbol,
1080
+ 'entryPrice': this.safeNumber(position, 'entryPrice'),
1081
+ 'markPrice': undefined,
1082
+ 'notional': undefined,
1083
+ 'collateral': undefined,
1084
+ 'unrealizedPnl': this.safeNumber(position, 'unrealizedPnl'),
1085
+ 'side': side,
1086
+ 'contracts': this.parseNumber(quantity),
1087
+ 'contractSize': undefined,
1088
+ 'timestamp': timestamp,
1089
+ 'datetime': this.iso8601(timestamp),
1090
+ 'hedged': undefined,
1091
+ 'maintenanceMargin': undefined,
1092
+ 'maintenanceMarginPercentage': undefined,
1093
+ 'initialMargin': undefined,
1094
+ 'initialMarginPercentage': undefined,
1095
+ 'leverage': undefined,
1096
+ 'liquidationPrice': undefined,
1097
+ 'marginRatio': undefined,
1098
+ 'marginMode': undefined,
1099
+ 'percentage': undefined,
1100
+ });
1101
+ }
1102
+ /**
1103
+ * @method
1104
+ * @name dydx#fetchPosition
1105
+ * @description fetch data on an open position
1106
+ * @see https://docs.dydx.xyz/indexer-client/http#list-positions
1107
+ * @param {string} symbol unified market symbol of the market the position is held in
1108
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1109
+ * @param {string} [params.address] wallet address that made trades
1110
+ * @param {string} [params.subAccountNumber] sub account number
1111
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
1112
+ */
1113
+ async fetchPosition(symbol, params = {}) {
1114
+ const positions = await this.fetchPositions([symbol], params);
1115
+ return this.safeDict(positions, 0, {});
1116
+ }
1117
+ /**
1118
+ * @method
1119
+ * @name dydx#fetchPositions
1120
+ * @description fetch all open positions
1121
+ * @see https://docs.dydx.xyz/indexer-client/http#list-positions
1122
+ * @param {string[]} [symbols] list of unified market symbols
1123
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1124
+ * @param {string} [params.address] wallet address that made trades
1125
+ * @param {string} [params.subAccountNumber] sub account number
1126
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
1127
+ */
1128
+ async fetchPositions(symbols = undefined, params = {}) {
1129
+ let userAddress = undefined;
1130
+ let subAccountNumber = undefined;
1131
+ [userAddress, params] = this.handlePublicAddress('fetchPositions', params);
1132
+ [subAccountNumber, params] = this.handleOptionAndParams(params, 'fetchOrders', 'subAccountNumber', '0');
1133
+ await this.loadMarkets();
1134
+ const request = {
1135
+ 'address': userAddress,
1136
+ 'subaccountNumber': subAccountNumber,
1137
+ 'status': 'OPEN', // ['OPEN', 'CLOSED', 'LIQUIDATED']
1138
+ };
1139
+ const response = await this.indexerGetPerpetualPositions(this.extend(request, params));
1140
+ //
1141
+ // {
1142
+ // "positions": [
1143
+ // {
1144
+ // "market": "BTC-USD",
1145
+ // "status": "OPEN",
1146
+ // "side": "SHORT",
1147
+ // "size": "-0.407",
1148
+ // "maxSize": "-0.009",
1149
+ // "entryPrice": "118692.04840909090909090909",
1150
+ // "exitPrice": "119526.565625",
1151
+ // "realizedPnl": "476.42665909090909090909088",
1152
+ // "unrealizedPnl": "-57.26681734000000000000037",
1153
+ // "createdAt": "2025-07-14T07:53:55.631Z",
1154
+ // "createdAtHeight": "44140908",
1155
+ // "closedAt": null,
1156
+ // "sumOpen": "0.44",
1157
+ // "sumClose": "0.032",
1158
+ // "netFunding": "503.13121",
1159
+ // "subaccountNumber": 0
1160
+ // }
1161
+ // ]
1162
+ // }
1163
+ //
1164
+ const rows = this.safeList(response, 'positions', []);
1165
+ return this.parsePositions(rows, symbols);
1166
+ }
1167
+ hashMessage(message) {
1168
+ return this.hash(message, keccak, 'hex');
1169
+ }
1170
+ signHash(hash, privateKey) {
1171
+ const signature = ecdsa(hash.slice(-64), privateKey.slice(-64), secp256k1, undefined);
1172
+ const r = signature['r'];
1173
+ const s = signature['s'];
1174
+ return {
1175
+ 'r': r.padStart(64, '0'),
1176
+ 's': s.padStart(64, '0'),
1177
+ 'v': this.sum(27, signature['v']),
1178
+ };
1179
+ }
1180
+ signMessage(message, privateKey) {
1181
+ return this.signHash(this.hashMessage(message), privateKey.slice(-64));
1182
+ }
1183
+ signOnboardingAction() {
1184
+ const message = { 'action': 'dYdX Chain Onboarding' };
1185
+ const chainId = this.options['chainId'];
1186
+ const domain = {
1187
+ 'chainId': chainId,
1188
+ 'name': 'dYdX Chain',
1189
+ };
1190
+ const messageTypes = {
1191
+ 'dYdX': [
1192
+ { 'name': 'action', 'type': 'string' },
1193
+ ],
1194
+ };
1195
+ const msg = this.ethEncodeStructuredData(domain, messageTypes, message);
1196
+ if (this.privateKey === undefined || this.privateKey === '') {
1197
+ throw new ArgumentsRequired(this.id + ' signOnboardingAction() requires a privateKey to be set.');
1198
+ }
1199
+ const signature = this.signMessage(msg, this.privateKey);
1200
+ return signature;
1201
+ }
1202
+ signDydxTx(privateKey, message, memo, chainId, account, authenticators, fee = undefined) {
1203
+ const [encodedTx, signDoc] = this.encodeDydxTxForSigning(message, memo, chainId, account, authenticators, fee);
1204
+ const signature = this.signHash(encodedTx, privateKey);
1205
+ return this.encodeDydxTxRaw(signDoc, signature['r'] + signature['s']);
1206
+ }
1207
+ retrieveCredentials() {
1208
+ let credentials = this.safeDict(this.options, 'dydxCredentials');
1209
+ if (credentials !== undefined) {
1210
+ return credentials;
1211
+ }
1212
+ let entropy = this.safeString(this.options, 'mnemonic');
1213
+ if (entropy === undefined) {
1214
+ const signature = this.signOnboardingAction();
1215
+ entropy = this.hashMessage(this.base16ToBinary(signature['r'] + signature['s']));
1216
+ }
1217
+ credentials = this.retrieveDydxCredentials(entropy);
1218
+ credentials['privateKey'] = this.binaryToBase16(credentials['privateKey']);
1219
+ credentials['publicKey'] = this.binaryToBase16(credentials['publicKey']);
1220
+ this.options['dydxCredentials'] = credentials;
1221
+ return credentials;
1222
+ }
1223
+ async fetchDydxAccount() {
1224
+ // required in js
1225
+ await this.loadDydxProtos();
1226
+ const dydxAccount = this.safeDict(this.options, 'dydxAccount');
1227
+ if (dydxAccount !== undefined) {
1228
+ return dydxAccount;
1229
+ }
1230
+ if (this.walletAddress === undefined) {
1231
+ throw new ArgumentsRequired(this.id + ' fetchDydxAccount() requires the walletAddress to be set using the dydx chain address eg: dydx1cpb4tedmwq304c2kc9pwzjwq0sc6z2a4tasxrz');
1232
+ }
1233
+ if (!this.walletAddress.startsWith('dydx')) {
1234
+ throw new ArgumentsRequired(this.id + ' fetchDydxAccount() requires a valid dydx chain address, starting with dydx, not the l1 address.');
1235
+ }
1236
+ const request = {
1237
+ 'dydxAddress': this.walletAddress,
1238
+ };
1239
+ //
1240
+ // {
1241
+ // "info": {
1242
+ // "address": "string",
1243
+ // "pub_key": {
1244
+ // "type_url": "string",
1245
+ // "key": "string"
1246
+ // },
1247
+ // "account_number": "string",
1248
+ // "sequence": "string"
1249
+ // }
1250
+ // }
1251
+ //
1252
+ const response = await this.nodeRestGetCosmosAuthV1beta1AccountInfoDydxAddress(request);
1253
+ const account = this.safeDict(response, 'info');
1254
+ account['pub_key'] = {
1255
+ // encode with binary key would fail in python
1256
+ 'key': account['pub_key']['key'],
1257
+ };
1258
+ this.options['dydxAccount'] = account;
1259
+ return account;
1260
+ }
1261
+ pow(n, m) {
1262
+ let r = Precise.stringMul(n, '1');
1263
+ const c = this.parseToInt(m);
1264
+ // TODO: cap
1265
+ for (let i = 1; i < c; i++) {
1266
+ r = Precise.stringMul(r, n);
1267
+ }
1268
+ return r;
1269
+ }
1270
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1271
+ const reduceOnly = this.safeBool2(params, 'reduceOnly', 'reduce_only', false);
1272
+ const orderType = type.toUpperCase();
1273
+ const market = this.market(symbol);
1274
+ const orderSide = side.toUpperCase();
1275
+ let subaccountId = 0;
1276
+ [subaccountId, params] = this.handleOptionAndParams(params, 'createOrder', 'subAccountId', subaccountId);
1277
+ const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
1278
+ const stopLossPrice = this.safeValue(params, 'stopLossPrice', triggerPrice);
1279
+ const takeProfitPrice = this.safeValue(params, 'takeProfitPrice');
1280
+ const isConditional = triggerPrice !== undefined || stopLossPrice !== undefined || takeProfitPrice !== undefined;
1281
+ const isMarket = orderType === 'MARKET';
1282
+ const timeInForce = this.safeStringUpper(params, 'timeInForce', 'GTT');
1283
+ const postOnly = this.isPostOnly(isMarket, undefined, params);
1284
+ const amountStr = this.amountToPrecision(symbol, amount);
1285
+ const priceStr = this.priceToPrecision(symbol, price);
1286
+ const marketInfo = this.safeDict(market, 'info');
1287
+ const atomicResolution = marketInfo['atomicResolution'];
1288
+ const quantumScale = this.pow('10', Precise.stringNeg(atomicResolution));
1289
+ const quantums = Precise.stringMul(amountStr, quantumScale);
1290
+ const quantumConversionExponent = marketInfo['quantumConversionExponent'];
1291
+ const priceScale = this.pow('10', Precise.stringSub(Precise.stringSub(atomicResolution, quantumConversionExponent), '-6'));
1292
+ const subticks = Precise.stringMul(priceStr, priceScale);
1293
+ let clientMetadata = 0;
1294
+ let conditionalType = 0;
1295
+ let conditionalOrderTriggerSubticks = '0';
1296
+ let orderFlag = undefined;
1297
+ let timeInForceNumber = undefined;
1298
+ if (timeInForce === 'FOK') {
1299
+ throw new InvalidOrder(this.id + ' timeInForce fok has been deprecated');
1300
+ }
1301
+ if (orderType === 'MARKET') {
1302
+ // short-term
1303
+ orderFlag = 0;
1304
+ clientMetadata = 1; // STOP_MARKET / TAKE_PROFIT_MARKET
1305
+ if (timeInForce !== undefined) {
1306
+ // default is ioc
1307
+ timeInForceNumber = 1;
1308
+ }
1309
+ }
1310
+ else if (orderType === 'LIMIT') {
1311
+ if (timeInForce === 'GTT') {
1312
+ // long-term
1313
+ orderFlag = 64;
1314
+ if (postOnly) {
1315
+ timeInForceNumber = 2;
1316
+ }
1317
+ else {
1318
+ timeInForceNumber = 0;
1319
+ }
1320
+ }
1321
+ else {
1322
+ orderFlag = 0;
1323
+ if (timeInForce === 'IOC') {
1324
+ timeInForceNumber = 1;
1325
+ }
1326
+ else {
1327
+ throw new InvalidOrder('unexpected code path: timeInForce');
1328
+ }
1329
+ }
1330
+ }
1331
+ if (isConditional) {
1332
+ // conditional
1333
+ orderFlag = 32;
1334
+ if (stopLossPrice !== undefined) {
1335
+ conditionalType = 1;
1336
+ conditionalOrderTriggerSubticks = this.priceToPrecision(symbol, stopLossPrice);
1337
+ }
1338
+ else if (takeProfitPrice !== undefined) {
1339
+ conditionalType = 2;
1340
+ conditionalOrderTriggerSubticks = this.priceToPrecision(symbol, takeProfitPrice);
1341
+ }
1342
+ conditionalOrderTriggerSubticks = Precise.stringMul(conditionalOrderTriggerSubticks, priceScale);
1343
+ }
1344
+ const latestBlockHeight = this.safeInteger(params, 'latestBlockHeight');
1345
+ let goodTillBlock = this.safeInteger(params, 'goodTillBlock');
1346
+ let goodTillBlockTime = undefined;
1347
+ let goodTillBlockTimeInSeconds = 2592000;
1348
+ [goodTillBlockTimeInSeconds, params] = this.handleOptionAndParams(params, 'createOrder', 'goodTillBlockTimeInSeconds', goodTillBlockTimeInSeconds); // default is 30 days
1349
+ if (orderFlag === 0) {
1350
+ if (goodTillBlock === undefined) {
1351
+ // short term order
1352
+ goodTillBlock = latestBlockHeight + 20;
1353
+ }
1354
+ }
1355
+ else {
1356
+ if (goodTillBlockTimeInSeconds === undefined) {
1357
+ throw new ArgumentsRequired('goodTillBlockTimeInSeconds is required.');
1358
+ }
1359
+ goodTillBlockTime = this.seconds() + goodTillBlockTimeInSeconds;
1360
+ }
1361
+ const sideNumber = (orderSide === 'BUY') ? 1 : 2;
1362
+ const defaultClientOrderId = this.randNumber(9); // 2**32 - 1 is 10 digits, but it may overflow with 10
1363
+ const clientOrderId = this.safeInteger(params, 'clientOrderId', defaultClientOrderId);
1364
+ const orderPayload = {
1365
+ 'order': {
1366
+ 'orderId': {
1367
+ 'subaccountId': {
1368
+ 'owner': this.getWalletAddress(),
1369
+ 'number': subaccountId,
1370
+ },
1371
+ 'clientId': clientOrderId,
1372
+ 'orderFlags': orderFlag,
1373
+ 'clobPairId': marketInfo['clobPairId'],
1374
+ },
1375
+ 'side': sideNumber,
1376
+ 'quantums': this.toDydxLong(quantums),
1377
+ 'subticks': this.toDydxLong(subticks),
1378
+ 'goodTilBlock': goodTillBlock,
1379
+ 'goodTilBlockTime': goodTillBlockTime,
1380
+ 'timeInForce': timeInForceNumber,
1381
+ 'reduceOnly': reduceOnly,
1382
+ 'clientMetadata': clientMetadata,
1383
+ 'conditionType': conditionalType,
1384
+ 'conditionalOrderTriggerSubticks': this.toDydxLong(conditionalOrderTriggerSubticks),
1385
+ 'orderRouterAddress': this.safeString(this.options, 'routerAddress', 'dydx165sfn2k3vucvq7gklauy2r3agyjw4c3m60ascn'),
1386
+ },
1387
+ };
1388
+ const signingPayload = {
1389
+ 'typeUrl': '/dydxprotocol.clob.MsgPlaceOrder',
1390
+ 'value': orderPayload,
1391
+ };
1392
+ params = this.omit(params, ['reduceOnly', 'reduce_only', 'clientOrderId', 'postOnly', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLoss', 'takeProfit', 'latestBlockHeight', 'goodTillBlock', 'goodTillBlockTimeInSeconds', 'subaccountId']);
1393
+ const orderId = this.createOrderIdFromParts(this.getWalletAddress(), subaccountId, clientOrderId, orderFlag, marketInfo['clobPairId']);
1394
+ return [orderId, this.extend(signingPayload, params)];
1395
+ }
1396
+ createOrderIdFromParts(address, subAccountNumber, clientOrderId, orderFlags, clobPairId) {
1397
+ const nameSp = this.safeString(this.options, 'namespace', '0f9da948-a6fb-4c45-9edc-4685c3f3317d');
1398
+ const prefixAddress = address + '-' + subAccountNumber.toString();
1399
+ const prefix = this.uuid5(nameSp, prefixAddress);
1400
+ const orderInfo = prefix + '-' + this.numberToString(clientOrderId) + '-' + this.numberToString(clobPairId) + '-' + this.numberToString(orderFlags);
1401
+ return this.uuid5(nameSp, orderInfo);
1402
+ }
1403
+ async fetchLatestBlockHeight(params = {}) {
1404
+ const response = await this.nodeRpcGetAbciInfo(params);
1405
+ //
1406
+ // {
1407
+ // "jsonrpc": "2.0",
1408
+ // "id": -1,
1409
+ // "result": {
1410
+ // "response": {
1411
+ // "data": "dydxprotocol",
1412
+ // "version": "9.1.0-rc0",
1413
+ // "last_block_height": "49157714",
1414
+ // "last_block_app_hash": "9LHAcDDI5zmWiC6bGiiGtxuWPlKJV+/fTBZk/WQ/Y4U="
1415
+ // }
1416
+ // }
1417
+ // }
1418
+ //
1419
+ const result = this.safeDict(response, 'result');
1420
+ const info = this.safeDict(result, 'response');
1421
+ return this.safeInteger(info, 'last_block_height');
1422
+ }
1423
+ /**
1424
+ * @method
1425
+ * @name dydx#createOrder
1426
+ * @see https://docs.dydx.xyz/interaction/trading#place-an-order
1427
+ * @description create a trade order
1428
+ * @param {string} symbol unified symbol of the market to create an order in
1429
+ * @param {string} type 'market' or 'limit'
1430
+ * @param {string} side 'buy' or 'sell'
1431
+ * @param {float} amount how much of currency you want to trade in units of base currency
1432
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1433
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1434
+ * @param {string} [params.timeInForce] "GTT", "IOC", or "PO"
1435
+ * @param {float} [params.triggerPrice] The price a trigger order is triggered at
1436
+ * @param {float} [params.stopLossPrice] price for a stoploss order
1437
+ * @param {float} [params.takeProfitPrice] price for a takeprofit order
1438
+ * @param {string} [params.clientOrderId] a unique id for the order
1439
+ * @param {bool} [params.postOnly] true or false whether the order is post-only
1440
+ * @param {bool} [params.reduceOnly] true or false whether the order is reduce-only
1441
+ * @param {float} [params.goodTillBlock] expired block number for the order, required for market order and non limit GTT order, default value is latestBlockHeight + 20
1442
+ * @param {float} [params.goodTillBlockTimeInSeconds] expired time elapsed for the order, required for limit GTT order and conditional, default value is 30 days
1443
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1444
+ */
1445
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1446
+ await this.loadMarkets();
1447
+ const credentials = this.retrieveCredentials();
1448
+ const account = await this.fetchDydxAccount();
1449
+ const lastBlockHeight = await this.fetchLatestBlockHeight();
1450
+ // params['latestBlockHeight'] = lastBlockHeight;
1451
+ const newParams = this.extend(params, { 'latestBlockHeight': lastBlockHeight });
1452
+ const orderRequestRes = this.createOrderRequest(symbol, type, side, amount, price, newParams);
1453
+ const orderId = orderRequestRes[0];
1454
+ const orderRequest = orderRequestRes[1];
1455
+ const chainName = this.options['chainName'];
1456
+ const signedTx = this.signDydxTx(credentials['privateKey'], orderRequest, '', chainName, account, undefined);
1457
+ const request = {
1458
+ 'tx': signedTx,
1459
+ };
1460
+ // nodeRpcGetBroadcastTxAsync
1461
+ const response = await this.nodeRpcGetBroadcastTxSync(request);
1462
+ //
1463
+ // {
1464
+ // "jsonrpc": "2.0",
1465
+ // "id": -1,
1466
+ // "result": {
1467
+ // "code": 0,
1468
+ // "data": "",
1469
+ // "log": "[]",
1470
+ // "codespace": "",
1471
+ // "hash": "CBEDB0603E57E5CE21FA6954770A9403D2A81BED02E608C860356152D0AA1A81"
1472
+ // }
1473
+ // }
1474
+ //
1475
+ const result = this.safeDict(response, 'result');
1476
+ return this.safeOrder({
1477
+ 'info': result,
1478
+ 'id': orderId,
1479
+ 'clientOrderId': orderRequest['value']['order']['orderId']['clientId'],
1480
+ });
1481
+ }
1482
+ /**
1483
+ * @method
1484
+ * @name dydx#cancelOrder
1485
+ * @description cancels an open order
1486
+ * @see https://docs.dydx.xyz/interaction/trading/#cancel-an-order
1487
+ * @param {string} id it should be the clientOrderId in this case
1488
+ * @param {string} symbol unified symbol of the market the order was made in
1489
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1490
+ * @param {string} [params.clientOrderId] client order id used when creating the order
1491
+ * @param {boolean} [params.trigger] whether the order is a trigger/algo order
1492
+ * @param {float} [params.orderFlags] default is 64, orderFlags for the order, market order and non limit GTT order is 0, limit GTT order is 64 and conditional order is 32
1493
+ * @param {float} [params.goodTillBlock] expired block number for the order, required for market order and non limit GTT order (orderFlags = 0), default value is latestBlockHeight + 20
1494
+ * @param {float} [params.goodTillBlockTimeInSeconds] expired time elapsed for the order, required for limit GTT order and conditional (orderFlagss > 0), default value is 30 days
1495
+ * @param {int} [params.subAccountId] sub account id, default is 0
1496
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1497
+ */
1498
+ async cancelOrder(id, symbol = undefined, params = {}) {
1499
+ const isTrigger = this.safeBool2(params, 'trigger', 'stop', false);
1500
+ params = this.omit(params, ['trigger', 'stop']);
1501
+ if (!isTrigger && (symbol === undefined)) {
1502
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
1503
+ }
1504
+ await this.loadMarkets();
1505
+ const market = this.market(symbol);
1506
+ const clientOrderId = this.safeString2(params, 'clientOrderId', 'clientId', id);
1507
+ if (clientOrderId === undefined) {
1508
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a clientOrderId parameter, cancelling using id is not currently supported.');
1509
+ }
1510
+ const idString = id.toString();
1511
+ if (id !== undefined && idString.indexOf('-') > -1) {
1512
+ throw new NotSupported(this.id + ' cancelOrder() cancelling using id is not currently supported, please use provide the clientOrderId parameter.');
1513
+ }
1514
+ let goodTillBlock = this.safeInteger(params, 'goodTillBlock');
1515
+ let goodTillBlockTimeInSeconds = 2592000;
1516
+ [goodTillBlockTimeInSeconds, params] = this.handleOptionAndParams(params, 'cancelOrder', 'goodTillBlockTimeInSeconds', goodTillBlockTimeInSeconds); // default is 30 days
1517
+ let goodTillBlockTime = undefined;
1518
+ const defaultOrderFlags = (isTrigger) ? 32 : 64;
1519
+ const orderFlags = this.safeInteger(params, 'orderFlags', defaultOrderFlags);
1520
+ let subAccountId = 0;
1521
+ [subAccountId, params] = this.handleOptionAndParams(params, 'cancelOrder', 'subAccountId', subAccountId);
1522
+ params = this.omit(params, ['clientOrderId', 'orderFlags', 'goodTillBlock', 'goodTillBlockTime', 'goodTillBlockTimeInSeconds', 'subaccountId', 'clientId']);
1523
+ if (orderFlags !== 0 && orderFlags !== 64 && orderFlags !== 32) {
1524
+ throw new InvalidOrder(this.id + ' invalid orderFlags, allowed values are (0, 64, 32).');
1525
+ }
1526
+ if (orderFlags > 0) {
1527
+ if (goodTillBlockTimeInSeconds === undefined) {
1528
+ throw new ArgumentsRequired(this.id + ' goodTillBlockTimeInSeconds is required in params for long term or conditional order.');
1529
+ }
1530
+ if (goodTillBlock !== undefined && goodTillBlock > 0) {
1531
+ throw new InvalidOrder(this.id + ' goodTillBlock should be 0 for long term or conditional order.');
1532
+ }
1533
+ goodTillBlockTime = this.seconds() + goodTillBlockTimeInSeconds;
1534
+ }
1535
+ else {
1536
+ if (goodTillBlock === undefined) {
1537
+ const latestBlockHeight = await this.fetchLatestBlockHeight();
1538
+ goodTillBlock = latestBlockHeight + 20;
1539
+ }
1540
+ }
1541
+ const credentials = this.retrieveCredentials();
1542
+ const account = await this.fetchDydxAccount();
1543
+ const cancelPayload = {
1544
+ 'orderId': {
1545
+ 'subaccountId': {
1546
+ 'owner': this.getWalletAddress(),
1547
+ 'number': subAccountId,
1548
+ },
1549
+ 'clientId': clientOrderId,
1550
+ 'orderFlags': orderFlags,
1551
+ 'clobPairId': market['info']['clobPairId'],
1552
+ },
1553
+ 'goodTilBlock': goodTillBlock,
1554
+ 'goodTilBlockTime': goodTillBlockTime,
1555
+ };
1556
+ const signingPayload = {
1557
+ 'typeUrl': '/dydxprotocol.clob.MsgCancelOrder',
1558
+ 'value': cancelPayload,
1559
+ };
1560
+ const chainName = this.options['chainName'];
1561
+ const signedTx = this.signDydxTx(credentials['privateKey'], signingPayload, '', chainName, account, undefined);
1562
+ const request = {
1563
+ 'tx': signedTx,
1564
+ };
1565
+ // nodeRpcGetBroadcastTxAsync
1566
+ const response = await this.nodeRpcGetBroadcastTxSync(request);
1567
+ //
1568
+ // {
1569
+ // "jsonrpc": "2.0",
1570
+ // "id": -1,
1571
+ // "result": {
1572
+ // "code": 0,
1573
+ // "data": "",
1574
+ // "log": "[]",
1575
+ // "codespace": "",
1576
+ // "hash": "CBEDB0603E57E5CE21FA6954770A9403D2A81BED02E608C860356152D0AA1A81"
1577
+ // }
1578
+ // }
1579
+ //
1580
+ const result = this.safeDict(response, 'result');
1581
+ return this.safeOrder({
1582
+ 'info': result,
1583
+ });
1584
+ }
1585
+ /**
1586
+ * @method
1587
+ * @name dydx#cancelOrders
1588
+ * @description cancel multiple orders
1589
+ * @param {string[]} ids order ids
1590
+ * @param {string} [symbol] unified market symbol
1591
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1592
+ * @param {string[]} [params.clientOrderIds] max length 10 e.g. ["my_id_1","my_id_2"], encode the double quotes. No space after comma
1593
+ * @param {int} [params.subAccountId] sub account id, default is 0
1594
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1595
+ */
1596
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1597
+ await this.loadMarkets();
1598
+ const market = this.market(symbol);
1599
+ const clientOrderIds = this.safeList(params, 'clientOrderIds');
1600
+ if (!clientOrderIds) {
1601
+ throw new NotSupported(this.id + ' cancelOrders only support clientOrderIds.');
1602
+ }
1603
+ let subAccountId = 0;
1604
+ [subAccountId, params] = this.handleOptionAndParams(params, 'cancelOrders', 'subAccountId', subAccountId);
1605
+ let goodTillBlock = this.safeInteger(params, 'goodTillBlock');
1606
+ if (goodTillBlock === undefined) {
1607
+ const latestBlockHeight = await this.fetchLatestBlockHeight();
1608
+ goodTillBlock = latestBlockHeight + 20;
1609
+ }
1610
+ params = this.omit(params, ['clientOrderIds', 'goodTillBlock', 'subaccountId']);
1611
+ const credentials = this.retrieveCredentials();
1612
+ const account = await this.fetchDydxAccount();
1613
+ const cancelOrders = {
1614
+ 'clientIds': clientOrderIds,
1615
+ 'clobPairId': market['info']['clobPairId'],
1616
+ };
1617
+ const cancelPayload = {
1618
+ 'subaccountId': {
1619
+ 'owner': this.getWalletAddress(),
1620
+ 'number': subAccountId,
1621
+ },
1622
+ 'shortTermCancels': [cancelOrders],
1623
+ 'goodTilBlock': goodTillBlock,
1624
+ };
1625
+ const signingPayload = {
1626
+ 'typeUrl': '/dydxprotocol.clob.MsgBatchCancel',
1627
+ 'value': cancelPayload,
1628
+ };
1629
+ const chainName = this.options['chainName'];
1630
+ const signedTx = this.signDydxTx(credentials['privateKey'], signingPayload, '', chainName, account, undefined);
1631
+ const request = {
1632
+ 'tx': signedTx,
1633
+ };
1634
+ // nodeRpcGetBroadcastTxAsync
1635
+ const response = await this.nodeRpcGetBroadcastTxSync(request);
1636
+ //
1637
+ // {
1638
+ // "jsonrpc": "2.0",
1639
+ // "id": -1,
1640
+ // "result": {
1641
+ // "code": 0,
1642
+ // "data": "",
1643
+ // "log": "[]",
1644
+ // "codespace": "",
1645
+ // "hash": "CBEDB0603E57E5CE21FA6954770A9403D2A81BED02E608C860356152D0AA1A81"
1646
+ // }
1647
+ // }
1648
+ //
1649
+ const result = this.safeDict(response, 'result');
1650
+ return [this.safeOrder({
1651
+ 'info': result,
1652
+ })];
1653
+ }
1654
+ /**
1655
+ * @method
1656
+ * @name dydx#fetchOrderBook
1657
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1658
+ * @see https://docs.dydx.xyz/indexer-client/http#get-perpetual-market-orderbook
1659
+ * @param {string} symbol unified symbol of the market to fetch the order book for
1660
+ * @param {int} [limit] the maximum amount of order book entries to return
1661
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1662
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1663
+ */
1664
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
1665
+ await this.loadMarkets();
1666
+ const market = this.market(symbol);
1667
+ const request = {
1668
+ 'market': market['id'],
1669
+ };
1670
+ const response = await this.indexerGetOrderbooksPerpetualMarketMarket(this.extend(request, params));
1671
+ //
1672
+ // {
1673
+ // "bids": [
1674
+ // {
1675
+ // "price": "118267",
1676
+ // "size": "0.3182"
1677
+ // }
1678
+ // ],
1679
+ // "asks": [
1680
+ // {
1681
+ // "price": "118485",
1682
+ // "size": "0.0001"
1683
+ // }
1684
+ // ]
1685
+ // }
1686
+ //
1687
+ return this.parseOrderBook(response, market['symbol'], undefined, 'bids', 'asks', 'price', 'size');
1688
+ }
1689
+ parseLedgerEntry(item, currency = undefined) {
1690
+ //
1691
+ // {
1692
+ // "id": "6a6075bc-7183-5fd9-bc9d-894e238aa527",
1693
+ // "sender": {
1694
+ // "address": "dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art",
1695
+ // "subaccountNumber": 0
1696
+ // },
1697
+ // "recipient": {
1698
+ // "address": "dydx1slanxj8x9ntk9knwa6cvfv2tzlsq5gk3dshml0",
1699
+ // "subaccountNumber": 1
1700
+ // },
1701
+ // "size": "0.000001",
1702
+ // "createdAt": "2025-07-29T09:43:02.105Z",
1703
+ // "createdAtHeight": "45116125",
1704
+ // "symbol": "USDC",
1705
+ // "type": "TRANSFER_OUT",
1706
+ // "transactionHash": "92B4744BA1B783CF37C79A50BEBC47FFD59C8D5197D62A8485D3DCCE9AF220AF"
1707
+ // }
1708
+ //
1709
+ const currencyId = this.safeString(item, 'symbol');
1710
+ const code = this.safeCurrencyCode(currencyId, currency);
1711
+ currency = this.safeCurrency(currencyId, currency);
1712
+ const type = this.safeStringUpper(item, 'type');
1713
+ let direction = undefined;
1714
+ if (type !== undefined) {
1715
+ if (type === 'TRANSFER_IN' || type === 'DEPOSIT') {
1716
+ direction = 'in';
1717
+ }
1718
+ else if (type === 'TRANSFER_OUT' || type === 'WITHDRAWAL') {
1719
+ direction = 'out';
1720
+ }
1721
+ }
1722
+ const amount = this.safeString(item, 'size');
1723
+ const timestamp = this.parse8601(this.safeString(item, 'createdAt'));
1724
+ const sender = this.safeDict(item, 'sender');
1725
+ const recipient = this.safeDict(item, 'recipient');
1726
+ return this.safeLedgerEntry({
1727
+ 'info': item,
1728
+ 'id': this.safeString(item, 'id'),
1729
+ 'direction': direction,
1730
+ 'account': this.safeString(sender, 'address'),
1731
+ 'referenceAccount': this.safeString(recipient, 'address'),
1732
+ 'referenceId': this.safeString(item, 'transactionHash'),
1733
+ 'type': this.parseLedgerEntryType(type),
1734
+ 'currency': code,
1735
+ 'amount': this.parseNumber(amount),
1736
+ 'timestamp': timestamp,
1737
+ 'datetime': this.iso8601(timestamp),
1738
+ 'before': undefined,
1739
+ 'after': undefined,
1740
+ 'status': undefined,
1741
+ 'fee': undefined,
1742
+ }, currency);
1743
+ }
1744
+ parseLedgerEntryType(type) {
1745
+ const ledgerType = {
1746
+ 'TRANSFER_IN': 'transfer',
1747
+ 'TRANSFER_OUT': 'transfer',
1748
+ 'DEPOSIT': 'deposit',
1749
+ 'WITHDRAWAL': 'withdrawal',
1750
+ };
1751
+ return this.safeString(ledgerType, type, type);
1752
+ }
1753
+ /**
1754
+ * @method
1755
+ * @name dydx#fetchLedger
1756
+ * @description fetch the history of changes, actions done by the user or operations that altered balance of the user
1757
+ * @see https://docs.dydx.xyz/indexer-client/http#get-transfers
1758
+ * @param {string} [code] unified currency code, default is undefined
1759
+ * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
1760
+ * @param {int} [limit] max number of ledger entries to return, default is undefined
1761
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1762
+ * @param {string} [params.address] wallet address that made trades
1763
+ * @param {string} [params.subAccountNumber] sub account number
1764
+ * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
1765
+ */
1766
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
1767
+ await this.loadMarkets();
1768
+ let currency = undefined;
1769
+ if (code !== undefined) {
1770
+ currency = this.currency(code);
1771
+ }
1772
+ const response = await this.fetchTransactionsHelper(code, since, limit, this.extend(params, { 'methodName': 'fetchLedger' }));
1773
+ return this.parseLedger(response, currency, since, limit);
1774
+ }
1775
+ async estimateTxFee(message, memo, account) {
1776
+ const txBytes = this.encodeDydxTxForSimulation(message, memo, account['sequence'], account['pub_key']);
1777
+ const request = {
1778
+ 'txBytes': txBytes,
1779
+ };
1780
+ const response = await this.nodeRestPostCosmosTxV1beta1Simulate(request);
1781
+ //
1782
+ // {
1783
+ // gas_info: { gas_wanted: '18446744073709551615', gas_used: '86055' },
1784
+ // result: {
1785
+ // ...
1786
+ // }
1787
+ // }
1788
+ //
1789
+ const gasInfo = this.safeDict(response, 'gas_info');
1790
+ if (gasInfo === undefined) {
1791
+ throw new ExchangeError(this.id + ' failed to simulate transaction.');
1792
+ }
1793
+ const gasUsed = this.safeString(gasInfo, 'gas_used');
1794
+ if (gasUsed === undefined) {
1795
+ throw new ExchangeError(this.id + ' failed to simulate transaction.');
1796
+ }
1797
+ const defaultFeeDenom = this.safeString(this.options, 'defaultFeeDenom');
1798
+ const defaultFeeMultiplier = this.safeString(this.options, 'defaultFeeMultiplier');
1799
+ const feeDenom = this.safeDict(this.options, 'feeDenom');
1800
+ let gasPrice = undefined;
1801
+ let denom = undefined;
1802
+ if (defaultFeeDenom === 'uusdc') {
1803
+ gasPrice = feeDenom['USDC_GAS_PRICE'];
1804
+ denom = feeDenom['USDC_DENOM'];
1805
+ }
1806
+ else {
1807
+ gasPrice = feeDenom['CHAINTOKEN_GAS_PRICE'];
1808
+ denom = feeDenom['CHAINTOKEN_DENOM'];
1809
+ }
1810
+ const gasLimit = Math.ceil(this.parseToNumeric(Precise.stringMul(gasUsed, defaultFeeMultiplier)));
1811
+ let feeAmount = Precise.stringMul(this.numberToString(gasLimit), gasPrice);
1812
+ if (feeAmount.indexOf('.') >= 0) {
1813
+ feeAmount = this.numberToString(Math.ceil(this.parseToNumeric(feeAmount)));
1814
+ }
1815
+ const feeObj = {
1816
+ 'amount': feeAmount,
1817
+ 'denom': denom,
1818
+ };
1819
+ return {
1820
+ 'amount': [feeObj],
1821
+ 'gasLimit': gasLimit,
1822
+ };
1823
+ }
1824
+ /**
1825
+ * @method
1826
+ * @name dydx#transfer
1827
+ * @description transfer currency internally between wallets on the same account
1828
+ * @param {string} code unified currency code
1829
+ * @param {float} amount amount to transfer
1830
+ * @param {string} fromAccount account to transfer from *main, subaccount*
1831
+ * @param {string} toAccount account to transfer to *subaccount, address*
1832
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1833
+ * @param {string} [params.vaultAddress] the vault address for order
1834
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
1835
+ */
1836
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
1837
+ if (code !== 'USDC') {
1838
+ throw new NotSupported(this.id + ' transfer() only support USDC');
1839
+ }
1840
+ await this.loadMarkets();
1841
+ const fromSubaccountId = this.safeInteger(params, 'fromSubaccountId');
1842
+ const toSubaccountId = this.safeInteger(params, 'toSubaccountId');
1843
+ if (fromAccount !== 'main') {
1844
+ // throw error if from subaccount id is undefind
1845
+ if (fromAccount === undefined) {
1846
+ throw new NotSupported(this.id + ' transfer only support main > subaccount and subaccount <> subaccount.');
1847
+ }
1848
+ if (fromSubaccountId === undefined || toSubaccountId === undefined) {
1849
+ throw new ArgumentsRequired(this.id + ' transfer requires fromSubaccountId and toSubaccountId.');
1850
+ }
1851
+ }
1852
+ params = this.omit(params, ['fromSubaccountId', 'toSubaccountId']);
1853
+ const credentials = this.retrieveCredentials();
1854
+ const account = await this.fetchDydxAccount();
1855
+ const usd = this.parseToInt(Precise.stringMul(this.numberToString(amount), '1000000'));
1856
+ let payload = undefined;
1857
+ let signingPayload = undefined;
1858
+ if (fromAccount === 'main') {
1859
+ // deposit to subaccount
1860
+ if (toSubaccountId === undefined) {
1861
+ throw new ArgumentsRequired(this.id + ' transfer() requeire toSubaccoutnId.');
1862
+ }
1863
+ payload = {
1864
+ 'sender': this.getWalletAddress(),
1865
+ 'recipient': {
1866
+ 'owner': this.getWalletAddress(),
1867
+ 'number': toSubaccountId,
1868
+ },
1869
+ 'assetId': 0,
1870
+ 'quantums': usd,
1871
+ };
1872
+ signingPayload = {
1873
+ 'typeUrl': '/dydxprotocol.sending.MsgDepositToSubaccount',
1874
+ 'value': payload,
1875
+ };
1876
+ }
1877
+ else {
1878
+ payload = {
1879
+ 'transfer': {
1880
+ 'sender': {
1881
+ 'owner': fromAccount,
1882
+ 'number': fromSubaccountId,
1883
+ },
1884
+ 'recipient': {
1885
+ 'owner': toAccount,
1886
+ 'number': toSubaccountId,
1887
+ },
1888
+ 'assetId': 0,
1889
+ 'amount': usd,
1890
+ },
1891
+ };
1892
+ signingPayload = {
1893
+ 'typeUrl': '/dydxprotocol.sending.MsgCreateTransfer',
1894
+ 'value': payload,
1895
+ };
1896
+ }
1897
+ const txFee = await this.estimateTxFee(signingPayload, '', account);
1898
+ const chainName = this.options['chainName'];
1899
+ const signedTx = this.signDydxTx(credentials['privateKey'], signingPayload, '', chainName, account, undefined, txFee);
1900
+ const request = {
1901
+ 'tx': signedTx,
1902
+ };
1903
+ // nodeRpcGetBroadcastTxAsync
1904
+ const response = await this.nodeRpcGetBroadcastTxSync(request);
1905
+ //
1906
+ // {
1907
+ // "jsonrpc": "2.0",
1908
+ // "id": -1,
1909
+ // "result": {
1910
+ // "code": 0,
1911
+ // "data": "",
1912
+ // "log": "[]",
1913
+ // "codespace": "",
1914
+ // "hash": "CBEDB0603E57E5CE21FA6954770A9403D2A81BED02E608C860356152D0AA1A81"
1915
+ // }
1916
+ // }
1917
+ //
1918
+ return this.parseTransfer(response);
1919
+ }
1920
+ parseTransfer(transfer, currency = undefined) {
1921
+ //
1922
+ // {
1923
+ // "id": "6a6075bc-7183-5fd9-bc9d-894e238aa527",
1924
+ // "sender": {
1925
+ // "address": "dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art",
1926
+ // "subaccountNumber": 0
1927
+ // },
1928
+ // "recipient": {
1929
+ // "address": "dydx1slanxj8x9ntk9knwa6cvfv2tzlsq5gk3dshml0",
1930
+ // "subaccountNumber": 1
1931
+ // },
1932
+ // "size": "0.000001",
1933
+ // "createdAt": "2025-07-29T09:43:02.105Z",
1934
+ // "createdAtHeight": "45116125",
1935
+ // "symbol": "USDC",
1936
+ // "type": "TRANSFER_OUT",
1937
+ // "transactionHash": "92B4744BA1B783CF37C79A50BEBC47FFD59C8D5197D62A8485D3DCCE9AF220AF"
1938
+ // }
1939
+ //
1940
+ const id = this.safeString(transfer, 'id');
1941
+ const currencyId = this.safeString(transfer, 'symbol');
1942
+ const code = this.safeCurrencyCode(currencyId, currency);
1943
+ const amount = this.safeNumber(transfer, 'size');
1944
+ const sender = this.safeDict(transfer, 'sender');
1945
+ const recipient = this.safeDict(transfer, 'recipient');
1946
+ const fromAccount = this.safeString(sender, 'address');
1947
+ const toAccount = this.safeString(recipient, 'address');
1948
+ const timestamp = this.parse8601(this.safeString(transfer, 'createdAt'));
1949
+ return {
1950
+ 'info': transfer,
1951
+ 'id': id,
1952
+ 'timestamp': timestamp,
1953
+ 'datetime': this.iso8601(timestamp),
1954
+ 'currency': code,
1955
+ 'amount': amount,
1956
+ 'fromAccount': fromAccount,
1957
+ 'toAccount': toAccount,
1958
+ 'status': undefined,
1959
+ };
1960
+ }
1961
+ /**
1962
+ * @method
1963
+ * @name dydx#fetchTransfers
1964
+ * @description fetch a history of internal transfers made on an account
1965
+ * @see https://docs.dydx.xyz/indexer-client/http#get-transfers
1966
+ * @param {string} code unified currency code of the currency transferred
1967
+ * @param {int} [since] the earliest time in ms to fetch transfers for
1968
+ * @param {int} [limit] the maximum number of transfers structures to retrieve
1969
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1970
+ * @param {string} [params.address] wallet address that made trades
1971
+ * @param {string} [params.subAccountNumber] sub account number
1972
+ * @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}
1973
+ */
1974
+ async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {
1975
+ await this.loadMarkets();
1976
+ let currency = undefined;
1977
+ if (code !== undefined) {
1978
+ currency = this.currency(code);
1979
+ }
1980
+ const response = await this.fetchTransactionsHelper(code, since, limit, this.extend(params, { 'methodName': 'fetchTransfers' }));
1981
+ const transferIn = this.filterBy(response, 'type', 'TRANSFER_IN');
1982
+ const transferOut = this.filterBy(response, 'type', 'TRANSFER_OUT');
1983
+ const rows = this.arrayConcat(transferIn, transferOut);
1984
+ return this.parseTransfers(rows, currency, since, limit);
1985
+ }
1986
+ parseTransaction(transaction, currency = undefined) {
1987
+ //
1988
+ // {
1989
+ // "id": "6a6075bc-7183-5fd9-bc9d-894e238aa527",
1990
+ // "sender": {
1991
+ // "address": "dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art",
1992
+ // "subaccountNumber": 0
1993
+ // },
1994
+ // "recipient": {
1995
+ // "address": "dydx1slanxj8x9ntk9knwa6cvfv2tzlsq5gk3dshml0",
1996
+ // "subaccountNumber": 1
1997
+ // },
1998
+ // "size": "0.000001",
1999
+ // "createdAt": "2025-07-29T09:43:02.105Z",
2000
+ // "createdAtHeight": "45116125",
2001
+ // "symbol": "USDC",
2002
+ // "type": "TRANSFER_OUT",
2003
+ // "transactionHash": "92B4744BA1B783CF37C79A50BEBC47FFD59C8D5197D62A8485D3DCCE9AF220AF"
2004
+ // }
2005
+ //
2006
+ const id = this.safeString(transaction, 'id');
2007
+ const sender = this.safeDict(transaction, 'sender');
2008
+ const recipient = this.safeDict(transaction, 'recipient');
2009
+ const addressTo = this.safeString(recipient, 'address');
2010
+ const addressFrom = this.safeString(sender, 'address');
2011
+ const txid = this.safeString(transaction, 'transactionHash');
2012
+ const currencyId = this.safeString(transaction, 'symbol');
2013
+ const code = this.safeCurrencyCode(currencyId, currency);
2014
+ const timestamp = this.parse8601(this.safeString(transaction, 'createdAt'));
2015
+ const amount = this.safeNumber(transaction, 'size');
2016
+ return {
2017
+ 'info': transaction,
2018
+ 'id': id,
2019
+ 'txid': txid,
2020
+ 'timestamp': timestamp,
2021
+ 'datetime': this.iso8601(timestamp),
2022
+ 'network': undefined,
2023
+ 'address': addressTo,
2024
+ 'addressTo': addressTo,
2025
+ 'addressFrom': addressFrom,
2026
+ 'tag': undefined,
2027
+ 'tagTo': undefined,
2028
+ 'tagFrom': undefined,
2029
+ 'type': this.safeStringLower(transaction, 'type'),
2030
+ 'amount': amount,
2031
+ 'currency': code,
2032
+ 'status': undefined,
2033
+ 'updated': undefined,
2034
+ 'internal': undefined,
2035
+ 'comment': undefined,
2036
+ 'fee': undefined,
2037
+ };
2038
+ }
2039
+ /**
2040
+ * @method
2041
+ * @name dydx#withdraw
2042
+ * @description make a withdrawal
2043
+ * @param {string} code unified currency code
2044
+ * @param {float} amount the amount to withdraw
2045
+ * @param {string} address the address to withdraw to
2046
+ * @param {string} tag
2047
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2048
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2049
+ */
2050
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2051
+ if (code !== 'USDC') {
2052
+ throw new NotSupported(this.id + ' withdraw() only support USDC');
2053
+ }
2054
+ await this.loadMarkets();
2055
+ this.checkAddress(address);
2056
+ const subaccountId = this.safeInteger(params, 'subaccountId');
2057
+ if (subaccountId === undefined) {
2058
+ throw new ArgumentsRequired(this.id + ' withdraw requires subaccountId.');
2059
+ }
2060
+ params = this.omit(params, ['subaccountId']);
2061
+ const currency = this.currency(code);
2062
+ const credentials = this.retrieveCredentials();
2063
+ const account = await this.fetchDydxAccount();
2064
+ const usd = this.parseToInt(Precise.stringMul(this.numberToString(amount), '1000000'));
2065
+ const payload = {
2066
+ 'sender': {
2067
+ 'owner': this.getWalletAddress(),
2068
+ 'number': subaccountId,
2069
+ },
2070
+ 'recipient': address,
2071
+ 'assetId': 0,
2072
+ 'quantums': usd,
2073
+ };
2074
+ const signingPayload = {
2075
+ 'typeUrl': '/dydxprotocol.sending.MsgWithdrawFromSubaccount',
2076
+ 'value': payload,
2077
+ };
2078
+ const txFee = await this.estimateTxFee(signingPayload, tag, account);
2079
+ const chainName = this.options['chainName'];
2080
+ const signedTx = this.signDydxTx(credentials['privateKey'], signingPayload, tag, chainName, account, undefined, txFee);
2081
+ const request = {
2082
+ 'tx': signedTx,
2083
+ };
2084
+ // nodeRpcGetBroadcastTxAsync
2085
+ const response = await this.nodeRpcGetBroadcastTxSync(request);
2086
+ //
2087
+ // {
2088
+ // "jsonrpc": "2.0",
2089
+ // "id": -1,
2090
+ // "result": {
2091
+ // "code": 0,
2092
+ // "data": "",
2093
+ // "log": "[]",
2094
+ // "codespace": "",
2095
+ // "hash": "CBEDB0603E57E5CE21FA6954770A9403D2A81BED02E608C860356152D0AA1A81"
2096
+ // }
2097
+ // }
2098
+ //
2099
+ const data = this.safeDict(response, 'result', {});
2100
+ return this.parseTransaction(data, currency);
2101
+ }
2102
+ /**
2103
+ * @method
2104
+ * @name dydx#fetchWithdrawals
2105
+ * @description fetch all withdrawals made from an account
2106
+ * @see https://docs.dydx.xyz/indexer-client/http#get-transfers
2107
+ * @param {string} code unified currency code
2108
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2109
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2110
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2111
+ * @param {string} [params.address] wallet address that made trades
2112
+ * @param {string} [params.subAccountNumber] sub account number
2113
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2114
+ */
2115
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2116
+ await this.loadMarkets();
2117
+ let currency = undefined;
2118
+ if (code !== undefined) {
2119
+ currency = this.currency(code);
2120
+ }
2121
+ const response = await this.fetchTransactionsHelper(code, since, limit, this.extend(params, { 'methodName': 'fetchWithdrawals' }));
2122
+ const rows = this.filterBy(response, 'type', 'WITHDRAWAL');
2123
+ return this.parseTransactions(rows, currency, since, limit);
2124
+ }
2125
+ /**
2126
+ * @method
2127
+ * @name dydx#fetchDeposits
2128
+ * @description fetch all deposits made to an account
2129
+ * @see https://docs.dydx.xyz/indexer-client/http#get-transfers
2130
+ * @param {string} code unified currency code
2131
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2132
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2133
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2134
+ * @param {string} [params.address] wallet address that made trades
2135
+ * @param {string} [params.subAccountNumber] sub account number
2136
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2137
+ */
2138
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2139
+ await this.loadMarkets();
2140
+ let currency = undefined;
2141
+ if (code !== undefined) {
2142
+ currency = this.currency(code);
2143
+ }
2144
+ const response = await this.fetchTransactionsHelper(code, since, limit, this.extend(params, { 'methodName': 'fetchDeposits' }));
2145
+ const rows = this.filterBy(response, 'type', 'DEPOSIT');
2146
+ return this.parseTransactions(rows, currency, since, limit);
2147
+ }
2148
+ /**
2149
+ * @method
2150
+ * @name dydx#fetchDepositsWithdrawals
2151
+ * @description fetch history of deposits and withdrawals
2152
+ * @see https://docs.dydx.xyz/indexer-client/http#get-transfers
2153
+ * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
2154
+ * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
2155
+ * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
2156
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2157
+ * @param {string} [params.address] wallet address that made trades
2158
+ * @param {string} [params.subAccountNumber] sub account number
2159
+ * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2160
+ */
2161
+ async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2162
+ await this.loadMarkets();
2163
+ let currency = undefined;
2164
+ if (code !== undefined) {
2165
+ currency = this.currency(code);
2166
+ }
2167
+ const response = await this.fetchTransactionsHelper(code, since, limit, this.extend(params, { 'methodName': 'fetchDepositsWithdrawals' }));
2168
+ const withdrawals = this.filterBy(response, 'type', 'WITHDRAWAL');
2169
+ const deposits = this.filterBy(response, 'type', 'DEPOSIT');
2170
+ const rows = this.arrayConcat(withdrawals, deposits);
2171
+ return this.parseTransactions(rows, currency, since, limit);
2172
+ }
2173
+ async fetchTransactionsHelper(code = undefined, since = undefined, limit = undefined, params = {}) {
2174
+ const methodName = this.safeString(params, 'methodName');
2175
+ params = this.omit(params, 'methodName');
2176
+ let userAddress = undefined;
2177
+ let subAccountNumber = undefined;
2178
+ [userAddress, params] = this.handlePublicAddress(methodName, params);
2179
+ [subAccountNumber, params] = this.handleOptionAndParams(params, methodName, 'subAccountNumber', '0');
2180
+ const request = {
2181
+ 'address': userAddress,
2182
+ 'subaccountNumber': subAccountNumber,
2183
+ };
2184
+ const response = await this.indexerGetTransfers(this.extend(request, params));
2185
+ //
2186
+ // {
2187
+ // "transfers": [
2188
+ // {
2189
+ // "id": "6a6075bc-7183-5fd9-bc9d-894e238aa527",
2190
+ // "sender": {
2191
+ // "address": "dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art",
2192
+ // "subaccountNumber": 0
2193
+ // },
2194
+ // "recipient": {
2195
+ // "address": "dydx1slanxj8x9ntk9knwa6cvfv2tzlsq5gk3dshml0",
2196
+ // "subaccountNumber": 1
2197
+ // },
2198
+ // "size": "0.000001",
2199
+ // "createdAt": "2025-07-29T09:43:02.105Z",
2200
+ // "createdAtHeight": "45116125",
2201
+ // "symbol": "USDC",
2202
+ // "type": "TRANSFER_OUT",
2203
+ // "transactionHash": "92B4744BA1B783CF37C79A50BEBC47FFD59C8D5197D62A8485D3DCCE9AF220AF"
2204
+ // }
2205
+ // ]
2206
+ // }
2207
+ //
2208
+ return this.safeList(response, 'transfers', []);
2209
+ }
2210
+ /**
2211
+ * @method
2212
+ * @name dydx#fetchAccounts
2213
+ * @description fetch all the accounts associated with a profile
2214
+ * @see https://docs.dydx.xyz/indexer-client/http#get-subaccounts
2215
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2216
+ * @param {string} [params.address] wallet address that made trades
2217
+ * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
2218
+ */
2219
+ async fetchAccounts(params = {}) {
2220
+ let userAddress = undefined;
2221
+ [userAddress, params] = this.handlePublicAddress('fetchAccounts', params);
2222
+ const request = {
2223
+ 'address': userAddress,
2224
+ };
2225
+ const response = await this.indexerGetAddressesAddress(this.extend(request, params));
2226
+ //
2227
+ // {
2228
+ // "subaccounts": [
2229
+ // {
2230
+ // "address": "dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art",
2231
+ // "subaccountNumber": 0,
2232
+ // "equity": "25346.73993597",
2233
+ // "freeCollateral": "24207.8530595294",
2234
+ // "openPerpetualPositions": {
2235
+ // "BTC-USD": {
2236
+ // "market": "BTC-USD",
2237
+ // "status": "OPEN",
2238
+ // "side": "SHORT",
2239
+ // "size": "-0.491",
2240
+ // "maxSize": "-0.009",
2241
+ // "entryPrice": "118703.60811320754716981132",
2242
+ // "exitPrice": "119655.95",
2243
+ // "realizedPnl": "3075.17994830188679245283016",
2244
+ // "unrealizedPnl": "1339.12776155490566037735812",
2245
+ // "createdAt": "2025-07-14T07:53:55.631Z",
2246
+ // "createdAtHeight": "44140908",
2247
+ // "closedAt": null,
2248
+ // "sumOpen": "0.53",
2249
+ // "sumClose": "0.038",
2250
+ // "netFunding": "3111.36894",
2251
+ // "subaccountNumber": 0
2252
+ // }
2253
+ // },
2254
+ // "assetPositions": {
2255
+ // "USDC": {
2256
+ // "size": "82291.083758",
2257
+ // "symbol": "USDC",
2258
+ // "side": "LONG",
2259
+ // "assetId": "0",
2260
+ // "subaccountNumber": 0
2261
+ // }
2262
+ // },
2263
+ // "marginEnabled": true,
2264
+ // "updatedAtHeight": "45234659",
2265
+ // "latestProcessedBlockHeight": "45293477"
2266
+ // }
2267
+ // ]
2268
+ // }
2269
+ //
2270
+ const rows = this.safeList(response, 'subaccounts', []);
2271
+ const result = [];
2272
+ for (let i = 0; i < rows.length; i++) {
2273
+ const account = rows[i];
2274
+ const accountId = this.safeString(account, 'subaccountNumber');
2275
+ result.push({
2276
+ 'id': accountId,
2277
+ 'type': undefined,
2278
+ 'currency': undefined,
2279
+ 'info': account,
2280
+ 'code': undefined,
2281
+ });
2282
+ }
2283
+ return result;
2284
+ }
2285
+ /**
2286
+ * @method
2287
+ * @name dydx#fetchBalance
2288
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
2289
+ * @see https://docs.dydx.xyz/indexer-client/http#get-subaccount
2290
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2291
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
2292
+ */
2293
+ async fetchBalance(params = {}) {
2294
+ await this.loadMarkets();
2295
+ let userAddress = undefined;
2296
+ [userAddress, params] = this.handlePublicAddress('fetchAccounts', params);
2297
+ let subaccountNumber = undefined;
2298
+ [subaccountNumber, params] = this.handleOptionAndParams(params, 'fetchAccounts', 'subaccountNumber', 0);
2299
+ const request = {
2300
+ 'address': userAddress,
2301
+ 'subaccountNumber': subaccountNumber,
2302
+ };
2303
+ const response = await this.indexerGetAddressesAddressSubaccountNumberSubaccountNumber(this.extend(request, params));
2304
+ //
2305
+ // {
2306
+ // "subaccount": {
2307
+ // "address": "dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art",
2308
+ // "subaccountNumber": 0,
2309
+ // "equity": "161451.040416029",
2310
+ // "freeCollateral": "152508.28819133578",
2311
+ // "openPerpetualPositions": {
2312
+ // "ETH-USD": {
2313
+ // "market": "ETH-USD",
2314
+ // "status": "OPEN",
2315
+ // "side": "LONG",
2316
+ // "size": "0.001",
2317
+ // "maxSize": "0.002",
2318
+ // "entryPrice": "3894.7",
2319
+ // "exitPrice": "3864.5",
2320
+ // "realizedPnl": "-0.034847",
2321
+ // "unrealizedPnl": "-0.044675155",
2322
+ // "createdAt": "2025-10-22T08:34:05.883Z",
2323
+ // "createdAtHeight": "52228825",
2324
+ // "closedAt": null,
2325
+ // "sumOpen": "0.002",
2326
+ // "sumClose": "0.001",
2327
+ // "netFunding": "-0.004647",
2328
+ // "subaccountNumber": 0
2329
+ // },
2330
+ // "BTC-USD": {
2331
+ // "market": "BTC-USD",
2332
+ // "status": "OPEN",
2333
+ // "side": "SHORT",
2334
+ // "size": "-4.1368",
2335
+ // "maxSize": "-0.009",
2336
+ // "entryPrice": "112196.87848803433219017636",
2337
+ // "exitPrice": "113885.21872652924977050823",
2338
+ // "realizedPnl": "-15180.426770788459736511679821",
2339
+ // "unrealizedPnl": "17002.285719484425404321566048",
2340
+ // "createdAt": "2025-07-14T07:53:55.631Z",
2341
+ // "createdAtHeight": "44140908",
2342
+ // "closedAt": null,
2343
+ // "sumOpen": "5.3361",
2344
+ // "sumClose": "1.1983",
2345
+ // "netFunding": "-13157.288663",
2346
+ // "subaccountNumber": 0
2347
+ // }
2348
+ // },
2349
+ // "assetPositions": {
2350
+ // "USDC": {
2351
+ // "size": "608580.951601",
2352
+ // "symbol": "USDC",
2353
+ // "side": "LONG",
2354
+ // "assetId": "0",
2355
+ // "subaccountNumber": 0
2356
+ // }
2357
+ // },
2358
+ // "marginEnabled": true,
2359
+ // "updatedAtHeight": "52228833",
2360
+ // "latestProcessedBlockHeight": "52246761"
2361
+ // }
2362
+ // }
2363
+ //
2364
+ const data = this.safeDict(response, 'subaccount');
2365
+ return this.parseBalance(data);
2366
+ }
2367
+ parseBalance(response) {
2368
+ const account = this.account();
2369
+ account['free'] = this.safeString(response, 'freeCollateral');
2370
+ const result = {
2371
+ 'info': response,
2372
+ 'USDC': account,
2373
+ };
2374
+ return this.safeBalance(result);
2375
+ }
2376
+ nonce() {
2377
+ return this.milliseconds() - this.options['timeDifference'];
2378
+ }
2379
+ getWalletAddress() {
2380
+ if (this.walletAddress !== undefined && this.walletAddress !== '') {
2381
+ return this.walletAddress;
2382
+ }
2383
+ const dydxAccount = this.safeDict(this.options, 'dydxAccount');
2384
+ if (dydxAccount !== undefined) {
2385
+ // return dydxAccount;
2386
+ const wallet = this.safeString(dydxAccount, 'address');
2387
+ if (wallet !== undefined) {
2388
+ return wallet;
2389
+ }
2390
+ }
2391
+ throw new ArgumentsRequired(this.id + ' getWalletAddress() requires a wallet address. Set `walletAddress` or `dydxAccount` in exchange options.');
2392
+ }
2393
+ sign(path, section = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2394
+ const pathWithParams = this.implodeParams(path, params);
2395
+ let url = this.implodeHostname(this.urls['api'][section]);
2396
+ params = this.omit(params, this.extractParams(path));
2397
+ params = this.keysort(params);
2398
+ url += '/' + pathWithParams;
2399
+ if (method === 'GET') {
2400
+ if (Object.keys(params).length) {
2401
+ url += '?' + this.urlencode(params);
2402
+ }
2403
+ }
2404
+ else {
2405
+ body = this.json(params);
2406
+ headers = {
2407
+ 'Content-type': 'application/json',
2408
+ };
2409
+ }
2410
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2411
+ }
2412
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2413
+ if (!response) {
2414
+ return undefined; // fallback to default error handler
2415
+ }
2416
+ //
2417
+ // abci response
2418
+ // { "result": { "code": 0 } }
2419
+ //
2420
+ // rest response
2421
+ // { "code": 123 }
2422
+ //
2423
+ const result = this.safeDict(response, 'result');
2424
+ let errorCode = this.safeString(result, 'code');
2425
+ if (!errorCode) {
2426
+ errorCode = this.safeString(response, 'code');
2427
+ }
2428
+ if (errorCode) {
2429
+ const errorCodeNum = this.parseToNumeric(errorCode);
2430
+ if (errorCodeNum > 0) {
2431
+ const feedback = this.id + ' ' + this.json(response);
2432
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
2433
+ this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
2434
+ throw new ExchangeError(feedback);
2435
+ }
2436
+ }
2437
+ return undefined;
2438
+ }
2439
+ setSandboxMode(enable) {
2440
+ super.setSandboxMode(enable);
2441
+ // rewrite testnet parameters
2442
+ this.options['chainName'] = 'dydx-testnet-4';
2443
+ this.options['chainId'] = 11155111;
2444
+ this.options['feeDenom']['CHAINTOKEN_DENOM'] = 'adv4tnt';
2445
+ }
2446
+ }