ccxt 4.5.16 → 4.5.18

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 (914) hide show
  1. package/README.md +8 -5
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +7 -26
  4. package/dist/cjs/src/abstract/alpaca.js +1 -1
  5. package/dist/cjs/src/abstract/apex.js +1 -1
  6. package/dist/cjs/src/abstract/arkham.js +1 -1
  7. package/dist/cjs/src/abstract/ascendex.js +1 -1
  8. package/dist/cjs/src/abstract/backpack.js +1 -1
  9. package/dist/cjs/src/abstract/bigone.js +1 -1
  10. package/dist/cjs/src/abstract/binance.js +1 -1
  11. package/dist/cjs/src/abstract/bingx.js +1 -1
  12. package/dist/cjs/src/abstract/bit2c.js +1 -1
  13. package/dist/cjs/src/abstract/bitbank.js +1 -1
  14. package/dist/cjs/src/abstract/bitbns.js +1 -1
  15. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  16. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  17. package/dist/cjs/src/abstract/bitget.js +1 -1
  18. package/dist/cjs/src/abstract/bithumb.js +1 -1
  19. package/dist/cjs/src/abstract/bitmart.js +1 -1
  20. package/dist/cjs/src/abstract/bitmex.js +1 -1
  21. package/dist/cjs/src/abstract/bitopro.js +1 -1
  22. package/dist/cjs/src/abstract/bitrue.js +1 -1
  23. package/dist/cjs/src/abstract/bitso.js +1 -1
  24. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  25. package/dist/cjs/src/abstract/bitteam.js +1 -1
  26. package/dist/cjs/src/abstract/bittrade.js +1 -1
  27. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  28. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  29. package/dist/cjs/src/abstract/blofin.js +1 -1
  30. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  31. package/dist/cjs/src/abstract/btcbox.js +1 -1
  32. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  33. package/dist/cjs/src/abstract/btcturk.js +1 -1
  34. package/dist/cjs/src/abstract/bybit.js +1 -1
  35. package/dist/cjs/src/abstract/cex.js +1 -1
  36. package/dist/cjs/src/abstract/coinbase.js +1 -1
  37. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  38. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  39. package/dist/cjs/src/abstract/coincatch.js +1 -1
  40. package/dist/cjs/src/abstract/coincheck.js +1 -1
  41. package/dist/cjs/src/abstract/coinex.js +1 -1
  42. package/dist/cjs/src/abstract/coinmate.js +1 -1
  43. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  44. package/dist/cjs/src/abstract/coinone.js +1 -1
  45. package/dist/cjs/src/abstract/coinsph.js +1 -1
  46. package/dist/cjs/src/abstract/coinspot.js +1 -1
  47. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  48. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  49. package/dist/cjs/src/abstract/deepcoin.js +11 -0
  50. package/dist/cjs/src/abstract/defx.js +1 -1
  51. package/dist/cjs/src/abstract/delta.js +1 -1
  52. package/dist/cjs/src/abstract/deribit.js +1 -1
  53. package/dist/cjs/src/abstract/derive.js +1 -1
  54. package/dist/cjs/src/abstract/digifinex.js +1 -1
  55. package/dist/cjs/src/abstract/exmo.js +1 -1
  56. package/dist/cjs/src/abstract/foxbit.js +1 -1
  57. package/dist/cjs/src/abstract/gate.js +1 -1
  58. package/dist/cjs/src/abstract/gemini.js +1 -1
  59. package/dist/cjs/src/abstract/hashkey.js +1 -1
  60. package/dist/cjs/src/abstract/hibachi.js +1 -1
  61. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  62. package/dist/cjs/src/abstract/hollaex.js +1 -1
  63. package/dist/cjs/src/abstract/htx.js +1 -1
  64. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  65. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  66. package/dist/cjs/src/abstract/indodax.js +1 -1
  67. package/dist/cjs/src/abstract/kraken.js +1 -1
  68. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  69. package/dist/cjs/src/abstract/kucoin.js +1 -1
  70. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  71. package/dist/cjs/src/abstract/latoken.js +1 -1
  72. package/dist/cjs/src/abstract/lbank.js +1 -1
  73. package/dist/cjs/src/abstract/luno.js +1 -1
  74. package/dist/cjs/src/abstract/mercado.js +1 -1
  75. package/dist/cjs/src/abstract/mexc.js +1 -1
  76. package/dist/cjs/src/abstract/modetrade.js +1 -1
  77. package/dist/cjs/src/abstract/ndax.js +1 -1
  78. package/dist/cjs/src/abstract/novadax.js +1 -1
  79. package/dist/cjs/src/abstract/oceanex.js +1 -1
  80. package/dist/cjs/src/abstract/okx.js +1 -1
  81. package/dist/cjs/src/abstract/onetrading.js +1 -1
  82. package/dist/cjs/src/abstract/oxfun.js +1 -1
  83. package/dist/cjs/src/abstract/p2b.js +1 -1
  84. package/dist/cjs/src/abstract/paradex.js +1 -1
  85. package/dist/cjs/src/abstract/paymium.js +1 -1
  86. package/dist/cjs/src/abstract/phemex.js +1 -1
  87. package/dist/cjs/src/abstract/poloniex.js +1 -1
  88. package/dist/cjs/src/abstract/probit.js +1 -1
  89. package/dist/cjs/src/abstract/timex.js +1 -1
  90. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  91. package/dist/cjs/src/abstract/toobit.js +1 -1
  92. package/dist/cjs/src/abstract/upbit.js +1 -1
  93. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  94. package/dist/cjs/src/abstract/whitebit.js +1 -1
  95. package/dist/cjs/src/abstract/woo.js +1 -1
  96. package/dist/cjs/src/abstract/woofipro.js +1 -1
  97. package/dist/cjs/src/abstract/xt.js +1 -1
  98. package/dist/cjs/src/abstract/yobit.js +1 -1
  99. package/dist/cjs/src/abstract/zaif.js +1 -1
  100. package/dist/cjs/src/abstract/zonda.js +1 -1
  101. package/dist/cjs/src/alpaca.js +1 -1
  102. package/dist/cjs/src/apex.js +34 -16
  103. package/dist/cjs/src/arkham.js +21 -1
  104. package/dist/cjs/src/ascendex.js +1 -1
  105. package/dist/cjs/src/backpack.js +1 -1
  106. package/dist/cjs/src/base/Exchange.js +3 -3
  107. package/dist/cjs/src/base/Precise.js +6 -0
  108. package/dist/cjs/src/base/errors.js +6 -0
  109. package/dist/cjs/src/base/functions/crypto.js +1 -1
  110. package/dist/cjs/src/base/functions/encode.js +1 -1
  111. package/dist/cjs/src/base/functions/misc.js +1 -0
  112. package/dist/cjs/src/base/functions/number.js +6 -0
  113. package/dist/cjs/src/base/functions/platform.js +6 -0
  114. package/dist/cjs/src/base/functions/rsa.js +1 -0
  115. package/dist/cjs/src/base/functions/string.js +6 -0
  116. package/dist/cjs/src/base/functions/throttle.js +1 -1
  117. package/dist/cjs/src/base/functions/time.js +6 -0
  118. package/dist/cjs/src/base/functions/totp.js +1 -0
  119. package/dist/cjs/src/base/functions/type.js +6 -0
  120. package/dist/cjs/src/base/functions.js +1 -1
  121. package/dist/cjs/src/base/ws/Cache.js +6 -0
  122. package/dist/cjs/src/base/ws/Client.js +9 -7
  123. package/dist/cjs/src/base/ws/Future.js +1 -1
  124. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  125. package/dist/cjs/src/base/ws/OrderBookSide.js +6 -0
  126. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  127. package/dist/cjs/src/bequant.js +1 -1
  128. package/dist/cjs/src/bigone.js +21 -1
  129. package/dist/cjs/src/binance.js +1 -1
  130. package/dist/cjs/src/binancecoinm.js +1 -1
  131. package/dist/cjs/src/binanceus.js +32 -2
  132. package/dist/cjs/src/binanceusdm.js +1 -1
  133. package/dist/cjs/src/bingx.js +1 -1
  134. package/dist/cjs/src/bit2c.js +1 -1
  135. package/dist/cjs/src/bitbank.js +1 -1
  136. package/dist/cjs/src/bitbns.js +1 -1
  137. package/dist/cjs/src/bitfinex.js +1 -1
  138. package/dist/cjs/src/bitflyer.js +1 -1
  139. package/dist/cjs/src/bitget.js +1 -1
  140. package/dist/cjs/src/bithumb.js +1 -1
  141. package/dist/cjs/src/bitmart.js +1 -1
  142. package/dist/cjs/src/bitmex.js +1 -1
  143. package/dist/cjs/src/bitopro.js +1 -1
  144. package/dist/cjs/src/bitrue.js +1 -1
  145. package/dist/cjs/src/bitso.js +1 -1
  146. package/dist/cjs/src/bitstamp.js +1 -1
  147. package/dist/cjs/src/bitteam.js +1 -1
  148. package/dist/cjs/src/bittrade.js +1 -1
  149. package/dist/cjs/src/blockchaincom.js +1 -1
  150. package/dist/cjs/src/blofin.js +5 -2
  151. package/dist/cjs/src/btcalpha.js +1 -1
  152. package/dist/cjs/src/btcbox.js +1 -1
  153. package/dist/cjs/src/btcmarkets.js +1 -1
  154. package/dist/cjs/src/btcturk.js +1 -1
  155. package/dist/cjs/src/bybit.js +4 -1
  156. package/dist/cjs/src/cex.js +1 -1
  157. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  158. package/dist/cjs/src/coincatch.js +1 -1
  159. package/dist/cjs/src/coincheck.js +1 -1
  160. package/dist/cjs/src/coinex.js +1 -1
  161. package/dist/cjs/src/coinmate.js +1 -1
  162. package/dist/cjs/src/coinmetro.js +1 -1
  163. package/dist/cjs/src/coinone.js +1 -1
  164. package/dist/cjs/src/coinsph.js +1 -0
  165. package/dist/cjs/src/coinspot.js +1 -1
  166. package/dist/cjs/src/cryptocom.js +1 -1
  167. package/dist/cjs/src/cryptomus.js +1 -1
  168. package/dist/cjs/src/deepcoin.js +3024 -0
  169. package/dist/cjs/src/defx.js +1 -1
  170. package/dist/cjs/src/delta.js +1 -1
  171. package/dist/cjs/src/deribit.js +1 -1
  172. package/dist/cjs/src/derive.js +1 -1
  173. package/dist/cjs/src/digifinex.js +1 -1
  174. package/dist/cjs/src/exmo.js +1 -1
  175. package/dist/cjs/src/fmfwio.js +1 -1
  176. package/dist/cjs/src/foxbit.js +1 -1
  177. package/dist/cjs/src/gate.js +1 -1
  178. package/dist/cjs/src/gateio.js +1 -1
  179. package/dist/cjs/src/gemini.js +1 -1
  180. package/dist/cjs/src/hashkey.js +1 -1
  181. package/dist/cjs/src/hibachi.js +1 -1
  182. package/dist/cjs/src/hitbtc.js +1 -0
  183. package/dist/cjs/src/hollaex.js +1 -1
  184. package/dist/cjs/src/htx.js +1 -1
  185. package/dist/cjs/src/huobi.js +1 -1
  186. package/dist/cjs/src/hyperliquid.js +42 -3
  187. package/dist/cjs/src/independentreserve.js +1 -1
  188. package/dist/cjs/src/indodax.js +1 -1
  189. package/dist/cjs/src/kraken.js +1 -1
  190. package/dist/cjs/src/krakenfutures.js +1 -1
  191. package/dist/cjs/src/kucoin.js +2 -1
  192. package/dist/cjs/src/kucoinfutures.js +1 -1
  193. package/dist/cjs/src/latoken.js +1 -1
  194. package/dist/cjs/src/lbank.js +1 -1
  195. package/dist/cjs/src/luno.js +1 -1
  196. package/dist/cjs/src/mercado.js +1 -1
  197. package/dist/cjs/src/mexc.js +1 -1
  198. package/dist/cjs/src/modetrade.js +1 -1
  199. package/dist/cjs/src/myokx.js +1 -1
  200. package/dist/cjs/src/ndax.js +1 -1
  201. package/dist/cjs/src/novadax.js +1 -1
  202. package/dist/cjs/src/oceanex.js +1 -1
  203. package/dist/cjs/src/okx.js +1 -1
  204. package/dist/cjs/src/okxus.js +1 -1
  205. package/dist/cjs/src/onetrading.js +1 -1
  206. package/dist/cjs/src/oxfun.js +1 -1
  207. package/dist/cjs/src/p2b.js +1 -1
  208. package/dist/cjs/src/paradex.js +1 -1
  209. package/dist/cjs/src/paymium.js +1 -1
  210. package/dist/cjs/src/poloniex.js +1 -1
  211. package/dist/cjs/src/pro/alpaca.js +1 -1
  212. package/dist/cjs/src/pro/apex.js +1 -1
  213. package/dist/cjs/src/pro/arkham.js +1 -1
  214. package/dist/cjs/src/pro/ascendex.js +3 -3
  215. package/dist/cjs/src/pro/backpack.js +1 -1
  216. package/dist/cjs/src/pro/bequant.js +1 -1
  217. package/dist/cjs/src/pro/binance.js +100 -3
  218. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  219. package/dist/cjs/src/pro/binanceus.js +20 -1
  220. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  221. package/dist/cjs/src/pro/bingx.js +1 -1
  222. package/dist/cjs/src/pro/bitfinex.js +1 -1
  223. package/dist/cjs/src/pro/bitget.js +1 -1
  224. package/dist/cjs/src/pro/bithumb.js +1 -1
  225. package/dist/cjs/src/pro/bitmart.js +1 -1
  226. package/dist/cjs/src/pro/bitmex.js +1 -1
  227. package/dist/cjs/src/pro/bitrue.js +1 -1
  228. package/dist/cjs/src/pro/bitstamp.js +1 -1
  229. package/dist/cjs/src/pro/bitvavo.js +1 -1
  230. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  231. package/dist/cjs/src/pro/blofin.js +12 -3
  232. package/dist/cjs/src/pro/bybit.js +1 -1
  233. package/dist/cjs/src/pro/cex.js +1 -1
  234. package/dist/cjs/src/pro/coinbase.js +1 -1
  235. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  236. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  237. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  238. package/dist/cjs/src/pro/coincatch.js +1 -1
  239. package/dist/cjs/src/pro/coincheck.js +1 -1
  240. package/dist/cjs/src/pro/coinex.js +1 -1
  241. package/dist/cjs/src/pro/coinone.js +1 -1
  242. package/dist/cjs/src/pro/cryptocom.js +1 -1
  243. package/dist/cjs/src/pro/deepcoin.js +1225 -0
  244. package/dist/cjs/src/pro/defx.js +1 -1
  245. package/dist/cjs/src/pro/deribit.js +1 -1
  246. package/dist/cjs/src/pro/exmo.js +1 -1
  247. package/dist/cjs/src/pro/gate.js +1 -1
  248. package/dist/cjs/src/pro/gateio.js +1 -1
  249. package/dist/cjs/src/pro/gemini.js +1 -1
  250. package/dist/cjs/src/pro/hashkey.js +1 -1
  251. package/dist/cjs/src/pro/hitbtc.js +1 -1
  252. package/dist/cjs/src/pro/hollaex.js +1 -1
  253. package/dist/cjs/src/pro/htx.js +1 -1
  254. package/dist/cjs/src/pro/huobi.js +1 -1
  255. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  256. package/dist/cjs/src/pro/independentreserve.js +1 -1
  257. package/dist/cjs/src/pro/kraken.js +6 -2
  258. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  259. package/dist/cjs/src/pro/kucoin.js +1 -1
  260. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  261. package/dist/cjs/src/pro/lbank.js +1 -0
  262. package/dist/cjs/src/pro/luno.js +1 -1
  263. package/dist/cjs/src/pro/mexc.js +1 -1
  264. package/dist/cjs/src/pro/myokx.js +1 -1
  265. package/dist/cjs/src/pro/ndax.js +1 -1
  266. package/dist/cjs/src/pro/okx.js +1 -1
  267. package/dist/cjs/src/pro/okxus.js +1 -1
  268. package/dist/cjs/src/pro/onetrading.js +1 -1
  269. package/dist/cjs/src/pro/oxfun.js +1 -1
  270. package/dist/cjs/src/pro/p2b.js +1 -1
  271. package/dist/cjs/src/pro/paradex.js +1 -1
  272. package/dist/cjs/src/pro/phemex.js +1 -1
  273. package/dist/cjs/src/pro/poloniex.js +1 -1
  274. package/dist/cjs/src/pro/probit.js +1 -1
  275. package/dist/cjs/src/pro/toobit.js +1 -1
  276. package/dist/cjs/src/pro/upbit.js +1 -1
  277. package/dist/cjs/src/pro/whitebit.js +1 -1
  278. package/dist/cjs/src/pro/xt.js +1 -1
  279. package/dist/cjs/src/probit.js +1 -1
  280. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +0 -1
  281. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +6 -0
  282. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  283. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  284. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +1 -0
  285. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +1 -0
  286. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +1 -0
  287. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +1 -0
  288. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +1 -0
  289. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +1 -0
  290. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +1 -0
  291. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +1 -0
  292. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +1 -0
  293. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +1 -0
  294. package/dist/cjs/src/static_dependencies/ethers/fragments.js +6 -0
  295. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  296. package/dist/cjs/src/static_dependencies/ethers/index.js +1 -10
  297. package/dist/cjs/src/static_dependencies/ethers/interface.js +6 -0
  298. package/dist/cjs/src/static_dependencies/ethers/typed.js +6 -0
  299. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +1 -13
  300. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +1 -6
  301. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +1 -9
  302. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +6 -0
  303. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  304. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +1 -7
  305. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +1 -5
  306. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +6 -0
  307. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +1 -8
  308. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  309. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +1 -0
  310. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +1 -0
  311. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  312. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  313. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  314. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  315. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +1 -0
  316. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  317. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  318. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  319. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  320. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  321. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  322. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  323. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +6 -0
  324. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  325. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  326. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  327. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +1 -0
  328. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  329. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  330. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  331. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  332. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  333. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  334. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  335. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  336. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +6 -0
  337. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +1 -0
  338. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +6 -0
  339. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +6 -0
  340. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +1 -0
  341. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +1 -0
  342. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +1 -0
  343. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +1 -0
  344. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +1 -0
  345. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +1 -0
  346. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  347. package/dist/cjs/src/static_dependencies/node-fetch/body.js +1 -5
  348. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +1 -0
  349. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +6 -0
  350. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +1 -0
  351. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +1 -5
  352. package/dist/cjs/src/static_dependencies/node-fetch/index.js +1 -7
  353. package/dist/cjs/src/static_dependencies/node-fetch/request.js +1 -7
  354. package/dist/cjs/src/static_dependencies/node-fetch/response.js +1 -5
  355. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  356. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  357. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +6 -0
  358. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +1 -0
  359. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +1 -0
  360. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +1 -0
  361. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +1 -0
  362. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  363. package/dist/cjs/src/static_dependencies/qs/formats.js +6 -0
  364. package/dist/cjs/src/static_dependencies/qs/index.js +1 -0
  365. package/dist/cjs/src/static_dependencies/qs/parse.js +1 -0
  366. package/dist/cjs/src/static_dependencies/qs/stringify.js +1 -0
  367. package/dist/cjs/src/static_dependencies/qs/utils.js +6 -0
  368. package/dist/cjs/src/static_dependencies/scure-base/index.js +6 -0
  369. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  370. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  371. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +6 -0
  372. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  373. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  374. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +6 -0
  375. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +6 -0
  376. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +6 -0
  377. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  378. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  379. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  380. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +1 -0
  381. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +1 -0
  382. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  383. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  385. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +1 -0
  386. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +1 -0
  388. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +1 -0
  389. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  390. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +1 -0
  391. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -0
  392. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +1 -0
  393. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  394. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +1 -4
  395. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +1 -0
  396. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +1 -3
  397. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +1 -0
  398. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +1 -0
  399. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +1 -0
  400. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +1 -0
  401. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  402. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +6 -0
  403. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +6 -0
  404. package/dist/cjs/src/timex.js +1 -0
  405. package/dist/cjs/src/tokocrypto.js +1 -1
  406. package/dist/cjs/src/toobit.js +1 -1
  407. package/dist/cjs/src/upbit.js +1 -1
  408. package/dist/cjs/src/wavesexchange.js +1 -1
  409. package/dist/cjs/src/whitebit.js +1 -1
  410. package/dist/cjs/src/woo.js +1 -1
  411. package/dist/cjs/src/woofipro.js +1 -1
  412. package/dist/cjs/src/xt.js +1 -1
  413. package/dist/cjs/src/yobit.js +1 -1
  414. package/dist/cjs/src/zaif.js +1 -1
  415. package/dist/cjs/src/zonda.js +1 -1
  416. package/js/ccxt.d.ts +8 -2
  417. package/js/ccxt.js +12 -2
  418. package/js/src/abstract/alpaca.js +6 -0
  419. package/js/src/abstract/apex.js +6 -0
  420. package/js/src/abstract/arkham.js +6 -0
  421. package/js/src/abstract/ascendex.js +6 -0
  422. package/js/src/abstract/backpack.js +6 -0
  423. package/js/src/abstract/bequant.js +6 -0
  424. package/js/src/abstract/bigone.js +6 -0
  425. package/js/src/abstract/binance.js +6 -0
  426. package/js/src/abstract/binancecoinm.js +6 -0
  427. package/js/src/abstract/binanceus.js +6 -0
  428. package/js/src/abstract/binanceusdm.js +6 -0
  429. package/js/src/abstract/bingx.js +6 -0
  430. package/js/src/abstract/bit2c.js +6 -0
  431. package/js/src/abstract/bitbank.js +6 -0
  432. package/js/src/abstract/bitbns.js +6 -0
  433. package/js/src/abstract/bitfinex.js +6 -0
  434. package/js/src/abstract/bitflyer.js +6 -0
  435. package/js/src/abstract/bitget.js +6 -0
  436. package/js/src/abstract/bithumb.js +6 -0
  437. package/js/src/abstract/bitmart.js +6 -0
  438. package/js/src/abstract/bitmex.js +6 -0
  439. package/js/src/abstract/bitopro.js +6 -0
  440. package/js/src/abstract/bitrue.js +6 -0
  441. package/js/src/abstract/bitso.js +6 -0
  442. package/js/src/abstract/bitstamp.js +6 -0
  443. package/js/src/abstract/bitteam.js +6 -0
  444. package/js/src/abstract/bittrade.js +6 -0
  445. package/js/src/abstract/bitvavo.js +6 -0
  446. package/js/src/abstract/blockchaincom.js +6 -0
  447. package/js/src/abstract/blofin.js +6 -0
  448. package/js/src/abstract/btcalpha.js +6 -0
  449. package/js/src/abstract/btcbox.js +6 -0
  450. package/js/src/abstract/btcmarkets.js +6 -0
  451. package/js/src/abstract/btcturk.js +6 -0
  452. package/js/src/abstract/bybit.d.ts +3 -0
  453. package/js/src/abstract/bybit.js +6 -0
  454. package/js/src/abstract/cex.js +6 -0
  455. package/js/src/abstract/coinbase.js +6 -0
  456. package/js/src/abstract/coinbaseadvanced.js +6 -0
  457. package/js/src/abstract/coinbaseexchange.js +6 -0
  458. package/js/src/abstract/coinbaseinternational.js +6 -0
  459. package/js/src/abstract/coincatch.js +6 -0
  460. package/js/src/abstract/coincheck.js +6 -0
  461. package/js/src/abstract/coinex.js +6 -0
  462. package/js/src/abstract/coinmate.js +6 -0
  463. package/js/src/abstract/coinmetro.js +6 -0
  464. package/js/src/abstract/coinone.js +6 -0
  465. package/js/src/abstract/coinsph.js +6 -0
  466. package/js/src/abstract/coinspot.js +6 -0
  467. package/js/src/abstract/cryptocom.js +6 -0
  468. package/js/src/abstract/cryptomus.js +6 -0
  469. package/js/src/abstract/deepcoin.d.ts +60 -0
  470. package/js/src/abstract/deepcoin.js +11 -0
  471. package/js/src/abstract/defx.js +6 -0
  472. package/js/src/abstract/delta.js +6 -0
  473. package/js/src/abstract/deribit.js +6 -0
  474. package/js/src/abstract/derive.js +6 -0
  475. package/js/src/abstract/digifinex.js +6 -0
  476. package/js/src/abstract/exmo.js +6 -0
  477. package/js/src/abstract/fmfwio.js +6 -0
  478. package/js/src/abstract/foxbit.js +6 -0
  479. package/js/src/abstract/gate.js +6 -0
  480. package/js/src/abstract/gateio.js +6 -0
  481. package/js/src/abstract/gemini.js +6 -0
  482. package/js/src/abstract/hashkey.js +6 -0
  483. package/js/src/abstract/hibachi.js +6 -0
  484. package/js/src/abstract/hitbtc.js +6 -0
  485. package/js/src/abstract/hollaex.js +6 -0
  486. package/js/src/abstract/htx.js +6 -0
  487. package/js/src/abstract/huobi.js +6 -0
  488. package/js/src/abstract/hyperliquid.js +6 -0
  489. package/js/src/abstract/independentreserve.js +6 -0
  490. package/js/src/abstract/indodax.js +6 -0
  491. package/js/src/abstract/kraken.js +6 -0
  492. package/js/src/abstract/krakenfutures.js +6 -0
  493. package/js/src/abstract/kucoin.js +6 -0
  494. package/js/src/abstract/kucoinfutures.js +6 -0
  495. package/js/src/abstract/latoken.js +6 -0
  496. package/js/src/abstract/lbank.js +6 -0
  497. package/js/src/abstract/luno.js +6 -0
  498. package/js/src/abstract/mercado.js +6 -0
  499. package/js/src/abstract/mexc.js +6 -0
  500. package/js/src/abstract/modetrade.js +6 -0
  501. package/js/src/abstract/myokx.js +6 -0
  502. package/js/src/abstract/ndax.js +6 -0
  503. package/js/src/abstract/novadax.js +6 -0
  504. package/js/src/abstract/oceanex.js +6 -0
  505. package/js/src/abstract/okx.js +6 -0
  506. package/js/src/abstract/okxus.js +6 -0
  507. package/js/src/abstract/onetrading.js +6 -0
  508. package/js/src/abstract/oxfun.js +6 -0
  509. package/js/src/abstract/p2b.js +6 -0
  510. package/js/src/abstract/paradex.js +6 -0
  511. package/js/src/abstract/paymium.js +6 -0
  512. package/js/src/abstract/phemex.js +6 -0
  513. package/js/src/abstract/poloniex.js +6 -0
  514. package/js/src/abstract/probit.js +6 -0
  515. package/js/src/abstract/timex.js +6 -0
  516. package/js/src/abstract/tokocrypto.js +6 -0
  517. package/js/src/abstract/toobit.js +6 -0
  518. package/js/src/abstract/upbit.js +6 -0
  519. package/js/src/abstract/wavesexchange.js +6 -0
  520. package/js/src/abstract/whitebit.js +6 -0
  521. package/js/src/abstract/woo.js +6 -0
  522. package/js/src/abstract/woofipro.js +6 -0
  523. package/js/src/abstract/xt.js +6 -0
  524. package/js/src/abstract/yobit.js +6 -0
  525. package/js/src/abstract/zaif.js +6 -0
  526. package/js/src/abstract/zonda.js +6 -0
  527. package/js/src/alpaca.js +6 -0
  528. package/js/src/apex.d.ts +2 -0
  529. package/js/src/apex.js +39 -15
  530. package/js/src/arkham.js +26 -0
  531. package/js/src/ascendex.js +6 -0
  532. package/js/src/backpack.js +6 -0
  533. package/js/src/base/Exchange.js +9 -3
  534. package/js/src/base/Precise.js +6 -0
  535. package/js/src/base/errorHierarchy.js +6 -0
  536. package/js/src/base/errors.js +6 -0
  537. package/js/src/base/functions/crypto.js +6 -0
  538. package/js/src/base/functions/encode.js +6 -0
  539. package/js/src/base/functions/generic.js +6 -0
  540. package/js/src/base/functions/misc.js +6 -0
  541. package/js/src/base/functions/number.js +6 -0
  542. package/js/src/base/functions/platform.js +6 -0
  543. package/js/src/base/functions/rsa.js +6 -0
  544. package/js/src/base/functions/string.js +6 -0
  545. package/js/src/base/functions/throttle.js +6 -0
  546. package/js/src/base/functions/time.js +6 -0
  547. package/js/src/base/functions/totp.js +6 -0
  548. package/js/src/base/functions/type.js +6 -0
  549. package/js/src/base/functions.js +6 -0
  550. package/js/src/base/types.js +6 -0
  551. package/js/src/base/ws/Cache.js +6 -0
  552. package/js/src/base/ws/Client.js +14 -7
  553. package/js/src/base/ws/Future.js +6 -0
  554. package/js/src/base/ws/OrderBook.js +6 -0
  555. package/js/src/base/ws/OrderBookSide.js +6 -0
  556. package/js/src/base/ws/WsClient.js +6 -0
  557. package/js/src/base/ws/functions.js +6 -0
  558. package/js/src/bequant.js +6 -0
  559. package/js/src/bigone.js +26 -0
  560. package/js/src/binance.js +6 -0
  561. package/js/src/binancecoinm.js +6 -0
  562. package/js/src/binanceus.js +37 -1
  563. package/js/src/binanceusdm.js +6 -0
  564. package/js/src/bingx.js +6 -0
  565. package/js/src/bit2c.js +6 -0
  566. package/js/src/bitbank.js +6 -0
  567. package/js/src/bitbns.js +6 -0
  568. package/js/src/bitfinex.js +6 -0
  569. package/js/src/bitflyer.js +6 -0
  570. package/js/src/bitget.js +6 -0
  571. package/js/src/bithumb.js +6 -0
  572. package/js/src/bitmart.js +6 -0
  573. package/js/src/bitmex.js +6 -0
  574. package/js/src/bitopro.js +6 -0
  575. package/js/src/bitrue.js +6 -0
  576. package/js/src/bitso.js +6 -0
  577. package/js/src/bitstamp.js +6 -0
  578. package/js/src/bitteam.js +6 -0
  579. package/js/src/bittrade.js +6 -0
  580. package/js/src/bitvavo.js +6 -0
  581. package/js/src/blockchaincom.js +6 -0
  582. package/js/src/blofin.js +10 -1
  583. package/js/src/btcalpha.js +6 -0
  584. package/js/src/btcbox.js +6 -0
  585. package/js/src/btcmarkets.js +6 -0
  586. package/js/src/btcturk.js +6 -0
  587. package/js/src/bybit.js +9 -0
  588. package/js/src/cex.js +6 -0
  589. package/js/src/coinbase.js +6 -0
  590. package/js/src/coinbaseadvanced.js +6 -0
  591. package/js/src/coinbaseexchange.js +6 -0
  592. package/js/src/coinbaseinternational.js +6 -0
  593. package/js/src/coincatch.js +6 -0
  594. package/js/src/coincheck.js +6 -0
  595. package/js/src/coinex.js +6 -0
  596. package/js/src/coinmate.js +6 -0
  597. package/js/src/coinmetro.js +6 -0
  598. package/js/src/coinone.js +6 -0
  599. package/js/src/coinsph.js +6 -0
  600. package/js/src/coinspot.js +6 -0
  601. package/js/src/cryptocom.js +6 -0
  602. package/js/src/cryptomus.js +6 -0
  603. package/js/src/deepcoin.d.ts +498 -0
  604. package/js/src/deepcoin.js +3022 -0
  605. package/js/src/defx.js +6 -0
  606. package/js/src/delta.js +6 -0
  607. package/js/src/deribit.js +6 -0
  608. package/js/src/derive.js +6 -0
  609. package/js/src/digifinex.js +6 -0
  610. package/js/src/exmo.js +6 -0
  611. package/js/src/fmfwio.js +6 -0
  612. package/js/src/foxbit.js +6 -0
  613. package/js/src/gate.js +6 -0
  614. package/js/src/gateio.js +6 -0
  615. package/js/src/gemini.js +6 -0
  616. package/js/src/hashkey.js +6 -0
  617. package/js/src/hibachi.js +6 -0
  618. package/js/src/hitbtc.js +6 -0
  619. package/js/src/hollaex.js +6 -0
  620. package/js/src/htx.js +6 -0
  621. package/js/src/huobi.js +6 -0
  622. package/js/src/hyperliquid.d.ts +2 -0
  623. package/js/src/hyperliquid.js +47 -2
  624. package/js/src/independentreserve.js +6 -0
  625. package/js/src/indodax.js +6 -0
  626. package/js/src/kraken.js +6 -0
  627. package/js/src/krakenfutures.js +6 -0
  628. package/js/src/kucoin.js +7 -0
  629. package/js/src/kucoinfutures.js +6 -0
  630. package/js/src/latoken.js +6 -0
  631. package/js/src/lbank.js +6 -0
  632. package/js/src/luno.js +6 -0
  633. package/js/src/mercado.js +6 -0
  634. package/js/src/mexc.js +6 -0
  635. package/js/src/modetrade.js +6 -0
  636. package/js/src/myokx.js +6 -0
  637. package/js/src/ndax.js +6 -0
  638. package/js/src/novadax.js +6 -0
  639. package/js/src/oceanex.js +6 -0
  640. package/js/src/okx.js +6 -0
  641. package/js/src/okxus.js +6 -0
  642. package/js/src/onetrading.js +6 -0
  643. package/js/src/oxfun.js +6 -0
  644. package/js/src/p2b.js +6 -0
  645. package/js/src/paradex.js +6 -0
  646. package/js/src/paymium.js +6 -0
  647. package/js/src/phemex.js +6 -0
  648. package/js/src/poloniex.js +6 -0
  649. package/js/src/pro/alpaca.js +6 -0
  650. package/js/src/pro/apex.js +6 -0
  651. package/js/src/pro/arkham.js +6 -0
  652. package/js/src/pro/ascendex.d.ts +1 -1
  653. package/js/src/pro/ascendex.js +8 -2
  654. package/js/src/pro/backpack.js +6 -0
  655. package/js/src/pro/bequant.js +6 -0
  656. package/js/src/pro/binance.d.ts +35 -1
  657. package/js/src/pro/binance.js +103 -3
  658. package/js/src/pro/binancecoinm.js +6 -0
  659. package/js/src/pro/binanceus.js +25 -0
  660. package/js/src/pro/binanceusdm.js +6 -0
  661. package/js/src/pro/bingx.js +6 -0
  662. package/js/src/pro/bitfinex.js +6 -0
  663. package/js/src/pro/bitget.js +6 -0
  664. package/js/src/pro/bithumb.js +6 -0
  665. package/js/src/pro/bitmart.js +6 -0
  666. package/js/src/pro/bitmex.js +6 -0
  667. package/js/src/pro/bitopro.js +6 -0
  668. package/js/src/pro/bitrue.js +6 -0
  669. package/js/src/pro/bitstamp.js +6 -0
  670. package/js/src/pro/bittrade.js +6 -0
  671. package/js/src/pro/bitvavo.js +6 -0
  672. package/js/src/pro/blockchaincom.js +6 -0
  673. package/js/src/pro/blofin.d.ts +5 -0
  674. package/js/src/pro/blofin.js +17 -2
  675. package/js/src/pro/bybit.js +6 -0
  676. package/js/src/pro/cex.js +6 -0
  677. package/js/src/pro/coinbase.js +6 -0
  678. package/js/src/pro/coinbaseadvanced.js +6 -0
  679. package/js/src/pro/coinbaseexchange.js +6 -0
  680. package/js/src/pro/coinbaseinternational.js +6 -0
  681. package/js/src/pro/coincatch.js +6 -0
  682. package/js/src/pro/coincheck.js +6 -0
  683. package/js/src/pro/coinex.js +6 -0
  684. package/js/src/pro/coinone.js +6 -0
  685. package/js/src/pro/cryptocom.js +6 -0
  686. package/js/src/pro/deepcoin.d.ts +169 -0
  687. package/js/src/pro/deepcoin.js +1224 -0
  688. package/js/src/pro/defx.js +6 -0
  689. package/js/src/pro/deribit.js +6 -0
  690. package/js/src/pro/derive.js +6 -0
  691. package/js/src/pro/exmo.js +6 -0
  692. package/js/src/pro/gate.js +6 -0
  693. package/js/src/pro/gateio.js +6 -0
  694. package/js/src/pro/gemini.js +6 -0
  695. package/js/src/pro/hashkey.js +6 -0
  696. package/js/src/pro/hitbtc.js +6 -0
  697. package/js/src/pro/hollaex.js +6 -0
  698. package/js/src/pro/htx.js +6 -0
  699. package/js/src/pro/huobi.js +6 -0
  700. package/js/src/pro/hyperliquid.js +6 -0
  701. package/js/src/pro/independentreserve.js +6 -0
  702. package/js/src/pro/kraken.js +11 -1
  703. package/js/src/pro/krakenfutures.js +6 -0
  704. package/js/src/pro/kucoin.js +6 -0
  705. package/js/src/pro/kucoinfutures.js +6 -0
  706. package/js/src/pro/lbank.js +6 -0
  707. package/js/src/pro/luno.js +6 -0
  708. package/js/src/pro/mexc.js +6 -0
  709. package/js/src/pro/modetrade.js +6 -0
  710. package/js/src/pro/myokx.js +6 -0
  711. package/js/src/pro/ndax.js +6 -0
  712. package/js/src/pro/okx.js +6 -0
  713. package/js/src/pro/okxus.js +6 -0
  714. package/js/src/pro/onetrading.js +6 -0
  715. package/js/src/pro/oxfun.js +6 -0
  716. package/js/src/pro/p2b.js +6 -0
  717. package/js/src/pro/paradex.js +6 -0
  718. package/js/src/pro/phemex.js +6 -0
  719. package/js/src/pro/poloniex.js +6 -0
  720. package/js/src/pro/probit.js +6 -0
  721. package/js/src/pro/toobit.js +6 -0
  722. package/js/src/pro/upbit.js +6 -0
  723. package/js/src/pro/whitebit.js +6 -0
  724. package/js/src/pro/woo.js +6 -0
  725. package/js/src/pro/woofipro.js +6 -0
  726. package/js/src/pro/xt.js +6 -0
  727. package/js/src/probit.js +6 -0
  728. package/js/src/protobuf/mexc/compiled.cjs +6 -0
  729. package/js/src/static_dependencies/ethers/abi-coder.js +6 -0
  730. package/js/src/static_dependencies/ethers/address/address.js +6 -0
  731. package/js/src/static_dependencies/ethers/address/checks.js +6 -0
  732. package/js/src/static_dependencies/ethers/address/contract-address.js +6 -0
  733. package/js/src/static_dependencies/ethers/address/index.js +6 -0
  734. package/js/src/static_dependencies/ethers/bytes32.js +6 -0
  735. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  736. package/js/src/static_dependencies/ethers/coders/address.js +6 -0
  737. package/js/src/static_dependencies/ethers/coders/anonymous.js +6 -0
  738. package/js/src/static_dependencies/ethers/coders/array.js +6 -0
  739. package/js/src/static_dependencies/ethers/coders/boolean.js +6 -0
  740. package/js/src/static_dependencies/ethers/coders/bytes.js +6 -0
  741. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +6 -0
  742. package/js/src/static_dependencies/ethers/coders/null.js +6 -0
  743. package/js/src/static_dependencies/ethers/coders/number.js +6 -0
  744. package/js/src/static_dependencies/ethers/coders/string.js +6 -0
  745. package/js/src/static_dependencies/ethers/coders/tuple.js +6 -0
  746. package/js/src/static_dependencies/ethers/fragments.js +6 -0
  747. package/js/src/static_dependencies/ethers/hash/index.js +6 -0
  748. package/js/src/static_dependencies/ethers/hash/solidity.js +6 -0
  749. package/js/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  750. package/js/src/static_dependencies/ethers/index.js +6 -0
  751. package/js/src/static_dependencies/ethers/interface.js +6 -0
  752. package/js/src/static_dependencies/ethers/typed.js +6 -0
  753. package/js/src/static_dependencies/ethers/utils/base58.js +6 -0
  754. package/js/src/static_dependencies/ethers/utils/base64-browser.js +6 -0
  755. package/js/src/static_dependencies/ethers/utils/base64.js +6 -0
  756. package/js/src/static_dependencies/ethers/utils/data.js +6 -0
  757. package/js/src/static_dependencies/ethers/utils/errors.js +6 -0
  758. package/js/src/static_dependencies/ethers/utils/events.js +6 -0
  759. package/js/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  760. package/js/src/static_dependencies/ethers/utils/index.js +6 -0
  761. package/js/src/static_dependencies/ethers/utils/maths.js +6 -0
  762. package/js/src/static_dependencies/ethers/utils/properties.js +6 -0
  763. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +6 -0
  764. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +6 -0
  765. package/js/src/static_dependencies/ethers/utils/rlp.js +6 -0
  766. package/js/src/static_dependencies/ethers/utils/units.js +6 -0
  767. package/js/src/static_dependencies/ethers/utils/utf8.js +6 -0
  768. package/js/src/static_dependencies/ethers/utils/uuid.js +6 -0
  769. package/js/src/static_dependencies/fflake/browser.js +6 -0
  770. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +6 -0
  771. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +6 -0
  772. package/js/src/static_dependencies/jsencrypt/index.js +6 -0
  773. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +6 -0
  774. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  775. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  776. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  777. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +6 -0
  778. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +6 -0
  779. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +6 -0
  780. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  781. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +6 -0
  782. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +6 -0
  783. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  784. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +6 -0
  785. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  786. package/js/src/static_dependencies/messagepack/msgpack.js +6 -0
  787. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +6 -0
  788. package/js/src/static_dependencies/noble-curves/abstract/curve.js +6 -0
  789. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +6 -0
  790. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +6 -0
  791. package/js/src/static_dependencies/noble-curves/abstract/modular.js +6 -0
  792. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +6 -0
  793. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +6 -0
  794. package/js/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  795. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +6 -0
  796. package/js/src/static_dependencies/noble-curves/bn.js +6 -0
  797. package/js/src/static_dependencies/noble-curves/ed25519.js +6 -0
  798. package/js/src/static_dependencies/noble-curves/ed448.js +6 -0
  799. package/js/src/static_dependencies/noble-curves/index.js +6 -0
  800. package/js/src/static_dependencies/noble-curves/jubjub.js +6 -0
  801. package/js/src/static_dependencies/noble-curves/p256.js +6 -0
  802. package/js/src/static_dependencies/noble-curves/p384.js +6 -0
  803. package/js/src/static_dependencies/noble-curves/p521.js +6 -0
  804. package/js/src/static_dependencies/noble-curves/pasta.js +6 -0
  805. package/js/src/static_dependencies/noble-curves/secp256k1.js +6 -0
  806. package/js/src/static_dependencies/noble-hashes/_assert.js +6 -0
  807. package/js/src/static_dependencies/noble-hashes/_blake2.js +6 -0
  808. package/js/src/static_dependencies/noble-hashes/_sha2.js +6 -0
  809. package/js/src/static_dependencies/noble-hashes/_u64.js +6 -0
  810. package/js/src/static_dependencies/noble-hashes/argon2.js +6 -0
  811. package/js/src/static_dependencies/noble-hashes/blake2b.js +6 -0
  812. package/js/src/static_dependencies/noble-hashes/blake2s.js +6 -0
  813. package/js/src/static_dependencies/noble-hashes/blake3.js +6 -0
  814. package/js/src/static_dependencies/noble-hashes/crypto.js +6 -0
  815. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +6 -0
  816. package/js/src/static_dependencies/noble-hashes/eskdf.js +6 -0
  817. package/js/src/static_dependencies/noble-hashes/hkdf.js +6 -0
  818. package/js/src/static_dependencies/noble-hashes/hmac.js +6 -0
  819. package/js/src/static_dependencies/noble-hashes/index.js +6 -0
  820. package/js/src/static_dependencies/noble-hashes/md5.js +6 -0
  821. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +6 -0
  822. package/js/src/static_dependencies/noble-hashes/ripemd160.js +6 -0
  823. package/js/src/static_dependencies/noble-hashes/scrypt.js +6 -0
  824. package/js/src/static_dependencies/noble-hashes/sha1.js +6 -0
  825. package/js/src/static_dependencies/noble-hashes/sha256.js +6 -0
  826. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +6 -0
  827. package/js/src/static_dependencies/noble-hashes/sha3.js +6 -0
  828. package/js/src/static_dependencies/noble-hashes/sha512.js +6 -0
  829. package/js/src/static_dependencies/noble-hashes/utils.js +6 -0
  830. package/js/src/static_dependencies/node-fetch/body.js +6 -0
  831. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +6 -0
  832. package/js/src/static_dependencies/node-fetch/errors/base.js +6 -0
  833. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +6 -0
  834. package/js/src/static_dependencies/node-fetch/headers.js +6 -0
  835. package/js/src/static_dependencies/node-fetch/index.js +6 -0
  836. package/js/src/static_dependencies/node-fetch/request.js +6 -0
  837. package/js/src/static_dependencies/node-fetch/response.js +6 -0
  838. package/js/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  839. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  840. package/js/src/static_dependencies/node-fetch/utils/is.js +6 -0
  841. package/js/src/static_dependencies/node-fetch/utils/referrer.js +6 -0
  842. package/js/src/static_dependencies/proxies/agent-base/helpers.js +6 -0
  843. package/js/src/static_dependencies/proxies/agent-base/index.js +6 -0
  844. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +6 -0
  845. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +6 -0
  846. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  847. package/js/src/static_dependencies/qs/formats.js +6 -0
  848. package/js/src/static_dependencies/qs/index.js +6 -0
  849. package/js/src/static_dependencies/qs/parse.js +6 -0
  850. package/js/src/static_dependencies/qs/stringify.js +6 -0
  851. package/js/src/static_dependencies/qs/utils.js +6 -0
  852. package/js/src/static_dependencies/scure-base/index.js +6 -0
  853. package/js/src/static_dependencies/scure-starknet/index.js +6 -0
  854. package/js/src/static_dependencies/starknet/constants.js +6 -0
  855. package/js/src/static_dependencies/starknet/index.js +6 -0
  856. package/js/src/static_dependencies/starknet/types/cairoEnum.js +6 -0
  857. package/js/src/static_dependencies/starknet/types/calldata.js +6 -0
  858. package/js/src/static_dependencies/starknet/types/index.js +6 -0
  859. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  860. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  861. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +6 -0
  862. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +6 -0
  863. package/js/src/static_dependencies/starknet/types/lib/index.js +6 -0
  864. package/js/src/static_dependencies/starknet/types/typedData.js +6 -0
  865. package/js/src/static_dependencies/starknet/utils/address.js +6 -0
  866. package/js/src/static_dependencies/starknet/utils/assert.js +6 -0
  867. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +6 -0
  868. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +6 -0
  869. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +6 -0
  870. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +6 -0
  871. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +6 -0
  872. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  873. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  874. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  875. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +6 -0
  876. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +6 -0
  877. package/js/src/static_dependencies/starknet/utils/calldata/index.js +6 -0
  878. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +6 -0
  879. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +6 -0
  880. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +6 -0
  881. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  882. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +6 -0
  883. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +6 -0
  884. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +6 -0
  885. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +6 -0
  886. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +6 -0
  887. package/js/src/static_dependencies/starknet/utils/encode.js +6 -0
  888. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +6 -0
  889. package/js/src/static_dependencies/starknet/utils/hash/index.js +6 -0
  890. package/js/src/static_dependencies/starknet/utils/merkle.js +6 -0
  891. package/js/src/static_dependencies/starknet/utils/num.js +6 -0
  892. package/js/src/static_dependencies/starknet/utils/selector.js +6 -0
  893. package/js/src/static_dependencies/starknet/utils/shortString.js +6 -0
  894. package/js/src/static_dependencies/starknet/utils/starknetId.js +6 -0
  895. package/js/src/static_dependencies/starknet/utils/typedData.js +6 -0
  896. package/js/src/static_dependencies/starknet/utils/uint256.js +6 -0
  897. package/js/src/static_dependencies/starknet/utils/url.js +6 -0
  898. package/js/src/static_dependencies/watchable/src/index.js +6 -0
  899. package/js/src/static_dependencies/watchable/src/types.js +6 -0
  900. package/js/src/static_dependencies/watchable/src/unpromise.js +6 -0
  901. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +6 -0
  902. package/js/src/timex.js +6 -0
  903. package/js/src/tokocrypto.js +6 -0
  904. package/js/src/toobit.js +6 -0
  905. package/js/src/upbit.js +6 -0
  906. package/js/src/wavesexchange.js +6 -0
  907. package/js/src/whitebit.js +6 -0
  908. package/js/src/woo.js +6 -0
  909. package/js/src/woofipro.js +6 -0
  910. package/js/src/xt.js +6 -0
  911. package/js/src/yobit.js +6 -0
  912. package/js/src/zaif.js +6 -0
  913. package/js/src/zonda.js +6 -0
  914. package/package.json +1 -1
@@ -0,0 +1,3022 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import Exchange from './abstract/deepcoin.js';
9
+ import { TICK_SIZE } from './base/functions/number.js';
10
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
11
+ import { Precise } from './base/Precise.js';
12
+ import { ArgumentsRequired, BadRequest, ExchangeError, InsufficientFunds, InvalidOrder, OrderNotFound, NotSupported, NullResponse } from '../ccxt.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class deepcoin
16
+ * @augments Exchange
17
+ */
18
+ export default class deepcoin extends Exchange {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'deepcoin',
22
+ 'name': 'DeepCoin',
23
+ 'countries': ['SG'],
24
+ 'rateLimit': 200,
25
+ 'version': 'v1',
26
+ 'certified': false,
27
+ 'pro': true,
28
+ 'has': {
29
+ 'CORS': undefined,
30
+ 'spot': true,
31
+ 'margin': true,
32
+ 'swap': true,
33
+ 'future': false,
34
+ 'option': false,
35
+ 'addMargin': false,
36
+ 'cancelAllOrders': true,
37
+ 'cancelAllOrdersAfter': false,
38
+ 'cancelOrder': true,
39
+ 'cancelOrders': true,
40
+ 'cancelWithdraw': false,
41
+ 'closePosition': true,
42
+ 'createConvertTrade': false,
43
+ 'createDepositAddress': false,
44
+ 'createLimitBuyOrder': true,
45
+ 'createLimitOrder': true,
46
+ 'createLimitSellOrder': true,
47
+ 'createMarketBuyOrder': true,
48
+ 'createMarketBuyOrderWithCost': true,
49
+ 'createMarketOrder': true,
50
+ 'createMarketOrderWithCost': true,
51
+ 'createMarketSellOrder': true,
52
+ 'createMarketSellOrderWithCost': true,
53
+ 'createOrder': true,
54
+ 'createOrders': false,
55
+ 'createOrderWithTakeProfitAndStopLoss': true,
56
+ 'createPostOnlyOrder': true,
57
+ 'createReduceOnlyOrder': true,
58
+ 'createStopLossOrder': false,
59
+ 'createTakeProfitOrder': false,
60
+ 'createTrailingAmountOrder': false,
61
+ 'createTrailingPercentOrder': false,
62
+ 'createTriggerOrder': true,
63
+ 'editOrder': true,
64
+ 'fetchAccounts': false,
65
+ 'fetchBalance': true,
66
+ 'fetchCanceledAndClosedOrders': true,
67
+ 'fetchCanceledOrders': true,
68
+ 'fetchClosedOrder': true,
69
+ 'fetchClosedOrders': true,
70
+ 'fetchConvertCurrencies': false,
71
+ 'fetchConvertQuote': false,
72
+ 'fetchConvertTrade': false,
73
+ 'fetchConvertTradeHistory': false,
74
+ 'fetchCurrencies': false,
75
+ 'fetchDepositAddress': true,
76
+ 'fetchDepositAddresses': true,
77
+ 'fetchDeposits': true,
78
+ 'fetchDepositsWithdrawals': false,
79
+ 'fetchDepositWithdrawFees': false,
80
+ 'fetchFundingHistory': false,
81
+ 'fetchFundingRate': true,
82
+ 'fetchFundingRateHistory': true,
83
+ 'fetchFundingRates': true,
84
+ 'fetchIndexOHLCV': true,
85
+ 'fetchLedger': true,
86
+ 'fetchLeverage': false,
87
+ 'fetchLeverageTiers': false,
88
+ 'fetchMarginAdjustmentHistory': false,
89
+ 'fetchMarginMode': false,
90
+ 'fetchMarkets': true,
91
+ 'fetchMarkOHLCV': true,
92
+ 'fetchMyTrades': true,
93
+ 'fetchOHLCV': true,
94
+ 'fetchOpenInterest': false,
95
+ 'fetchOpenInterestHistory': false,
96
+ 'fetchOpenOrder': true,
97
+ 'fetchOpenOrders': true,
98
+ 'fetchOrder': false,
99
+ 'fetchOrderBook': true,
100
+ 'fetchOrders': false,
101
+ 'fetchOrderTrades': true,
102
+ 'fetchPosition': true,
103
+ 'fetchPositionHistory': false,
104
+ 'fetchPositionMode': false,
105
+ 'fetchPositions': true,
106
+ 'fetchPositionsForSymbol': true,
107
+ 'fetchPositionsHistory': true,
108
+ 'fetchPremiumIndexOHLCV': false,
109
+ 'fetchStatus': false,
110
+ 'fetchTicker': false,
111
+ 'fetchTickers': true,
112
+ 'fetchTime': false,
113
+ 'fetchTrades': true,
114
+ 'fetchTradingFee': false,
115
+ 'fetchTradingFees': false,
116
+ 'fetchTransactions': false,
117
+ 'fetchTransfers': false,
118
+ 'fetchWithdrawals': true,
119
+ 'reduceMargin': false,
120
+ 'sandbox': false,
121
+ 'setLeverage': true,
122
+ 'setMargin': false,
123
+ 'setMarginMode': false,
124
+ 'setPositionMode': false,
125
+ 'transfer': true,
126
+ 'withdraw': false,
127
+ },
128
+ 'timeframes': {
129
+ '1m': '1m',
130
+ '5m': '5m',
131
+ '15m': '15m',
132
+ '30m': '30m',
133
+ '1h': '1H',
134
+ '4h': '4H',
135
+ '12h': '12H',
136
+ '1d': '1D',
137
+ '1w': '1W',
138
+ '1M': '1M',
139
+ '1y': '1Y',
140
+ },
141
+ 'urls': {
142
+ 'logo': 'https://github.com/user-attachments/assets/671bd35c-770e-4935-9070-f8fb114f79c4',
143
+ 'api': {
144
+ 'public': 'https://api.deepcoin.com',
145
+ 'private': 'https://api.deepcoin.com',
146
+ },
147
+ 'www': 'https://www.deepcoin.com/',
148
+ 'doc': 'https://www.deepcoin.com/docs',
149
+ 'referral': {
150
+ 'url': 'https://s.deepcoin.com/UzkyODgy',
151
+ 'discount': 0.1,
152
+ },
153
+ },
154
+ 'api': {
155
+ 'public': {
156
+ 'get': {
157
+ 'deepcoin/market/books': 1,
158
+ 'deepcoin/market/candles': 1,
159
+ 'deepcoin/market/instruments': 1,
160
+ 'deepcoin/market/tickers': 1,
161
+ 'deepcoin/market/index-candles': 1,
162
+ 'deepcoin/market/trades': 1,
163
+ 'deepcoin/market/mark-price-candles': 1,
164
+ 'deepcoin/market/step-margin': 5,
165
+ },
166
+ },
167
+ 'private': {
168
+ 'get': {
169
+ 'deepcoin/account/balances': 5,
170
+ 'deepcoin/account/bills': 5,
171
+ 'deepcoin/account/positions': 5,
172
+ 'deepcoin/trade/fills': 5,
173
+ 'deepcoin/trade/orderByID': 5,
174
+ 'deepcoin/trade/finishOrderByID': 5,
175
+ 'deepcoin/trade/orders-history': 5,
176
+ 'deepcoin/trade/v2/orders-pending': 5,
177
+ 'deepcoin/trade/funding-rate': 5,
178
+ 'deepcoin/trade/fund-rate/current-funding-rate': 5,
179
+ 'deepcoin/trade/fund-rate/history': 5,
180
+ 'deepcoin/trade/trigger-orders-pending': 5,
181
+ 'deepcoin/trade/trigger-orders-history': 5,
182
+ 'deepcoin/copytrading/support-contracts': 5,
183
+ 'deepcoin/copytrading/leader-position': 5,
184
+ 'deepcoin/copytrading/estimate-profit': 5,
185
+ 'deepcoin/copytrading/history-profit': 5,
186
+ 'deepcoin/copytrading/follower-rank': 5,
187
+ 'deepcoin/internal-transfer/support': 5,
188
+ 'deepcoin/internal-transfer/history-order': 5,
189
+ 'deepcoin/rebate/config': 5,
190
+ 'deepcoin/agents/users': 5,
191
+ 'deepcoin/agents/users/rebate-list': 5,
192
+ 'deepcoin/agents/users/rebates': 5,
193
+ 'deepcoin/asset/deposit-list': 5,
194
+ 'deepcoin/asset/withdraw-list': 5,
195
+ 'deepcoin/asset/recharge-chain-list': 5,
196
+ 'deepcoin/listenkey/acquire': 5,
197
+ 'deepcoin/listenkey/extend': 5,
198
+ },
199
+ 'post': {
200
+ 'deepcoin/account/set-leverage': 5,
201
+ 'deepcoin/trade/order': 5,
202
+ 'deepcoin/trade/replace-order': 5,
203
+ 'deepcoin/trade/cancel-order': 5,
204
+ 'deepcoin/trade/batch-cancel-order': 5,
205
+ 'deepcoin/trade/cancel-trigger-order': 1 / 6,
206
+ 'deepcoin/trade/swap/cancel-all': 5,
207
+ 'deepcoin/trade/trigger-order': 5,
208
+ 'deepcoin/trade/batch-close-position': 5,
209
+ 'deepcoin/trade/replace-order-sltp': 5,
210
+ 'deepcoin/trade/close-position-by-ids': 5,
211
+ 'deepcoin/copytrading/leader-settings': 5,
212
+ 'deepcoin/copytrading/set-contracts': 5,
213
+ 'deepcoin/internal-transfer': 5,
214
+ 'deepcoin/rebate/config': 5,
215
+ 'deepcoin/asset/transfer': 5,
216
+ },
217
+ },
218
+ },
219
+ 'fees': {
220
+ 'trading': {
221
+ 'taker': this.parseNumber('0.0015'),
222
+ 'maker': this.parseNumber('0.0010'),
223
+ },
224
+ },
225
+ 'features': {
226
+ 'spot': {
227
+ 'sandbox': false,
228
+ 'createOrder': {
229
+ 'marginMode': true,
230
+ 'triggerPrice': true,
231
+ 'triggerPriceType': {
232
+ 'last': true,
233
+ 'mark': false,
234
+ 'index': false,
235
+ },
236
+ 'triggerDirection': false,
237
+ 'stopLossPrice': true,
238
+ 'takeProfitPrice': true,
239
+ 'attachedStopLossTakeProfit': {
240
+ 'triggerPriceType': {
241
+ 'last': false,
242
+ 'mark': false,
243
+ 'index': false,
244
+ },
245
+ 'price': true,
246
+ },
247
+ 'timeInForce': {
248
+ 'IOC': true,
249
+ 'FOK': true,
250
+ 'PO': true,
251
+ 'GTD': false,
252
+ },
253
+ 'hedged': true,
254
+ 'trailing': false,
255
+ 'marketBuyRequiresPrice': false,
256
+ },
257
+ 'createOrders': undefined,
258
+ 'fetchMyTrades': {
259
+ 'marginMode': false,
260
+ 'limit': 100,
261
+ 'daysBack': 60,
262
+ 'untilDays': undefined,
263
+ 'symbolRequired': true,
264
+ },
265
+ 'fetchOrder': undefined,
266
+ 'fetchOpenOrders': {
267
+ 'marginMode': false,
268
+ 'limit': 100,
269
+ 'trigger': true,
270
+ 'trailing': false,
271
+ 'symbolRequired': true,
272
+ },
273
+ 'fetchOrders': undefined,
274
+ 'fetchClosedOrders': {
275
+ 'marginMode': false,
276
+ 'limit': 100,
277
+ 'daysBack': undefined,
278
+ 'daysBackCanceled': undefined,
279
+ 'untilDays': undefined,
280
+ 'trigger': true,
281
+ 'trailing': false,
282
+ 'symbolRequired': true,
283
+ },
284
+ 'fetchOHLCV': {
285
+ 'limit': 300,
286
+ },
287
+ },
288
+ 'swap': {
289
+ 'linear': {
290
+ 'extends': 'spot',
291
+ },
292
+ 'inverse': {
293
+ 'extends': 'spot',
294
+ },
295
+ },
296
+ },
297
+ 'requiredCredentials': {
298
+ 'apiKey': true,
299
+ 'secret': true,
300
+ 'password': true,
301
+ },
302
+ 'precisionMode': TICK_SIZE,
303
+ 'options': {
304
+ 'recvWindow': 5000,
305
+ 'defaultNetworks': {
306
+ 'ETH': 'ERC20',
307
+ 'USDT': 'TRC20',
308
+ 'USDC': 'ERC20',
309
+ },
310
+ 'networks': {
311
+ 'ERC20': 'ERC20',
312
+ 'TRC20': 'TRC20',
313
+ 'ARB': 'ARBITRUM',
314
+ 'BSC': 'BSC(BEP20)',
315
+ 'SOL': 'SOL',
316
+ 'BTC': 'Bitcoin',
317
+ 'ADA': 'Cardano',
318
+ },
319
+ 'networksById': {},
320
+ 'fetchMarkets': {
321
+ 'types': ['spot', 'swap'], // spot, swap,
322
+ },
323
+ 'timeInForce': {
324
+ 'GTC': 'GTC',
325
+ 'IOC': 'IOC',
326
+ 'PO': 'PO', // Post Only
327
+ },
328
+ 'exchangeType': {
329
+ 'spot': 'SPOT',
330
+ 'swap': 'SWAP',
331
+ 'SPOT': 'SPOT',
332
+ 'SWAP': 'SWAP',
333
+ },
334
+ 'accountsByType': {
335
+ 'spot': 1,
336
+ 'fund': 2,
337
+ 'rebate': 3,
338
+ 'inverse': 5,
339
+ 'linear': 7,
340
+ 'demo': 10,
341
+ },
342
+ },
343
+ 'commonCurrencies': {},
344
+ 'exceptions': {
345
+ 'exact': {
346
+ '24': OrderNotFound,
347
+ '31': InsufficientFunds,
348
+ '36': InsufficientFunds,
349
+ '44': BadRequest,
350
+ '49': InvalidOrder,
351
+ '194': InvalidOrder,
352
+ '195': InvalidOrder,
353
+ '199': BadRequest,
354
+ '100010': InsufficientFunds,
355
+ 'unsupportedAction': BadRequest,
356
+ 'localIDNotExist': BadRequest,
357
+ },
358
+ 'broad': {
359
+ 'no available': NotSupported,
360
+ 'field is required': ArgumentsRequired,
361
+ 'not in acceptable range': BadRequest,
362
+ 'subscription cluster does not "exist"': BadRequest,
363
+ 'must be equal or lesser than': BadRequest, // {"code":"51","msg":"The Size value `100` must be equal or lesser than 50","data":null}
364
+ },
365
+ },
366
+ });
367
+ }
368
+ handleMarketTypeAndParams(methodName, market = undefined, params = {}, defaultValue = undefined) {
369
+ const instType = this.safeString(params, 'instType');
370
+ params = this.omit(params, 'instType');
371
+ const type = this.safeString(params, 'type');
372
+ if ((type === undefined) && (instType !== undefined)) {
373
+ params = this.extend(params, { 'type': instType });
374
+ }
375
+ return super.handleMarketTypeAndParams(methodName, market, params, defaultValue);
376
+ }
377
+ convertToInstrumentType(type) {
378
+ const exchangeTypes = this.safeDict(this.options, 'exchangeType', {});
379
+ return this.safeString(exchangeTypes, type, type);
380
+ }
381
+ /**
382
+ * @method
383
+ * @name deepcoin#fetchMarkets
384
+ * @see https://www.deepcoin.com/docs/DeepCoinMarket/getBaseInfo
385
+ * @description retrieves data on all markets for okcoin
386
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
387
+ * @returns {object[]} an array of objects representing market data
388
+ */
389
+ async fetchMarkets(params = {}) {
390
+ let types = ['spot', 'swap'];
391
+ const fetchMarketsOption = this.safeDict(this.options, 'fetchMarkets');
392
+ if (fetchMarketsOption !== undefined) {
393
+ types = this.safeList(fetchMarketsOption, 'types', types);
394
+ }
395
+ else {
396
+ types = this.safeList(this.options, 'fetchMarkets', types); // backward-support
397
+ }
398
+ let promises = [];
399
+ let result = [];
400
+ for (let i = 0; i < types.length; i++) {
401
+ promises.push(this.fetchMarketsByType(types[i], params));
402
+ }
403
+ promises = await Promise.all(promises);
404
+ for (let i = 0; i < promises.length; i++) {
405
+ result = this.arrayConcat(result, promises[i]);
406
+ }
407
+ return result;
408
+ }
409
+ async fetchMarketsByType(type, params = {}) {
410
+ const request = {
411
+ 'instType': this.convertToInstrumentType(type),
412
+ };
413
+ const response = await this.publicGetDeepcoinMarketInstruments(this.extend(request, params));
414
+ //
415
+ // spot
416
+ //
417
+ // {
418
+ // "code": "0",
419
+ // "msg": "",
420
+ // "data": [
421
+ // {
422
+ // "instType": "SPOT",
423
+ // "instId": "A-USDT",
424
+ // "uly": "",
425
+ // "baseCcy": "A",
426
+ // "quoteCcy": "USDT",
427
+ // "ctVal": "1",
428
+ // "ctValCcy": "",
429
+ // "listTime": "0",
430
+ // "lever": "1",
431
+ // "tickSz": "0.0001",
432
+ // "lotSz": "0.001",
433
+ // "minSz": "0.5",
434
+ // "ctType": "",
435
+ // "alias": "",
436
+ // "state": "live",
437
+ // "maxLmtSz": "7692307",
438
+ // "maxMktSz": "7692307"
439
+ // }
440
+ // ]
441
+ // }
442
+ //
443
+ const dataResponse = this.safeList(response, 'data', []);
444
+ return this.parseMarkets(dataResponse);
445
+ }
446
+ parseMarket(market) {
447
+ //
448
+ // spot markets
449
+ //
450
+ // {
451
+ // "instType": "SPOT",
452
+ // "instId": "A-USDT",
453
+ // "uly": "",
454
+ // "baseCcy": "A",
455
+ // "quoteCcy": "USDT",
456
+ // "ctVal": "1",
457
+ // "ctValCcy": "",
458
+ // "listTime": "0",
459
+ // "lever": "1",
460
+ // "tickSz": "0.0001",
461
+ // "lotSz": "0.001",
462
+ // "minSz": "0.5",
463
+ // "ctType": "",
464
+ // "alias": "",
465
+ // "state": "live",
466
+ // "maxLmtSz": "7692307",
467
+ // "maxMktSz": "7692307"
468
+ // }
469
+ //
470
+ // swap markets
471
+ //
472
+ // {
473
+ // "instType": "SWAP",
474
+ // "instId": "ZORA-USDT-SWAP",
475
+ // "uly": "",
476
+ // "baseCcy": "ZORA",
477
+ // "quoteCcy": "USDT",
478
+ // "ctVal": "1",
479
+ // "ctValCcy": "",
480
+ // "listTime": "0",
481
+ // "lever": "20",
482
+ // "tickSz": "0.00001",
483
+ // "lotSz": "1",
484
+ // "minSz": "1685",
485
+ // "ctType": "",
486
+ // "alias": "",
487
+ // "state": "live",
488
+ // "maxLmtSz": "10000000",
489
+ // "maxMktSz": "10000000"
490
+ // }
491
+ //
492
+ const id = this.safeString(market, 'instId');
493
+ const type = this.safeStringLower(market, 'instType');
494
+ const spot = (type === 'spot');
495
+ const swap = (type === 'swap');
496
+ const baseId = this.safeString(market, 'baseCcy');
497
+ const quoteId = this.safeString(market, 'quoteCcy', '');
498
+ let settleId = undefined;
499
+ let settle = undefined;
500
+ const base = this.safeCurrencyCode(baseId);
501
+ const quote = this.safeCurrencyCode(quoteId);
502
+ let symbol = base + '/' + quote;
503
+ let isLinear = undefined;
504
+ if (swap) {
505
+ isLinear = (quoteId !== 'USD');
506
+ settleId = isLinear ? quoteId : baseId;
507
+ settle = this.safeCurrencyCode(settleId);
508
+ symbol = symbol + ':' + settle;
509
+ }
510
+ const fees = this.safeDict2(this.fees, type, 'trading', {});
511
+ let maxLeverage = this.safeString(market, 'lever', '1');
512
+ maxLeverage = Precise.stringMax(maxLeverage, '1');
513
+ const maxMarketSize = this.safeString(market, 'maxMktSz');
514
+ const maxLimitSize = this.safeString(market, 'maxLmtSz');
515
+ const maxAmount = this.parseNumber(Precise.stringMax(maxMarketSize, maxLimitSize));
516
+ const state = this.safeString(market, 'state');
517
+ return this.extend(fees, {
518
+ 'id': id,
519
+ 'symbol': symbol,
520
+ 'base': base,
521
+ 'quote': quote,
522
+ 'settle': settle,
523
+ 'baseId': baseId,
524
+ 'quoteId': quoteId,
525
+ 'settleId': settleId,
526
+ 'type': type,
527
+ 'spot': spot,
528
+ 'margin': spot && (Precise.stringGt(maxLeverage, '1')),
529
+ 'swap': swap,
530
+ 'future': false,
531
+ 'option': false,
532
+ 'active': state === 'live',
533
+ 'contract': swap,
534
+ 'linear': isLinear,
535
+ 'inverse': swap ? (!isLinear) : undefined,
536
+ 'contractSize': swap ? this.safeNumber(market, 'ctVal') : undefined,
537
+ 'expiry': undefined,
538
+ 'expiryDatetime': undefined,
539
+ 'strike': undefined,
540
+ 'optionType': undefined,
541
+ 'created': undefined,
542
+ 'precision': {
543
+ 'amount': this.safeNumber(market, 'lotSz'),
544
+ 'price': this.safeNumber(market, 'tickSz'),
545
+ },
546
+ 'limits': {
547
+ 'leverage': {
548
+ 'min': this.parseNumber('1'),
549
+ 'max': this.parseNumber(maxLeverage),
550
+ },
551
+ 'amount': {
552
+ 'min': this.safeNumber(market, 'minSz'),
553
+ 'max': maxAmount,
554
+ },
555
+ 'price': {
556
+ 'min': undefined,
557
+ 'max': undefined,
558
+ },
559
+ 'cost': {
560
+ 'min': undefined,
561
+ 'max': undefined,
562
+ },
563
+ },
564
+ 'info': market,
565
+ });
566
+ }
567
+ setMarkets(markets, currencies = undefined) {
568
+ markets = super.setMarkets(markets, currencies);
569
+ const symbols = Object.keys(markets);
570
+ for (let i = 0; i < symbols.length; i++) {
571
+ const symbol = symbols[i];
572
+ const market = markets[symbol];
573
+ if (market['swap']) {
574
+ const additionalId = market['baseId'] + market['quoteId'];
575
+ this.markets_by_id[additionalId] = [market]; // some endpoints return swap market id as base+quote
576
+ }
577
+ }
578
+ return this.markets;
579
+ }
580
+ /**
581
+ * @method
582
+ * @name deepcoin#fetchOrderBook
583
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
584
+ * @see https://www.deepcoin.com/docs/DeepCoinMarket/marketBooks
585
+ * @param {string} symbol unified symbol of the market to fetch the order book for
586
+ * @param {int} [limit] the maximum amount of order book entries to return
587
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
588
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
589
+ */
590
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
591
+ await this.loadMarkets();
592
+ const market = this.market(symbol);
593
+ if (limit === undefined) {
594
+ limit = 400;
595
+ }
596
+ const request = {
597
+ 'instId': market['id'],
598
+ 'sz': limit,
599
+ };
600
+ const response = await this.publicGetDeepcoinMarketBooks(this.extend(request, params));
601
+ //
602
+ // {
603
+ // "code": "0",
604
+ // "msg": "",
605
+ // "data": {
606
+ // "bids": [
607
+ // ["3732.21", "99.6"],
608
+ // ["3732.2", "54.7"]
609
+ // ],
610
+ // "asks": [
611
+ // ["3732.22", "85.1"],
612
+ // ["3732.23", "49.4"]
613
+ // ]
614
+ // }
615
+ // }
616
+ //
617
+ const data = this.safeDict(response, 'data', {});
618
+ return this.parseOrderBook(data, symbol, undefined, 'bids', 'asks', 0, 1);
619
+ }
620
+ /**
621
+ * @method
622
+ * @name deepcoin#fetchOHLCV
623
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
624
+ * @see https://www.deepcoin.com/docs/DeepCoinMarket/getKlineData
625
+ * @see https://www.deepcoin.com/docs/DeepCoinMarket/getIndexKlineData
626
+ * @see https://www.deepcoin.com/docs/DeepCoinMarket/getMarkKlineData
627
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
628
+ * @param {string} timeframe the length of time each candle represents
629
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
630
+ * @param {int} [limit] the maximum amount of candles to fetch
631
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
632
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
633
+ * @param {string} [params.price] "mark" or "index" for mark price and index price candles
634
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
635
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
636
+ */
637
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
638
+ await this.loadMarkets();
639
+ const maxLimit = 300;
640
+ let paginate = false;
641
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
642
+ if (paginate) {
643
+ params = this.extend(params, { 'calculateUntil': true });
644
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, maxLimit);
645
+ }
646
+ const market = this.market(symbol);
647
+ const price = this.safeString(params, 'price');
648
+ params = this.omit(params, 'price');
649
+ const bar = this.safeString(this.timeframes, timeframe, timeframe);
650
+ const request = {
651
+ 'instId': market['id'],
652
+ 'bar': bar,
653
+ };
654
+ if (limit !== undefined) {
655
+ request['limit'] = limit;
656
+ }
657
+ const until = this.safeInteger(params, 'until');
658
+ if (until !== undefined) {
659
+ request['after'] = until;
660
+ params = this.omit(params, 'until');
661
+ }
662
+ const calculateUntil = this.safeBool(params, 'calculateUntil', false);
663
+ if (calculateUntil) {
664
+ params = this.omit(params, 'calculateUntil');
665
+ if (since !== undefined) {
666
+ // the exchange do not have a since param for this endpoint
667
+ // we canlculate until (after) for correct pagination
668
+ const duration = this.parseTimeframe(timeframe);
669
+ const numberOfCandles = (limit === undefined) ? maxLimit : limit;
670
+ let endTime = since + (duration * numberOfCandles) * 1000;
671
+ if (until !== undefined) {
672
+ endTime = Math.min(endTime, until);
673
+ }
674
+ const now = this.milliseconds();
675
+ request['after'] = Math.min(endTime, now);
676
+ }
677
+ }
678
+ let response = undefined;
679
+ if (price === 'mark') {
680
+ response = await this.publicGetDeepcoinMarketMarkPriceCandles(this.extend(request, params));
681
+ }
682
+ else if (price === 'index') {
683
+ response = await this.publicGetDeepcoinMarketIndexCandles(this.extend(request, params));
684
+ }
685
+ else {
686
+ response = await this.publicGetDeepcoinMarketCandles(this.extend(request, params));
687
+ }
688
+ //
689
+ // {
690
+ // "code": "0",
691
+ // "msg": "",
692
+ // "data":[
693
+ // [
694
+ // "1760221800000",
695
+ // "3739.08",
696
+ // "3741.95",
697
+ // "3737.75",
698
+ // "3740.1",
699
+ // "2849",
700
+ // "1065583.744"
701
+ // ],
702
+ // [
703
+ // "1760221740000",
704
+ // "3742.36",
705
+ // "3743.01",
706
+ // "3736.83",
707
+ // "3739.08",
708
+ // "2723",
709
+ // "1018290.723"
710
+ // ]
711
+ // ]
712
+ // }
713
+ //
714
+ const data = this.safeList(response, 'data', []);
715
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
716
+ }
717
+ /**
718
+ * @method
719
+ * @name deepcoin#fetchTickers
720
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
721
+ * @see https://www.deepcoin.com/docs/DeepCoinMarket/getMarketTickers
722
+ * @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
723
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
724
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
725
+ */
726
+ async fetchTickers(symbols = undefined, params = {}) {
727
+ await this.loadMarkets();
728
+ symbols = this.marketSymbols(symbols);
729
+ const market = this.getMarketFromSymbols(symbols);
730
+ let marketType = undefined;
731
+ [marketType, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
732
+ const request = {
733
+ 'instType': this.convertToInstrumentType(marketType),
734
+ };
735
+ const response = await this.publicGetDeepcoinMarketTickers(this.extend(request, params));
736
+ const tickers = this.safeList(response, 'data', []);
737
+ return this.parseTickers(tickers, symbols);
738
+ }
739
+ parseTicker(ticker, market = undefined) {
740
+ //
741
+ // {
742
+ // "instType": "SWAP",
743
+ // "instId": "BTC-USD-SWAP",
744
+ // "last": "114113.3",
745
+ // "lastSz": "",
746
+ // "askPx": "114113.5",
747
+ // "askSz": "56280",
748
+ // "bidPx": "114113.2",
749
+ // "bidSz": "63220",
750
+ // "open24h": "113214.7",
751
+ // "high24h": "116039.2",
752
+ // "low24h": "113214.7",
753
+ // "volCcy24h": "73.31475724",
754
+ // "vol24h": "8406739",
755
+ // "sodUtc0": "",
756
+ // "sodUtc8": "",
757
+ // "ts": "1760367816000"
758
+ // }
759
+ //
760
+ const timestamp = this.safeInteger(ticker, 'ts');
761
+ const marketId = this.safeString(ticker, 'instId');
762
+ market = this.safeMarket(marketId, market, '-');
763
+ const symbol = market['symbol'];
764
+ const last = this.safeString(ticker, 'last');
765
+ const open = this.safeString(ticker, 'open24h');
766
+ let quoteVolume = this.safeString(ticker, 'volCcy24h');
767
+ let baseVolume = this.safeString(ticker, 'vol24h');
768
+ if (market['swap'] && market['inverse']) {
769
+ const temp = baseVolume;
770
+ baseVolume = quoteVolume;
771
+ quoteVolume = temp;
772
+ }
773
+ const high = this.safeString(ticker, 'high24h');
774
+ const low = this.safeString(ticker, 'low24h');
775
+ return this.safeTicker({
776
+ 'symbol': symbol,
777
+ 'timestamp': timestamp,
778
+ 'datetime': this.iso8601(timestamp),
779
+ 'high': high,
780
+ 'low': low,
781
+ 'bid': this.safeString(ticker, 'bidPx'),
782
+ 'bidVolume': this.safeString(ticker, 'bidSz'),
783
+ 'ask': this.safeString(ticker, 'askPx'),
784
+ 'askVolume': this.safeString(ticker, 'askSz'),
785
+ 'vwap': undefined,
786
+ 'open': open,
787
+ 'close': last,
788
+ 'last': last,
789
+ 'previousClose': undefined,
790
+ 'change': undefined,
791
+ 'percentage': undefined,
792
+ 'average': undefined,
793
+ 'baseVolume': baseVolume,
794
+ 'quoteVolume': quoteVolume,
795
+ 'markPrice': undefined,
796
+ 'indexPrice': undefined,
797
+ 'info': ticker,
798
+ }, market);
799
+ }
800
+ /**
801
+ * @method
802
+ * @name deepcoin#fetchTrades
803
+ * @description get the list of most recent trades for a particular symbol
804
+ * @see https://www.deepcoin.com/docs/DeepCoinMarket/getTrades
805
+ * @param {string} symbol unified symbol of the market to fetch trades for
806
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
807
+ * @param {int} [limit] the maximum amount of trades to fetch (default 100, max 500)
808
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
809
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
810
+ */
811
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
812
+ await this.loadMarkets();
813
+ const market = this.market(symbol);
814
+ const request = {
815
+ 'instId': market['id'],
816
+ };
817
+ if (limit !== undefined) {
818
+ request['limit'] = limit; // default 100, max 500
819
+ }
820
+ const productGroup = this.getProductGroupFromMarket(market);
821
+ request['productGroup'] = productGroup;
822
+ const response = await this.publicGetDeepcoinMarketTrades(this.extend(request, params));
823
+ const data = this.safeList(response, 'data', []);
824
+ return this.parseTrades(data, market, since, limit);
825
+ }
826
+ getProductGroupFromMarket(market) {
827
+ let productGroup = 'Spot';
828
+ if (market['swap']) {
829
+ if (market['linear']) {
830
+ productGroup = 'SwapU';
831
+ }
832
+ else {
833
+ productGroup = 'Swap';
834
+ }
835
+ }
836
+ return productGroup;
837
+ }
838
+ parseTrade(trade, market = undefined) {
839
+ //
840
+ // public fetchTrades
841
+ //
842
+ // {
843
+ // "instId": "ETH-USDT",
844
+ // "tradeId": "1001056388761321",
845
+ // "px": "4095.66",
846
+ // "sz": "0.01311251",
847
+ // "side": "sell",
848
+ // "ts": "1760367870000"
849
+ // }
850
+ //
851
+ // private fetchMyTrades
852
+ // {
853
+ // "instType": "SPOT",
854
+ // "instId": "ETH-USDT",
855
+ // "tradeId": "1001056429613610",
856
+ // "ordId": "1001435238208686",
857
+ // "clOrdId": "",
858
+ // "billId": "10010564296136101",
859
+ // "tag": "",
860
+ // "fillPx": "3791.15",
861
+ // "fillSz": "0.004",
862
+ // "side": "sell",
863
+ // "posSide": "",
864
+ // "execType": "",
865
+ // "feeCcy": "USDT",
866
+ // "fee": "0.0151646",
867
+ // "ts": "1760704540000"
868
+ // }
869
+ //
870
+ const marketId = this.safeString(trade, 'instId');
871
+ market = this.safeMarket(marketId, market);
872
+ const timestamp = this.safeInteger(trade, 'ts');
873
+ const side = this.safeString(trade, 'side');
874
+ const execType = this.safeString(trade, 'execType');
875
+ let fee = undefined;
876
+ const feeCost = this.safeString(trade, 'fee');
877
+ if (feeCost !== undefined) {
878
+ const feeCurrencyId = this.safeString(trade, 'feeCcy');
879
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
880
+ fee = {
881
+ 'cost': feeCost,
882
+ 'currency': feeCurrencyCode,
883
+ };
884
+ }
885
+ return this.safeTrade({
886
+ 'info': trade,
887
+ 'timestamp': timestamp,
888
+ 'datetime': this.iso8601(timestamp),
889
+ 'symbol': market['symbol'],
890
+ 'id': this.safeString(trade, 'tradeId'),
891
+ 'order': this.safeString(trade, 'ordId'),
892
+ 'type': undefined,
893
+ 'takerOrMaker': this.parseTakerOrMaker(execType),
894
+ 'side': side,
895
+ 'price': this.safeString2(trade, 'fillPx', 'px'),
896
+ 'amount': this.safeString2(trade, 'fillSz', 'sz'),
897
+ 'cost': undefined,
898
+ 'fee': fee,
899
+ }, market);
900
+ }
901
+ parseTakerOrMaker(execType) {
902
+ const types = {
903
+ 'T': 'taker',
904
+ 'M': 'maker',
905
+ };
906
+ return this.safeString(types, execType, execType);
907
+ }
908
+ /**
909
+ * @method
910
+ * @name deepcoin#fetchBalance
911
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
912
+ * @see https://www.deepcoin.com/docs/DeepCoinAccount/getAccountBalance
913
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
914
+ * @param {string} [params.type] "spot" or "swap", the market type for the balance
915
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
916
+ */
917
+ async fetchBalance(params = {}) {
918
+ await this.loadMarkets();
919
+ let marketType = 'spot';
920
+ [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params, marketType);
921
+ const request = {
922
+ 'instType': this.convertToInstrumentType(marketType),
923
+ };
924
+ const response = await this.privateGetDeepcoinAccountBalances(this.extend(request, params));
925
+ return this.parseBalance(response);
926
+ }
927
+ parseBalance(response) {
928
+ //
929
+ // {
930
+ // "code": "0",
931
+ // "msg": "",
932
+ // "data": [
933
+ // {
934
+ // "ccy": "USDT",
935
+ // "bal": "74",
936
+ // "frozenBal": "0",
937
+ // "availBal": "74"
938
+ // }
939
+ // ]
940
+ // }
941
+ //
942
+ const result = {
943
+ 'info': response,
944
+ 'timestamp': undefined,
945
+ 'datetime': undefined,
946
+ };
947
+ const balances = this.safeList(response, 'data', []);
948
+ for (let i = 0; i < balances.length; i++) {
949
+ const balance = balances[i];
950
+ const symbol = this.safeString(balance, 'ccy');
951
+ const code = this.safeCurrencyCode(symbol);
952
+ const account = this.account();
953
+ account['total'] = this.safeString(balance, 'bal');
954
+ account['used'] = this.safeString(balance, 'frozenBal');
955
+ account['free'] = this.safeString(balance, 'availBal');
956
+ result[code] = account;
957
+ }
958
+ return this.safeBalance(result);
959
+ }
960
+ /**
961
+ * @method
962
+ * @name deepcoin#fetchDeposits
963
+ * @description fetch all deposits made to an account
964
+ * @see https://www.deepcoin.com/docs/assets/deposit
965
+ * @param {string} code unified currency code
966
+ * @param {int} [since] the earliest time in ms to fetch deposits for
967
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
968
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
969
+ * @param {int} [params.until] the latest time in ms to fetch entries for
970
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
971
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
972
+ */
973
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
974
+ await this.loadMarkets();
975
+ let paginate = false;
976
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate', false);
977
+ if (paginate) {
978
+ return await this.fetchPaginatedCallCursor('fetchDeposits', code, since, limit, params, 'code', undefined, 1, 50);
979
+ }
980
+ const request = {};
981
+ let currency = undefined;
982
+ if (code !== undefined) {
983
+ currency = this.currency(code);
984
+ request['coin'] = currency['id'];
985
+ }
986
+ if (since !== undefined) {
987
+ request['startTime'] = since;
988
+ }
989
+ if (limit !== undefined) {
990
+ request['size'] = limit;
991
+ }
992
+ const until = this.safeInteger(params, 'until');
993
+ if (until !== undefined) {
994
+ request['endTime'] = until;
995
+ params = this.omit(params, 'until');
996
+ }
997
+ const response = await this.privateGetDeepcoinAssetDepositList(this.extend(request, params));
998
+ const data = this.safeDict(response, 'data', {});
999
+ const items = this.safeList(data, 'data', []);
1000
+ const transactionParams = {
1001
+ 'type': 'deposit',
1002
+ };
1003
+ return this.parseTransactions(items, currency, since, limit, transactionParams);
1004
+ }
1005
+ /**
1006
+ * @method
1007
+ * @name deepcoin#fetchWithdrawals
1008
+ * @description fetch all withdrawals made from an account
1009
+ * @see https://www.deepcoin.com/docs/assets/withdraw
1010
+ * @param {string} code unified currency code of the currency transferred
1011
+ * @param {int} [since] the earliest time in ms to fetch transfers for (default 24 hours ago)
1012
+ * @param {int} [limit] the maximum number of transfer structures to retrieve (default 50, max 200)
1013
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1014
+ * @param {int} [params.until] the latest time in ms to fetch transfers for (default time now)
1015
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1016
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1017
+ */
1018
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
1019
+ await this.loadMarkets();
1020
+ let paginate = false;
1021
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate', false);
1022
+ if (paginate) {
1023
+ return await this.fetchPaginatedCallCursor('fetchDeposits', code, since, limit, params, 'code', undefined, 1, 50);
1024
+ }
1025
+ const request = {};
1026
+ let currency = undefined;
1027
+ if (code !== undefined) {
1028
+ currency = this.currency(code);
1029
+ request['coin'] = currency['id'];
1030
+ }
1031
+ if (since !== undefined) {
1032
+ request['startTime'] = since;
1033
+ }
1034
+ if (limit !== undefined) {
1035
+ request['size'] = limit;
1036
+ }
1037
+ const until = this.safeInteger(params, 'until');
1038
+ if (until !== undefined) {
1039
+ request['endTime'] = until;
1040
+ params = this.omit(params, 'until');
1041
+ }
1042
+ const response = await this.privateGetDeepcoinAssetWithdrawList(this.extend(request, params));
1043
+ const data = this.safeDict(response, 'data', {});
1044
+ const items = this.safeList(data, 'data', []);
1045
+ const transactionParams = {
1046
+ 'type': 'withdrawal',
1047
+ };
1048
+ return this.parseTransactions(items, currency, since, limit, transactionParams);
1049
+ }
1050
+ parseTransaction(transaction, currency = undefined) {
1051
+ //
1052
+ // fetchDeposits
1053
+ // {
1054
+ // "createTime": 1760368656,
1055
+ // "txHash": "03fe3244d89e794586222413c61779380da9e9fe5baaa253c38d01a4199a3499",
1056
+ // "chainName": "TRC20",
1057
+ // "amount": "149",
1058
+ // "coin": "USDT",
1059
+ // "status": "succeed"
1060
+ // }
1061
+ //
1062
+ const txid = this.safeString(transaction, 'txHash');
1063
+ const currencyId = this.safeString(transaction, 'coin');
1064
+ const code = this.safeCurrencyCode(currencyId, currency);
1065
+ const amount = this.safeNumber(transaction, 'amount');
1066
+ const timestamp = this.safeTimestamp(transaction, 'createTime');
1067
+ const networkId = this.safeString(transaction, 'chainName');
1068
+ const network = this.networkIdToCode(networkId);
1069
+ const status = this.parseTransactionStatus(this.safeString(transaction, 'status'));
1070
+ return {
1071
+ 'info': transaction,
1072
+ 'id': undefined,
1073
+ 'currency': code,
1074
+ 'amount': amount,
1075
+ 'network': network,
1076
+ 'addressFrom': undefined,
1077
+ 'addressTo': undefined,
1078
+ 'address': this.safeString(transaction, 'address'),
1079
+ 'tagFrom': undefined,
1080
+ 'tagTo': undefined,
1081
+ 'tag': undefined,
1082
+ 'status': status,
1083
+ 'type': undefined,
1084
+ 'updated': undefined,
1085
+ 'txid': txid,
1086
+ 'timestamp': timestamp,
1087
+ 'datetime': this.iso8601(timestamp),
1088
+ 'internal': undefined,
1089
+ 'comment': undefined,
1090
+ 'fee': {
1091
+ 'currency': undefined,
1092
+ 'cost': undefined,
1093
+ },
1094
+ };
1095
+ }
1096
+ parseTransactionStatus(status) {
1097
+ const statuses = {
1098
+ 'confirming': 'pending',
1099
+ 'succeed': 'ok',
1100
+ };
1101
+ return this.safeString(statuses, status, status);
1102
+ }
1103
+ /**
1104
+ * @method
1105
+ * @name deepcoin#fetchDepositAddresses
1106
+ * @description fetch deposit addresses for multiple currencies and chain types
1107
+ * @see https://www.deepcoin.com/docs/assets/chainlist
1108
+ * @param {string[]|undefined} codes list of unified currency codes, default is undefined
1109
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1110
+ * @returns {object} a list of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure}
1111
+ */
1112
+ async fetchDepositAddresses(codes = undefined, params = {}) {
1113
+ await this.loadMarkets();
1114
+ if (codes === undefined) {
1115
+ throw new ArgumentsRequired(this.id + ' fetchDepositAddresses requires a list with one currency code');
1116
+ }
1117
+ const length = codes.length;
1118
+ if (length !== 1) {
1119
+ throw new NotSupported(this.id + ' fetchDepositAddresses requires a list with one currency code');
1120
+ }
1121
+ const code = codes[0];
1122
+ const currency = this.currency(code);
1123
+ const request = {
1124
+ 'currency_id': currency['id'],
1125
+ 'lang': 'en',
1126
+ };
1127
+ const response = await this.privateGetDeepcoinAssetRechargeChainList(this.extend(request, params));
1128
+ //
1129
+ // {
1130
+ // "code": "0",
1131
+ // "msg": "",
1132
+ // "data": {
1133
+ // "list": [
1134
+ // {
1135
+ // "chain": "TRC20",
1136
+ // "state": 1,
1137
+ // "remind": "Only support deposits and withdrawals via TRC20 network. If you send it via other address by mistake, it will not be credited and will result in the permanent loss of your deposit.",
1138
+ // "inNotice": "",
1139
+ // "actLogo": "",
1140
+ // "address": "TNJYDW9Bk87VwfA6s7FtxURLEMHesQbYgF",
1141
+ // "hasMemo": false,
1142
+ // "memo": "",
1143
+ // "estimatedTime": 1,
1144
+ // "fastConfig": {
1145
+ // "fastLimitNum": 0,
1146
+ // "fastBlock": 10,
1147
+ // "realBlock": 1
1148
+ // }
1149
+ // }
1150
+ // ]
1151
+ // }
1152
+ // }
1153
+ //
1154
+ const data = this.safeDict(response, 'data', {});
1155
+ const list = this.safeList(data, 'list', []);
1156
+ const additionalParams = {
1157
+ 'currency': code,
1158
+ };
1159
+ return this.parseDepositAddresses(list, codes, false, additionalParams);
1160
+ }
1161
+ /**
1162
+ * @method
1163
+ * @name deepcoin#fetchDepositAddress
1164
+ * @description fetch the deposit address for a currency associated with this account
1165
+ * @see https://www.deepcoin.com/docs/assets/chainlist
1166
+ * @param {string} code unified currency code
1167
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1168
+ * @param {string} [params.network] unified network code for deposit chain
1169
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1170
+ */
1171
+ async fetchDepositAddress(code, params = {}) {
1172
+ await this.loadMarkets();
1173
+ let network = this.safeString(params, 'network');
1174
+ const defaultNetworks = this.safeDict(this.options, 'defaultNetworks', {});
1175
+ const defaultNetwork = this.safeString(defaultNetworks, code);
1176
+ network = network ? network : defaultNetwork;
1177
+ if (network !== undefined) {
1178
+ params = this.omit(params, 'network');
1179
+ }
1180
+ const addressess = await this.fetchDepositAddresses([code], params);
1181
+ const length = addressess.length;
1182
+ let address = this.safeDict(addressess, 0, {});
1183
+ if ((network !== undefined) && (length > 1)) {
1184
+ for (let i = 0; i < length; i++) {
1185
+ const entry = addressess[i];
1186
+ if (entry['network'] === network) {
1187
+ address = entry;
1188
+ }
1189
+ }
1190
+ }
1191
+ return address;
1192
+ }
1193
+ parseDepositAddress(response, currency = undefined) {
1194
+ //
1195
+ // {
1196
+ // "chain": "TRC20",
1197
+ // "state": 1,
1198
+ // "remind": "Only support deposits and withdrawals via TRC20 network. If you send it via other address by mistake, it will not be credited and will result in the permanent loss of your deposit.",
1199
+ // "inNotice": "",
1200
+ // "actLogo": "",
1201
+ // "address": "TNJYDW9Bk87VwfA6s7FtxURLEMHesQbYgF",
1202
+ // "hasMemo": false,
1203
+ // "memo": "",
1204
+ // "estimatedTime": 1,
1205
+ // "fastConfig": {
1206
+ // "fastLimitNum": 0,
1207
+ // "fastBlock": 10,
1208
+ // "realBlock": 1
1209
+ // }
1210
+ // }
1211
+ //
1212
+ const chain = this.safeString(response, 'chain');
1213
+ const address = this.safeString(response, 'address');
1214
+ this.checkAddress(address);
1215
+ return {
1216
+ 'info': response,
1217
+ 'currency': undefined,
1218
+ 'network': this.networkIdToCode(chain),
1219
+ 'address': address,
1220
+ 'tag': this.safeString(response, 'memo'),
1221
+ };
1222
+ }
1223
+ /**
1224
+ * @method
1225
+ * @name deepcoin#fetchLedger
1226
+ * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
1227
+ * @see https://www.deepcoin.com/docs/DeepCoinAccount/getAccountBills
1228
+ * @param {string} [code] unified currency code
1229
+ * @param {int} [since] timestamp in ms of the earliest ledger entry
1230
+ * @param {int} [limit] max number of ledger entries to return
1231
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1232
+ * @param {int} [params.until] timestamp in ms of the latest ledger entry
1233
+ * @param {string} [params.type] 'spot' or 'swap', the market type for the ledger (default 'spot')
1234
+ * @returns {object[]} a list of [ledger structures]{@link https://docs.ccxt.com/#/?id=ledger}
1235
+ */
1236
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
1237
+ await this.loadMarkets();
1238
+ let marketType = 'spot';
1239
+ [marketType, params] = this.handleMarketTypeAndParams('fetchLedger', undefined, params, marketType);
1240
+ const request = {
1241
+ 'instType': this.convertToInstrumentType(marketType),
1242
+ };
1243
+ let currency = undefined;
1244
+ if (code !== undefined) {
1245
+ currency = this.currency(code);
1246
+ request['ccy'] = currency['id'];
1247
+ }
1248
+ if (since !== undefined) {
1249
+ request['after'] = since;
1250
+ }
1251
+ if (limit !== undefined) {
1252
+ request['limit'] = limit;
1253
+ }
1254
+ const until = this.safeInteger(params, 'until');
1255
+ if (until !== undefined) {
1256
+ request['before'] = until;
1257
+ params = this.omit(params, 'until');
1258
+ }
1259
+ const response = await this.privateGetDeepcoinAccountBills(this.extend(request, params));
1260
+ //
1261
+ // {
1262
+ // "code": "0",
1263
+ // "msg": "",
1264
+ // "data": [
1265
+ // {
1266
+ // "billId": "1001044652247714",
1267
+ // "ccy": "USDT",
1268
+ // "clientId": "",
1269
+ // "balChg": "-0.03543537",
1270
+ // "bal": "72.41881427",
1271
+ // "type": "5",
1272
+ // "ts": "1761047448000"
1273
+ // },
1274
+ // {
1275
+ // "billId": "1001044652258368",
1276
+ // "ccy": "DOGE",
1277
+ // "clientId": "",
1278
+ // "balChg": "76",
1279
+ // "bal": "76",
1280
+ // "type": "2",
1281
+ // "ts": "1761051006000"
1282
+ // }
1283
+ // ]
1284
+ // }
1285
+ //
1286
+ const data = this.safeList(response, 'data', []);
1287
+ return this.parseLedger(data, currency, since, limit);
1288
+ }
1289
+ parseLedgerEntry(item, currency = undefined) {
1290
+ //
1291
+ // {
1292
+ // "billId": "1001044652247714",
1293
+ // "ccy": "USDT",
1294
+ // "clientId": "",
1295
+ // "balChg": "-0.03543537",
1296
+ // "bal": "72.41881427",
1297
+ // "type": "5",
1298
+ // "ts": "1761047448000"
1299
+ // }
1300
+ //
1301
+ const timestamp = this.safeInteger(item, 'ts');
1302
+ const change = this.safeString(item, 'balChg');
1303
+ const amount = Precise.stringAbs(change);
1304
+ const direction = Precise.stringLt(change, '0') ? 'out' : 'in';
1305
+ const currencyId = this.safeString(item, 'ccy');
1306
+ currency = this.safeCurrency(currencyId, currency);
1307
+ const type = this.safeString(item, 'type');
1308
+ return this.safeLedgerEntry({
1309
+ 'info': item,
1310
+ 'id': this.safeString(item, 'billId'),
1311
+ 'direction': direction,
1312
+ 'account': undefined,
1313
+ 'referenceAccount': undefined,
1314
+ 'referenceId': undefined,
1315
+ 'type': this.parseLedgerEntryType(type),
1316
+ 'currency': currency['code'],
1317
+ 'amount': amount,
1318
+ 'timestamp': timestamp,
1319
+ 'datetime': this.iso8601(timestamp),
1320
+ 'before': undefined,
1321
+ 'after': this.safeString(item, 'bal'),
1322
+ 'status': undefined,
1323
+ 'fee': undefined,
1324
+ }, currency);
1325
+ }
1326
+ parseLedgerEntryType(type) {
1327
+ const ledgerType = {
1328
+ '1': 'trade',
1329
+ '2': 'trade',
1330
+ '3': 'transfer',
1331
+ '4': 'transfer',
1332
+ '5': 'fee',
1333
+ };
1334
+ return this.safeString(ledgerType, type, type);
1335
+ }
1336
+ /**
1337
+ * @method
1338
+ * @name deepcoin#transfer
1339
+ * @description transfer currency internally between wallets on the same account
1340
+ * @see https://www.deepcoin.com/docs/assets/transfer
1341
+ * @param {string} code unified currency code
1342
+ * @param {float} amount amount to transfer
1343
+ * @param {string} fromAccount account to transfer from ('spot', 'inverse', 'linear', 'fund', 'rebate' or 'demo')
1344
+ * @param {string} toAccount account to transfer to ('spot', 'inverse', 'linear', 'fund', 'rebate' or 'demo')
1345
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1346
+ * @param {string} [params.userId] user id
1347
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
1348
+ */
1349
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
1350
+ let userId = undefined;
1351
+ [userId, params] = this.handleOptionAndParams(params, 'transfer', 'userId');
1352
+ userId = userId ? userId : this.safeString(params, 'uid');
1353
+ if (userId === undefined) {
1354
+ throw new ArgumentsRequired(this.id + ' transfer() requires a userId parameter');
1355
+ }
1356
+ await this.loadMarkets();
1357
+ const currency = this.currency(code);
1358
+ const accountsByType = this.safeDict(this.options, 'accountsByType', {});
1359
+ const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
1360
+ const toId = this.safeString(accountsByType, toAccount, toAccount);
1361
+ const request = {
1362
+ 'currency_id': currency['id'],
1363
+ 'amount': this.currencyToPrecision(code, amount),
1364
+ 'from_id': fromId,
1365
+ 'to_id': toId,
1366
+ 'uid': userId,
1367
+ };
1368
+ const response = await this.privatePostDeepcoinAssetTransfer(this.extend(request, params));
1369
+ //
1370
+ // {
1371
+ // "code": "0",
1372
+ // "msg": "",
1373
+ // "data": {
1374
+ // "retCode": 0,
1375
+ // "retMsg": "",
1376
+ // "retData": {}
1377
+ // }
1378
+ // }
1379
+ //
1380
+ const data = this.safeDict(response, 'data', {});
1381
+ const transfer = this.parseTransfer(data, currency);
1382
+ const transferOptions = this.safeDict(this.options, 'transfer', {});
1383
+ const fillResponseFromRequest = this.safeBool(transferOptions, 'fillResponseFromRequest', true);
1384
+ if (fillResponseFromRequest) {
1385
+ transfer['fromAccount'] = fromAccount;
1386
+ transfer['toAccount'] = toAccount;
1387
+ transfer['amount'] = amount;
1388
+ }
1389
+ return transfer;
1390
+ }
1391
+ parseTransfer(transfer, currency = undefined) {
1392
+ //
1393
+ // {
1394
+ // "retCode": 0,
1395
+ // "retMsg": "",
1396
+ // "retData": {}
1397
+ // }
1398
+ //
1399
+ const status = this.safeString(transfer, 'retCode');
1400
+ const currencyCode = this.safeCurrencyCode(undefined, currency);
1401
+ return {
1402
+ 'info': transfer,
1403
+ 'id': undefined,
1404
+ 'timestamp': undefined,
1405
+ 'datetime': undefined,
1406
+ 'currency': currencyCode,
1407
+ 'amount': undefined,
1408
+ 'fromAccount': undefined,
1409
+ 'toAccount': undefined,
1410
+ 'status': this.parseTransferStatus(status),
1411
+ };
1412
+ }
1413
+ parseTransferStatus(status) {
1414
+ if (status === '0') {
1415
+ return 'ok';
1416
+ }
1417
+ return 'failed';
1418
+ }
1419
+ /**
1420
+ * @method
1421
+ * @name deepcoin#createOrder
1422
+ * @description create a trade order
1423
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/order
1424
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/triggerOrder
1425
+ * @param {string} symbol unified symbol of the market to create an order in
1426
+ * @param {string} type 'market' or 'limit'
1427
+ * @param {string} side 'buy' or 'sell'
1428
+ * @param {float} amount how much of currency you want to trade in units of base currency
1429
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1430
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1431
+ * @param {string} [params.clientOrderId] a unique id for the order
1432
+ * @param {string} [params.timeInForce] *non trigger orders only* 'GTC' (Good Till Cancel), 'IOC' (Immediate Or Cancel) or 'PO' (Post Only)
1433
+ * @param {bool} [params.postOnly] *non trigger orders only* true to place a post only order
1434
+ * @param {bool} [params.reduceOnly] *non trigger orders only* a mark to reduce the position size for margin, swap and future orders
1435
+ * @param {float} [params.triggerPrice] the price a trigger order is triggered at
1436
+ * @param {float} [params.stopLoss.triggerPrice] the price that a stop loss order is triggered at
1437
+ * @param {float} [params.takeProfit.triggerPrice] the price that a take profit order is triggered at
1438
+ * @param {string} [params.positionSide] if position mode is one-way: set to 'net', if position mode is hedge-mode: set to 'long' or 'short'
1439
+ * @param {bool} [params.hedged] *swap only* true for hedged mode, false for one way mode
1440
+ * @param {string} [params.marginMode] *swap only*'cross' or 'isolated', the default is 'cash' for spot and 'cross' for swap
1441
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1442
+ */
1443
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1444
+ await this.loadMarkets();
1445
+ const market = this.market(symbol);
1446
+ const triggerPrice = this.safeString(params, 'triggerPrice');
1447
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
1448
+ let response = undefined;
1449
+ if (triggerPrice !== undefined) {
1450
+ // trigger orders
1451
+ response = await this.privatePostDeepcoinTradeTriggerOrder(request);
1452
+ }
1453
+ else {
1454
+ // regular orders
1455
+ //
1456
+ // {
1457
+ // "code": "0",
1458
+ // "msg": "",
1459
+ // "data": {
1460
+ // "ordId": "1001434570213727",
1461
+ // "clOrdId": "",
1462
+ // "tag": "",
1463
+ // "sCode": "0",
1464
+ // "sMsg": ""
1465
+ // }
1466
+ // }
1467
+ //
1468
+ response = await this.privatePostDeepcoinTradeOrder(request);
1469
+ }
1470
+ const data = this.safeDict(response, 'data', {});
1471
+ return this.parseOrder(data, market);
1472
+ }
1473
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1474
+ /**
1475
+ * @method
1476
+ * @ignore
1477
+ * @name deepcoin#createOrderRequest
1478
+ * @description helper function to build request
1479
+ */
1480
+ const market = this.market(symbol);
1481
+ const triggerPrice = this.safeString(params, 'triggerPrice');
1482
+ // const isTriggerOrder = (triggerPrice !== undefined) || this.safeString2 (params, 'stopLossPrice', 'takeProfitPrice') !== undefined;
1483
+ const isTriggerOrder = (triggerPrice !== undefined);
1484
+ const cost = this.safeString(params, 'cost');
1485
+ if (cost !== undefined) {
1486
+ if (!market['spot'] || (triggerPrice !== undefined)) {
1487
+ throw new BadRequest(this.id + ' createOrder() accepts a cost parameter for spot non-trigger market orders only');
1488
+ }
1489
+ }
1490
+ if (isTriggerOrder) {
1491
+ return this.createTriggerOrderRequest(symbol, type, side, amount, price, params);
1492
+ }
1493
+ else {
1494
+ return this.createRegularOrderRequest(symbol, type, side, amount, price, params);
1495
+ }
1496
+ }
1497
+ createRegularOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1498
+ /**
1499
+ * @method
1500
+ * @ignore
1501
+ * @name deepcoin#createRegularOrderRequest
1502
+ * @description helper function to build request
1503
+ * @param {string} symbol unified symbol of the market to create an order in
1504
+ * @param {string} type 'market' or 'limit'
1505
+ * @param {string} side 'buy' or 'sell'
1506
+ * @param {float} amount how much you want to trade in units of the base currency
1507
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1508
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1509
+ * @param {float} [params.cost] *spot only* the cost of the order in units of the quote currency, for market orders only
1510
+ * @param {string} [params.clientOrderId] a unique id for the order
1511
+ * @param {string} [params.timeInForce] 'GTC' (Good Till Cancel), 'IOC' (Immediate Or Cancel) or 'PO' (Post Only)
1512
+ * @param {bool} [params.postOnly] true to place a post only order
1513
+ * @param {bool} [params.reduceOnly] a mark to reduce the position size for margin and swap orders
1514
+ * @param {float} [params.stopLossPrice] the price that a stop loss order is triggered at
1515
+ * @param {float} [params.takeProfitPrice] the price that a take profit order is triggered at
1516
+ * @param {string} [params.marginMode] *swap only* 'cross' or 'isolated', the default is 'cash' for spot and 'cross' for swap
1517
+ * @param {string} [params.mrgPosition] *swap only* 'merge' or 'split', the default is 'merge'
1518
+ */
1519
+ const market = this.market(symbol);
1520
+ let orderType = type;
1521
+ [orderType, params] = this.handleTypePostOnlyAndTimeInForce(type, params);
1522
+ const request = {
1523
+ 'instId': market['id'],
1524
+ // 'tdMode': 'cash', // 'cash' for spot, 'cross' or 'isolated' for swap
1525
+ // 'ccy': currency['id'], // only applicable to cross MARGIN orders in single-currency margin
1526
+ // 'clOrdId': clientOrderId,
1527
+ 'side': side,
1528
+ 'ordType': orderType,
1529
+ // 'sz': amount or cost
1530
+ // 'px': price, // limit orders only
1531
+ // 'reduceOnly': false, // a mark to reduce the position size for margin and swap orders
1532
+ // 'tgtCcy': 'base_ccy', // spot only 'base_ccy' or 'quote_ccy', the default is 'base_ccy' for spot orders
1533
+ // 'tpTriggerPx': takeProfitPrice, // take profit trigger price
1534
+ // 'slTriggerPx': stopLossPrice, // stop loss trigger price
1535
+ // 'posSide': 'long', // swap only 'long' or 'short'
1536
+ // 'mrgPosition': 'merge', // swap only 'merge' or 'split'
1537
+ // 'closePosId': 'id', // swap only position ID to close, required in split mode
1538
+ };
1539
+ const clientOrderId = this.safeString(params, 'clientOrderId');
1540
+ if (clientOrderId !== undefined) {
1541
+ request['clOrdId'] = clientOrderId;
1542
+ params = this.omit(params, 'clientOrderId');
1543
+ }
1544
+ const stopLoss = this.safeDict(params, 'stopLoss', {});
1545
+ const stopLossPrice = this.safeString(stopLoss, 'triggerPrice');
1546
+ if (stopLossPrice !== undefined) {
1547
+ params = this.omit(params, ['stopLoss']);
1548
+ request['slTriggerPx'] = this.priceToPrecision(symbol, stopLossPrice);
1549
+ }
1550
+ const takeProfit = this.safeDict(params, 'takeProfit', {});
1551
+ const takeProfitPrice = this.safeString(takeProfit, 'triggerPrice');
1552
+ if (takeProfitPrice !== undefined) {
1553
+ params = this.omit(params, ['takeProfit']);
1554
+ request['tpTriggerPx'] = this.priceToPrecision(symbol, takeProfitPrice);
1555
+ }
1556
+ const isMarketOrder = (type === 'market');
1557
+ if (price !== undefined) {
1558
+ if (isMarketOrder) {
1559
+ throw new BadRequest(this.id + ' createOrder() does not require a price argument for market orders');
1560
+ }
1561
+ request['px'] = this.priceToPrecision(symbol, price);
1562
+ }
1563
+ else if (!isMarketOrder) {
1564
+ throw new BadRequest(this.id + ' createOrder() requires a price argument for limit orders');
1565
+ }
1566
+ if (market['spot']) {
1567
+ const cost = this.safeString(params, 'cost');
1568
+ if (cost !== undefined) {
1569
+ if (!isMarketOrder) {
1570
+ throw new BadRequest(this.id + ' createOrder() accepts a cost parameter for spot market orders only');
1571
+ }
1572
+ params = this.omit(params, 'cost');
1573
+ request['sz'] = this.costToPrecision(symbol, cost);
1574
+ request['tgtCcy'] = 'quote_ccy';
1575
+ }
1576
+ else {
1577
+ request['sz'] = this.amountToPrecision(symbol, amount);
1578
+ request['tgtCcy'] = 'base_ccy';
1579
+ }
1580
+ request['side'] = side;
1581
+ request['tdMode'] = 'cash';
1582
+ }
1583
+ else {
1584
+ request['sz'] = this.amountToPrecision(symbol, amount);
1585
+ let marginMode = 'cross';
1586
+ [marginMode, params] = this.handleMarginModeAndParams('createOrder', params, marginMode);
1587
+ request['tdMode'] = marginMode;
1588
+ let mrgPosition = 'merge';
1589
+ [mrgPosition, params] = this.handleOptionAndParams(params, 'createOrder', 'mrgPosition', mrgPosition);
1590
+ request['mrgPosition'] = mrgPosition;
1591
+ let posSide = undefined;
1592
+ const reduceOnly = this.safeBool(params, 'reduceOnly', false);
1593
+ if (reduceOnly) {
1594
+ if (side === 'buy') {
1595
+ posSide = 'short';
1596
+ }
1597
+ else if (side === 'sell') {
1598
+ posSide = 'long';
1599
+ }
1600
+ }
1601
+ else {
1602
+ if (side === 'buy') {
1603
+ posSide = 'long';
1604
+ }
1605
+ else if (side === 'sell') {
1606
+ posSide = 'short';
1607
+ }
1608
+ }
1609
+ request['posSide'] = posSide;
1610
+ }
1611
+ return this.extend(request, params);
1612
+ }
1613
+ createTriggerOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1614
+ /**
1615
+ * @method
1616
+ * @ignore
1617
+ * @name deepcoin#createTriggerOrderRequest
1618
+ * @description helper function to build request
1619
+ * @param {string} symbol unified symbol of the market to create an order in
1620
+ * @param {string} type 'market' or 'limit'
1621
+ * @param {string} side 'buy' or 'sell'
1622
+ * @param {float} amount how much you want to trade in units of the base currency
1623
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1624
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1625
+ * @param {bool} [params.reduceOnly] a mark to reduce the position size for margin orders
1626
+ * @param {string} [params.marginMode] *swap only* 'cross' or 'isolated', the default is 'cash' for spot and 'cross' for swap
1627
+ */
1628
+ const market = this.market(symbol);
1629
+ const request = {
1630
+ 'instId': market['id'],
1631
+ 'productGroup': this.capitalize(market['type']),
1632
+ 'sz': this.amountToPrecision(symbol, amount),
1633
+ 'side': side,
1634
+ // 'posSide': 'long', // 'long' or 'short' - required when product type is SWAP
1635
+ // 'price': price,
1636
+ // 'isCrossMargin': 1, // 1 for cross margin, 0 for isolated margin
1637
+ 'orderType': type,
1638
+ // 'triggerPrice': triggerPrice,
1639
+ // 'mrgPosition': 'merge', // 'merge' or 'split', the default is 'merge' - required when product type is SWAP
1640
+ // 'tdMode': 'cash', // 'cash' for spot, 'cross' or 'isolated' for swap
1641
+ };
1642
+ const triggerPrice = this.safeString(params, 'triggerPrice');
1643
+ // const takeProfitPrice = this.safeString (params, 'takeProfitPrice');
1644
+ // const stopLossPrice = this.safeString (params, 'stopLossPrice');
1645
+ // const isTpOrSlOrder = (takeProfitPrice !== undefined) || (stopLossPrice !== undefined);
1646
+ // if (isTpOrSlOrder) {
1647
+ // if (takeProfitPrice !== undefined) {
1648
+ // request['triggerPrice'] = this.priceToPrecision (symbol, takeProfitPrice);
1649
+ // } else {
1650
+ // request['triggerPrice'] = this.priceToPrecision (symbol, stopLossPrice);
1651
+ // }
1652
+ // } else {
1653
+ request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);
1654
+ // }
1655
+ if (price !== undefined) {
1656
+ request['price'] = this.priceToPrecision(symbol, price);
1657
+ }
1658
+ else if (type === 'limit') {
1659
+ throw new ArgumentsRequired(this.id + ' createOrder() requires a price argument for limit trigger orders');
1660
+ }
1661
+ let marginMode = 'cross';
1662
+ [marginMode, params] = this.handleMarginModeAndParams('createOrder', params, marginMode);
1663
+ let isCrossMargin = 1;
1664
+ if (marginMode === 'isolated') {
1665
+ isCrossMargin = 0;
1666
+ }
1667
+ const reduceOnly = this.safeBool(params, 'reduceOnly', false);
1668
+ params = this.omit(params, 'reduceOnly');
1669
+ request['isCrossMargin'] = isCrossMargin;
1670
+ request['tdMode'] = marginMode;
1671
+ if (market['swap']) {
1672
+ if (reduceOnly) {
1673
+ if (side === 'buy') {
1674
+ request['posSide'] = 'short';
1675
+ }
1676
+ else if (side === 'sell') {
1677
+ request['posSide'] = 'long';
1678
+ }
1679
+ }
1680
+ else {
1681
+ if (side === 'buy') {
1682
+ request['posSide'] = 'long';
1683
+ }
1684
+ else if (side === 'sell') {
1685
+ request['posSide'] = 'short';
1686
+ }
1687
+ }
1688
+ }
1689
+ let mrgPosition = 'merge';
1690
+ [mrgPosition, params] = this.handleOptionAndParams(params, 'createOrder', 'mrgPosition', mrgPosition);
1691
+ request['mrgPosition'] = mrgPosition;
1692
+ return this.extend(request, params);
1693
+ }
1694
+ handleTypePostOnlyAndTimeInForce(type, params) {
1695
+ let postOnly = false;
1696
+ [postOnly, params] = this.handlePostOnly(type === 'market', type === 'post_only', params);
1697
+ if (postOnly) {
1698
+ type = 'post_only';
1699
+ }
1700
+ const timeInForce = this.handleTimeInForce(params);
1701
+ params = this.omit(params, 'timeInForce');
1702
+ if ((timeInForce !== undefined) && (timeInForce === 'IOC')) {
1703
+ type = 'ioc';
1704
+ }
1705
+ return [type, params];
1706
+ }
1707
+ /**
1708
+ * @method
1709
+ * @name deepcoin#createMarketOrderWithCost
1710
+ * @description create a market order by providing the symbol, side and cost
1711
+ * @param {string} symbol unified symbol of the market to create an order in
1712
+ * @param {string} side 'buy' or 'sell'
1713
+ * @param {float} cost how much you want to trade in units of the quote currency
1714
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1715
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1716
+ */
1717
+ async createMarketOrderWithCost(symbol, side, cost, params = {}) {
1718
+ params = this.extend(params, { 'cost': cost });
1719
+ return await this.createOrder(symbol, 'market', side, 0, undefined, params);
1720
+ }
1721
+ /**
1722
+ * @method
1723
+ * @name deepcoin#createMarketBuyOrderWithCost
1724
+ * @description create a market buy order by providing the symbol and cost
1725
+ * @param {string} symbol unified symbol of the market to create an order in
1726
+ * @param {float} cost how much you want to trade in units of the quote currency
1727
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1728
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1729
+ */
1730
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
1731
+ params = this.extend(params, { 'cost': cost });
1732
+ return await this.createOrder(symbol, 'market', 'buy', 0, undefined, params);
1733
+ }
1734
+ /**
1735
+ * @method
1736
+ * @name deepcoin#createMarketSellOrderWithCost
1737
+ * @description create a market sell order by providing the symbol and cost
1738
+ * @param {string} symbol unified symbol of the market to create an order in
1739
+ * @param {float} cost how much you want to trade in units of the quote currency
1740
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1741
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1742
+ */
1743
+ async createMarketSellOrderWithCost(symbol, cost, params = {}) {
1744
+ params = this.extend(params, { 'cost': cost });
1745
+ return await this.createOrder(symbol, 'market', 'sell', 0, undefined, params);
1746
+ }
1747
+ /**
1748
+ * @method
1749
+ * @name deepcoin#fetchClosedOrder
1750
+ * @description fetches information on a closed order made by the user
1751
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/finishOrderByID
1752
+ * @param {string} id order id
1753
+ * @param {string} symbol unified symbol of the market the order was made in
1754
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1755
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1756
+ */
1757
+ async fetchClosedOrder(id, symbol = undefined, params = {}) {
1758
+ await this.loadMarkets();
1759
+ if (symbol === undefined) {
1760
+ throw new ArgumentsRequired(this.id + ' fetchClosedOrder() requires a symbol argument');
1761
+ }
1762
+ const market = this.market(symbol);
1763
+ const request = {
1764
+ 'instId': market['id'],
1765
+ 'ordId': id,
1766
+ };
1767
+ const response = await this.privateGetDeepcoinTradeFinishOrderByID(this.extend(request, params));
1768
+ //
1769
+ // {
1770
+ // "code": "0",
1771
+ // "msg": "",
1772
+ // "data": [
1773
+ // {
1774
+ // "instType": "SPOT",
1775
+ // "instId": "ETH-USDT",
1776
+ // "tgtCcy": "",
1777
+ // "ccy": "",
1778
+ // "ordId": "1001434573319675",
1779
+ // "clOrdId": "",
1780
+ // "tag": "",
1781
+ // "px": "4056.620000000000",
1782
+ // "sz": "0.004000",
1783
+ // "pnl": "0.000000",
1784
+ // "ordType": "market",
1785
+ // "side": "buy",
1786
+ // "posSide": "",
1787
+ // "tdMode": "cash",
1788
+ // "accFillSz": "0.004000",
1789
+ // "fillPx": "",
1790
+ // "tradeId": "",
1791
+ // "fillSz": "0.004000",
1792
+ // "fillTime": "1760619119000",
1793
+ // "avgPx": "",
1794
+ // "state": "filled",
1795
+ // "lever": "1.000000",
1796
+ // "tpTriggerPx": "",
1797
+ // "tpTriggerPxType": "",
1798
+ // "tpOrdPx": "",
1799
+ // "slTriggerPx": "",
1800
+ // "slTriggerPxType": "",
1801
+ // "slOrdPx": "",
1802
+ // "feeCcy": "USDT",
1803
+ // "fee": "0.000004",
1804
+ // "rebateCcy": "",
1805
+ // "source": "",
1806
+ // "rebate": "",
1807
+ // "category": "normal",
1808
+ // "uTime": "1760619119000",
1809
+ // "cTime": "1760619119000"
1810
+ // }
1811
+ // ]
1812
+ // }
1813
+ //
1814
+ const data = this.safeList(response, 'data', []);
1815
+ const entry = this.safeDict(data, 0, {});
1816
+ return this.parseOrder(entry, market);
1817
+ }
1818
+ /**
1819
+ * @method
1820
+ * @name deepcoin#fetchOpenOrder
1821
+ * @description fetch an open order by it's id
1822
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/orderByID
1823
+ * @param {string} id order id
1824
+ * @param {string} symbol unified market symbol, default is undefined
1825
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1826
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1827
+ */
1828
+ async fetchOpenOrder(id, symbol = undefined, params = {}) {
1829
+ await this.loadMarkets();
1830
+ if (symbol === undefined) {
1831
+ throw new ArgumentsRequired(this.id + ' fetchClosedOrder() requires a symbol argument');
1832
+ }
1833
+ const market = this.market(symbol);
1834
+ const request = {
1835
+ 'instId': market['id'],
1836
+ 'ordId': id,
1837
+ };
1838
+ const response = await this.privateGetDeepcoinTradeOrderByID(this.extend(request, params));
1839
+ const data = this.safeList(response, 'data', []);
1840
+ const length = data.length;
1841
+ if (length === 0) {
1842
+ return undefined;
1843
+ }
1844
+ const entry = this.safeDict(data, 0, {});
1845
+ return this.parseOrder(entry, market);
1846
+ }
1847
+ /**
1848
+ * @method
1849
+ * @name deepcoin#fetchCanceledAndClosedOrders
1850
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/ordersHistory
1851
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/triggerOrdersHistory
1852
+ * @description fetches information on multiple canceled and closed orders made by the user
1853
+ * @param {string} [symbol] unified market symbol of the market orders were made in
1854
+ * @param {int} [since] the earliest time in ms to fetch orders for
1855
+ * @param {int} [limit] the maximum number of order structures to retrieve
1856
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1857
+ * @param {bool} [params.trigger] whether to fetch trigger/algo orders (default false)
1858
+ * @param {string} [params.type] *non trigger orders only* 'spot' or 'swap', the market type for the orders
1859
+ * @param {string} [params.state] *non trigger orders only* 'canceled' or 'filled', the order state to filter by
1860
+ * @param {string} [params.OrderType] *trigger orders only* 'limit' or 'market'
1861
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1862
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1863
+ */
1864
+ async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1865
+ await this.loadMarkets();
1866
+ let paginate = false;
1867
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'paginate');
1868
+ if (paginate) {
1869
+ return await this.fetchPaginatedCallDynamic('fetchCanceledAndClosedOrders', symbol, since, limit, params);
1870
+ }
1871
+ const trigger = this.safeBool(params, 'trigger', false);
1872
+ let methodName = 'fetchCanceledAndClosedOrders';
1873
+ [methodName, params] = this.handleParamString(params, 'methodName', methodName);
1874
+ let market = undefined;
1875
+ const request = {};
1876
+ if (symbol !== undefined) {
1877
+ market = this.market(symbol);
1878
+ request['instId'] = market['id'];
1879
+ }
1880
+ let marketType = 'spot';
1881
+ [marketType, params] = this.handleMarketTypeAndParams(methodName, market, params, marketType);
1882
+ request['instType'] = this.convertToInstrumentType(marketType);
1883
+ if (limit !== undefined) {
1884
+ request['limit'] = limit; // default 100
1885
+ }
1886
+ let response = undefined;
1887
+ if (trigger) {
1888
+ if (methodName !== 'fetchCanceledAndClosedOrders') {
1889
+ throw new BadRequest(this.id + ' ' + methodName + '() does not support trigger orders');
1890
+ }
1891
+ if (market === undefined) {
1892
+ throw new ArgumentsRequired(this.id + ' fetchCanceledAndClosedOrders() requires a symbol argument for trigger orders');
1893
+ }
1894
+ params = this.omit(params, 'trigger');
1895
+ //
1896
+ // {
1897
+ // "code": "0",
1898
+ // "msg": "",
1899
+ // "data": [
1900
+ // {
1901
+ // "instType": "SWAP",
1902
+ // "instId": "DOGE-USDT-SWAP",
1903
+ // "ordId": "1001110510915416",
1904
+ // "px": "0",
1905
+ // "sz": "76",
1906
+ // "triggerPx": "0",
1907
+ // "triggerPxType": "last",
1908
+ // "ordType": "TPSL",
1909
+ // "side": "sell",
1910
+ // "posSide": "long",
1911
+ // "tdMode": "cross",
1912
+ // "lever": "2",
1913
+ // "triggerTime": "0",
1914
+ // "uTime": "1761059366000",
1915
+ // "cTime": "1761059218",
1916
+ // "errorCode": "0",
1917
+ // "errorMsg": ""
1918
+ // }
1919
+ // ]
1920
+ // }
1921
+ //
1922
+ response = await this.privateGetDeepcoinTradeTriggerOrdersHistory(this.extend(request, params));
1923
+ }
1924
+ else {
1925
+ //
1926
+ // {
1927
+ // "code": "0",
1928
+ // "msg": "",
1929
+ // "data": [
1930
+ // {
1931
+ // "instType": "SPOT",
1932
+ // "instId": "ETH-USDT",
1933
+ // "tgtCcy": "",
1934
+ // "ccy": "",
1935
+ // "ordId": "1001434573319675",
1936
+ // "clOrdId": "",
1937
+ // "tag": "",
1938
+ // "px": "4056.620000000000",
1939
+ // "sz": "0.004000",
1940
+ // "pnl": "0.000000",
1941
+ // "ordType": "market",
1942
+ // "side": "buy",
1943
+ // "posSide": "",
1944
+ // "tdMode": "cash",
1945
+ // "accFillSz": "0.004000",
1946
+ // "fillPx": "",
1947
+ // "tradeId": "",
1948
+ // "fillSz": "0.004000",
1949
+ // "fillTime": "1760619119000",
1950
+ // "avgPx": "",
1951
+ // "state": "filled",
1952
+ // "lever": "1.000000",
1953
+ // "tpTriggerPx": "",
1954
+ // "tpTriggerPxType": "",
1955
+ // "tpOrdPx": "",
1956
+ // "slTriggerPx": "",
1957
+ // "slTriggerPxType": "",
1958
+ // "slOrdPx": "",
1959
+ // "feeCcy": "USDT",
1960
+ // "fee": "0.000004",
1961
+ // "rebateCcy": "",
1962
+ // "source": "",
1963
+ // "rebate": "",
1964
+ // "category": "normal",
1965
+ // "uTime": "1760619119000",
1966
+ // "cTime": "1760619119000"
1967
+ // }
1968
+ // ]
1969
+ // }
1970
+ //
1971
+ response = await this.privateGetDeepcoinTradeOrdersHistory(this.extend(request, params));
1972
+ }
1973
+ // todo handle with since, until and pagination
1974
+ const data = this.safeList(response, 'data', []);
1975
+ return this.parseOrders(data, market, since, limit);
1976
+ }
1977
+ /**
1978
+ * @method
1979
+ * @name deepcoin#fetchCanceledOrders
1980
+ * @description fetches information on multiple canceled orders made by the user
1981
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/ordersHistory
1982
+ * @param {string} symbol unified market symbol of the market the orders were made in
1983
+ * @param {int} [since] the earliest time in ms to fetch orders for
1984
+ * @param {int} [limit] the maximum number of order structures to retrieve
1985
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1986
+ * @param {string} [params.type] 'spot' or 'swap', the market type for the orders
1987
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1988
+ */
1989
+ async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1990
+ const methodName = 'fetchCanceledOrders';
1991
+ params = this.extend(params, { 'methodName': methodName });
1992
+ params = this.extend(params, { 'state': 'canceled' });
1993
+ return await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
1994
+ }
1995
+ /**
1996
+ * @method
1997
+ * @name deepcoin#fetchClosedOrders
1998
+ * @description fetches information on multiple closed orders made by the user
1999
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/ordersHistory
2000
+ * @param {string} symbol unified market symbol of the market the orders were made in
2001
+ * @param {int} [since] the earliest time in ms to fetch orders for
2002
+ * @param {int} [limit] the maximum number of order structures to retrieve
2003
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2004
+ * @param {string} [params.type] 'spot' or 'swap', the market type for the orders
2005
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2006
+ */
2007
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2008
+ const methodName = 'fetchClosedOrders';
2009
+ params = this.extend(params, { 'methodName': methodName });
2010
+ params = this.extend(params, { 'state': 'filled' });
2011
+ return await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
2012
+ }
2013
+ /**
2014
+ * @method
2015
+ * @name deepcoin#fetchOpenOrders
2016
+ * @description fetch all unfilled currently open orders
2017
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/ordersPendingV2
2018
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/triggerOrdersPending
2019
+ * @param {string} symbol unified market symbol of the market orders were made in
2020
+ * @param {int} [since] the earliest time in ms to fetch orders for
2021
+ * @param {int} [limit] the maximum number of order structures to retrieve
2022
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2023
+ * @param {bool} [params.trigger] whether to fetch trigger/algo orders (default false)
2024
+ * @param {int} [params.index] *non trigger orders only* pagination index, default is 1
2025
+ * @param {string} [params.orderType] *trigger orders only* 'limit' or 'market'
2026
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2027
+ */
2028
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2029
+ await this.loadMarkets();
2030
+ if (symbol === undefined) {
2031
+ throw new ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument');
2032
+ }
2033
+ const market = this.market(symbol);
2034
+ const index = this.safeInteger(params, 'index', 1); // todo add pagination handling
2035
+ const request = {
2036
+ 'instId': market['id'],
2037
+ };
2038
+ if (limit !== undefined) {
2039
+ request['limit'] = limit;
2040
+ }
2041
+ const trigger = this.safeBool(params, 'trigger', false);
2042
+ let response = undefined;
2043
+ if (trigger) {
2044
+ params = this.omit(params, 'trigger');
2045
+ request['instType'] = this.convertToInstrumentType(market['type']);
2046
+ //
2047
+ // {
2048
+ // "code": "0",
2049
+ // "msg": "",
2050
+ // "data": [
2051
+ // {
2052
+ // "instType": "SPOT",
2053
+ // "instId": "DOGE-USDT",
2054
+ // "ordId": "1001442305797142",
2055
+ // "triggerPx": "0.01",
2056
+ // "ordPx": "0.01",
2057
+ // "sz": "20",
2058
+ // "ordType": "",
2059
+ // "side": "buy",
2060
+ // "posSide": "",
2061
+ // "tdMode": "cash",
2062
+ // "triggerOrderType": "Conditional",
2063
+ // "triggerPxType": "last",
2064
+ // "lever": "",
2065
+ // "slPrice": "",
2066
+ // "slTriggerPrice": "",
2067
+ // "tpPrice": "",
2068
+ // "tpTriggerPrice": "",
2069
+ // "closeSLTriggerPrice": "",
2070
+ // "closeTPTriggerPrice": "",
2071
+ // "cTime": "1761814167000",
2072
+ // "uTime": "1761814167000"
2073
+ // }
2074
+ // ]
2075
+ // }
2076
+ //
2077
+ response = await this.privateGetDeepcoinTradeTriggerOrdersPending(this.extend(request, params));
2078
+ }
2079
+ else {
2080
+ request['index'] = index;
2081
+ //
2082
+ // {
2083
+ // "code": "0",
2084
+ // "msg": "",
2085
+ // "data": [
2086
+ // {
2087
+ // "instType": "SPOT",
2088
+ // "instId": "ETH-USDT",
2089
+ // "tgtCcy": "",
2090
+ // "ccy": "",
2091
+ // "ordId": "1001435158096314",
2092
+ // "clOrdId": "",
2093
+ // "tag": "",
2094
+ // "px": "1000.000000000000",
2095
+ // "sz": "0.004000",
2096
+ // "pnl": "0.000000",
2097
+ // "ordType": "limit",
2098
+ // "side": "buy",
2099
+ // "posSide": "",
2100
+ // "tdMode": "cash",
2101
+ // "accFillSz": "0.000000",
2102
+ // "fillPx": "",
2103
+ // "tradeId": "",
2104
+ // "fillSz": "0.000000",
2105
+ // "fillTime": "1760695267000",
2106
+ // "avgPx": "",
2107
+ // "state": "live",
2108
+ // "lever": "1",
2109
+ // "tpTriggerPx": "",
2110
+ // "tpTriggerPxType": "",
2111
+ // "tpOrdPx": "",
2112
+ // "slTriggerPx": "",
2113
+ // "slTriggerPxType": "",
2114
+ // "slOrdPx": "",
2115
+ // "feeCcy": "USDT",
2116
+ // "fee": "0.000000",
2117
+ // "rebateCcy": "",
2118
+ // "source": "",
2119
+ // "rebate": "",
2120
+ // "category": "normal",
2121
+ // "uTime": "1760695267000",
2122
+ // "cTime": "1760695267000"
2123
+ // }
2124
+ // ]
2125
+ // }
2126
+ //
2127
+ response = await this.privateGetDeepcoinTradeV2OrdersPending(this.extend(request, params));
2128
+ }
2129
+ const data = this.safeList(response, 'data', []);
2130
+ return this.parseOrders(data, market, since, limit, { 'status': 'open' });
2131
+ }
2132
+ /**
2133
+ * @method
2134
+ * @name deepcoin#cancelOrder
2135
+ * @description cancels an open order
2136
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/cancelOrder
2137
+ * @param {string} id order id
2138
+ * @param {string} symbol unified symbol of the market the order was made in
2139
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2140
+ * @param {bool} [params.trigger] whether the order is a trigger/algo order (default false)
2141
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2142
+ */
2143
+ async cancelOrder(id, symbol = undefined, params = {}) {
2144
+ await this.loadMarkets();
2145
+ if (symbol === undefined) {
2146
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
2147
+ }
2148
+ const market = this.market(symbol);
2149
+ const request = {
2150
+ 'instId': market['id'],
2151
+ 'ordId': id,
2152
+ };
2153
+ let response = undefined;
2154
+ const trigger = this.safeBool(params, 'trigger', false);
2155
+ if (trigger) {
2156
+ params = this.omit(params, 'trigger');
2157
+ response = await this.privatePostDeepcoinTradeCancelTriggerOrder(this.extend(request, params));
2158
+ }
2159
+ else {
2160
+ response = await this.privatePostDeepcoinTradeCancelOrder(this.extend(request, params));
2161
+ }
2162
+ const data = this.safeDict(response, 'data', {});
2163
+ return this.parseOrder(data, market);
2164
+ }
2165
+ /**
2166
+ * @method
2167
+ * @name deepcoin#cancelAllOrders
2168
+ * @description cancel all open orders in a market
2169
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/cancelAllOrder
2170
+ * @param {string} symbol unified market symbol of the market to cancel orders in
2171
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2172
+ * @param {string} [params.marginMode] *swap only* 'cross' or 'isolated', the default is 'cash' for spot and 'cross' for swap
2173
+ * @param {bool} [params.merged] *swap only* true for merged positions, false for split positions (default true)
2174
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2175
+ */
2176
+ async cancelAllOrders(symbol = undefined, params = {}) {
2177
+ await this.loadMarkets();
2178
+ if (symbol === undefined) {
2179
+ throw new ArgumentsRequired(this.id + ' cancelAllOrders() requires a symbol argument');
2180
+ }
2181
+ const market = this.market(symbol);
2182
+ if (market['spot']) {
2183
+ throw new NotSupported(this.id + ' cancelAllOrders() is not supported for spot markets');
2184
+ }
2185
+ const productGroup = this.getProductGroupFromMarket(market);
2186
+ const marginMode = this.safeString(params, 'marginMode');
2187
+ let encodedMarginMode = 1;
2188
+ if (marginMode !== undefined) {
2189
+ params = this.omit(params, 'marginMode');
2190
+ if (marginMode === 'isolated') {
2191
+ encodedMarginMode = 0;
2192
+ }
2193
+ }
2194
+ let merged = true;
2195
+ [merged, params] = this.handleOptionAndParams(params, 'cancelAllOrders', 'merged', merged);
2196
+ const request = {
2197
+ 'InstrumentID': market['id'],
2198
+ 'ProductGroup': productGroup,
2199
+ 'IsCrossMargin': encodedMarginMode,
2200
+ 'IsMergeMode': merged ? 1 : 0,
2201
+ };
2202
+ const response = await this.privatePostDeepcoinTradeSwapCancelAll(this.extend(request, params));
2203
+ const data = this.safeList(response, 'data', []);
2204
+ return this.parseOrders(data, market);
2205
+ }
2206
+ /**
2207
+ * @method
2208
+ * @name deepcoin#editOrder
2209
+ * @description edit a trade order
2210
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/replaceOrder
2211
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/replaceTPSL
2212
+ * @param {string} id cancel order id
2213
+ * @param {string} [symbol] unified symbol of the market to create an order in (not used in deepcoin editOrder)
2214
+ * @param {string} [type] 'market' or 'limit' (not used in deepcoin editOrder)
2215
+ * @param {string} [side] 'buy' or 'sell' (not used in deepcoin editOrder)
2216
+ * @param {float} [amount] how much of currency you want to trade in units of base currency
2217
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
2218
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2219
+ * @param {float} [params.stopLossPrice] the price that a stop loss order is triggered at
2220
+ * @param {float} [params.takeProfitPrice] the price that a take profit order is triggered at
2221
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2222
+ */
2223
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
2224
+ await this.loadMarkets();
2225
+ const request = {
2226
+ 'OrderSysID': id,
2227
+ };
2228
+ let market = undefined;
2229
+ if (symbol !== undefined) {
2230
+ market = this.market(symbol);
2231
+ if (market['spot']) {
2232
+ throw new NotSupported(this.id + ' editOrder() is not supported for spot markets');
2233
+ }
2234
+ symbol = market['symbol'];
2235
+ }
2236
+ const stopLossPrice = this.safeNumber(params, 'stopLossPrice');
2237
+ const takeProfitPrice = this.safeNumber(params, 'takeProfitPrice');
2238
+ const isTPSL = (stopLossPrice !== undefined) || (takeProfitPrice !== undefined);
2239
+ let response = undefined;
2240
+ if (isTPSL) {
2241
+ if ((price !== undefined) || (amount !== undefined)) {
2242
+ throw new BadRequest(this.id + ' editOrder() with stopLossPrice or takeProfitPrice cannot have price or amount. Either use stopLossPrice/takeProfitPrice or price/amount to edit order.');
2243
+ }
2244
+ if (stopLossPrice !== undefined) {
2245
+ request['slTriggerPx'] = symbol ? this.priceToPrecision(symbol, stopLossPrice) : this.numberToString(stopLossPrice);
2246
+ }
2247
+ if (takeProfitPrice !== undefined) {
2248
+ request['tpTriggerPx'] = symbol ? this.priceToPrecision(symbol, takeProfitPrice) : this.numberToString(takeProfitPrice);
2249
+ }
2250
+ params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
2251
+ response = await this.privatePostDeepcoinTradeReplaceOrderSltp(this.extend(request, params));
2252
+ }
2253
+ else {
2254
+ if (price !== undefined) {
2255
+ if (symbol !== undefined) {
2256
+ request['price'] = this.priceToPrecision(symbol, price);
2257
+ }
2258
+ else {
2259
+ request['price'] = this.numberToString(price);
2260
+ }
2261
+ }
2262
+ if (amount !== undefined) {
2263
+ if (symbol !== undefined) {
2264
+ request['volume'] = this.amountToPrecision(symbol, amount);
2265
+ }
2266
+ else {
2267
+ request['volume'] = this.numberToString(amount);
2268
+ }
2269
+ }
2270
+ response = await this.privatePostDeepcoinTradeReplaceOrder(this.extend(request, params));
2271
+ }
2272
+ const data = this.safeDict(response, 'data', {});
2273
+ return this.parseOrder(data);
2274
+ }
2275
+ /**
2276
+ * @method
2277
+ * @name deepcoin#cancelOrders
2278
+ * @description cancel multiple orders
2279
+ * @param {string[]} ids order ids
2280
+ * @param {string} [symbol] unified market symbol, default is undefined
2281
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2282
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2283
+ */
2284
+ async cancelOrders(ids, symbol = undefined, params = {}) {
2285
+ await this.loadMarkets();
2286
+ let market = undefined;
2287
+ if (symbol !== undefined) {
2288
+ market = this.market(symbol);
2289
+ if (market['spot']) {
2290
+ throw new NotSupported(this.id + ' cancelOrders() is not supported for spot markets');
2291
+ }
2292
+ }
2293
+ const request = {
2294
+ 'OrderSysIDs': ids,
2295
+ };
2296
+ const response = await this.privatePostDeepcoinTradeBatchCancelOrder(this.extend(request, params));
2297
+ const data = this.safeList(response, 'data', []);
2298
+ return this.parseOrders(data, market);
2299
+ }
2300
+ parseOrder(order, market = undefined) {
2301
+ //
2302
+ // regular order
2303
+ // {
2304
+ // "instType": "SPOT",
2305
+ // "instId": "ETH-USDT",
2306
+ // "tgtCcy": "",
2307
+ // "ccy": "",
2308
+ // "ordId": "1001434573319675",
2309
+ // "clOrdId": "",
2310
+ // "tag": "",
2311
+ // "px": "4056.620000000000",
2312
+ // "sz": "0.004000",
2313
+ // "pnl": "0.000000",
2314
+ // "ordType": "market",
2315
+ // "side": "buy",
2316
+ // "posSide": "",
2317
+ // "tdMode": "cash",
2318
+ // "accFillSz": "0.004000",
2319
+ // "fillPx": "",
2320
+ // "tradeId": "",
2321
+ // "fillSz": "0.004000",
2322
+ // "fillTime": "1760619119000",
2323
+ // "avgPx": "",
2324
+ // "state": "filled",
2325
+ // "lever": "1.000000",
2326
+ // "tpTriggerPx": "",
2327
+ // "tpTriggerPxType": "",
2328
+ // "tpOrdPx": "",
2329
+ // "slTriggerPx": "",
2330
+ // "slTriggerPxType": "",
2331
+ // "slOrdPx": "",
2332
+ // "feeCcy": "USDT",
2333
+ // "fee": "0.000004",
2334
+ // "rebateCcy": "",
2335
+ // "source": "",
2336
+ // "rebate": "",
2337
+ // "category": "normal",
2338
+ // "uTime": "1760619119000",
2339
+ // "cTime": "1760619119000"
2340
+ // }
2341
+ //
2342
+ // trigger order
2343
+ // {
2344
+ // "instType": "SPOT",
2345
+ // "instId": "DOGE-USDT",
2346
+ // "ordId": "1001442305797142",
2347
+ // "triggerPx": "0.01",
2348
+ // "ordPx": "0.01",
2349
+ // "sz": "20",
2350
+ // "ordType": "",
2351
+ // "side": "buy",
2352
+ // "posSide": "",
2353
+ // "tdMode": "cash",
2354
+ // "triggerOrderType": "Conditional",
2355
+ // "triggerPxType": "last",
2356
+ // "lever": "",
2357
+ // "slPrice": "",
2358
+ // "slTriggerPrice": "",
2359
+ // "tpPrice": "",
2360
+ // "tpTriggerPrice": "",
2361
+ // "closeSLTriggerPrice": "",
2362
+ // "closeTPTriggerPrice": "",
2363
+ // "cTime": "1761814167000",
2364
+ // "uTime": "1761814167000"
2365
+ // }
2366
+ //
2367
+ const marketId = this.safeString(order, 'instId');
2368
+ market = this.safeMarket(marketId, market);
2369
+ let timestamp = this.safeInteger(order, 'cTime');
2370
+ const timestampString = this.safeString(order, 'cTime', '');
2371
+ if (timestampString.length < 13) {
2372
+ timestamp = this.safeTimestamp(order, 'cTime');
2373
+ }
2374
+ const state = this.safeString(order, 'state');
2375
+ const orderType = this.safeString(order, 'ordType');
2376
+ let average = this.safeString(order, 'avgPx');
2377
+ if (average === '') {
2378
+ average = undefined;
2379
+ }
2380
+ const feeCurrencyId = this.safeString(order, 'feeCcy');
2381
+ let fee = undefined;
2382
+ if (feeCurrencyId !== undefined) {
2383
+ const feeCost = this.safeString(order, 'fee');
2384
+ fee = {
2385
+ 'cost': this.parseNumber(feeCost),
2386
+ 'currency': this.safeCurrencyCode(feeCurrencyId),
2387
+ };
2388
+ }
2389
+ return this.safeOrder({
2390
+ 'id': this.safeString(order, 'ordId'),
2391
+ 'clientOrderId': this.safeString(order, 'clOrdId'),
2392
+ 'datetime': this.iso8601(timestamp),
2393
+ 'timestamp': timestamp,
2394
+ 'lastTradeTimestamp': undefined,
2395
+ 'lastUpdateTimestamp': this.safeInteger(order, 'uTime'),
2396
+ 'status': this.parseOrderStatus(state),
2397
+ 'symbol': market['symbol'],
2398
+ 'type': this.parseOrderType(orderType),
2399
+ 'timeInForce': this.parseOrderTimeInForce(orderType),
2400
+ 'side': this.safeString(order, 'side'),
2401
+ 'price': this.safeString2(order, 'px', 'ordPx'),
2402
+ 'average': average,
2403
+ 'amount': this.safeString(order, 'sz'),
2404
+ 'filled': this.safeString(order, 'accFillSz'),
2405
+ 'remaining': undefined,
2406
+ 'triggerPrice': this.omitZero(this.safeString(order, 'triggerPx')),
2407
+ 'takeProfitPrice': this.safeString2(order, 'tpTriggerPx', 'tpTriggerPrice'),
2408
+ 'stopLossPrice': this.safeString2(order, 'slTriggerPx', 'slTriggerPrice'),
2409
+ 'cost': undefined,
2410
+ 'trades': undefined,
2411
+ 'fee': fee,
2412
+ 'reduceOnly': undefined,
2413
+ 'postOnly': orderType ? (orderType === 'post_only') : undefined,
2414
+ 'info': order,
2415
+ }, market);
2416
+ }
2417
+ parseOrderStatus(status) {
2418
+ const statuses = {
2419
+ 'live': 'open',
2420
+ 'filled': 'closed',
2421
+ 'canceled': 'canceled',
2422
+ 'partially_filled': 'open',
2423
+ };
2424
+ return this.safeString(statuses, status, status);
2425
+ }
2426
+ parseOrderType(type) {
2427
+ const types = {
2428
+ 'limit': 'limit',
2429
+ 'market': 'market',
2430
+ 'post_only': 'limit',
2431
+ 'ioc': 'market',
2432
+ 'TPSL': 'market',
2433
+ };
2434
+ return this.safeString(types, type, type);
2435
+ }
2436
+ parseOrderTimeInForce(type) {
2437
+ const timeInForces = {
2438
+ 'post_only': 'PO',
2439
+ 'ioc': 'IOC',
2440
+ 'limit': 'GTC',
2441
+ 'market': 'GTC',
2442
+ };
2443
+ return this.safeString(timeInForces, type, type);
2444
+ }
2445
+ /**
2446
+ * @method
2447
+ * @description fetch open positions for a single market
2448
+ * @name deepcoin#fetchPositionsForSymbol
2449
+ * @see https://www.deepcoin.com/docs/DeepCoinAccount/accountPositions
2450
+ * @description fetch all open positions for specific symbol
2451
+ * @param {string} symbol unified market symbol
2452
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2453
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2454
+ */
2455
+ async fetchPositionsForSymbol(symbol, params = {}) {
2456
+ await this.loadMarkets();
2457
+ const market = this.market(symbol);
2458
+ const instrumentType = this.convertToInstrumentType(market['type']);
2459
+ const request = {
2460
+ 'instType': instrumentType,
2461
+ 'instId': market['id'],
2462
+ };
2463
+ const response = await this.privateGetDeepcoinAccountPositions(this.extend(request, params));
2464
+ const data = this.safeList(response, 'data', []);
2465
+ return this.parsePositions(data, [market['symbol']]);
2466
+ }
2467
+ /**
2468
+ * @method
2469
+ * @name deepcoin#fetchPositions
2470
+ * @description fetch all open positions
2471
+ * @see https://www.deepcoin.com/docs/DeepCoinAccount/accountPositions
2472
+ * @param {string[]} [symbols] list of unified market symbols
2473
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2474
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2475
+ */
2476
+ async fetchPositions(symbols = undefined, params = {}) {
2477
+ await this.loadMarkets();
2478
+ symbols = this.marketSymbols(symbols, undefined, true, true);
2479
+ let marketType = 'swap';
2480
+ let market = undefined;
2481
+ if (symbols !== undefined) {
2482
+ const firstSymbol = this.safeString(symbols, 0);
2483
+ market = this.market(firstSymbol);
2484
+ }
2485
+ [marketType, params] = this.handleMarketTypeAndParams('fetchPositions', market, params, marketType);
2486
+ const instrumentType = this.convertToInstrumentType(marketType);
2487
+ const request = {
2488
+ 'instType': instrumentType,
2489
+ };
2490
+ const response = await this.privateGetDeepcoinAccountPositions(this.extend(request, params));
2491
+ //
2492
+ // {
2493
+ // "code": "0",
2494
+ // "msg": "",
2495
+ // "data": [
2496
+ // {
2497
+ // "instType": "SWAP",
2498
+ // "mgnMode": "cross",
2499
+ // "instId": "DOGE-USDT-SWAP",
2500
+ // "posId": "1001110099878275",
2501
+ // "posSide": "long",
2502
+ // "pos": "20",
2503
+ // "avgPx": "0.18408",
2504
+ // "lever": "75",
2505
+ // "liqPx": "0.00001",
2506
+ // "useMargin": "0.049088",
2507
+ // "mrgPosition": "merge",
2508
+ // "ccy": "USDT",
2509
+ // "uTime": "1760709419000",
2510
+ // "cTime": "1760709419000"
2511
+ // }
2512
+ // ]
2513
+ // }
2514
+ //
2515
+ const data = this.safeList(response, 'data', []);
2516
+ return this.parsePositions(data, symbols);
2517
+ }
2518
+ parsePosition(position, market = undefined) {
2519
+ //
2520
+ // {
2521
+ // "instType": "SWAP",
2522
+ // "mgnMode": "cross",
2523
+ // "instId": "DOGE-USDT-SWAP",
2524
+ // "posId": "1001110099878275",
2525
+ // "posSide": "long",
2526
+ // "pos": "20",
2527
+ // "avgPx": "0.18408",
2528
+ // "lever": "75",
2529
+ // "liqPx": "0.00001",
2530
+ // "useMargin": "0.049088",
2531
+ // "mrgPosition": "merge",
2532
+ // "ccy": "USDT",
2533
+ // "uTime": "1760709419000",
2534
+ // "cTime": "1760709419000"
2535
+ // }
2536
+ //
2537
+ const marketId = this.safeString(position, 'instId');
2538
+ market = this.safeMarket(marketId, market);
2539
+ const timestamp = this.safeInteger(position, 'cTime');
2540
+ return this.safePosition({
2541
+ 'symbol': market['symbol'],
2542
+ 'id': this.safeString(position, 'posId'),
2543
+ 'timestamp': timestamp,
2544
+ 'datetime': this.iso8601(timestamp),
2545
+ 'contracts': this.safeString(position, 'pos'),
2546
+ 'contractSize': undefined,
2547
+ 'side': this.safeString(position, 'posSide'),
2548
+ 'notional': undefined,
2549
+ 'leverage': this.omitZero(this.safeString(position, 'lever')),
2550
+ 'unrealizedPnl': undefined,
2551
+ 'realizedPnl': undefined,
2552
+ 'collateral': undefined,
2553
+ 'entryPrice': this.safeString(position, 'avgPx'),
2554
+ 'markPrice': undefined,
2555
+ 'liquidationPrice': this.safeString(position, 'liqPx'),
2556
+ 'marginMode': this.safeString(position, 'mgnMode'),
2557
+ 'hedged': true,
2558
+ 'maintenanceMargin': this.safeString(position, 'useMargin'),
2559
+ 'maintenanceMarginPercentage': undefined,
2560
+ 'initialMargin': undefined,
2561
+ 'initialMarginPercentage': undefined,
2562
+ 'marginRatio': undefined,
2563
+ 'lastUpdateTimestamp': this.safeInteger(position, 'uTime'),
2564
+ 'lastPrice': undefined,
2565
+ 'stopLossPrice': undefined,
2566
+ 'takeProfitPrice': undefined,
2567
+ 'percentage': undefined,
2568
+ 'info': position,
2569
+ });
2570
+ }
2571
+ /**
2572
+ * @method
2573
+ * @name deepcoin#setLeverage
2574
+ * @description set the level of leverage for a market
2575
+ * @see https://www.deepcoin.com/docs/DeepCoinAccount/accountSetLeverage
2576
+ * @param {float} leverage the rate of leverage
2577
+ * @param {string} symbol unified market symbol
2578
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2579
+ * @param {string} [params.marginMode] 'cross' or 'isolated' (default is cross)
2580
+ * @param {string} [params.mrgPosition] 'merge' or 'split', default is merge
2581
+ * @returns {object} response from the exchange
2582
+ */
2583
+ async setLeverage(leverage, symbol = undefined, params = {}) {
2584
+ if (symbol === undefined) {
2585
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
2586
+ }
2587
+ // WARNING: THIS WILL INCREASE LIQUIDATION PRICE FOR OPEN ISOLATED LONG POSITIONS
2588
+ // AND DECREASE LIQUIDATION PRICE FOR OPEN ISOLATED SHORT POSITIONS
2589
+ if (leverage < 1) {
2590
+ throw new BadRequest(this.id + ' setLeverage() leverage should be minimum 1');
2591
+ }
2592
+ await this.loadMarkets();
2593
+ const market = this.market(symbol);
2594
+ let marginMode = 'cross';
2595
+ [marginMode, params] = this.handleMarginModeAndParams('setLeverage', params, marginMode);
2596
+ if ((marginMode !== 'cross') && (marginMode !== 'isolated')) {
2597
+ throw new BadRequest(this.id + ' setLeverage() requires a marginMode parameter that must be either cross or isolated');
2598
+ }
2599
+ let mrgPosition = 'merge';
2600
+ [mrgPosition, params] = this.handleOptionAndParams(params, 'setLeverage', 'mrgPosition', mrgPosition);
2601
+ if (mrgPosition !== 'merge' && mrgPosition !== 'split') {
2602
+ throw new BadRequest(this.id + ' setLeverage() mrgPosition parameter must be either merge or split');
2603
+ }
2604
+ const request = {
2605
+ 'lever': leverage,
2606
+ 'mgnMode': marginMode,
2607
+ 'instId': market['id'],
2608
+ 'mrgPosition': mrgPosition,
2609
+ };
2610
+ const response = await this.privatePostDeepcoinAccountSetLeverage(this.extend(request, params));
2611
+ //
2612
+ // {
2613
+ // code: '0',
2614
+ // msg: '',
2615
+ // data: {
2616
+ // instId: 'ETH-USDT-SWAP',
2617
+ // lever: '2',
2618
+ // mgnMode: 'cross',
2619
+ // mrgPosition: 'merge',
2620
+ // sCode: '0',
2621
+ // sMsg: ''
2622
+ // }
2623
+ // }
2624
+ //
2625
+ return response;
2626
+ }
2627
+ /**
2628
+ * @method
2629
+ * @name deepcoin#fetchFundingRates
2630
+ * @description fetch the funding rate for multiple markets
2631
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/currentFundRate
2632
+ * @param {string[]|undefined} symbols list of unified market symbols
2633
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2634
+ * @param {string} [params.subType] "linear" or "inverse"
2635
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexed by market symbols
2636
+ */
2637
+ async fetchFundingRates(symbols = undefined, params = {}) {
2638
+ await this.loadMarkets();
2639
+ symbols = this.marketSymbols(symbols, 'swap', true, true, true);
2640
+ let subType = 'linear';
2641
+ let firstMarket = undefined;
2642
+ if (symbols !== undefined) {
2643
+ const firstSymbol = this.safeString(symbols, 0);
2644
+ firstMarket = this.market(firstSymbol);
2645
+ }
2646
+ [subType, params] = this.handleSubTypeAndParams('fetchFundingRates', firstMarket, params, subType);
2647
+ let instType = 'SwapU';
2648
+ if (subType === 'inverse') {
2649
+ instType = 'Swap';
2650
+ }
2651
+ else if (subType !== 'linear') {
2652
+ throw new BadRequest(this.id + ' fetchFundingRates() subType parameter must be either linear or inverse');
2653
+ }
2654
+ const request = {
2655
+ 'instType': instType,
2656
+ };
2657
+ const response = await this.privateGetDeepcoinTradeFundRateCurrentFundingRate(this.extend(request, params));
2658
+ //
2659
+ // {
2660
+ // "code": "0",
2661
+ // "msg": "",
2662
+ // "data": {
2663
+ // "current_fund_rates": [
2664
+ // {
2665
+ // "instrumentId": "SPKUSDT",
2666
+ // "fundingRate": 0.00005
2667
+ // },
2668
+ // {
2669
+ // "instrumentId": "LAUNCHCOINUSDT",
2670
+ // "fundingRate": 0.00005
2671
+ // }
2672
+ // ]
2673
+ // }
2674
+ // }
2675
+ //
2676
+ const data = this.safeDict(response, 'data', {});
2677
+ const rates = this.safeList(data, 'current_fund_rates', []);
2678
+ return this.parseFundingRates(rates, symbols);
2679
+ }
2680
+ /**
2681
+ * @method
2682
+ * @name deepcoin#fetchFundingRate
2683
+ * @description fetch the current funding rate
2684
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/currentFundRate
2685
+ * @param {string} symbol unified market symbol
2686
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2687
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
2688
+ */
2689
+ async fetchFundingRate(symbol, params = {}) {
2690
+ await this.loadMarkets();
2691
+ const market = this.market(symbol);
2692
+ if (!market['swap']) {
2693
+ throw new ExchangeError(this.id + ' fetchFundingRate() is only valid for swap markets');
2694
+ }
2695
+ const request = {
2696
+ 'instId': market['id'],
2697
+ 'instType': this.getProductGroupFromMarket(market),
2698
+ };
2699
+ const response = await this.privateGetDeepcoinTradeFundRateCurrentFundingRate(this.extend(request, params));
2700
+ //
2701
+ // {
2702
+ // "code": "0",
2703
+ // "msg": "",
2704
+ // "data": {
2705
+ // "current_fund_rates": [
2706
+ // {
2707
+ // "instrumentId": "ETHUSDT",
2708
+ // "fundingRate": 0.0000402356250176
2709
+ // }
2710
+ // ]
2711
+ // }
2712
+ // }
2713
+ //
2714
+ const data = this.safeDict(response, 'data', {});
2715
+ const rates = this.safeList(data, 'current_fund_rates', []);
2716
+ const entry = this.safeDict(rates, 0, {});
2717
+ return this.parseFundingRate(entry, market);
2718
+ }
2719
+ parseFundingRate(contract, market = undefined) {
2720
+ //
2721
+ // {
2722
+ // "instrumentId": "ETHUSDT",
2723
+ // "fundingRate": 0.0000402356250176
2724
+ // }
2725
+ //
2726
+ const marketId = this.safeString2(contract, 'instrumentId', 'instrumentID');
2727
+ const symbol = this.safeSymbol(marketId, market);
2728
+ return {
2729
+ 'info': contract,
2730
+ 'symbol': symbol,
2731
+ 'markPrice': undefined,
2732
+ 'indexPrice': undefined,
2733
+ 'interestRate': undefined,
2734
+ 'estimatedSettlePrice': undefined,
2735
+ 'timestamp': undefined,
2736
+ 'datetime': undefined,
2737
+ 'fundingRate': this.safeNumber(contract, 'fundingRate'),
2738
+ 'fundingTimestamp': undefined,
2739
+ 'fundingDatetime': undefined,
2740
+ 'nextFundingRate': undefined,
2741
+ 'nextFundingTimestamp': undefined,
2742
+ 'nextFundingDatetime': undefined,
2743
+ 'previousFundingRate': undefined,
2744
+ 'previousFundingTimestamp': undefined,
2745
+ 'previousFundingDatetime': undefined,
2746
+ 'interval': undefined,
2747
+ };
2748
+ }
2749
+ /**
2750
+ * @method
2751
+ * @name deepcoin#fetchFundingRateHistory
2752
+ * @description fetches historical funding rate prices
2753
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/fundingRateHistory
2754
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
2755
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
2756
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
2757
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2758
+ * @param {int} [params.page] pagination page number
2759
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
2760
+ */
2761
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2762
+ if (symbol === undefined) {
2763
+ throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
2764
+ }
2765
+ await this.loadMarkets();
2766
+ const market = this.market(symbol);
2767
+ const request = {
2768
+ 'instId': market['id'],
2769
+ };
2770
+ if (limit !== undefined) {
2771
+ request['size'] = limit; // default 20, max 100
2772
+ }
2773
+ const response = await this.privateGetDeepcoinTradeFundRateHistory(this.extend(request, params));
2774
+ //
2775
+ // {
2776
+ // "code": "0",
2777
+ // "msg": "",
2778
+ // "data": {
2779
+ // "rows": [
2780
+ // {
2781
+ // "instrumentID": "ETHUSD",
2782
+ // "rate": "0.00046493",
2783
+ // "CreateTime": 1760860800,
2784
+ // "ratePeriodSec": 0
2785
+ // },
2786
+ // {
2787
+ // "instrumentID": "ETHUSD",
2788
+ // "rate": "0.00047949",
2789
+ // "CreateTime": 1760832000,
2790
+ // "ratePeriodSec": 0
2791
+ // }
2792
+ // ]
2793
+ // }
2794
+ // }
2795
+ //
2796
+ const data = this.safeDict(response, 'data', {});
2797
+ const rows = this.safeList(data, 'rows', []);
2798
+ return this.parseFundingRateHistories(rows, market, since, limit);
2799
+ }
2800
+ parseFundingRateHistory(info, market = undefined) {
2801
+ //
2802
+ // {
2803
+ // "instrumentID": "ETHUSD",
2804
+ // "rate": "0.00047949",
2805
+ // "CreateTime": 1760832000,
2806
+ // "ratePeriodSec": 0
2807
+ // }
2808
+ //
2809
+ const timestamp = this.safeTimestamp(info, 'CreateTime');
2810
+ const instrumentID = this.safeString2(info, 'instrumentID', 'instrumentId');
2811
+ market = this.safeMarket(instrumentID, market, undefined, 'swap');
2812
+ return {
2813
+ 'info': info,
2814
+ 'symbol': market['symbol'],
2815
+ 'fundingRate': this.safeNumber(info, 'rate'),
2816
+ 'timestamp': timestamp,
2817
+ 'datetime': this.iso8601(timestamp),
2818
+ };
2819
+ }
2820
+ /**
2821
+ * @method
2822
+ * @name deepcoin#fetchMyTrades
2823
+ * @description fetch all trades made by the user
2824
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/tradeFills
2825
+ * @param {string} symbol unified market symbol
2826
+ * @param {int} [since] the earliest time in ms to fetch trades for
2827
+ * @param {int} [limit] the maximum number of trades structures to retrieve
2828
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2829
+ * @param {int} [params.until] timestamp in ms of the latest trade to fetch
2830
+ * @param {string} [params.type] 'spot' or 'swap', the market type for the trades (default is 'spot')
2831
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
2832
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2833
+ */
2834
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2835
+ await this.loadMarkets();
2836
+ let paginate = false;
2837
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
2838
+ if (paginate) {
2839
+ return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);
2840
+ }
2841
+ let market = undefined;
2842
+ if (symbol !== undefined) {
2843
+ market = this.market(symbol);
2844
+ }
2845
+ let marketType = 'spot';
2846
+ [marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params, marketType);
2847
+ const request = {
2848
+ 'instType': this.convertToInstrumentType(marketType),
2849
+ };
2850
+ if (market !== undefined) {
2851
+ request['instId'] = market['id'];
2852
+ }
2853
+ if (since !== undefined) {
2854
+ request['begin'] = since;
2855
+ }
2856
+ if (limit !== undefined) {
2857
+ request['limit'] = limit; // default 100, max 100
2858
+ }
2859
+ const until = this.safeInteger(params, 'until');
2860
+ if (until !== undefined) {
2861
+ params = this.omit(params, 'until');
2862
+ request['end'] = until;
2863
+ }
2864
+ const response = await this.privateGetDeepcoinTradeFills(this.extend(request, params));
2865
+ //
2866
+ // {
2867
+ // "code": "0",
2868
+ // "msg": "",
2869
+ // "data": [
2870
+ // {
2871
+ // "instType": "SPOT",
2872
+ // "instId": "ETH-USDT",
2873
+ // "tradeId": "1001056429613610",
2874
+ // "ordId": "1001435238208686",
2875
+ // "clOrdId": "",
2876
+ // "billId": "10010564296136101",
2877
+ // "tag": "",
2878
+ // "fillPx": "3791.15",
2879
+ // "fillSz": "0.004",
2880
+ // "side": "sell",
2881
+ // "posSide": "",
2882
+ // "execType": "",
2883
+ // "feeCcy": "USDT",
2884
+ // "fee": "0.0151646",
2885
+ // "ts": "1760704540000"
2886
+ // }
2887
+ // ]
2888
+ // }
2889
+ //
2890
+ const data = this.safeList(response, 'data', []);
2891
+ return this.parseTrades(data, market, since, limit);
2892
+ }
2893
+ /**
2894
+ * @method
2895
+ * @name deepcoin#fetchOrderTrades
2896
+ * @description fetch all the trades made from a single order
2897
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/tradeFills
2898
+ * @param {string} id order id
2899
+ * @param {string} symbol unified market symbol
2900
+ * @param {int} [since] the earliest time in ms to fetch trades for
2901
+ * @param {int} [limit] the maximum number of trades to retrieve
2902
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2903
+ * @param {string} [params.type] 'spot' or 'swap', the market type for the trades
2904
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2905
+ */
2906
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
2907
+ await this.loadMarkets();
2908
+ const marketType = this.safeString(params, 'type');
2909
+ if (symbol === undefined && marketType === undefined) {
2910
+ throw new ArgumentsRequired(this.id + ' fetchOrderTrades requires a symbol argument or a market type in the params');
2911
+ }
2912
+ params = this.extend({ 'ordId': id }, params);
2913
+ return await this.fetchMyTrades(symbol, since, limit, params);
2914
+ }
2915
+ /**
2916
+ * @method
2917
+ * @name deepcoin#closePosition
2918
+ * @description closes open positions for a market
2919
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/batchClosePosition
2920
+ * @see https://www.deepcoin.com/docs/DeepCoinTrade/closePositionByIds
2921
+ * @param {string} symbol Unified CCXT market symbol
2922
+ * @param {string} [side] not used by deepcoin
2923
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2924
+ * @param {string|undefined} [params.positionId] the id of the position you would like to close
2925
+ * @param {string[]|undefined} [params.positionIds] list of position ids to close (for batch closing)
2926
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2927
+ */
2928
+ async closePosition(symbol, side = undefined, params = {}) {
2929
+ await this.loadMarkets();
2930
+ const market = this.market(symbol);
2931
+ const productGroup = this.getProductGroupFromMarket(market);
2932
+ const positionId = this.safeString(params, 'positionId');
2933
+ const positionIds = this.safeList(params, 'positionIds');
2934
+ const request = {
2935
+ 'instId': market['id'],
2936
+ 'productGroup': productGroup,
2937
+ };
2938
+ let response = undefined;
2939
+ if (positionId === undefined && positionIds === undefined) {
2940
+ response = await this.privatePostDeepcoinTradeBatchClosePosition(this.extend(request, params));
2941
+ }
2942
+ else {
2943
+ if (positionId !== undefined) {
2944
+ params = this.omit(params, 'positionId');
2945
+ request['positionIds'] = [positionId];
2946
+ }
2947
+ response = await this.privatePostDeepcoinTradeClosePositionByIds(this.extend(request, params));
2948
+ }
2949
+ const data = this.safeList(response, 'data', []);
2950
+ return this.parseOrder(data, market);
2951
+ }
2952
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2953
+ let requestPath = path;
2954
+ if (method === 'GET') {
2955
+ const query = this.urlencode(params);
2956
+ if (query.length) {
2957
+ requestPath += '?' + query;
2958
+ }
2959
+ }
2960
+ const url = this.urls['api'][api] + '/' + requestPath;
2961
+ if (api === 'private') {
2962
+ this.checkRequiredCredentials();
2963
+ const timestamp = this.milliseconds();
2964
+ const dateTime = this.iso8601(timestamp);
2965
+ let payload = dateTime + method + '/' + requestPath;
2966
+ headers = {
2967
+ 'DC-ACCESS-KEY': this.apiKey,
2968
+ 'DC-ACCESS-TIMESTAMP': dateTime,
2969
+ 'DC-ACCESS-PASSPHRASE': this.password,
2970
+ 'appid': '200103',
2971
+ };
2972
+ if (method !== 'GET') {
2973
+ body = this.json(params);
2974
+ headers['Content-Type'] = 'application/json';
2975
+ payload += body;
2976
+ }
2977
+ const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');
2978
+ headers['DC-ACCESS-SIGN'] = signature;
2979
+ }
2980
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2981
+ }
2982
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2983
+ const data = this.safeDict(response, 'data', {});
2984
+ let msg = this.safeString(response, 'msg');
2985
+ const messageCode = this.safeString(response, 'code');
2986
+ let sCode = this.safeString(data, 'sCode');
2987
+ const sMsg = this.safeString(data, 'sMsg');
2988
+ let errorCode = this.safeString(data, 'errorCode');
2989
+ if ((msg !== undefined) && (msg === '') && (sMsg !== undefined)) {
2990
+ msg = sMsg;
2991
+ }
2992
+ const errorList = this.safeList(data, 'errorList');
2993
+ if (errorList !== undefined) {
2994
+ for (let i = 0; i < errorList.length; i++) {
2995
+ const entry = this.safeDict(errorList, i, {});
2996
+ errorCode = this.safeString(entry, 'errorCode');
2997
+ }
2998
+ }
2999
+ const feedback = this.id + ' ' + body;
3000
+ if ((sCode === undefined) && (errorCode !== undefined)) {
3001
+ sCode = errorCode;
3002
+ }
3003
+ const retCode = this.safeString(data, 'retCode');
3004
+ if ((sCode === undefined) && (retCode !== undefined)) {
3005
+ sCode = retCode;
3006
+ }
3007
+ if ((code !== 200) || (messageCode !== '0') || (sCode !== undefined && sCode !== '0')) {
3008
+ this.throwExactlyMatchedException(this.exceptions['exact'], messageCode, feedback);
3009
+ this.throwExactlyMatchedException(this.exceptions['exact'], sCode, feedback);
3010
+ this.throwExactlyMatchedException(this.exceptions['exact'], msg, feedback);
3011
+ this.throwBroadlyMatchedException(this.exceptions['broad'], msg, feedback);
3012
+ throw new ExchangeError(feedback);
3013
+ }
3014
+ else {
3015
+ const list = this.safeList(data, 'list', []);
3016
+ if (('list' in data) && (list === undefined)) {
3017
+ throw new NullResponse(feedback);
3018
+ }
3019
+ }
3020
+ return undefined;
3021
+ }
3022
+ }