ccxt 4.5.56 → 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 (261) hide show
  1. package/README.md +10 -9
  2. package/dist/ccxt.browser.min.js +10 -10
  3. package/dist/cjs/ccxt.js +6 -11
  4. package/dist/cjs/src/apex.js +1 -1
  5. package/dist/cjs/src/arkham.js +3 -3
  6. package/dist/cjs/src/ascendex.js +2 -2
  7. package/dist/cjs/src/aster.js +7 -4
  8. package/dist/cjs/src/backpack.js +4 -4
  9. package/dist/cjs/src/base/Exchange.js +69 -32
  10. package/dist/cjs/src/base/functions/io.js +25 -0
  11. package/dist/cjs/src/base/functions.js +1 -0
  12. package/dist/cjs/src/bigone.js +3 -3
  13. package/dist/cjs/src/binance.js +192 -194
  14. package/dist/cjs/src/bingx.js +3 -3
  15. package/dist/cjs/src/bitfinex.js +71 -58
  16. package/dist/cjs/src/bitget.js +2 -2
  17. package/dist/cjs/src/bitmart.js +13 -6
  18. package/dist/cjs/src/bitmex.js +1 -1
  19. package/dist/cjs/src/bitopro.js +1 -1
  20. package/dist/cjs/src/bitrue.js +2 -2
  21. package/dist/cjs/src/bitso.js +1 -1
  22. package/dist/cjs/src/bitstamp.js +2 -1
  23. package/dist/cjs/src/bitteam.js +1 -1
  24. package/dist/cjs/src/bittrade.js +0 -1
  25. package/dist/cjs/src/bitvavo.js +457 -34
  26. package/dist/cjs/src/blofin.js +26 -3
  27. package/dist/cjs/src/bullish.js +6 -5
  28. package/dist/cjs/src/bydfi.js +1 -1
  29. package/dist/cjs/src/cex.js +3 -3
  30. package/dist/cjs/src/coinbase.js +75 -65
  31. package/dist/cjs/src/coinbaseexchange.js +2 -2
  32. package/dist/cjs/src/coinbaseinternational.js +2 -1
  33. package/dist/cjs/src/coinex.js +74 -74
  34. package/dist/cjs/src/coinmetro.js +1 -1
  35. package/dist/cjs/src/coinsph.js +1 -1
  36. package/dist/cjs/src/cryptocom.js +46 -48
  37. package/dist/cjs/src/cryptomus.js +43 -39
  38. package/dist/cjs/src/deepcoin.js +3 -2
  39. package/dist/cjs/src/delta.js +51 -52
  40. package/dist/cjs/src/deribit.js +31 -33
  41. package/dist/cjs/src/derive.js +26 -28
  42. package/dist/cjs/src/digifinex.js +43 -44
  43. package/dist/cjs/src/exmo.js +92 -83
  44. package/dist/cjs/src/extended.js +3497 -0
  45. package/dist/cjs/src/foxbit.js +71 -75
  46. package/dist/cjs/src/gate.js +53 -53
  47. package/dist/cjs/src/gemini.js +41 -43
  48. package/dist/cjs/src/grvt.js +4 -4
  49. package/dist/cjs/src/hashkey.js +52 -54
  50. package/dist/cjs/src/hitbtc.js +3 -13
  51. package/dist/cjs/src/hollaex.js +51 -54
  52. package/dist/cjs/src/htx.js +75 -67
  53. package/dist/cjs/src/hyperliquid.js +41 -42
  54. package/dist/cjs/src/indodax.js +2 -2
  55. package/dist/cjs/src/kraken.js +57 -58
  56. package/dist/cjs/src/kucoin.js +3 -2
  57. package/dist/cjs/src/latoken.js +30 -32
  58. package/dist/cjs/src/lbank.js +56 -56
  59. package/dist/cjs/src/lighter.js +35 -37
  60. package/dist/cjs/src/luno.js +35 -43
  61. package/dist/cjs/src/mexc.js +48 -49
  62. package/dist/cjs/src/modetrade.js +50 -52
  63. package/dist/cjs/src/ndax.js +35 -37
  64. package/dist/cjs/src/okx.js +17 -2
  65. package/dist/cjs/src/onetrading.js +21 -23
  66. package/dist/cjs/src/phemex.js +43 -45
  67. package/dist/cjs/src/poloniex.js +17 -12
  68. package/dist/cjs/src/pro/alpaca.js +1 -1
  69. package/dist/cjs/src/pro/apex.js +1 -1
  70. package/dist/cjs/src/pro/arkham.js +1 -1
  71. package/dist/cjs/src/pro/backpack.js +1 -1
  72. package/dist/cjs/src/pro/binance.js +3 -3
  73. package/dist/cjs/src/pro/bitget.js +1 -1
  74. package/dist/cjs/src/pro/bithumb.js +1 -1
  75. package/dist/cjs/src/pro/bitstamp.js +1 -1
  76. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  77. package/dist/cjs/src/pro/bybit.js +1 -1
  78. package/dist/cjs/src/pro/cex.js +1 -1
  79. package/dist/cjs/src/pro/coinex.js +1 -1
  80. package/dist/cjs/src/pro/coinone.js +1 -1
  81. package/dist/cjs/src/pro/cryptocom.js +3 -1
  82. package/dist/cjs/src/pro/dydx.js +1 -1
  83. package/dist/cjs/src/pro/exmo.js +1 -1
  84. package/dist/cjs/src/pro/extended.js +865 -0
  85. package/dist/cjs/src/pro/gate.js +1 -1
  86. package/dist/cjs/src/pro/independentreserve.js +1 -1
  87. package/dist/cjs/src/pro/kucoin.js +1 -1
  88. package/dist/cjs/src/pro/luno.js +3 -3
  89. package/dist/cjs/src/pro/onetrading.js +1 -1
  90. package/dist/cjs/src/pro/toobit.js +1 -1
  91. package/dist/cjs/src/pro/weex.js +1 -1
  92. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +7 -7
  93. package/dist/cjs/src/tokocrypto.js +1 -1
  94. package/dist/cjs/src/toobit.js +2 -2
  95. package/dist/cjs/src/upbit.js +3 -3
  96. package/dist/cjs/src/weex.js +57 -62
  97. package/dist/cjs/src/whitebit.js +61 -63
  98. package/dist/cjs/src/woo.js +65 -54
  99. package/dist/cjs/src/woofipro.js +53 -47
  100. package/dist/cjs/src/xt.js +1 -1
  101. package/dist/cjs/src/zebpay.js +70 -72
  102. package/js/ccxt.d.ts +8 -14
  103. package/js/ccxt.js +6 -10
  104. package/js/src/abstract/bitvavo.d.ts +15 -7
  105. package/js/src/abstract/extended.d.ts +58 -0
  106. package/js/src/apex.js +1 -1
  107. package/js/src/arkham.js +3 -3
  108. package/js/src/ascendex.js +2 -2
  109. package/js/src/aster.js +7 -4
  110. package/js/src/backpack.js +4 -4
  111. package/js/src/base/Exchange.d.ts +10 -6
  112. package/js/src/base/Exchange.js +69 -32
  113. package/js/src/base/functions/io.d.ts +7 -0
  114. package/js/src/base/functions/io.js +24 -0
  115. package/js/src/bigone.js +3 -3
  116. package/js/src/binance.d.ts +2 -0
  117. package/js/src/binance.js +196 -198
  118. package/js/src/bingx.js +3 -3
  119. package/js/src/bitfinex.d.ts +2 -0
  120. package/js/src/bitfinex.js +71 -58
  121. package/js/src/bitget.js +2 -2
  122. package/js/src/bitmart.js +13 -6
  123. package/js/src/bitmex.js +1 -1
  124. package/js/src/bitopro.js +1 -1
  125. package/js/src/bitrue.js +2 -2
  126. package/js/src/bitso.js +1 -1
  127. package/js/src/bitstamp.js +2 -1
  128. package/js/src/bitteam.js +1 -1
  129. package/js/src/bittrade.js +0 -1
  130. package/js/src/bitvavo.d.ts +114 -21
  131. package/js/src/bitvavo.js +457 -34
  132. package/js/src/blofin.d.ts +1 -0
  133. package/js/src/blofin.js +26 -3
  134. package/js/src/bullish.js +6 -5
  135. package/js/src/bydfi.js +1 -1
  136. package/js/src/cex.js +3 -3
  137. package/js/src/coinbase.d.ts +63 -56
  138. package/js/src/coinbase.js +75 -65
  139. package/js/src/coinbaseexchange.js +2 -2
  140. package/js/src/coinbaseinternational.js +2 -1
  141. package/js/src/coinex.d.ts +1 -0
  142. package/js/src/coinex.js +74 -74
  143. package/js/src/coinmetro.d.ts +1 -1
  144. package/js/src/coinmetro.js +1 -1
  145. package/js/src/coinsph.js +1 -1
  146. package/js/src/cryptocom.d.ts +1 -0
  147. package/js/src/cryptocom.js +46 -48
  148. package/js/src/cryptomus.d.ts +2 -1
  149. package/js/src/cryptomus.js +43 -39
  150. package/js/src/deepcoin.js +3 -2
  151. package/js/src/delta.d.ts +1 -0
  152. package/js/src/delta.js +51 -52
  153. package/js/src/deribit.d.ts +1 -0
  154. package/js/src/deribit.js +31 -33
  155. package/js/src/derive.d.ts +1 -0
  156. package/js/src/derive.js +26 -28
  157. package/js/src/digifinex.d.ts +1 -0
  158. package/js/src/digifinex.js +43 -44
  159. package/js/src/exmo.d.ts +1 -0
  160. package/js/src/exmo.js +92 -83
  161. package/js/src/extended.d.ts +554 -0
  162. package/js/src/extended.js +3490 -0
  163. package/js/src/foxbit.d.ts +1 -0
  164. package/js/src/foxbit.js +71 -75
  165. package/js/src/gate.d.ts +1 -0
  166. package/js/src/gate.js +53 -53
  167. package/js/src/gemini.d.ts +2 -1
  168. package/js/src/gemini.js +41 -43
  169. package/js/src/grvt.js +4 -4
  170. package/js/src/hashkey.d.ts +1 -0
  171. package/js/src/hashkey.js +52 -54
  172. package/js/src/hitbtc.d.ts +0 -1
  173. package/js/src/hitbtc.js +3 -13
  174. package/js/src/hollaex.d.ts +1 -0
  175. package/js/src/hollaex.js +51 -54
  176. package/js/src/htx.d.ts +1 -0
  177. package/js/src/htx.js +75 -67
  178. package/js/src/hyperliquid.d.ts +1 -0
  179. package/js/src/hyperliquid.js +41 -42
  180. package/js/src/indodax.js +2 -2
  181. package/js/src/kraken.d.ts +2 -1
  182. package/js/src/kraken.js +57 -58
  183. package/js/src/kucoin.js +3 -2
  184. package/js/src/latoken.d.ts +1 -0
  185. package/js/src/latoken.js +30 -32
  186. package/js/src/lbank.d.ts +1 -0
  187. package/js/src/lbank.js +56 -56
  188. package/js/src/lighter.d.ts +1 -0
  189. package/js/src/lighter.js +35 -37
  190. package/js/src/luno.d.ts +1 -0
  191. package/js/src/luno.js +35 -43
  192. package/js/src/mexc.d.ts +2 -1
  193. package/js/src/mexc.js +48 -49
  194. package/js/src/modetrade.d.ts +1 -0
  195. package/js/src/modetrade.js +50 -52
  196. package/js/src/ndax.d.ts +1 -0
  197. package/js/src/ndax.js +35 -37
  198. package/js/src/okx.js +17 -2
  199. package/js/src/onetrading.d.ts +2 -1
  200. package/js/src/onetrading.js +21 -23
  201. package/js/src/phemex.d.ts +1 -0
  202. package/js/src/phemex.js +43 -45
  203. package/js/src/poloniex.js +17 -12
  204. package/js/src/pro/alpaca.js +1 -1
  205. package/js/src/pro/apex.js +1 -1
  206. package/js/src/pro/arkham.js +1 -1
  207. package/js/src/pro/backpack.js +1 -1
  208. package/js/src/pro/binance.js +3 -3
  209. package/js/src/pro/bitget.js +1 -1
  210. package/js/src/pro/bithumb.js +1 -1
  211. package/js/src/pro/bitstamp.js +1 -1
  212. package/js/src/pro/blockchaincom.js +1 -1
  213. package/js/src/pro/bybit.js +1 -1
  214. package/js/src/pro/cex.js +1 -1
  215. package/js/src/pro/coinex.js +1 -1
  216. package/js/src/pro/coinone.js +1 -1
  217. package/js/src/pro/cryptocom.js +3 -1
  218. package/js/src/pro/dydx.js +1 -1
  219. package/js/src/pro/exmo.js +1 -1
  220. package/js/src/pro/extended.d.ts +126 -0
  221. package/js/src/pro/extended.js +858 -0
  222. package/js/src/pro/gate.js +1 -1
  223. package/js/src/pro/independentreserve.js +1 -1
  224. package/js/src/pro/kucoin.js +1 -1
  225. package/js/src/pro/luno.d.ts +1 -1
  226. package/js/src/pro/luno.js +3 -3
  227. package/js/src/pro/onetrading.js +1 -1
  228. package/js/src/pro/toobit.js +1 -1
  229. package/js/src/pro/weex.js +1 -1
  230. package/js/src/tokocrypto.js +1 -1
  231. package/js/src/toobit.js +2 -2
  232. package/js/src/upbit.js +3 -3
  233. package/js/src/weex.d.ts +1 -0
  234. package/js/src/weex.js +57 -62
  235. package/js/src/whitebit.d.ts +1 -0
  236. package/js/src/whitebit.js +61 -63
  237. package/js/src/woo.d.ts +1 -0
  238. package/js/src/woo.js +65 -54
  239. package/js/src/woofipro.d.ts +1 -0
  240. package/js/src/woofipro.js +53 -47
  241. package/js/src/xt.js +1 -1
  242. package/js/src/zebpay.d.ts +2 -1
  243. package/js/src/zebpay.js +70 -72
  244. package/package.json +7 -7
  245. package/dist/cjs/src/gateio.js +0 -18
  246. package/dist/cjs/src/oxfun.js +0 -2933
  247. package/dist/cjs/src/pro/gateio.js +0 -18
  248. package/dist/cjs/src/pro/oxfun.js +0 -1113
  249. package/js/src/abstract/gateio.d.ts +0 -346
  250. package/js/src/abstract/gateio.js +0 -5
  251. package/js/src/abstract/oxfun.d.ts +0 -37
  252. package/js/src/gateio.d.ts +0 -4
  253. package/js/src/gateio.js +0 -11
  254. package/js/src/oxfun.d.ts +0 -442
  255. package/js/src/oxfun.js +0 -2926
  256. package/js/src/pro/gateio.d.ts +0 -4
  257. package/js/src/pro/gateio.js +0 -11
  258. package/js/src/pro/oxfun.d.ts +0 -234
  259. package/js/src/pro/oxfun.js +0 -1106
  260. /package/dist/cjs/src/abstract/{oxfun.js → extended.js} +0 -0
  261. /package/js/src/abstract/{oxfun.js → extended.js} +0 -0
@@ -730,90 +730,88 @@ class coinex extends coinex$1["default"] {
730
730
  // }
731
731
  //
732
732
  const data = this.safeList(response, 'data', []);
733
- const result = {};
734
- for (let i = 0; i < data.length; i++) {
735
- const coin = data[i];
736
- const asset = this.safeDict(coin, 'asset', {});
737
- const chains = this.safeList(coin, 'chains', []);
738
- const currencyId = this.safeString(asset, 'ccy');
739
- if (currencyId === undefined) {
740
- continue; // coinex returns empty structures for some reason
741
- }
742
- const code = this.safeCurrencyCode(currencyId);
743
- const canDeposit = this.safeBool(asset, 'deposit_enabled');
744
- const canWithdraw = this.safeBool(asset, 'withdraw_enabled');
745
- const firstChain = this.safeDict(chains, 0, {});
746
- const firstPrecisionString = this.parsePrecision(this.safeString(firstChain, 'withdrawal_precision'));
747
- const networks = {};
748
- for (let j = 0; j < chains.length; j++) {
749
- const chain = chains[j];
750
- const networkId = this.safeString(chain, 'chain');
751
- const networkCode = this.networkIdToCode(networkId, code);
752
- if (networkId === undefined) {
753
- continue;
754
- }
755
- const precisionString = this.parsePrecision(this.safeString(chain, 'withdrawal_precision'));
756
- const feeString = this.safeString(chain, 'withdrawal_fee');
757
- const minNetworkDepositString = this.safeString(chain, 'min_deposit_amount');
758
- const minNetworkWithdrawString = this.safeString(chain, 'min_withdraw_amount');
759
- const canDepositChain = this.safeBool(chain, 'deposit_enabled');
760
- const canWithdrawChain = this.safeBool(chain, 'withdraw_enabled');
761
- const network = {
762
- 'id': networkId,
763
- 'network': networkCode,
764
- 'name': undefined,
765
- 'active': canDepositChain && canWithdrawChain,
766
- 'deposit': canDepositChain,
767
- 'withdraw': canWithdrawChain,
768
- 'fee': this.parseNumber(feeString),
769
- 'precision': this.parseNumber(precisionString),
770
- 'limits': {
771
- 'amount': {
772
- 'min': undefined,
773
- 'max': undefined,
774
- },
775
- 'deposit': {
776
- 'min': this.parseNumber(minNetworkDepositString),
777
- 'max': undefined,
778
- },
779
- 'withdraw': {
780
- 'min': this.parseNumber(minNetworkWithdrawString),
781
- 'max': undefined,
782
- },
783
- },
784
- 'info': chain,
785
- };
786
- networks[networkCode] = network;
733
+ return this.parseCurrencies(data);
734
+ }
735
+ parseCurrency(coin) {
736
+ const asset = this.safeDict(coin, 'asset', {});
737
+ const chains = this.safeList(coin, 'chains', []);
738
+ const currencyId = this.safeString(asset, 'ccy');
739
+ if (currencyId === undefined) {
740
+ return undefined; // coinex returns empty structures for some reason
741
+ }
742
+ const code = this.safeCurrencyCode(currencyId);
743
+ const canDeposit = this.safeBool(asset, 'deposit_enabled');
744
+ const canWithdraw = this.safeBool(asset, 'withdraw_enabled');
745
+ const firstChain = this.safeDict(chains, 0, {});
746
+ const firstPrecisionString = this.parsePrecision(this.safeString(firstChain, 'withdrawal_precision'));
747
+ const networks = {};
748
+ for (let j = 0; j < chains.length; j++) {
749
+ const chain = chains[j];
750
+ const networkId = this.safeString(chain, 'chain');
751
+ const networkCode = this.networkIdToCode(networkId, code);
752
+ if (networkId === undefined) {
753
+ continue;
787
754
  }
788
- result[code] = this.safeCurrencyStructure({
789
- 'id': currencyId,
790
- 'code': code,
755
+ const precisionString = this.parsePrecision(this.safeString(chain, 'withdrawal_precision'));
756
+ const feeString = this.safeString(chain, 'withdrawal_fee');
757
+ const minNetworkDepositString = this.safeString(chain, 'min_deposit_amount');
758
+ const minNetworkWithdrawString = this.safeString(chain, 'min_withdraw_amount');
759
+ const canDepositChain = this.safeBool(chain, 'deposit_enabled');
760
+ const canWithdrawChain = this.safeBool(chain, 'withdraw_enabled');
761
+ const network = {
762
+ 'id': networkId,
763
+ 'network': networkCode,
791
764
  'name': undefined,
792
- 'active': canDeposit && canWithdraw,
793
- 'deposit': canDeposit,
794
- 'withdraw': canWithdraw,
795
- 'fee': undefined,
796
- 'precision': this.parseNumber(firstPrecisionString),
765
+ 'active': canDepositChain && canWithdrawChain,
766
+ 'deposit': canDepositChain,
767
+ 'withdraw': canWithdrawChain,
768
+ 'fee': this.parseNumber(feeString),
769
+ 'precision': this.parseNumber(precisionString),
797
770
  'limits': {
798
771
  'amount': {
799
772
  'min': undefined,
800
773
  'max': undefined,
801
774
  },
802
775
  'deposit': {
803
- 'min': undefined,
776
+ 'min': this.parseNumber(minNetworkDepositString),
804
777
  'max': undefined,
805
778
  },
806
779
  'withdraw': {
807
- 'min': undefined,
780
+ 'min': this.parseNumber(minNetworkWithdrawString),
808
781
  'max': undefined,
809
782
  },
810
783
  },
811
- 'networks': networks,
812
- 'type': 'crypto',
813
- 'info': coin,
814
- });
815
- }
816
- return result;
784
+ 'info': chain,
785
+ };
786
+ networks[networkCode] = network;
787
+ }
788
+ return this.safeCurrencyStructure({
789
+ 'id': currencyId,
790
+ 'code': code,
791
+ 'name': undefined,
792
+ 'active': canDeposit && canWithdraw,
793
+ 'deposit': canDeposit,
794
+ 'withdraw': canWithdraw,
795
+ 'fee': undefined,
796
+ 'precision': this.parseNumber(firstPrecisionString),
797
+ 'limits': {
798
+ 'amount': {
799
+ 'min': undefined,
800
+ 'max': undefined,
801
+ },
802
+ 'deposit': {
803
+ 'min': undefined,
804
+ 'max': undefined,
805
+ },
806
+ 'withdraw': {
807
+ 'min': undefined,
808
+ 'max': undefined,
809
+ },
810
+ },
811
+ 'networks': networks,
812
+ 'type': 'crypto',
813
+ 'info': coin,
814
+ });
817
815
  }
818
816
  /**
819
817
  * @method
@@ -3998,7 +3996,7 @@ class coinex extends coinex$1["default"] {
3998
3996
  if (networkCode === undefined) {
3999
3997
  throw new errors.ArgumentsRequired(this.id + ' fetchDepositAddress() requires a "network" parameter');
4000
3998
  }
4001
- request['chain'] = this.networkCodeToId(networkCode); // required for on-chain, not required for inter-user transfer
3999
+ request['chain'] = this.networkCodeToId(networkCode, currency['code']); // required for on-chain, not required for inter-user transfer
4002
4000
  const response = await this.v2PrivateGetAssetsDepositAddress(this.extend(request, params));
4003
4001
  //
4004
4002
  // {
@@ -4924,7 +4922,7 @@ class coinex extends coinex$1["default"] {
4924
4922
  let networkCode = undefined;
4925
4923
  [networkCode, params] = this.handleNetworkCodeAndParams(params);
4926
4924
  if (networkCode !== undefined) {
4927
- request['chain'] = this.networkCodeToId(networkCode); // required for on-chain, not required for inter-user transfer
4925
+ request['chain'] = this.networkCodeToId(networkCode, currency['code']); // required for on-chain, not required for inter-user transfer
4928
4926
  }
4929
4927
  const response = await this.v2PrivatePostAssetsWithdraw(this.extend(request, params));
4930
4928
  //
@@ -5131,7 +5129,7 @@ class coinex extends coinex$1["default"] {
5131
5129
  'txid': txid,
5132
5130
  'timestamp': timestamp,
5133
5131
  'datetime': this.iso8601(timestamp),
5134
- 'network': this.networkIdToCode(networkId),
5132
+ 'network': this.networkIdToCode(networkId, code),
5135
5133
  'address': address,
5136
5134
  'addressTo': address,
5137
5135
  'addressFrom': undefined,
@@ -5834,7 +5832,9 @@ class coinex extends coinex$1["default"] {
5834
5832
  result['withdraw']['percentage'] = false;
5835
5833
  const networkId = this.safeString(entry, 'chain');
5836
5834
  if (networkId) {
5837
- const networkCode = this.networkIdToCode(networkId, this.safeString(asset, 'ccy'));
5835
+ const currencyId = this.safeString(asset, 'ccy');
5836
+ const feeCode = this.safeCurrencyCode(currencyId, currency);
5837
+ const networkCode = this.networkIdToCode(networkId, feeCode);
5838
5838
  result['networks'][networkCode] = {
5839
5839
  'withdraw': {
5840
5840
  'fee': this.safeNumber(entry, 'withdrawal_fee'),
@@ -891,7 +891,7 @@ class coinmetro extends coinmetro$1["default"] {
891
891
  orderbook['nonce'] = this.safeInteger(book, 'seqNumber');
892
892
  return orderbook;
893
893
  }
894
- parseBidsAsks(bidasks, priceKey = 0, amountKey = 1, countOrIdKey = 2) {
894
+ parseOrderBookBidsAsks(bidasks, priceKey = 0, amountKey = 1, countOrIdKey = 2) {
895
895
  const prices = Object.keys(bidasks);
896
896
  const result = [];
897
897
  for (let i = 0; i < prices.length; i++) {
@@ -628,7 +628,7 @@ class coinsph extends coinsph$1["default"] {
628
628
  for (let j = 0; j < networkList.length; j++) {
629
629
  const networkItem = networkList[j];
630
630
  const network = this.safeString(networkItem, 'network');
631
- const networkCode = this.networkIdToCode(network);
631
+ const networkCode = this.networkIdToCode(network, code);
632
632
  networks[networkCode] = {
633
633
  'info': networkItem,
634
634
  'id': network,
@@ -564,7 +564,8 @@ class cryptocom extends cryptocom$1["default"] {
564
564
  response = await this.v1PrivatePostPrivateGetCurrencyNetworks(params);
565
565
  }
566
566
  catch (e) {
567
- if (e instanceof errors.ExchangeError) {
567
+ const erString = this.exceptionMessage(e);
568
+ if (erString.indexOf('"msg":"SYS_ERROR"') >= 0) {
568
569
  // sub-accounts can't access this endpoint
569
570
  // {"code":"10001","msg":"SYS_ERROR"}
570
571
  return {};
@@ -617,57 +618,54 @@ class cryptocom extends cryptocom$1["default"] {
617
618
  //
618
619
  const resultData = this.safeDict(response, 'result', {});
619
620
  const currencyMap = this.safeDict(resultData, 'currency_map', {});
620
- const keys = Object.keys(currencyMap);
621
- const result = {};
622
- for (let i = 0; i < keys.length; i++) {
623
- const key = keys[i];
624
- const currency = currencyMap[key];
625
- const id = key;
626
- const code = this.safeCurrencyCode(id);
627
- const networks = {};
628
- const chains = this.safeList(currency, 'network_list', []);
629
- for (let j = 0; j < chains.length; j++) {
630
- const chain = chains[j];
631
- const networkId = this.safeString(chain, 'network_id');
632
- const network = this.networkIdToCode(networkId);
633
- networks[network] = {
634
- 'info': chain,
635
- 'id': networkId,
636
- 'network': network,
637
- 'active': undefined,
638
- 'deposit': this.safeBool(chain, 'deposit_enabled', false),
639
- 'withdraw': this.safeBool(chain, 'withdraw_enabled', false),
640
- 'fee': this.safeNumber(chain, 'withdrawal_fee'),
641
- 'precision': undefined,
642
- 'limits': {
643
- 'withdraw': {
644
- 'min': this.safeNumber(chain, 'min_withdrawal_amount'),
645
- 'max': undefined,
646
- },
647
- },
648
- };
649
- }
650
- result[code] = this.safeCurrencyStructure({
651
- 'info': currency,
652
- 'id': id,
653
- 'code': code,
654
- 'name': this.safeString(currency, 'full_name'),
621
+ const enhancedArray = this.addKeyInArrayItems(currencyMap, '_coin_id');
622
+ return this.parseCurrencies(enhancedArray);
623
+ }
624
+ parseCurrency(currency) {
625
+ const id = this.safeString(currency, '_coin_id');
626
+ const code = this.safeCurrencyCode(id);
627
+ const networks = {};
628
+ const chains = this.safeList(currency, 'network_list', []);
629
+ for (let j = 0; j < chains.length; j++) {
630
+ const chain = chains[j];
631
+ const networkId = this.safeString(chain, 'network_id');
632
+ const network = this.networkIdToCode(networkId, code);
633
+ networks[network] = {
634
+ 'info': chain,
635
+ 'id': networkId,
636
+ 'network': network,
655
637
  'active': undefined,
656
- 'deposit': undefined,
657
- 'withdraw': undefined,
658
- 'fee': undefined,
638
+ 'deposit': this.safeBool(chain, 'deposit_enabled', false),
639
+ 'withdraw': this.safeBool(chain, 'withdraw_enabled', false),
640
+ 'fee': this.safeNumber(chain, 'withdrawal_fee'),
659
641
  'precision': undefined,
660
642
  'limits': {
661
- 'amount': {
662
- 'min': undefined,
643
+ 'withdraw': {
644
+ 'min': this.safeNumber(chain, 'min_withdrawal_amount'),
663
645
  'max': undefined,
664
646
  },
665
647
  },
666
- 'type': 'crypto',
667
- 'networks': networks,
668
- });
648
+ };
669
649
  }
670
- return result;
650
+ return this.safeCurrencyStructure({
651
+ 'info': currency,
652
+ 'id': id,
653
+ 'code': code,
654
+ 'name': this.safeString(currency, 'full_name'),
655
+ 'active': undefined,
656
+ 'deposit': undefined,
657
+ 'withdraw': undefined,
658
+ 'fee': undefined,
659
+ 'precision': undefined,
660
+ 'limits': {
661
+ 'amount': {
662
+ 'min': undefined,
663
+ 'max': undefined,
664
+ },
665
+ },
666
+ 'type': 'crypto',
667
+ 'networks': networks,
668
+ });
671
669
  }
672
670
  /**
673
671
  * @method
@@ -2021,7 +2019,7 @@ class cryptocom extends cryptocom$1["default"] {
2021
2019
  }
2022
2020
  let networkCode = undefined;
2023
2021
  [networkCode, params] = this.handleNetworkCodeAndParams(params);
2024
- const networkId = this.networkCodeToId(networkCode);
2022
+ const networkId = this.networkCodeToId(networkCode, code);
2025
2023
  if (networkId !== undefined) {
2026
2024
  request['network_id'] = networkId;
2027
2025
  }
@@ -3334,8 +3332,8 @@ class cryptocom extends cryptocom$1["default"] {
3334
3332
  paramsKeys = object;
3335
3333
  }
3336
3334
  else {
3337
- const sorted = this.keysort(object);
3338
- paramsKeys = Object.keys(sorted);
3335
+ const objectKeys = Object.keys(object);
3336
+ paramsKeys = this.sort(objectKeys);
3339
3337
  }
3340
3338
  for (let i = 0; i < paramsKeys.length; i++) {
3341
3339
  const key = paramsKeys[i];
@@ -79,7 +79,7 @@ class cryptomus extends cryptomus$1["default"] {
79
79
  'fetchConvertTradeHistory': false,
80
80
  'fetchCrossBorrowRate': false,
81
81
  'fetchCrossBorrowRates': false,
82
- 'fetchCurrencies': false,
82
+ 'fetchCurrencies': true,
83
83
  'fetchDepositAddress': false,
84
84
  'fetchDeposits': false,
85
85
  'fetchDepositsWithdrawals': false,
@@ -406,46 +406,50 @@ class cryptomus extends cryptomus$1["default"] {
406
406
  //
407
407
  const coins = this.safeList(response, 'result');
408
408
  const groupedById = this.groupBy(coins, 'currency_code');
409
- const keys = Object.keys(groupedById);
410
- const result = {};
411
- for (let i = 0; i < keys.length; i++) {
412
- const id = keys[i];
413
- const code = this.safeCurrencyCode(id);
414
- const networks = {};
415
- const networkEntries = groupedById[id];
416
- for (let j = 0; j < networkEntries.length; j++) {
417
- const networkEntry = networkEntries[j];
418
- const networkId = this.safeString(networkEntry, 'network_code');
419
- const networkCode = this.networkIdToCode(networkId);
420
- networks[networkCode] = {
421
- 'id': networkId,
422
- 'network': networkCode,
423
- 'limits': {
424
- 'withdraw': {
425
- 'min': this.safeNumber(networkEntry, 'min_withdraw'),
426
- 'max': this.safeNumber(networkEntry, 'max_withdraw'),
427
- },
428
- 'deposit': {
429
- 'min': this.safeNumber(networkEntry, 'min_deposit'),
430
- 'max': this.safeNumber(networkEntry, 'max_deposit'),
431
- },
432
- },
433
- 'active': undefined,
434
- 'deposit': this.safeBool(networkEntry, 'can_withdraw'),
435
- 'withdraw': this.safeBool(networkEntry, 'can_deposit'),
436
- 'fee': undefined,
437
- 'precision': undefined,
438
- 'info': networkEntry,
439
- };
409
+ const groupedArray = Object.values(groupedById);
410
+ return this.parseCurrencies(groupedArray);
411
+ }
412
+ parseCurrency(rawCurrency) {
413
+ // currency here is array of networks
414
+ let id = undefined; // all entried have same id, as they were grouped by
415
+ let code = undefined;
416
+ const networks = {};
417
+ for (let i = 0; i < rawCurrency.length; i++) {
418
+ const networkEntry = rawCurrency[i];
419
+ // set ID on first loop
420
+ if (id === undefined) {
421
+ id = this.safeString(networkEntry, 'currency_code');
422
+ code = this.safeCurrencyCode(id);
440
423
  }
441
- result[code] = this.safeCurrencyStructure({
442
- 'id': id,
443
- 'code': code,
444
- 'networks': networks,
445
- 'info': networkEntries,
446
- });
424
+ const networkId = this.safeString(networkEntry, 'network_code');
425
+ const networkCode = this.networkIdToCode(networkId, code);
426
+ networks[networkCode] = {
427
+ 'id': networkId,
428
+ 'network': networkCode,
429
+ 'limits': {
430
+ 'withdraw': {
431
+ 'min': this.safeNumber(networkEntry, 'min_withdraw'),
432
+ 'max': this.safeNumber(networkEntry, 'max_withdraw'),
433
+ },
434
+ 'deposit': {
435
+ 'min': this.safeNumber(networkEntry, 'min_deposit'),
436
+ 'max': this.safeNumber(networkEntry, 'max_deposit'),
437
+ },
438
+ },
439
+ 'active': undefined,
440
+ 'deposit': this.safeBool(networkEntry, 'can_deposit'),
441
+ 'withdraw': this.safeBool(networkEntry, 'can_withdraw'),
442
+ 'fee': undefined,
443
+ 'precision': undefined,
444
+ 'info': networkEntry,
445
+ };
447
446
  }
448
- return result;
447
+ return this.safeCurrencyStructure({
448
+ 'id': id,
449
+ 'code': code,
450
+ 'networks': networks,
451
+ 'info': rawCurrency,
452
+ });
449
453
  }
450
454
  /**
451
455
  * @method
@@ -1066,7 +1066,7 @@ class deepcoin extends deepcoin$1["default"] {
1066
1066
  const amount = this.safeNumber(transaction, 'amount');
1067
1067
  const timestamp = this.safeTimestamp(transaction, 'createTime');
1068
1068
  const networkId = this.safeString(transaction, 'chainName');
1069
- const network = this.networkIdToCode(networkId);
1069
+ const network = this.networkIdToCode(networkId, code);
1070
1070
  const status = this.parseTransactionStatus(this.safeString(transaction, 'status'));
1071
1071
  return {
1072
1072
  'info': transaction,
@@ -1213,10 +1213,11 @@ class deepcoin extends deepcoin$1["default"] {
1213
1213
  const chain = this.safeString(response, 'chain');
1214
1214
  const address = this.safeString(response, 'address');
1215
1215
  this.checkAddress(address);
1216
+ const code = this.safeString(currency, 'code');
1216
1217
  return {
1217
1218
  'info': response,
1218
1219
  'currency': undefined,
1219
- 'network': this.networkIdToCode(chain),
1220
+ 'network': this.networkIdToCode(chain, code),
1220
1221
  'address': address,
1221
1222
  'tag': this.safeString(response, 'memo'),
1222
1223
  };
@@ -565,62 +565,60 @@ class delta extends delta$1["default"] {
565
565
  // }
566
566
  //
567
567
  const currencies = this.safeList(response, 'result', []);
568
- const result = {};
569
- for (let i = 0; i < currencies.length; i++) {
570
- const currency = currencies[i];
571
- const id = this.safeString(currency, 'symbol');
572
- const numericId = this.safeInteger(currency, 'id');
573
- const code = this.safeCurrencyCode(id);
574
- const chains = this.safeList(currency, 'networks', []);
575
- const networks = {};
576
- for (let j = 0; j < chains.length; j++) {
577
- const chain = chains[j];
578
- const networkId = this.safeString(chain, 'network');
579
- const networkCode = this.networkIdToCode(networkId);
580
- networks[networkCode] = {
581
- 'id': networkId,
582
- 'network': networkCode,
583
- 'name': this.safeString(chain, 'name'),
584
- 'info': chain,
585
- 'active': this.safeString(chain, 'status') === 'enabled',
586
- 'deposit': this.safeString(chain, 'deposit_status') === 'enabled',
587
- 'withdraw': this.safeString(chain, 'withdrawal_status') === 'enabled',
588
- 'fee': this.safeNumber(chain, 'base_withdrawal_fee'),
589
- 'limits': {
590
- 'deposit': {
591
- 'min': this.safeNumber(chain, 'min_deposit_amount'),
592
- 'max': undefined,
593
- },
594
- 'withdraw': {
595
- 'min': this.safeNumber(chain, 'min_withdrawal_amount'),
596
- 'max': undefined,
597
- },
598
- },
599
- };
600
- }
601
- result[code] = this.safeCurrencyStructure({
602
- 'id': id,
603
- 'numericId': numericId,
604
- 'code': code,
605
- 'name': this.safeString(currency, 'name'),
606
- 'info': currency,
607
- 'active': undefined,
608
- 'deposit': this.safeString(currency, 'deposit_status') === 'enabled',
609
- 'withdraw': this.safeString(currency, 'withdrawal_status') === 'enabled',
610
- 'fee': this.safeNumber(currency, 'base_withdrawal_fee'),
611
- 'precision': this.parseNumber(this.parsePrecision(this.safeString(currency, 'precision'))),
568
+ return this.parseCurrencies(currencies);
569
+ }
570
+ parseCurrency(rawCurrency) {
571
+ const id = this.safeString(rawCurrency, 'symbol');
572
+ const numericId = this.safeInteger(rawCurrency, 'id');
573
+ const code = this.safeCurrencyCode(id);
574
+ const chains = this.safeList(rawCurrency, 'networks', []);
575
+ const networks = {};
576
+ for (let j = 0; j < chains.length; j++) {
577
+ const chain = chains[j];
578
+ const networkId = this.safeString(chain, 'network');
579
+ const networkCode = this.networkIdToCode(networkId, code);
580
+ networks[networkCode] = {
581
+ 'id': networkId,
582
+ 'network': networkCode,
583
+ 'name': this.safeString(chain, 'name'),
584
+ 'info': chain,
585
+ 'active': this.safeString(chain, 'status') === 'enabled',
586
+ 'deposit': this.safeString(chain, 'deposit_status') === 'enabled',
587
+ 'withdraw': this.safeString(chain, 'withdrawal_status') === 'enabled',
588
+ 'fee': this.safeNumber(chain, 'base_withdrawal_fee'),
612
589
  'limits': {
613
- 'amount': { 'min': undefined, 'max': undefined },
590
+ 'deposit': {
591
+ 'min': this.safeNumber(chain, 'min_deposit_amount'),
592
+ 'max': undefined,
593
+ },
614
594
  'withdraw': {
615
- 'min': this.safeNumber(currency, 'min_withdrawal_amount'),
595
+ 'min': this.safeNumber(chain, 'min_withdrawal_amount'),
616
596
  'max': undefined,
617
597
  },
618
598
  },
619
- 'networks': networks,
620
- 'type': 'crypto',
621
- });
599
+ };
622
600
  }
623
- return result;
601
+ return this.safeCurrencyStructure({
602
+ 'id': id,
603
+ 'numericId': numericId,
604
+ 'code': code,
605
+ 'name': this.safeString(rawCurrency, 'name'),
606
+ 'info': rawCurrency,
607
+ 'active': undefined,
608
+ 'deposit': this.safeString(rawCurrency, 'deposit_status') === 'enabled',
609
+ 'withdraw': this.safeString(rawCurrency, 'withdrawal_status') === 'enabled',
610
+ 'fee': this.safeNumber(rawCurrency, 'base_withdrawal_fee'),
611
+ 'precision': this.parseNumber(this.parsePrecision(this.safeString(rawCurrency, 'precision'))),
612
+ 'limits': {
613
+ 'amount': { 'min': undefined, 'max': undefined },
614
+ 'withdraw': {
615
+ 'min': this.safeNumber(rawCurrency, 'min_withdrawal_amount'),
616
+ 'max': undefined,
617
+ },
618
+ },
619
+ 'networks': networks,
620
+ 'type': 'crypto',
621
+ });
624
622
  }
625
623
  async loadMarkets(reload = false, params = {}) {
626
624
  const markets = await super.loadMarkets(reload, params);
@@ -2608,11 +2606,12 @@ class delta extends delta$1["default"] {
2608
2606
  const address = this.safeString(depositAddress, 'address');
2609
2607
  const marketId = this.safeString(depositAddress, 'asset_symbol');
2610
2608
  const networkId = this.safeString(depositAddress, 'network');
2609
+ const code = this.safeCurrencyCode(marketId, currency);
2611
2610
  this.checkAddress(address);
2612
2611
  return {
2613
2612
  'info': depositAddress,
2614
- 'currency': this.safeCurrencyCode(marketId, currency),
2615
- 'network': this.networkIdToCode(networkId),
2613
+ 'currency': code,
2614
+ 'network': this.networkIdToCode(networkId, code),
2616
2615
  'address': address,
2617
2616
  'tag': this.safeString(depositAddress, 'memo'),
2618
2617
  };