ccxt 3.1.13__tar.gz → 3.1.15__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 (477) hide show
  1. {ccxt-3.1.13/ccxt.egg-info → ccxt-3.1.15}/PKG-INFO +5 -5
  2. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/__init__.py +1 -1
  3. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/__init__.py +1 -1
  4. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/exchange.py +30 -13
  5. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/huobi.py +4 -1
  6. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/okx.py +1 -0
  7. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/poloniex.py +1 -1
  8. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/base/exchange.py +30 -13
  9. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/huobi.py +4 -1
  10. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/okx.py +1 -0
  11. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/poloniex.py +1 -1
  12. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/__init__.py +3 -1
  13. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/alpaca.py +3 -3
  14. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/ascendex.py +2 -2
  15. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/binance.py +7 -5
  16. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitfinex.py +1 -1
  17. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitfinex2.py +3 -3
  18. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitget.py +3 -3
  19. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitmart.py +2 -2
  20. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitmex.py +3 -3
  21. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitopro.py +1 -1
  22. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitpanda.py +1 -1
  23. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitstamp.py +2 -2
  24. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bittrex.py +3 -3
  25. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitvavo.py +3 -3
  26. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/blockchaincom.py +2 -2
  27. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/btcex.py +3 -3
  28. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bybit.py +3 -3
  29. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/cex.py +2 -2
  30. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/coinbasepro.py +3 -3
  31. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/coinex.py +18 -12
  32. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/cryptocom.py +3 -3
  33. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/currencycom.py +2 -2
  34. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/deribit.py +3 -3
  35. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/exmo.py +2 -2
  36. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/gate.py +4 -4
  37. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/gemini.py +2 -2
  38. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/hitbtc.py +2 -2
  39. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/hollaex.py +2 -2
  40. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/huobi.py +4 -4
  41. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/huobijp.py +2 -2
  42. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/idex.py +3 -3
  43. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/independentreserve.py +1 -1
  44. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/kraken.py +2 -2
  45. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/krakenfutures.py +4 -4
  46. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/kucoin.py +3 -3
  47. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/kucoinfutures.py +1 -1
  48. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/luno.py +1 -1
  49. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/mexc.py +3 -3
  50. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/ndax.py +2 -2
  51. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/okcoin.py +3 -3
  52. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/okx.py +2 -2
  53. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/phemex.py +3 -3
  54. ccxt-3.1.15/ccxt/pro/poloniex.py +973 -0
  55. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/poloniexfutures.py +1 -1
  56. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/probit.py +2 -2
  57. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/upbit.py +1 -1
  58. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/wazirx.py +3 -3
  59. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/whitebit.py +4 -4
  60. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/woo.py +2 -2
  61. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_shared_methods.py +13 -13
  62. {ccxt-3.1.13 → ccxt-3.1.15/ccxt.egg-info}/PKG-INFO +5 -5
  63. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt.egg-info/SOURCES.txt +1 -0
  64. {ccxt-3.1.13 → ccxt-3.1.15}/package.json +4 -3
  65. {ccxt-3.1.13 → ccxt-3.1.15}/LICENSE.txt +0 -0
  66. {ccxt-3.1.13 → ccxt-3.1.15}/MANIFEST.in +0 -0
  67. {ccxt-3.1.13 → ccxt-3.1.15}/README.rst +0 -0
  68. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/__init__.py +0 -0
  69. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/ace.py +0 -0
  70. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/alpaca.py +0 -0
  71. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/ascendex.py +0 -0
  72. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bequant.py +0 -0
  73. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bigone.py +0 -0
  74. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/binance.py +0 -0
  75. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/binancecoinm.py +0 -0
  76. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/binanceus.py +0 -0
  77. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/binanceusdm.py +0 -0
  78. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bit2c.py +0 -0
  79. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitbank.py +0 -0
  80. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitbay.py +0 -0
  81. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitbns.py +0 -0
  82. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitcoincom.py +0 -0
  83. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitfinex.py +0 -0
  84. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitfinex2.py +0 -0
  85. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitflyer.py +0 -0
  86. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitforex.py +0 -0
  87. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitget.py +0 -0
  88. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bithumb.py +0 -0
  89. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitmart.py +0 -0
  90. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitmex.py +0 -0
  91. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitopro.py +0 -0
  92. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitpanda.py +0 -0
  93. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitrue.py +0 -0
  94. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitso.py +0 -0
  95. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitstamp.py +0 -0
  96. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitstamp1.py +0 -0
  97. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bittrex.py +0 -0
  98. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bitvavo.py +0 -0
  99. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bkex.py +0 -0
  100. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bl3p.py +0 -0
  101. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/blockchaincom.py +0 -0
  102. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/btcalpha.py +0 -0
  103. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/btcbox.py +0 -0
  104. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/btcex.py +0 -0
  105. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/btcmarkets.py +0 -0
  106. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/btctradeua.py +0 -0
  107. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/btcturk.py +0 -0
  108. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/bybit.py +0 -0
  109. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/cex.py +0 -0
  110. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinbase.py +0 -0
  111. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinbaseprime.py +0 -0
  112. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinbasepro.py +0 -0
  113. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coincheck.py +0 -0
  114. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinex.py +0 -0
  115. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinfalcon.py +0 -0
  116. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinmate.py +0 -0
  117. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinone.py +0 -0
  118. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinsph.py +0 -0
  119. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/coinspot.py +0 -0
  120. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/cryptocom.py +0 -0
  121. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/currencycom.py +0 -0
  122. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/delta.py +0 -0
  123. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/deribit.py +0 -0
  124. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/digifinex.py +0 -0
  125. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/exmo.py +0 -0
  126. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/fmfwio.py +0 -0
  127. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/gate.py +0 -0
  128. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/gateio.py +0 -0
  129. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/gemini.py +0 -0
  130. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/hitbtc.py +0 -0
  131. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/hitbtc3.py +0 -0
  132. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/hollaex.py +0 -0
  133. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/huobi.py +0 -0
  134. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/huobijp.py +0 -0
  135. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/huobipro.py +0 -0
  136. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/idex.py +0 -0
  137. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/independentreserve.py +0 -0
  138. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/indodax.py +0 -0
  139. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/kraken.py +0 -0
  140. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/krakenfutures.py +0 -0
  141. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/kucoin.py +0 -0
  142. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/kucoinfutures.py +0 -0
  143. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/kuna.py +0 -0
  144. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/latoken.py +0 -0
  145. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/lbank.py +0 -0
  146. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/lbank2.py +0 -0
  147. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/luno.py +0 -0
  148. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/lykke.py +0 -0
  149. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/mercado.py +0 -0
  150. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/mexc.py +0 -0
  151. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/mexc3.py +0 -0
  152. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/ndax.py +0 -0
  153. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/novadax.py +0 -0
  154. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/oceanex.py +0 -0
  155. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/okcoin.py +0 -0
  156. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/okex.py +0 -0
  157. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/okex5.py +0 -0
  158. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/okx.py +0 -0
  159. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/paymium.py +0 -0
  160. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/phemex.py +0 -0
  161. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/poloniex.py +0 -0
  162. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/poloniexfutures.py +0 -0
  163. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/probit.py +0 -0
  164. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/stex.py +0 -0
  165. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/tidex.py +0 -0
  166. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/timex.py +0 -0
  167. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/tokocrypto.py +0 -0
  168. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/upbit.py +0 -0
  169. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/wavesexchange.py +0 -0
  170. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/wazirx.py +0 -0
  171. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/whitebit.py +0 -0
  172. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/woo.py +0 -0
  173. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/xt.py +0 -0
  174. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/yobit.py +0 -0
  175. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/zaif.py +0 -0
  176. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/abstract/zonda.py +0 -0
  177. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/ace.py +0 -0
  178. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/alpaca.py +0 -0
  179. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/ascendex.py +0 -0
  180. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/ace.py +0 -0
  181. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/alpaca.py +0 -0
  182. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/ascendex.py +0 -0
  183. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/__init__.py +0 -0
  184. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/throttler.py +0 -0
  185. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/__init__.py +0 -0
  186. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  187. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/cache.py +0 -0
  188. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/client.py +0 -0
  189. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/fast_client.py +0 -0
  190. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/functions.py +0 -0
  191. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/future.py +0 -0
  192. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/order_book.py +0 -0
  193. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  194. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bequant.py +0 -0
  195. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bigone.py +0 -0
  196. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/binance.py +0 -0
  197. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/binancecoinm.py +0 -0
  198. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/binanceus.py +0 -0
  199. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/binanceusdm.py +0 -0
  200. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bit2c.py +0 -0
  201. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitbank.py +0 -0
  202. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitbay.py +0 -0
  203. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitbns.py +0 -0
  204. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitcoincom.py +0 -0
  205. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitfinex.py +0 -0
  206. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitfinex2.py +0 -0
  207. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitflyer.py +0 -0
  208. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitforex.py +0 -0
  209. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitget.py +0 -0
  210. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bithumb.py +0 -0
  211. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitmart.py +0 -0
  212. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitmex.py +0 -0
  213. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitopro.py +0 -0
  214. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitpanda.py +0 -0
  215. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitrue.py +0 -0
  216. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitso.py +0 -0
  217. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitstamp.py +0 -0
  218. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitstamp1.py +0 -0
  219. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bittrex.py +0 -0
  220. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bitvavo.py +0 -0
  221. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bkex.py +0 -0
  222. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bl3p.py +0 -0
  223. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/blockchaincom.py +0 -0
  224. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/btcalpha.py +0 -0
  225. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/btcbox.py +0 -0
  226. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/btcex.py +0 -0
  227. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/btcmarkets.py +0 -0
  228. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/btctradeua.py +0 -0
  229. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/btcturk.py +0 -0
  230. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/buda.py +0 -0
  231. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/bybit.py +0 -0
  232. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/cex.py +0 -0
  233. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinbase.py +0 -0
  234. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinbaseprime.py +0 -0
  235. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinbasepro.py +0 -0
  236. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coincheck.py +0 -0
  237. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinex.py +0 -0
  238. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinfalcon.py +0 -0
  239. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinmate.py +0 -0
  240. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinone.py +0 -0
  241. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinsph.py +0 -0
  242. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/coinspot.py +0 -0
  243. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/cryptocom.py +0 -0
  244. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/currencycom.py +0 -0
  245. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/delta.py +0 -0
  246. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/deribit.py +0 -0
  247. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/digifinex.py +0 -0
  248. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/exmo.py +0 -0
  249. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/flowbtc.py +0 -0
  250. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/fmfwio.py +0 -0
  251. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/gate.py +0 -0
  252. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/gateio.py +0 -0
  253. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/gemini.py +0 -0
  254. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/hitbtc.py +0 -0
  255. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/hitbtc3.py +0 -0
  256. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/hollaex.py +0 -0
  257. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/huobijp.py +0 -0
  258. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/huobipro.py +0 -0
  259. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/idex.py +0 -0
  260. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/independentreserve.py +0 -0
  261. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/indodax.py +0 -0
  262. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/itbit.py +0 -0
  263. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/kraken.py +0 -0
  264. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/krakenfutures.py +0 -0
  265. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/kucoin.py +0 -0
  266. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/kucoinfutures.py +0 -0
  267. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/kuna.py +0 -0
  268. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/latoken.py +0 -0
  269. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/lbank.py +0 -0
  270. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/lbank2.py +0 -0
  271. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/luno.py +0 -0
  272. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/lykke.py +0 -0
  273. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/mercado.py +0 -0
  274. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/mexc.py +0 -0
  275. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/mexc3.py +0 -0
  276. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/ndax.py +0 -0
  277. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/novadax.py +0 -0
  278. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/oceanex.py +0 -0
  279. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/okcoin.py +0 -0
  280. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/okex.py +0 -0
  281. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/okex5.py +0 -0
  282. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/paymium.py +0 -0
  283. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/phemex.py +0 -0
  284. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/poloniexfutures.py +0 -0
  285. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/probit.py +0 -0
  286. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/ripio.py +0 -0
  287. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/stex.py +0 -0
  288. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/tidex.py +0 -0
  289. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/timex.py +0 -0
  290. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/tokocrypto.py +0 -0
  291. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/upbit.py +0 -0
  292. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/wavesexchange.py +0 -0
  293. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/wazirx.py +0 -0
  294. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/whitebit.py +0 -0
  295. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/woo.py +0 -0
  296. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/xt.py +0 -0
  297. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/yobit.py +0 -0
  298. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/zaif.py +0 -0
  299. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/zb.py +0 -0
  300. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/async_support/zonda.py +0 -0
  301. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/base/__init__.py +0 -0
  302. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/base/decimal_to_precision.py +0 -0
  303. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/base/errors.py +0 -0
  304. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/base/precise.py +0 -0
  305. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/base/types.py +0 -0
  306. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bequant.py +0 -0
  307. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bigone.py +0 -0
  308. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/binance.py +0 -0
  309. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/binancecoinm.py +0 -0
  310. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/binanceus.py +0 -0
  311. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/binanceusdm.py +0 -0
  312. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bit2c.py +0 -0
  313. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitbank.py +0 -0
  314. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitbay.py +0 -0
  315. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitbns.py +0 -0
  316. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitcoincom.py +0 -0
  317. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitfinex.py +0 -0
  318. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitfinex2.py +0 -0
  319. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitflyer.py +0 -0
  320. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitforex.py +0 -0
  321. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitget.py +0 -0
  322. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bithumb.py +0 -0
  323. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitmart.py +0 -0
  324. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitmex.py +0 -0
  325. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitopro.py +0 -0
  326. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitpanda.py +0 -0
  327. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitrue.py +0 -0
  328. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitso.py +0 -0
  329. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitstamp.py +0 -0
  330. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitstamp1.py +0 -0
  331. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bittrex.py +0 -0
  332. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bitvavo.py +0 -0
  333. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bkex.py +0 -0
  334. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bl3p.py +0 -0
  335. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/blockchaincom.py +0 -0
  336. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/btcalpha.py +0 -0
  337. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/btcbox.py +0 -0
  338. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/btcex.py +0 -0
  339. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/btcmarkets.py +0 -0
  340. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/btctradeua.py +0 -0
  341. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/btcturk.py +0 -0
  342. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/buda.py +0 -0
  343. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/bybit.py +0 -0
  344. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/cex.py +0 -0
  345. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinbase.py +0 -0
  346. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinbaseprime.py +0 -0
  347. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinbasepro.py +0 -0
  348. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coincheck.py +0 -0
  349. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinex.py +0 -0
  350. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinfalcon.py +0 -0
  351. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinmate.py +0 -0
  352. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinone.py +0 -0
  353. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinsph.py +0 -0
  354. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/coinspot.py +0 -0
  355. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/cryptocom.py +0 -0
  356. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/currencycom.py +0 -0
  357. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/delta.py +0 -0
  358. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/deribit.py +0 -0
  359. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/digifinex.py +0 -0
  360. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/exmo.py +0 -0
  361. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/flowbtc.py +0 -0
  362. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/fmfwio.py +0 -0
  363. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/gate.py +0 -0
  364. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/gateio.py +0 -0
  365. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/gemini.py +0 -0
  366. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/hitbtc.py +0 -0
  367. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/hitbtc3.py +0 -0
  368. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/hollaex.py +0 -0
  369. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/huobijp.py +0 -0
  370. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/huobipro.py +0 -0
  371. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/idex.py +0 -0
  372. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/independentreserve.py +0 -0
  373. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/indodax.py +0 -0
  374. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/itbit.py +0 -0
  375. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/kraken.py +0 -0
  376. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/krakenfutures.py +0 -0
  377. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/kucoin.py +0 -0
  378. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/kucoinfutures.py +0 -0
  379. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/kuna.py +0 -0
  380. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/latoken.py +0 -0
  381. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/lbank.py +0 -0
  382. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/lbank2.py +0 -0
  383. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/luno.py +0 -0
  384. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/lykke.py +0 -0
  385. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/mercado.py +0 -0
  386. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/mexc.py +0 -0
  387. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/mexc3.py +0 -0
  388. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/ndax.py +0 -0
  389. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/novadax.py +0 -0
  390. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/oceanex.py +0 -0
  391. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/okcoin.py +0 -0
  392. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/okex.py +0 -0
  393. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/okex5.py +0 -0
  394. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/paymium.py +0 -0
  395. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/phemex.py +0 -0
  396. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/poloniexfutures.py +0 -0
  397. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bequant.py +0 -0
  398. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/binancecoinm.py +0 -0
  399. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/binanceus.py +0 -0
  400. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/binanceusdm.py +0 -0
  401. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitcoincom.py +0 -0
  402. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/bitrue.py +0 -0
  403. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/coinbaseprime.py +0 -0
  404. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/gateio.py +0 -0
  405. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/huobipro.py +0 -0
  406. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/mexc3.py +0 -0
  407. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/okex.py +0 -0
  408. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/ripio.py +0 -0
  409. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/pro/zb.py +0 -0
  410. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/probit.py +0 -0
  411. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/ripio.py +0 -0
  412. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/__init__.py +0 -0
  413. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  414. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  415. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  416. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  417. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  418. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  419. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  420. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  421. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  422. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  423. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  424. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  425. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/stex.py +0 -0
  426. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/__init__.py +0 -0
  427. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/__init__.py +0 -0
  428. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_account.py +0 -0
  429. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_balance.py +0 -0
  430. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_borrow_interest.py +0 -0
  431. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_borrow_rate.py +0 -0
  432. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_calculate_fee.py +0 -0
  433. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_crypto.py +0 -0
  434. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_currency.py +0 -0
  435. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_datetime.py +0 -0
  436. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  437. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_deep_extend.py +0 -0
  438. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  439. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  440. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_funding_rate_history.py +0 -0
  441. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_ledger_entry.py +0 -0
  442. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_ledger_item.py +0 -0
  443. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_leverage_tier.py +0 -0
  444. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_margin_modification.py +0 -0
  445. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_market.py +0 -0
  446. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_number.py +0 -0
  447. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_ohlcv.py +0 -0
  448. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_open_interest.py +0 -0
  449. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_order.py +0 -0
  450. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_order_book.py +0 -0
  451. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_position.py +0 -0
  452. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_status.py +0 -0
  453. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_throttle.py +0 -0
  454. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_ticker.py +0 -0
  455. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_trade.py +0 -0
  456. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_trading_fee.py +0 -0
  457. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/base/test_transaction.py +0 -0
  458. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/test_async.py +0 -0
  459. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/test/test_sync.py +0 -0
  460. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/tidex.py +0 -0
  461. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/timex.py +0 -0
  462. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/tokocrypto.py +0 -0
  463. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/upbit.py +0 -0
  464. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/wavesexchange.py +0 -0
  465. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/wazirx.py +0 -0
  466. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/whitebit.py +0 -0
  467. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/woo.py +0 -0
  468. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/xt.py +0 -0
  469. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/yobit.py +0 -0
  470. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/zaif.py +0 -0
  471. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/zb.py +0 -0
  472. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt/zonda.py +0 -0
  473. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt.egg-info/dependency_links.txt +0 -0
  474. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt.egg-info/requires.txt +0 -0
  475. {ccxt-3.1.13 → ccxt-3.1.15}/ccxt.egg-info/top_level.txt +0 -0
  476. {ccxt-3.1.13 → ccxt-3.1.15}/setup.cfg +0 -0
  477. {ccxt-3.1.13 → ccxt-3.1.15}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 3.1.13
3
+ Version: 3.1.15
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
@@ -161,7 +161,7 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
161
161
  | [![okx](https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg)](https://www.okx.com/join/1888677) | okx | [OKX](https://www.okx.com/join/1888677) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://www.okx.com/docs-v5/en/) | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
162
162
  | [![paymium](https://user-images.githubusercontent.com/51840849/87153930-f0f02200-c2c0-11ea-9c0a-40337375ae89.jpg)](https://www.paymium.com/page/sign-up?referral=eDAzPoRQFMvaAB8sf-qj) | paymium | [Paymium](https://www.paymium.com/page/sign-up?referral=eDAzPoRQFMvaAB8sf-qj) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://github.com/Paymium/api-documentation) | | |
163
163
  | [![phemex](https://user-images.githubusercontent.com/1294454/85225056-221eb600-b3d7-11ea-930d-564d2690e3f6.jpg)](https://phemex.com/register?referralCode=EDNVJ) | phemex | [Phemex](https://phemex.com/register?referralCode=EDNVJ) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://github.com/phemex/phemex-api-docs) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
164
- | [![poloniex](https://user-images.githubusercontent.com/1294454/27766817-e9456312-5ee6-11e7-9b3c-b628ca5626a5.jpg)](https://poloniex.com/signup?c=UBFZJRPJ) | poloniex | [Poloniex](https://poloniex.com/signup?c=UBFZJRPJ) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://docs.poloniex.com) | | |
164
+ | [![poloniex](https://user-images.githubusercontent.com/1294454/27766817-e9456312-5ee6-11e7-9b3c-b628ca5626a5.jpg)](https://poloniex.com/signup?c=UBFZJRPJ) | poloniex | [Poloniex](https://poloniex.com/signup?c=UBFZJRPJ) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://docs.poloniex.com) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
165
165
  | [![poloniexfutures](https://user-images.githubusercontent.com/1294454/27766817-e9456312-5ee6-11e7-9b3c-b628ca5626a5.jpg)](https://poloniex.com/signup?c=UBFZJRPJ) | poloniexfutures | [Poloniex Futures](https://poloniex.com/signup?c=UBFZJRPJ) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://futures-docs.poloniex.com) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
166
166
  | [![probit](https://user-images.githubusercontent.com/51840849/79268032-c4379480-7ea2-11ea-80b3-dd96bb29fd0d.jpg)](https://www.probit.com/r/34608773) | probit | [ProBit](https://www.probit.com/r/34608773) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs-en.probit.com) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
167
167
  | [![stex](https://user-images.githubusercontent.com/1294454/69680782-03fd0b80-10bd-11ea-909e-7f603500e9cc.jpg)](https://app.stex.com?ref=36416021) | stex | [STEX](https://app.stex.com?ref=36416021) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://apidocs.stex.com/) | | |
@@ -234,13 +234,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
234
234
 
235
235
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
236
236
 
237
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.1.13/dist/ccxt.browser.js
238
- * unpkg: https://unpkg.com/ccxt@3.1.13/dist/ccxt.browser.js
237
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.1.15/dist/ccxt.browser.js
238
+ * unpkg: https://unpkg.com/ccxt@3.1.15/dist/ccxt.browser.js
239
239
 
240
240
  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.
241
241
 
242
242
  ```HTML
243
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.1.13/dist/ccxt.browser.js"></script>
243
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.1.15/dist/ccxt.browser.js"></script>
244
244
  ```
245
245
 
246
246
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '3.1.13'
25
+ __version__ = '3.1.15'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.1.13'
7
+ __version__ = '3.1.15'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '3.1.13'
5
+ __version__ = '3.1.15'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -482,6 +482,15 @@ class Exchange(BaseExchange):
482
482
 
483
483
  # METHODS BELOW THIS LINE ARE TRANSPILED FROM JAVASCRIPT TO PYTHON AND PHP
484
484
 
485
+ def find_message_hashes(self, client, element: str):
486
+ result = []
487
+ messageHashes = list(client.futures.keys())
488
+ for i in range(0, len(messageHashes)):
489
+ messageHash = messageHashes[i]
490
+ if messageHash.find(element) >= 0:
491
+ result.append(messageHash)
492
+ return result
493
+
485
494
  def filter_by_limit(self, array: List[object], limit: Optional[int] = None, key: IndexType = 'timestamp'):
486
495
  if self.valueIsDefined(limit):
487
496
  arrayLength = len(array)
@@ -495,22 +504,25 @@ class Exchange(BaseExchange):
495
504
  array = self.arraySlice(array, -limit) if ascending else self.arraySlice(array, 0, limit)
496
505
  return array
497
506
 
498
- def filter_by_since_limit(self, array: List[object], since: Optional[int] = None, limit: Optional[int] = None, key: IndexType = 'timestamp'):
507
+ def filter_by_since_limit(self, array: List[object], since: Optional[int] = None, limit: Optional[int] = None, key: IndexType = 'timestamp', tail=False):
499
508
  sinceIsDefined = self.valueIsDefined(since)
500
509
  parsedArray = self.to_array(array)
510
+ result = parsedArray
501
511
  if sinceIsDefined:
502
512
  result = []
503
513
  for i in range(0, len(parsedArray)):
504
514
  entry = parsedArray[i]
505
515
  if entry[key] >= since:
506
516
  result.append(entry)
507
- return self.filter_by_limit(result, limit, key)
508
- return self.filter_by_limit(parsedArray, limit, key)
517
+ if tail:
518
+ return result[-limit:]
519
+ return self.filter_by_limit(result, limit, key)
509
520
 
510
- def filter_by_value_since_limit(self, array: List[object], field: IndexType, value=None, since: Optional[int] = None, limit: Optional[int] = None, key='timestamp'):
521
+ def filter_by_value_since_limit(self, array: List[object], field: IndexType, value=None, since: Optional[int] = None, limit: Optional[int] = None, key='timestamp', tail=False):
511
522
  valueIsDefined = self.valueIsDefined(value)
512
523
  sinceIsDefined = self.valueIsDefined(since)
513
524
  parsedArray = self.to_array(array)
525
+ result = parsedArray
514
526
  # single-pass filter for both symbol and since
515
527
  if valueIsDefined or sinceIsDefined:
516
528
  result = []
@@ -522,8 +534,9 @@ class Exchange(BaseExchange):
522
534
  secondCondition = entryKeyGESince if sinceIsDefined else True
523
535
  if firstCondition and secondCondition:
524
536
  result.append(entry)
525
- return self.filter_by_limit(result, limit, key)
526
- return self.filter_by_limit(parsedArray, limit, key)
537
+ if tail:
538
+ return result[-limit:]
539
+ return self.filter_by_limit(result, limit, key)
527
540
 
528
541
  def sign(self, path, api: Any = 'public', method='GET', params={}, headers: Optional[Any] = None, body: Optional[Any] = None):
529
542
  return {}
@@ -1303,12 +1316,16 @@ class Exchange(BaseExchange):
1303
1316
  result.append(self.market_id(symbols[i]))
1304
1317
  return result
1305
1318
 
1306
- def market_symbols(self, symbols):
1319
+ def market_symbols(self, symbols, type: Optional[str] = None):
1307
1320
  if symbols is None:
1308
1321
  return symbols
1309
1322
  result = []
1310
1323
  for i in range(0, len(symbols)):
1311
- result.append(self.symbol(symbols[i]))
1324
+ market = self.market(symbols[i])
1325
+ if type is not None and market['type'] != type:
1326
+ raise BadRequest(self.id + ' symbols must be of same type ' + type + '. If the type is incorrect you can change it in options or the params of the request')
1327
+ symbol = self.safe_string(market, 'symbol', symbols[i])
1328
+ result.append(symbol)
1312
1329
  return result
1313
1330
 
1314
1331
  def market_codes(self, codes):
@@ -2270,11 +2287,11 @@ class Exchange(BaseExchange):
2270
2287
  currency = self.safe_currency(currencyId, currency)
2271
2288
  return currency['code']
2272
2289
 
2273
- def filter_by_symbol_since_limit(self, array, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None):
2274
- return self.filter_by_value_since_limit(array, 'symbol', symbol, since, limit, 'timestamp')
2290
+ def filter_by_symbol_since_limit(self, array, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, tail=False):
2291
+ return self.filter_by_value_since_limit(array, 'symbol', symbol, since, limit, 'timestamp', tail)
2275
2292
 
2276
- def filter_by_currency_since_limit(self, array, code=None, since: Optional[int] = None, limit: Optional[int] = None):
2277
- return self.filter_by_value_since_limit(array, 'currency', code, since, limit, 'timestamp')
2293
+ def filter_by_currency_since_limit(self, array, code=None, since: Optional[int] = None, limit: Optional[int] = None, tail=False):
2294
+ return self.filter_by_value_since_limit(array, 'currency', code, since, limit, 'timestamp', tail)
2278
2295
 
2279
2296
  def parse_last_prices(self, pricesData, symbols: Optional[List[str]] = None, params={}):
2280
2297
  #
@@ -5136,10 +5136,13 @@ class huobi(Exchange, ImplicitAPI):
5136
5136
  if feeCost is not None:
5137
5137
  feeCost = Precise.string_abs(feeCost)
5138
5138
  networkId = self.safe_string(transaction, 'chain')
5139
+ txHash = self.safe_string(transaction, 'tx-hash')
5140
+ if networkId == 'ETH' and txHash.find('0x') < 0:
5141
+ txHash = '0x' + txHash
5139
5142
  return {
5140
5143
  'info': transaction,
5141
5144
  'id': self.safe_string_2(transaction, 'id', 'data'),
5142
- 'txid': self.safe_string(transaction, 'tx-hash'),
5145
+ 'txid': txHash,
5143
5146
  'timestamp': timestamp,
5144
5147
  'datetime': self.iso8601(timestamp),
5145
5148
  'network': self.network_id_to_code(networkId, code),
@@ -2649,6 +2649,7 @@ class okx(Exchange, ImplicitAPI):
2649
2649
  timeInForce = 'IOC'
2650
2650
  type = 'limit'
2651
2651
  marketId = self.safe_string(order, 'instId')
2652
+ market = self.safe_market(marketId, market)
2652
2653
  symbol = self.safe_symbol(marketId, market, '-')
2653
2654
  filled = self.safe_string(order, 'accFillSz')
2654
2655
  price = self.safe_string_2(order, 'px', 'ordPx')
@@ -38,7 +38,7 @@ class poloniex(Exchange, ImplicitAPI):
38
38
  # 200 requests per second for some unauthenticated market endpoints => 1000ms / 200 = 5ms between requests
39
39
  'rateLimit': 5,
40
40
  'certified': False,
41
- 'pro': False,
41
+ 'pro': True,
42
42
  'has': {
43
43
  'CORS': None,
44
44
  'spot': True,
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.1.13'
7
+ __version__ = '3.1.15'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1670,6 +1670,15 @@ class Exchange(object):
1670
1670
 
1671
1671
  # METHODS BELOW THIS LINE ARE TRANSPILED FROM JAVASCRIPT TO PYTHON AND PHP
1672
1672
 
1673
+ def find_message_hashes(self, client, element: str):
1674
+ result = []
1675
+ messageHashes = list(client.futures.keys())
1676
+ for i in range(0, len(messageHashes)):
1677
+ messageHash = messageHashes[i]
1678
+ if messageHash.find(element) >= 0:
1679
+ result.append(messageHash)
1680
+ return result
1681
+
1673
1682
  def filter_by_limit(self, array: List[object], limit: Optional[int] = None, key: IndexType = 'timestamp'):
1674
1683
  if self.valueIsDefined(limit):
1675
1684
  arrayLength = len(array)
@@ -1683,22 +1692,25 @@ class Exchange(object):
1683
1692
  array = self.arraySlice(array, -limit) if ascending else self.arraySlice(array, 0, limit)
1684
1693
  return array
1685
1694
 
1686
- def filter_by_since_limit(self, array: List[object], since: Optional[int] = None, limit: Optional[int] = None, key: IndexType = 'timestamp'):
1695
+ def filter_by_since_limit(self, array: List[object], since: Optional[int] = None, limit: Optional[int] = None, key: IndexType = 'timestamp', tail=False):
1687
1696
  sinceIsDefined = self.valueIsDefined(since)
1688
1697
  parsedArray = self.to_array(array)
1698
+ result = parsedArray
1689
1699
  if sinceIsDefined:
1690
1700
  result = []
1691
1701
  for i in range(0, len(parsedArray)):
1692
1702
  entry = parsedArray[i]
1693
1703
  if entry[key] >= since:
1694
1704
  result.append(entry)
1695
- return self.filter_by_limit(result, limit, key)
1696
- return self.filter_by_limit(parsedArray, limit, key)
1705
+ if tail:
1706
+ return result[-limit:]
1707
+ return self.filter_by_limit(result, limit, key)
1697
1708
 
1698
- def filter_by_value_since_limit(self, array: List[object], field: IndexType, value=None, since: Optional[int] = None, limit: Optional[int] = None, key='timestamp'):
1709
+ def filter_by_value_since_limit(self, array: List[object], field: IndexType, value=None, since: Optional[int] = None, limit: Optional[int] = None, key='timestamp', tail=False):
1699
1710
  valueIsDefined = self.valueIsDefined(value)
1700
1711
  sinceIsDefined = self.valueIsDefined(since)
1701
1712
  parsedArray = self.to_array(array)
1713
+ result = parsedArray
1702
1714
  # single-pass filter for both symbol and since
1703
1715
  if valueIsDefined or sinceIsDefined:
1704
1716
  result = []
@@ -1710,8 +1722,9 @@ class Exchange(object):
1710
1722
  secondCondition = entryKeyGESince if sinceIsDefined else True
1711
1723
  if firstCondition and secondCondition:
1712
1724
  result.append(entry)
1713
- return self.filter_by_limit(result, limit, key)
1714
- return self.filter_by_limit(parsedArray, limit, key)
1725
+ if tail:
1726
+ return result[-limit:]
1727
+ return self.filter_by_limit(result, limit, key)
1715
1728
 
1716
1729
  def sign(self, path, api: Any = 'public', method='GET', params={}, headers: Optional[Any] = None, body: Optional[Any] = None):
1717
1730
  return {}
@@ -2491,12 +2504,16 @@ class Exchange(object):
2491
2504
  result.append(self.market_id(symbols[i]))
2492
2505
  return result
2493
2506
 
2494
- def market_symbols(self, symbols):
2507
+ def market_symbols(self, symbols, type: Optional[str] = None):
2495
2508
  if symbols is None:
2496
2509
  return symbols
2497
2510
  result = []
2498
2511
  for i in range(0, len(symbols)):
2499
- result.append(self.symbol(symbols[i]))
2512
+ market = self.market(symbols[i])
2513
+ if type is not None and market['type'] != type:
2514
+ raise BadRequest(self.id + ' symbols must be of same type ' + type + '. If the type is incorrect you can change it in options or the params of the request')
2515
+ symbol = self.safe_string(market, 'symbol', symbols[i])
2516
+ result.append(symbol)
2500
2517
  return result
2501
2518
 
2502
2519
  def market_codes(self, codes):
@@ -3458,11 +3475,11 @@ class Exchange(object):
3458
3475
  currency = self.safe_currency(currencyId, currency)
3459
3476
  return currency['code']
3460
3477
 
3461
- def filter_by_symbol_since_limit(self, array, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None):
3462
- return self.filter_by_value_since_limit(array, 'symbol', symbol, since, limit, 'timestamp')
3478
+ def filter_by_symbol_since_limit(self, array, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, tail=False):
3479
+ return self.filter_by_value_since_limit(array, 'symbol', symbol, since, limit, 'timestamp', tail)
3463
3480
 
3464
- def filter_by_currency_since_limit(self, array, code=None, since: Optional[int] = None, limit: Optional[int] = None):
3465
- return self.filter_by_value_since_limit(array, 'currency', code, since, limit, 'timestamp')
3481
+ def filter_by_currency_since_limit(self, array, code=None, since: Optional[int] = None, limit: Optional[int] = None, tail=False):
3482
+ return self.filter_by_value_since_limit(array, 'currency', code, since, limit, 'timestamp', tail)
3466
3483
 
3467
3484
  def parse_last_prices(self, pricesData, symbols: Optional[List[str]] = None, params={}):
3468
3485
  #
@@ -5135,10 +5135,13 @@ class huobi(Exchange, ImplicitAPI):
5135
5135
  if feeCost is not None:
5136
5136
  feeCost = Precise.string_abs(feeCost)
5137
5137
  networkId = self.safe_string(transaction, 'chain')
5138
+ txHash = self.safe_string(transaction, 'tx-hash')
5139
+ if networkId == 'ETH' and txHash.find('0x') < 0:
5140
+ txHash = '0x' + txHash
5138
5141
  return {
5139
5142
  'info': transaction,
5140
5143
  'id': self.safe_string_2(transaction, 'id', 'data'),
5141
- 'txid': self.safe_string(transaction, 'tx-hash'),
5144
+ 'txid': txHash,
5142
5145
  'timestamp': timestamp,
5143
5146
  'datetime': self.iso8601(timestamp),
5144
5147
  'network': self.network_id_to_code(networkId, code),
@@ -2648,6 +2648,7 @@ class okx(Exchange, ImplicitAPI):
2648
2648
  timeInForce = 'IOC'
2649
2649
  type = 'limit'
2650
2650
  marketId = self.safe_string(order, 'instId')
2651
+ market = self.safe_market(marketId, market)
2651
2652
  symbol = self.safe_symbol(marketId, market, '-')
2652
2653
  filled = self.safe_string(order, 'accFillSz')
2653
2654
  price = self.safe_string_2(order, 'px', 'ordPx')
@@ -38,7 +38,7 @@ class poloniex(Exchange, ImplicitAPI):
38
38
  # 200 requests per second for some unauthenticated market endpoints => 1000ms / 200 = 5ms between requests
39
39
  'rateLimit': 5,
40
40
  'certified': False,
41
- 'pro': False,
41
+ 'pro': True,
42
42
  'has': {
43
43
  'CORS': None,
44
44
  'spot': True,
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.1.13'
7
+ __version__ = '3.1.15'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -64,6 +64,7 @@ from ccxt.pro.okcoin import okcoin # noqa
64
64
  from ccxt.pro.okex import okex # noqa: F401
65
65
  from ccxt.pro.okx import okx # noqa: F401
66
66
  from ccxt.pro.phemex import phemex # noqa: F401
67
+ from ccxt.pro.poloniex import poloniex # noqa: F401
67
68
  from ccxt.pro.poloniexfutures import poloniexfutures # noqa: F401
68
69
  from ccxt.pro.probit import probit # noqa: F401
69
70
  from ccxt.pro.upbit import upbit # noqa: F401
@@ -124,6 +125,7 @@ exchanges = [
124
125
  'okex',
125
126
  'okx',
126
127
  'phemex',
128
+ 'poloniex',
127
129
  'poloniexfutures',
128
130
  'probit',
129
131
  'upbit',
@@ -148,7 +148,7 @@ class alpaca(ccxt.async_support.alpaca):
148
148
  ohlcv = await self.watch(url, messageHash, self.extend(request, params), messageHash)
149
149
  if self.newUpdates:
150
150
  limit = ohlcv.getLimit(symbol, limit)
151
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
151
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
152
152
 
153
153
  def handle_ohlcv(self, client: Client, message):
154
154
  #
@@ -272,7 +272,7 @@ class alpaca(ccxt.async_support.alpaca):
272
272
  trades = await self.watch(url, messageHash, self.extend(request, params), messageHash)
273
273
  if self.newUpdates:
274
274
  limit = trades.getLimit(symbol, limit)
275
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
275
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
276
276
 
277
277
  def handle_trades(self, client: Client, message):
278
278
  #
@@ -324,7 +324,7 @@ class alpaca(ccxt.async_support.alpaca):
324
324
  trades = await self.watch(url, messageHash, self.extend(request, params), messageHash)
325
325
  if self.newUpdates:
326
326
  limit = trades.getLimit(symbol, limit)
327
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
327
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
328
328
 
329
329
  async def watch_orders(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
330
330
  """
@@ -99,7 +99,7 @@ class ascendex(ccxt.async_support.ascendex):
99
99
  ohlcv = await self.watch_public(channel, params)
100
100
  if self.newUpdates:
101
101
  limit = ohlcv.getLimit(symbol, limit)
102
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
102
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
103
103
 
104
104
  def handle_ohlcv(self, client: Client, message):
105
105
  #
@@ -155,7 +155,7 @@ class ascendex(ccxt.async_support.ascendex):
155
155
  trades = await self.watch_public(channel, params)
156
156
  if self.newUpdates:
157
157
  limit = trades.getLimit(symbol, limit)
158
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
158
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
159
159
 
160
160
  def handle_trades(self, client: Client, message):
161
161
  #
@@ -398,7 +398,7 @@ class binance(ccxt.async_support.binance):
398
398
  trades = await self.watch(url, messageHash, self.extend(request, query), messageHash, subscribe)
399
399
  if self.newUpdates:
400
400
  limit = trades.getLimit(market['symbol'], limit)
401
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
401
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
402
402
 
403
403
  def parse_trade(self, trade, market=None):
404
404
  #
@@ -615,7 +615,7 @@ class binance(ccxt.async_support.binance):
615
615
  ohlcv = await self.watch(url, messageHash, self.extend(request, params), messageHash, subscribe)
616
616
  if self.newUpdates:
617
617
  limit = ohlcv.getLimit(symbol, limit)
618
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
618
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
619
619
 
620
620
  def handle_ohlcv(self, client: Client, message):
621
621
  #
@@ -1465,7 +1465,7 @@ class binance(ccxt.async_support.binance):
1465
1465
  trades = await self.watch(url, messageHash, message, type)
1466
1466
  if self.newUpdates:
1467
1467
  limit = trades.getLimit(symbol, limit)
1468
- return self.filter_by_symbol_since_limit(trades, symbol, since, limit)
1468
+ return self.filter_by_symbol_since_limit(trades, symbol, since, limit, True)
1469
1469
 
1470
1470
  def handle_my_trade(self, client: Client, message):
1471
1471
  messageHash = 'myTrades'
@@ -1541,8 +1541,10 @@ class binance(ccxt.async_support.binance):
1541
1541
  if fees is not None:
1542
1542
  parsed['fees'] = fees
1543
1543
  parsed['trades'] = self.safe_value(order, 'trades')
1544
- parsed['timestamp'] = self.safe_integer(order, 'timestamp')
1545
- parsed['datetime'] = self.safe_string(order, 'datetime')
1544
+ timestamp = self.safe_integer(parsed, 'timestamp')
1545
+ if timestamp is None:
1546
+ parsed['timestamp'] = self.safe_integer(order, 'timestamp')
1547
+ parsed['datetime'] = self.safe_string(order, 'datetime')
1546
1548
  cachedOrders.append(parsed)
1547
1549
  client.resolve(self.orders, messageHash)
1548
1550
  messageHashSymbol = messageHash + ':' + symbol
@@ -72,7 +72,7 @@ class bitfinex(ccxt.async_support.bitfinex):
72
72
  trades = await self.subscribe('trades', symbol, params)
73
73
  if self.newUpdates:
74
74
  limit = trades.getLimit(symbol, limit)
75
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
75
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
76
76
 
77
77
  async def watch_ticker(self, symbol: str, params={}):
78
78
  """
@@ -102,7 +102,7 @@ class bitfinex2(ccxt.async_support.bitfinex2):
102
102
  ohlcv = await self.watch(url, messageHash, self.deep_extend(request, params), messageHash)
103
103
  if self.newUpdates:
104
104
  limit = ohlcv.getLimit(symbol, limit)
105
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
105
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
106
106
 
107
107
  def handle_ohlcv(self, client: Client, message, subscription):
108
108
  #
@@ -195,7 +195,7 @@ class bitfinex2(ccxt.async_support.bitfinex2):
195
195
  trades = await self.subscribe('trades', symbol, params)
196
196
  if self.newUpdates:
197
197
  limit = trades.getLimit(symbol, limit)
198
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
198
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
199
199
 
200
200
  async def watch_my_trades(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
201
201
  """
@@ -214,7 +214,7 @@ class bitfinex2(ccxt.async_support.bitfinex2):
214
214
  trades = await self.subscribe_private(messageHash)
215
215
  if self.newUpdates:
216
216
  limit = trades.getLimit(symbol, limit)
217
- return self.filter_by_symbol_since_limit(trades, symbol, since, limit)
217
+ return self.filter_by_symbol_since_limit(trades, symbol, since, limit, True)
218
218
 
219
219
  async def watch_ticker(self, symbol: str, params={}):
220
220
  """
@@ -257,7 +257,7 @@ class bitget(ccxt.async_support.bitget):
257
257
  ohlcv = await self.watch_public(messageHash, args, params)
258
258
  if self.newUpdates:
259
259
  limit = ohlcv.getLimit(symbol, limit)
260
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
260
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
261
261
 
262
262
  def handle_ohlcv(self, client: Client, message):
263
263
  #
@@ -468,7 +468,7 @@ class bitget(ccxt.async_support.bitget):
468
468
  trades = await self.watch_public(messageHash, args, params)
469
469
  if self.newUpdates:
470
470
  limit = trades.getLimit(symbol, limit)
471
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
471
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
472
472
 
473
473
  def handle_trades(self, client: Client, message):
474
474
  #
@@ -834,7 +834,7 @@ class bitget(ccxt.async_support.bitget):
834
834
  trades = await self.watch_private(messageHash, subscriptionHash, args, params)
835
835
  if self.newUpdates:
836
836
  limit = trades.getLimit(symbol, limit)
837
- return self.filter_by_symbol_since_limit(trades, symbol, since, limit)
837
+ return self.filter_by_symbol_since_limit(trades, symbol, since, limit, True)
838
838
 
839
839
  def handle_my_trades(self, client: Client, message):
840
840
  #
@@ -98,7 +98,7 @@ class bitmart(ccxt.async_support.bitmart):
98
98
  trades = await self.subscribe('trade', symbol, params)
99
99
  if self.newUpdates:
100
100
  limit = trades.getLimit(symbol, limit)
101
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
101
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
102
102
 
103
103
  async def watch_ticker(self, symbol: str, params={}):
104
104
  """
@@ -312,7 +312,7 @@ class bitmart(ccxt.async_support.bitmart):
312
312
  ohlcv = await self.subscribe(name, symbol, params)
313
313
  if self.newUpdates:
314
314
  limit = ohlcv.getLimit(symbol, limit)
315
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
315
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
316
316
 
317
317
  def handle_ohlcv(self, client: Client, message):
318
318
  #
@@ -543,7 +543,7 @@ class bitmex(ccxt.async_support.bitmex):
543
543
  trades = await self.watch(url, messageHash, self.extend(request, params), messageHash)
544
544
  if self.newUpdates:
545
545
  limit = trades.getLimit(symbol, limit)
546
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
546
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
547
547
 
548
548
  def authenticate(self, params={}):
549
549
  url = self.urls['api']['ws']
@@ -813,7 +813,7 @@ class bitmex(ccxt.async_support.bitmex):
813
813
  trades = await self.watch(url, messageHash, request, subscriptionHash)
814
814
  if self.newUpdates:
815
815
  limit = trades.getLimit(symbol, limit)
816
- return self.filter_by_symbol_since_limit(trades, symbol, since, limit)
816
+ return self.filter_by_symbol_since_limit(trades, symbol, since, limit, True)
817
817
 
818
818
  def handle_my_trades(self, client: Client, message):
819
819
  #
@@ -950,7 +950,7 @@ class bitmex(ccxt.async_support.bitmex):
950
950
  ohlcv = await self.watch(url, messageHash, self.extend(request, params), messageHash)
951
951
  if self.newUpdates:
952
952
  limit = ohlcv.getLimit(symbol, limit)
953
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
953
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
954
954
 
955
955
  def handle_ohlcv(self, client: Client, message):
956
956
  #
@@ -127,7 +127,7 @@ class bitopro(ccxt.async_support.bitopro):
127
127
  trades = await self.watch_public('trades', messageHash, market['id'])
128
128
  if self.newUpdates:
129
129
  limit = trades.getLimit(symbol, limit)
130
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
130
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
131
131
 
132
132
  def handle_trade(self, client: Client, message):
133
133
  #
@@ -1053,7 +1053,7 @@ class bitpanda(ccxt.async_support.bitpanda):
1053
1053
  ohlcv = await self.watch(url, messageHash, self.deep_extend(request, params), subscriptionHash, subscription)
1054
1054
  if self.newUpdates:
1055
1055
  limit = ohlcv.getLimit(symbol, limit)
1056
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
1056
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
1057
1057
 
1058
1058
  def handle_ohlcv(self, client: Client, message):
1059
1059
  #
@@ -174,7 +174,7 @@ class bitstamp(ccxt.async_support.bitstamp):
174
174
  trades = await self.watch(url, messageHash, message, messageHash)
175
175
  if self.newUpdates:
176
176
  limit = trades.getLimit(symbol, limit)
177
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
177
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
178
178
 
179
179
  def parse_ws_trade(self, trade, market=None):
180
180
  #
@@ -277,7 +277,7 @@ class bitstamp(ccxt.async_support.bitstamp):
277
277
  orders = await self.subscribe_private(subscription, messageHash, params)
278
278
  if self.newUpdates:
279
279
  limit = orders.getLimit(symbol, limit)
280
- return self.filter_by_since_limit(orders, since, limit, 'timestamp')
280
+ return self.filter_by_since_limit(orders, since, limit, 'timestamp', True)
281
281
 
282
282
  def handle_orders(self, client: Client, message):
283
283
  #
@@ -381,7 +381,7 @@ class bittrex(ccxt.async_support.bittrex):
381
381
  ohlcv = await self.subscribe_to_ohlcv(negotiation, symbol, timeframe, params)
382
382
  if self.newUpdates:
383
383
  limit = ohlcv.getLimit(symbol, limit)
384
- return self.filter_by_since_limit(ohlcv, since, limit, 0)
384
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
385
385
 
386
386
  async def subscribe_to_ohlcv(self, negotiation, symbol, timeframe='1m', params={}):
387
387
  await self.load_markets()
@@ -446,7 +446,7 @@ class bittrex(ccxt.async_support.bittrex):
446
446
  trades = await self.subscribe_to_trades(negotiation, symbol, params)
447
447
  if self.newUpdates:
448
448
  limit = trades.getLimit(symbol, limit)
449
- return self.filter_by_since_limit(trades, since, limit, 'timestamp')
449
+ return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
450
450
 
451
451
  async def subscribe_to_trades(self, negotiation, symbol, params={}):
452
452
  await self.load_markets()
@@ -507,7 +507,7 @@ class bittrex(ccxt.async_support.bittrex):
507
507
  trades = await self.subscribe_to_my_trades(authentication, params)
508
508
  if self.newUpdates:
509
509
  limit = trades.getLimit(symbol, limit)
510
- return self.filter_by_symbol_since_limit(trades, symbol, since, limit)
510
+ return self.filter_by_symbol_since_limit(trades, symbol, since, limit, True)
511
511
 
512
512
  async def subscribe_to_my_trades(self, authentication, params={}):
513
513
  messageHash = 'execution'