ccxt 4.0.77__tar.gz → 4.0.78__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.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

Files changed (464) hide show
  1. {ccxt-4.0.77/ccxt.egg-info → ccxt-4.0.78}/PKG-INFO +4 -4
  2. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/__init__.py +1 -1
  3. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bingx.py +1 -1
  4. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/okex.py +1 -0
  5. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/okex5.py +1 -0
  6. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/okx.py +1 -0
  7. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/__init__.py +1 -1
  8. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/exchange.py +7 -2
  9. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bingx.py +21 -17
  10. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/kucoinfutures.py +1 -1
  11. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/okx.py +1 -0
  12. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/base/exchange.py +7 -2
  13. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bingx.py +21 -17
  14. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/kucoinfutures.py +1 -1
  15. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/okx.py +1 -0
  16. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/__init__.py +1 -1
  17. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/test_async.py +8 -3
  18. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/test_sync.py +8 -3
  19. {ccxt-4.0.77 → ccxt-4.0.78/ccxt.egg-info}/PKG-INFO +4 -4
  20. {ccxt-4.0.77 → ccxt-4.0.78}/package.json +1 -1
  21. {ccxt-4.0.77 → ccxt-4.0.78}/LICENSE.txt +0 -0
  22. {ccxt-4.0.77 → ccxt-4.0.78}/MANIFEST.in +0 -0
  23. {ccxt-4.0.77 → ccxt-4.0.78}/README.rst +0 -0
  24. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/__init__.py +0 -0
  25. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/ace.py +0 -0
  26. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/alpaca.py +0 -0
  27. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/ascendex.py +0 -0
  28. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bequant.py +0 -0
  29. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bigone.py +0 -0
  30. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/binance.py +0 -0
  31. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/binancecoinm.py +0 -0
  32. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/binanceus.py +0 -0
  33. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/binanceusdm.py +0 -0
  34. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bit2c.py +0 -0
  35. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitbank.py +0 -0
  36. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitbay.py +0 -0
  37. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitbns.py +0 -0
  38. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitcoincom.py +0 -0
  39. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitfinex.py +0 -0
  40. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitfinex2.py +0 -0
  41. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitflyer.py +0 -0
  42. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitforex.py +0 -0
  43. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitget.py +0 -0
  44. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bithumb.py +0 -0
  45. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitmart.py +0 -0
  46. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitmex.py +0 -0
  47. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitopro.py +0 -0
  48. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitpanda.py +0 -0
  49. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitrue.py +0 -0
  50. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitso.py +0 -0
  51. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitstamp.py +0 -0
  52. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitstamp1.py +0 -0
  53. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bittrex.py +0 -0
  54. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bitvavo.py +0 -0
  55. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bkex.py +0 -0
  56. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bl3p.py +0 -0
  57. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/blockchaincom.py +0 -0
  58. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/btcalpha.py +0 -0
  59. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/btcbox.py +0 -0
  60. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/btcmarkets.py +0 -0
  61. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/btctradeua.py +0 -0
  62. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/btcturk.py +0 -0
  63. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/bybit.py +0 -0
  64. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/cex.py +0 -0
  65. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinbase.py +0 -0
  66. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinbaseprime.py +0 -0
  67. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinbasepro.py +0 -0
  68. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coincheck.py +0 -0
  69. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinex.py +0 -0
  70. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinfalcon.py +0 -0
  71. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinmate.py +0 -0
  72. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinone.py +0 -0
  73. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinsph.py +0 -0
  74. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/coinspot.py +0 -0
  75. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/cryptocom.py +0 -0
  76. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/currencycom.py +0 -0
  77. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/delta.py +0 -0
  78. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/deribit.py +0 -0
  79. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/digifinex.py +0 -0
  80. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/exmo.py +0 -0
  81. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/fmfwio.py +0 -0
  82. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/gate.py +0 -0
  83. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/gateio.py +0 -0
  84. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/gemini.py +0 -0
  85. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/hitbtc.py +0 -0
  86. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/hitbtc3.py +0 -0
  87. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/hollaex.py +0 -0
  88. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/huobi.py +0 -0
  89. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/huobijp.py +0 -0
  90. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/huobipro.py +0 -0
  91. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/idex.py +0 -0
  92. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/independentreserve.py +0 -0
  93. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/indodax.py +0 -0
  94. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/kraken.py +0 -0
  95. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/krakenfutures.py +0 -0
  96. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/kucoin.py +0 -0
  97. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/kucoinfutures.py +0 -0
  98. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/kuna.py +0 -0
  99. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/latoken.py +0 -0
  100. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/lbank.py +0 -0
  101. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/lbank2.py +0 -0
  102. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/luno.py +0 -0
  103. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/lykke.py +0 -0
  104. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/mercado.py +0 -0
  105. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/mexc.py +0 -0
  106. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/mexc3.py +0 -0
  107. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/ndax.py +0 -0
  108. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/novadax.py +0 -0
  109. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/oceanex.py +0 -0
  110. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/okcoin.py +0 -0
  111. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/paymium.py +0 -0
  112. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/phemex.py +0 -0
  113. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/poloniex.py +0 -0
  114. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/poloniexfutures.py +0 -0
  115. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/probit.py +0 -0
  116. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/tidex.py +0 -0
  117. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/timex.py +0 -0
  118. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/tokocrypto.py +0 -0
  119. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/upbit.py +0 -0
  120. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/wavesexchange.py +0 -0
  121. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/wazirx.py +0 -0
  122. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/whitebit.py +0 -0
  123. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/woo.py +0 -0
  124. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/yobit.py +0 -0
  125. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/zaif.py +0 -0
  126. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/abstract/zonda.py +0 -0
  127. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/ace.py +0 -0
  128. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/alpaca.py +0 -0
  129. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/ascendex.py +0 -0
  130. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/ace.py +0 -0
  131. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/alpaca.py +0 -0
  132. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/ascendex.py +0 -0
  133. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/__init__.py +0 -0
  134. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/throttler.py +0 -0
  135. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/__init__.py +0 -0
  136. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  137. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/cache.py +0 -0
  138. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/client.py +0 -0
  139. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/fast_client.py +0 -0
  140. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/functions.py +0 -0
  141. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/future.py +0 -0
  142. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/order_book.py +0 -0
  143. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  144. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bequant.py +0 -0
  145. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bigone.py +0 -0
  146. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/binance.py +0 -0
  147. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/binancecoinm.py +0 -0
  148. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/binanceus.py +0 -0
  149. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/binanceusdm.py +0 -0
  150. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bit2c.py +0 -0
  151. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitbank.py +0 -0
  152. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitbay.py +0 -0
  153. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitbns.py +0 -0
  154. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitcoincom.py +0 -0
  155. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitfinex.py +0 -0
  156. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitfinex2.py +0 -0
  157. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitflyer.py +0 -0
  158. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitforex.py +0 -0
  159. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitget.py +0 -0
  160. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bithumb.py +0 -0
  161. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitmart.py +0 -0
  162. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitmex.py +0 -0
  163. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitopro.py +0 -0
  164. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitpanda.py +0 -0
  165. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitrue.py +0 -0
  166. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitso.py +0 -0
  167. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitstamp.py +0 -0
  168. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitstamp1.py +0 -0
  169. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bittrex.py +0 -0
  170. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bitvavo.py +0 -0
  171. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bkex.py +0 -0
  172. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bl3p.py +0 -0
  173. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/blockchaincom.py +0 -0
  174. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/btcalpha.py +0 -0
  175. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/btcbox.py +0 -0
  176. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/btcmarkets.py +0 -0
  177. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/btctradeua.py +0 -0
  178. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/btcturk.py +0 -0
  179. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/bybit.py +0 -0
  180. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/cex.py +0 -0
  181. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinbase.py +0 -0
  182. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinbaseprime.py +0 -0
  183. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinbasepro.py +0 -0
  184. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coincheck.py +0 -0
  185. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinex.py +0 -0
  186. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinfalcon.py +0 -0
  187. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinmate.py +0 -0
  188. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinone.py +0 -0
  189. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinsph.py +0 -0
  190. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/coinspot.py +0 -0
  191. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/cryptocom.py +0 -0
  192. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/currencycom.py +0 -0
  193. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/delta.py +0 -0
  194. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/deribit.py +0 -0
  195. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/digifinex.py +0 -0
  196. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/exmo.py +0 -0
  197. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/flowbtc.py +0 -0
  198. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/fmfwio.py +0 -0
  199. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/gate.py +0 -0
  200. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/gateio.py +0 -0
  201. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/gemini.py +0 -0
  202. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/hitbtc.py +0 -0
  203. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/hitbtc3.py +0 -0
  204. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/hollaex.py +0 -0
  205. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/huobi.py +0 -0
  206. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/huobijp.py +0 -0
  207. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/huobipro.py +0 -0
  208. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/idex.py +0 -0
  209. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/independentreserve.py +0 -0
  210. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/indodax.py +0 -0
  211. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/kraken.py +0 -0
  212. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/krakenfutures.py +0 -0
  213. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/kucoin.py +0 -0
  214. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/kuna.py +0 -0
  215. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/latoken.py +0 -0
  216. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/lbank.py +0 -0
  217. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/lbank2.py +0 -0
  218. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/luno.py +0 -0
  219. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/lykke.py +0 -0
  220. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/mercado.py +0 -0
  221. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/mexc.py +0 -0
  222. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/mexc3.py +0 -0
  223. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/ndax.py +0 -0
  224. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/novadax.py +0 -0
  225. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/oceanex.py +0 -0
  226. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/okcoin.py +0 -0
  227. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/okex.py +0 -0
  228. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/okex5.py +0 -0
  229. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/paymium.py +0 -0
  230. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/phemex.py +0 -0
  231. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/poloniex.py +0 -0
  232. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/poloniexfutures.py +0 -0
  233. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/probit.py +0 -0
  234. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/tidex.py +0 -0
  235. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/timex.py +0 -0
  236. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/tokocrypto.py +0 -0
  237. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/upbit.py +0 -0
  238. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/wavesexchange.py +0 -0
  239. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/wazirx.py +0 -0
  240. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/whitebit.py +0 -0
  241. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/woo.py +0 -0
  242. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/yobit.py +0 -0
  243. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/zaif.py +0 -0
  244. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/async_support/zonda.py +0 -0
  245. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/base/__init__.py +0 -0
  246. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/base/decimal_to_precision.py +0 -0
  247. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/base/errors.py +0 -0
  248. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/base/precise.py +0 -0
  249. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/base/types.py +0 -0
  250. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bequant.py +0 -0
  251. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bigone.py +0 -0
  252. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/binance.py +0 -0
  253. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/binancecoinm.py +0 -0
  254. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/binanceus.py +0 -0
  255. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/binanceusdm.py +0 -0
  256. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bit2c.py +0 -0
  257. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitbank.py +0 -0
  258. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitbay.py +0 -0
  259. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitbns.py +0 -0
  260. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitcoincom.py +0 -0
  261. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitfinex.py +0 -0
  262. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitfinex2.py +0 -0
  263. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitflyer.py +0 -0
  264. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitforex.py +0 -0
  265. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitget.py +0 -0
  266. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bithumb.py +0 -0
  267. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitmart.py +0 -0
  268. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitmex.py +0 -0
  269. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitopro.py +0 -0
  270. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitpanda.py +0 -0
  271. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitrue.py +0 -0
  272. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitso.py +0 -0
  273. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitstamp.py +0 -0
  274. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitstamp1.py +0 -0
  275. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bittrex.py +0 -0
  276. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bitvavo.py +0 -0
  277. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bkex.py +0 -0
  278. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bl3p.py +0 -0
  279. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/blockchaincom.py +0 -0
  280. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/btcalpha.py +0 -0
  281. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/btcbox.py +0 -0
  282. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/btcmarkets.py +0 -0
  283. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/btctradeua.py +0 -0
  284. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/btcturk.py +0 -0
  285. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/bybit.py +0 -0
  286. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/cex.py +0 -0
  287. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinbase.py +0 -0
  288. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinbaseprime.py +0 -0
  289. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinbasepro.py +0 -0
  290. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coincheck.py +0 -0
  291. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinex.py +0 -0
  292. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinfalcon.py +0 -0
  293. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinmate.py +0 -0
  294. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinone.py +0 -0
  295. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinsph.py +0 -0
  296. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/coinspot.py +0 -0
  297. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/cryptocom.py +0 -0
  298. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/currencycom.py +0 -0
  299. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/delta.py +0 -0
  300. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/deribit.py +0 -0
  301. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/digifinex.py +0 -0
  302. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/exmo.py +0 -0
  303. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/flowbtc.py +0 -0
  304. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/fmfwio.py +0 -0
  305. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/gate.py +0 -0
  306. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/gateio.py +0 -0
  307. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/gemini.py +0 -0
  308. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/hitbtc.py +0 -0
  309. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/hitbtc3.py +0 -0
  310. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/hollaex.py +0 -0
  311. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/huobi.py +0 -0
  312. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/huobijp.py +0 -0
  313. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/huobipro.py +0 -0
  314. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/idex.py +0 -0
  315. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/independentreserve.py +0 -0
  316. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/indodax.py +0 -0
  317. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/kraken.py +0 -0
  318. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/krakenfutures.py +0 -0
  319. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/kucoin.py +0 -0
  320. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/kuna.py +0 -0
  321. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/latoken.py +0 -0
  322. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/lbank.py +0 -0
  323. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/lbank2.py +0 -0
  324. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/luno.py +0 -0
  325. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/lykke.py +0 -0
  326. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/mercado.py +0 -0
  327. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/mexc.py +0 -0
  328. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/mexc3.py +0 -0
  329. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/ndax.py +0 -0
  330. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/novadax.py +0 -0
  331. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/oceanex.py +0 -0
  332. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/okcoin.py +0 -0
  333. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/okex.py +0 -0
  334. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/okex5.py +0 -0
  335. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/paymium.py +0 -0
  336. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/phemex.py +0 -0
  337. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/poloniex.py +0 -0
  338. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/poloniexfutures.py +0 -0
  339. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/alpaca.py +0 -0
  340. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/ascendex.py +0 -0
  341. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bequant.py +0 -0
  342. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/binance.py +0 -0
  343. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/binancecoinm.py +0 -0
  344. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/binanceus.py +0 -0
  345. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/binanceusdm.py +0 -0
  346. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitcoincom.py +0 -0
  347. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitfinex.py +0 -0
  348. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitfinex2.py +0 -0
  349. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitget.py +0 -0
  350. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitmart.py +0 -0
  351. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitmex.py +0 -0
  352. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitopro.py +0 -0
  353. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitpanda.py +0 -0
  354. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitrue.py +0 -0
  355. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitstamp.py +0 -0
  356. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bittrex.py +0 -0
  357. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bitvavo.py +0 -0
  358. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/blockchaincom.py +0 -0
  359. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/btcex.py +0 -0
  360. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/bybit.py +0 -0
  361. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/cex.py +0 -0
  362. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/coinbase.py +0 -0
  363. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/coinbaseprime.py +0 -0
  364. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/coinbasepro.py +0 -0
  365. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/coinex.py +0 -0
  366. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/cryptocom.py +0 -0
  367. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/currencycom.py +0 -0
  368. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/deribit.py +0 -0
  369. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/exmo.py +0 -0
  370. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/gate.py +0 -0
  371. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/gateio.py +0 -0
  372. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/gemini.py +0 -0
  373. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/hitbtc.py +0 -0
  374. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/hollaex.py +0 -0
  375. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/huobi.py +0 -0
  376. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/huobijp.py +0 -0
  377. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/huobipro.py +0 -0
  378. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/idex.py +0 -0
  379. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/independentreserve.py +0 -0
  380. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/kraken.py +0 -0
  381. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/krakenfutures.py +0 -0
  382. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/kucoin.py +0 -0
  383. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/kucoinfutures.py +0 -0
  384. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/luno.py +0 -0
  385. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/mexc.py +0 -0
  386. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/mexc3.py +0 -0
  387. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/ndax.py +0 -0
  388. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/okcoin.py +0 -0
  389. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/okex.py +0 -0
  390. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/okx.py +0 -0
  391. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/phemex.py +0 -0
  392. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/poloniex.py +0 -0
  393. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/poloniexfutures.py +0 -0
  394. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/probit.py +0 -0
  395. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/ripio.py +0 -0
  396. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/upbit.py +0 -0
  397. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/wazirx.py +0 -0
  398. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/whitebit.py +0 -0
  399. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/woo.py +0 -0
  400. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/pro/zb.py +0 -0
  401. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/probit.py +0 -0
  402. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/__init__.py +0 -0
  403. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  404. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  405. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  406. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  407. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  408. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  409. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  410. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  411. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  412. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  413. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  414. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  415. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/__init__.py +0 -0
  416. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/__init__.py +0 -0
  417. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_account.py +0 -0
  418. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_balance.py +0 -0
  419. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_borrow_interest.py +0 -0
  420. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_borrow_rate.py +0 -0
  421. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_calculate_fee.py +0 -0
  422. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_crypto.py +0 -0
  423. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_currency.py +0 -0
  424. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_datetime.py +0 -0
  425. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  426. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_deep_extend.py +0 -0
  427. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  428. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  429. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_funding_rate_history.py +0 -0
  430. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_ledger_entry.py +0 -0
  431. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_ledger_item.py +0 -0
  432. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_leverage_tier.py +0 -0
  433. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_margin_modification.py +0 -0
  434. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_market.py +0 -0
  435. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_number.py +0 -0
  436. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_ohlcv.py +0 -0
  437. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_open_interest.py +0 -0
  438. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_order.py +0 -0
  439. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_order_book.py +0 -0
  440. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_position.py +0 -0
  441. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_shared_methods.py +0 -0
  442. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_status.py +0 -0
  443. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_throttle.py +0 -0
  444. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_ticker.py +0 -0
  445. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_trade.py +0 -0
  446. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_trading_fee.py +0 -0
  447. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/test/base/test_transaction.py +0 -0
  448. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/tidex.py +0 -0
  449. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/timex.py +0 -0
  450. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/tokocrypto.py +0 -0
  451. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/upbit.py +0 -0
  452. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/wavesexchange.py +0 -0
  453. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/wazirx.py +0 -0
  454. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/whitebit.py +0 -0
  455. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/woo.py +0 -0
  456. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/yobit.py +0 -0
  457. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/zaif.py +0 -0
  458. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt/zonda.py +0 -0
  459. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt.egg-info/SOURCES.txt +0 -0
  460. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt.egg-info/dependency_links.txt +0 -0
  461. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt.egg-info/requires.txt +0 -0
  462. {ccxt-4.0.77 → ccxt-4.0.78}/ccxt.egg-info/top_level.txt +0 -0
  463. {ccxt-4.0.77 → ccxt-4.0.78}/setup.cfg +0 -0
  464. {ccxt-4.0.77 → ccxt-4.0.78}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.0.77
3
+ Version: 4.0.78
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -228,13 +228,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
228
228
 
229
229
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
230
230
 
231
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.77/dist/ccxt.browser.js
232
- * unpkg: https://unpkg.com/ccxt@4.0.77/dist/ccxt.browser.js
231
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.78/dist/ccxt.browser.js
232
+ * unpkg: https://unpkg.com/ccxt@4.0.78/dist/ccxt.browser.js
233
233
 
234
234
  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.
235
235
 
236
236
  ```HTML
237
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.77/dist/ccxt.browser.js"></script>
237
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.78/dist/ccxt.browser.js"></script>
238
238
  ```
239
239
 
240
240
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.0.77'
25
+ __version__ = '4.0.78'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -6,11 +6,11 @@ class ImplicitAPI:
6
6
  spot_v1_public_get_market_trades = spotV1PublicGetMarketTrades = Entry('market/trades', ['spot', 'v1', 'public'], 'GET', {'cost': 3})
7
7
  spot_v1_public_get_market_depth = spotV1PublicGetMarketDepth = Entry('market/depth', ['spot', 'v1', 'public'], 'GET', {'cost': 3})
8
8
  spot_v1_public_get_market_kline = spotV1PublicGetMarketKline = Entry('market/kline', ['spot', 'v1', 'public'], 'GET', {'cost': 3})
9
+ spot_v1_public_get_ticker_24hr = spotV1PublicGetTicker24hr = Entry('ticker/24hr', ['spot', 'v1', 'public'], 'GET', {'cost': 1})
9
10
  spot_v1_private_get_trade_query = spotV1PrivateGetTradeQuery = Entry('trade/query', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
10
11
  spot_v1_private_get_trade_openorders = spotV1PrivateGetTradeOpenOrders = Entry('trade/openOrders', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
11
12
  spot_v1_private_get_trade_historyorders = spotV1PrivateGetTradeHistoryOrders = Entry('trade/historyOrders', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
12
13
  spot_v1_private_get_account_balance = spotV1PrivateGetAccountBalance = Entry('account/balance', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
13
- spot_v1_private_get_ticker_24hr = spotV1PrivateGetTicker24hr = Entry('ticker/24hr', ['spot', 'v1', 'private'], 'GET', {'cost': 1})
14
14
  spot_v1_private_post_trade_order = spotV1PrivatePostTradeOrder = Entry('trade/order', ['spot', 'v1', 'private'], 'POST', {'cost': 3})
15
15
  spot_v1_private_post_trade_cancel = spotV1PrivatePostTradeCancel = Entry('trade/cancel', ['spot', 'v1', 'private'], 'POST', {'cost': 3})
16
16
  spot_v1_private_post_trade_batchorders = spotV1PrivatePostTradeBatchOrders = Entry('trade/batchOrders', ['spot', 'v1', 'private'], 'POST', {'cost': 3})
@@ -60,6 +60,7 @@ class ImplicitAPI:
60
60
  public_get_tradingbot_grid_ai_param = publicGetTradingBotGridAiParam = Entry('tradingBot/grid/ai-param', 'public', 'GET', {'cost': 1})
61
61
  public_get_tradingbot_grid_min_investment = publicGetTradingBotGridMinInvestment = Entry('tradingBot/grid/min-investment', 'public', 'GET', {'cost': 1})
62
62
  public_get_tradingbot_public_rsi_back_testing = publicGetTradingBotPublicRsiBackTesting = Entry('tradingBot/public/rsi-back-testing', 'public', 'GET', {'cost': 1})
63
+ public_get_asset_exchange_list = publicGetAssetExchangeList = Entry('asset/exchange-list', 'public', 'GET', {'cost': 1.6666666666666667})
63
64
  public_get_finance_savings_lending_rate_summary = publicGetFinanceSavingsLendingRateSummary = Entry('finance/savings/lending-rate-summary', 'public', 'GET', {'cost': 1.6666666666666667})
64
65
  public_get_finance_savings_lending_rate_history = publicGetFinanceSavingsLendingRateHistory = Entry('finance/savings/lending-rate-history', 'public', 'GET', {'cost': 1.6666666666666667})
65
66
  public_get_finance_sfp_dcd_products = publicGetFinanceSfpDcdProducts = Entry('finance/sfp/dcd/products', 'public', 'GET', {'cost': 0.6666666666666666})
@@ -60,6 +60,7 @@ class ImplicitAPI:
60
60
  public_get_tradingbot_grid_ai_param = publicGetTradingBotGridAiParam = Entry('tradingBot/grid/ai-param', 'public', 'GET', {'cost': 1})
61
61
  public_get_tradingbot_grid_min_investment = publicGetTradingBotGridMinInvestment = Entry('tradingBot/grid/min-investment', 'public', 'GET', {'cost': 1})
62
62
  public_get_tradingbot_public_rsi_back_testing = publicGetTradingBotPublicRsiBackTesting = Entry('tradingBot/public/rsi-back-testing', 'public', 'GET', {'cost': 1})
63
+ public_get_asset_exchange_list = publicGetAssetExchangeList = Entry('asset/exchange-list', 'public', 'GET', {'cost': 1.6666666666666667})
63
64
  public_get_finance_savings_lending_rate_summary = publicGetFinanceSavingsLendingRateSummary = Entry('finance/savings/lending-rate-summary', 'public', 'GET', {'cost': 1.6666666666666667})
64
65
  public_get_finance_savings_lending_rate_history = publicGetFinanceSavingsLendingRateHistory = Entry('finance/savings/lending-rate-history', 'public', 'GET', {'cost': 1.6666666666666667})
65
66
  public_get_finance_sfp_dcd_products = publicGetFinanceSfpDcdProducts = Entry('finance/sfp/dcd/products', 'public', 'GET', {'cost': 0.6666666666666666})
@@ -60,6 +60,7 @@ class ImplicitAPI:
60
60
  public_get_tradingbot_grid_ai_param = publicGetTradingBotGridAiParam = Entry('tradingBot/grid/ai-param', 'public', 'GET', {'cost': 1})
61
61
  public_get_tradingbot_grid_min_investment = publicGetTradingBotGridMinInvestment = Entry('tradingBot/grid/min-investment', 'public', 'GET', {'cost': 1})
62
62
  public_get_tradingbot_public_rsi_back_testing = publicGetTradingBotPublicRsiBackTesting = Entry('tradingBot/public/rsi-back-testing', 'public', 'GET', {'cost': 1})
63
+ public_get_asset_exchange_list = publicGetAssetExchangeList = Entry('asset/exchange-list', 'public', 'GET', {'cost': 1.6666666666666667})
63
64
  public_get_finance_savings_lending_rate_summary = publicGetFinanceSavingsLendingRateSummary = Entry('finance/savings/lending-rate-summary', 'public', 'GET', {'cost': 1.6666666666666667})
64
65
  public_get_finance_savings_lending_rate_history = publicGetFinanceSavingsLendingRateHistory = Entry('finance/savings/lending-rate-history', 'public', 'GET', {'cost': 1.6666666666666667})
65
66
  public_get_finance_sfp_dcd_products = publicGetFinanceSfpDcdProducts = Entry('finance/sfp/dcd/products', 'public', 'GET', {'cost': 0.6666666666666666})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.77'
7
+ __version__ = '4.0.78'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.0.77'
5
+ __version__ = '4.0.78'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -2446,10 +2446,15 @@ class Exchange(BaseExchange):
2446
2446
  networkItem = self.safe_value(networks, networkCode, {})
2447
2447
  precision = self.safe_value(networkItem, 'precision', precision)
2448
2448
  if precision is None:
2449
- return fee
2449
+ return self.forceString(fee)
2450
2450
  else:
2451
2451
  return self.decimal_to_precision(fee, ROUND, precision, self.precisionMode, self.paddingMode)
2452
2452
 
2453
+ def force_string(self, value):
2454
+ if not isinstance(value, str):
2455
+ return self.number_to_string(value)
2456
+ return value
2457
+
2453
2458
  def is_tick_precision(self):
2454
2459
  return self.precisionMode == TICK_SIZE
2455
2460
 
@@ -108,6 +108,7 @@ class bingx(Exchange, ImplicitAPI):
108
108
  'market/trades': 3,
109
109
  'market/depth': 3,
110
110
  'market/kline': 3,
111
+ 'ticker/24hr': 1,
111
112
  },
112
113
  },
113
114
  'private': {
@@ -116,7 +117,6 @@ class bingx(Exchange, ImplicitAPI):
116
117
  'trade/openOrders': 3,
117
118
  'trade/historyOrders': 3,
118
119
  'account/balance': 3,
119
- 'ticker/24hr': 1,
120
120
  },
121
121
  'post': {
122
122
  'trade/order': 3,
@@ -274,6 +274,7 @@ class bingx(Exchange, ImplicitAPI):
274
274
  '500': ExchangeError,
275
275
  '504': ExchangeError,
276
276
  '100001': AuthenticationError,
277
+ '100412': AuthenticationError,
277
278
  '100202': InsufficientFunds,
278
279
  '100400': BadRequest,
279
280
  '100440': ExchangeError,
@@ -1070,7 +1071,7 @@ class bingx(Exchange, ImplicitAPI):
1070
1071
  }
1071
1072
  response = None
1072
1073
  if market['spot']:
1073
- response = await self.spotV1PrivateGetTicker24hr(self.extend(request, params))
1074
+ response = await self.spotV1PublicGetTicker24hr(self.extend(request, params))
1074
1075
  else:
1075
1076
  response = await self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1076
1077
  #
@@ -1106,13 +1107,18 @@ class bingx(Exchange, ImplicitAPI):
1106
1107
  :returns dict: a dictionary of `ticker structures <https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure>`
1107
1108
  """
1108
1109
  await self.load_markets()
1110
+ market = None
1109
1111
  if symbols is not None:
1110
1112
  symbols = self.market_symbols(symbols)
1111
1113
  firstSymbol = self.safe_string(symbols, 0)
1112
1114
  market = self.market(firstSymbol)
1113
- if not market['swap']:
1114
- raise BadRequest(self.id + ' fetchTicker is only supported for swap markets.')
1115
- response = await self.swapV2PublicGetQuoteTicker(params)
1115
+ type = None
1116
+ type, params = self.handle_market_type_and_params('fetchTickers', market, params)
1117
+ response = None
1118
+ if type == 'spot':
1119
+ response = await self.spotV1PublicGetTicker24hr(params)
1120
+ else:
1121
+ response = await self.swapV2PublicGetQuoteTicker(params)
1116
1122
  #
1117
1123
  # {
1118
1124
  # "code": 0,
@@ -2686,25 +2692,21 @@ class bingx(Exchange, ImplicitAPI):
2686
2692
  self.parse_transaction(data)
2687
2693
 
2688
2694
  def parse_params(self, params):
2689
- result = ''
2690
2695
  sortedParams = self.keysort(params)
2691
2696
  keys = list(sortedParams.keys())
2692
2697
  for i in range(0, len(keys)):
2693
2698
  key = keys[i]
2694
- if i > 0:
2695
- result += '&'
2696
2699
  value = sortedParams[key]
2697
2700
  if isinstance(value, list):
2698
- result += key + '=['
2701
+ arrStr = '['
2699
2702
  for j in range(0, len(value)):
2700
2703
  arrayElement = value[j]
2701
2704
  if j > 0:
2702
- result += ','
2703
- result += str(arrayElement)
2704
- result += ']'
2705
- else:
2706
- result += key + '=' + str(value)
2707
- return result
2705
+ arrStr += ','
2706
+ arrStr += str(arrayElement)
2707
+ arrStr += ']'
2708
+ sortedParams[key] = arrStr
2709
+ return sortedParams
2708
2710
 
2709
2711
  def sign(self, path, section='public', method='GET', params={}, headers=None, body=None):
2710
2712
  type = section[0]
@@ -2721,13 +2723,15 @@ class bingx(Exchange, ImplicitAPI):
2721
2723
  params = self.omit(params, self.extract_params(path))
2722
2724
  params = self.keysort(params)
2723
2725
  if access == 'public':
2726
+ params['timestamp'] = self.nonce()
2724
2727
  if params:
2725
2728
  url += '?' + self.urlencode(params)
2726
2729
  elif access == 'private':
2727
2730
  self.check_required_credentials()
2728
2731
  params['timestamp'] = self.nonce()
2729
- query = self.parse_params(params)
2730
- signature = self.hmac(self.encode(query), self.encode(self.secret), hashlib.sha256)
2732
+ parsedParams = self.parse_params(params)
2733
+ query = self.urlencode(parsedParams)
2734
+ signature = self.hmac(self.encode(self.rawencode(parsedParams)), self.encode(self.secret), hashlib.sha256)
2731
2735
  if params:
2732
2736
  query = '?' + query + '&'
2733
2737
  else:
@@ -1098,7 +1098,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
1098
1098
  'size': preciseAmount,
1099
1099
  'leverage': 1,
1100
1100
  }
1101
- triggerPrice, stopLossPrice, takeProfitPrice = self.handleTriggerPrices(params)
1101
+ triggerPrice, stopLossPrice, takeProfitPrice = self.handle_trigger_prices(params)
1102
1102
  params = self.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice'])
1103
1103
  if triggerPrice:
1104
1104
  request['stop'] = 'up' if (side == 'buy') else 'down'
@@ -246,6 +246,7 @@ class okx(Exchange, ImplicitAPI):
246
246
  'tradingBot/grid/ai-param': 1,
247
247
  'tradingBot/grid/min-investment': 1,
248
248
  'tradingBot/public/rsi-back-testing': 1,
249
+ 'asset/exchange-list': 5 / 3,
249
250
  'finance/savings/lending-rate-summary': 5 / 3,
250
251
  'finance/savings/lending-rate-history': 5 / 3,
251
252
  # public broker
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.77'
7
+ __version__ = '4.0.78'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -3626,10 +3626,15 @@ class Exchange(object):
3626
3626
  networkItem = self.safe_value(networks, networkCode, {})
3627
3627
  precision = self.safe_value(networkItem, 'precision', precision)
3628
3628
  if precision is None:
3629
- return fee
3629
+ return self.forceString(fee)
3630
3630
  else:
3631
3631
  return self.decimal_to_precision(fee, ROUND, precision, self.precisionMode, self.paddingMode)
3632
3632
 
3633
+ def force_string(self, value):
3634
+ if not isinstance(value, str):
3635
+ return self.number_to_string(value)
3636
+ return value
3637
+
3633
3638
  def is_tick_precision(self):
3634
3639
  return self.precisionMode == TICK_SIZE
3635
3640
 
@@ -107,6 +107,7 @@ class bingx(Exchange, ImplicitAPI):
107
107
  'market/trades': 3,
108
108
  'market/depth': 3,
109
109
  'market/kline': 3,
110
+ 'ticker/24hr': 1,
110
111
  },
111
112
  },
112
113
  'private': {
@@ -115,7 +116,6 @@ class bingx(Exchange, ImplicitAPI):
115
116
  'trade/openOrders': 3,
116
117
  'trade/historyOrders': 3,
117
118
  'account/balance': 3,
118
- 'ticker/24hr': 1,
119
119
  },
120
120
  'post': {
121
121
  'trade/order': 3,
@@ -273,6 +273,7 @@ class bingx(Exchange, ImplicitAPI):
273
273
  '500': ExchangeError,
274
274
  '504': ExchangeError,
275
275
  '100001': AuthenticationError,
276
+ '100412': AuthenticationError,
276
277
  '100202': InsufficientFunds,
277
278
  '100400': BadRequest,
278
279
  '100440': ExchangeError,
@@ -1069,7 +1070,7 @@ class bingx(Exchange, ImplicitAPI):
1069
1070
  }
1070
1071
  response = None
1071
1072
  if market['spot']:
1072
- response = self.spotV1PrivateGetTicker24hr(self.extend(request, params))
1073
+ response = self.spotV1PublicGetTicker24hr(self.extend(request, params))
1073
1074
  else:
1074
1075
  response = self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1075
1076
  #
@@ -1105,13 +1106,18 @@ class bingx(Exchange, ImplicitAPI):
1105
1106
  :returns dict: a dictionary of `ticker structures <https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure>`
1106
1107
  """
1107
1108
  self.load_markets()
1109
+ market = None
1108
1110
  if symbols is not None:
1109
1111
  symbols = self.market_symbols(symbols)
1110
1112
  firstSymbol = self.safe_string(symbols, 0)
1111
1113
  market = self.market(firstSymbol)
1112
- if not market['swap']:
1113
- raise BadRequest(self.id + ' fetchTicker is only supported for swap markets.')
1114
- response = self.swapV2PublicGetQuoteTicker(params)
1114
+ type = None
1115
+ type, params = self.handle_market_type_and_params('fetchTickers', market, params)
1116
+ response = None
1117
+ if type == 'spot':
1118
+ response = self.spotV1PublicGetTicker24hr(params)
1119
+ else:
1120
+ response = self.swapV2PublicGetQuoteTicker(params)
1115
1121
  #
1116
1122
  # {
1117
1123
  # "code": 0,
@@ -2685,25 +2691,21 @@ class bingx(Exchange, ImplicitAPI):
2685
2691
  self.parse_transaction(data)
2686
2692
 
2687
2693
  def parse_params(self, params):
2688
- result = ''
2689
2694
  sortedParams = self.keysort(params)
2690
2695
  keys = list(sortedParams.keys())
2691
2696
  for i in range(0, len(keys)):
2692
2697
  key = keys[i]
2693
- if i > 0:
2694
- result += '&'
2695
2698
  value = sortedParams[key]
2696
2699
  if isinstance(value, list):
2697
- result += key + '=['
2700
+ arrStr = '['
2698
2701
  for j in range(0, len(value)):
2699
2702
  arrayElement = value[j]
2700
2703
  if j > 0:
2701
- result += ','
2702
- result += str(arrayElement)
2703
- result += ']'
2704
- else:
2705
- result += key + '=' + str(value)
2706
- return result
2704
+ arrStr += ','
2705
+ arrStr += str(arrayElement)
2706
+ arrStr += ']'
2707
+ sortedParams[key] = arrStr
2708
+ return sortedParams
2707
2709
 
2708
2710
  def sign(self, path, section='public', method='GET', params={}, headers=None, body=None):
2709
2711
  type = section[0]
@@ -2720,13 +2722,15 @@ class bingx(Exchange, ImplicitAPI):
2720
2722
  params = self.omit(params, self.extract_params(path))
2721
2723
  params = self.keysort(params)
2722
2724
  if access == 'public':
2725
+ params['timestamp'] = self.nonce()
2723
2726
  if params:
2724
2727
  url += '?' + self.urlencode(params)
2725
2728
  elif access == 'private':
2726
2729
  self.check_required_credentials()
2727
2730
  params['timestamp'] = self.nonce()
2728
- query = self.parse_params(params)
2729
- signature = self.hmac(self.encode(query), self.encode(self.secret), hashlib.sha256)
2731
+ parsedParams = self.parse_params(params)
2732
+ query = self.urlencode(parsedParams)
2733
+ signature = self.hmac(self.encode(self.rawencode(parsedParams)), self.encode(self.secret), hashlib.sha256)
2730
2734
  if params:
2731
2735
  query = '?' + query + '&'
2732
2736
  else:
@@ -1098,7 +1098,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
1098
1098
  'size': preciseAmount,
1099
1099
  'leverage': 1,
1100
1100
  }
1101
- triggerPrice, stopLossPrice, takeProfitPrice = self.handleTriggerPrices(params)
1101
+ triggerPrice, stopLossPrice, takeProfitPrice = self.handle_trigger_prices(params)
1102
1102
  params = self.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice'])
1103
1103
  if triggerPrice:
1104
1104
  request['stop'] = 'up' if (side == 'buy') else 'down'
@@ -245,6 +245,7 @@ class okx(Exchange, ImplicitAPI):
245
245
  'tradingBot/grid/ai-param': 1,
246
246
  'tradingBot/grid/min-investment': 1,
247
247
  'tradingBot/public/rsi-back-testing': 1,
248
+ 'asset/exchange-list': 5 / 3,
248
249
  'finance/savings/lending-rate-summary': 5 / 3,
249
250
  'finance/savings/lending-rate-history': 5 / 3,
250
251
  # public broker
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.77'
7
+ __version__ = '4.0.78'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -129,7 +129,7 @@ async def call_method(testFiles, methodName, exchange, skippedProperties, args):
129
129
 
130
130
 
131
131
  def exception_message(exc):
132
- return '[' + type(exc).__name__ + '] ' + "".join(format_exception(exc, limit=6))
132
+ return '[' + type(exc).__name__ + '] ' + "".join(format_exception(type(exc), exc, exc.__traceback__, limit=6))
133
133
 
134
134
 
135
135
  def exit_script():
@@ -296,6 +296,7 @@ class testMainClass(baseMainTestClass):
296
296
  dump(self.add_padding('[INFO:TESTING]', 25), exchange.id, methodNameInTest, argsStringified)
297
297
  skippedProperties = exchange.safe_value(self.skippedMethods, methodName, {})
298
298
  await call_method(self.testFiles, methodNameInTest, exchange, skippedProperties, args)
299
+ # if it was passed successfully, add to the list of successfull tests
299
300
  if isPublic:
300
301
  self.checkedPublicTests[methodNameInTest] = True
301
302
 
@@ -336,6 +337,9 @@ class testMainClass(baseMainTestClass):
336
337
  dump('[TEST_WARNING] Exchange is on maintenance', exchange.id)
337
338
  # If public test faces authentication error, we don't break(see comments under `testSafe` method)
338
339
  elif isPublic and isAuthError:
340
+ # in case of loadMarkets, it means that "tester"(developer or travis) does not have correct authentication, so it does not have a point to proceed at all
341
+ if methodName == 'loadMarkets':
342
+ dump('[TEST_WARNING]', 'Exchange can not be tested, because of authentication problems during loadMarkets', exception_message(e), exchange.id, methodName, argsStringified)
339
343
  if self.info:
340
344
  dump('[TEST_WARNING]', 'Authentication problem for public method', exception_message(e), exchange.id, methodName, argsStringified)
341
345
  else:
@@ -386,8 +390,9 @@ class testMainClass(baseMainTestClass):
386
390
  errors.append(testNames[i])
387
391
  # we don't raise exception for public-tests, see comments under 'testSafe' method
388
392
  failedMsg = ''
389
- if len(errors):
390
- failedMsg = ' | Failed methods: ' + ', '.join(errors)
393
+ errorsLength = len(errors)
394
+ if errorsLength > 0:
395
+ failedMsg = ' | Failed methods : ' + ', '.join(errors)
391
396
  dump(self.add_padding('[INFO:PUBLIC_TESTS_END] ' + market['type'] + failedMsg, 25), exchange.id)
392
397
 
393
398
  async def load_exchange(self, exchange):
@@ -129,7 +129,7 @@ def call_method(testFiles, methodName, exchange, skippedProperties, args):
129
129
 
130
130
 
131
131
  def exception_message(exc):
132
- return '[' + type(exc).__name__ + '] ' + "".join(format_exception(exc, limit=6))
132
+ return '[' + type(exc).__name__ + '] ' + "".join(format_exception(type(exc), exc, exc.__traceback__, limit=6))
133
133
 
134
134
 
135
135
  def exit_script():
@@ -295,6 +295,7 @@ class testMainClass(baseMainTestClass):
295
295
  dump(self.add_padding('[INFO:TESTING]', 25), exchange.id, methodNameInTest, argsStringified)
296
296
  skippedProperties = exchange.safe_value(self.skippedMethods, methodName, {})
297
297
  call_method(self.testFiles, methodNameInTest, exchange, skippedProperties, args)
298
+ # if it was passed successfully, add to the list of successfull tests
298
299
  if isPublic:
299
300
  self.checkedPublicTests[methodNameInTest] = True
300
301
 
@@ -335,6 +336,9 @@ class testMainClass(baseMainTestClass):
335
336
  dump('[TEST_WARNING] Exchange is on maintenance', exchange.id)
336
337
  # If public test faces authentication error, we don't break(see comments under `testSafe` method)
337
338
  elif isPublic and isAuthError:
339
+ # in case of loadMarkets, it means that "tester"(developer or travis) does not have correct authentication, so it does not have a point to proceed at all
340
+ if methodName == 'loadMarkets':
341
+ dump('[TEST_WARNING]', 'Exchange can not be tested, because of authentication problems during loadMarkets', exception_message(e), exchange.id, methodName, argsStringified)
338
342
  if self.info:
339
343
  dump('[TEST_WARNING]', 'Authentication problem for public method', exception_message(e), exchange.id, methodName, argsStringified)
340
344
  else:
@@ -385,8 +389,9 @@ class testMainClass(baseMainTestClass):
385
389
  errors.append(testNames[i])
386
390
  # we don't raise exception for public-tests, see comments under 'testSafe' method
387
391
  failedMsg = ''
388
- if len(errors):
389
- failedMsg = ' | Failed methods: ' + ', '.join(errors)
392
+ errorsLength = len(errors)
393
+ if errorsLength > 0:
394
+ failedMsg = ' | Failed methods : ' + ', '.join(errors)
390
395
  dump(self.add_padding('[INFO:PUBLIC_TESTS_END] ' + market['type'] + failedMsg, 25), exchange.id)
391
396
 
392
397
  def load_exchange(self, exchange):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.0.77
3
+ Version: 4.0.78
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -228,13 +228,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
228
228
 
229
229
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
230
230
 
231
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.77/dist/ccxt.browser.js
232
- * unpkg: https://unpkg.com/ccxt@4.0.77/dist/ccxt.browser.js
231
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.78/dist/ccxt.browser.js
232
+ * unpkg: https://unpkg.com/ccxt@4.0.78/dist/ccxt.browser.js
233
233
 
234
234
  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.
235
235
 
236
236
  ```HTML
237
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.77/dist/ccxt.browser.js"></script>
237
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.78/dist/ccxt.browser.js"></script>
238
238
  ```
239
239
 
240
240
  Creates a global `ccxt` object:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.0.77",
3
+ "version": "4.0.78",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.js",
6
6
  "type": "module",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes