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