ccxt 4.5.55 → 4.5.57

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 (321) hide show
  1. package/README.md +215 -10
  2. package/dist/ccxt.browser.min.js +10 -10
  3. package/dist/cjs/ccxt.js +6 -11
  4. package/dist/cjs/src/aftermath.js +10 -5
  5. package/dist/cjs/src/alpaca.js +2 -2
  6. package/dist/cjs/src/apex.js +26 -17
  7. package/dist/cjs/src/arkham.js +10 -7
  8. package/dist/cjs/src/ascendex.js +8 -5
  9. package/dist/cjs/src/aster.js +7 -4
  10. package/dist/cjs/src/backpack.js +4 -4
  11. package/dist/cjs/src/base/Exchange.js +72 -35
  12. package/dist/cjs/src/base/functions/io.js +25 -0
  13. package/dist/cjs/src/base/functions.js +1 -0
  14. package/dist/cjs/src/bigone.js +10 -7
  15. package/dist/cjs/src/binance.js +196 -198
  16. package/dist/cjs/src/bingx.js +7 -7
  17. package/dist/cjs/src/bitfinex.js +71 -58
  18. package/dist/cjs/src/bitflyer.js +2 -1
  19. package/dist/cjs/src/bitget.js +16 -5
  20. package/dist/cjs/src/bitmart.js +18 -10
  21. package/dist/cjs/src/bitmex.js +8 -5
  22. package/dist/cjs/src/bitopro.js +2 -2
  23. package/dist/cjs/src/bitrue.js +4 -3
  24. package/dist/cjs/src/bitso.js +7 -4
  25. package/dist/cjs/src/bitstamp.js +7 -4
  26. package/dist/cjs/src/bitteam.js +1 -1
  27. package/dist/cjs/src/bittrade.js +2 -2
  28. package/dist/cjs/src/bitvavo.js +457 -34
  29. package/dist/cjs/src/blofin.js +28 -4
  30. package/dist/cjs/src/bullish.js +6 -5
  31. package/dist/cjs/src/bybit.js +19 -17
  32. package/dist/cjs/src/bybiteu.js +1 -0
  33. package/dist/cjs/src/bydfi.js +1 -1
  34. package/dist/cjs/src/cex.js +3 -3
  35. package/dist/cjs/src/coinbase.js +75 -65
  36. package/dist/cjs/src/coinbaseexchange.js +4 -3
  37. package/dist/cjs/src/coinbaseinternational.js +17 -10
  38. package/dist/cjs/src/coinex.js +79 -77
  39. package/dist/cjs/src/coinmetro.js +1 -1
  40. package/dist/cjs/src/coinsph.js +5 -5
  41. package/dist/cjs/src/cryptocom.js +52 -54
  42. package/dist/cjs/src/cryptomus.js +43 -39
  43. package/dist/cjs/src/deepcoin.js +9 -5
  44. package/dist/cjs/src/delta.js +53 -53
  45. package/dist/cjs/src/deribit.js +35 -35
  46. package/dist/cjs/src/derive.js +31 -31
  47. package/dist/cjs/src/digifinex.js +45 -45
  48. package/dist/cjs/src/exmo.js +104 -122
  49. package/dist/cjs/src/extended.js +3497 -0
  50. package/dist/cjs/src/foxbit.js +72 -76
  51. package/dist/cjs/src/gate.js +53 -53
  52. package/dist/cjs/src/gemini.js +45 -45
  53. package/dist/cjs/src/grvt.js +17 -11
  54. package/dist/cjs/src/hashkey.js +56 -58
  55. package/dist/cjs/src/hibachi.js +1 -1
  56. package/dist/cjs/src/hitbtc.js +5 -14
  57. package/dist/cjs/src/hollaex.js +51 -54
  58. package/dist/cjs/src/htx.js +84 -72
  59. package/dist/cjs/src/hyperliquid.js +60 -55
  60. package/dist/cjs/src/indodax.js +4 -3
  61. package/dist/cjs/src/kraken.js +71 -71
  62. package/dist/cjs/src/krakenfutures.js +2 -1
  63. package/dist/cjs/src/kucoin.js +3 -2
  64. package/dist/cjs/src/latoken.js +30 -32
  65. package/dist/cjs/src/lbank.js +64 -60
  66. package/dist/cjs/src/lighter.js +36 -38
  67. package/dist/cjs/src/luno.js +36 -44
  68. package/dist/cjs/src/mercado.js +2 -1
  69. package/dist/cjs/src/mexc.js +72 -63
  70. package/dist/cjs/src/modetrade.js +51 -53
  71. package/dist/cjs/src/ndax.js +35 -37
  72. package/dist/cjs/src/okx.js +23 -5
  73. package/dist/cjs/src/onetrading.js +21 -23
  74. package/dist/cjs/src/p2b.js +8 -4
  75. package/dist/cjs/src/paradex.js +3 -2
  76. package/dist/cjs/src/phemex.js +47 -47
  77. package/dist/cjs/src/poloniex.js +19 -13
  78. package/dist/cjs/src/pro/alpaca.js +1 -1
  79. package/dist/cjs/src/pro/apex.js +11 -2
  80. package/dist/cjs/src/pro/arkham.js +1 -1
  81. package/dist/cjs/src/pro/aster.js +10 -9
  82. package/dist/cjs/src/pro/backpack.js +1 -1
  83. package/dist/cjs/src/pro/binance.js +6 -6
  84. package/dist/cjs/src/pro/bingx.js +7 -2
  85. package/dist/cjs/src/pro/bitget.js +1 -1
  86. package/dist/cjs/src/pro/bithumb.js +1 -1
  87. package/dist/cjs/src/pro/bitmart.js +10 -0
  88. package/dist/cjs/src/pro/bitmex.js +1 -1
  89. package/dist/cjs/src/pro/bitstamp.js +1 -1
  90. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  91. package/dist/cjs/src/pro/bybit.js +1 -1
  92. package/dist/cjs/src/pro/cex.js +1 -1
  93. package/dist/cjs/src/pro/coinex.js +1 -1
  94. package/dist/cjs/src/pro/coinone.js +1 -1
  95. package/dist/cjs/src/pro/cryptocom.js +3 -1
  96. package/dist/cjs/src/pro/dydx.js +1 -1
  97. package/dist/cjs/src/pro/exmo.js +1 -1
  98. package/dist/cjs/src/pro/extended.js +865 -0
  99. package/dist/cjs/src/pro/gate.js +1 -1
  100. package/dist/cjs/src/pro/grvt.js +8 -0
  101. package/dist/cjs/src/pro/htx.js +4 -4
  102. package/dist/cjs/src/pro/independentreserve.js +1 -1
  103. package/dist/cjs/src/pro/krakenfutures.js +16 -4
  104. package/dist/cjs/src/pro/kucoin.js +1 -1
  105. package/dist/cjs/src/pro/luno.js +3 -3
  106. package/dist/cjs/src/pro/modetrade.js +3 -3
  107. package/dist/cjs/src/pro/okx.js +4 -4
  108. package/dist/cjs/src/pro/onetrading.js +1 -1
  109. package/dist/cjs/src/pro/toobit.js +1 -1
  110. package/dist/cjs/src/pro/weex.js +1 -1
  111. package/dist/cjs/src/pro/woo.js +4 -4
  112. package/dist/cjs/src/pro/woofipro.js +3 -3
  113. package/dist/cjs/src/pro/xt.js +1 -1
  114. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +7 -7
  115. package/dist/cjs/src/tokocrypto.js +1 -1
  116. package/dist/cjs/src/toobit.js +3 -3
  117. package/dist/cjs/src/upbit.js +3 -3
  118. package/dist/cjs/src/weex.js +57 -62
  119. package/dist/cjs/src/whitebit.js +61 -63
  120. package/dist/cjs/src/woo.js +66 -55
  121. package/dist/cjs/src/woofipro.js +54 -48
  122. package/dist/cjs/src/xt.js +3 -2
  123. package/dist/cjs/src/yobit.js +4 -2
  124. package/dist/cjs/src/zebpay.js +73 -75
  125. package/js/ccxt.d.ts +8 -14
  126. package/js/ccxt.js +6 -10
  127. package/js/src/abstract/bitvavo.d.ts +15 -7
  128. package/js/src/abstract/extended.d.ts +58 -0
  129. package/js/src/abstract/mexc.d.ts +1 -0
  130. package/js/src/aftermath.js +10 -5
  131. package/js/src/alpaca.js +2 -2
  132. package/js/src/apex.d.ts +1 -1
  133. package/js/src/apex.js +26 -17
  134. package/js/src/arkham.js +10 -7
  135. package/js/src/ascendex.js +8 -5
  136. package/js/src/aster.js +7 -4
  137. package/js/src/backpack.js +4 -4
  138. package/js/src/base/Exchange.d.ts +10 -6
  139. package/js/src/base/Exchange.js +72 -35
  140. package/js/src/base/functions/io.d.ts +7 -0
  141. package/js/src/base/functions/io.js +24 -0
  142. package/js/src/bigone.js +10 -7
  143. package/js/src/binance.d.ts +2 -0
  144. package/js/src/binance.js +200 -202
  145. package/js/src/bingx.js +7 -7
  146. package/js/src/bitfinex.d.ts +2 -0
  147. package/js/src/bitfinex.js +71 -58
  148. package/js/src/bitflyer.js +2 -1
  149. package/js/src/bitget.js +16 -5
  150. package/js/src/bitmart.js +18 -10
  151. package/js/src/bitmex.js +8 -5
  152. package/js/src/bitopro.js +2 -2
  153. package/js/src/bitrue.js +4 -3
  154. package/js/src/bitso.js +7 -4
  155. package/js/src/bitstamp.js +7 -4
  156. package/js/src/bitteam.js +1 -1
  157. package/js/src/bittrade.js +2 -2
  158. package/js/src/bitvavo.d.ts +114 -21
  159. package/js/src/bitvavo.js +457 -34
  160. package/js/src/blofin.d.ts +1 -0
  161. package/js/src/blofin.js +28 -4
  162. package/js/src/bullish.js +6 -5
  163. package/js/src/bybit.d.ts +1 -1
  164. package/js/src/bybit.js +19 -17
  165. package/js/src/bybiteu.js +1 -0
  166. package/js/src/bydfi.js +1 -1
  167. package/js/src/cex.js +3 -3
  168. package/js/src/coinbase.d.ts +63 -56
  169. package/js/src/coinbase.js +75 -65
  170. package/js/src/coinbaseexchange.js +4 -3
  171. package/js/src/coinbaseinternational.d.ts +1 -1
  172. package/js/src/coinbaseinternational.js +17 -10
  173. package/js/src/coinex.d.ts +2 -1
  174. package/js/src/coinex.js +79 -77
  175. package/js/src/coinmetro.d.ts +1 -1
  176. package/js/src/coinmetro.js +1 -1
  177. package/js/src/coinsph.js +5 -5
  178. package/js/src/cryptocom.d.ts +1 -0
  179. package/js/src/cryptocom.js +52 -54
  180. package/js/src/cryptomus.d.ts +2 -1
  181. package/js/src/cryptomus.js +43 -39
  182. package/js/src/deepcoin.js +9 -5
  183. package/js/src/delta.d.ts +1 -0
  184. package/js/src/delta.js +53 -53
  185. package/js/src/deribit.d.ts +1 -0
  186. package/js/src/deribit.js +35 -35
  187. package/js/src/derive.d.ts +1 -0
  188. package/js/src/derive.js +31 -31
  189. package/js/src/digifinex.d.ts +1 -0
  190. package/js/src/digifinex.js +45 -45
  191. package/js/src/exmo.d.ts +1 -0
  192. package/js/src/exmo.js +104 -122
  193. package/js/src/extended.d.ts +554 -0
  194. package/js/src/extended.js +3490 -0
  195. package/js/src/foxbit.d.ts +1 -0
  196. package/js/src/foxbit.js +72 -76
  197. package/js/src/gate.d.ts +1 -0
  198. package/js/src/gate.js +53 -53
  199. package/js/src/gemini.d.ts +2 -1
  200. package/js/src/gemini.js +45 -45
  201. package/js/src/grvt.d.ts +1 -1
  202. package/js/src/grvt.js +17 -11
  203. package/js/src/hashkey.d.ts +1 -0
  204. package/js/src/hashkey.js +56 -58
  205. package/js/src/hibachi.d.ts +1 -1
  206. package/js/src/hibachi.js +1 -1
  207. package/js/src/hitbtc.d.ts +0 -1
  208. package/js/src/hitbtc.js +5 -14
  209. package/js/src/hollaex.d.ts +1 -0
  210. package/js/src/hollaex.js +51 -54
  211. package/js/src/htx.d.ts +1 -0
  212. package/js/src/htx.js +84 -72
  213. package/js/src/hyperliquid.d.ts +5 -4
  214. package/js/src/hyperliquid.js +60 -55
  215. package/js/src/indodax.js +4 -3
  216. package/js/src/kraken.d.ts +2 -1
  217. package/js/src/kraken.js +71 -71
  218. package/js/src/krakenfutures.js +2 -1
  219. package/js/src/kucoin.js +3 -2
  220. package/js/src/latoken.d.ts +1 -0
  221. package/js/src/latoken.js +30 -32
  222. package/js/src/lbank.d.ts +1 -0
  223. package/js/src/lbank.js +64 -60
  224. package/js/src/lighter.d.ts +2 -1
  225. package/js/src/lighter.js +36 -38
  226. package/js/src/luno.d.ts +1 -0
  227. package/js/src/luno.js +36 -44
  228. package/js/src/mercado.js +2 -1
  229. package/js/src/mexc.d.ts +4 -3
  230. package/js/src/mexc.js +72 -63
  231. package/js/src/modetrade.d.ts +1 -0
  232. package/js/src/modetrade.js +51 -53
  233. package/js/src/ndax.d.ts +1 -0
  234. package/js/src/ndax.js +35 -37
  235. package/js/src/okx.js +23 -5
  236. package/js/src/onetrading.d.ts +2 -1
  237. package/js/src/onetrading.js +21 -23
  238. package/js/src/p2b.js +8 -4
  239. package/js/src/paradex.js +3 -2
  240. package/js/src/phemex.d.ts +1 -0
  241. package/js/src/phemex.js +47 -47
  242. package/js/src/poloniex.js +19 -13
  243. package/js/src/pro/alpaca.js +1 -1
  244. package/js/src/pro/apex.js +11 -2
  245. package/js/src/pro/arkham.js +1 -1
  246. package/js/src/pro/aster.js +10 -9
  247. package/js/src/pro/backpack.js +1 -1
  248. package/js/src/pro/binance.d.ts +1 -1
  249. package/js/src/pro/binance.js +6 -6
  250. package/js/src/pro/bingx.js +7 -2
  251. package/js/src/pro/bitget.js +1 -1
  252. package/js/src/pro/bithumb.js +1 -1
  253. package/js/src/pro/bitmart.js +10 -0
  254. package/js/src/pro/bitmex.js +1 -1
  255. package/js/src/pro/bitstamp.js +1 -1
  256. package/js/src/pro/blockchaincom.js +1 -1
  257. package/js/src/pro/bybit.js +1 -1
  258. package/js/src/pro/cex.js +1 -1
  259. package/js/src/pro/coinex.js +1 -1
  260. package/js/src/pro/coinone.js +1 -1
  261. package/js/src/pro/cryptocom.js +3 -1
  262. package/js/src/pro/dydx.js +1 -1
  263. package/js/src/pro/exmo.js +1 -1
  264. package/js/src/pro/extended.d.ts +126 -0
  265. package/js/src/pro/extended.js +858 -0
  266. package/js/src/pro/gate.js +1 -1
  267. package/js/src/pro/grvt.js +8 -0
  268. package/js/src/pro/htx.d.ts +4 -4
  269. package/js/src/pro/htx.js +4 -4
  270. package/js/src/pro/independentreserve.js +1 -1
  271. package/js/src/pro/krakenfutures.d.ts +4 -4
  272. package/js/src/pro/krakenfutures.js +16 -4
  273. package/js/src/pro/kucoin.js +1 -1
  274. package/js/src/pro/luno.d.ts +1 -1
  275. package/js/src/pro/luno.js +3 -3
  276. package/js/src/pro/modetrade.d.ts +3 -3
  277. package/js/src/pro/modetrade.js +3 -3
  278. package/js/src/pro/okx.d.ts +4 -4
  279. package/js/src/pro/okx.js +4 -4
  280. package/js/src/pro/onetrading.js +1 -1
  281. package/js/src/pro/toobit.js +1 -1
  282. package/js/src/pro/weex.js +1 -1
  283. package/js/src/pro/woo.d.ts +4 -4
  284. package/js/src/pro/woo.js +4 -4
  285. package/js/src/pro/woofipro.d.ts +3 -3
  286. package/js/src/pro/woofipro.js +3 -3
  287. package/js/src/pro/xt.js +1 -1
  288. package/js/src/tokocrypto.js +1 -1
  289. package/js/src/toobit.d.ts +1 -1
  290. package/js/src/toobit.js +3 -3
  291. package/js/src/upbit.js +3 -3
  292. package/js/src/weex.d.ts +1 -0
  293. package/js/src/weex.js +57 -62
  294. package/js/src/whitebit.d.ts +1 -0
  295. package/js/src/whitebit.js +61 -63
  296. package/js/src/woo.d.ts +1 -0
  297. package/js/src/woo.js +66 -55
  298. package/js/src/woofipro.d.ts +1 -0
  299. package/js/src/woofipro.js +54 -48
  300. package/js/src/xt.js +3 -2
  301. package/js/src/yobit.js +4 -2
  302. package/js/src/zebpay.d.ts +2 -1
  303. package/js/src/zebpay.js +73 -75
  304. package/package.json +25 -11
  305. package/dist/cjs/src/gateio.js +0 -18
  306. package/dist/cjs/src/oxfun.js +0 -2931
  307. package/dist/cjs/src/pro/gateio.js +0 -18
  308. package/dist/cjs/src/pro/oxfun.js +0 -1113
  309. package/js/src/abstract/gateio.d.ts +0 -346
  310. package/js/src/abstract/gateio.js +0 -5
  311. package/js/src/abstract/oxfun.d.ts +0 -37
  312. package/js/src/gateio.d.ts +0 -4
  313. package/js/src/gateio.js +0 -11
  314. package/js/src/oxfun.d.ts +0 -442
  315. package/js/src/oxfun.js +0 -2924
  316. package/js/src/pro/gateio.d.ts +0 -4
  317. package/js/src/pro/gateio.js +0 -11
  318. package/js/src/pro/oxfun.d.ts +0 -234
  319. package/js/src/pro/oxfun.js +0 -1106
  320. /package/dist/cjs/src/abstract/{oxfun.js → extended.js} +0 -0
  321. /package/js/src/abstract/{oxfun.js → extended.js} +0 -0
@@ -731,6 +731,7 @@ class phemex extends phemex$1["default"] {
731
731
  // "1.0"
732
732
  contractSize = this.parseNumber(contractSizeString);
733
733
  }
734
+ const isLinear = !inverse;
734
735
  return this.safeMarketStructure({
735
736
  'id': id,
736
737
  'symbol': base + '/' + quote + ':' + settle,
@@ -748,7 +749,7 @@ class phemex extends phemex$1["default"] {
748
749
  'option': false,
749
750
  'active': status === 'Listed',
750
751
  'contract': true,
751
- 'linear': !inverse,
752
+ 'linear': isLinear,
752
753
  'inverse': inverse,
753
754
  'taker': this.parseNumber(this.fromEn(takerFeeRateEr, ratioScale)),
754
755
  'maker': this.parseNumber(this.fromEn(makerFeeRateEr, ratioScale)),
@@ -1143,50 +1144,48 @@ class phemex extends phemex$1["default"] {
1143
1144
  // }
1144
1145
  const data = this.safeValue(response, 'data', {});
1145
1146
  const currencies = this.safeValue(data, 'currencies', []);
1146
- const result = {};
1147
- for (let i = 0; i < currencies.length; i++) {
1148
- const currency = currencies[i];
1149
- const id = this.safeString(currency, 'currency');
1150
- const code = this.safeCurrencyCode(id);
1151
- const valueScaleString = this.safeString(currency, 'valueScale');
1152
- const valueScale = parseInt(valueScaleString);
1153
- const minValueEv = this.safeString(currency, 'minValueEv');
1154
- const maxValueEv = this.safeString(currency, 'maxValueEv');
1155
- let minAmount = undefined;
1156
- let maxAmount = undefined;
1157
- let precision = undefined;
1158
- if (valueScale !== undefined) {
1159
- const precisionString = this.parsePrecision(valueScaleString);
1160
- precision = this.parseNumber(precisionString);
1161
- minAmount = this.parseNumber(Precise["default"].stringMul(minValueEv, precisionString));
1162
- maxAmount = this.parseNumber(Precise["default"].stringMul(maxValueEv, precisionString));
1163
- }
1164
- result[code] = this.safeCurrencyStructure({
1165
- 'id': id,
1166
- 'info': currency,
1167
- 'code': code,
1168
- 'name': this.safeString(currency, 'name'),
1169
- 'active': this.safeString(currency, 'status') === 'Listed',
1170
- 'deposit': undefined,
1171
- 'withdraw': undefined,
1172
- 'fee': undefined,
1173
- 'precision': precision,
1174
- 'limits': {
1175
- 'amount': {
1176
- 'min': minAmount,
1177
- 'max': maxAmount,
1178
- },
1179
- 'withdraw': {
1180
- 'min': undefined,
1181
- 'max': undefined,
1182
- },
1147
+ return this.parseCurrencies(currencies);
1148
+ }
1149
+ parseCurrency(rawCurrency) {
1150
+ const id = this.safeString(rawCurrency, 'currency');
1151
+ const code = this.safeCurrencyCode(id);
1152
+ const valueScaleString = this.safeString(rawCurrency, 'valueScale');
1153
+ const valueScale = parseInt(valueScaleString);
1154
+ const minValueEv = this.safeString(rawCurrency, 'minValueEv');
1155
+ const maxValueEv = this.safeString(rawCurrency, 'maxValueEv');
1156
+ let minAmount = undefined;
1157
+ let maxAmount = undefined;
1158
+ let precision = undefined;
1159
+ if (valueScale !== undefined) {
1160
+ const precisionString = this.parsePrecision(valueScaleString);
1161
+ precision = this.parseNumber(precisionString);
1162
+ minAmount = this.parseNumber(Precise["default"].stringMul(minValueEv, precisionString));
1163
+ maxAmount = this.parseNumber(Precise["default"].stringMul(maxValueEv, precisionString));
1164
+ }
1165
+ return this.safeCurrencyStructure({
1166
+ 'id': id,
1167
+ 'info': rawCurrency,
1168
+ 'code': code,
1169
+ 'name': this.safeString(rawCurrency, 'name'),
1170
+ 'active': this.safeString(rawCurrency, 'status') === 'Listed',
1171
+ 'deposit': undefined,
1172
+ 'withdraw': undefined,
1173
+ 'fee': undefined,
1174
+ 'precision': precision,
1175
+ 'limits': {
1176
+ 'amount': {
1177
+ 'min': minAmount,
1178
+ 'max': maxAmount,
1183
1179
  },
1184
- 'valueScale': valueScale,
1185
- 'networks': undefined,
1186
- 'type': 'crypto',
1187
- });
1188
- }
1189
- return result;
1180
+ 'withdraw': {
1181
+ 'min': undefined,
1182
+ 'max': undefined,
1183
+ },
1184
+ },
1185
+ 'valueScale': valueScale,
1186
+ 'networks': undefined,
1187
+ 'type': 'crypto',
1188
+ });
1190
1189
  }
1191
1190
  customParseBidAsk(bidask, priceKey = 0, amountKey = 1, market = undefined) {
1192
1191
  if (market === undefined) {
@@ -3810,7 +3809,7 @@ class phemex extends phemex$1["default"] {
3810
3809
  'txid': txid,
3811
3810
  'timestamp': timestamp,
3812
3811
  'datetime': this.iso8601(timestamp),
3813
- 'network': this.networkIdToCode(networkId),
3812
+ 'network': this.networkIdToCode(networkId, code),
3814
3813
  'address': address,
3815
3814
  'addressTo': address,
3816
3815
  'addressFrom': undefined,
@@ -4667,11 +4666,12 @@ class phemex extends phemex$1["default"] {
4667
4666
  for (let i = 0; i < riskLimits.length; i++) {
4668
4667
  const tier = riskLimits[i];
4669
4668
  const maxNotional = this.safeInteger(tier, 'limit');
4669
+ const minNotionalResponse = minNotional; // java req
4670
4670
  tiers.push({
4671
4671
  'tier': this.sum(i, 1),
4672
4672
  'symbol': this.safeSymbol(marketId, market),
4673
4673
  'currency': market['settle'],
4674
- 'minNotional': minNotional,
4674
+ 'minNotional': minNotionalResponse,
4675
4675
  'maxNotional': maxNotional,
4676
4676
  'maintenanceMarginRate': this.safeString(tier, 'maintenanceMargin'),
4677
4677
  'maxLeverage': undefined,
@@ -5082,7 +5082,7 @@ class phemex extends phemex$1["default"] {
5082
5082
  [networkCode, params] = this.handleNetworkCodeAndParams(params);
5083
5083
  let networkId = undefined;
5084
5084
  if (networkCode !== undefined) {
5085
- networkId = this.networkCodeToId(networkCode);
5085
+ networkId = this.networkCodeToId(networkCode, code);
5086
5086
  }
5087
5087
  const stableCoins = this.safeValue(this.options, 'stableCoins');
5088
5088
  if (networkId === undefined) {
@@ -922,6 +922,7 @@ class poloniex extends poloniex$1["default"] {
922
922
  if (alias !== undefined) {
923
923
  type = 'future';
924
924
  }
925
+ const marketType = (type === 'future') ? 'future' : 'swap';
925
926
  return {
926
927
  'id': id,
927
928
  'symbol': symbol,
@@ -931,7 +932,7 @@ class poloniex extends poloniex$1["default"] {
931
932
  'baseId': baseId,
932
933
  'quoteId': quoteId,
933
934
  'settleId': settleId,
934
- 'type': (type === 'future') ? 'future' : 'swap',
935
+ 'type': marketType,
935
936
  'spot': false,
936
937
  'margin': false,
937
938
  'swap': type === 'swap',
@@ -2777,14 +2778,23 @@ class poloniex extends poloniex$1["default"] {
2777
2778
  async withdraw(code, amount, address, tag = undefined, params = {}) {
2778
2779
  [tag, params] = this.handleWithdrawTagAndParams(tag, params);
2779
2780
  this.checkAddress(address);
2780
- const [request, extraParams, currency, networkEntry] = this.prepareRequestForDepositAddress(code, params);
2781
- params = extraParams;
2782
- request['amount'] = this.currencyToPrecision(code, amount);
2783
- request['address'] = address;
2781
+ const currency = this.currency(code);
2782
+ const request = {
2783
+ 'coin': currency['id'],
2784
+ 'amount': this.currencyToPrecision(code, amount),
2785
+ 'address': address,
2786
+ };
2787
+ let networkCode = undefined;
2788
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
2789
+ if (networkCode === undefined) {
2790
+ // we need to know the network to find out the currency-junction
2791
+ throw new errors.ArgumentsRequired(this.id + ' withdraw requires a network parameter for ' + code + '.');
2792
+ }
2793
+ request['network'] = this.networkCodeToId(networkCode, code);
2784
2794
  if (tag !== undefined) {
2785
2795
  request['paymentId'] = tag;
2786
2796
  }
2787
- const response = await this.privatePostWalletsWithdraw(this.extend(request, params));
2797
+ const response = await this.privatePostV2WalletsWithdraw(this.extend(request, params));
2788
2798
  //
2789
2799
  // {
2790
2800
  // "response": "Withdrew 1.00000000 USDT.",
@@ -2792,11 +2802,7 @@ class poloniex extends poloniex$1["default"] {
2792
2802
  // "withdrawalNumber": 13449869
2793
2803
  // }
2794
2804
  //
2795
- const withdrawResponse = {
2796
- 'response': response,
2797
- 'withdrawNetworkEntry': networkEntry,
2798
- };
2799
- return this.parseTransaction(withdrawResponse, currency);
2805
+ return this.parseTransaction(response, currency);
2800
2806
  }
2801
2807
  async fetchTransactionsHelper(code = undefined, since = undefined, limit = undefined, params = {}) {
2802
2808
  await this.loadMarkets();
@@ -3009,7 +3015,7 @@ class poloniex extends poloniex$1["default"] {
3009
3015
  for (let j = 0; j < childChains.length; j++) {
3010
3016
  let networkId = childChains[j];
3011
3017
  networkId = networkId.replace(code, '');
3012
- const networkCode = this.networkIdToCode(networkId);
3018
+ const networkCode = this.networkIdToCode(networkId, currency['code']);
3013
3019
  const networkInfo = this.safeValue(response, networkId);
3014
3020
  const networkObject = {};
3015
3021
  const withdrawFee = this.safeNumber(networkInfo, 'withdrawalFee');
@@ -3045,7 +3051,7 @@ class poloniex extends poloniex$1["default"] {
3045
3051
  };
3046
3052
  depositWithdrawFee['withdraw'] = withdrawResult;
3047
3053
  depositWithdrawFee['deposit'] = depositResult;
3048
- const networkCode = this.networkIdToCode(networkId);
3054
+ const networkCode = this.networkIdToCode(networkId, this.safeString(currency, 'code'));
3049
3055
  depositWithdrawFee['networks'][networkCode] = {
3050
3056
  'withdraw': withdrawResult,
3051
3057
  'deposit': depositResult,
@@ -267,7 +267,7 @@ class alpaca extends alpaca$1["default"] {
267
267
  client.resolve(orderbook, messageHash);
268
268
  }
269
269
  handleDelta(bookside, delta) {
270
- const bidAsk = this.parseBidAsk(delta, 'p', 's');
270
+ const bidAsk = this.parseOrderBookBidAsk(delta, 'p', 's');
271
271
  bookside.storeArray(bidAsk);
272
272
  }
273
273
  handleDeltas(bookside, deltas) {
@@ -341,7 +341,7 @@ class apex extends apex$1["default"] {
341
341
  client.resolve(orderbook, messageHash);
342
342
  }
343
343
  handleDelta(bookside, delta) {
344
- const bidAsk = this.parseBidAsk(delta, 0, 1);
344
+ const bidAsk = this.parseOrderBookBidAsk(delta, 0, 1);
345
345
  bookside.storeArray(bidAsk);
346
346
  }
347
347
  handleDeltas(bookside, deltas) {
@@ -767,7 +767,7 @@ class apex extends apex$1["default"] {
767
767
  async loadPositionsSnapshot(client, messageHash) {
768
768
  // as only one ws channel gives positions for all types, for snapshot must load all positions
769
769
  const fetchFunctions = [
770
- this.fetchPositions(undefined),
770
+ this.fetchPositions(),
771
771
  ];
772
772
  const promises = await Promise.all(fetchFunctions);
773
773
  this.positions = new Cache.ArrayCacheBySymbolBySide();
@@ -937,6 +937,15 @@ class apex extends apex$1["default"] {
937
937
  const ret_msg = this.safeString(message, 'ret_msg');
938
938
  const request = this.safeValue(message, 'request', {});
939
939
  const op = this.safeString(request, 'op');
940
+ // Benign re-subscribe notice (same shape as bitmart 90008 /
941
+ // krakenfutures "Already subscribed"): the original subscription
942
+ // is still active and delivering data on this socket. Without
943
+ // this short-circuit the catch-clause's `client.reject(error,
944
+ // messageHash)` rejects every in-flight future on the connection
945
+ // because apex doesn't echo a `reqId` on these warnings.
946
+ if (ret_msg !== undefined && ret_msg.indexOf('already subscribed') >= 0) {
947
+ return false;
948
+ }
940
949
  if (op === 'auth') {
941
950
  throw new errors.AuthenticationError('Authentication failed: ' + ret_msg);
942
951
  }
@@ -297,7 +297,7 @@ class arkham extends arkham$1["default"] {
297
297
  client.resolve(this.orderbooks[symbol], messageHash);
298
298
  }
299
299
  handleDelta(bookside, delta) {
300
- const bidAsk = this.parseBidAsk(delta, 'price', 'size');
300
+ const bidAsk = this.parseOrderBookBidAsk(delta, 'price', 'size');
301
301
  bookside.storeArray(bidAsk);
302
302
  }
303
303
  /**
@@ -377,13 +377,11 @@ class aster extends aster$1["default"] {
377
377
  }
378
378
  parseWsTicker(message, marketType) {
379
379
  const event = this.safeString(message, 'e');
380
- const part = event.split('@');
381
- const channel = this.safeString(part, 1);
382
380
  const marketId = this.safeString(message, 's');
383
381
  const timestamp = this.safeInteger(message, 'E');
384
382
  const market = this.safeMarket(marketId, undefined, undefined, marketType);
385
383
  const last = this.safeString(message, 'c');
386
- if (channel === 'markPriceUpdate') {
384
+ if (event === 'markPriceUpdate') {
387
385
  return this.safeTicker({
388
386
  'symbol': market['symbol'],
389
387
  'timestamp': timestamp,
@@ -1203,7 +1201,12 @@ class aster extends aster$1["default"] {
1203
1201
  return;
1204
1202
  }
1205
1203
  try {
1206
- await this.sapiPrivatePutV3ListenKey(); // extend the expiry
1204
+ if (type === 'spot') {
1205
+ await this.sapiPrivatePutV3ListenKey(); // extend the expiry
1206
+ }
1207
+ else {
1208
+ await this.fapiPrivatePutV3ListenKey(); // extend the expiry
1209
+ }
1207
1210
  }
1208
1211
  catch (error) {
1209
1212
  const url = this.urls['api']['ws']['private'][type] + '/' + listenKey;
@@ -1880,13 +1883,11 @@ class aster extends aster$1["default"] {
1880
1883
  const messageInner = this.safeDict(message, 'data', message); // can be either wrapped in 'data' or full object itself
1881
1884
  const event = this.safeString(messageInner, 'e');
1882
1885
  const methods = {
1883
- 'ticker': this.handleTicker,
1886
+ '24hrTicker': this.handleTicker,
1884
1887
  'aggTrade': this.handleTrade,
1885
- 'depth5': this.handleOrderBook,
1886
- 'depth10': this.handleOrderBook,
1887
- 'depth20': this.handleOrderBook,
1888
+ 'depthUpdate': this.handleOrderBook,
1888
1889
  'kline': this.handleOHLCV,
1889
- 'markPrice': this.handleTicker,
1890
+ 'markPriceUpdate': this.handleTicker,
1890
1891
  'bookTicker': this.handleBidAsk,
1891
1892
  'outboundAccountPosition': this.handleBalance,
1892
1893
  'ACCOUNT_UPDATE': this.handleBalanceAndPosition,
@@ -894,7 +894,7 @@ class backpack extends backpack$1["default"] {
894
894
  }
895
895
  handleBidAsks(bookSide, bidAsks) {
896
896
  for (let i = 0; i < bidAsks.length; i++) {
897
- const bidAsk = this.parseBidAsk(bidAsks[i]);
897
+ const bidAsk = this.parseOrderBookBidAsk(bidAsks[i]);
898
898
  bookSide.storeArray(bidAsk);
899
899
  }
900
900
  }
@@ -1504,7 +1504,7 @@ class binance extends binance$1["default"] {
1504
1504
  }
1505
1505
  const isSpot = (type === 'spot');
1506
1506
  let timezone = undefined;
1507
- [timezone, params] = this.handleParamString(params, 'timezone', undefined);
1507
+ [timezone, params] = this.handleParamString(params, 'timezone');
1508
1508
  const isUtc8 = (timezone !== undefined) && ((timezone === '+08:00') || Precise["default"].stringEq(timezone, '8'));
1509
1509
  const rawHashes = [];
1510
1510
  const messageHashes = [];
@@ -1569,7 +1569,7 @@ class binance extends binance$1["default"] {
1569
1569
  }
1570
1570
  const isSpot = (type === 'spot');
1571
1571
  let timezone = undefined;
1572
- [timezone, params] = this.handleParamString(params, 'timezone', undefined);
1572
+ [timezone, params] = this.handleParamString(params, 'timezone');
1573
1573
  const isUtc8 = (timezone !== undefined) && ((timezone === '+08:00') || Precise["default"].stringEq(timezone, '8'));
1574
1574
  const rawHashes = [];
1575
1575
  const subMessageHashes = [];
@@ -2244,7 +2244,7 @@ class binance extends binance$1["default"] {
2244
2244
  // "status":200,
2245
2245
  // "result":{
2246
2246
  // "symbol":"BTCUSDT",
2247
- // "price":"73178.50",
2247
+ // "price":"73178.60",
2248
2248
  // "time":1712527052374
2249
2249
  // }
2250
2250
  // }
@@ -2407,7 +2407,7 @@ class binance extends binance$1["default"] {
2407
2407
  /**
2408
2408
  * @name binance#ensureUserDataStreamWsSubscribeSignature
2409
2409
  * @description watches best bid & ask for symbols
2410
- * @param marketType {string} only support on 'spot'
2410
+ * @param {string} [marketType] only supports 'spot'
2411
2411
  * @see {@link https://developers.binance.com/docs/binance-spot-api-docs/websocket-api/user-data-stream-requests#subscribe-to-user-data-stream-through-signature-subscription-user_data Binance User Data Stream Documentation}
2412
2412
  * @returns Promise<number> The subscription ID for the user data stream
2413
2413
  */
@@ -3679,8 +3679,8 @@ class binance extends binance$1["default"] {
3679
3679
  await this.loadMarkets();
3680
3680
  const market = this.market(symbol);
3681
3681
  const type = this.getMarketType('fetchOpenOrdersWs', market, params);
3682
- if (type !== 'spot' && type !== 'future') {
3683
- throw new errors.BadRequest(this.id + ' fetchOpenOrdersWs only supports spot or swap markets');
3682
+ if (type !== 'spot') {
3683
+ throw new errors.BadRequest(this.id + ' fetchOpenOrdersWs only supports spot markets');
3684
3684
  }
3685
3685
  const url = this.urls['api']['ws']['ws-api'][type];
3686
3686
  const requestId = this.requestId(url);
@@ -696,7 +696,9 @@ class bingx extends bingx$1["default"] {
696
696
  // const limit = [ 5, 10, 20, 50, 100 ]
697
697
  const subscriptionHash = dataType;
698
698
  const subscription = client.subscriptions[subscriptionHash];
699
- const limit = this.safeInteger(subscription, 'limit');
699
+ // see handleOHLCV — subscription.limit may be missing for non-orderbook callers;
700
+ // default to a reasonable depth instead of throwing NPE in the Java port.
701
+ const limit = this.safeInteger(subscription, 'limit', 100);
700
702
  this.orderbooks[symbol] = this.orderBook({}, limit);
701
703
  }
702
704
  orderbook = this.orderbooks[symbol];
@@ -842,7 +844,10 @@ class bingx extends bingx$1["default"] {
842
844
  if (this.safeValue(this.ohlcvs[symbol], rawTimeframe) === undefined) {
843
845
  const subscriptionHash = dataType;
844
846
  const subscription = client.subscriptions[subscriptionHash];
845
- const limit = this.safeInteger(subscription, 'limit');
847
+ // subscription.limit is only set when watchOHLCV registers the subscription;
848
+ // when handleMessage routes a non-OHLCV-originated subscription here (or the
849
+ // subscription dict was reset on reconnect), fall back to the OHLCVLimit option.
850
+ const limit = this.safeInteger(subscription, 'limit', this.safeInteger(this.options, 'OHLCVLimit', 1000));
846
851
  this.ohlcvs[symbol][unifiedTimeframe] = new Cache.ArrayCacheByTimestamp(limit);
847
852
  }
848
853
  const stored = this.ohlcvs[symbol][unifiedTimeframe];
@@ -942,7 +942,7 @@ class bitget extends bitget$1["default"] {
942
942
  client.reject(error, messageHash);
943
943
  }
944
944
  handleDelta(bookside, delta) {
945
- const bidAsk = this.parseBidAsk(delta, 0, 1);
945
+ const bidAsk = this.parseOrderBookBidAsk(delta, 0, 1);
946
946
  // we store the string representations in the orderbook for checksum calculation
947
947
  // this simplifies the code for generating checksums as we do not need to do any complex number transformations
948
948
  bidAsk.push(delta);
@@ -252,7 +252,7 @@ class bithumb extends bithumb$1["default"] {
252
252
  //
253
253
  const sideId = this.safeString(delta, 'orderType');
254
254
  const side = (sideId === 'bid') ? 'bids' : 'asks';
255
- const bidAsk = this.parseBidAsk(delta, 'price', 'quantity');
255
+ const bidAsk = this.parseOrderBookBidAsk(delta, 'price', 'quantity');
256
256
  const orderbookSide = orderbook[side];
257
257
  orderbookSide.storeArray(bidAsk);
258
258
  }
@@ -1874,6 +1874,16 @@ class bitmart extends bitmart$1["default"] {
1874
1874
  //
1875
1875
  const errorCode = this.safeString(message, 'errorCode');
1876
1876
  const error = this.safeString(message, 'error');
1877
+ // Duplicate-subscription notice errorCode 90008: bitmart's WS rejects
1878
+ // a re-subscribe attempt on a topic that's already active on this
1879
+ // connection, but the original subscription keeps delivering data —
1880
+ // so treat it as benign. Without this short-circuit, the generic
1881
+ // client.reject below kills every unrelated in-flight future —
1882
+ // e.g. a watchOHLCV waiting on its kline subscription gets rejected
1883
+ // by an orderbook 90008 raised on the same socket.
1884
+ if (errorCode === '90008') {
1885
+ return false;
1886
+ }
1877
1887
  try {
1878
1888
  if (errorCode !== undefined || error !== undefined) {
1879
1889
  const feedback = this.id + ' ' + this.json(message);
@@ -1595,7 +1595,7 @@ class bitmex extends bitmex$1["default"] {
1595
1595
  if (!(marketId in numUpdatesByMarketId)) {
1596
1596
  numUpdatesByMarketId[marketId] = 0;
1597
1597
  }
1598
- numUpdatesByMarketId[marketId] = this.sum(numUpdatesByMarketId, 1);
1598
+ numUpdatesByMarketId[marketId] = this.sum(numUpdatesByMarketId[marketId], 1);
1599
1599
  const market = this.safeMarket(marketId);
1600
1600
  const symbol = market['symbol'];
1601
1601
  const orderbook = this.orderbooks[symbol];
@@ -135,7 +135,7 @@ class bitstamp extends bitstamp$1["default"] {
135
135
  }
136
136
  handleBidAsks(bookSide, bidAsks) {
137
137
  for (let i = 0; i < bidAsks.length; i++) {
138
- const bidAsk = this.parseBidAsk(bidAsks[i]);
138
+ const bidAsk = this.parseOrderBookBidAsk(bidAsks[i]);
139
139
  bookSide.storeArray(bidAsk);
140
140
  }
141
141
  }
@@ -711,7 +711,7 @@ class blockchaincom extends blockchaincom$1["default"] {
711
711
  client.resolve(orderbook, messageHash);
712
712
  }
713
713
  handleDelta(bookside, delta) {
714
- const bookArray = this.parseBidAsk(delta, 'px', 'qty', 'num');
714
+ const bookArray = this.parseOrderBookBidAsk(delta, 'px', 'qty', 'num');
715
715
  bookside.storeArray(bookArray);
716
716
  }
717
717
  handleDeltas(bookside, deltas) {
@@ -1024,7 +1024,7 @@ class bybit extends bybit$1["default"] {
1024
1024
  }
1025
1025
  }
1026
1026
  handleDelta(bookside, delta) {
1027
- const bidAsk = this.parseBidAsk(delta, 0, 1);
1027
+ const bidAsk = this.parseOrderBookBidAsk(delta, 0, 1);
1028
1028
  bookside.storeArray(bidAsk);
1029
1029
  }
1030
1030
  handleDeltas(bookside, deltas) {
@@ -1034,7 +1034,7 @@ class cex extends cex$1["default"] {
1034
1034
  client.resolve(storedOrderBook, messageHash);
1035
1035
  }
1036
1036
  handleDelta(bookside, delta) {
1037
- const bidAsk = this.parseBidAsk(delta, 0, 1);
1037
+ const bidAsk = this.parseOrderBookBidAsk(delta, 0, 1);
1038
1038
  bookside.storeArray(bidAsk);
1039
1039
  }
1040
1040
  handleDeltas(bookside, deltas) {
@@ -814,7 +814,7 @@ class coinex extends coinex$1["default"] {
814
814
  return await this.watchOrderBookForSymbols([symbol], limit, params);
815
815
  }
816
816
  handleDelta(bookside, delta) {
817
- const bidAsk = this.parseBidAsk(delta, 0, 1);
817
+ const bidAsk = this.parseOrderBookBidAsk(delta, 0, 1);
818
818
  bookside.storeArray(bidAsk);
819
819
  }
820
820
  handleDeltas(bookside, deltas) {
@@ -126,7 +126,7 @@ class coinone extends coinone$1["default"] {
126
126
  client.resolve(orderbook, messageHash);
127
127
  }
128
128
  handleDelta(bookside, delta) {
129
- const bidAsk = this.parseBidAsk(delta, 'price', 'qty');
129
+ const bidAsk = this.parseOrderBookBidAsk(delta, 'price', 'qty');
130
130
  bookside.storeArray(bidAsk);
131
131
  }
132
132
  /**
@@ -1039,7 +1039,9 @@ class cryptocom extends cryptocom$1["default"] {
1039
1039
  }
1040
1040
  client.resolve(this.balance, messageHash);
1041
1041
  const messageHashRequest = this.safeString(message, 'id');
1042
- client.resolve(this.balance, messageHashRequest);
1042
+ if (messageHashRequest !== undefined) {
1043
+ client.resolve(this.balance, messageHashRequest);
1044
+ }
1043
1045
  }
1044
1046
  /**
1045
1047
  * @method
@@ -245,7 +245,7 @@ class dydx extends dydx$1["default"] {
245
245
  bookside.store(price, amount);
246
246
  }
247
247
  else {
248
- const bidAsk = this.parseBidAsk(delta, 'price', 'size');
248
+ const bidAsk = this.parseOrderBookBidAsk(delta, 'price', 'size');
249
249
  bookside.storeArray(bidAsk);
250
250
  }
251
251
  }
@@ -566,7 +566,7 @@ class exmo extends exmo$1["default"] {
566
566
  client.resolve(orderbook, messageHash);
567
567
  }
568
568
  handleDelta(bookside, delta) {
569
- const bidAsk = this.parseBidAsk(delta, 0, 1);
569
+ const bidAsk = this.parseOrderBookBidAsk(delta, 0, 1);
570
570
  bookside.storeArray(bidAsk);
571
571
  }
572
572
  handleDeltas(bookside, deltas) {