ccxt 4.4.59__tar.gz → 4.4.60__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. {ccxt-4.4.59/ccxt.egg-info → ccxt-4.4.60}/PKG-INFO +4 -4
  2. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/__init__.py +1 -1
  3. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/alpaca.py +8 -3
  4. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/__init__.py +1 -1
  5. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/alpaca.py +8 -3
  6. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/exchange.py +4 -1
  7. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/binance.py +81 -1
  8. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitget.py +2 -1
  9. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bybit.py +5 -2
  10. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/hollaex.py +1 -1
  11. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/oxfun.py +1 -1
  12. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/xt.py +12 -0
  13. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/base/exchange.py +5 -1
  14. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/binance.py +81 -1
  15. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitget.py +2 -1
  16. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bybit.py +5 -2
  17. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/hollaex.py +1 -1
  18. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/oxfun.py +1 -1
  19. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/__init__.py +1 -1
  20. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/xt.py +109 -3
  21. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/test/tests_async.py +11 -0
  22. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/test/tests_sync.py +11 -0
  23. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/xt.py +12 -0
  24. {ccxt-4.4.59 → ccxt-4.4.60/ccxt.egg-info}/PKG-INFO +4 -4
  25. {ccxt-4.4.59 → ccxt-4.4.60}/package.json +1 -1
  26. {ccxt-4.4.59 → ccxt-4.4.60}/LICENSE.txt +0 -0
  27. {ccxt-4.4.59 → ccxt-4.4.60}/MANIFEST.in +0 -0
  28. {ccxt-4.4.59 → ccxt-4.4.60}/README.rst +0 -0
  29. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/__init__.py +0 -0
  30. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/ace.py +0 -0
  31. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/alpaca.py +0 -0
  32. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/ascendex.py +0 -0
  33. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bequant.py +0 -0
  34. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bigone.py +0 -0
  35. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/binance.py +0 -0
  36. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/binancecoinm.py +0 -0
  37. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/binanceus.py +0 -0
  38. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/binanceusdm.py +0 -0
  39. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bingx.py +0 -0
  40. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bit2c.py +0 -0
  41. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitbank.py +0 -0
  42. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitbns.py +0 -0
  43. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitcoincom.py +0 -0
  44. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitfinex.py +0 -0
  45. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitfinex1.py +0 -0
  46. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitflyer.py +0 -0
  47. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitget.py +0 -0
  48. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bithumb.py +0 -0
  49. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitmart.py +0 -0
  50. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitmex.py +0 -0
  51. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitopro.py +0 -0
  52. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitpanda.py +0 -0
  53. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitrue.py +0 -0
  54. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitso.py +0 -0
  55. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitstamp.py +0 -0
  56. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitteam.py +0 -0
  57. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bitvavo.py +0 -0
  58. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bl3p.py +0 -0
  59. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/blockchaincom.py +0 -0
  60. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/blofin.py +0 -0
  61. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/btcalpha.py +0 -0
  62. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/btcbox.py +0 -0
  63. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/btcmarkets.py +0 -0
  64. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/btcturk.py +0 -0
  65. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/bybit.py +0 -0
  66. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/cex.py +0 -0
  67. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinbase.py +0 -0
  68. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinbaseadvanced.py +0 -0
  69. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinbaseexchange.py +0 -0
  70. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinbaseinternational.py +0 -0
  71. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coincatch.py +0 -0
  72. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coincheck.py +0 -0
  73. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinex.py +0 -0
  74. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinlist.py +0 -0
  75. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinmate.py +0 -0
  76. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinmetro.py +0 -0
  77. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinone.py +0 -0
  78. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinsph.py +0 -0
  79. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/coinspot.py +0 -0
  80. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/cryptocom.py +0 -0
  81. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/currencycom.py +0 -0
  82. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/defx.py +0 -0
  83. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/delta.py +0 -0
  84. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/deribit.py +0 -0
  85. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/digifinex.py +0 -0
  86. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/ellipx.py +0 -0
  87. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/exmo.py +0 -0
  88. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/fmfwio.py +0 -0
  89. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/gate.py +0 -0
  90. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/gateio.py +0 -0
  91. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/gemini.py +0 -0
  92. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/hashkey.py +0 -0
  93. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/hitbtc.py +0 -0
  94. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/hollaex.py +0 -0
  95. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/htx.py +0 -0
  96. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/huobi.py +0 -0
  97. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/huobijp.py +0 -0
  98. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/hyperliquid.py +0 -0
  99. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/idex.py +0 -0
  100. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/independentreserve.py +0 -0
  101. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/indodax.py +0 -0
  102. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/kraken.py +0 -0
  103. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/krakenfutures.py +0 -0
  104. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/kucoin.py +0 -0
  105. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/kucoinfutures.py +0 -0
  106. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/kuna.py +0 -0
  107. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/latoken.py +0 -0
  108. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/lbank.py +0 -0
  109. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/luno.py +0 -0
  110. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/mercado.py +0 -0
  111. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/mexc.py +0 -0
  112. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/myokx.py +0 -0
  113. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/ndax.py +0 -0
  114. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/novadax.py +0 -0
  115. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/oceanex.py +0 -0
  116. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/okcoin.py +0 -0
  117. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/okx.py +0 -0
  118. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/onetrading.py +0 -0
  119. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/oxfun.py +0 -0
  120. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/p2b.py +0 -0
  121. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/paradex.py +0 -0
  122. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/paymium.py +0 -0
  123. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/phemex.py +0 -0
  124. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/poloniex.py +0 -0
  125. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/poloniexfutures.py +0 -0
  126. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/probit.py +0 -0
  127. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/timex.py +0 -0
  128. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/tokocrypto.py +0 -0
  129. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/tradeogre.py +0 -0
  130. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/upbit.py +0 -0
  131. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/vertex.py +0 -0
  132. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/wavesexchange.py +0 -0
  133. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/whitebit.py +0 -0
  134. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/woo.py +0 -0
  135. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/woofipro.py +0 -0
  136. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/xt.py +0 -0
  137. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/yobit.py +0 -0
  138. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/zaif.py +0 -0
  139. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/abstract/zonda.py +0 -0
  140. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/ace.py +0 -0
  141. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/ascendex.py +0 -0
  142. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/ace.py +0 -0
  143. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/ascendex.py +0 -0
  144. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/__init__.py +0 -0
  145. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/throttler.py +0 -0
  146. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/__init__.py +0 -0
  147. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  148. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/cache.py +0 -0
  149. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/client.py +0 -0
  150. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/fast_client.py +0 -0
  151. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/functions.py +0 -0
  152. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/future.py +0 -0
  153. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/order_book.py +0 -0
  154. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  155. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bequant.py +0 -0
  156. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bigone.py +0 -0
  157. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/binancecoinm.py +0 -0
  158. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/binanceus.py +0 -0
  159. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/binanceusdm.py +0 -0
  160. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bingx.py +0 -0
  161. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bit2c.py +0 -0
  162. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitbank.py +0 -0
  163. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitbns.py +0 -0
  164. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitcoincom.py +0 -0
  165. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitfinex.py +0 -0
  166. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitfinex1.py +0 -0
  167. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitflyer.py +0 -0
  168. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bithumb.py +0 -0
  169. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitmart.py +0 -0
  170. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitmex.py +0 -0
  171. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitopro.py +0 -0
  172. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitpanda.py +0 -0
  173. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitrue.py +0 -0
  174. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitso.py +0 -0
  175. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitstamp.py +0 -0
  176. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitteam.py +0 -0
  177. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bitvavo.py +0 -0
  178. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/bl3p.py +0 -0
  179. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/blockchaincom.py +0 -0
  180. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/blofin.py +0 -0
  181. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/btcalpha.py +0 -0
  182. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/btcbox.py +0 -0
  183. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/btcmarkets.py +0 -0
  184. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/btcturk.py +0 -0
  185. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/cex.py +0 -0
  186. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinbase.py +0 -0
  187. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinbaseadvanced.py +0 -0
  188. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinbaseexchange.py +0 -0
  189. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinbaseinternational.py +0 -0
  190. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coincatch.py +0 -0
  191. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coincheck.py +0 -0
  192. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinex.py +0 -0
  193. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinlist.py +0 -0
  194. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinmate.py +0 -0
  195. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinmetro.py +0 -0
  196. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinone.py +0 -0
  197. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinsph.py +0 -0
  198. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/coinspot.py +0 -0
  199. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/cryptocom.py +0 -0
  200. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/currencycom.py +0 -0
  201. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/defx.py +0 -0
  202. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/delta.py +0 -0
  203. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/deribit.py +0 -0
  204. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/digifinex.py +0 -0
  205. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/ellipx.py +0 -0
  206. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/exmo.py +0 -0
  207. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/fmfwio.py +0 -0
  208. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/gate.py +0 -0
  209. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/gateio.py +0 -0
  210. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/gemini.py +0 -0
  211. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/hashkey.py +0 -0
  212. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/hitbtc.py +0 -0
  213. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/htx.py +0 -0
  214. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/huobi.py +0 -0
  215. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/huobijp.py +0 -0
  216. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/hyperliquid.py +0 -0
  217. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/idex.py +0 -0
  218. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/independentreserve.py +0 -0
  219. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/indodax.py +0 -0
  220. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/kraken.py +0 -0
  221. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/krakenfutures.py +0 -0
  222. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/kucoin.py +0 -0
  223. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/kucoinfutures.py +0 -0
  224. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/kuna.py +0 -0
  225. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/latoken.py +0 -0
  226. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/lbank.py +0 -0
  227. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/luno.py +0 -0
  228. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/mercado.py +0 -0
  229. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/mexc.py +0 -0
  230. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/myokx.py +0 -0
  231. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/ndax.py +0 -0
  232. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/novadax.py +0 -0
  233. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/oceanex.py +0 -0
  234. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/okcoin.py +0 -0
  235. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/okx.py +0 -0
  236. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/onetrading.py +0 -0
  237. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/p2b.py +0 -0
  238. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/paradex.py +0 -0
  239. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/paymium.py +0 -0
  240. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/phemex.py +0 -0
  241. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/poloniex.py +0 -0
  242. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/poloniexfutures.py +0 -0
  243. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/probit.py +0 -0
  244. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/timex.py +0 -0
  245. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/tokocrypto.py +0 -0
  246. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/tradeogre.py +0 -0
  247. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/upbit.py +0 -0
  248. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/vertex.py +0 -0
  249. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/wavesexchange.py +0 -0
  250. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/whitebit.py +0 -0
  251. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/woo.py +0 -0
  252. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/woofipro.py +0 -0
  253. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/yobit.py +0 -0
  254. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/zaif.py +0 -0
  255. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/async_support/zonda.py +0 -0
  256. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/base/__init__.py +0 -0
  257. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/base/decimal_to_precision.py +0 -0
  258. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/base/errors.py +0 -0
  259. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/base/precise.py +0 -0
  260. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/base/types.py +0 -0
  261. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bequant.py +0 -0
  262. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bigone.py +0 -0
  263. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/binancecoinm.py +0 -0
  264. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/binanceus.py +0 -0
  265. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/binanceusdm.py +0 -0
  266. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bingx.py +0 -0
  267. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bit2c.py +0 -0
  268. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitbank.py +0 -0
  269. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitbns.py +0 -0
  270. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitcoincom.py +0 -0
  271. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitfinex.py +0 -0
  272. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitfinex1.py +0 -0
  273. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitflyer.py +0 -0
  274. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bithumb.py +0 -0
  275. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitmart.py +0 -0
  276. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitmex.py +0 -0
  277. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitopro.py +0 -0
  278. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitpanda.py +0 -0
  279. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitrue.py +0 -0
  280. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitso.py +0 -0
  281. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitstamp.py +0 -0
  282. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitteam.py +0 -0
  283. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bitvavo.py +0 -0
  284. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/bl3p.py +0 -0
  285. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/blockchaincom.py +0 -0
  286. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/blofin.py +0 -0
  287. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/btcalpha.py +0 -0
  288. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/btcbox.py +0 -0
  289. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/btcmarkets.py +0 -0
  290. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/btcturk.py +0 -0
  291. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/cex.py +0 -0
  292. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinbase.py +0 -0
  293. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinbaseadvanced.py +0 -0
  294. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinbaseexchange.py +0 -0
  295. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinbaseinternational.py +0 -0
  296. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coincatch.py +0 -0
  297. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coincheck.py +0 -0
  298. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinex.py +0 -0
  299. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinlist.py +0 -0
  300. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinmate.py +0 -0
  301. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinmetro.py +0 -0
  302. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinone.py +0 -0
  303. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinsph.py +0 -0
  304. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/coinspot.py +0 -0
  305. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/cryptocom.py +0 -0
  306. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/currencycom.py +0 -0
  307. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/defx.py +0 -0
  308. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/delta.py +0 -0
  309. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/deribit.py +0 -0
  310. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/digifinex.py +0 -0
  311. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/ellipx.py +0 -0
  312. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/exmo.py +0 -0
  313. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/fmfwio.py +0 -0
  314. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/gate.py +0 -0
  315. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/gateio.py +0 -0
  316. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/gemini.py +0 -0
  317. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/hashkey.py +0 -0
  318. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/hitbtc.py +0 -0
  319. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/htx.py +0 -0
  320. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/huobi.py +0 -0
  321. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/huobijp.py +0 -0
  322. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/hyperliquid.py +0 -0
  323. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/idex.py +0 -0
  324. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/independentreserve.py +0 -0
  325. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/indodax.py +0 -0
  326. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/kraken.py +0 -0
  327. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/krakenfutures.py +0 -0
  328. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/kucoin.py +0 -0
  329. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/kucoinfutures.py +0 -0
  330. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/kuna.py +0 -0
  331. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/latoken.py +0 -0
  332. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/lbank.py +0 -0
  333. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/luno.py +0 -0
  334. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/mercado.py +0 -0
  335. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/mexc.py +0 -0
  336. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/myokx.py +0 -0
  337. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/ndax.py +0 -0
  338. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/novadax.py +0 -0
  339. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/oceanex.py +0 -0
  340. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/okcoin.py +0 -0
  341. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/okx.py +0 -0
  342. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/onetrading.py +0 -0
  343. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/p2b.py +0 -0
  344. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/paradex.py +0 -0
  345. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/paymium.py +0 -0
  346. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/phemex.py +0 -0
  347. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/poloniex.py +0 -0
  348. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/poloniexfutures.py +0 -0
  349. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/alpaca.py +0 -0
  350. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/ascendex.py +0 -0
  351. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bequant.py +0 -0
  352. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/binance.py +0 -0
  353. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/binancecoinm.py +0 -0
  354. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/binanceus.py +0 -0
  355. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/binanceusdm.py +0 -0
  356. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bingx.py +0 -0
  357. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitcoincom.py +0 -0
  358. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitfinex.py +0 -0
  359. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitfinex1.py +0 -0
  360. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitget.py +0 -0
  361. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bithumb.py +0 -0
  362. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitmart.py +0 -0
  363. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitmex.py +0 -0
  364. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitopro.py +0 -0
  365. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitpanda.py +0 -0
  366. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitrue.py +0 -0
  367. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitstamp.py +0 -0
  368. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bitvavo.py +0 -0
  369. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/blockchaincom.py +0 -0
  370. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/blofin.py +0 -0
  371. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/bybit.py +0 -0
  372. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/cex.py +0 -0
  373. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coinbase.py +0 -0
  374. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coinbaseadvanced.py +0 -0
  375. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coinbaseexchange.py +0 -0
  376. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coinbaseinternational.py +0 -0
  377. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coincatch.py +0 -0
  378. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coincheck.py +0 -0
  379. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coinex.py +0 -0
  380. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/coinone.py +0 -0
  381. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/cryptocom.py +0 -0
  382. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/currencycom.py +0 -0
  383. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/defx.py +0 -0
  384. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/deribit.py +0 -0
  385. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/exmo.py +0 -0
  386. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/gate.py +0 -0
  387. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/gateio.py +0 -0
  388. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/gemini.py +0 -0
  389. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/hashkey.py +0 -0
  390. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/hitbtc.py +0 -0
  391. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/hollaex.py +0 -0
  392. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/htx.py +0 -0
  393. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/huobi.py +0 -0
  394. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/huobijp.py +0 -0
  395. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/hyperliquid.py +0 -0
  396. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/idex.py +0 -0
  397. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/independentreserve.py +0 -0
  398. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/kraken.py +0 -0
  399. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/krakenfutures.py +0 -0
  400. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/kucoin.py +0 -0
  401. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/kucoinfutures.py +0 -0
  402. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/lbank.py +0 -0
  403. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/luno.py +0 -0
  404. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/mexc.py +0 -0
  405. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/myokx.py +0 -0
  406. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/ndax.py +0 -0
  407. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/okcoin.py +0 -0
  408. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/okx.py +0 -0
  409. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/onetrading.py +0 -0
  410. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/oxfun.py +0 -0
  411. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/p2b.py +0 -0
  412. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/paradex.py +0 -0
  413. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/phemex.py +0 -0
  414. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/poloniex.py +0 -0
  415. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/poloniexfutures.py +0 -0
  416. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/probit.py +0 -0
  417. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/upbit.py +0 -0
  418. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/vertex.py +0 -0
  419. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/wazirx.py +0 -0
  420. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/whitebit.py +0 -0
  421. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/woo.py +0 -0
  422. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/pro/woofipro.py +0 -0
  423. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/probit.py +0 -0
  424. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/__init__.py +0 -0
  425. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  426. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  427. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  428. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  429. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  430. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  431. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  432. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  433. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  434. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  435. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/__init__.py +0 -0
  436. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/__init__.py +0 -0
  437. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/abi.py +0 -0
  438. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/base.py +0 -0
  439. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/codec.py +0 -0
  440. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/constants.py +0 -0
  441. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/decoding.py +0 -0
  442. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/encoding.py +0 -0
  443. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/exceptions.py +0 -0
  444. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/grammar.py +0 -0
  445. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/packed.py +0 -0
  446. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  447. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/registry.py +0 -0
  448. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +0 -0
  449. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +0 -0
  450. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  451. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +0 -0
  452. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/utils/padding.py +0 -0
  453. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/abi/utils/string.py +0 -0
  454. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/account/__init__.py +0 -0
  455. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +0 -0
  456. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +0 -0
  457. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +0 -0
  458. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/account/messages.py +0 -0
  459. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  460. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +0 -0
  461. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +0 -0
  462. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/hexbytes/main.py +0 -0
  463. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  464. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/__init__.py +0 -0
  465. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/abi.py +0 -0
  466. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/bls.py +0 -0
  467. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/discovery.py +0 -0
  468. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/encoding.py +0 -0
  469. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/enums.py +0 -0
  470. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/ethpm.py +0 -0
  471. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/evm.py +0 -0
  472. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/networks.py +0 -0
  473. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  474. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/__init__.py +0 -0
  475. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/abi.py +0 -0
  476. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/address.py +0 -0
  477. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/applicators.py +0 -0
  478. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/conversions.py +0 -0
  479. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/currency.py +0 -0
  480. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +0 -0
  481. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/debug.py +0 -0
  482. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/decorators.py +0 -0
  483. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/encoding.py +0 -0
  484. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/exceptions.py +0 -0
  485. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/functional.py +0 -0
  486. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +0 -0
  487. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/humanize.py +0 -0
  488. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/logging.py +0 -0
  489. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/module_loading.py +0 -0
  490. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/numeric.py +0 -0
  491. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  492. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/toolz.py +0 -0
  493. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/types.py +0 -0
  494. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +0 -0
  495. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/typing/misc.py +0 -0
  496. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/ethereum/utils/units.py +0 -0
  497. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  498. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  499. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/__init__.py +0 -0
  500. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +0 -0
  501. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +0 -0
  502. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/ast_utils.py +0 -0
  503. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/common.py +0 -0
  504. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/exceptions.py +0 -0
  505. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/grammar.py +0 -0
  506. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  507. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/indenter.py +0 -0
  508. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/lark.py +0 -0
  509. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/lexer.py +0 -0
  510. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/load_grammar.py +0 -0
  511. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parse_tree_builder.py +0 -0
  512. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parser_frontends.py +0 -0
  513. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  514. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/cyk.py +0 -0
  515. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/earley.py +0 -0
  516. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/earley_common.py +0 -0
  517. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/earley_forest.py +0 -0
  518. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +0 -0
  519. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +0 -0
  520. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +0 -0
  521. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/lalr_parser.py +0 -0
  522. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +0 -0
  523. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/parsers/xearley.py +0 -0
  524. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/py.typed +0 -0
  525. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/reconstruct.py +0 -0
  526. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/tools/__init__.py +0 -0
  527. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/tools/nearley.py +0 -0
  528. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/tools/serialize.py +0 -0
  529. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/tools/standalone.py +0 -0
  530. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/tree.py +0 -0
  531. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/tree_matcher.py +0 -0
  532. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/tree_templates.py +0 -0
  533. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/utils.py +0 -0
  534. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/lark/visitors.py +0 -0
  535. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/__init__.py +0 -0
  536. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/base.py +0 -0
  537. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/class_registry.py +0 -0
  538. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/decorators.py +0 -0
  539. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/error_store.py +0 -0
  540. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/exceptions.py +0 -0
  541. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/fields.py +0 -0
  542. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/orderedset.py +0 -0
  543. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/py.typed +0 -0
  544. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/schema.py +0 -0
  545. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/types.py +0 -0
  546. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/utils.py +0 -0
  547. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/validate.py +0 -0
  548. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow/warnings.py +0 -0
  549. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +0 -0
  550. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +0 -0
  551. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +0 -0
  552. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +0 -0
  553. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  554. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_dataclass/typing.py +0 -0
  555. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +0 -0
  556. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +0 -0
  557. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +0 -0
  558. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  559. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/msgpack/__init__.py +0 -0
  560. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/msgpack/exceptions.py +0 -0
  561. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/msgpack/ext.py +0 -0
  562. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/msgpack/fallback.py +0 -0
  563. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/parsimonious/__init__.py +0 -0
  564. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/parsimonious/exceptions.py +0 -0
  565. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/parsimonious/expressions.py +0 -0
  566. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/parsimonious/grammar.py +0 -0
  567. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/parsimonious/nodes.py +0 -0
  568. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/parsimonious/utils.py +0 -0
  569. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/__init__.py +0 -0
  570. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  571. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/data_types.py +0 -0
  572. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  573. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +0 -0
  574. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +0 -0
  575. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +0 -0
  576. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/felt.py +0 -0
  577. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/type_parser.py +0 -0
  578. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  579. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +0 -0
  580. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  581. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +0 -0
  582. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/ccxt_utils.py +0 -0
  583. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/common.py +0 -0
  584. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/constants.py +0 -0
  585. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  586. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/hash/address.py +0 -0
  587. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +0 -0
  588. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/hash/selector.py +0 -0
  589. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/hash/storage.py +0 -0
  590. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/hash/utils.py +0 -0
  591. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  592. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/models/typed_data.py +0 -0
  593. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/__init__.py +0 -0
  594. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +0 -0
  595. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/_context.py +0 -0
  596. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +0 -0
  597. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +0 -0
  598. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +0 -0
  599. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +0 -0
  600. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +0 -0
  601. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +0 -0
  602. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +0 -0
  603. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +0 -0
  604. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +0 -0
  605. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +0 -0
  606. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +0 -0
  607. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +0 -0
  608. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +0 -0
  609. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +0 -0
  610. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +0 -0
  611. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +0 -0
  612. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +0 -0
  613. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/errors.py +0 -0
  614. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/factory.py +0 -0
  615. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +0 -0
  616. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +0 -0
  617. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  618. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +0 -0
  619. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/utils/iterable.py +0 -0
  620. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/utils/schema.py +0 -0
  621. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starknet/utils/typed_data.py +0 -0
  622. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starkware/__init__.py +0 -0
  623. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  624. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +0 -0
  625. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starkware/crypto/math_utils.py +0 -0
  626. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starkware/crypto/signature.py +0 -0
  627. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/starkware/crypto/utils.py +0 -0
  628. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/__init__.py +0 -0
  629. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  630. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/core/intfunc.py +0 -0
  631. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  632. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/external/gmpy.py +0 -0
  633. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/external/importtools.py +0 -0
  634. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/external/ntheory.py +0 -0
  635. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/sympy/external/pythonmpq.py +0 -0
  636. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/__init__.py +0 -0
  637. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/_signatures.py +0 -0
  638. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/_version.py +0 -0
  639. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/compatibility.py +0 -0
  640. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/curried/__init__.py +0 -0
  641. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/curried/exceptions.py +0 -0
  642. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/curried/operator.py +0 -0
  643. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/dicttoolz.py +0 -0
  644. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/functoolz.py +0 -0
  645. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/itertoolz.py +0 -0
  646. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/recipes.py +0 -0
  647. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/toolz/utils.py +0 -0
  648. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  649. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/static_dependencies/typing_inspect/typing_inspect.py +0 -0
  650. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/test/__init__.py +0 -0
  651. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/test/tests_helpers.py +0 -0
  652. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/test/tests_init.py +0 -0
  653. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/timex.py +0 -0
  654. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/tokocrypto.py +0 -0
  655. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/tradeogre.py +0 -0
  656. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/upbit.py +0 -0
  657. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/vertex.py +0 -0
  658. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/wavesexchange.py +0 -0
  659. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/whitebit.py +0 -0
  660. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/woo.py +0 -0
  661. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/woofipro.py +0 -0
  662. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/yobit.py +0 -0
  663. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/zaif.py +0 -0
  664. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt/zonda.py +0 -0
  665. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt.egg-info/SOURCES.txt +0 -0
  666. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt.egg-info/dependency_links.txt +0 -0
  667. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt.egg-info/requires.txt +0 -0
  668. {ccxt-4.4.59 → ccxt-4.4.60}/ccxt.egg-info/top_level.txt +0 -0
  669. {ccxt-4.4.59 → ccxt-4.4.60}/setup.cfg +0 -0
  670. {ccxt-4.4.59 → ccxt-4.4.60}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.59
3
+ Version: 4.4.60
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -266,13 +266,13 @@ console.log(version, Object.keys(exchanges));
266
266
 
267
267
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
268
268
 
269
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.59/dist/ccxt.browser.min.js
270
- * unpkg: https://unpkg.com/ccxt@4.4.59/dist/ccxt.browser.min.js
269
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.60/dist/ccxt.browser.min.js
270
+ * unpkg: https://unpkg.com/ccxt@4.4.60/dist/ccxt.browser.min.js
271
271
 
272
272
  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.
273
273
 
274
274
  ```HTML
275
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.59/dist/ccxt.browser.min.js"></script>
275
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.60/dist/ccxt.browser.min.js"></script>
276
276
  ```
277
277
 
278
278
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.4.59'
25
+ __version__ = '4.4.60'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -1138,9 +1138,9 @@ class alpaca(Exchange, ImplicitAPI):
1138
1138
  until = self.safe_integer(params, 'until')
1139
1139
  if until is not None:
1140
1140
  params = self.omit(params, 'until')
1141
- request['endTime'] = until
1141
+ request['endTime'] = self.iso8601(until)
1142
1142
  if since is not None:
1143
- request['after'] = since
1143
+ request['after'] = self.iso8601(since)
1144
1144
  if limit is not None:
1145
1145
  request['limit'] = limit
1146
1146
  response = self.traderPrivateGetV2Orders(self.extend(request, params))
@@ -1374,6 +1374,7 @@ class alpaca(Exchange, ImplicitAPI):
1374
1374
  :param int [limit]: the maximum number of trade structures to retrieve
1375
1375
  :param dict [params]: extra parameters specific to the exchange API endpoint
1376
1376
  :param int [params.until]: the latest time in ms to fetch trades for
1377
+ :param str [params.page_token]: page_token - used for paging
1377
1378
  :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1378
1379
  """
1379
1380
  self.load_markets()
@@ -1383,8 +1384,12 @@ class alpaca(Exchange, ImplicitAPI):
1383
1384
  }
1384
1385
  if symbol is not None:
1385
1386
  market = self.market(symbol)
1387
+ until = self.safe_integer(params, 'until')
1388
+ if until is not None:
1389
+ params = self.omit(params, 'until')
1390
+ request['until'] = self.iso8601(until)
1386
1391
  if since is not None:
1387
- request['after'] = since
1392
+ request['after'] = self.iso8601(since)
1388
1393
  if limit is not None:
1389
1394
  request['page_size'] = limit
1390
1395
  request, params = self.handle_until_option('until', request, params)
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.59'
7
+ __version__ = '4.4.60'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1138,9 +1138,9 @@ class alpaca(Exchange, ImplicitAPI):
1138
1138
  until = self.safe_integer(params, 'until')
1139
1139
  if until is not None:
1140
1140
  params = self.omit(params, 'until')
1141
- request['endTime'] = until
1141
+ request['endTime'] = self.iso8601(until)
1142
1142
  if since is not None:
1143
- request['after'] = since
1143
+ request['after'] = self.iso8601(since)
1144
1144
  if limit is not None:
1145
1145
  request['limit'] = limit
1146
1146
  response = await self.traderPrivateGetV2Orders(self.extend(request, params))
@@ -1374,6 +1374,7 @@ class alpaca(Exchange, ImplicitAPI):
1374
1374
  :param int [limit]: the maximum number of trade structures to retrieve
1375
1375
  :param dict [params]: extra parameters specific to the exchange API endpoint
1376
1376
  :param int [params.until]: the latest time in ms to fetch trades for
1377
+ :param str [params.page_token]: page_token - used for paging
1377
1378
  :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1378
1379
  """
1379
1380
  await self.load_markets()
@@ -1383,8 +1384,12 @@ class alpaca(Exchange, ImplicitAPI):
1383
1384
  }
1384
1385
  if symbol is not None:
1385
1386
  market = self.market(symbol)
1387
+ until = self.safe_integer(params, 'until')
1388
+ if until is not None:
1389
+ params = self.omit(params, 'until')
1390
+ request['until'] = self.iso8601(until)
1386
1391
  if since is not None:
1387
- request['after'] = since
1392
+ request['after'] = self.iso8601(since)
1388
1393
  if limit is not None:
1389
1394
  request['page_size'] = limit
1390
1395
  request, params = self.handle_until_option('until', request, params)
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.59'
5
+ __version__ = '4.4.60'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1440,6 +1440,9 @@ class Exchange(BaseExchange):
1440
1440
  async def create_orders(self, orders: List[OrderRequest], params={}):
1441
1441
  raise NotSupported(self.id + ' createOrders() is not supported yet')
1442
1442
 
1443
+ async def edit_orders(self, orders: List[OrderRequest], params={}):
1444
+ raise NotSupported(self.id + ' editOrders() is not supported yet')
1445
+
1443
1446
  async def create_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1444
1447
  raise NotSupported(self.id + ' createOrderWs() is not supported yet')
1445
1448
 
@@ -86,6 +86,7 @@ class binance(Exchange, ImplicitAPI):
86
86
  'createTrailingPercentOrder': True,
87
87
  'createTriggerOrder': True,
88
88
  'editOrder': True,
89
+ 'editOrders': True,
89
90
  'fetchAccounts': None,
90
91
  'fetchBalance': True,
91
92
  'fetchBidsAsks': True,
@@ -5393,6 +5394,85 @@ class binance(Exchange, ImplicitAPI):
5393
5394
  else:
5394
5395
  return await self.edit_contract_order(id, symbol, type, side, amount, price, params)
5395
5396
 
5397
+ async def edit_orders(self, orders: List[OrderRequest], params={}):
5398
+ """
5399
+ edit a list of trade orders
5400
+
5401
+ https://developers.binance.com/docs/derivatives/usds-margined-futures/trade/rest-api/Modify-Multiple-Orders
5402
+ https://developers.binance.com/docs/derivatives/coin-margined-futures/trade/Modify-Multiple-Orders
5403
+
5404
+ :param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
5405
+ :param dict [params]: extra parameters specific to the exchange API endpoint
5406
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
5407
+ """
5408
+ await self.load_markets()
5409
+ ordersRequests = []
5410
+ orderSymbols = []
5411
+ for i in range(0, len(orders)):
5412
+ rawOrder = orders[i]
5413
+ marketId = self.safe_string(rawOrder, 'symbol')
5414
+ orderSymbols.append(marketId)
5415
+ id = self.safe_string(rawOrder, 'id')
5416
+ type = self.safe_string(rawOrder, 'type')
5417
+ side = self.safe_string(rawOrder, 'side')
5418
+ amount = self.safe_value(rawOrder, 'amount')
5419
+ price = self.safe_value(rawOrder, 'price')
5420
+ orderParams = self.safe_dict(rawOrder, 'params', {})
5421
+ isPortfolioMargin = None
5422
+ isPortfolioMargin, orderParams = self.handle_option_and_params_2(orderParams, 'editOrders', 'papi', 'portfolioMargin', False)
5423
+ if isPortfolioMargin:
5424
+ raise NotSupported(self.id + ' editOrders() does not support portfolio margin orders')
5425
+ orderRequest = self.edit_contract_order_request(id, marketId, type, side, amount, price, orderParams)
5426
+ ordersRequests.append(orderRequest)
5427
+ orderSymbols = self.market_symbols(orderSymbols, None, False, True, True)
5428
+ market = self.market(orderSymbols[0])
5429
+ if market['spot'] or market['option']:
5430
+ raise NotSupported(self.id + ' editOrders() does not support ' + market['type'] + ' orders')
5431
+ response = None
5432
+ request: dict = {
5433
+ 'batchOrders': ordersRequests,
5434
+ }
5435
+ request = self.extend(request, params)
5436
+ if market['linear']:
5437
+ response = await self.fapiPrivatePutBatchOrders(request)
5438
+ elif market['inverse']:
5439
+ response = await self.dapiPrivatePutBatchOrders(request)
5440
+ #
5441
+ # [
5442
+ # {
5443
+ # "code": -4005,
5444
+ # "msg": "Quantity greater than max quantity."
5445
+ # },
5446
+ # {
5447
+ # "orderId": 650640530,
5448
+ # "symbol": "LTCUSDT",
5449
+ # "status": "NEW",
5450
+ # "clientOrderId": "x-xcKtGhcu32184eb13585491289bbaf",
5451
+ # "price": "54.00",
5452
+ # "avgPrice": "0.00",
5453
+ # "origQty": "0.100",
5454
+ # "executedQty": "0.000",
5455
+ # "cumQty": "0.000",
5456
+ # "cumQuote": "0.00000",
5457
+ # "timeInForce": "GTC",
5458
+ # "type": "LIMIT",
5459
+ # "reduceOnly": False,
5460
+ # "closePosition": False,
5461
+ # "side": "BUY",
5462
+ # "positionSide": "BOTH",
5463
+ # "stopPrice": "0.00",
5464
+ # "workingType": "CONTRACT_PRICE",
5465
+ # "priceProtect": False,
5466
+ # "origType": "LIMIT",
5467
+ # "priceMatch": "NONE",
5468
+ # "selfTradePreventionMode": "NONE",
5469
+ # "goodTillDate": 0,
5470
+ # "updateTime": 1698073926929
5471
+ # }
5472
+ # ]
5473
+ #
5474
+ return self.parse_orders(response)
5475
+
5396
5476
  def parse_order_status(self, status: Str):
5397
5477
  statuses: dict = {
5398
5478
  'NEW': 'open',
@@ -11243,7 +11323,7 @@ class binance(Exchange, ImplicitAPI):
11243
11323
  params['newClientOrderId'] = brokerId + self.uuid22()
11244
11324
  query = None
11245
11325
  # handle batchOrders
11246
- if (path == 'batchOrders') and (method == 'POST'):
11326
+ if (path == 'batchOrders') and ((method == 'POST') or (method == 'PUT')):
11247
11327
  batchOrders = self.safe_value(params, 'batchOrders')
11248
11328
  queryBatch = (self.json(batchOrders))
11249
11329
  params['batchOrders'] = queryBatch
@@ -8856,7 +8856,8 @@ class bitget(Exchange, ImplicitAPI):
8856
8856
  if method == 'POST':
8857
8857
  headers['Content-Type'] = 'application/json'
8858
8858
  sandboxMode = self.safe_bool(self.options, 'sandboxMode', False)
8859
- if sandboxMode:
8859
+ if sandboxMode and (path != 'v2/public/time'):
8860
+ # https://github.com/ccxt/ccxt/issues/25252#issuecomment-2662742336
8860
8861
  if headers is None:
8861
8862
  headers = {}
8862
8863
  headers['PAPTRADING'] = '1'
@@ -6525,10 +6525,13 @@ classic accounts only/ spot not supported* fetches information on an order made
6525
6525
  # }
6526
6526
  #
6527
6527
  timestamp = self.safe_integer(interest, 'timestamp')
6528
- value = self.safe_number_2(interest, 'open_interest', 'openInterest')
6528
+ openInterest = self.safe_number_2(interest, 'open_interest', 'openInterest')
6529
+ # the openInterest is in the base asset for linear and quote asset for inverse
6530
+ amount = openInterest if market['linear'] else None
6531
+ value = openInterest if market['inverse'] else None
6529
6532
  return self.safe_open_interest({
6530
6533
  'symbol': market['symbol'],
6531
- 'openInterestAmount': None,
6534
+ 'openInterestAmount': amount,
6532
6535
  'openInterestValue': value,
6533
6536
  'timestamp': timestamp,
6534
6537
  'datetime': self.iso8601(timestamp),
@@ -1882,7 +1882,7 @@ class hollaex(Exchange, ImplicitAPI):
1882
1882
  # "network":"https://api.hollaex.network"
1883
1883
  # }
1884
1884
  #
1885
- coins = self.safe_list(response, 'coins')
1885
+ coins = self.safe_dict(response, 'coins', {})
1886
1886
  return self.parse_deposit_withdraw_fees(coins, codes, 'symbol')
1887
1887
 
1888
1888
  def normalize_number_if_needed(self, number):
@@ -2885,7 +2885,7 @@ class oxfun(Exchange, ImplicitAPI):
2885
2885
  'AccessKey': self.apiKey,
2886
2886
  'Timestamp': datetime,
2887
2887
  'Signature': signature,
2888
- 'Nonce': nonce,
2888
+ 'Nonce': str(nonce),
2889
2889
  }
2890
2890
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2891
2891
 
@@ -1394,9 +1394,15 @@ class xt(Exchange, ImplicitAPI):
1394
1394
  :param int [since]: timestamp in ms of the earliest candle to fetch
1395
1395
  :param int [limit]: the maximum amount of candles to fetch
1396
1396
  :param dict params: extra parameters specific to the xt api endpoint
1397
+ :param int [params.until]: timestamp in ms of the latest candle to fetch
1398
+ :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1397
1399
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
1398
1400
  """
1399
1401
  await self.load_markets()
1402
+ paginate = False
1403
+ paginate, params = self.handle_option_and_params(params, 'fetchOHLCV', 'paginate', False)
1404
+ if paginate:
1405
+ return await self.fetch_paginated_call_deterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1000)
1400
1406
  market = self.market(symbol)
1401
1407
  request = {
1402
1408
  'symbol': market['id'],
@@ -1406,6 +1412,12 @@ class xt(Exchange, ImplicitAPI):
1406
1412
  request['startTime'] = since
1407
1413
  if limit is not None:
1408
1414
  request['limit'] = limit
1415
+ else:
1416
+ request['limit'] = 1000
1417
+ until = self.safe_integer(params, 'until')
1418
+ params = self.omit(params, ['until'])
1419
+ if until is not None:
1420
+ request['endTime'] = until
1409
1421
  response = None
1410
1422
  if market['linear']:
1411
1423
  response = await self.publicLinearGetFutureMarketV1PublicQKline(self.extend(request, params))
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.59'
7
+ __version__ = '4.4.60'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1871,6 +1871,7 @@ class Exchange(object):
1871
1871
  'createTriggerOrderWs': None,
1872
1872
  'deposit': None,
1873
1873
  'editOrder': 'emulated',
1874
+ 'editOrders': None,
1874
1875
  'editOrderWs': None,
1875
1876
  'fetchAccounts': None,
1876
1877
  'fetchBalance': True,
@@ -5178,6 +5179,9 @@ class Exchange(object):
5178
5179
  def create_orders(self, orders: List[OrderRequest], params={}):
5179
5180
  raise NotSupported(self.id + ' createOrders() is not supported yet')
5180
5181
 
5182
+ def edit_orders(self, orders: List[OrderRequest], params={}):
5183
+ raise NotSupported(self.id + ' editOrders() is not supported yet')
5184
+
5181
5185
  def create_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
5182
5186
  raise NotSupported(self.id + ' createOrderWs() is not supported yet')
5183
5187
 
@@ -85,6 +85,7 @@ class binance(Exchange, ImplicitAPI):
85
85
  'createTrailingPercentOrder': True,
86
86
  'createTriggerOrder': True,
87
87
  'editOrder': True,
88
+ 'editOrders': True,
88
89
  'fetchAccounts': None,
89
90
  'fetchBalance': True,
90
91
  'fetchBidsAsks': True,
@@ -5392,6 +5393,85 @@ class binance(Exchange, ImplicitAPI):
5392
5393
  else:
5393
5394
  return self.edit_contract_order(id, symbol, type, side, amount, price, params)
5394
5395
 
5396
+ def edit_orders(self, orders: List[OrderRequest], params={}):
5397
+ """
5398
+ edit a list of trade orders
5399
+
5400
+ https://developers.binance.com/docs/derivatives/usds-margined-futures/trade/rest-api/Modify-Multiple-Orders
5401
+ https://developers.binance.com/docs/derivatives/coin-margined-futures/trade/Modify-Multiple-Orders
5402
+
5403
+ :param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
5404
+ :param dict [params]: extra parameters specific to the exchange API endpoint
5405
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
5406
+ """
5407
+ self.load_markets()
5408
+ ordersRequests = []
5409
+ orderSymbols = []
5410
+ for i in range(0, len(orders)):
5411
+ rawOrder = orders[i]
5412
+ marketId = self.safe_string(rawOrder, 'symbol')
5413
+ orderSymbols.append(marketId)
5414
+ id = self.safe_string(rawOrder, 'id')
5415
+ type = self.safe_string(rawOrder, 'type')
5416
+ side = self.safe_string(rawOrder, 'side')
5417
+ amount = self.safe_value(rawOrder, 'amount')
5418
+ price = self.safe_value(rawOrder, 'price')
5419
+ orderParams = self.safe_dict(rawOrder, 'params', {})
5420
+ isPortfolioMargin = None
5421
+ isPortfolioMargin, orderParams = self.handle_option_and_params_2(orderParams, 'editOrders', 'papi', 'portfolioMargin', False)
5422
+ if isPortfolioMargin:
5423
+ raise NotSupported(self.id + ' editOrders() does not support portfolio margin orders')
5424
+ orderRequest = self.edit_contract_order_request(id, marketId, type, side, amount, price, orderParams)
5425
+ ordersRequests.append(orderRequest)
5426
+ orderSymbols = self.market_symbols(orderSymbols, None, False, True, True)
5427
+ market = self.market(orderSymbols[0])
5428
+ if market['spot'] or market['option']:
5429
+ raise NotSupported(self.id + ' editOrders() does not support ' + market['type'] + ' orders')
5430
+ response = None
5431
+ request: dict = {
5432
+ 'batchOrders': ordersRequests,
5433
+ }
5434
+ request = self.extend(request, params)
5435
+ if market['linear']:
5436
+ response = self.fapiPrivatePutBatchOrders(request)
5437
+ elif market['inverse']:
5438
+ response = self.dapiPrivatePutBatchOrders(request)
5439
+ #
5440
+ # [
5441
+ # {
5442
+ # "code": -4005,
5443
+ # "msg": "Quantity greater than max quantity."
5444
+ # },
5445
+ # {
5446
+ # "orderId": 650640530,
5447
+ # "symbol": "LTCUSDT",
5448
+ # "status": "NEW",
5449
+ # "clientOrderId": "x-xcKtGhcu32184eb13585491289bbaf",
5450
+ # "price": "54.00",
5451
+ # "avgPrice": "0.00",
5452
+ # "origQty": "0.100",
5453
+ # "executedQty": "0.000",
5454
+ # "cumQty": "0.000",
5455
+ # "cumQuote": "0.00000",
5456
+ # "timeInForce": "GTC",
5457
+ # "type": "LIMIT",
5458
+ # "reduceOnly": False,
5459
+ # "closePosition": False,
5460
+ # "side": "BUY",
5461
+ # "positionSide": "BOTH",
5462
+ # "stopPrice": "0.00",
5463
+ # "workingType": "CONTRACT_PRICE",
5464
+ # "priceProtect": False,
5465
+ # "origType": "LIMIT",
5466
+ # "priceMatch": "NONE",
5467
+ # "selfTradePreventionMode": "NONE",
5468
+ # "goodTillDate": 0,
5469
+ # "updateTime": 1698073926929
5470
+ # }
5471
+ # ]
5472
+ #
5473
+ return self.parse_orders(response)
5474
+
5395
5475
  def parse_order_status(self, status: Str):
5396
5476
  statuses: dict = {
5397
5477
  'NEW': 'open',
@@ -11242,7 +11322,7 @@ class binance(Exchange, ImplicitAPI):
11242
11322
  params['newClientOrderId'] = brokerId + self.uuid22()
11243
11323
  query = None
11244
11324
  # handle batchOrders
11245
- if (path == 'batchOrders') and (method == 'POST'):
11325
+ if (path == 'batchOrders') and ((method == 'POST') or (method == 'PUT')):
11246
11326
  batchOrders = self.safe_value(params, 'batchOrders')
11247
11327
  queryBatch = (self.json(batchOrders))
11248
11328
  params['batchOrders'] = queryBatch
@@ -8855,7 +8855,8 @@ class bitget(Exchange, ImplicitAPI):
8855
8855
  if method == 'POST':
8856
8856
  headers['Content-Type'] = 'application/json'
8857
8857
  sandboxMode = self.safe_bool(self.options, 'sandboxMode', False)
8858
- if sandboxMode:
8858
+ if sandboxMode and (path != 'v2/public/time'):
8859
+ # https://github.com/ccxt/ccxt/issues/25252#issuecomment-2662742336
8859
8860
  if headers is None:
8860
8861
  headers = {}
8861
8862
  headers['PAPTRADING'] = '1'
@@ -6524,10 +6524,13 @@ classic accounts only/ spot not supported* fetches information on an order made
6524
6524
  # }
6525
6525
  #
6526
6526
  timestamp = self.safe_integer(interest, 'timestamp')
6527
- value = self.safe_number_2(interest, 'open_interest', 'openInterest')
6527
+ openInterest = self.safe_number_2(interest, 'open_interest', 'openInterest')
6528
+ # the openInterest is in the base asset for linear and quote asset for inverse
6529
+ amount = openInterest if market['linear'] else None
6530
+ value = openInterest if market['inverse'] else None
6528
6531
  return self.safe_open_interest({
6529
6532
  'symbol': market['symbol'],
6530
- 'openInterestAmount': None,
6533
+ 'openInterestAmount': amount,
6531
6534
  'openInterestValue': value,
6532
6535
  'timestamp': timestamp,
6533
6536
  'datetime': self.iso8601(timestamp),
@@ -1882,7 +1882,7 @@ class hollaex(Exchange, ImplicitAPI):
1882
1882
  # "network":"https://api.hollaex.network"
1883
1883
  # }
1884
1884
  #
1885
- coins = self.safe_list(response, 'coins')
1885
+ coins = self.safe_dict(response, 'coins', {})
1886
1886
  return self.parse_deposit_withdraw_fees(coins, codes, 'symbol')
1887
1887
 
1888
1888
  def normalize_number_if_needed(self, number):
@@ -2884,7 +2884,7 @@ class oxfun(Exchange, ImplicitAPI):
2884
2884
  'AccessKey': self.apiKey,
2885
2885
  'Timestamp': datetime,
2886
2886
  'Signature': signature,
2887
- 'Nonce': nonce,
2887
+ 'Nonce': str(nonce),
2888
2888
  }
2889
2889
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2890
2890
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.59'
7
+ __version__ = '4.4.60'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -4,8 +4,8 @@
4
4
  # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
5
 
6
6
  import ccxt.async_support
7
- from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
8
- from ccxt.base.types import Any, Balances, Int, Market, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
7
+ from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
8
+ from ccxt.base.types import Any, Balances, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
9
9
  from ccxt.async_support.base.ws.client import Client
10
10
  from typing import List
11
11
 
@@ -25,7 +25,7 @@ class xt(ccxt.async_support.xt):
25
25
  'watchBalance': True,
26
26
  'watchOrders': True,
27
27
  'watchMyTrades': True,
28
- 'watchPositions': None, # TODO https://doc.xt.com/#futures_user_websocket_v2position
28
+ 'watchPositions': True,
29
29
  },
30
30
  'urls': {
31
31
  'api': {
@@ -45,6 +45,11 @@ class xt(ccxt.async_support.xt):
45
45
  'watchTickers': {
46
46
  'method': 'tickers', # agg_tickers(contract only)
47
47
  },
48
+ 'watchPositions': {
49
+ 'type': 'swap',
50
+ 'fetchPositionsSnapshot': True,
51
+ 'awaitPositionsSnapshot': True,
52
+ },
48
53
  },
49
54
  'streaming': {
50
55
  'keepAlive': 20000,
@@ -352,6 +357,106 @@ class xt(ccxt.async_support.xt):
352
357
  name = 'balance'
353
358
  return await self.subscribe(name, 'private', 'watchBalance', None, None, params)
354
359
 
360
+ async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
361
+ """
362
+
363
+ https://doc.xt.com/#futures_user_websocket_v2position
364
+
365
+ watch all open positions
366
+ :param str[]|None symbols: list of unified market symbols
367
+ :param number [since]: since timestamp
368
+ :param number [limit]: limit
369
+ :param dict params: extra parameters specific to the exchange API endpoint
370
+ :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
371
+ """
372
+ await self.load_markets()
373
+ url = self.urls['api']['ws']['contract'] + '/' + 'user'
374
+ client = self.client(url)
375
+ self.set_positions_cache(client)
376
+ fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
377
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
378
+ cache = self.positions
379
+ if fetchPositionsSnapshot and awaitPositionsSnapshot and self.is_empty(cache):
380
+ snapshot = await client.future('fetchPositionsSnapshot')
381
+ return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
382
+ name = 'position'
383
+ newPositions = await self.subscribe(name, 'private', 'watchPositions', None, None, params)
384
+ if self.newUpdates:
385
+ return newPositions
386
+ return self.filter_by_symbols_since_limit(cache, symbols, since, limit, True)
387
+
388
+ def set_positions_cache(self, client: Client):
389
+ if self.positions is None:
390
+ self.positions = ArrayCacheBySymbolBySide()
391
+ fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot')
392
+ if fetchPositionsSnapshot:
393
+ messageHash = 'fetchPositionsSnapshot'
394
+ if not (messageHash in client.futures):
395
+ client.future(messageHash)
396
+ self.spawn(self.load_positions_snapshot, client, messageHash)
397
+
398
+ async def load_positions_snapshot(self, client, messageHash):
399
+ positions = await self.fetch_positions(None)
400
+ self.positions = ArrayCacheBySymbolBySide()
401
+ cache = self.positions
402
+ for i in range(0, len(positions)):
403
+ position = positions[i]
404
+ contracts = self.safe_number(position, 'contracts', 0)
405
+ if contracts > 0:
406
+ cache.append(position)
407
+ # don't remove the future from the .futures cache
408
+ future = client.futures[messageHash]
409
+ future.resolve(cache)
410
+ client.resolve(cache, 'position::contract')
411
+
412
+ def handle_position(self, client, message):
413
+ #
414
+ # {
415
+ # topic: 'position',
416
+ # event: 'position',
417
+ # data: {
418
+ # accountId: 245296,
419
+ # accountType: 0,
420
+ # symbol: 'eth_usdt',
421
+ # contractType: 'PERPETUAL',
422
+ # positionType: 'CROSSED',
423
+ # positionSide: 'LONG',
424
+ # positionSize: '1',
425
+ # closeOrderSize: '0',
426
+ # availableCloseSize: '1',
427
+ # realizedProfit: '-0.0121',
428
+ # entryPrice: '2637.87',
429
+ # openOrderSize: '1',
430
+ # isolatedMargin: '2.63787',
431
+ # openOrderMarginFrozen: '2.78832014',
432
+ # underlyingType: 'U_BASED',
433
+ # leverage: 10,
434
+ # welfareAccount: False,
435
+ # profitFixedLatest: {},
436
+ # closeProfit: '0.0000',
437
+ # totalFee: '-0.0158',
438
+ # totalFundFee: '0.0037',
439
+ # markPrice: '2690.96'
440
+ # }
441
+ # }
442
+ #
443
+ if self.positions is None:
444
+ self.positions = ArrayCacheBySymbolBySide()
445
+ cache = self.positions
446
+ data = self.safe_dict(message, 'data', {})
447
+ position = self.parse_position(data)
448
+ cache.append(position)
449
+ messageHashes = self.find_message_hashes(client, 'position::contract')
450
+ for i in range(0, len(messageHashes)):
451
+ messageHash = messageHashes[i]
452
+ parts = messageHash.split('::')
453
+ symbolsString = parts[1]
454
+ symbols = symbolsString.split(',')
455
+ positions = self.filter_by_array([position], 'symbol', symbols, False)
456
+ if not self.is_empty(positions):
457
+ client.resolve(positions, messageHash)
458
+ client.resolve([position], 'position::contract')
459
+
355
460
  def handle_ticker(self, client: Client, message: dict):
356
461
  #
357
462
  # spot
@@ -1036,6 +1141,7 @@ class xt(ccxt.async_support.xt):
1036
1141
  'agg_tickers': self.handle_tickers,
1037
1142
  'balance': self.handle_balance,
1038
1143
  'order': self.handle_order,
1144
+ 'position': self.handle_position,
1039
1145
  }
1040
1146
  method = self.safe_value(methods, topic)
1041
1147
  if topic == 'trade':