ccxt 4.2.58__tar.gz → 4.2.60__tar.gz

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 (447) hide show
  1. {ccxt-4.2.58/ccxt.egg-info → ccxt-4.2.60}/PKG-INFO +4 -4
  2. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/__init__.py +1 -1
  3. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/blofin.py +1 -0
  4. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/kraken.py +37 -37
  5. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/wazirx.py +6 -1
  6. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/ascendex.py +10 -12
  7. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/__init__.py +1 -1
  8. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/ascendex.py +10 -12
  9. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/exchange.py +1 -1
  10. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/binance.py +2 -2
  11. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bingx.py +40 -4
  12. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitfinex2.py +20 -3
  13. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitget.py +8 -3
  14. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitmart.py +40 -23
  15. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitmex.py +1 -1
  16. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/blofin.py +53 -3
  17. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinbase.py +21 -12
  18. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/hitbtc.py +1 -1
  19. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/htx.py +3 -1
  20. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/kraken.py +42 -39
  21. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/kucoinfutures.py +1 -0
  22. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/lbank.py +1 -1
  23. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/mexc.py +1 -1
  24. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/okx.py +1 -1
  25. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/phemex.py +1 -1
  26. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/wazirx.py +6 -1
  27. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/woo.py +148 -76
  28. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/base/exchange.py +3 -1
  29. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/binance.py +2 -2
  30. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bingx.py +40 -4
  31. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitfinex2.py +20 -3
  32. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitget.py +8 -3
  33. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitmart.py +40 -23
  34. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitmex.py +1 -1
  35. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/blofin.py +53 -3
  36. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinbase.py +21 -12
  37. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/hitbtc.py +1 -1
  38. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/htx.py +3 -1
  39. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/kraken.py +42 -39
  40. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/kucoinfutures.py +1 -0
  41. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/lbank.py +1 -1
  42. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/mexc.py +1 -1
  43. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/okx.py +1 -1
  44. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/phemex.py +1 -1
  45. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/__init__.py +1 -1
  46. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/binance.py +12 -3
  47. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitfinex2.py +1 -1
  48. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitget.py +1 -1
  49. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitmart.py +44 -78
  50. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitvavo.py +1 -1
  51. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bybit.py +1 -1
  52. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/coinex.py +1 -1
  53. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/cryptocom.py +1 -1
  54. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/deribit.py +188 -84
  55. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/gate.py +1 -1
  56. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/independentreserve.py +1 -1
  57. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/kraken.py +1 -1
  58. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/kucoinfutures.py +1 -1
  59. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/mexc.py +5 -4
  60. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/okx.py +1 -1
  61. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/woo.py +1 -1
  62. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/test_async.py +4 -4
  63. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/test_sync.py +4 -4
  64. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/wazirx.py +6 -1
  65. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/woo.py +148 -76
  66. {ccxt-4.2.58 → ccxt-4.2.60/ccxt.egg-info}/PKG-INFO +4 -4
  67. {ccxt-4.2.58 → ccxt-4.2.60}/package.json +1 -1
  68. {ccxt-4.2.58 → ccxt-4.2.60}/LICENSE.txt +0 -0
  69. {ccxt-4.2.58 → ccxt-4.2.60}/MANIFEST.in +0 -0
  70. {ccxt-4.2.58 → ccxt-4.2.60}/README.rst +0 -0
  71. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/__init__.py +0 -0
  72. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/ace.py +0 -0
  73. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/alpaca.py +0 -0
  74. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/ascendex.py +0 -0
  75. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bequant.py +0 -0
  76. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bigone.py +0 -0
  77. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/binance.py +0 -0
  78. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/binancecoinm.py +0 -0
  79. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/binanceus.py +0 -0
  80. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/binanceusdm.py +0 -0
  81. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bingx.py +0 -0
  82. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bit2c.py +0 -0
  83. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitbank.py +0 -0
  84. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitbay.py +0 -0
  85. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitbns.py +0 -0
  86. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitcoincom.py +0 -0
  87. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitfinex.py +0 -0
  88. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitfinex2.py +0 -0
  89. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitflyer.py +0 -0
  90. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitget.py +0 -0
  91. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bithumb.py +0 -0
  92. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitmart.py +0 -0
  93. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitmex.py +0 -0
  94. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitopro.py +0 -0
  95. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitpanda.py +0 -0
  96. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitrue.py +0 -0
  97. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitso.py +0 -0
  98. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitstamp.py +0 -0
  99. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitteam.py +0 -0
  100. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bitvavo.py +0 -0
  101. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bl3p.py +0 -0
  102. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/blockchaincom.py +0 -0
  103. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/btcalpha.py +0 -0
  104. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/btcbox.py +0 -0
  105. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/btcmarkets.py +0 -0
  106. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/btcturk.py +0 -0
  107. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/bybit.py +0 -0
  108. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/cex.py +0 -0
  109. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinbase.py +0 -0
  110. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinbasepro.py +0 -0
  111. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coincheck.py +0 -0
  112. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinex.py +0 -0
  113. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinlist.py +0 -0
  114. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinmate.py +0 -0
  115. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinmetro.py +0 -0
  116. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinone.py +0 -0
  117. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinsph.py +0 -0
  118. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/coinspot.py +0 -0
  119. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/cryptocom.py +0 -0
  120. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/currencycom.py +0 -0
  121. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/delta.py +0 -0
  122. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/deribit.py +0 -0
  123. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/digifinex.py +0 -0
  124. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/exmo.py +0 -0
  125. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/fmfwio.py +0 -0
  126. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/gate.py +0 -0
  127. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/gateio.py +0 -0
  128. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/gemini.py +0 -0
  129. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/hitbtc.py +0 -0
  130. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/hitbtc3.py +0 -0
  131. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/hollaex.py +0 -0
  132. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/htx.py +0 -0
  133. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/huobi.py +0 -0
  134. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/huobijp.py +0 -0
  135. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/idex.py +0 -0
  136. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/independentreserve.py +0 -0
  137. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/indodax.py +0 -0
  138. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/krakenfutures.py +0 -0
  139. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/kucoin.py +0 -0
  140. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/kucoinfutures.py +0 -0
  141. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/kuna.py +0 -0
  142. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/latoken.py +0 -0
  143. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/lbank.py +0 -0
  144. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/luno.py +0 -0
  145. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/lykke.py +0 -0
  146. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/mercado.py +0 -0
  147. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/mexc.py +0 -0
  148. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/ndax.py +0 -0
  149. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/novadax.py +0 -0
  150. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/oceanex.py +0 -0
  151. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/okcoin.py +0 -0
  152. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/okx.py +0 -0
  153. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/onetrading.py +0 -0
  154. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/p2b.py +0 -0
  155. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/paymium.py +0 -0
  156. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/phemex.py +0 -0
  157. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/poloniex.py +0 -0
  158. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/poloniexfutures.py +0 -0
  159. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/probit.py +0 -0
  160. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/timex.py +0 -0
  161. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/tokocrypto.py +0 -0
  162. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/upbit.py +0 -0
  163. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/wavesexchange.py +0 -0
  164. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/whitebit.py +0 -0
  165. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/woo.py +0 -0
  166. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/yobit.py +0 -0
  167. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/zaif.py +0 -0
  168. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/abstract/zonda.py +0 -0
  169. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/ace.py +0 -0
  170. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/alpaca.py +0 -0
  171. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/ace.py +0 -0
  172. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/alpaca.py +0 -0
  173. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/__init__.py +0 -0
  174. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/throttler.py +0 -0
  175. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/__init__.py +0 -0
  176. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  177. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/cache.py +0 -0
  178. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/client.py +0 -0
  179. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/fast_client.py +0 -0
  180. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/functions.py +0 -0
  181. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/future.py +0 -0
  182. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/order_book.py +0 -0
  183. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  184. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bequant.py +0 -0
  185. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bigone.py +0 -0
  186. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/binancecoinm.py +0 -0
  187. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/binanceus.py +0 -0
  188. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/binanceusdm.py +0 -0
  189. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bit2c.py +0 -0
  190. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitbank.py +0 -0
  191. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitbay.py +0 -0
  192. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitbns.py +0 -0
  193. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitcoincom.py +0 -0
  194. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitfinex.py +0 -0
  195. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitflyer.py +0 -0
  196. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bithumb.py +0 -0
  197. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitopro.py +0 -0
  198. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitpanda.py +0 -0
  199. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitrue.py +0 -0
  200. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitso.py +0 -0
  201. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitstamp.py +0 -0
  202. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitteam.py +0 -0
  203. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bitvavo.py +0 -0
  204. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bl3p.py +0 -0
  205. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/blockchaincom.py +0 -0
  206. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/btcalpha.py +0 -0
  207. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/btcbox.py +0 -0
  208. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/btcmarkets.py +0 -0
  209. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/btcturk.py +0 -0
  210. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/bybit.py +0 -0
  211. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/cex.py +0 -0
  212. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinbasepro.py +0 -0
  213. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coincheck.py +0 -0
  214. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinex.py +0 -0
  215. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinlist.py +0 -0
  216. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinmate.py +0 -0
  217. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinmetro.py +0 -0
  218. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinone.py +0 -0
  219. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinsph.py +0 -0
  220. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/coinspot.py +0 -0
  221. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/cryptocom.py +0 -0
  222. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/currencycom.py +0 -0
  223. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/delta.py +0 -0
  224. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/deribit.py +0 -0
  225. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/digifinex.py +0 -0
  226. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/exmo.py +0 -0
  227. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/flowbtc.py +0 -0
  228. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/fmfwio.py +0 -0
  229. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/gate.py +0 -0
  230. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/gateio.py +0 -0
  231. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/gemini.py +0 -0
  232. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/hitbtc3.py +0 -0
  233. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/hollaex.py +0 -0
  234. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/huobi.py +0 -0
  235. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/huobijp.py +0 -0
  236. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/idex.py +0 -0
  237. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/independentreserve.py +0 -0
  238. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/indodax.py +0 -0
  239. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/krakenfutures.py +0 -0
  240. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/kucoin.py +0 -0
  241. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/kuna.py +0 -0
  242. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/latoken.py +0 -0
  243. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/luno.py +0 -0
  244. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/lykke.py +0 -0
  245. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/mercado.py +0 -0
  246. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/ndax.py +0 -0
  247. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/novadax.py +0 -0
  248. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/oceanex.py +0 -0
  249. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/okcoin.py +0 -0
  250. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/onetrading.py +0 -0
  251. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/p2b.py +0 -0
  252. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/paymium.py +0 -0
  253. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/poloniex.py +0 -0
  254. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/poloniexfutures.py +0 -0
  255. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/probit.py +0 -0
  256. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/timex.py +0 -0
  257. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/tokocrypto.py +0 -0
  258. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/upbit.py +0 -0
  259. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/wavesexchange.py +0 -0
  260. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/whitebit.py +0 -0
  261. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/yobit.py +0 -0
  262. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/zaif.py +0 -0
  263. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/async_support/zonda.py +0 -0
  264. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/base/__init__.py +0 -0
  265. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/base/decimal_to_precision.py +0 -0
  266. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/base/errors.py +0 -0
  267. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/base/precise.py +0 -0
  268. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/base/types.py +0 -0
  269. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bequant.py +0 -0
  270. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bigone.py +0 -0
  271. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/binancecoinm.py +0 -0
  272. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/binanceus.py +0 -0
  273. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/binanceusdm.py +0 -0
  274. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bit2c.py +0 -0
  275. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitbank.py +0 -0
  276. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitbay.py +0 -0
  277. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitbns.py +0 -0
  278. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitcoincom.py +0 -0
  279. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitfinex.py +0 -0
  280. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitflyer.py +0 -0
  281. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bithumb.py +0 -0
  282. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitopro.py +0 -0
  283. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitpanda.py +0 -0
  284. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitrue.py +0 -0
  285. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitso.py +0 -0
  286. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitstamp.py +0 -0
  287. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitteam.py +0 -0
  288. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bitvavo.py +0 -0
  289. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bl3p.py +0 -0
  290. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/blockchaincom.py +0 -0
  291. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/btcalpha.py +0 -0
  292. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/btcbox.py +0 -0
  293. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/btcmarkets.py +0 -0
  294. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/btcturk.py +0 -0
  295. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/bybit.py +0 -0
  296. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/cex.py +0 -0
  297. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinbasepro.py +0 -0
  298. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coincheck.py +0 -0
  299. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinex.py +0 -0
  300. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinlist.py +0 -0
  301. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinmate.py +0 -0
  302. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinmetro.py +0 -0
  303. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinone.py +0 -0
  304. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinsph.py +0 -0
  305. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/coinspot.py +0 -0
  306. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/cryptocom.py +0 -0
  307. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/currencycom.py +0 -0
  308. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/delta.py +0 -0
  309. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/deribit.py +0 -0
  310. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/digifinex.py +0 -0
  311. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/exmo.py +0 -0
  312. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/flowbtc.py +0 -0
  313. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/fmfwio.py +0 -0
  314. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/gate.py +0 -0
  315. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/gateio.py +0 -0
  316. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/gemini.py +0 -0
  317. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/hitbtc3.py +0 -0
  318. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/hollaex.py +0 -0
  319. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/huobi.py +0 -0
  320. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/huobijp.py +0 -0
  321. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/idex.py +0 -0
  322. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/independentreserve.py +0 -0
  323. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/indodax.py +0 -0
  324. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/krakenfutures.py +0 -0
  325. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/kucoin.py +0 -0
  326. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/kuna.py +0 -0
  327. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/latoken.py +0 -0
  328. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/luno.py +0 -0
  329. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/lykke.py +0 -0
  330. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/mercado.py +0 -0
  331. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/ndax.py +0 -0
  332. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/novadax.py +0 -0
  333. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/oceanex.py +0 -0
  334. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/okcoin.py +0 -0
  335. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/onetrading.py +0 -0
  336. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/p2b.py +0 -0
  337. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/paymium.py +0 -0
  338. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/poloniex.py +0 -0
  339. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/poloniexfutures.py +0 -0
  340. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/alpaca.py +0 -0
  341. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/ascendex.py +0 -0
  342. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bequant.py +0 -0
  343. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/binancecoinm.py +0 -0
  344. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/binanceus.py +0 -0
  345. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/binanceusdm.py +0 -0
  346. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bingx.py +0 -0
  347. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitcoincom.py +0 -0
  348. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitfinex.py +0 -0
  349. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitmex.py +0 -0
  350. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitopro.py +0 -0
  351. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitpanda.py +0 -0
  352. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitrue.py +0 -0
  353. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/bitstamp.py +0 -0
  354. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/blockchaincom.py +0 -0
  355. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/cex.py +0 -0
  356. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/coinbase.py +0 -0
  357. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/coinbasepro.py +0 -0
  358. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/coincheck.py +0 -0
  359. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/coinone.py +0 -0
  360. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/currencycom.py +0 -0
  361. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/exmo.py +0 -0
  362. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/gateio.py +0 -0
  363. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/gemini.py +0 -0
  364. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/hitbtc.py +0 -0
  365. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/hollaex.py +0 -0
  366. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/htx.py +0 -0
  367. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/huobi.py +0 -0
  368. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/huobijp.py +0 -0
  369. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/idex.py +0 -0
  370. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/krakenfutures.py +0 -0
  371. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/kucoin.py +0 -0
  372. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/lbank.py +0 -0
  373. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/luno.py +0 -0
  374. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/ndax.py +0 -0
  375. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/okcoin.py +0 -0
  376. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/onetrading.py +0 -0
  377. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/p2b.py +0 -0
  378. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/phemex.py +0 -0
  379. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/poloniex.py +0 -0
  380. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/poloniexfutures.py +0 -0
  381. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/probit.py +0 -0
  382. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/upbit.py +0 -0
  383. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/wazirx.py +0 -0
  384. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/pro/whitebit.py +0 -0
  385. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/probit.py +0 -0
  386. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/__init__.py +0 -0
  387. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  388. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  389. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  390. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  391. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  392. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  393. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  394. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  395. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  396. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  397. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  398. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  399. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/__init__.py +0 -0
  400. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/__init__.py +0 -0
  401. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_account.py +0 -0
  402. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_balance.py +0 -0
  403. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_borrow_interest.py +0 -0
  404. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_borrow_rate.py +0 -0
  405. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_calculate_fee.py +0 -0
  406. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_crypto.py +0 -0
  407. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_currency.py +0 -0
  408. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_datetime.py +0 -0
  409. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  410. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_deep_extend.py +0 -0
  411. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  412. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  413. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_funding_rate_history.py +0 -0
  414. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_last_price.py +0 -0
  415. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_ledger_entry.py +0 -0
  416. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_ledger_item.py +0 -0
  417. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_leverage_tier.py +0 -0
  418. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_margin_mode.py +0 -0
  419. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_margin_modification.py +0 -0
  420. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_market.py +0 -0
  421. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_number.py +0 -0
  422. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_ohlcv.py +0 -0
  423. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_open_interest.py +0 -0
  424. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_order.py +0 -0
  425. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_order_book.py +0 -0
  426. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_position.py +0 -0
  427. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_shared_methods.py +0 -0
  428. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_status.py +0 -0
  429. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_throttle.py +0 -0
  430. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_ticker.py +0 -0
  431. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_trade.py +0 -0
  432. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_trading_fee.py +0 -0
  433. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/test/base/test_transaction.py +0 -0
  434. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/timex.py +0 -0
  435. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/tokocrypto.py +0 -0
  436. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/upbit.py +0 -0
  437. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/wavesexchange.py +0 -0
  438. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/whitebit.py +0 -0
  439. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/yobit.py +0 -0
  440. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/zaif.py +0 -0
  441. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt/zonda.py +0 -0
  442. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt.egg-info/SOURCES.txt +0 -0
  443. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt.egg-info/dependency_links.txt +0 -0
  444. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt.egg-info/requires.txt +0 -0
  445. {ccxt-4.2.58 → ccxt-4.2.60}/ccxt.egg-info/top_level.txt +0 -0
  446. {ccxt-4.2.58 → ccxt-4.2.60}/setup.cfg +0 -0
  447. {ccxt-4.2.58 → ccxt-4.2.60}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.2.58
3
+ Version: 4.2.60
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -222,13 +222,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
222
222
 
223
223
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
224
224
 
225
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.58/dist/ccxt.browser.js
226
- * unpkg: https://unpkg.com/ccxt@4.2.58/dist/ccxt.browser.js
225
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.60/dist/ccxt.browser.js
226
+ * unpkg: https://unpkg.com/ccxt@4.2.60/dist/ccxt.browser.js
227
227
 
228
228
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
229
229
 
230
230
  ```HTML
231
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.58/dist/ccxt.browser.js"></script>
231
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.60/dist/ccxt.browser.js"></script>
232
232
  ```
233
233
 
234
234
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.2.58'
25
+ __version__ = '4.2.60'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -19,6 +19,7 @@ class ImplicitAPI:
19
19
  private_get_account_balance = privateGetAccountBalance = Entry('account/balance', 'private', 'GET', {'cost': 1})
20
20
  private_get_account_positions = privateGetAccountPositions = Entry('account/positions', 'private', 'GET', {'cost': 1})
21
21
  private_get_account_leverage_info = privateGetAccountLeverageInfo = Entry('account/leverage-info', 'private', 'GET', {'cost': 1})
22
+ private_get_account_batch_leverage_info = privateGetAccountBatchLeverageInfo = Entry('account/batch-leverage-info', 'private', 'GET', {'cost': 1})
22
23
  private_get_trade_orders_tpsl_pending = privateGetTradeOrdersTpslPending = Entry('trade/orders-tpsl-pending', 'private', 'GET', {'cost': 1})
23
24
  private_get_trade_orders_history = privateGetTradeOrdersHistory = Entry('trade/orders-history', 'private', 'GET', {'cost': 1})
24
25
  private_get_trade_orders_tpsl_history = privateGetTradeOrdersTpslHistory = Entry('trade/orders-tpsl-history', 'private', 'GET', {'cost': 1})
@@ -15,43 +15,43 @@ class ImplicitAPI:
15
15
  public_get_trades = publicGetTrades = Entry('Trades', 'public', 'GET', {'cost': 1})
16
16
  private_post_addorder = privatePostAddOrder = Entry('AddOrder', 'private', 'POST', {'cost': 0})
17
17
  private_post_addorderbatch = privatePostAddOrderBatch = Entry('AddOrderBatch', 'private', 'POST', {'cost': 0})
18
- private_post_addexport = privatePostAddExport = Entry('AddExport', 'private', 'POST', {'cost': 1})
19
- private_post_balance = privatePostBalance = Entry('Balance', 'private', 'POST', {'cost': 1})
20
- private_post_cancelall = privatePostCancelAll = Entry('CancelAll', 'private', 'POST', {'cost': 1})
21
- private_post_cancelallordersafter = privatePostCancelAllOrdersAfter = Entry('CancelAllOrdersAfter', 'private', 'POST', {'cost': 1})
18
+ private_post_addexport = privatePostAddExport = Entry('AddExport', 'private', 'POST', {'cost': 3})
19
+ private_post_balance = privatePostBalance = Entry('Balance', 'private', 'POST', {'cost': 3})
20
+ private_post_cancelall = privatePostCancelAll = Entry('CancelAll', 'private', 'POST', {'cost': 3})
21
+ private_post_cancelallordersafter = privatePostCancelAllOrdersAfter = Entry('CancelAllOrdersAfter', 'private', 'POST', {'cost': 3})
22
22
  private_post_cancelorder = privatePostCancelOrder = Entry('CancelOrder', 'private', 'POST', {'cost': 0})
23
23
  private_post_cancelorderbatch = privatePostCancelOrderBatch = Entry('CancelOrderBatch', 'private', 'POST', {'cost': 0})
24
- private_post_closedorders = privatePostClosedOrders = Entry('ClosedOrders', 'private', 'POST', {'cost': 1})
25
- private_post_depositaddresses = privatePostDepositAddresses = Entry('DepositAddresses', 'private', 'POST', {'cost': 1})
26
- private_post_depositmethods = privatePostDepositMethods = Entry('DepositMethods', 'private', 'POST', {'cost': 1})
27
- private_post_depositstatus = privatePostDepositStatus = Entry('DepositStatus', 'private', 'POST', {'cost': 1})
24
+ private_post_closedorders = privatePostClosedOrders = Entry('ClosedOrders', 'private', 'POST', {'cost': 3})
25
+ private_post_depositaddresses = privatePostDepositAddresses = Entry('DepositAddresses', 'private', 'POST', {'cost': 3})
26
+ private_post_depositmethods = privatePostDepositMethods = Entry('DepositMethods', 'private', 'POST', {'cost': 3})
27
+ private_post_depositstatus = privatePostDepositStatus = Entry('DepositStatus', 'private', 'POST', {'cost': 3})
28
28
  private_post_editorder = privatePostEditOrder = Entry('EditOrder', 'private', 'POST', {'cost': 0})
29
- private_post_exportstatus = privatePostExportStatus = Entry('ExportStatus', 'private', 'POST', {'cost': 1})
30
- private_post_getwebsocketstoken = privatePostGetWebSocketsToken = Entry('GetWebSocketsToken', 'private', 'POST', {'cost': 1})
31
- private_post_ledgers = privatePostLedgers = Entry('Ledgers', 'private', 'POST', {'cost': 2})
32
- private_post_openorders = privatePostOpenOrders = Entry('OpenOrders', 'private', 'POST', {'cost': 1})
33
- private_post_openpositions = privatePostOpenPositions = Entry('OpenPositions', 'private', 'POST', {'cost': 1})
34
- private_post_queryledgers = privatePostQueryLedgers = Entry('QueryLedgers', 'private', 'POST', {'cost': 1})
35
- private_post_queryorders = privatePostQueryOrders = Entry('QueryOrders', 'private', 'POST', {'cost': 1})
36
- private_post_querytrades = privatePostQueryTrades = Entry('QueryTrades', 'private', 'POST', {'cost': 1})
37
- private_post_retrieveexport = privatePostRetrieveExport = Entry('RetrieveExport', 'private', 'POST', {'cost': 1})
38
- private_post_removeexport = privatePostRemoveExport = Entry('RemoveExport', 'private', 'POST', {'cost': 1})
39
- private_post_balanceex = privatePostBalanceEx = Entry('BalanceEx', 'private', 'POST', {'cost': 1})
40
- private_post_tradebalance = privatePostTradeBalance = Entry('TradeBalance', 'private', 'POST', {'cost': 1})
41
- private_post_tradeshistory = privatePostTradesHistory = Entry('TradesHistory', 'private', 'POST', {'cost': 2})
42
- private_post_tradevolume = privatePostTradeVolume = Entry('TradeVolume', 'private', 'POST', {'cost': 1})
43
- private_post_withdraw = privatePostWithdraw = Entry('Withdraw', 'private', 'POST', {'cost': 1})
44
- private_post_withdrawcancel = privatePostWithdrawCancel = Entry('WithdrawCancel', 'private', 'POST', {'cost': 1})
45
- private_post_withdrawinfo = privatePostWithdrawInfo = Entry('WithdrawInfo', 'private', 'POST', {'cost': 1})
46
- private_post_withdrawmethods = privatePostWithdrawMethods = Entry('WithdrawMethods', 'private', 'POST', {'cost': 1})
47
- private_post_withdrawaddresses = privatePostWithdrawAddresses = Entry('WithdrawAddresses', 'private', 'POST', {'cost': 1})
48
- private_post_withdrawstatus = privatePostWithdrawStatus = Entry('WithdrawStatus', 'private', 'POST', {'cost': 1})
49
- private_post_wallettransfer = privatePostWalletTransfer = Entry('WalletTransfer', 'private', 'POST', {'cost': 1})
50
- private_post_createsubaccount = privatePostCreateSubaccount = Entry('CreateSubaccount', 'private', 'POST', {'cost': 1})
51
- private_post_accounttransfer = privatePostAccountTransfer = Entry('AccountTransfer', 'private', 'POST', {'cost': 1})
52
- private_post_earn_allocate = privatePostEarnAllocate = Entry('Earn/Allocate', 'private', 'POST', {'cost': 1})
53
- private_post_earn_deallocate = privatePostEarnDeallocate = Entry('Earn/Deallocate', 'private', 'POST', {'cost': 1})
54
- private_post_earn_allocatestatus = privatePostEarnAllocateStatus = Entry('Earn/AllocateStatus', 'private', 'POST', {'cost': 1})
55
- private_post_earn_deallocatestatus = privatePostEarnDeallocateStatus = Entry('Earn/DeallocateStatus', 'private', 'POST', {'cost': 1})
56
- private_post_earn_strategies = privatePostEarnStrategies = Entry('Earn/Strategies', 'private', 'POST', {'cost': 1})
57
- private_post_earn_allocations = privatePostEarnAllocations = Entry('Earn/Allocations', 'private', 'POST', {'cost': 1})
29
+ private_post_exportstatus = privatePostExportStatus = Entry('ExportStatus', 'private', 'POST', {'cost': 3})
30
+ private_post_getwebsocketstoken = privatePostGetWebSocketsToken = Entry('GetWebSocketsToken', 'private', 'POST', {'cost': 3})
31
+ private_post_ledgers = privatePostLedgers = Entry('Ledgers', 'private', 'POST', {'cost': 6})
32
+ private_post_openorders = privatePostOpenOrders = Entry('OpenOrders', 'private', 'POST', {'cost': 3})
33
+ private_post_openpositions = privatePostOpenPositions = Entry('OpenPositions', 'private', 'POST', {'cost': 3})
34
+ private_post_queryledgers = privatePostQueryLedgers = Entry('QueryLedgers', 'private', 'POST', {'cost': 3})
35
+ private_post_queryorders = privatePostQueryOrders = Entry('QueryOrders', 'private', 'POST', {'cost': 3})
36
+ private_post_querytrades = privatePostQueryTrades = Entry('QueryTrades', 'private', 'POST', {'cost': 3})
37
+ private_post_retrieveexport = privatePostRetrieveExport = Entry('RetrieveExport', 'private', 'POST', {'cost': 3})
38
+ private_post_removeexport = privatePostRemoveExport = Entry('RemoveExport', 'private', 'POST', {'cost': 3})
39
+ private_post_balanceex = privatePostBalanceEx = Entry('BalanceEx', 'private', 'POST', {'cost': 3})
40
+ private_post_tradebalance = privatePostTradeBalance = Entry('TradeBalance', 'private', 'POST', {'cost': 3})
41
+ private_post_tradeshistory = privatePostTradesHistory = Entry('TradesHistory', 'private', 'POST', {'cost': 6})
42
+ private_post_tradevolume = privatePostTradeVolume = Entry('TradeVolume', 'private', 'POST', {'cost': 3})
43
+ private_post_withdraw = privatePostWithdraw = Entry('Withdraw', 'private', 'POST', {'cost': 3})
44
+ private_post_withdrawcancel = privatePostWithdrawCancel = Entry('WithdrawCancel', 'private', 'POST', {'cost': 3})
45
+ private_post_withdrawinfo = privatePostWithdrawInfo = Entry('WithdrawInfo', 'private', 'POST', {'cost': 3})
46
+ private_post_withdrawmethods = privatePostWithdrawMethods = Entry('WithdrawMethods', 'private', 'POST', {'cost': 3})
47
+ private_post_withdrawaddresses = privatePostWithdrawAddresses = Entry('WithdrawAddresses', 'private', 'POST', {'cost': 3})
48
+ private_post_withdrawstatus = privatePostWithdrawStatus = Entry('WithdrawStatus', 'private', 'POST', {'cost': 3})
49
+ private_post_wallettransfer = privatePostWalletTransfer = Entry('WalletTransfer', 'private', 'POST', {'cost': 3})
50
+ private_post_createsubaccount = privatePostCreateSubaccount = Entry('CreateSubaccount', 'private', 'POST', {'cost': 3})
51
+ private_post_accounttransfer = privatePostAccountTransfer = Entry('AccountTransfer', 'private', 'POST', {'cost': 3})
52
+ private_post_earn_allocate = privatePostEarnAllocate = Entry('Earn/Allocate', 'private', 'POST', {'cost': 3})
53
+ private_post_earn_deallocate = privatePostEarnDeallocate = Entry('Earn/Deallocate', 'private', 'POST', {'cost': 3})
54
+ private_post_earn_allocatestatus = privatePostEarnAllocateStatus = Entry('Earn/AllocateStatus', 'private', 'POST', {'cost': 3})
55
+ private_post_earn_deallocatestatus = privatePostEarnDeallocateStatus = Entry('Earn/DeallocateStatus', 'private', 'POST', {'cost': 3})
56
+ private_post_earn_strategies = privatePostEarnStrategies = Entry('Earn/Strategies', 'private', 'POST', {'cost': 3})
57
+ private_post_earn_allocations = privatePostEarnAllocations = Entry('Earn/Allocations', 'private', 'POST', {'cost': 3})
@@ -3,7 +3,7 @@ from ccxt.base.types import Entry
3
3
 
4
4
  class ImplicitAPI:
5
5
  public_get_exchangeinfo = publicGetExchangeInfo = Entry('exchangeInfo', 'public', 'GET', {'cost': 1})
6
- public_get_depth = publicGetDepth = Entry('depth', 'public', 'GET', {'cost': 1})
6
+ public_get_depth = publicGetDepth = Entry('depth', 'public', 'GET', {'cost': 0.5})
7
7
  public_get_ping = publicGetPing = Entry('ping', 'public', 'GET', {'cost': 1})
8
8
  public_get_systemstatus = publicGetSystemStatus = Entry('systemStatus', 'public', 'GET', {'cost': 1})
9
9
  public_get_tickers_24hr = publicGetTickers24hr = Entry('tickers/24hr', 'public', 'GET', {'cost': 1})
@@ -18,6 +18,11 @@ class ImplicitAPI:
18
18
  private_get_openorders = privateGetOpenOrders = Entry('openOrders', 'private', 'GET', {'cost': 1})
19
19
  private_get_order = privateGetOrder = Entry('order', 'private', 'GET', {'cost': 0.5})
20
20
  private_get_mytrades = privateGetMyTrades = Entry('myTrades', 'private', 'GET', {'cost': 0.5})
21
+ private_get_coins = privateGetCoins = Entry('coins', 'private', 'GET', {'cost': 12})
22
+ private_get_crypto_withdraws = privateGetCryptoWithdraws = Entry('crypto/withdraws', 'private', 'GET', {'cost': 12})
23
+ private_get_crypto_deposits_address = privateGetCryptoDepositsAddress = Entry('crypto/deposits/address', 'private', 'GET', {'cost': 60})
24
+ private_get_sub_account_fund_transfer_history = privateGetSubAccountFundTransferHistory = Entry('sub_account/fund_transfer/history', 'private', 'GET', {'cost': 1})
25
+ private_get_sub_account_accounts = privateGetSubAccountAccounts = Entry('sub_account/accounts', 'private', 'GET', {'cost': 1})
21
26
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.1})
22
27
  private_post_order_test = privatePostOrderTest = Entry('order/test', 'private', 'POST', {'cost': 0.5})
23
28
  private_post_create_auth_token = privatePostCreateAuthToken = Entry('create_auth_token', 'private', 'POST', {'cost': 1})
@@ -751,11 +751,10 @@ class ascendex(Exchange, ImplicitAPI):
751
751
  ]
752
752
 
753
753
  def parse_balance(self, response) -> Balances:
754
- timestamp = self.milliseconds()
755
754
  result = {
756
755
  'info': response,
757
- 'timestamp': timestamp,
758
- 'datetime': self.iso8601(timestamp),
756
+ 'timestamp': None,
757
+ 'datetime': None,
759
758
  }
760
759
  balances = self.safe_value(response, 'data', [])
761
760
  for i in range(0, len(balances)):
@@ -768,11 +767,10 @@ class ascendex(Exchange, ImplicitAPI):
768
767
  return self.safe_balance(result)
769
768
 
770
769
  def parse_margin_balance(self, response):
771
- timestamp = self.milliseconds()
772
770
  result = {
773
771
  'info': response,
774
- 'timestamp': timestamp,
775
- 'datetime': self.iso8601(timestamp),
772
+ 'timestamp': None,
773
+ 'datetime': None,
776
774
  }
777
775
  balances = self.safe_value(response, 'data', [])
778
776
  for i in range(0, len(balances)):
@@ -788,11 +786,10 @@ class ascendex(Exchange, ImplicitAPI):
788
786
  return self.safe_balance(result)
789
787
 
790
788
  def parse_swap_balance(self, response):
791
- timestamp = self.milliseconds()
792
789
  result = {
793
790
  'info': response,
794
- 'timestamp': timestamp,
795
- 'datetime': self.iso8601(timestamp),
791
+ 'timestamp': None,
792
+ 'datetime': None,
796
793
  }
797
794
  data = self.safe_value(response, 'data', {})
798
795
  collaterals = self.safe_value(data, 'collaterals', [])
@@ -811,6 +808,8 @@ class ascendex(Exchange, ImplicitAPI):
811
808
  :see: https://ascendex.github.io/ascendex-pro-api/#margin-account-balance
812
809
  :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
813
810
  :param dict [params]: extra parameters specific to the exchange API endpoint
811
+ :param str [params.type]: wallet type, 'spot', 'margin', or 'swap'
812
+ :param str [params.marginMode]: 'cross' or None, for spot margin trading, value of 'isolated' is invalid
814
813
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
815
814
  """
816
815
  self.load_markets()
@@ -3011,12 +3010,11 @@ class ascendex(Exchange, ImplicitAPI):
3011
3010
  #
3012
3011
  status = self.safe_integer(transfer, 'code')
3013
3012
  currencyCode = self.safe_currency_code(None, currency)
3014
- timestamp = self.milliseconds()
3015
3013
  return {
3016
3014
  'info': transfer,
3017
3015
  'id': None,
3018
- 'timestamp': timestamp,
3019
- 'datetime': self.iso8601(timestamp),
3016
+ 'timestamp': None,
3017
+ 'datetime': None,
3020
3018
  'currency': currencyCode,
3021
3019
  'amount': None,
3022
3020
  'fromAccount': None,
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.58'
7
+ __version__ = '4.2.60'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -751,11 +751,10 @@ class ascendex(Exchange, ImplicitAPI):
751
751
  ]
752
752
 
753
753
  def parse_balance(self, response) -> Balances:
754
- timestamp = self.milliseconds()
755
754
  result = {
756
755
  'info': response,
757
- 'timestamp': timestamp,
758
- 'datetime': self.iso8601(timestamp),
756
+ 'timestamp': None,
757
+ 'datetime': None,
759
758
  }
760
759
  balances = self.safe_value(response, 'data', [])
761
760
  for i in range(0, len(balances)):
@@ -768,11 +767,10 @@ class ascendex(Exchange, ImplicitAPI):
768
767
  return self.safe_balance(result)
769
768
 
770
769
  def parse_margin_balance(self, response):
771
- timestamp = self.milliseconds()
772
770
  result = {
773
771
  'info': response,
774
- 'timestamp': timestamp,
775
- 'datetime': self.iso8601(timestamp),
772
+ 'timestamp': None,
773
+ 'datetime': None,
776
774
  }
777
775
  balances = self.safe_value(response, 'data', [])
778
776
  for i in range(0, len(balances)):
@@ -788,11 +786,10 @@ class ascendex(Exchange, ImplicitAPI):
788
786
  return self.safe_balance(result)
789
787
 
790
788
  def parse_swap_balance(self, response):
791
- timestamp = self.milliseconds()
792
789
  result = {
793
790
  'info': response,
794
- 'timestamp': timestamp,
795
- 'datetime': self.iso8601(timestamp),
791
+ 'timestamp': None,
792
+ 'datetime': None,
796
793
  }
797
794
  data = self.safe_value(response, 'data', {})
798
795
  collaterals = self.safe_value(data, 'collaterals', [])
@@ -811,6 +808,8 @@ class ascendex(Exchange, ImplicitAPI):
811
808
  :see: https://ascendex.github.io/ascendex-pro-api/#margin-account-balance
812
809
  :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
813
810
  :param dict [params]: extra parameters specific to the exchange API endpoint
811
+ :param str [params.type]: wallet type, 'spot', 'margin', or 'swap'
812
+ :param str [params.marginMode]: 'cross' or None, for spot margin trading, value of 'isolated' is invalid
814
813
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
815
814
  """
816
815
  await self.load_markets()
@@ -3011,12 +3010,11 @@ class ascendex(Exchange, ImplicitAPI):
3011
3010
  #
3012
3011
  status = self.safe_integer(transfer, 'code')
3013
3012
  currencyCode = self.safe_currency_code(None, currency)
3014
- timestamp = self.milliseconds()
3015
3013
  return {
3016
3014
  'info': transfer,
3017
3015
  'id': None,
3018
- 'timestamp': timestamp,
3019
- 'datetime': self.iso8601(timestamp),
3016
+ 'timestamp': None,
3017
+ 'datetime': None,
3020
3018
  'currency': currencyCode,
3021
3019
  'amount': None,
3022
3020
  'fromAccount': None,
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.2.58'
5
+ __version__ = '4.2.60'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -4627,7 +4627,7 @@ class binance(Exchange, ImplicitAPI):
4627
4627
  stopPriceIsRequired = False
4628
4628
  quantityIsRequired = False
4629
4629
  if uppercaseType == 'MARKET':
4630
- quoteOrderQty = self.safe_value(self.options, 'quoteOrderQty', True)
4630
+ quoteOrderQty = self.safe_bool(self.options, 'quoteOrderQty', True)
4631
4631
  if quoteOrderQty:
4632
4632
  quoteOrderQtyNew = self.safe_value_2(params, 'quoteOrderQty', 'cost')
4633
4633
  precision = market['precision']['price']
@@ -9547,7 +9547,7 @@ class binance(Exchange, ImplicitAPI):
9547
9547
  # POST https://fapi.binance.com/fapi/v1/marginType 400 Bad Request
9548
9548
  # binanceusdm
9549
9549
  if isinstance(e, MarginModeAlreadySet):
9550
- throwMarginModeAlreadySet = self.safe_value(self.options, 'throwMarginModeAlreadySet', False)
9550
+ throwMarginModeAlreadySet = self.safe_bool(self.options, 'throwMarginModeAlreadySet', False)
9551
9551
  if throwMarginModeAlreadySet:
9552
9552
  raise e
9553
9553
  else:
@@ -8,7 +8,7 @@ from ccxt.abstract.bingx import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
10
  import numbers
11
- from ccxt.base.types import Balances, Currency, Int, Leverage, Market, Order, TransferEntry, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, Transaction
11
+ from ccxt.base.types import Balances, Currency, Int, Leverage, MarginMode, Market, Order, TransferEntry, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, Transaction
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import PermissionDenied
@@ -73,6 +73,7 @@ class bingx(Exchange, ImplicitAPI):
73
73
  'fetchFundingRates': True,
74
74
  'fetchLeverage': True,
75
75
  'fetchLiquidations': False,
76
+ 'fetchMarginMode': True,
76
77
  'fetchMarkets': True,
77
78
  'fetchMarkOHLCV': True,
78
79
  'fetchMyLiquidations': True,
@@ -458,7 +459,7 @@ class bingx(Exchange, ImplicitAPI):
458
459
  """
459
460
  if not self.check_required_credentials(False):
460
461
  return None
461
- isSandbox = self.safe_value(self.options, 'sandboxMode', False)
462
+ isSandbox = self.safe_bool(self.options, 'sandboxMode', False)
462
463
  if isSandbox:
463
464
  return None
464
465
  response = await self.walletsV1PrivateGetCapitalConfigGetall(params)
@@ -693,7 +694,7 @@ class bingx(Exchange, ImplicitAPI):
693
694
  :returns dict[]: an array of objects representing market data
694
695
  """
695
696
  requests = [self.fetch_swap_markets(params)]
696
- isSandbox = self.safe_value(self.options, 'sandboxMode', False)
697
+ isSandbox = self.safe_bool(self.options, 'sandboxMode', False)
697
698
  if not isSandbox:
698
699
  requests.append(self.fetch_spot_markets(params)) # sandbox is swap only
699
700
  promises = await asyncio.gather(*requests)
@@ -3899,11 +3900,46 @@ class bingx(Exchange, ImplicitAPI):
3899
3900
  data = self.safe_dict(response, 'data')
3900
3901
  return self.parse_order(data, market)
3901
3902
 
3903
+ async def fetch_margin_mode(self, symbol: str, params={}) -> MarginMode:
3904
+ """
3905
+ fetches the margin mode of the trading pair
3906
+ :see: https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Query%20Margin%20Mode
3907
+ :param str symbol: unified symbol of the market to fetch the margin mode for
3908
+ :param dict [params]: extra parameters specific to the exchange API endpoint
3909
+ :returns dict: Struct of MarginMode
3910
+ """
3911
+ await self.load_markets()
3912
+ market = self.market(symbol)
3913
+ request: dict = {
3914
+ 'symbol': market['id'],
3915
+ }
3916
+ response = await self.swapV2PrivateGetTradeMarginType(self.extend(request, params))
3917
+ #
3918
+ # {
3919
+ # "code": 0,
3920
+ # "msg": "",
3921
+ # "data": {
3922
+ # "marginType": "CROSSED"
3923
+ # }
3924
+ # }
3925
+ #
3926
+ data = self.safe_dict(response, 'data', {})
3927
+ return self.parse_margin_mode(data, market)
3928
+
3929
+ def parse_margin_mode(self, marginMode, market=None) -> MarginMode:
3930
+ marginType = self.safe_string_lower(marginMode, 'marginType')
3931
+ marginType = 'cross' if (marginType == 'crossed') else marginType
3932
+ return {
3933
+ 'info': marginMode,
3934
+ 'symbol': market['symbol'],
3935
+ 'marginMode': marginType,
3936
+ }
3937
+
3902
3938
  def sign(self, path, section='public', method='GET', params={}, headers=None, body=None):
3903
3939
  type = section[0]
3904
3940
  version = section[1]
3905
3941
  access = section[2]
3906
- isSandbox = self.safe_value(self.options, 'sandboxMode', False)
3942
+ isSandbox = self.safe_bool(self.options, 'sandboxMode', False)
3907
3943
  if isSandbox and (type != 'swap'):
3908
3944
  raise NotSupported(self.id + ' does not have a testnet/sandbox URL for ' + type + ' endpoints')
3909
3945
  url = self.implode_hostname(self.urls['api'][type])
@@ -46,8 +46,8 @@ class bitfinex2(Exchange, ImplicitAPI):
46
46
  'spot': True,
47
47
  'margin': True,
48
48
  'swap': True,
49
- 'future': None,
50
- 'option': None,
49
+ 'future': False,
50
+ 'option': False,
51
51
  'addMargin': False,
52
52
  'borrowCrossMargin': False,
53
53
  'borrowIsolatedMargin': False,
@@ -58,6 +58,7 @@ class bitfinex2(Exchange, ImplicitAPI):
58
58
  'createLimitOrder': True,
59
59
  'createMarketOrder': True,
60
60
  'createOrder': True,
61
+ 'createPostOnlyOrder': True,
61
62
  'createReduceOnlyOrder': True,
62
63
  'createStopLimitOrder': True,
63
64
  'createStopMarketOrder': True,
@@ -68,8 +69,11 @@ class bitfinex2(Exchange, ImplicitAPI):
68
69
  'editOrder': True,
69
70
  'fetchBalance': True,
70
71
  'fetchBorrowInterest': False,
72
+ 'fetchBorrowRate': False,
71
73
  'fetchBorrowRateHistories': False,
72
74
  'fetchBorrowRateHistory': False,
75
+ 'fetchBorrowRates': False,
76
+ 'fetchBorrowRatesPerSymbol': False,
73
77
  'fetchClosedOrder': True,
74
78
  'fetchClosedOrders': True,
75
79
  'fetchCrossBorrowRate': False,
@@ -98,6 +102,8 @@ class bitfinex2(Exchange, ImplicitAPI):
98
102
  'fetchOpenOrder': True,
99
103
  'fetchOpenOrders': True,
100
104
  'fetchOrder': True,
105
+ 'fetchOrderBook': True,
106
+ 'fetchOrderBooks': False,
101
107
  'fetchOrderTrades': True,
102
108
  'fetchPosition': False,
103
109
  'fetchPositionMode': False,
@@ -117,6 +123,8 @@ class bitfinex2(Exchange, ImplicitAPI):
117
123
  'setMargin': True,
118
124
  'setMarginMode': False,
119
125
  'setPositionMode': False,
126
+ 'signIn': False,
127
+ 'transfer': True,
120
128
  'withdraw': True,
121
129
  },
122
130
  'timeframes': {
@@ -1484,7 +1492,16 @@ class bitfinex2(Exchange, ImplicitAPI):
1484
1492
  :param float amount: how much you want to trade in units of the base currency
1485
1493
  :param float [price]: the price of the order, in units of the quote currency, ignored in market orders
1486
1494
  :param dict [params]: extra parameters specific to the exchange API endpoint
1487
- :returns dict: request to be sent to the exchange
1495
+ :param float [params.stopPrice]: The price at which a trigger order is triggered at
1496
+ :param str [params.timeInForce]: "GTC", "IOC", "FOK", or "PO"
1497
+ :param bool [params.postOnly]:
1498
+ :param bool [params.reduceOnly]: Ensures that the executed order does not flip the opened position.
1499
+ :param int [params.flags]: additional order parameters: 4096(Post Only), 1024(Reduce Only), 16384(OCO), 64(Hidden), 512(Close), 524288(No Var Rates)
1500
+ :param int [params.lev]: leverage for a derivative order, supported by derivative symbol orders only. The value should be between 1 and 100 inclusive.
1501
+ :param str [params.price_traling]: The trailing price for a trailing stop order
1502
+ :param str [params.price_aux_limit]: Order price for stop limit orders
1503
+ :param str [params.price_oco_stop]: OCO stop price
1504
+ :returns dict: an `order structure <https://github.com/ccxt/ccxt/wiki/Manual#order-structure>`
1488
1505
  """
1489
1506
  market = self.market(symbol)
1490
1507
  amountString = self.amount_to_precision(symbol, amount)
@@ -2847,8 +2847,13 @@ class bitget(Exchange, ImplicitAPI):
2847
2847
  currencyCode = self.safe_currency_code(self.safe_string(feeStructure, 'feeCoin'))
2848
2848
  fee = {
2849
2849
  'currency': currencyCode,
2850
- 'cost': Precise.string_abs(self.safe_string(feeStructure, 'totalFee')),
2851
2850
  }
2851
+ feeCostString = self.safe_string(feeStructure, 'totalFee')
2852
+ deduction = self.safe_string(feeStructure, 'deduction') is True if 'yes' else False
2853
+ if deduction:
2854
+ fee['cost'] = feeCostString
2855
+ else:
2856
+ fee['cost'] = Precise.string_neg(feeCostString)
2852
2857
  return self.safe_trade({
2853
2858
  'info': trade,
2854
2859
  'id': self.safe_string(trade, 'tradeId'),
@@ -3866,7 +3871,7 @@ class bitget(Exchange, ImplicitAPI):
3866
3871
  :see: https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Place-Order
3867
3872
  :param str symbol: unified symbol of the market to create an order in
3868
3873
  :param str type: 'market' or 'limit'
3869
- :param str side: 'buy' or 'sell' or 'open_long' or 'open_short' or 'close_long' or 'close_short'
3874
+ :param str side: 'buy' or 'sell'
3870
3875
  :param float amount: how much you want to trade in units of the base currency
3871
3876
  :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
3872
3877
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -4269,7 +4274,7 @@ class bitget(Exchange, ImplicitAPI):
4269
4274
  params = self.omit(params, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice', 'stopLoss', 'takeProfit', 'clientOrderId', 'trailingTriggerPrice', 'trailingPercent'])
4270
4275
  response = None
4271
4276
  if market['spot']:
4272
- editMarketBuyOrderRequiresPrice = self.safe_value(self.options, 'editMarketBuyOrderRequiresPrice', True)
4277
+ editMarketBuyOrderRequiresPrice = self.safe_bool(self.options, 'editMarketBuyOrderRequiresPrice', True)
4273
4278
  if editMarketBuyOrderRequiresPrice and isMarketOrder and (side == 'buy'):
4274
4279
  if price is None:
4275
4280
  raise InvalidOrder(self.id + ' editOrder() requires price argument for market buy orders on spot markets to calculate the total amount to spend(amount * price), alternatively set the editMarketBuyOrderRequiresPrice option to False and pass in the cost to spend into the amount parameter')
@@ -530,6 +530,7 @@ class bitmart(Exchange, ImplicitAPI):
530
530
  },
531
531
  'networks': {
532
532
  'ERC20': 'ERC20',
533
+ 'SOL': 'SOL',
533
534
  'BTC': 'BTC',
534
535
  'TRC20': 'TRC20',
535
536
  # todo: should be TRX after unification
@@ -552,7 +553,6 @@ class bitmart(Exchange, ImplicitAPI):
552
553
  'FIO': 'FIO',
553
554
  'SCRT': 'SCRT',
554
555
  'IOTX': 'IOTX',
555
- 'SOL': 'SOL',
556
556
  'ALGO': 'ALGO',
557
557
  'ATOM': 'ATOM',
558
558
  'DOT': 'DOT',
@@ -2886,6 +2886,7 @@ class bitmart(Exchange, ImplicitAPI):
2886
2886
  async def fetch_deposit_address(self, code: str, params={}):
2887
2887
  """
2888
2888
  fetch the deposit address for a currency associated with self account
2889
+ :see: https://developer-pro.bitmart.com/en/spot/#deposit-address-keyed
2889
2890
  :param str code: unified currency code
2890
2891
  :param dict [params]: extra parameters specific to the exchange API endpoint
2891
2892
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -2906,39 +2907,55 @@ class bitmart(Exchange, ImplicitAPI):
2906
2907
  params = self.omit(params, 'network')
2907
2908
  response = await self.privateGetAccountV1DepositAddress(self.extend(request, params))
2908
2909
  #
2909
- # {
2910
- # "message":"OK",
2911
- # "code":1000,
2912
- # "trace":"0e6edd79-f77f-4251-abe5-83ba75d06c1a",
2913
- # "data":{
2914
- # "currency":"USDT-TRC20",
2915
- # "chain":"USDT-TRC20",
2916
- # "address":"TGR3ghy2b5VLbyAYrmiE15jasR6aPHTvC5",
2917
- # "address_memo":""
2918
- # }
2919
- # }
2910
+ # {
2911
+ # "message": "OK",
2912
+ # "code": 1000,
2913
+ # "trace": "0e6edd79-f77f-4251-abe5-83ba75d06c1a",
2914
+ # "data": {
2915
+ # currency: 'ETH',
2916
+ # chain: 'Ethereum',
2917
+ # address: '0x99B5EEc2C520f86F0F62F05820d28D05D36EccCf',
2918
+ # address_memo: ''
2919
+ # }
2920
+ # }
2920
2921
  #
2921
2922
  data = self.safe_value(response, 'data', {})
2922
- address = self.safe_string(data, 'address')
2923
- tag = self.safe_string(data, 'address_memo')
2924
- chain = self.safe_string(data, 'chain')
2923
+ return self.parse_deposit_address(data, currency)
2924
+
2925
+ def parse_deposit_address(self, depositAddress, currency=None):
2926
+ #
2927
+ # {
2928
+ # currency: 'ETH',
2929
+ # chain: 'Ethereum',
2930
+ # address: '0x99B5EEc2C520f86F0F62F05820d28D05D36EccCf',
2931
+ # address_memo: ''
2932
+ # }
2933
+ #
2934
+ currencyId = self.safe_string(depositAddress, 'currency')
2935
+ address = self.safe_string(depositAddress, 'address')
2936
+ chain = self.safe_string(depositAddress, 'chain')
2925
2937
  network = None
2938
+ currency = self.safe_currency(currencyId, currency)
2926
2939
  if chain is not None:
2927
2940
  parts = chain.split('-')
2928
- networkId = self.safe_string(parts, 1)
2929
- network = self.safe_network(networkId)
2941
+ partsLength = len(parts)
2942
+ networkId = self.safe_string(parts, partsLength - 1)
2943
+ network = self.safe_network_code(networkId, currency)
2930
2944
  self.check_address(address)
2931
2945
  return {
2932
- 'currency': code,
2946
+ 'info': depositAddress,
2947
+ 'currency': self.safe_string(currency, 'code'),
2933
2948
  'address': address,
2934
- 'tag': tag,
2949
+ 'tag': self.safe_string(depositAddress, 'address_memo'),
2935
2950
  'network': network,
2936
- 'info': response,
2937
2951
  }
2938
2952
 
2939
- def safe_network(self, networkId):
2940
- # TODO: parse
2941
- return networkId
2953
+ def safe_network_code(self, networkId, currency=None):
2954
+ name = self.safe_string(currency, 'name')
2955
+ if networkId == name:
2956
+ code = self.safe_string(currency, 'code')
2957
+ return code
2958
+ return self.network_id_to_code(networkId)
2942
2959
 
2943
2960
  async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2944
2961
  """
@@ -1436,7 +1436,7 @@ class bitmex(Exchange, ImplicitAPI):
1436
1436
  params = self.omit(params, ['until'])
1437
1437
  request['endTime'] = self.iso8601(until)
1438
1438
  duration = self.parse_timeframe(timeframe) * 1000
1439
- fetchOHLCVOpenTimestamp = self.safe_value(self.options, 'fetchOHLCVOpenTimestamp', True)
1439
+ fetchOHLCVOpenTimestamp = self.safe_bool(self.options, 'fetchOHLCVOpenTimestamp', True)
1440
1440
  # if since is not set, they will return candles starting from 2017-01-01
1441
1441
  if since is not None:
1442
1442
  timestamp = since