ccxt 4.4.70 → 4.4.72

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 (935) hide show
  1. package/README.md +5 -8
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +1 -6
  4. package/dist/cjs/src/abstract/ace.js +1 -1
  5. package/dist/cjs/src/abstract/alpaca.js +1 -1
  6. package/dist/cjs/src/abstract/ascendex.js +1 -1
  7. package/dist/cjs/src/abstract/bigone.js +1 -1
  8. package/dist/cjs/src/abstract/binance.js +1 -1
  9. package/dist/cjs/src/abstract/bingx.js +1 -1
  10. package/dist/cjs/src/abstract/bit2c.js +1 -1
  11. package/dist/cjs/src/abstract/bitbank.js +1 -1
  12. package/dist/cjs/src/abstract/bitbns.js +1 -1
  13. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  14. package/dist/cjs/src/abstract/bitfinex1.js +1 -1
  15. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  16. package/dist/cjs/src/abstract/bitget.js +1 -1
  17. package/dist/cjs/src/abstract/bithumb.js +1 -1
  18. package/dist/cjs/src/abstract/bitmart.js +1 -1
  19. package/dist/cjs/src/abstract/bitmex.js +1 -1
  20. package/dist/cjs/src/abstract/bitopro.js +1 -1
  21. package/dist/cjs/src/abstract/bitrue.js +1 -1
  22. package/dist/cjs/src/abstract/bitso.js +1 -1
  23. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  24. package/dist/cjs/src/abstract/bitteam.js +1 -1
  25. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  26. package/dist/cjs/src/abstract/bl3p.js +1 -1
  27. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  28. package/dist/cjs/src/abstract/blofin.js +1 -1
  29. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  30. package/dist/cjs/src/abstract/btcbox.js +1 -1
  31. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  32. package/dist/cjs/src/abstract/btcturk.js +1 -1
  33. package/dist/cjs/src/abstract/bybit.js +1 -1
  34. package/dist/cjs/src/abstract/cex.js +1 -1
  35. package/dist/cjs/src/abstract/coinbase.js +1 -1
  36. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  37. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  38. package/dist/cjs/src/abstract/coincatch.js +1 -1
  39. package/dist/cjs/src/abstract/coincheck.js +1 -1
  40. package/dist/cjs/src/abstract/coinex.js +1 -1
  41. package/dist/cjs/src/abstract/coinlist.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/defx.js +1 -1
  50. package/dist/cjs/src/abstract/delta.js +1 -1
  51. package/dist/cjs/src/abstract/deribit.js +1 -1
  52. package/dist/cjs/src/abstract/derive.js +1 -1
  53. package/dist/cjs/src/abstract/digifinex.js +1 -1
  54. package/dist/cjs/src/abstract/ellipx.js +1 -1
  55. package/dist/cjs/src/abstract/exmo.js +1 -1
  56. package/dist/cjs/src/abstract/gate.js +1 -1
  57. package/dist/cjs/src/abstract/gemini.js +1 -1
  58. package/dist/cjs/src/abstract/hashkey.js +1 -1
  59. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  60. package/dist/cjs/src/abstract/hollaex.js +1 -1
  61. package/dist/cjs/src/abstract/htx.js +1 -1
  62. package/dist/cjs/src/abstract/huobijp.js +1 -1
  63. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  64. package/dist/cjs/src/abstract/idex.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/kuna.js +1 -1
  72. package/dist/cjs/src/abstract/latoken.js +1 -1
  73. package/dist/cjs/src/abstract/lbank.js +1 -1
  74. package/dist/cjs/src/abstract/luno.js +1 -1
  75. package/dist/cjs/src/abstract/mercado.js +1 -1
  76. package/dist/cjs/src/abstract/mexc.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/okcoin.js +1 -1
  81. package/dist/cjs/src/abstract/okx.js +1 -1
  82. package/dist/cjs/src/abstract/onetrading.js +1 -1
  83. package/dist/cjs/src/abstract/oxfun.js +1 -1
  84. package/dist/cjs/src/abstract/p2b.js +1 -1
  85. package/dist/cjs/src/abstract/paradex.js +1 -1
  86. package/dist/cjs/src/abstract/paymium.js +1 -1
  87. package/dist/cjs/src/abstract/phemex.js +1 -1
  88. package/dist/cjs/src/abstract/poloniex.js +1 -1
  89. package/dist/cjs/src/abstract/poloniexfutures.js +1 -1
  90. package/dist/cjs/src/abstract/probit.js +1 -1
  91. package/dist/cjs/src/abstract/timex.js +1 -1
  92. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  93. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  94. package/dist/cjs/src/abstract/upbit.js +1 -1
  95. package/dist/cjs/src/abstract/vertex.js +1 -1
  96. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  97. package/dist/cjs/src/abstract/whitebit.js +1 -1
  98. package/dist/cjs/src/abstract/woo.js +1 -1
  99. package/dist/cjs/src/abstract/woofipro.js +1 -1
  100. package/dist/cjs/src/abstract/xt.js +1 -1
  101. package/dist/cjs/src/abstract/yobit.js +1 -1
  102. package/dist/cjs/src/abstract/zaif.js +1 -1
  103. package/dist/cjs/src/abstract/zonda.js +1 -1
  104. package/dist/cjs/src/ace.js +1 -1
  105. package/dist/cjs/src/alpaca.js +1 -1
  106. package/dist/cjs/src/ascendex.js +2 -2
  107. package/dist/cjs/src/base/Exchange.js +33 -1
  108. package/dist/cjs/src/base/Precise.js +6 -0
  109. package/dist/cjs/src/base/errors.js +6 -0
  110. package/dist/cjs/src/base/functions/crypto.js +1 -1
  111. package/dist/cjs/src/base/functions/encode.js +1 -1
  112. package/dist/cjs/src/base/functions/misc.js +1 -0
  113. package/dist/cjs/src/base/functions/number.js +6 -0
  114. package/dist/cjs/src/base/functions/platform.js +6 -0
  115. package/dist/cjs/src/base/functions/rsa.js +1 -0
  116. package/dist/cjs/src/base/functions/string.js +6 -0
  117. package/dist/cjs/src/base/functions/throttle.js +1 -1
  118. package/dist/cjs/src/base/functions/time.js +6 -0
  119. package/dist/cjs/src/base/functions/totp.js +1 -0
  120. package/dist/cjs/src/base/functions/type.js +6 -0
  121. package/dist/cjs/src/base/functions.js +1 -1
  122. package/dist/cjs/src/base/ws/Cache.js +6 -0
  123. package/dist/cjs/src/base/ws/Client.js +1 -0
  124. package/dist/cjs/src/base/ws/Future.js +1 -1
  125. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  126. package/dist/cjs/src/base/ws/OrderBookSide.js +6 -0
  127. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  128. package/dist/cjs/src/bequant.js +1 -1
  129. package/dist/cjs/src/bigone.js +1 -1
  130. package/dist/cjs/src/binance.js +108 -103
  131. package/dist/cjs/src/binancecoinm.js +1 -1
  132. package/dist/cjs/src/binanceus.js +1 -1
  133. package/dist/cjs/src/binanceusdm.js +1 -1
  134. package/dist/cjs/src/bingx.js +66 -44
  135. package/dist/cjs/src/bit2c.js +1 -1
  136. package/dist/cjs/src/bitbank.js +1 -1
  137. package/dist/cjs/src/bitbns.js +1 -1
  138. package/dist/cjs/src/bitcoincom.js +1 -1
  139. package/dist/cjs/src/bitfinex.js +1 -1
  140. package/dist/cjs/src/bitfinex1.js +1 -1
  141. package/dist/cjs/src/bitflyer.js +1 -1
  142. package/dist/cjs/src/bitget.js +2 -6
  143. package/dist/cjs/src/bithumb.js +1 -1
  144. package/dist/cjs/src/bitmart.js +16 -2
  145. package/dist/cjs/src/bitmex.js +1 -1
  146. package/dist/cjs/src/bitopro.js +2 -1
  147. package/dist/cjs/src/bitpanda.js +1 -1
  148. package/dist/cjs/src/bitrue.js +2 -1
  149. package/dist/cjs/src/bitso.js +1 -1
  150. package/dist/cjs/src/bitstamp.js +1 -1
  151. package/dist/cjs/src/bitteam.js +1 -1
  152. package/dist/cjs/src/bl3p.js +1 -1
  153. package/dist/cjs/src/blockchaincom.js +1 -1
  154. package/dist/cjs/src/blofin.js +1 -1
  155. package/dist/cjs/src/btcalpha.js +1 -1
  156. package/dist/cjs/src/btcbox.js +1 -1
  157. package/dist/cjs/src/btcmarkets.js +1 -1
  158. package/dist/cjs/src/btcturk.js +1 -1
  159. package/dist/cjs/src/bybit.js +1 -1
  160. package/dist/cjs/src/cex.js +3 -1
  161. package/dist/cjs/src/coinbase.js +2 -1
  162. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  163. package/dist/cjs/src/coinbaseexchange.js +2 -0
  164. package/dist/cjs/src/coinbaseinternational.js +1 -0
  165. package/dist/cjs/src/coincatch.js +1 -1
  166. package/dist/cjs/src/coincheck.js +1 -1
  167. package/dist/cjs/src/coinex.js +1 -1
  168. package/dist/cjs/src/coinlist.js +1 -0
  169. package/dist/cjs/src/coinmate.js +1 -1
  170. package/dist/cjs/src/coinmetro.js +1 -1
  171. package/dist/cjs/src/coinone.js +1 -1
  172. package/dist/cjs/src/coinsph.js +1 -0
  173. package/dist/cjs/src/coinspot.js +1 -1
  174. package/dist/cjs/src/cryptocom.js +1 -1
  175. package/dist/cjs/src/cryptomus.js +1 -1
  176. package/dist/cjs/src/defx.js +1 -1
  177. package/dist/cjs/src/delta.js +1 -1
  178. package/dist/cjs/src/deribit.js +3 -1
  179. package/dist/cjs/src/derive.js +14 -8
  180. package/dist/cjs/src/digifinex.js +1 -1
  181. package/dist/cjs/src/ellipx.js +1 -1
  182. package/dist/cjs/src/exmo.js +1 -1
  183. package/dist/cjs/src/fmfwio.js +1 -1
  184. package/dist/cjs/src/gate.js +5 -1
  185. package/dist/cjs/src/gateio.js +1 -1
  186. package/dist/cjs/src/gemini.js +2 -1
  187. package/dist/cjs/src/hashkey.js +5 -3
  188. package/dist/cjs/src/hitbtc.js +1 -0
  189. package/dist/cjs/src/hollaex.js +1 -1
  190. package/dist/cjs/src/htx.js +1 -1
  191. package/dist/cjs/src/huobi.js +1 -1
  192. package/dist/cjs/src/huobijp.js +1 -1
  193. package/dist/cjs/src/hyperliquid.js +41 -1
  194. package/dist/cjs/src/idex.js +1 -1
  195. package/dist/cjs/src/independentreserve.js +1 -1
  196. package/dist/cjs/src/indodax.js +1 -1
  197. package/dist/cjs/src/kraken.js +84 -7
  198. package/dist/cjs/src/krakenfutures.js +5 -1
  199. package/dist/cjs/src/kucoin.js +5 -3
  200. package/dist/cjs/src/kucoinfutures.js +1 -1
  201. package/dist/cjs/src/kuna.js +1 -1
  202. package/dist/cjs/src/latoken.js +1 -1
  203. package/dist/cjs/src/lbank.js +1 -1
  204. package/dist/cjs/src/luno.js +1 -1
  205. package/dist/cjs/src/mercado.js +1 -1
  206. package/dist/cjs/src/mexc.js +9 -5
  207. package/dist/cjs/src/myokx.js +1 -1
  208. package/dist/cjs/src/ndax.js +1 -1
  209. package/dist/cjs/src/novadax.js +1 -1
  210. package/dist/cjs/src/oceanex.js +1 -1
  211. package/dist/cjs/src/okcoin.js +5 -1
  212. package/dist/cjs/src/okx.js +81 -79
  213. package/dist/cjs/src/onetrading.js +1 -1
  214. package/dist/cjs/src/oxfun.js +1 -1
  215. package/dist/cjs/src/p2b.js +1 -1
  216. package/dist/cjs/src/paradex.js +70 -10
  217. package/dist/cjs/src/paymium.js +1 -1
  218. package/dist/cjs/src/poloniex.js +1313 -82
  219. package/dist/cjs/src/poloniexfutures.js +1 -1
  220. package/dist/cjs/src/pro/alpaca.js +1 -1
  221. package/dist/cjs/src/pro/ascendex.js +1 -1
  222. package/dist/cjs/src/pro/bequant.js +1 -1
  223. package/dist/cjs/src/pro/binance.js +94 -94
  224. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  225. package/dist/cjs/src/pro/binanceus.js +1 -1
  226. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  227. package/dist/cjs/src/pro/bingx.js +64 -53
  228. package/dist/cjs/src/pro/bitcoincom.js +1 -1
  229. package/dist/cjs/src/pro/bitfinex.js +1 -1
  230. package/dist/cjs/src/pro/bitfinex1.js +1 -1
  231. package/dist/cjs/src/pro/bitget.js +1 -1
  232. package/dist/cjs/src/pro/bithumb.js +1 -1
  233. package/dist/cjs/src/pro/bitmart.js +20 -8
  234. package/dist/cjs/src/pro/bitmex.js +1 -1
  235. package/dist/cjs/src/pro/bitpanda.js +1 -1
  236. package/dist/cjs/src/pro/bitrue.js +1 -1
  237. package/dist/cjs/src/pro/bitstamp.js +1 -1
  238. package/dist/cjs/src/pro/bitvavo.js +1 -1
  239. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  240. package/dist/cjs/src/pro/blofin.js +1 -1
  241. package/dist/cjs/src/pro/bybit.js +1 -1
  242. package/dist/cjs/src/pro/cex.js +1 -1
  243. package/dist/cjs/src/pro/coinbase.js +1 -1
  244. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  245. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  246. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  247. package/dist/cjs/src/pro/coincatch.js +1 -1
  248. package/dist/cjs/src/pro/coincheck.js +1 -1
  249. package/dist/cjs/src/pro/coinex.js +1 -1
  250. package/dist/cjs/src/pro/coinone.js +1 -1
  251. package/dist/cjs/src/pro/cryptocom.js +1 -1
  252. package/dist/cjs/src/pro/defx.js +1 -1
  253. package/dist/cjs/src/pro/deribit.js +1 -1
  254. package/dist/cjs/src/pro/derive.js +2 -2
  255. package/dist/cjs/src/pro/exmo.js +1 -1
  256. package/dist/cjs/src/pro/gate.js +1 -1
  257. package/dist/cjs/src/pro/gateio.js +1 -1
  258. package/dist/cjs/src/pro/gemini.js +1 -1
  259. package/dist/cjs/src/pro/hashkey.js +1 -1
  260. package/dist/cjs/src/pro/hitbtc.js +1 -1
  261. package/dist/cjs/src/pro/hollaex.js +1 -1
  262. package/dist/cjs/src/pro/htx.js +1 -1
  263. package/dist/cjs/src/pro/huobi.js +1 -1
  264. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  265. package/dist/cjs/src/pro/idex.js +1 -1
  266. package/dist/cjs/src/pro/independentreserve.js +1 -1
  267. package/dist/cjs/src/pro/kraken.js +1 -1
  268. package/dist/cjs/src/pro/krakenfutures.js +2 -2
  269. package/dist/cjs/src/pro/kucoin.js +1 -1
  270. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  271. package/dist/cjs/src/pro/lbank.js +1 -0
  272. package/dist/cjs/src/pro/luno.js +1 -1
  273. package/dist/cjs/src/pro/mexc.js +1 -1
  274. package/dist/cjs/src/pro/myokx.js +1 -1
  275. package/dist/cjs/src/pro/ndax.js +1 -1
  276. package/dist/cjs/src/pro/okcoin.js +1 -1
  277. package/dist/cjs/src/pro/okx.js +1 -1
  278. package/dist/cjs/src/pro/onetrading.js +1 -1
  279. package/dist/cjs/src/pro/oxfun.js +1 -1
  280. package/dist/cjs/src/pro/p2b.js +1 -1
  281. package/dist/cjs/src/pro/paradex.js +1 -1
  282. package/dist/cjs/src/pro/phemex.js +1 -1
  283. package/dist/cjs/src/pro/poloniex.js +1 -1
  284. package/dist/cjs/src/pro/poloniexfutures.js +1 -1
  285. package/dist/cjs/src/pro/probit.js +1 -1
  286. package/dist/cjs/src/pro/upbit.js +1 -1
  287. package/dist/cjs/src/pro/whitebit.js +1 -1
  288. package/dist/cjs/src/pro/xt.js +1 -1
  289. package/dist/cjs/src/probit.js +1 -1
  290. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +6 -0
  291. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  292. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  293. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +1 -0
  294. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +1 -0
  295. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +1 -0
  296. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +1 -0
  297. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +1 -0
  298. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +1 -0
  299. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +1 -0
  300. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +1 -0
  301. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +1 -0
  302. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +1 -0
  303. package/dist/cjs/src/static_dependencies/ethers/fragments.js +6 -0
  304. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  305. package/dist/cjs/src/static_dependencies/ethers/index.js +1 -10
  306. package/dist/cjs/src/static_dependencies/ethers/interface.js +6 -0
  307. package/dist/cjs/src/static_dependencies/ethers/typed.js +6 -0
  308. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +1 -13
  309. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +1 -6
  310. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +1 -9
  311. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +6 -0
  312. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  313. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +1 -7
  314. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +1 -5
  315. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +6 -0
  316. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +1 -8
  317. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  318. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +1 -0
  319. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +1 -0
  320. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  321. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  322. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  323. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  324. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +1 -0
  325. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  326. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  327. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  328. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  329. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  330. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  331. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  332. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +6 -0
  333. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  334. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  335. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  336. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +1 -0
  337. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  338. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  339. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  340. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  341. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  342. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  343. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  344. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  345. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +6 -0
  346. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +1 -0
  347. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +6 -0
  348. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +6 -0
  349. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +1 -0
  350. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +1 -0
  351. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +1 -0
  352. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +1 -0
  353. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +1 -0
  354. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +1 -0
  355. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  356. package/dist/cjs/src/static_dependencies/node-fetch/body.js +1 -5
  357. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +1 -0
  358. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +6 -0
  359. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +1 -0
  360. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +1 -5
  361. package/dist/cjs/src/static_dependencies/node-fetch/index.js +1 -7
  362. package/dist/cjs/src/static_dependencies/node-fetch/request.js +1 -7
  363. package/dist/cjs/src/static_dependencies/node-fetch/response.js +1 -5
  364. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  365. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  366. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +6 -0
  367. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +1 -0
  368. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +1 -0
  369. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +1 -0
  370. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +1 -0
  371. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  372. package/dist/cjs/src/static_dependencies/scure-base/index.js +6 -0
  373. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  374. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  375. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +6 -0
  376. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  377. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  378. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +6 -0
  379. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +6 -0
  380. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +6 -0
  381. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  383. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +1 -0
  385. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +1 -0
  386. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  388. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  389. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +1 -0
  390. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  391. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +1 -0
  392. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +1 -0
  393. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  394. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +1 -0
  395. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -0
  396. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +1 -0
  397. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  398. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +1 -4
  399. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +1 -0
  400. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +1 -3
  401. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +1 -0
  402. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +1 -0
  403. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +1 -0
  404. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +1 -0
  405. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  406. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +6 -0
  407. package/dist/cjs/src/timex.js +1 -0
  408. package/dist/cjs/src/tokocrypto.js +1 -1
  409. package/dist/cjs/src/tradeogre.js +1 -1
  410. package/dist/cjs/src/upbit.js +1 -1
  411. package/dist/cjs/src/vertex.js +1 -1
  412. package/dist/cjs/src/wavesexchange.js +1 -1
  413. package/dist/cjs/src/whitebit.js +102 -4
  414. package/dist/cjs/src/woo.js +4 -2
  415. package/dist/cjs/src/woofipro.js +2 -2
  416. package/dist/cjs/src/xt.js +1 -1
  417. package/dist/cjs/src/yobit.js +2 -1
  418. package/dist/cjs/src/zaif.js +1 -1
  419. package/dist/cjs/src/zonda.js +1 -1
  420. package/js/ccxt.d.ts +3 -9
  421. package/js/ccxt.js +8 -6
  422. package/js/src/abstract/ace.js +6 -0
  423. package/js/src/abstract/alpaca.js +6 -0
  424. package/js/src/abstract/ascendex.js +6 -0
  425. package/js/src/abstract/bequant.js +6 -0
  426. package/js/src/abstract/bigone.js +6 -0
  427. package/js/src/abstract/binance.js +6 -0
  428. package/js/src/abstract/binancecoinm.js +6 -0
  429. package/js/src/abstract/binanceus.js +6 -0
  430. package/js/src/abstract/binanceusdm.js +6 -0
  431. package/js/src/abstract/bingx.d.ts +1 -0
  432. package/js/src/abstract/bingx.js +6 -0
  433. package/js/src/abstract/bit2c.js +6 -0
  434. package/js/src/abstract/bitbank.js +6 -0
  435. package/js/src/abstract/bitbns.js +6 -0
  436. package/js/src/abstract/bitcoincom.js +6 -0
  437. package/js/src/abstract/bitfinex.js +6 -0
  438. package/js/src/abstract/bitfinex1.js +6 -0
  439. package/js/src/abstract/bitflyer.js +6 -0
  440. package/js/src/abstract/bitget.js +6 -0
  441. package/js/src/abstract/bithumb.js +6 -0
  442. package/js/src/abstract/bitmart.d.ts +1 -0
  443. package/js/src/abstract/bitmart.js +6 -0
  444. package/js/src/abstract/bitmex.js +6 -0
  445. package/js/src/abstract/bitopro.js +6 -0
  446. package/js/src/abstract/bitpanda.js +6 -0
  447. package/js/src/abstract/bitrue.js +6 -0
  448. package/js/src/abstract/bitso.js +6 -0
  449. package/js/src/abstract/bitstamp.js +6 -0
  450. package/js/src/abstract/bitteam.js +6 -0
  451. package/js/src/abstract/bitvavo.js +6 -0
  452. package/js/src/abstract/bl3p.js +6 -0
  453. package/js/src/abstract/blockchaincom.js +6 -0
  454. package/js/src/abstract/blofin.js +6 -0
  455. package/js/src/abstract/btcalpha.js +6 -0
  456. package/js/src/abstract/btcbox.js +6 -0
  457. package/js/src/abstract/btcmarkets.js +6 -0
  458. package/js/src/abstract/btcturk.js +6 -0
  459. package/js/src/abstract/bybit.js +6 -0
  460. package/js/src/abstract/cex.js +6 -0
  461. package/js/src/abstract/coinbase.js +6 -0
  462. package/js/src/abstract/coinbaseadvanced.js +6 -0
  463. package/js/src/abstract/coinbaseexchange.js +6 -0
  464. package/js/src/abstract/coinbaseinternational.js +6 -0
  465. package/js/src/abstract/coincatch.js +6 -0
  466. package/js/src/abstract/coincheck.js +6 -0
  467. package/js/src/abstract/coinex.js +6 -0
  468. package/js/src/abstract/coinlist.js +6 -0
  469. package/js/src/abstract/coinmate.js +6 -0
  470. package/js/src/abstract/coinmetro.js +6 -0
  471. package/js/src/abstract/coinone.js +6 -0
  472. package/js/src/abstract/coinsph.js +6 -0
  473. package/js/src/abstract/coinspot.js +6 -0
  474. package/js/src/abstract/cryptocom.js +6 -0
  475. package/js/src/abstract/cryptomus.js +6 -0
  476. package/js/src/abstract/defx.js +6 -0
  477. package/js/src/abstract/delta.js +6 -0
  478. package/js/src/abstract/deribit.js +6 -0
  479. package/js/src/abstract/derive.js +6 -0
  480. package/js/src/abstract/digifinex.js +6 -0
  481. package/js/src/abstract/ellipx.js +6 -0
  482. package/js/src/abstract/exmo.js +6 -0
  483. package/js/src/abstract/fmfwio.js +6 -0
  484. package/js/src/abstract/gate.js +6 -0
  485. package/js/src/abstract/gateio.js +6 -0
  486. package/js/src/abstract/gemini.js +6 -0
  487. package/js/src/abstract/hashkey.js +6 -0
  488. package/js/src/abstract/hitbtc.js +6 -0
  489. package/js/src/abstract/hollaex.js +6 -0
  490. package/js/src/abstract/htx.js +6 -0
  491. package/js/src/abstract/huobi.js +6 -0
  492. package/js/src/abstract/huobijp.js +6 -0
  493. package/js/src/abstract/hyperliquid.js +6 -0
  494. package/js/src/abstract/idex.js +6 -0
  495. package/js/src/abstract/independentreserve.js +6 -0
  496. package/js/src/abstract/indodax.js +6 -0
  497. package/js/src/abstract/kraken.js +6 -0
  498. package/js/src/abstract/krakenfutures.js +6 -0
  499. package/js/src/abstract/kucoin.js +6 -0
  500. package/js/src/abstract/kucoinfutures.js +6 -0
  501. package/js/src/abstract/kuna.js +6 -0
  502. package/js/src/abstract/latoken.js +6 -0
  503. package/js/src/abstract/lbank.js +6 -0
  504. package/js/src/abstract/luno.js +6 -0
  505. package/js/src/abstract/mercado.js +6 -0
  506. package/js/src/abstract/mexc.js +6 -0
  507. package/js/src/abstract/myokx.js +6 -0
  508. package/js/src/abstract/ndax.js +6 -0
  509. package/js/src/abstract/novadax.js +6 -0
  510. package/js/src/abstract/oceanex.js +6 -0
  511. package/js/src/abstract/okcoin.js +6 -0
  512. package/js/src/abstract/okx.js +6 -0
  513. package/js/src/abstract/onetrading.js +6 -0
  514. package/js/src/abstract/oxfun.js +6 -0
  515. package/js/src/abstract/p2b.js +6 -0
  516. package/js/src/abstract/paradex.js +6 -0
  517. package/js/src/abstract/paymium.js +6 -0
  518. package/js/src/abstract/phemex.js +6 -0
  519. package/js/src/abstract/poloniex.d.ts +36 -0
  520. package/js/src/abstract/poloniex.js +6 -0
  521. package/js/src/abstract/poloniexfutures.js +6 -0
  522. package/js/src/abstract/probit.js +6 -0
  523. package/js/src/abstract/timex.js +6 -0
  524. package/js/src/abstract/tokocrypto.js +6 -0
  525. package/js/src/abstract/tradeogre.js +6 -0
  526. package/js/src/abstract/upbit.js +6 -0
  527. package/js/src/abstract/vertex.js +6 -0
  528. package/js/src/abstract/wavesexchange.js +6 -0
  529. package/js/src/abstract/whitebit.js +6 -0
  530. package/js/src/abstract/woo.js +6 -0
  531. package/js/src/abstract/woofipro.js +6 -0
  532. package/js/src/abstract/xt.js +6 -0
  533. package/js/src/abstract/yobit.js +6 -0
  534. package/js/src/abstract/zaif.js +6 -0
  535. package/js/src/abstract/zonda.js +6 -0
  536. package/js/src/ace.js +6 -0
  537. package/js/src/alpaca.js +6 -0
  538. package/js/src/ascendex.js +7 -1
  539. package/js/src/base/Exchange.d.ts +14 -5
  540. package/js/src/base/Exchange.js +39 -1
  541. package/js/src/base/Precise.js +6 -0
  542. package/js/src/base/errorHierarchy.js +6 -0
  543. package/js/src/base/errors.js +6 -0
  544. package/js/src/base/functions/crypto.js +6 -0
  545. package/js/src/base/functions/encode.js +6 -0
  546. package/js/src/base/functions/generic.js +6 -0
  547. package/js/src/base/functions/misc.js +6 -0
  548. package/js/src/base/functions/number.js +6 -0
  549. package/js/src/base/functions/platform.js +6 -0
  550. package/js/src/base/functions/rsa.js +6 -0
  551. package/js/src/base/functions/string.js +6 -0
  552. package/js/src/base/functions/throttle.js +6 -0
  553. package/js/src/base/functions/time.js +6 -0
  554. package/js/src/base/functions/totp.js +6 -0
  555. package/js/src/base/functions/type.js +6 -0
  556. package/js/src/base/functions.js +6 -0
  557. package/js/src/base/types.d.ts +31 -6
  558. package/js/src/base/types.js +6 -0
  559. package/js/src/base/ws/Cache.js +6 -0
  560. package/js/src/base/ws/Client.js +6 -0
  561. package/js/src/base/ws/Future.js +6 -0
  562. package/js/src/base/ws/OrderBook.js +6 -0
  563. package/js/src/base/ws/OrderBookSide.js +6 -0
  564. package/js/src/base/ws/WsClient.js +6 -0
  565. package/js/src/base/ws/functions.js +6 -0
  566. package/js/src/bequant.js +6 -0
  567. package/js/src/bigone.js +6 -0
  568. package/js/src/binance.d.ts +98 -97
  569. package/js/src/binance.js +113 -102
  570. package/js/src/binancecoinm.js +6 -0
  571. package/js/src/binanceus.js +6 -0
  572. package/js/src/binanceusdm.js +6 -0
  573. package/js/src/bingx.js +71 -43
  574. package/js/src/bit2c.js +6 -0
  575. package/js/src/bitbank.js +6 -0
  576. package/js/src/bitbns.js +6 -0
  577. package/js/src/bitcoincom.js +6 -0
  578. package/js/src/bitfinex.js +6 -0
  579. package/js/src/bitfinex1.js +6 -0
  580. package/js/src/bitflyer.js +6 -0
  581. package/js/src/bitget.js +7 -5
  582. package/js/src/bithumb.js +6 -0
  583. package/js/src/bitmart.d.ts +1 -0
  584. package/js/src/bitmart.js +21 -1
  585. package/js/src/bitmex.js +6 -0
  586. package/js/src/bitopro.js +7 -0
  587. package/js/src/bitpanda.js +6 -0
  588. package/js/src/bitrue.js +7 -0
  589. package/js/src/bitso.js +6 -0
  590. package/js/src/bitstamp.js +6 -0
  591. package/js/src/bitteam.js +6 -0
  592. package/js/src/bitvavo.js +6 -0
  593. package/js/src/bl3p.d.ts +2 -8
  594. package/js/src/bl3p.js +6 -0
  595. package/js/src/blockchaincom.js +6 -0
  596. package/js/src/blofin.js +6 -0
  597. package/js/src/btcalpha.js +6 -0
  598. package/js/src/btcbox.js +6 -0
  599. package/js/src/btcmarkets.js +6 -0
  600. package/js/src/btcturk.js +6 -0
  601. package/js/src/bybit.js +6 -0
  602. package/js/src/cex.js +8 -0
  603. package/js/src/coinbase.d.ts +1 -6
  604. package/js/src/coinbase.js +8 -1
  605. package/js/src/coinbaseadvanced.js +6 -0
  606. package/js/src/coinbaseexchange.d.ts +2 -7
  607. package/js/src/coinbaseexchange.js +8 -0
  608. package/js/src/coinbaseinternational.d.ts +2 -7
  609. package/js/src/coinbaseinternational.js +7 -0
  610. package/js/src/coincatch.js +6 -0
  611. package/js/src/coincheck.js +6 -0
  612. package/js/src/coinex.js +6 -0
  613. package/js/src/coinlist.js +6 -0
  614. package/js/src/coinmate.js +6 -0
  615. package/js/src/coinmetro.js +6 -0
  616. package/js/src/coinone.js +6 -0
  617. package/js/src/coinsph.js +6 -0
  618. package/js/src/coinspot.js +6 -0
  619. package/js/src/cryptocom.js +6 -0
  620. package/js/src/cryptomus.js +6 -0
  621. package/js/src/defx.js +6 -0
  622. package/js/src/delta.js +6 -0
  623. package/js/src/deribit.d.ts +1 -6
  624. package/js/src/deribit.js +8 -0
  625. package/js/src/derive.js +19 -7
  626. package/js/src/digifinex.js +6 -0
  627. package/js/src/ellipx.js +6 -0
  628. package/js/src/exmo.js +6 -0
  629. package/js/src/fmfwio.js +6 -0
  630. package/js/src/gate.js +10 -0
  631. package/js/src/gateio.js +6 -0
  632. package/js/src/gemini.d.ts +1 -6
  633. package/js/src/gemini.js +7 -0
  634. package/js/src/hashkey.js +10 -2
  635. package/js/src/hitbtc.d.ts +1 -7
  636. package/js/src/hitbtc.js +6 -0
  637. package/js/src/hollaex.js +6 -0
  638. package/js/src/htx.js +6 -0
  639. package/js/src/huobi.js +6 -0
  640. package/js/src/huobijp.js +6 -0
  641. package/js/src/hyperliquid.d.ts +11 -0
  642. package/js/src/hyperliquid.js +46 -0
  643. package/js/src/idex.js +6 -0
  644. package/js/src/independentreserve.js +6 -0
  645. package/js/src/indodax.js +6 -0
  646. package/js/src/kraken.d.ts +1 -0
  647. package/js/src/kraken.js +89 -6
  648. package/js/src/krakenfutures.js +10 -0
  649. package/js/src/kucoin.js +10 -2
  650. package/js/src/kucoinfutures.js +6 -0
  651. package/js/src/kuna.js +6 -0
  652. package/js/src/latoken.js +6 -0
  653. package/js/src/lbank.js +6 -0
  654. package/js/src/luno.js +6 -0
  655. package/js/src/mercado.js +6 -0
  656. package/js/src/mexc.js +14 -4
  657. package/js/src/myokx.js +6 -0
  658. package/js/src/ndax.js +6 -0
  659. package/js/src/novadax.js +6 -0
  660. package/js/src/oceanex.js +6 -0
  661. package/js/src/okcoin.js +10 -0
  662. package/js/src/okx.js +86 -78
  663. package/js/src/onetrading.js +6 -0
  664. package/js/src/oxfun.js +6 -0
  665. package/js/src/p2b.js +6 -0
  666. package/js/src/paradex.js +75 -9
  667. package/js/src/paymium.js +6 -0
  668. package/js/src/phemex.js +6 -0
  669. package/js/src/poloniex.d.ts +110 -8
  670. package/js/src/poloniex.js +1318 -81
  671. package/js/src/poloniexfutures.js +6 -0
  672. package/js/src/pro/alpaca.js +6 -0
  673. package/js/src/pro/ascendex.js +6 -0
  674. package/js/src/pro/bequant.js +6 -0
  675. package/js/src/pro/binance.d.ts +94 -94
  676. package/js/src/pro/binance.js +100 -94
  677. package/js/src/pro/binancecoinm.js +6 -0
  678. package/js/src/pro/binanceus.js +6 -0
  679. package/js/src/pro/binanceusdm.js +6 -0
  680. package/js/src/pro/bingx.js +69 -52
  681. package/js/src/pro/bitcoincom.js +6 -0
  682. package/js/src/pro/bitfinex.js +6 -0
  683. package/js/src/pro/bitfinex1.js +6 -0
  684. package/js/src/pro/bitget.js +6 -0
  685. package/js/src/pro/bithumb.js +6 -0
  686. package/js/src/pro/bitmart.js +25 -7
  687. package/js/src/pro/bitmex.js +6 -0
  688. package/js/src/pro/bitopro.js +6 -0
  689. package/js/src/pro/bitpanda.js +6 -0
  690. package/js/src/pro/bitrue.js +6 -0
  691. package/js/src/pro/bitstamp.js +6 -0
  692. package/js/src/pro/bitvavo.js +6 -0
  693. package/js/src/pro/blockchaincom.js +6 -0
  694. package/js/src/pro/blofin.js +6 -0
  695. package/js/src/pro/bybit.js +6 -0
  696. package/js/src/pro/cex.js +6 -0
  697. package/js/src/pro/coinbase.js +6 -0
  698. package/js/src/pro/coinbaseadvanced.js +6 -0
  699. package/js/src/pro/coinbaseexchange.js +6 -0
  700. package/js/src/pro/coinbaseinternational.js +6 -0
  701. package/js/src/pro/coincatch.js +6 -0
  702. package/js/src/pro/coincheck.js +6 -0
  703. package/js/src/pro/coinex.js +6 -0
  704. package/js/src/pro/coinone.js +6 -0
  705. package/js/src/pro/cryptocom.js +6 -0
  706. package/js/src/pro/defx.js +6 -0
  707. package/js/src/pro/deribit.js +6 -0
  708. package/js/src/pro/derive.js +8 -2
  709. package/js/src/pro/exmo.js +6 -0
  710. package/js/src/pro/gate.js +6 -0
  711. package/js/src/pro/gateio.js +6 -0
  712. package/js/src/pro/gemini.js +6 -0
  713. package/js/src/pro/hashkey.js +6 -0
  714. package/js/src/pro/hitbtc.js +6 -0
  715. package/js/src/pro/hollaex.js +6 -0
  716. package/js/src/pro/htx.js +6 -0
  717. package/js/src/pro/huobi.js +6 -0
  718. package/js/src/pro/huobijp.js +6 -0
  719. package/js/src/pro/hyperliquid.js +6 -0
  720. package/js/src/pro/idex.js +6 -0
  721. package/js/src/pro/independentreserve.js +6 -0
  722. package/js/src/pro/kraken.js +6 -0
  723. package/js/src/pro/krakenfutures.js +7 -1
  724. package/js/src/pro/kucoin.js +6 -0
  725. package/js/src/pro/kucoinfutures.js +6 -0
  726. package/js/src/pro/lbank.js +6 -0
  727. package/js/src/pro/luno.js +6 -0
  728. package/js/src/pro/mexc.js +6 -0
  729. package/js/src/pro/myokx.js +6 -0
  730. package/js/src/pro/ndax.js +6 -0
  731. package/js/src/pro/okcoin.js +6 -0
  732. package/js/src/pro/okx.js +6 -0
  733. package/js/src/pro/onetrading.js +6 -0
  734. package/js/src/pro/oxfun.js +6 -0
  735. package/js/src/pro/p2b.js +6 -0
  736. package/js/src/pro/paradex.js +6 -0
  737. package/js/src/pro/phemex.js +6 -0
  738. package/js/src/pro/poloniex.js +6 -0
  739. package/js/src/pro/poloniexfutures.js +6 -0
  740. package/js/src/pro/probit.js +6 -0
  741. package/js/src/pro/upbit.js +6 -0
  742. package/js/src/pro/vertex.js +6 -0
  743. package/js/src/pro/whitebit.js +6 -0
  744. package/js/src/pro/woo.js +6 -0
  745. package/js/src/pro/woofipro.js +6 -0
  746. package/js/src/pro/xt.js +6 -0
  747. package/js/src/probit.js +6 -0
  748. package/js/src/static_dependencies/ethers/abi-coder.js +6 -0
  749. package/js/src/static_dependencies/ethers/address/address.js +6 -0
  750. package/js/src/static_dependencies/ethers/address/checks.js +6 -0
  751. package/js/src/static_dependencies/ethers/address/contract-address.js +6 -0
  752. package/js/src/static_dependencies/ethers/address/index.js +6 -0
  753. package/js/src/static_dependencies/ethers/bytes32.js +6 -0
  754. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  755. package/js/src/static_dependencies/ethers/coders/address.js +6 -0
  756. package/js/src/static_dependencies/ethers/coders/anonymous.js +6 -0
  757. package/js/src/static_dependencies/ethers/coders/array.js +6 -0
  758. package/js/src/static_dependencies/ethers/coders/boolean.js +6 -0
  759. package/js/src/static_dependencies/ethers/coders/bytes.js +6 -0
  760. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +6 -0
  761. package/js/src/static_dependencies/ethers/coders/null.js +6 -0
  762. package/js/src/static_dependencies/ethers/coders/number.js +6 -0
  763. package/js/src/static_dependencies/ethers/coders/string.js +6 -0
  764. package/js/src/static_dependencies/ethers/coders/tuple.js +6 -0
  765. package/js/src/static_dependencies/ethers/fragments.js +6 -0
  766. package/js/src/static_dependencies/ethers/hash/index.js +6 -0
  767. package/js/src/static_dependencies/ethers/hash/solidity.js +6 -0
  768. package/js/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  769. package/js/src/static_dependencies/ethers/index.js +6 -0
  770. package/js/src/static_dependencies/ethers/interface.js +6 -0
  771. package/js/src/static_dependencies/ethers/typed.js +6 -0
  772. package/js/src/static_dependencies/ethers/utils/base58.js +6 -0
  773. package/js/src/static_dependencies/ethers/utils/base64-browser.js +6 -0
  774. package/js/src/static_dependencies/ethers/utils/base64.js +6 -0
  775. package/js/src/static_dependencies/ethers/utils/data.js +6 -0
  776. package/js/src/static_dependencies/ethers/utils/errors.js +6 -0
  777. package/js/src/static_dependencies/ethers/utils/events.js +6 -0
  778. package/js/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  779. package/js/src/static_dependencies/ethers/utils/index.js +6 -0
  780. package/js/src/static_dependencies/ethers/utils/maths.js +6 -0
  781. package/js/src/static_dependencies/ethers/utils/properties.js +6 -0
  782. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +6 -0
  783. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +6 -0
  784. package/js/src/static_dependencies/ethers/utils/rlp.js +6 -0
  785. package/js/src/static_dependencies/ethers/utils/units.js +6 -0
  786. package/js/src/static_dependencies/ethers/utils/utf8.js +6 -0
  787. package/js/src/static_dependencies/ethers/utils/uuid.js +6 -0
  788. package/js/src/static_dependencies/fflake/browser.js +6 -0
  789. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +6 -0
  790. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +6 -0
  791. package/js/src/static_dependencies/jsencrypt/index.js +6 -0
  792. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +6 -0
  793. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  794. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  795. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  796. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +6 -0
  797. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +6 -0
  798. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +6 -0
  799. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  800. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +6 -0
  801. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +6 -0
  802. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  803. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +6 -0
  804. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  805. package/js/src/static_dependencies/messagepack/msgpack.js +6 -0
  806. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +6 -0
  807. package/js/src/static_dependencies/noble-curves/abstract/curve.js +6 -0
  808. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +6 -0
  809. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +6 -0
  810. package/js/src/static_dependencies/noble-curves/abstract/modular.js +6 -0
  811. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +6 -0
  812. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +6 -0
  813. package/js/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  814. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +6 -0
  815. package/js/src/static_dependencies/noble-curves/bn.js +6 -0
  816. package/js/src/static_dependencies/noble-curves/ed25519.js +6 -0
  817. package/js/src/static_dependencies/noble-curves/ed448.js +6 -0
  818. package/js/src/static_dependencies/noble-curves/index.js +6 -0
  819. package/js/src/static_dependencies/noble-curves/jubjub.js +6 -0
  820. package/js/src/static_dependencies/noble-curves/p256.js +6 -0
  821. package/js/src/static_dependencies/noble-curves/p384.js +6 -0
  822. package/js/src/static_dependencies/noble-curves/p521.js +6 -0
  823. package/js/src/static_dependencies/noble-curves/pasta.js +6 -0
  824. package/js/src/static_dependencies/noble-curves/secp256k1.js +6 -0
  825. package/js/src/static_dependencies/noble-hashes/_assert.js +6 -0
  826. package/js/src/static_dependencies/noble-hashes/_blake2.js +6 -0
  827. package/js/src/static_dependencies/noble-hashes/_sha2.js +6 -0
  828. package/js/src/static_dependencies/noble-hashes/_u64.js +6 -0
  829. package/js/src/static_dependencies/noble-hashes/argon2.js +6 -0
  830. package/js/src/static_dependencies/noble-hashes/blake2b.js +6 -0
  831. package/js/src/static_dependencies/noble-hashes/blake2s.js +6 -0
  832. package/js/src/static_dependencies/noble-hashes/blake3.js +6 -0
  833. package/js/src/static_dependencies/noble-hashes/crypto.js +6 -0
  834. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +6 -0
  835. package/js/src/static_dependencies/noble-hashes/eskdf.js +6 -0
  836. package/js/src/static_dependencies/noble-hashes/hkdf.js +6 -0
  837. package/js/src/static_dependencies/noble-hashes/hmac.js +6 -0
  838. package/js/src/static_dependencies/noble-hashes/index.js +6 -0
  839. package/js/src/static_dependencies/noble-hashes/md5.js +6 -0
  840. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +6 -0
  841. package/js/src/static_dependencies/noble-hashes/ripemd160.js +6 -0
  842. package/js/src/static_dependencies/noble-hashes/scrypt.js +6 -0
  843. package/js/src/static_dependencies/noble-hashes/sha1.js +6 -0
  844. package/js/src/static_dependencies/noble-hashes/sha256.js +6 -0
  845. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +6 -0
  846. package/js/src/static_dependencies/noble-hashes/sha3.js +6 -0
  847. package/js/src/static_dependencies/noble-hashes/sha512.js +6 -0
  848. package/js/src/static_dependencies/noble-hashes/utils.js +6 -0
  849. package/js/src/static_dependencies/node-fetch/body.js +6 -0
  850. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +6 -0
  851. package/js/src/static_dependencies/node-fetch/errors/base.js +6 -0
  852. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +6 -0
  853. package/js/src/static_dependencies/node-fetch/headers.js +6 -0
  854. package/js/src/static_dependencies/node-fetch/index.js +6 -0
  855. package/js/src/static_dependencies/node-fetch/request.js +6 -0
  856. package/js/src/static_dependencies/node-fetch/response.js +6 -0
  857. package/js/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  858. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  859. package/js/src/static_dependencies/node-fetch/utils/is.js +6 -0
  860. package/js/src/static_dependencies/node-fetch/utils/referrer.js +6 -0
  861. package/js/src/static_dependencies/proxies/agent-base/helpers.js +6 -0
  862. package/js/src/static_dependencies/proxies/agent-base/index.js +6 -0
  863. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +6 -0
  864. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +6 -0
  865. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  866. package/js/src/static_dependencies/qs/formats.cjs +6 -0
  867. package/js/src/static_dependencies/qs/index.cjs +6 -0
  868. package/js/src/static_dependencies/qs/parse.cjs +6 -0
  869. package/js/src/static_dependencies/qs/stringify.cjs +6 -0
  870. package/js/src/static_dependencies/qs/utils.cjs +6 -0
  871. package/js/src/static_dependencies/scure-base/index.js +6 -0
  872. package/js/src/static_dependencies/scure-starknet/index.js +6 -0
  873. package/js/src/static_dependencies/starknet/constants.js +6 -0
  874. package/js/src/static_dependencies/starknet/index.js +6 -0
  875. package/js/src/static_dependencies/starknet/types/cairoEnum.js +6 -0
  876. package/js/src/static_dependencies/starknet/types/calldata.js +6 -0
  877. package/js/src/static_dependencies/starknet/types/index.js +6 -0
  878. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  879. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  880. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +6 -0
  881. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +6 -0
  882. package/js/src/static_dependencies/starknet/types/lib/index.js +6 -0
  883. package/js/src/static_dependencies/starknet/types/typedData.js +6 -0
  884. package/js/src/static_dependencies/starknet/utils/address.js +6 -0
  885. package/js/src/static_dependencies/starknet/utils/assert.js +6 -0
  886. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +6 -0
  887. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +6 -0
  888. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +6 -0
  889. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +6 -0
  890. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +6 -0
  891. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  892. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  893. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  894. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +6 -0
  895. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +6 -0
  896. package/js/src/static_dependencies/starknet/utils/calldata/index.js +6 -0
  897. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +6 -0
  898. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +6 -0
  899. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +6 -0
  900. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  901. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +6 -0
  902. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +6 -0
  903. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +6 -0
  904. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +6 -0
  905. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +6 -0
  906. package/js/src/static_dependencies/starknet/utils/encode.js +6 -0
  907. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +6 -0
  908. package/js/src/static_dependencies/starknet/utils/hash/index.js +6 -0
  909. package/js/src/static_dependencies/starknet/utils/merkle.js +6 -0
  910. package/js/src/static_dependencies/starknet/utils/num.js +6 -0
  911. package/js/src/static_dependencies/starknet/utils/selector.js +6 -0
  912. package/js/src/static_dependencies/starknet/utils/shortString.js +6 -0
  913. package/js/src/static_dependencies/starknet/utils/starknetId.js +6 -0
  914. package/js/src/static_dependencies/starknet/utils/typedData.js +6 -0
  915. package/js/src/static_dependencies/starknet/utils/uint256.js +6 -0
  916. package/js/src/static_dependencies/starknet/utils/url.js +6 -0
  917. package/js/src/static_dependencies/watchable/src/index.js +6 -0
  918. package/js/src/static_dependencies/watchable/src/types.js +6 -0
  919. package/js/src/static_dependencies/watchable/src/unpromise.js +6 -0
  920. package/js/src/timex.js +6 -0
  921. package/js/src/tokocrypto.js +6 -0
  922. package/js/src/tradeogre.js +6 -0
  923. package/js/src/upbit.js +6 -0
  924. package/js/src/vertex.js +6 -0
  925. package/js/src/wavesexchange.js +6 -0
  926. package/js/src/whitebit.d.ts +36 -1
  927. package/js/src/whitebit.js +107 -3
  928. package/js/src/woo.js +9 -1
  929. package/js/src/woofipro.js +7 -1
  930. package/js/src/xt.js +6 -0
  931. package/js/src/yobit.d.ts +1 -6
  932. package/js/src/yobit.js +7 -0
  933. package/js/src/zaif.js +6 -0
  934. package/js/src/zonda.js +6 -0
  935. package/package.json +1 -1
@@ -1,3 +1,9 @@
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
+
1
7
  // ---------------------------------------------------------------------------
2
8
  import Exchange from './abstract/poloniex.js';
3
9
  import { ArgumentsRequired, ExchangeError, ExchangeNotAvailable, NotSupported, RequestTimeout, AuthenticationError, PermissionDenied, InsufficientFunds, OrderNotFound, InvalidOrder, AccountSuspended, OnMaintenance, BadSymbol, BadRequest } from './base/errors.js';
@@ -23,21 +29,25 @@ export default class poloniex extends Exchange {
23
29
  'CORS': undefined,
24
30
  'spot': true,
25
31
  'margin': undefined,
26
- 'swap': false,
27
- 'future': false,
32
+ 'swap': true,
33
+ 'future': true,
28
34
  'option': false,
35
+ 'addMargin': true,
29
36
  'cancelAllOrders': true,
30
37
  'cancelOrder': true,
38
+ 'cancelOrders': undefined,
31
39
  'createDepositAddress': true,
32
40
  'createMarketBuyOrderWithCost': true,
33
41
  'createMarketOrderWithCost': false,
34
42
  'createMarketSellOrderWithCost': false,
35
43
  'createOrder': true,
44
+ 'createOrders': undefined,
36
45
  'createStopOrder': true,
37
46
  'createTriggerOrder': true,
38
47
  'editOrder': true,
39
48
  'fetchBalance': true,
40
49
  'fetchClosedOrder': false,
50
+ 'fetchClosedOrders': true,
41
51
  'fetchCurrencies': true,
42
52
  'fetchDepositAddress': true,
43
53
  'fetchDepositAddresses': false,
@@ -51,7 +61,10 @@ export default class poloniex extends Exchange {
51
61
  'fetchFundingIntervals': false,
52
62
  'fetchFundingRate': false,
53
63
  'fetchFundingRateHistory': false,
54
- 'fetchFundingRates': false,
64
+ 'fetchFundingRates': undefined,
65
+ 'fetchLedger': undefined,
66
+ 'fetchLeverage': true,
67
+ 'fetchLiquidations': undefined,
55
68
  'fetchMarginMode': false,
56
69
  'fetchMarkets': true,
57
70
  'fetchMyTrades': true,
@@ -64,7 +77,8 @@ export default class poloniex extends Exchange {
64
77
  'fetchOrderBooks': false,
65
78
  'fetchOrderTrades': true,
66
79
  'fetchPosition': false,
67
- 'fetchPositionMode': false,
80
+ 'fetchPositionMode': true,
81
+ 'fetchPositions': true,
68
82
  'fetchTicker': true,
69
83
  'fetchTickers': true,
70
84
  'fetchTime': true,
@@ -75,7 +89,10 @@ export default class poloniex extends Exchange {
75
89
  'fetchTransfer': false,
76
90
  'fetchTransfers': false,
77
91
  'fetchWithdrawals': true,
92
+ 'reduceMargin': true,
78
93
  'sandbox': true,
94
+ 'setLeverage': true,
95
+ 'setPositionMode': true,
79
96
  'transfer': true,
80
97
  'withdraw': true,
81
98
  },
@@ -93,15 +110,16 @@ export default class poloniex extends Exchange {
93
110
  '1d': 'DAY_1',
94
111
  '3d': 'DAY_3',
95
112
  '1w': 'WEEK_1',
96
- '1M': 'MONTH_1',
113
+ '1M': 'MONTH_1', // not in swap
97
114
  },
98
115
  'urls': {
99
116
  'logo': 'https://user-images.githubusercontent.com/1294454/27766817-e9456312-5ee6-11e7-9b3c-b628ca5626a5.jpg',
100
117
  'api': {
101
- 'rest': 'https://api.poloniex.com',
118
+ 'spot': 'https://api.poloniex.com',
119
+ 'swap': 'https://api.poloniex.com',
102
120
  },
103
121
  'test': {
104
- 'rest': 'https://sand-spot-api-gateway.poloniex.com',
122
+ 'spot': 'https://sand-spot-api-gateway.poloniex.com',
105
123
  },
106
124
  'www': 'https://www.poloniex.com',
107
125
  'doc': 'https://api-docs.poloniex.com/spot/',
@@ -188,6 +206,55 @@ export default class poloniex extends Exchange {
188
206
  'smartorders/{id}': 20,
189
207
  },
190
208
  },
209
+ 'swapPublic': {
210
+ 'get': {
211
+ // 300 calls / second
212
+ 'v3/market/allInstruments': 2 / 3,
213
+ 'v3/market/instruments': 2 / 3,
214
+ 'v3/market/orderBook': 2 / 3,
215
+ 'v3/market/candles': 10,
216
+ 'v3/market/indexPriceCandlesticks': 10,
217
+ 'v3/market/premiumIndexCandlesticks': 10,
218
+ 'v3/market/markPriceCandlesticks': 10,
219
+ 'v3/market/trades': 2 / 3,
220
+ 'v3/market/liquidationOrder': 2 / 3,
221
+ 'v3/market/tickers': 2 / 3,
222
+ 'v3/market/markPrice': 2 / 3,
223
+ 'v3/market/indexPrice': 2 / 3,
224
+ 'v3/market/indexPriceComponents': 2 / 3,
225
+ 'v3/market/fundingRate': 2 / 3,
226
+ 'v3/market/openInterest': 2 / 3,
227
+ 'v3/market/insurance': 2 / 3,
228
+ 'v3/market/riskLimit': 2 / 3,
229
+ },
230
+ },
231
+ 'swapPrivate': {
232
+ 'get': {
233
+ 'v3/account/balance': 4,
234
+ 'v3/account/bills': 20,
235
+ 'v3/trade/order/opens': 20,
236
+ 'v3/trade/order/trades': 20,
237
+ 'v3/trade/order/history': 20,
238
+ 'v3/trade/position/opens': 20,
239
+ 'v3/trade/position/history': 20,
240
+ 'v3/position/leverages': 20,
241
+ 'v3/position/mode': 20,
242
+ },
243
+ 'post': {
244
+ 'v3/trade/order': 4,
245
+ 'v3/trade/orders': 40,
246
+ 'v3/trade/position': 20,
247
+ 'v3/trade/positionAll': 100,
248
+ 'v3/position/leverage': 20,
249
+ 'v3/position/mode': 20,
250
+ 'v3/trade/position/margin': 20,
251
+ },
252
+ 'delete': {
253
+ 'v3/trade/order': 2,
254
+ 'v3/trade/batchOrders': 20,
255
+ 'v3/trade/allOrders': 20,
256
+ },
257
+ },
191
258
  },
192
259
  'fees': {
193
260
  'trading': {
@@ -236,6 +303,7 @@ export default class poloniex extends Exchange {
236
303
  'UST': 'USTC',
237
304
  },
238
305
  'options': {
306
+ 'defaultType': 'spot',
239
307
  'createMarketBuyOrderRequiresPrice': true,
240
308
  'networks': {
241
309
  'BEP20': 'BSC',
@@ -282,7 +350,7 @@ export default class poloniex extends Exchange {
282
350
  'timeInForce': {
283
351
  'IOC': true,
284
352
  'FOK': true,
285
- 'PO': false,
353
+ 'PO': true,
286
354
  'GTD': false,
287
355
  },
288
356
  'hedged': false,
@@ -293,7 +361,9 @@ export default class poloniex extends Exchange {
293
361
  'trailing': false,
294
362
  'iceberg': false,
295
363
  },
296
- 'createOrders': undefined,
364
+ 'createOrders': {
365
+ 'max': 20,
366
+ },
297
367
  'fetchMyTrades': {
298
368
  'marginMode': false,
299
369
  'limit': 1000,
@@ -323,13 +393,51 @@ export default class poloniex extends Exchange {
323
393
  'spot': {
324
394
  'extends': 'default',
325
395
  },
396
+ 'forContracts': {
397
+ 'extends': 'default',
398
+ 'createOrder': {
399
+ 'marginMode': true,
400
+ 'triggerPrice': false,
401
+ 'hedged': true,
402
+ 'stpMode': true,
403
+ 'marketBuyByCost': false,
404
+ },
405
+ 'createOrders': {
406
+ 'max': 10,
407
+ },
408
+ 'fetchOpenOrders': {
409
+ 'limit': 100,
410
+ },
411
+ 'fetchClosedOrders': {
412
+ 'marginMode': false,
413
+ 'limit': 100,
414
+ 'daysBack': undefined,
415
+ 'daysBackCanceled': 1 / 6,
416
+ 'untilDays': undefined,
417
+ 'trigger': false,
418
+ 'trailing': false,
419
+ 'symbolRequired': false,
420
+ },
421
+ 'fetchMyTrades': {
422
+ 'limit': 100,
423
+ 'untilDays': 90,
424
+ },
425
+ },
326
426
  'swap': {
327
- 'linear': undefined,
328
- 'inverse': undefined,
427
+ 'linear': {
428
+ 'extends': 'forContracts',
429
+ },
430
+ 'inverse': {
431
+ 'extends': 'forContracts',
432
+ },
329
433
  },
330
434
  'future': {
331
- 'linear': undefined,
332
- 'inverse': undefined,
435
+ 'linear': {
436
+ 'extends': 'forContracts',
437
+ },
438
+ 'inverse': {
439
+ 'extends': 'forContracts',
440
+ },
333
441
  },
334
442
  },
335
443
  'precisionMode': TICK_SIZE,
@@ -448,6 +556,8 @@ export default class poloniex extends Exchange {
448
556
  });
449
557
  }
450
558
  parseOHLCV(ohlcv, market = undefined) {
559
+ //
560
+ // spot:
451
561
  //
452
562
  // [
453
563
  // [
@@ -468,6 +578,32 @@ export default class poloniex extends Exchange {
468
578
  // ]
469
579
  // ]
470
580
  //
581
+ // contract:
582
+ //
583
+ // [
584
+ // "84207.02",
585
+ // "84320.85",
586
+ // "84207.02",
587
+ // "84253.83",
588
+ // "3707.5395",
589
+ // "44",
590
+ // "14",
591
+ // "1740770040000",
592
+ // "1740770099999",
593
+ // ],
594
+ //
595
+ const ohlcvLength = ohlcv.length;
596
+ const isContract = ohlcvLength === 9;
597
+ if (isContract) {
598
+ return [
599
+ this.safeInteger(ohlcv, 7),
600
+ this.safeNumber(ohlcv, 2),
601
+ this.safeNumber(ohlcv, 1),
602
+ this.safeNumber(ohlcv, 0),
603
+ this.safeNumber(ohlcv, 3),
604
+ this.safeNumber(ohlcv, 5),
605
+ ];
606
+ }
471
607
  return [
472
608
  this.safeInteger(ohlcv, 12),
473
609
  this.safeNumber(ohlcv, 2),
@@ -482,6 +618,7 @@ export default class poloniex extends Exchange {
482
618
  * @name poloniex#fetchOHLCV
483
619
  * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
484
620
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#candles
621
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-kline-data
485
622
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
486
623
  * @param {string} timeframe the length of time each candle represents
487
624
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
@@ -503,14 +640,41 @@ export default class poloniex extends Exchange {
503
640
  'symbol': market['id'],
504
641
  'interval': this.safeString(this.timeframes, timeframe, timeframe),
505
642
  };
643
+ const keyStart = market['spot'] ? 'startTime' : 'sTime';
644
+ const keyEnd = market['spot'] ? 'endTime' : 'eTime';
506
645
  if (since !== undefined) {
507
- request['startTime'] = since;
646
+ request[keyStart] = since;
508
647
  }
509
648
  if (limit !== undefined) {
510
649
  // limit should in between 100 and 500
511
650
  request['limit'] = limit;
512
651
  }
513
- [request, params] = this.handleUntilOption('endTime', request, params);
652
+ [request, params] = this.handleUntilOption(keyEnd, request, params);
653
+ if (market['contract']) {
654
+ if (this.inArray(timeframe, ['10m', '1M'])) {
655
+ throw new NotSupported(this.id + ' ' + timeframe + ' ' + market['type'] + ' fetchOHLCV is not supported');
656
+ }
657
+ const responseRaw = await this.swapPublicGetV3MarketCandles(this.extend(request, params));
658
+ //
659
+ // {
660
+ // code: "200",
661
+ // msg: "Success",
662
+ // data: [
663
+ // [
664
+ // "84207.02",
665
+ // "84320.85",
666
+ // "84207.02",
667
+ // "84253.83",
668
+ // "3707.5395",
669
+ // "44",
670
+ // "14",
671
+ // "1740770040000",
672
+ // "1740770099999",
673
+ // ],
674
+ //
675
+ const data = this.safeList(responseRaw, 'data');
676
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
677
+ }
514
678
  const response = await this.publicGetMarketsSymbolCandles(this.extend(request, params));
515
679
  //
516
680
  // [
@@ -547,10 +711,16 @@ export default class poloniex extends Exchange {
547
711
  * @name poloniex#fetchMarkets
548
712
  * @description retrieves data on all markets for poloniex
549
713
  * @see https://api-docs.poloniex.com/spot/api/public/reference-data#symbol-information
714
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-all-product-info
550
715
  * @param {object} [params] extra parameters specific to the exchange API endpoint
551
716
  * @returns {object[]} an array of objects representing market data
552
717
  */
553
718
  async fetchMarkets(params = {}) {
719
+ const promises = [this.fetchSpotMarkets(params), this.fetchSwapMarkets(params)];
720
+ const results = await Promise.all(promises);
721
+ return this.arrayConcat(results[0], results[1]);
722
+ }
723
+ async fetchSpotMarkets(params = {}) {
554
724
  const markets = await this.publicGetMarkets(params);
555
725
  //
556
726
  // [
@@ -577,7 +747,59 @@ export default class poloniex extends Exchange {
577
747
  //
578
748
  return this.parseMarkets(markets);
579
749
  }
750
+ async fetchSwapMarkets(params = {}) {
751
+ // do similar as spot per https://api-docs.poloniex.com/v3/futures/api/market/get-product-info
752
+ const response = await this.swapPublicGetV3MarketAllInstruments(params);
753
+ //
754
+ // {
755
+ // "code": "200",
756
+ // "msg": "Success",
757
+ // "data": [
758
+ // {
759
+ // "symbol": "BNB_USDT_PERP",
760
+ // "bAsset": ".PBNBUSDT",
761
+ // "bCcy": "BNB",
762
+ // "qCcy": "USDT",
763
+ // "visibleStartTime": "1620390600000",
764
+ // "tradableStartTime": "1620390600000",
765
+ // "sCcy": "USDT",
766
+ // "tSz": "0.001",
767
+ // "pxScale": "0.001,0.01,0.1,1,10",
768
+ // "lotSz": "1",
769
+ // "minSz": "1",
770
+ // "ctVal": "0.1",
771
+ // "status": "OPEN",
772
+ // "oDate": "1620287590000",
773
+ // "maxPx": "1000000",
774
+ // "minPx": "0.001",
775
+ // "maxQty": "1000000",
776
+ // "minQty": "1",
777
+ // "maxLever": "50",
778
+ // "lever": "10",
779
+ // "ctType": "LINEAR",
780
+ // "alias": "",
781
+ // "iM": "0.02",
782
+ // "mM": "0.0115",
783
+ // "mR": "2000",
784
+ // "buyLmt": "",
785
+ // "sellLmt": "",
786
+ // "ordPxRange": "0.05",
787
+ // "marketMaxQty": "2800",
788
+ // "limitMaxQty": "1000000"
789
+ // },
790
+ //
791
+ const markets = this.safeList(response, 'data');
792
+ return this.parseMarkets(markets);
793
+ }
580
794
  parseMarket(market) {
795
+ if ('ctType' in market) {
796
+ return this.parseSwapMarket(market);
797
+ }
798
+ else {
799
+ return this.parseSpotMarket(market);
800
+ }
801
+ }
802
+ parseSpotMarket(market) {
581
803
  const id = this.safeString(market, 'symbol');
582
804
  const baseId = this.safeString(market, 'baseCurrencyName');
583
805
  const quoteId = this.safeString(market, 'quoteCurrencyName');
@@ -633,6 +855,116 @@ export default class poloniex extends Exchange {
633
855
  'info': market,
634
856
  };
635
857
  }
858
+ parseSwapMarket(market) {
859
+ //
860
+ // {
861
+ // "symbol": "BNB_USDT_PERP",
862
+ // "bAsset": ".PBNBUSDT",
863
+ // "bCcy": "BNB",
864
+ // "qCcy": "USDT",
865
+ // "visibleStartTime": "1620390600000",
866
+ // "tradableStartTime": "1620390600000",
867
+ // "sCcy": "USDT",
868
+ // "tSz": "0.001",
869
+ // "pxScale": "0.001,0.01,0.1,1,10",
870
+ // "lotSz": "1",
871
+ // "minSz": "1",
872
+ // "ctVal": "0.1",
873
+ // "status": "OPEN",
874
+ // "oDate": "1620287590000",
875
+ // "maxPx": "1000000",
876
+ // "minPx": "0.001",
877
+ // "maxQty": "1000000",
878
+ // "minQty": "1",
879
+ // "maxLever": "50",
880
+ // "lever": "10",
881
+ // "ctType": "LINEAR",
882
+ // "alias": "",
883
+ // "iM": "0.02",
884
+ // "mM": "0.0115",
885
+ // "mR": "2000",
886
+ // "buyLmt": "",
887
+ // "sellLmt": "",
888
+ // "ordPxRange": "0.05",
889
+ // "marketMaxQty": "2800",
890
+ // "limitMaxQty": "1000000"
891
+ // },
892
+ //
893
+ const id = this.safeString(market, 'symbol');
894
+ const baseId = this.safeString(market, 'bCcy');
895
+ const quoteId = this.safeString(market, 'qCcy');
896
+ const settleId = this.safeString(market, 'sCcy');
897
+ const base = this.safeCurrencyCode(baseId);
898
+ const quote = this.safeCurrencyCode(quoteId);
899
+ const settle = this.safeCurrencyCode(settleId);
900
+ const status = this.safeString(market, 'status');
901
+ const active = status === 'OPEN';
902
+ const linear = market['ctType'] === 'LINEAR';
903
+ let symbol = base + '/' + quote;
904
+ if (linear) {
905
+ symbol += ':' + settle;
906
+ }
907
+ else {
908
+ // actually, exchange does not have any inverse future now
909
+ symbol += ':' + base;
910
+ }
911
+ const alias = this.safeString(market, 'alias');
912
+ let type = 'swap';
913
+ if (alias !== undefined) {
914
+ type = 'future';
915
+ }
916
+ return {
917
+ 'id': id,
918
+ 'symbol': symbol,
919
+ 'base': base,
920
+ 'quote': quote,
921
+ 'settle': settle,
922
+ 'baseId': baseId,
923
+ 'quoteId': quoteId,
924
+ 'settleId': settleId,
925
+ 'type': (type === 'future') ? 'future' : 'swap',
926
+ 'spot': false,
927
+ 'margin': false,
928
+ 'swap': type === 'swap',
929
+ 'future': type === 'future',
930
+ 'option': false,
931
+ 'active': active,
932
+ 'contract': true,
933
+ 'linear': linear,
934
+ 'inverse': !linear,
935
+ 'contractSize': this.safeNumber(market, 'ctVal'),
936
+ 'expiry': undefined,
937
+ 'expiryDatetime': undefined,
938
+ 'strike': undefined,
939
+ 'optionType': undefined,
940
+ 'taker': this.safeNumber(market, 'tFee'),
941
+ 'maker': this.safeNumber(market, 'mFee'),
942
+ 'precision': {
943
+ 'amount': this.safeNumber(market, 'lotSz'),
944
+ 'price': this.safeNumber(market, 'tSz'),
945
+ },
946
+ 'limits': {
947
+ 'amount': {
948
+ 'min': this.safeNumber(market, 'minSz'),
949
+ 'max': this.safeNumber(market, 'limitMaxQty'),
950
+ },
951
+ 'price': {
952
+ 'min': this.safeNumber(market, 'minPx'),
953
+ 'max': this.safeNumber(market, 'maxPx'),
954
+ },
955
+ 'cost': {
956
+ 'min': undefined,
957
+ 'max': undefined,
958
+ },
959
+ 'leverage': {
960
+ 'max': this.safeNumber(market, 'maxLever'),
961
+ 'min': undefined,
962
+ },
963
+ },
964
+ 'created': this.safeInteger(market, 'oDate'),
965
+ 'info': market,
966
+ };
967
+ }
636
968
  /**
637
969
  * @method
638
970
  * @name poloniex#fetchTime
@@ -646,6 +978,8 @@ export default class poloniex extends Exchange {
646
978
  return this.safeInteger(response, 'serverTime');
647
979
  }
648
980
  parseTicker(ticker, market = undefined) {
981
+ //
982
+ // spot:
649
983
  //
650
984
  // {
651
985
  // "symbol" : "BTC_USDT",
@@ -668,36 +1002,56 @@ export default class poloniex extends Exchange {
668
1002
  // "markPrice" : "26444.11"
669
1003
  // }
670
1004
  //
671
- const timestamp = this.safeInteger(ticker, 'ts');
672
- const marketId = this.safeString(ticker, 'symbol');
1005
+ // swap:
1006
+ //
1007
+ // {
1008
+ // "s": "XRP_USDT_PERP",
1009
+ // "o": "2.0503",
1010
+ // "l": "2.0066",
1011
+ // "h": "2.216",
1012
+ // "c": "2.1798",
1013
+ // "qty": "21090",
1014
+ // "amt": "451339.65",
1015
+ // "tC": "3267",
1016
+ // "sT": "1740736380000",
1017
+ // "cT": "1740822777559",
1018
+ // "dN": "XRP/USDT/PERP",
1019
+ // "dC": "0.0632",
1020
+ // "bPx": "2.175",
1021
+ // "bSz": "3",
1022
+ // "aPx": "2.1831",
1023
+ // "aSz": "111",
1024
+ // "mPx": "2.1798",
1025
+ // "iPx": "2.1834"
1026
+ // },
1027
+ //
1028
+ const timestamp = this.safeInteger2(ticker, 'ts', 'cT');
1029
+ const marketId = this.safeString2(ticker, 'symbol', 's');
673
1030
  market = this.safeMarket(marketId);
674
- const close = this.safeString(ticker, 'close');
675
- const relativeChange = this.safeString(ticker, 'dailyChange');
1031
+ const relativeChange = this.safeString2(ticker, 'dailyChange', 'dc');
676
1032
  const percentage = Precise.stringMul(relativeChange, '100');
677
- const bidVolume = this.safeString(ticker, 'bidQuantity');
678
- const askVolume = this.safeString(ticker, 'askQuantity');
679
1033
  return this.safeTicker({
680
1034
  'id': marketId,
681
1035
  'symbol': market['symbol'],
682
1036
  'timestamp': timestamp,
683
1037
  'datetime': this.iso8601(timestamp),
684
- 'high': this.safeString(ticker, 'high'),
685
- 'low': this.safeString(ticker, 'low'),
686
- 'bid': this.safeString(ticker, 'bid'),
687
- 'bidVolume': bidVolume,
688
- 'ask': this.safeString(ticker, 'ask'),
689
- 'askVolume': askVolume,
1038
+ 'high': this.safeString2(ticker, 'high', 'h'),
1039
+ 'low': this.safeString2(ticker, 'low', 'l'),
1040
+ 'bid': this.safeString2(ticker, 'bid', 'bPx'),
1041
+ 'bidVolume': this.safeString2(ticker, 'bidQuantity', 'bSz'),
1042
+ 'ask': this.safeString2(ticker, 'ask', 'aPx'),
1043
+ 'askVolume': this.safeString2(ticker, 'askQuantity', 'aSz'),
690
1044
  'vwap': undefined,
691
- 'open': this.safeString(ticker, 'open'),
692
- 'close': close,
693
- 'last': close,
1045
+ 'open': this.safeString2(ticker, 'open', 'o'),
1046
+ 'close': this.safeString2(ticker, 'close', 'c'),
694
1047
  'previousClose': undefined,
695
1048
  'change': undefined,
696
1049
  'percentage': percentage,
697
1050
  'average': undefined,
698
- 'baseVolume': this.safeString(ticker, 'quantity'),
699
- 'quoteVolume': this.safeString(ticker, 'amount'),
700
- 'markPrice': this.safeString(ticker, 'markPrice'),
1051
+ 'baseVolume': this.safeString2(ticker, 'quantity', 'qty'),
1052
+ 'quoteVolume': this.safeString2(ticker, 'amount', 'amt'),
1053
+ 'markPrice': this.safeString2(ticker, 'markPrice', 'mPx'),
1054
+ 'indexPrice': this.safeString(ticker, 'iPx'),
701
1055
  'info': ticker,
702
1056
  }, market);
703
1057
  }
@@ -706,13 +1060,58 @@ export default class poloniex extends Exchange {
706
1060
  * @name poloniex#fetchTickers
707
1061
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
708
1062
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
1063
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
709
1064
  * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
710
1065
  * @param {object} [params] extra parameters specific to the exchange API endpoint
711
1066
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
712
1067
  */
713
1068
  async fetchTickers(symbols = undefined, params = {}) {
714
1069
  await this.loadMarkets();
715
- symbols = this.marketSymbols(symbols);
1070
+ let market = undefined;
1071
+ const request = {};
1072
+ if (symbols !== undefined) {
1073
+ symbols = this.marketSymbols(symbols, undefined, true, true, false);
1074
+ const symbolsLength = symbols.length;
1075
+ if (symbolsLength > 0) {
1076
+ market = this.market(symbols[0]);
1077
+ if (symbolsLength === 1) {
1078
+ request['symbol'] = market['id'];
1079
+ }
1080
+ }
1081
+ }
1082
+ let marketType = undefined;
1083
+ [marketType, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
1084
+ if (marketType === 'swap') {
1085
+ const responseRaw = await this.swapPublicGetV3MarketTickers(this.extend(request, params));
1086
+ //
1087
+ // {
1088
+ // "code": "200",
1089
+ // "msg": "Success",
1090
+ // "data": [
1091
+ // {
1092
+ // "s": "XRP_USDT_PERP",
1093
+ // "o": "2.0503",
1094
+ // "l": "2.0066",
1095
+ // "h": "2.216",
1096
+ // "c": "2.1798",
1097
+ // "qty": "21090",
1098
+ // "amt": "451339.65",
1099
+ // "tC": "3267",
1100
+ // "sT": "1740736380000",
1101
+ // "cT": "1740822777559",
1102
+ // "dN": "XRP/USDT/PERP",
1103
+ // "dC": "0.0632",
1104
+ // "bPx": "2.175",
1105
+ // "bSz": "3",
1106
+ // "aPx": "2.1831",
1107
+ // "aSz": "111",
1108
+ // "mPx": "2.1798",
1109
+ // "iPx": "2.1834"
1110
+ // },
1111
+ //
1112
+ const data = this.safeList(responseRaw, 'data');
1113
+ return this.parseTickers(data, symbols);
1114
+ }
716
1115
  const response = await this.publicGetMarketsTicker24h(params);
717
1116
  //
718
1117
  // [
@@ -883,6 +1282,7 @@ export default class poloniex extends Exchange {
883
1282
  * @name poloniex#fetchTicker
884
1283
  * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
885
1284
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
1285
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
886
1286
  * @param {string} symbol unified symbol of the market to fetch the ticker for
887
1287
  * @param {object} [params] extra parameters specific to the exchange API endpoint
888
1288
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -893,6 +1293,10 @@ export default class poloniex extends Exchange {
893
1293
  const request = {
894
1294
  'symbol': market['id'],
895
1295
  };
1296
+ if (market['contract']) {
1297
+ const tickers = await this.fetchTickers([market['symbol']], params);
1298
+ return this.safeDict(tickers, symbol);
1299
+ }
896
1300
  const response = await this.publicGetMarketsSymbolTicker24h(this.extend(request, params));
897
1301
  //
898
1302
  // {
@@ -922,6 +1326,8 @@ export default class poloniex extends Exchange {
922
1326
  //
923
1327
  // fetchTrades
924
1328
  //
1329
+ // spot:
1330
+ //
925
1331
  // {
926
1332
  // "id" : "60014521",
927
1333
  // "price" : "23162.94",
@@ -932,8 +1338,21 @@ export default class poloniex extends Exchange {
932
1338
  // "createTime" : 1659684602036
933
1339
  // }
934
1340
  //
1341
+ // swap:
1342
+ //
1343
+ // {
1344
+ // "id": "105807376",
1345
+ // "side": "buy",
1346
+ // "px": "84410.57",
1347
+ // "qty": "1",
1348
+ // "amt": "84.41057",
1349
+ // "cT": "1740777563557",
1350
+ // }
1351
+ //
935
1352
  // fetchMyTrades
936
1353
  //
1354
+ // spot:
1355
+ //
937
1356
  // {
938
1357
  // "id": "32164924331503616",
939
1358
  // "symbol": "LINK_USDT",
@@ -952,6 +1371,34 @@ export default class poloniex extends Exchange {
952
1371
  // "clientOrderId": "myOwnId-321"
953
1372
  // }
954
1373
  //
1374
+ // swap:
1375
+ //
1376
+ // {
1377
+ // "symbol": "BTC_USDT_PERP",
1378
+ // "trdId": "105813553",
1379
+ // "side": "SELL",
1380
+ // "type": "TRADE",
1381
+ // "mgnMode": "CROSS",
1382
+ // "ordType": "MARKET",
1383
+ // "clOrdId": "polo418912106147315112",
1384
+ // "role": "TAKER",
1385
+ // "px": "84704.9",
1386
+ // "qty": "1",
1387
+ // "cTime": "1740842829430",
1388
+ // "uTime": "1740842829450",
1389
+ // "feeCcy": "USDT",
1390
+ // "feeAmt": "0.04235245",
1391
+ // "deductCcy": "",
1392
+ // "deductAmt": "0",
1393
+ // "feeRate": "0.0005",
1394
+ // "id": "418912106342654592",
1395
+ // "posSide": "BOTH",
1396
+ // "ordId": "418912106147315112",
1397
+ // "qCcy": "USDT",
1398
+ // "value": "84.7049",
1399
+ // "actType": "TRADING"
1400
+ // },
1401
+ //
955
1402
  // fetchOrderTrades (taker trades)
956
1403
  //
957
1404
  // {
@@ -972,20 +1419,19 @@ export default class poloniex extends Exchange {
972
1419
  // "clientOrderId": ""
973
1420
  // }
974
1421
  //
975
- //
976
- const id = this.safeString2(trade, 'id', 'tradeID');
977
- const orderId = this.safeString(trade, 'orderId');
978
- const timestamp = this.safeInteger2(trade, 'ts', 'createTime');
1422
+ const id = this.safeStringN(trade, ['id', 'tradeID', 'trdId']);
1423
+ const orderId = this.safeString2(trade, 'orderId', 'ordId');
1424
+ const timestamp = this.safeIntegerN(trade, ['ts', 'createTime', 'cT', 'cTime']);
979
1425
  const marketId = this.safeString(trade, 'symbol');
980
1426
  market = this.safeMarket(marketId, market, '_');
981
1427
  const symbol = market['symbol'];
982
1428
  const side = this.safeStringLower2(trade, 'side', 'takerSide');
983
1429
  let fee = undefined;
984
- const priceString = this.safeString(trade, 'price');
985
- const amountString = this.safeString(trade, 'quantity');
986
- const costString = this.safeString(trade, 'amount');
987
- const feeCurrencyId = this.safeString(trade, 'feeCurrency');
988
- const feeCostString = this.safeString(trade, 'feeAmount');
1430
+ const priceString = this.safeString2(trade, 'price', 'px');
1431
+ const amountString = this.safeString2(trade, 'quantity', 'qty');
1432
+ const costString = this.safeString2(trade, 'amount', 'amt');
1433
+ const feeCurrencyId = this.safeString2(trade, 'feeCurrency', 'feeCcy');
1434
+ const feeCostString = this.safeString2(trade, 'feeAmount', 'feeAmt');
989
1435
  if (feeCostString !== undefined) {
990
1436
  const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
991
1437
  fee = {
@@ -1000,9 +1446,9 @@ export default class poloniex extends Exchange {
1000
1446
  'datetime': this.iso8601(timestamp),
1001
1447
  'symbol': symbol,
1002
1448
  'order': orderId,
1003
- 'type': this.safeStringLower(trade, 'type'),
1449
+ 'type': this.safeStringLower2(trade, 'ordType', 'type'),
1004
1450
  'side': side,
1005
- 'takerOrMaker': this.safeStringLower(trade, 'matchRole'),
1451
+ 'takerOrMaker': this.safeStringLower2(trade, 'matchRole', 'role'),
1006
1452
  'price': priceString,
1007
1453
  'amount': amountString,
1008
1454
  'cost': costString,
@@ -1014,6 +1460,7 @@ export default class poloniex extends Exchange {
1014
1460
  * @name poloniex#fetchTrades
1015
1461
  * @description get the list of most recent trades for a particular symbol
1016
1462
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#trades
1463
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-execution-info
1017
1464
  * @param {string} symbol unified symbol of the market to fetch trades for
1018
1465
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
1019
1466
  * @param {int} [limit] the maximum amount of trades to fetch
@@ -1027,7 +1474,26 @@ export default class poloniex extends Exchange {
1027
1474
  'symbol': market['id'],
1028
1475
  };
1029
1476
  if (limit !== undefined) {
1030
- request['limit'] = limit;
1477
+ request['limit'] = limit; // max 1000, for spot & swap
1478
+ }
1479
+ if (market['contract']) {
1480
+ const response = await this.swapPublicGetV3MarketTrades(this.extend(request, params));
1481
+ //
1482
+ // {
1483
+ // code: "200",
1484
+ // msg: "Success",
1485
+ // data: [
1486
+ // {
1487
+ // id: "105807320", // descending order
1488
+ // side: "sell",
1489
+ // px: "84383.93",
1490
+ // qty: "1",
1491
+ // amt: "84.38393",
1492
+ // cT: "1740777074704",
1493
+ // },
1494
+ //
1495
+ const tradesList = this.safeList(response, 'data');
1496
+ return this.parseTrades(tradesList, market, since, limit);
1031
1497
  }
1032
1498
  const trades = await this.publicGetMarketsSymbolTrades(this.extend(request, params));
1033
1499
  //
@@ -1050,6 +1516,7 @@ export default class poloniex extends Exchange {
1050
1516
  * @name poloniex#fetchMyTrades
1051
1517
  * @description fetch all trades made by the user
1052
1518
  * @see https://api-docs.poloniex.com/spot/api/private/trade#trade-history
1519
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-execution-details
1053
1520
  * @param {string} symbol unified market symbol
1054
1521
  * @param {int} [since] the earliest time in ms to fetch trades for
1055
1522
  * @param {int} [limit] the maximum number of trades structures to retrieve
@@ -1069,17 +1536,61 @@ export default class poloniex extends Exchange {
1069
1536
  if (symbol !== undefined) {
1070
1537
  market = this.market(symbol);
1071
1538
  }
1539
+ let marketType = undefined;
1540
+ [marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
1541
+ const isContract = this.inArray(marketType, ['swap', 'future']);
1072
1542
  let request = {
1073
1543
  // 'from': 12345678, // A 'trade Id'. The query begins at ‘from'.
1074
1544
  // 'direction': 'PRE', // PRE, NEXT The direction before or after ‘from'.
1075
1545
  };
1546
+ const startKey = isContract ? 'sTime' : 'startTime';
1547
+ const endKey = isContract ? 'eTime' : 'endTime';
1076
1548
  if (since !== undefined) {
1077
- request['startTime'] = since;
1549
+ request[startKey] = since;
1078
1550
  }
1079
1551
  if (limit !== undefined) {
1080
1552
  request['limit'] = limit;
1081
1553
  }
1082
- [request, params] = this.handleUntilOption('endTime', request, params);
1554
+ if (isContract && symbol !== undefined) {
1555
+ request['symbol'] = market['id'];
1556
+ }
1557
+ [request, params] = this.handleUntilOption(endKey, request, params);
1558
+ if (isContract) {
1559
+ const raw = await this.swapPrivateGetV3TradeOrderTrades(this.extend(request, params));
1560
+ //
1561
+ // {
1562
+ // "code": "200",
1563
+ // "msg": "",
1564
+ // "data": [
1565
+ // {
1566
+ // "symbol": "BTC_USDT_PERP",
1567
+ // "trdId": "105813553",
1568
+ // "side": "SELL",
1569
+ // "type": "TRADE",
1570
+ // "mgnMode": "CROSS",
1571
+ // "ordType": "MARKET",
1572
+ // "clOrdId": "polo418912106147315112",
1573
+ // "role": "TAKER",
1574
+ // "px": "84704.9",
1575
+ // "qty": "1",
1576
+ // "cTime": "1740842829430",
1577
+ // "uTime": "1740842829450",
1578
+ // "feeCcy": "USDT",
1579
+ // "feeAmt": "0.04235245",
1580
+ // "deductCcy": "",
1581
+ // "deductAmt": "0",
1582
+ // "feeRate": "0.0005",
1583
+ // "id": "418912106342654592",
1584
+ // "posSide": "BOTH",
1585
+ // "ordId": "418912106147315112",
1586
+ // "qCcy": "USDT",
1587
+ // "value": "84.7049",
1588
+ // "actType": "TRADING"
1589
+ // },
1590
+ //
1591
+ const data = this.safeList(raw, 'data');
1592
+ return this.parseTrades(data, market, since, limit);
1593
+ }
1083
1594
  const response = await this.privateGetTrades(this.extend(request, params));
1084
1595
  //
1085
1596
  // [
@@ -1140,7 +1651,9 @@ export default class poloniex extends Exchange {
1140
1651
  // "updateTime" : 16xxxxxxxxx36
1141
1652
  // }
1142
1653
  //
1143
- // fetchOpenOrders
1654
+ // fetchOpenOrders (and fetchClosedOrders same for contracts)
1655
+ //
1656
+ // spot:
1144
1657
  //
1145
1658
  // {
1146
1659
  // "id": "24993088082542592",
@@ -1161,14 +1674,60 @@ export default class poloniex extends Exchange {
1161
1674
  // "updateTime": 1646925216548
1162
1675
  // }
1163
1676
  //
1677
+ // contract:
1678
+ //
1679
+ // {
1680
+ // "symbol": "BTC_USDT_PERP",
1681
+ // "side": "BUY",
1682
+ // "type": "LIMIT",
1683
+ // "ordId": "418890767248232148",
1684
+ // "clOrdId": "polo418890767248232148",
1685
+ // "mgnMode": "CROSS",
1686
+ // "px": "81130.13",
1687
+ // "reduceOnly": false,
1688
+ // "lever": "20",
1689
+ // "state": "NEW",
1690
+ // "source": "WEB",
1691
+ // "timeInForce": "GTC",
1692
+ // "tpTrgPx": "",
1693
+ // "tpPx": "",
1694
+ // "tpTrgPxType": "",
1695
+ // "slTrgPx": "",
1696
+ // "slPx": "",
1697
+ // "slTrgPxType": "",
1698
+ // "avgPx": "0",
1699
+ // "execQty": "0",
1700
+ // "execAmt": "0",
1701
+ // "feeCcy": "",
1702
+ // "feeAmt": "0",
1703
+ // "deductCcy": "0",
1704
+ // "deductAmt": "0",
1705
+ // "stpMode": "NONE", // todo: selfTradePrevention
1706
+ // "cTime": "1740837741523",
1707
+ // "uTime": "1740840846882",
1708
+ // "sz": "1",
1709
+ // "posSide": "BOTH",
1710
+ // "qCcy": "USDT"
1711
+ // "cancelReason": "", // this field can only be in closed orders
1712
+ // },
1713
+ //
1164
1714
  // createOrder, editOrder
1165
1715
  //
1716
+ // spot:
1717
+ //
1166
1718
  // {
1167
1719
  // "id": "29772698821328896",
1168
1720
  // "clientOrderId": "1234Abc"
1169
1721
  // }
1170
1722
  //
1171
- let timestamp = this.safeInteger2(order, 'timestamp', 'createTime');
1723
+ // contract:
1724
+ //
1725
+ // {
1726
+ // "ordId":"418876147745775616",
1727
+ // "clOrdId":"polo418876147745775616"
1728
+ // }
1729
+ //
1730
+ let timestamp = this.safeIntegerN(order, ['timestamp', 'createTime', 'cTime']);
1172
1731
  if (timestamp === undefined) {
1173
1732
  timestamp = this.parse8601(this.safeString(order, 'date'));
1174
1733
  }
@@ -1181,16 +1740,16 @@ export default class poloniex extends Exchange {
1181
1740
  resultingTrades = this.safeValue(resultingTrades, this.safeString(market, 'id', marketId));
1182
1741
  }
1183
1742
  }
1184
- const price = this.safeString2(order, 'price', 'rate');
1185
- const amount = this.safeString(order, 'quantity');
1186
- const filled = this.safeString(order, 'filledQuantity');
1743
+ const price = this.safeStringN(order, ['price', 'rate', 'px']);
1744
+ const amount = this.safeString2(order, 'quantity', 'sz');
1745
+ const filled = this.safeString2(order, 'filledQuantity', 'execQty');
1187
1746
  const status = this.parseOrderStatus(this.safeString(order, 'state'));
1188
1747
  const side = this.safeStringLower(order, 'side');
1189
1748
  const rawType = this.safeString(order, 'type');
1190
1749
  const type = this.parseOrderType(rawType);
1191
- const id = this.safeStringN(order, ['orderNumber', 'id', 'orderId']);
1750
+ const id = this.safeStringN(order, ['orderNumber', 'id', 'orderId', 'ordId']);
1192
1751
  let fee = undefined;
1193
- const feeCurrency = this.safeString(order, 'tokenFeeCurrency');
1752
+ const feeCurrency = this.safeString2(order, 'tokenFeeCurrency', 'feeCcy');
1194
1753
  let feeCost = undefined;
1195
1754
  let feeCurrencyCode = undefined;
1196
1755
  const rate = this.safeString(order, 'fee');
@@ -1200,7 +1759,7 @@ export default class poloniex extends Exchange {
1200
1759
  else {
1201
1760
  // poloniex accepts a 30% discount to pay fees in TRX
1202
1761
  feeCurrencyCode = this.safeCurrencyCode(feeCurrency);
1203
- feeCost = this.safeString(order, 'tokenFee');
1762
+ feeCost = this.safeString2(order, 'tokenFee', 'feeAmt');
1204
1763
  }
1205
1764
  if (feeCost !== undefined) {
1206
1765
  fee = {
@@ -1209,7 +1768,11 @@ export default class poloniex extends Exchange {
1209
1768
  'currency': feeCurrencyCode,
1210
1769
  };
1211
1770
  }
1212
- const clientOrderId = this.safeString(order, 'clientOrderId');
1771
+ const clientOrderId = this.safeString2(order, 'clientOrderId', 'clOrdId');
1772
+ const marginMode = this.safeStringLower(order, 'mgnMode');
1773
+ const reduceOnly = this.safeBool(order, 'reduceOnly');
1774
+ const leverage = this.safeInteger(order, 'lever');
1775
+ const hedged = this.safeString(order, 'posSide') !== 'BOTH';
1213
1776
  return this.safeOrder({
1214
1777
  'info': order,
1215
1778
  'id': id,
@@ -1221,23 +1784,28 @@ export default class poloniex extends Exchange {
1221
1784
  'symbol': symbol,
1222
1785
  'type': type,
1223
1786
  'timeInForce': this.safeString(order, 'timeInForce'),
1224
- 'postOnly': undefined,
1787
+ 'postOnly': rawType === 'LIMIT_MAKER',
1225
1788
  'side': side,
1226
1789
  'price': price,
1227
1790
  'triggerPrice': this.safeString2(order, 'triggerPrice', 'stopPrice'),
1228
- 'cost': undefined,
1229
- 'average': this.safeString(order, 'avgPrice'),
1791
+ 'cost': this.safeString(order, 'execAmt'),
1792
+ 'average': this.safeString2(order, 'avgPrice', 'avgPx'),
1230
1793
  'amount': amount,
1231
1794
  'filled': filled,
1232
1795
  'remaining': undefined,
1233
1796
  'trades': resultingTrades,
1234
1797
  'fee': fee,
1798
+ 'marginMode': marginMode,
1799
+ 'reduceOnly': reduceOnly,
1800
+ 'leverage': leverage,
1801
+ 'hedged': hedged,
1235
1802
  }, market);
1236
1803
  }
1237
1804
  parseOrderType(status) {
1238
1805
  const statuses = {
1239
1806
  'MARKET': 'market',
1240
1807
  'LIMIT': 'limit',
1808
+ 'LIMIT_MAKER': 'limit',
1241
1809
  'STOP-LIMIT': 'limit',
1242
1810
  'STOP-MARKET': 'market',
1243
1811
  };
@@ -1262,6 +1830,7 @@ export default class poloniex extends Exchange {
1262
1830
  * @description fetch all unfilled currently open orders
1263
1831
  * @see https://api-docs.poloniex.com/spot/api/private/order#open-orders
1264
1832
  * @see https://api-docs.poloniex.com/spot/api/private/smart-order#open-orders // trigger orders
1833
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-current-orders
1265
1834
  * @param {string} symbol unified market symbol
1266
1835
  * @param {int} [since] the earliest time in ms to fetch open orders for
1267
1836
  * @param {int} [limit] the maximum number of open orders structures to retrieve
@@ -1277,13 +1846,59 @@ export default class poloniex extends Exchange {
1277
1846
  market = this.market(symbol);
1278
1847
  request['symbol'] = market['id'];
1279
1848
  }
1849
+ let marketType = undefined;
1850
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
1280
1851
  if (limit !== undefined) {
1281
- request['limit'] = limit;
1852
+ const max = (marketType === 'spot') ? 2000 : 100;
1853
+ request['limit'] = Math.max(limit, max);
1282
1854
  }
1283
1855
  const isTrigger = this.safeValue2(params, 'trigger', 'stop');
1284
1856
  params = this.omit(params, ['trigger', 'stop']);
1285
1857
  let response = undefined;
1286
- if (isTrigger) {
1858
+ if (!market['spot']) {
1859
+ const raw = await this.swapPrivateGetV3TradeOrderOpens(this.extend(request, params));
1860
+ //
1861
+ // {
1862
+ // "code": "200",
1863
+ // "msg": "",
1864
+ // "data": [
1865
+ // {
1866
+ // "symbol": "BTC_USDT_PERP",
1867
+ // "side": "BUY",
1868
+ // "type": "LIMIT",
1869
+ // "ordId": "418890767248232148",
1870
+ // "clOrdId": "polo418890767248232148",
1871
+ // "mgnMode": "CROSS",
1872
+ // "px": "81130.13",
1873
+ // "reduceOnly": false,
1874
+ // "lever": "20",
1875
+ // "state": "NEW",
1876
+ // "source": "WEB",
1877
+ // "timeInForce": "GTC",
1878
+ // "tpTrgPx": "",
1879
+ // "tpPx": "",
1880
+ // "tpTrgPxType": "",
1881
+ // "slTrgPx": "",
1882
+ // "slPx": "",
1883
+ // "slTrgPxType": "",
1884
+ // "avgPx": "0",
1885
+ // "execQty": "0",
1886
+ // "execAmt": "0",
1887
+ // "feeCcy": "",
1888
+ // "feeAmt": "0",
1889
+ // "deductCcy": "0",
1890
+ // "deductAmt": "0",
1891
+ // "stpMode": "NONE",
1892
+ // "cTime": "1740837741523",
1893
+ // "uTime": "1740840846882",
1894
+ // "sz": "1",
1895
+ // "posSide": "BOTH",
1896
+ // "qCcy": "USDT"
1897
+ // },
1898
+ //
1899
+ response = this.safeList(raw, 'data');
1900
+ }
1901
+ else if (isTrigger) {
1287
1902
  response = await this.privateGetSmartorders(this.extend(request, params));
1288
1903
  }
1289
1904
  else {
@@ -1315,6 +1930,82 @@ export default class poloniex extends Exchange {
1315
1930
  const extension = { 'status': 'open' };
1316
1931
  return this.parseOrders(response, market, since, limit, extension);
1317
1932
  }
1933
+ /**
1934
+ * @method
1935
+ * @name poloniex#fetchClosedOrders
1936
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-order-history
1937
+ * @description fetches information on multiple closed orders made by the user
1938
+ * @param {string} symbol unified market symbol of the market orders were made in
1939
+ * @param {int} [since] the earliest time in ms to fetch orders for
1940
+ * @param {int} [limit] the maximum number of order structures to retrieve
1941
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1942
+ * @param {int} [params.until] timestamp in ms of the latest entry
1943
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1944
+ */
1945
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1946
+ await this.loadMarkets();
1947
+ let market = undefined;
1948
+ let request = {};
1949
+ if (symbol !== undefined) {
1950
+ market = this.market(symbol);
1951
+ request['symbol'] = market['id'];
1952
+ }
1953
+ let marketType = undefined;
1954
+ [marketType, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params, 'swap');
1955
+ if (marketType === 'spot') {
1956
+ throw new NotSupported(this.id + ' fetchClosedOrders() is not supported for spot markets yet');
1957
+ }
1958
+ if (limit !== undefined) {
1959
+ request['limit'] = Math.min(200, limit);
1960
+ }
1961
+ if (since !== undefined) {
1962
+ request['sTime'] = since;
1963
+ }
1964
+ [request, params] = this.handleUntilOption('eTime', request, params);
1965
+ const response = await this.swapPrivateGetV3TradeOrderHistory(this.extend(request, params));
1966
+ //
1967
+ // {
1968
+ // "code": "200",
1969
+ // "msg": "",
1970
+ // "data": [
1971
+ // {
1972
+ // "symbol": "BTC_USDT_PERP",
1973
+ // "side": "SELL",
1974
+ // "type": "MARKET",
1975
+ // "ordId": "418912106147315712",
1976
+ // "clOrdId": "polo418912106147315712",
1977
+ // "mgnMode": "CROSS",
1978
+ // "px": "0",
1979
+ // "sz": "2",
1980
+ // "lever": "20",
1981
+ // "state": "FILLED",
1982
+ // "cancelReason": "",
1983
+ // "source": "WEB",
1984
+ // "reduceOnly": "true",
1985
+ // "timeInForce": "GTC",
1986
+ // "tpTrgPx": "",
1987
+ // "tpPx": "",
1988
+ // "tpTrgPxType": "",
1989
+ // "slTrgPx": "",
1990
+ // "slPx": "",
1991
+ // "slTrgPxType": "",
1992
+ // "avgPx": "84705.56",
1993
+ // "execQty": "2",
1994
+ // "execAmt": "169.41112",
1995
+ // "feeCcy": "USDT",
1996
+ // "feeAmt": "0.08470556",
1997
+ // "deductCcy": "0",
1998
+ // "deductAmt": "0",
1999
+ // "stpMode": "NONE",
2000
+ // "cTime": "1740842829116",
2001
+ // "uTime": "1740842829130",
2002
+ // "posSide": "BOTH",
2003
+ // "qCcy": "USDT"
2004
+ // },
2005
+ //
2006
+ const data = this.safeList(response, 'data', []);
2007
+ return this.parseOrders(data, market, since, limit);
2008
+ }
1318
2009
  /**
1319
2010
  * @method
1320
2011
  * @name poloniex#createOrder
@@ -1334,20 +2025,24 @@ export default class poloniex extends Exchange {
1334
2025
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1335
2026
  await this.loadMarkets();
1336
2027
  const market = this.market(symbol);
1337
- if (!market['spot']) {
1338
- throw new NotSupported(this.id + ' createOrder() does not support ' + market['type'] + ' orders, only spot orders are accepted');
1339
- }
1340
2028
  let request = {
1341
2029
  'symbol': market['id'],
1342
- 'side': side,
1343
- // 'timeInForce': timeInForce,
2030
+ 'side': side.toUpperCase(), // uppercase, both for spot & swap
2031
+ // 'timeInForce': timeInForce, // matches unified values
1344
2032
  // 'accountType': 'SPOT',
1345
2033
  // 'amount': amount,
1346
2034
  };
1347
2035
  const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
1348
2036
  [request, params] = this.orderRequest(symbol, type, side, amount, request, price, params);
1349
2037
  let response = undefined;
1350
- if (triggerPrice !== undefined) {
2038
+ if (market['swap'] || market['future']) {
2039
+ const responseInitial = await this.swapPrivatePostV3TradeOrder(this.extend(request, params));
2040
+ //
2041
+ // {"code":200,"msg":"Success","data":{"ordId":"418876147745775616","clOrdId":"polo418876147745775616"}}
2042
+ //
2043
+ response = this.safeDict(responseInitial, 'data');
2044
+ }
2045
+ else if (triggerPrice !== undefined) {
1351
2046
  response = await this.privatePostSmartorders(this.extend(request, params));
1352
2047
  }
1353
2048
  else {
@@ -1359,19 +2054,37 @@ export default class poloniex extends Exchange {
1359
2054
  // "clientOrderId" : ""
1360
2055
  // }
1361
2056
  //
1362
- response = this.extend(response, {
1363
- 'type': type,
1364
- 'side': side,
1365
- });
1366
2057
  return this.parseOrder(response, market);
1367
2058
  }
1368
2059
  orderRequest(symbol, type, side, amount, request, price = undefined, params = {}) {
2060
+ const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
2061
+ const market = this.market(symbol);
2062
+ if (market['contract']) {
2063
+ let marginMode = undefined;
2064
+ [marginMode, params] = this.handleParamString(params, 'marginMode');
2065
+ if (marginMode !== undefined) {
2066
+ this.checkRequiredArgument('createOrder', marginMode, 'marginMode', ['cross', 'isolated']);
2067
+ request['mgnMode'] = marginMode.toUpperCase();
2068
+ }
2069
+ let hedged = undefined;
2070
+ [hedged, params] = this.handleParamString(params, 'hedged');
2071
+ if (hedged) {
2072
+ if (marginMode === undefined) {
2073
+ throw new ArgumentsRequired(this.id + ' createOrder() requires a marginMode parameter "cross" or "isolated" for hedged orders');
2074
+ }
2075
+ if (!('posSide' in params)) {
2076
+ throw new ArgumentsRequired(this.id + ' createOrder() requires a posSide parameter "LONG" or "SHORT" for hedged orders');
2077
+ }
2078
+ }
2079
+ }
1369
2080
  let upperCaseType = type.toUpperCase();
1370
2081
  const isMarket = upperCaseType === 'MARKET';
1371
2082
  const isPostOnly = this.isPostOnly(isMarket, upperCaseType === 'LIMIT_MAKER', params);
1372
- const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
1373
2083
  params = this.omit(params, ['postOnly', 'triggerPrice', 'stopPrice']);
1374
2084
  if (triggerPrice !== undefined) {
2085
+ if (!market['spot']) {
2086
+ throw new InvalidOrder(this.id + ' createOrder() does not support trigger orders for ' + market['type'] + ' markets');
2087
+ }
1375
2088
  upperCaseType = (price === undefined) ? 'STOP' : 'STOP_LIMIT';
1376
2089
  request['stopPrice'] = triggerPrice;
1377
2090
  }
@@ -1389,7 +2102,7 @@ export default class poloniex extends Exchange {
1389
2102
  if (cost !== undefined) {
1390
2103
  quoteAmount = this.costToPrecision(symbol, cost);
1391
2104
  }
1392
- else if (createMarketBuyOrderRequiresPrice) {
2105
+ else if (createMarketBuyOrderRequiresPrice && market['spot']) {
1393
2106
  if (price === undefined) {
1394
2107
  throw new InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument');
1395
2108
  }
@@ -1403,15 +2116,19 @@ export default class poloniex extends Exchange {
1403
2116
  else {
1404
2117
  quoteAmount = this.costToPrecision(symbol, amount);
1405
2118
  }
1406
- request['amount'] = quoteAmount;
2119
+ const amountKey = market['spot'] ? 'amount' : 'sz';
2120
+ request[amountKey] = quoteAmount;
1407
2121
  }
1408
2122
  else {
1409
- request['quantity'] = this.amountToPrecision(symbol, amount);
2123
+ const amountKey = market['spot'] ? 'quantity' : 'sz';
2124
+ request[amountKey] = this.amountToPrecision(symbol, amount);
1410
2125
  }
1411
2126
  }
1412
2127
  else {
1413
- request['quantity'] = this.amountToPrecision(symbol, amount);
1414
- request['price'] = this.priceToPrecision(symbol, price);
2128
+ const amountKey = market['spot'] ? 'quantity' : 'sz';
2129
+ request[amountKey] = this.amountToPrecision(symbol, amount);
2130
+ const priceKey = market['spot'] ? 'price' : 'px';
2131
+ request[priceKey] = this.priceToPrecision(symbol, price);
1415
2132
  }
1416
2133
  const clientOrderId = this.safeString(params, 'clientOrderId');
1417
2134
  if (clientOrderId !== undefined) {
@@ -1482,7 +2199,27 @@ export default class poloniex extends Exchange {
1482
2199
  // @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1483
2200
  //
1484
2201
  await this.loadMarkets();
2202
+ if (symbol === undefined) {
2203
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
2204
+ }
2205
+ const market = this.market(symbol);
1485
2206
  const request = {};
2207
+ if (!market['spot']) {
2208
+ request['symbol'] = market['id'];
2209
+ request['ordId'] = id;
2210
+ const raw = await this.swapPrivateDeleteV3TradeOrder(this.extend(request, params));
2211
+ //
2212
+ // {
2213
+ // "code": "200",
2214
+ // "msg": "Success",
2215
+ // "data": {
2216
+ // "ordId": "418886099910612040",
2217
+ // "clOrdId": "polo418886099910612040"
2218
+ // }
2219
+ // }
2220
+ //
2221
+ return this.parseOrder(this.safeDict(raw, 'data'));
2222
+ }
1486
2223
  const clientOrderId = this.safeValue(params, 'clientOrderId');
1487
2224
  if (clientOrderId !== undefined) {
1488
2225
  id = clientOrderId;
@@ -1514,6 +2251,7 @@ export default class poloniex extends Exchange {
1514
2251
  * @description cancel all open orders
1515
2252
  * @see https://api-docs.poloniex.com/spot/api/private/order#cancel-all-orders
1516
2253
  * @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-all-orders // trigger orders
2254
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/cancel-all-orders - contract markets
1517
2255
  * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
1518
2256
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1519
2257
  * @param {boolean} [params.trigger] true if canceling trigger orders
@@ -1532,9 +2270,30 @@ export default class poloniex extends Exchange {
1532
2270
  market['id'],
1533
2271
  ];
1534
2272
  }
2273
+ let response = undefined;
2274
+ let marketType = undefined;
2275
+ [marketType, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);
2276
+ if (marketType === 'swap' || marketType === 'future') {
2277
+ const raw = await this.swapPrivateDeleteV3TradeAllOrders(this.extend(request, params));
2278
+ //
2279
+ // {
2280
+ // "code": "200",
2281
+ // "msg": "Success",
2282
+ // "data": [
2283
+ // {
2284
+ // "code": "200",
2285
+ // "msg": "Success",
2286
+ // "ordId": "418885787866388511",
2287
+ // "clOrdId": "polo418885787866388511"
2288
+ // }
2289
+ // ]
2290
+ // }
2291
+ //
2292
+ response = this.safeList(raw, 'data');
2293
+ return this.parseOrders(response, market);
2294
+ }
1535
2295
  const isTrigger = this.safeValue2(params, 'trigger', 'stop');
1536
2296
  params = this.omit(params, ['trigger', 'stop']);
1537
- let response = undefined;
1538
2297
  if (isTrigger) {
1539
2298
  response = await this.privateDeleteSmartorders(this.extend(request, params));
1540
2299
  }
@@ -1578,6 +2337,16 @@ export default class poloniex extends Exchange {
1578
2337
  const request = {
1579
2338
  'id': id,
1580
2339
  };
2340
+ let market = undefined;
2341
+ if (symbol !== undefined) {
2342
+ market = this.market(symbol);
2343
+ request['symbol'] = market['id'];
2344
+ }
2345
+ let marketType = undefined;
2346
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOrder', market, params);
2347
+ if (marketType !== 'spot') {
2348
+ throw new NotSupported(this.id + ' fetchOrder() is not supported for ' + marketType + ' markets yet');
2349
+ }
1581
2350
  const isTrigger = this.safeValue2(params, 'trigger', 'stop');
1582
2351
  params = this.omit(params, ['trigger', 'stop']);
1583
2352
  let response = undefined;
@@ -1666,6 +2435,24 @@ export default class poloniex extends Exchange {
1666
2435
  'timestamp': undefined,
1667
2436
  'datetime': undefined,
1668
2437
  };
2438
+ // for swap
2439
+ if (!Array.isArray(response)) {
2440
+ const ts = this.safeInteger(response, 'uTime');
2441
+ result['timestamp'] = ts;
2442
+ result['datetime'] = this.iso8601(ts);
2443
+ const details = this.safeList(response, 'details', []);
2444
+ for (let i = 0; i < details.length; i++) {
2445
+ const balance = details[i];
2446
+ const currencyId = this.safeString(balance, 'ccy');
2447
+ const code = this.safeCurrencyCode(currencyId);
2448
+ const account = this.account();
2449
+ account['total'] = this.safeString(balance, 'avail');
2450
+ account['used'] = this.safeString(balance, 'im');
2451
+ result[code] = account;
2452
+ }
2453
+ return this.safeBalance(result);
2454
+ }
2455
+ // for spot
1669
2456
  for (let i = 0; i < response.length; i++) {
1670
2457
  const account = this.safeValue(response, i, {});
1671
2458
  const balances = this.safeValue(account, 'balances');
@@ -1686,11 +2473,56 @@ export default class poloniex extends Exchange {
1686
2473
  * @name poloniex#fetchBalance
1687
2474
  * @description query for balance and get the amount of funds available for trading or funds locked in orders
1688
2475
  * @see https://api-docs.poloniex.com/spot/api/private/account#all-account-balances
2476
+ * @see https://api-docs.poloniex.com/v3/futures/api/account/balance
1689
2477
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1690
2478
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1691
2479
  */
1692
2480
  async fetchBalance(params = {}) {
1693
2481
  await this.loadMarkets();
2482
+ let marketType = undefined;
2483
+ [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
2484
+ if (marketType !== 'spot') {
2485
+ const responseRaw = await this.swapPrivateGetV3AccountBalance(params);
2486
+ //
2487
+ // {
2488
+ // "code": "200",
2489
+ // "msg": "",
2490
+ // "data": {
2491
+ // "state": "NORMAL",
2492
+ // "eq": "9.98571622",
2493
+ // "isoEq": "0",
2494
+ // "im": "0",
2495
+ // "mm": "0",
2496
+ // "mmr": "0",
2497
+ // "upl": "0",
2498
+ // "availMgn": "9.98571622",
2499
+ // "cTime": "1738093601775",
2500
+ // "uTime": "1740829116236",
2501
+ // "details": [
2502
+ // {
2503
+ // "ccy": "USDT",
2504
+ // "eq": "9.98571622",
2505
+ // "isoEq": "0",
2506
+ // "avail": "9.98571622",
2507
+ // "trdHold": "0",
2508
+ // "upl": "0",
2509
+ // "isoAvail": "0",
2510
+ // "isoHold": "0",
2511
+ // "isoUpl": "0",
2512
+ // "im": "0",
2513
+ // "mm": "0",
2514
+ // "mmr": "0",
2515
+ // "imr": "0",
2516
+ // "cTime": "1740829116236",
2517
+ // "uTime": "1740829116236"
2518
+ // }
2519
+ // ]
2520
+ // }
2521
+ // }
2522
+ //
2523
+ const data = this.safeDict(responseRaw, 'data', {});
2524
+ return this.parseBalance(data);
2525
+ }
1694
2526
  const request = {
1695
2527
  'accountType': 'SPOT',
1696
2528
  };
@@ -1751,6 +2583,7 @@ export default class poloniex extends Exchange {
1751
2583
  * @name poloniex#fetchOrderBook
1752
2584
  * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1753
2585
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#order-book
2586
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-order-book
1754
2587
  * @param {string} symbol unified symbol of the market to fetch the order book for
1755
2588
  * @param {int} [limit] the maximum amount of order book entries to return
1756
2589
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -1764,6 +2597,27 @@ export default class poloniex extends Exchange {
1764
2597
  };
1765
2598
  if (limit !== undefined) {
1766
2599
  request['limit'] = limit; // The default value of limit is 10. Valid limit values are: 5, 10, 20, 50, 100, 150.
2600
+ if (market['contract']) {
2601
+ request['limit'] = this.findNearestCeiling([5, 10, 20, 100, 150], limit);
2602
+ }
2603
+ }
2604
+ if (market['contract']) {
2605
+ const responseRaw = await this.swapPublicGetV3MarketOrderBook(this.extend(request, params));
2606
+ //
2607
+ // {
2608
+ // "code": 200,
2609
+ // "data": {
2610
+ // "asks": [ ["58700", "9934"], ..],
2611
+ // "bids": [ ["58600", "9952"], ..],
2612
+ // "s": "100",
2613
+ // "ts": 1719974138333
2614
+ // },
2615
+ // "msg": "Success"
2616
+ // }
2617
+ //
2618
+ const data = this.safeDict(responseRaw, 'data', {});
2619
+ const ts = this.safeInteger(data, 'ts');
2620
+ return this.parseOrderBook(data, symbol, ts);
1767
2621
  }
1768
2622
  const response = await this.publicGetMarketsSymbolOrderBook(this.extend(request, params));
1769
2623
  //
@@ -2363,14 +3217,397 @@ export default class poloniex extends Exchange {
2363
3217
  },
2364
3218
  };
2365
3219
  }
3220
+ /**
3221
+ * @method
3222
+ * @name poloniex#setLeverage
3223
+ * @description set the level of leverage for a market
3224
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/set-leverage
3225
+ * @param {int} leverage the rate of leverage
3226
+ * @param {string} symbol unified market symbol
3227
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3228
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
3229
+ * @returns {object} response from the exchange
3230
+ */
3231
+ async setLeverage(leverage, symbol = undefined, params = {}) {
3232
+ if (symbol === undefined) {
3233
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
3234
+ }
3235
+ await this.loadMarkets();
3236
+ const market = this.market(symbol);
3237
+ let marginMode = undefined;
3238
+ [marginMode, params] = this.handleMarginModeAndParams('setLeverage', params);
3239
+ if (marginMode === undefined) {
3240
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a marginMode parameter "cross" or "isolated"');
3241
+ }
3242
+ let hedged = undefined;
3243
+ [hedged, params] = this.handleParamBool(params, 'hedged', false);
3244
+ if (hedged) {
3245
+ if (!('posSide' in params)) {
3246
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a posSide parameter for hedged mode: "LONG" or "SHORT"');
3247
+ }
3248
+ }
3249
+ const request = {
3250
+ 'lever': leverage,
3251
+ 'mgnMode': marginMode.toUpperCase(),
3252
+ 'symbol': market['id'],
3253
+ };
3254
+ const response = await this.swapPrivatePostV3PositionLeverage(this.extend(request, params));
3255
+ return response;
3256
+ }
3257
+ /**
3258
+ * @method
3259
+ * @name poloniex#fetchLeverage
3260
+ * @description fetch the set leverage for a market
3261
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/get-leverages
3262
+ * @param {string} symbol unified market symbol
3263
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3264
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
3265
+ */
3266
+ async fetchLeverage(symbol, params = {}) {
3267
+ await this.loadMarkets();
3268
+ const market = this.market(symbol);
3269
+ const request = {
3270
+ 'symbol': market['id'],
3271
+ };
3272
+ let marginMode = undefined;
3273
+ [marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params);
3274
+ if (marginMode === undefined) {
3275
+ throw new ArgumentsRequired(this.id + ' fetchLeverage() requires a marginMode parameter "cross" or "isolated"');
3276
+ }
3277
+ request['mgnMode'] = marginMode.toUpperCase();
3278
+ const response = await this.swapPrivateGetV3PositionLeverages(this.extend(request, params));
3279
+ //
3280
+ // for one-way mode:
3281
+ //
3282
+ // {
3283
+ // "code": "200",
3284
+ // "msg": "",
3285
+ // "data": [
3286
+ // {
3287
+ // "symbol": "BTC_USDT_PERP",
3288
+ // "lever": "10",
3289
+ // "mgnMode": "CROSS",
3290
+ // "posSide": "BOTH"
3291
+ // }
3292
+ // ]
3293
+ // }
3294
+ //
3295
+ // for hedge:
3296
+ //
3297
+ // {
3298
+ // "code": "200",
3299
+ // "msg": "",
3300
+ // "data": [
3301
+ // {
3302
+ // "symbol": "BTC_USDT_PERP",
3303
+ // "lever": "20",
3304
+ // "mgnMode": "CROSS",
3305
+ // "posSide": "SHORT"
3306
+ // },
3307
+ // {
3308
+ // "symbol": "BTC_USDT_PERP",
3309
+ // "lever": "20",
3310
+ // "mgnMode": "CROSS",
3311
+ // "posSide": "LONG"
3312
+ // }
3313
+ // ]
3314
+ // }
3315
+ //
3316
+ return this.parseLeverage(response, market);
3317
+ }
3318
+ parseLeverage(leverage, market = undefined) {
3319
+ let shortLeverage = undefined;
3320
+ let longLeverage = undefined;
3321
+ let marketId = undefined;
3322
+ let marginMode = undefined;
3323
+ const data = this.safeList(leverage, 'data');
3324
+ for (let i = 0; i < data.length; i++) {
3325
+ const entry = data[i];
3326
+ marketId = this.safeString(entry, 'symbol');
3327
+ marginMode = this.safeString(entry, 'mgnMode');
3328
+ const lever = this.safeInteger(entry, 'lever');
3329
+ const posSide = this.safeString(entry, 'posSide');
3330
+ if (posSide === 'LONG') {
3331
+ longLeverage = lever;
3332
+ }
3333
+ else if (posSide === 'SHORT') {
3334
+ shortLeverage = lever;
3335
+ }
3336
+ else {
3337
+ longLeverage = lever;
3338
+ shortLeverage = lever;
3339
+ }
3340
+ }
3341
+ return {
3342
+ 'info': leverage,
3343
+ 'symbol': this.safeSymbol(marketId, market),
3344
+ 'marginMode': marginMode,
3345
+ 'longLeverage': longLeverage,
3346
+ 'shortLeverage': shortLeverage,
3347
+ };
3348
+ }
3349
+ /**
3350
+ * @method
3351
+ * @name poloniex#fetchPositionMode
3352
+ * @description fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
3353
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
3354
+ * @param {string} symbol unified symbol of the market to fetch the order book for
3355
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3356
+ * @returns {object} an object detailing whether the market is in hedged or one-way mode
3357
+ */
3358
+ async fetchPositionMode(symbol = undefined, params = {}) {
3359
+ const response = await this.swapPrivateGetV3PositionMode(params);
3360
+ //
3361
+ // {
3362
+ // "code": "200",
3363
+ // "msg": "Success",
3364
+ // "data": {
3365
+ // "posMode": "ONE_WAY"
3366
+ // }
3367
+ // }
3368
+ //
3369
+ const data = this.safeDict(response, 'data', {});
3370
+ const posMode = this.safeString(data, 'posMode');
3371
+ const hedged = posMode === 'HEDGE';
3372
+ return {
3373
+ 'info': response,
3374
+ 'hedged': hedged,
3375
+ };
3376
+ }
3377
+ /**
3378
+ * @method
3379
+ * @name poloniex#setPositionMode
3380
+ * @description set hedged to true or false for a market
3381
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
3382
+ * @param {bool} hedged set to true to use dualSidePosition
3383
+ * @param {string} symbol not used by binance setPositionMode ()
3384
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3385
+ * @returns {object} response from the exchange
3386
+ */
3387
+ async setPositionMode(hedged, symbol = undefined, params = {}) {
3388
+ const mode = hedged ? 'HEDGE' : 'ONE_WAY';
3389
+ const request = {
3390
+ 'posMode': mode,
3391
+ };
3392
+ const response = await this.swapPrivatePostV3PositionMode(this.extend(request, params));
3393
+ //
3394
+ // {
3395
+ // "code": "200",
3396
+ // "msg": "Success",
3397
+ // "data": {}
3398
+ // }
3399
+ //
3400
+ return response;
3401
+ }
3402
+ /**
3403
+ * @method
3404
+ * @name poloniex#fetchPositions
3405
+ * @description fetch all open positions
3406
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/get-current-position
3407
+ * @param {string[]|undefined} symbols list of unified market symbols
3408
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3409
+ * @param {boolean} [params.standard] whether to fetch standard contract positions
3410
+ * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
3411
+ */
3412
+ async fetchPositions(symbols = undefined, params = {}) {
3413
+ await this.loadMarkets();
3414
+ symbols = this.marketSymbols(symbols);
3415
+ const response = await this.swapPrivateGetV3TradePositionOpens(params);
3416
+ //
3417
+ // {
3418
+ // "code": "200",
3419
+ // "msg": "",
3420
+ // "data": [
3421
+ // {
3422
+ // "symbol": "BTC_USDT_PERP",
3423
+ // "posSide": "LONG",
3424
+ // "side": "BUY",
3425
+ // "mgnMode": "CROSS",
3426
+ // "openAvgPx": "94193.42",
3427
+ // "qty": "1",
3428
+ // "availQty": "1",
3429
+ // "lever": "20",
3430
+ // "adl": "0.3007",
3431
+ // "liqPx": "84918.201844064386317906",
3432
+ // "im": "4.7047795",
3433
+ // "mm": "0.56457354",
3434
+ // "upl": "-0.09783",
3435
+ // "uplRatio": "-0.0207",
3436
+ // "pnl": "0",
3437
+ // "markPx": "94095.59",
3438
+ // "mgnRatio": "0.0582",
3439
+ // "state": "NORMAL",
3440
+ // "cTime": "1740950344401",
3441
+ // "uTime": "1740950344401",
3442
+ // "mgn": "4.7047795",
3443
+ // "actType": "TRADING",
3444
+ // "maxWAmt": "0",
3445
+ // "tpTrgPx": "",
3446
+ // "slTrgPx": ""
3447
+ // }
3448
+ // ]
3449
+ // }
3450
+ //
3451
+ const positions = this.safeList(response, 'data', []);
3452
+ return this.parsePositions(positions, symbols);
3453
+ }
3454
+ parsePosition(position, market = undefined) {
3455
+ //
3456
+ // {
3457
+ // "symbol": "BTC_USDT_PERP",
3458
+ // "posSide": "LONG",
3459
+ // "side": "BUY",
3460
+ // "mgnMode": "CROSS",
3461
+ // "openAvgPx": "94193.42",
3462
+ // "qty": "1",
3463
+ // "availQty": "1",
3464
+ // "lever": "20",
3465
+ // "adl": "0.3007",
3466
+ // "liqPx": "84918.201844064386317906",
3467
+ // "im": "4.7047795",
3468
+ // "mm": "0.56457354",
3469
+ // "upl": "-0.09783",
3470
+ // "uplRatio": "-0.0207",
3471
+ // "pnl": "0",
3472
+ // "markPx": "94095.59",
3473
+ // "mgnRatio": "0.0582",
3474
+ // "state": "NORMAL",
3475
+ // "cTime": "1740950344401",
3476
+ // "uTime": "1740950344401",
3477
+ // "mgn": "4.7047795",
3478
+ // "actType": "TRADING",
3479
+ // "maxWAmt": "0",
3480
+ // "tpTrgPx": "",
3481
+ // "slTrgPx": ""
3482
+ // }
3483
+ //
3484
+ const marketId = this.safeString(position, 'symbol');
3485
+ market = this.safeMarket(marketId, market);
3486
+ const timestamp = this.safeInteger(position, 'cTime');
3487
+ const marginMode = this.safeStringLower(position, 'mgnMode');
3488
+ const leverage = this.safeString(position, 'lever');
3489
+ const initialMargin = this.safeString(position, 'im');
3490
+ const notional = Precise.stringMul(leverage, initialMargin);
3491
+ const qty = this.safeString(position, 'qty');
3492
+ const avgPrice = this.safeString(position, 'openAvgPx');
3493
+ const collateral = Precise.stringMul(qty, avgPrice);
3494
+ // todo: some more fields
3495
+ return this.safePosition({
3496
+ 'info': position,
3497
+ 'id': undefined,
3498
+ 'symbol': market['symbol'],
3499
+ 'notional': notional,
3500
+ 'marginMode': marginMode,
3501
+ 'liquidationPrice': this.safeNumber(position, 'liqPx'),
3502
+ 'entryPrice': this.safeNumber(position, 'openAvgPx'),
3503
+ 'unrealizedPnl': this.safeNumber(position, 'upl'),
3504
+ 'percentage': undefined,
3505
+ 'contracts': this.safeNumber(position, 'qty'),
3506
+ 'contractSize': undefined,
3507
+ 'markPrice': this.safeNumber(position, 'markPx'),
3508
+ 'lastPrice': undefined,
3509
+ 'side': this.safeStringLower(position, 'posSide'),
3510
+ 'hedged': undefined,
3511
+ 'timestamp': timestamp,
3512
+ 'datetime': this.iso8601(timestamp),
3513
+ 'lastUpdateTimestamp': undefined,
3514
+ 'maintenanceMargin': this.safeNumber(position, 'mm'),
3515
+ 'maintenanceMarginPercentage': undefined,
3516
+ 'collateral': collateral,
3517
+ 'initialMargin': initialMargin,
3518
+ 'initialMarginPercentage': undefined,
3519
+ 'leverage': parseInt(leverage),
3520
+ 'marginRatio': this.safeNumber(position, 'mgnRatio'),
3521
+ 'stopLossPrice': this.safeNumber(position, 'slTrgPx'),
3522
+ 'takeProfitPrice': this.safeNumber(position, 'tpTrgPx'),
3523
+ });
3524
+ }
3525
+ async modifyMarginHelper(symbol, amount, type, params = {}) {
3526
+ await this.loadMarkets();
3527
+ const market = this.market(symbol);
3528
+ amount = this.amountToPrecision(symbol, amount);
3529
+ const request = {
3530
+ 'symbol': market['id'],
3531
+ 'amt': Precise.stringAbs(amount),
3532
+ 'type': type.toUpperCase(), // 'ADD' or 'REDUCE'
3533
+ };
3534
+ // todo: hedged handling, tricky
3535
+ if (!('posMode' in params)) {
3536
+ request['posMode'] = 'BOTH';
3537
+ }
3538
+ const response = await this.swapPrivatePostV3TradePositionMargin(this.extend(request, params));
3539
+ //
3540
+ // {
3541
+ // "code": 200,
3542
+ // "data": {
3543
+ // "amt": "50",
3544
+ // "lever": "20",
3545
+ // "symbol": "DOT_USDT_PERP",
3546
+ // "posSide": "BOTH",
3547
+ // "type": "ADD"
3548
+ // },
3549
+ // "msg": "Success"
3550
+ // }
3551
+ //
3552
+ if (type === 'reduce') {
3553
+ amount = Precise.stringAbs(amount);
3554
+ }
3555
+ const data = this.safeDict(response, 'data');
3556
+ return this.parseMarginModification(data, market);
3557
+ }
3558
+ parseMarginModification(data, market = undefined) {
3559
+ const marketId = this.safeString(data, 'symbol');
3560
+ market = this.safeMarket(marketId, market);
3561
+ const rawType = this.safeString(data, 'type');
3562
+ const type = (rawType === 'ADD') ? 'add' : 'reduce';
3563
+ return {
3564
+ 'info': data,
3565
+ 'symbol': market['symbol'],
3566
+ 'type': type,
3567
+ 'marginMode': undefined,
3568
+ 'amount': this.safeNumber(data, 'amt'),
3569
+ 'total': undefined,
3570
+ 'code': undefined,
3571
+ 'status': 'ok',
3572
+ 'timestamp': undefined,
3573
+ 'datetime': undefined,
3574
+ };
3575
+ }
3576
+ /**
3577
+ * @method
3578
+ * @name poloniex#reduceMargin
3579
+ * @description remove margin from a position
3580
+ * @param {string} symbol unified market symbol
3581
+ * @param {float} amount the amount of margin to remove
3582
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3583
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=reduce-margin-structure}
3584
+ */
3585
+ async reduceMargin(symbol, amount, params = {}) {
3586
+ return await this.modifyMarginHelper(symbol, -amount, 'reduce', params);
3587
+ }
3588
+ /**
3589
+ * @method
3590
+ * @name poloniex#addMargin
3591
+ * @description add margin
3592
+ * @param {string} symbol unified market symbol
3593
+ * @param {float} amount amount of margin to add
3594
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3595
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=add-margin-structure}
3596
+ */
3597
+ async addMargin(symbol, amount, params = {}) {
3598
+ return await this.modifyMarginHelper(symbol, amount, 'add', params);
3599
+ }
2366
3600
  nonce() {
2367
3601
  return this.milliseconds();
2368
3602
  }
2369
3603
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2370
- let url = this.urls['api']['rest'];
3604
+ let url = this.urls['api']['spot'];
3605
+ if (this.inArray(api, ['swapPublic', 'swapPrivate'])) {
3606
+ url = this.urls['api']['swap'];
3607
+ }
2371
3608
  const query = this.omit(params, this.extractParams(path));
2372
3609
  const implodedPath = this.implodeParams(path, params);
2373
- if (api === 'public') {
3610
+ if (api === 'public' || api === 'swapPublic') {
2374
3611
  url += '/' + implodedPath;
2375
3612
  if (Object.keys(query).length) {
2376
3613
  url += '?' + this.urlencode(query);