ccxt 4.3.27__tar.gz → 4.3.28__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 (548) hide show
  1. {ccxt-4.3.27/ccxt.egg-info → ccxt-4.3.28}/PKG-INFO +4 -4
  2. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/__init__.py +1 -1
  3. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitget.py +1 -0
  4. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitmart.py +2 -1
  5. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/ascendex.py +1 -1
  6. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/__init__.py +1 -1
  7. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/ascendex.py +1 -1
  8. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/exchange.py +1 -1
  9. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bingx.py +40 -7
  10. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitget.py +1 -0
  11. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitmart.py +57 -2
  12. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinbase.py +1 -1
  13. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/krakenfutures.py +1 -1
  14. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/base/exchange.py +3 -2
  15. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bingx.py +40 -7
  16. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitget.py +1 -0
  17. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitmart.py +57 -2
  18. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinbase.py +1 -1
  19. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/krakenfutures.py +1 -1
  20. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/__init__.py +1 -1
  21. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/coinbase.py +5 -1
  22. {ccxt-4.3.27 → ccxt-4.3.28/ccxt.egg-info}/PKG-INFO +4 -4
  23. {ccxt-4.3.27 → ccxt-4.3.28}/package.json +1 -1
  24. {ccxt-4.3.27 → ccxt-4.3.28}/LICENSE.txt +0 -0
  25. {ccxt-4.3.27 → ccxt-4.3.28}/MANIFEST.in +0 -0
  26. {ccxt-4.3.27 → ccxt-4.3.28}/README.rst +0 -0
  27. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/__init__.py +0 -0
  28. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/ace.py +0 -0
  29. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/alpaca.py +0 -0
  30. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/ascendex.py +0 -0
  31. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bequant.py +0 -0
  32. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bigone.py +0 -0
  33. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/binance.py +0 -0
  34. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/binancecoinm.py +0 -0
  35. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/binanceus.py +0 -0
  36. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/binanceusdm.py +0 -0
  37. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bingx.py +0 -0
  38. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bit2c.py +0 -0
  39. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitbank.py +0 -0
  40. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitbay.py +0 -0
  41. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitbns.py +0 -0
  42. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitcoincom.py +0 -0
  43. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitfinex.py +0 -0
  44. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitfinex2.py +0 -0
  45. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitflyer.py +0 -0
  46. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bithumb.py +0 -0
  47. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitmex.py +0 -0
  48. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitopro.py +0 -0
  49. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitpanda.py +0 -0
  50. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitrue.py +0 -0
  51. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitso.py +0 -0
  52. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitstamp.py +0 -0
  53. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitteam.py +0 -0
  54. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bitvavo.py +0 -0
  55. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bl3p.py +0 -0
  56. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/blockchaincom.py +0 -0
  57. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/blofin.py +0 -0
  58. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/btcalpha.py +0 -0
  59. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/btcbox.py +0 -0
  60. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/btcmarkets.py +0 -0
  61. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/btcturk.py +0 -0
  62. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/bybit.py +0 -0
  63. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/cex.py +0 -0
  64. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinbase.py +0 -0
  65. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinbaseadvanced.py +0 -0
  66. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinbaseexchange.py +0 -0
  67. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinbaseinternational.py +0 -0
  68. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coincheck.py +0 -0
  69. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinex.py +0 -0
  70. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinlist.py +0 -0
  71. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinmate.py +0 -0
  72. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinmetro.py +0 -0
  73. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinone.py +0 -0
  74. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinsph.py +0 -0
  75. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/coinspot.py +0 -0
  76. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/cryptocom.py +0 -0
  77. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/currencycom.py +0 -0
  78. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/delta.py +0 -0
  79. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/deribit.py +0 -0
  80. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/digifinex.py +0 -0
  81. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/exmo.py +0 -0
  82. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/fmfwio.py +0 -0
  83. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/gate.py +0 -0
  84. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/gateio.py +0 -0
  85. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/gemini.py +0 -0
  86. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/hitbtc.py +0 -0
  87. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/hitbtc3.py +0 -0
  88. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/hollaex.py +0 -0
  89. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/htx.py +0 -0
  90. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/huobi.py +0 -0
  91. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/huobijp.py +0 -0
  92. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/hyperliquid.py +0 -0
  93. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/idex.py +0 -0
  94. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/independentreserve.py +0 -0
  95. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/indodax.py +0 -0
  96. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/kraken.py +0 -0
  97. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/krakenfutures.py +0 -0
  98. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/kucoin.py +0 -0
  99. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/kucoinfutures.py +0 -0
  100. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/kuna.py +0 -0
  101. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/latoken.py +0 -0
  102. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/lbank.py +0 -0
  103. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/luno.py +0 -0
  104. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/lykke.py +0 -0
  105. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/mercado.py +0 -0
  106. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/mexc.py +0 -0
  107. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/ndax.py +0 -0
  108. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/novadax.py +0 -0
  109. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/oceanex.py +0 -0
  110. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/okcoin.py +0 -0
  111. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/okx.py +0 -0
  112. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/onetrading.py +0 -0
  113. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/p2b.py +0 -0
  114. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/paymium.py +0 -0
  115. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/phemex.py +0 -0
  116. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/poloniex.py +0 -0
  117. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/poloniexfutures.py +0 -0
  118. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/probit.py +0 -0
  119. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/timex.py +0 -0
  120. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/tokocrypto.py +0 -0
  121. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/tradeogre.py +0 -0
  122. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/upbit.py +0 -0
  123. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/wavesexchange.py +0 -0
  124. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/wazirx.py +0 -0
  125. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/whitebit.py +0 -0
  126. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/woo.py +0 -0
  127. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/woofipro.py +0 -0
  128. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/yobit.py +0 -0
  129. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/zaif.py +0 -0
  130. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/abstract/zonda.py +0 -0
  131. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/ace.py +0 -0
  132. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/alpaca.py +0 -0
  133. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/ace.py +0 -0
  134. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/alpaca.py +0 -0
  135. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/__init__.py +0 -0
  136. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/throttler.py +0 -0
  137. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/__init__.py +0 -0
  138. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  139. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/cache.py +0 -0
  140. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/client.py +0 -0
  141. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/fast_client.py +0 -0
  142. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/functions.py +0 -0
  143. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/future.py +0 -0
  144. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/order_book.py +0 -0
  145. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  146. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bequant.py +0 -0
  147. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bigone.py +0 -0
  148. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/binance.py +0 -0
  149. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/binancecoinm.py +0 -0
  150. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/binanceus.py +0 -0
  151. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/binanceusdm.py +0 -0
  152. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bit2c.py +0 -0
  153. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitbank.py +0 -0
  154. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitbay.py +0 -0
  155. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitbns.py +0 -0
  156. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitcoincom.py +0 -0
  157. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitfinex.py +0 -0
  158. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitfinex2.py +0 -0
  159. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitflyer.py +0 -0
  160. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bithumb.py +0 -0
  161. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitmex.py +0 -0
  162. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitopro.py +0 -0
  163. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitpanda.py +0 -0
  164. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitrue.py +0 -0
  165. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitso.py +0 -0
  166. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitstamp.py +0 -0
  167. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitteam.py +0 -0
  168. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bitvavo.py +0 -0
  169. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bl3p.py +0 -0
  170. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/blockchaincom.py +0 -0
  171. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/blofin.py +0 -0
  172. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/btcalpha.py +0 -0
  173. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/btcbox.py +0 -0
  174. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/btcmarkets.py +0 -0
  175. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/btcturk.py +0 -0
  176. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/bybit.py +2 -2
  177. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/cex.py +0 -0
  178. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinbaseadvanced.py +0 -0
  179. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinbaseexchange.py +0 -0
  180. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinbaseinternational.py +0 -0
  181. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coincheck.py +0 -0
  182. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinex.py +0 -0
  183. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinlist.py +0 -0
  184. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinmate.py +0 -0
  185. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinmetro.py +0 -0
  186. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinone.py +0 -0
  187. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinsph.py +0 -0
  188. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/coinspot.py +0 -0
  189. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/cryptocom.py +0 -0
  190. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/currencycom.py +0 -0
  191. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/delta.py +0 -0
  192. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/deribit.py +0 -0
  193. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/digifinex.py +0 -0
  194. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/exmo.py +0 -0
  195. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/fmfwio.py +0 -0
  196. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/gate.py +0 -0
  197. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/gateio.py +0 -0
  198. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/gemini.py +0 -0
  199. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/hitbtc.py +0 -0
  200. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/hitbtc3.py +0 -0
  201. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/hollaex.py +0 -0
  202. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/htx.py +0 -0
  203. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/huobi.py +0 -0
  204. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/huobijp.py +0 -0
  205. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/hyperliquid.py +0 -0
  206. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/idex.py +0 -0
  207. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/independentreserve.py +0 -0
  208. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/indodax.py +0 -0
  209. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/kraken.py +0 -0
  210. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/kucoin.py +0 -0
  211. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/kucoinfutures.py +0 -0
  212. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/kuna.py +0 -0
  213. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/latoken.py +0 -0
  214. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/lbank.py +0 -0
  215. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/luno.py +0 -0
  216. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/lykke.py +0 -0
  217. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/mercado.py +0 -0
  218. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/mexc.py +0 -0
  219. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/ndax.py +0 -0
  220. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/novadax.py +0 -0
  221. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/oceanex.py +0 -0
  222. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/okcoin.py +0 -0
  223. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/okx.py +0 -0
  224. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/onetrading.py +0 -0
  225. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/p2b.py +0 -0
  226. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/paymium.py +0 -0
  227. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/phemex.py +0 -0
  228. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/poloniex.py +0 -0
  229. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/poloniexfutures.py +0 -0
  230. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/probit.py +0 -0
  231. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/timex.py +0 -0
  232. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/tokocrypto.py +0 -0
  233. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/tradeogre.py +0 -0
  234. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/upbit.py +0 -0
  235. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/wavesexchange.py +0 -0
  236. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/wazirx.py +0 -0
  237. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/whitebit.py +0 -0
  238. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/woo.py +0 -0
  239. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/woofipro.py +0 -0
  240. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/yobit.py +0 -0
  241. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/zaif.py +0 -0
  242. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/async_support/zonda.py +0 -0
  243. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/base/__init__.py +0 -0
  244. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/base/decimal_to_precision.py +0 -0
  245. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/base/errors.py +0 -0
  246. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/base/precise.py +0 -0
  247. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/base/types.py +0 -0
  248. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bequant.py +0 -0
  249. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bigone.py +0 -0
  250. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/binance.py +0 -0
  251. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/binancecoinm.py +0 -0
  252. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/binanceus.py +0 -0
  253. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/binanceusdm.py +0 -0
  254. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bit2c.py +0 -0
  255. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitbank.py +0 -0
  256. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitbay.py +0 -0
  257. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitbns.py +0 -0
  258. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitcoincom.py +0 -0
  259. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitfinex.py +0 -0
  260. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitfinex2.py +0 -0
  261. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitflyer.py +0 -0
  262. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bithumb.py +0 -0
  263. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitmex.py +0 -0
  264. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitopro.py +0 -0
  265. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitpanda.py +0 -0
  266. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitrue.py +0 -0
  267. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitso.py +0 -0
  268. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitstamp.py +0 -0
  269. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitteam.py +0 -0
  270. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bitvavo.py +0 -0
  271. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bl3p.py +0 -0
  272. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/blockchaincom.py +0 -0
  273. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/blofin.py +0 -0
  274. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/btcalpha.py +0 -0
  275. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/btcbox.py +0 -0
  276. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/btcmarkets.py +0 -0
  277. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/btcturk.py +0 -0
  278. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/bybit.py +2 -2
  279. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/cex.py +0 -0
  280. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinbaseadvanced.py +0 -0
  281. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinbaseexchange.py +0 -0
  282. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinbaseinternational.py +0 -0
  283. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coincheck.py +0 -0
  284. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinex.py +0 -0
  285. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinlist.py +0 -0
  286. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinmate.py +0 -0
  287. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinmetro.py +0 -0
  288. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinone.py +0 -0
  289. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinsph.py +0 -0
  290. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/coinspot.py +0 -0
  291. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/cryptocom.py +0 -0
  292. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/currencycom.py +0 -0
  293. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/delta.py +0 -0
  294. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/deribit.py +0 -0
  295. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/digifinex.py +0 -0
  296. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/exmo.py +0 -0
  297. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/fmfwio.py +0 -0
  298. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/gate.py +0 -0
  299. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/gateio.py +0 -0
  300. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/gemini.py +0 -0
  301. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/hitbtc.py +0 -0
  302. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/hitbtc3.py +0 -0
  303. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/hollaex.py +0 -0
  304. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/htx.py +0 -0
  305. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/huobi.py +0 -0
  306. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/huobijp.py +0 -0
  307. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/hyperliquid.py +0 -0
  308. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/idex.py +0 -0
  309. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/independentreserve.py +0 -0
  310. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/indodax.py +0 -0
  311. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/kraken.py +0 -0
  312. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/kucoin.py +0 -0
  313. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/kucoinfutures.py +0 -0
  314. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/kuna.py +0 -0
  315. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/latoken.py +0 -0
  316. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/lbank.py +0 -0
  317. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/luno.py +0 -0
  318. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/lykke.py +0 -0
  319. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/mercado.py +0 -0
  320. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/mexc.py +0 -0
  321. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/ndax.py +0 -0
  322. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/novadax.py +0 -0
  323. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/oceanex.py +0 -0
  324. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/okcoin.py +0 -0
  325. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/okx.py +0 -0
  326. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/onetrading.py +0 -0
  327. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/p2b.py +0 -0
  328. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/paymium.py +0 -0
  329. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/phemex.py +0 -0
  330. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/poloniex.py +0 -0
  331. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/poloniexfutures.py +0 -0
  332. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/alpaca.py +0 -0
  333. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/ascendex.py +0 -0
  334. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bequant.py +0 -0
  335. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/binance.py +0 -0
  336. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/binancecoinm.py +0 -0
  337. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/binanceus.py +0 -0
  338. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/binanceusdm.py +0 -0
  339. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bingx.py +0 -0
  340. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitcoincom.py +0 -0
  341. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitfinex.py +0 -0
  342. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitfinex2.py +0 -0
  343. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitget.py +0 -0
  344. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bithumb.py +0 -0
  345. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitmart.py +0 -0
  346. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitmex.py +0 -0
  347. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitopro.py +0 -0
  348. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitpanda.py +0 -0
  349. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitrue.py +0 -0
  350. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitstamp.py +0 -0
  351. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bitvavo.py +0 -0
  352. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/blockchaincom.py +0 -0
  353. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/bybit.py +0 -0
  354. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/cex.py +0 -0
  355. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/coinbaseexchange.py +0 -0
  356. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/coinbaseinternational.py +0 -0
  357. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/coincheck.py +0 -0
  358. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/coinex.py +0 -0
  359. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/coinone.py +0 -0
  360. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/cryptocom.py +0 -0
  361. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/currencycom.py +0 -0
  362. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/deribit.py +0 -0
  363. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/exmo.py +0 -0
  364. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/gate.py +0 -0
  365. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/gateio.py +0 -0
  366. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/gemini.py +0 -0
  367. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/hitbtc.py +0 -0
  368. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/hollaex.py +0 -0
  369. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/htx.py +0 -0
  370. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/huobi.py +0 -0
  371. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/huobijp.py +0 -0
  372. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/hyperliquid.py +0 -0
  373. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/idex.py +0 -0
  374. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/independentreserve.py +0 -0
  375. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/kraken.py +0 -0
  376. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/krakenfutures.py +0 -0
  377. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/kucoin.py +0 -0
  378. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/kucoinfutures.py +0 -0
  379. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/lbank.py +0 -0
  380. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/luno.py +0 -0
  381. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/mexc.py +0 -0
  382. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/ndax.py +0 -0
  383. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/okcoin.py +0 -0
  384. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/okx.py +0 -0
  385. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/onetrading.py +0 -0
  386. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/p2b.py +0 -0
  387. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/phemex.py +0 -0
  388. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/poloniex.py +0 -0
  389. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/poloniexfutures.py +0 -0
  390. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/probit.py +0 -0
  391. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/upbit.py +0 -0
  392. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/wazirx.py +0 -0
  393. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/whitebit.py +0 -0
  394. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/woo.py +0 -0
  395. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/pro/woofipro.py +0 -0
  396. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/probit.py +0 -0
  397. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/__init__.py +0 -0
  398. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  399. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  400. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  401. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  402. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  403. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  404. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  405. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  406. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  407. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  408. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/__init__.py +0 -0
  409. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/__init__.py +0 -0
  410. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/abi.py +0 -0
  411. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/base.py +0 -0
  412. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/codec.py +0 -0
  413. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/constants.py +0 -0
  414. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/decoding.py +0 -0
  415. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/encoding.py +0 -0
  416. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/exceptions.py +0 -0
  417. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/grammar.py +0 -0
  418. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/packed.py +0 -0
  419. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  420. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/registry.py +0 -0
  421. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +0 -0
  422. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +0 -0
  423. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  424. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +0 -0
  425. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/utils/padding.py +0 -0
  426. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/abi/utils/string.py +0 -0
  427. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/account/__init__.py +0 -0
  428. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +0 -0
  429. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +0 -0
  430. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +0 -0
  431. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/account/messages.py +0 -0
  432. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  433. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +0 -0
  434. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +0 -0
  435. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/hexbytes/main.py +0 -0
  436. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  437. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/__init__.py +0 -0
  438. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/abi.py +0 -0
  439. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/bls.py +0 -0
  440. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/discovery.py +0 -0
  441. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/encoding.py +0 -0
  442. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/enums.py +0 -0
  443. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/ethpm.py +0 -0
  444. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/evm.py +0 -0
  445. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/networks.py +0 -0
  446. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  447. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/__init__.py +0 -0
  448. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/abi.py +0 -0
  449. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/address.py +0 -0
  450. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/applicators.py +0 -0
  451. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/conversions.py +0 -0
  452. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/currency.py +0 -0
  453. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +0 -0
  454. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/debug.py +0 -0
  455. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/decorators.py +0 -0
  456. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/encoding.py +0 -0
  457. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/exceptions.py +0 -0
  458. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/functional.py +0 -0
  459. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +0 -0
  460. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/humanize.py +0 -0
  461. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/logging.py +0 -0
  462. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/module_loading.py +0 -0
  463. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/numeric.py +0 -0
  464. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  465. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/toolz.py +0 -0
  466. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/types.py +0 -0
  467. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +0 -0
  468. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/typing/misc.py +0 -0
  469. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/ethereum/utils/units.py +0 -0
  470. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  471. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  472. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/msgpack/__init__.py +0 -0
  473. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/msgpack/exceptions.py +0 -0
  474. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/msgpack/ext.py +0 -0
  475. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/msgpack/fallback.py +0 -0
  476. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/parsimonious/__init__.py +0 -0
  477. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/parsimonious/exceptions.py +0 -0
  478. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/parsimonious/expressions.py +0 -0
  479. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/parsimonious/grammar.py +0 -0
  480. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/parsimonious/nodes.py +0 -0
  481. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/parsimonious/utils.py +0 -0
  482. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/__init__.py +0 -0
  483. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/_signatures.py +0 -0
  484. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/_version.py +0 -0
  485. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/compatibility.py +0 -0
  486. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/curried/__init__.py +0 -0
  487. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/curried/exceptions.py +0 -0
  488. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/curried/operator.py +0 -0
  489. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/dicttoolz.py +0 -0
  490. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/functoolz.py +0 -0
  491. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/itertoolz.py +0 -0
  492. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/recipes.py +0 -0
  493. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/static_dependencies/toolz/utils.py +0 -0
  494. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/__init__.py +0 -0
  495. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/__init__.py +0 -0
  496. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_account.py +0 -0
  497. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_balance.py +0 -0
  498. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_borrow_interest.py +0 -0
  499. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_borrow_rate.py +0 -0
  500. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_calculate_fee.py +0 -0
  501. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_crypto.py +0 -0
  502. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_currency.py +0 -0
  503. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_datetime.py +0 -0
  504. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  505. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_deep_extend.py +0 -0
  506. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  507. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  508. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_funding_rate_history.py +0 -0
  509. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_last_price.py +0 -0
  510. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_ledger_entry.py +0 -0
  511. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_ledger_item.py +0 -0
  512. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_leverage_tier.py +0 -0
  513. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_margin_mode.py +0 -0
  514. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_margin_modification.py +0 -0
  515. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_market.py +0 -0
  516. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_number.py +0 -0
  517. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_ohlcv.py +0 -0
  518. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_open_interest.py +0 -0
  519. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_order.py +0 -0
  520. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_order_book.py +0 -0
  521. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_position.py +0 -0
  522. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_shared_methods.py +0 -0
  523. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_status.py +0 -0
  524. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_throttle.py +0 -0
  525. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_ticker.py +0 -0
  526. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_trade.py +0 -0
  527. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_trading_fee.py +0 -0
  528. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/base/test_transaction.py +0 -0
  529. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/test_async.py +0 -0
  530. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/test/test_sync.py +0 -0
  531. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/timex.py +0 -0
  532. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/tokocrypto.py +0 -0
  533. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/tradeogre.py +0 -0
  534. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/upbit.py +0 -0
  535. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/wavesexchange.py +0 -0
  536. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/wazirx.py +0 -0
  537. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/whitebit.py +0 -0
  538. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/woo.py +0 -0
  539. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/woofipro.py +0 -0
  540. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/yobit.py +0 -0
  541. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/zaif.py +0 -0
  542. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt/zonda.py +0 -0
  543. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt.egg-info/SOURCES.txt +0 -0
  544. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt.egg-info/dependency_links.txt +0 -0
  545. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt.egg-info/requires.txt +0 -0
  546. {ccxt-4.3.27 → ccxt-4.3.28}/ccxt.egg-info/top_level.txt +0 -0
  547. {ccxt-4.3.27 → ccxt-4.3.28}/setup.cfg +0 -0
  548. {ccxt-4.3.27 → ccxt-4.3.28}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.27
3
+ Version: 4.3.28
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
@@ -228,13 +228,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
228
228
 
229
229
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
230
230
 
231
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.27/dist/ccxt.browser.js
232
- * unpkg: https://unpkg.com/ccxt@4.3.27/dist/ccxt.browser.js
231
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.28/dist/ccxt.browser.js
232
+ * unpkg: https://unpkg.com/ccxt@4.3.28/dist/ccxt.browser.js
233
233
 
234
234
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
235
235
 
236
236
  ```HTML
237
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.27/dist/ccxt.browser.js"></script>
237
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.28/dist/ccxt.browser.js"></script>
238
238
  ```
239
239
 
240
240
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.27'
25
+ __version__ = '4.3.28'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -498,6 +498,7 @@ class ImplicitAPI:
498
498
  private_earn_get_v2_earn_loan_borrow_history = privateEarnGetV2EarnLoanBorrowHistory = Entry('v2/earn/loan/borrow-history', ['private', 'earn'], 'GET', {'cost': 2})
499
499
  private_earn_get_v2_earn_loan_debts = privateEarnGetV2EarnLoanDebts = Entry('v2/earn/loan/debts', ['private', 'earn'], 'GET', {'cost': 2})
500
500
  private_earn_get_v2_earn_loan_reduces = privateEarnGetV2EarnLoanReduces = Entry('v2/earn/loan/reduces', ['private', 'earn'], 'GET', {'cost': 2})
501
+ private_earn_get_v2_earn_account_assets = privateEarnGetV2EarnAccountAssets = Entry('v2/earn/account/assets', ['private', 'earn'], 'GET', {'cost': 2})
501
502
  private_earn_post_v2_earn_savings_subscribe = privateEarnPostV2EarnSavingsSubscribe = Entry('v2/earn/savings/subscribe', ['private', 'earn'], 'POST', {'cost': 2})
502
503
  private_earn_post_v2_earn_savings_redeem = privateEarnPostV2EarnSavingsRedeem = Entry('v2/earn/savings/redeem', ['private', 'earn'], 'POST', {'cost': 2})
503
504
  private_earn_post_v2_earn_sharkfin_subscribe = privateEarnPostV2EarnSharkfinSubscribe = Entry('v2/earn/sharkfin/subscribe', ['private', 'earn'], 'POST', {'cost': 2})
@@ -44,7 +44,7 @@ class ImplicitAPI:
44
44
  private_get_spot_v1_order_detail = privateGetSpotV1OrderDetail = Entry('spot/v1/order_detail', 'private', 'GET', {'cost': 1})
45
45
  private_get_spot_v2_orders = privateGetSpotV2Orders = Entry('spot/v2/orders', 'private', 'GET', {'cost': 5})
46
46
  private_get_spot_v1_trades = privateGetSpotV1Trades = Entry('spot/v1/trades', 'private', 'GET', {'cost': 5})
47
- private_get_spot_v2_trades = privateGetSpotV2Trades = Entry('spot/v2/trades', 'private', 'GET', {'cost': 5})
47
+ private_get_spot_v2_trades = privateGetSpotV2Trades = Entry('spot/v2/trades', 'private', 'GET', {'cost': 4})
48
48
  private_get_spot_v3_orders = privateGetSpotV3Orders = Entry('spot/v3/orders', 'private', 'GET', {'cost': 5})
49
49
  private_get_spot_v2_order_detail = privateGetSpotV2OrderDetail = Entry('spot/v2/order_detail', 'private', 'GET', {'cost': 1})
50
50
  private_get_spot_v1_margin_isolated_borrow_record = privateGetSpotV1MarginIsolatedBorrowRecord = Entry('spot/v1/margin/isolated/borrow_record', 'private', 'GET', {'cost': 1})
@@ -80,6 +80,7 @@ class ImplicitAPI:
80
80
  private_post_spot_v4_query_history_orders = privatePostSpotV4QueryHistoryOrders = Entry('spot/v4/query/history-orders', 'private', 'POST', {'cost': 5})
81
81
  private_post_spot_v4_query_trades = privatePostSpotV4QueryTrades = Entry('spot/v4/query/trades', 'private', 'POST', {'cost': 5})
82
82
  private_post_spot_v4_query_order_trades = privatePostSpotV4QueryOrderTrades = Entry('spot/v4/query/order-trades', 'private', 'POST', {'cost': 5})
83
+ private_post_spot_v4_cancel_orders = privatePostSpotV4CancelOrders = Entry('spot/v4/cancel_orders', 'private', 'POST', {'cost': 3})
83
84
  private_post_spot_v3_cancel_order = privatePostSpotV3CancelOrder = Entry('spot/v3/cancel_order', 'private', 'POST', {'cost': 1})
84
85
  private_post_spot_v2_batch_orders = privatePostSpotV2BatchOrders = Entry('spot/v2/batch_orders', 'private', 'POST', {'cost': 1})
85
86
  private_post_spot_v2_submit_order = privatePostSpotV2SubmitOrder = Entry('spot/v2/submit_order', 'private', 'POST', {'cost': 1})
@@ -1362,7 +1362,7 @@ class ascendex(Exchange, ImplicitAPI):
1362
1362
  'cost': feeCost,
1363
1363
  'currency': feeCurrencyCode,
1364
1364
  }
1365
- stopPrice = self.safe_number(order, 'stopPrice')
1365
+ stopPrice = self.omit_zero(self.safe_string(order, 'stopPrice'))
1366
1366
  reduceOnly = None
1367
1367
  execInst = self.safe_string(order, 'execInst')
1368
1368
  if execInst == 'reduceOnly':
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.27'
7
+ __version__ = '4.3.28'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1362,7 +1362,7 @@ class ascendex(Exchange, ImplicitAPI):
1362
1362
  'cost': feeCost,
1363
1363
  'currency': feeCurrencyCode,
1364
1364
  }
1365
- stopPrice = self.safe_number(order, 'stopPrice')
1365
+ stopPrice = self.omit_zero(self.safe_string(order, 'stopPrice'))
1366
1366
  reduceOnly = None
1367
1367
  execInst = self.safe_string(order, 'execInst')
1368
1368
  if execInst == 'reduceOnly':
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.27'
5
+ __version__ = '4.3.28'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -2079,6 +2079,10 @@ class bingx(Exchange, ImplicitAPI):
2079
2079
  types = {
2080
2080
  'trigger_market': 'market',
2081
2081
  'trigger_limit': 'limit',
2082
+ 'stop_limit': 'limit',
2083
+ 'stop_market': 'market',
2084
+ 'take_profit_market': 'market',
2085
+ 'stop': 'limit',
2082
2086
  }
2083
2087
  return self.safe_string(types, type, type)
2084
2088
 
@@ -2282,6 +2286,25 @@ class bingx(Exchange, ImplicitAPI):
2282
2286
  # side: 'SELL'
2283
2287
  # }
2284
2288
  # }
2289
+ # stop loss order
2290
+ # {
2291
+ # "symbol": "ETH-USDT",
2292
+ # "orderId": "1792461744476422144",
2293
+ # "price": "2775.65",
2294
+ # "StopPrice": "2778.42",
2295
+ # "origQty": "0.032359",
2296
+ # "executedQty": "0",
2297
+ # "cummulativeQuoteQty": "0",
2298
+ # "status": "NEW",
2299
+ # "type": "TAKE_STOP_LIMIT",
2300
+ # "side": "SELL",
2301
+ # "time": "1716191156868",
2302
+ # "updateTime": "1716191156868",
2303
+ # "origQuoteOrderQty": "0",
2304
+ # "fee": "0",
2305
+ # "feeAsset": "USDT",
2306
+ # "clientOrderID": ""
2307
+ # }
2285
2308
  #
2286
2309
  info = order
2287
2310
  newOrder = self.safe_dict_2(order, 'newOrderResponse', 'orderOpenResponse')
@@ -2309,21 +2332,31 @@ class bingx(Exchange, ImplicitAPI):
2309
2332
  stopLoss = self.safe_value(order, 'stopLoss')
2310
2333
  stopLossPrice = None
2311
2334
  if (stopLoss is not None) and (stopLoss != ''):
2312
- stopLossPrice = self.safe_number(stopLoss, 'stopLoss')
2335
+ stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopLoss'))
2313
2336
  if (stopLoss is not None) and ((not isinstance(stopLoss, numbers.Real))) and (stopLoss != ''):
2314
2337
  # stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
2315
2338
  if isinstance(stopLoss, str):
2316
2339
  stopLoss = self.parse_json(stopLoss)
2317
- stopLossPrice = self.safe_number(stopLoss, 'stopPrice')
2340
+ stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopPrice'))
2318
2341
  takeProfit = self.safe_value(order, 'takeProfit')
2319
2342
  takeProfitPrice = None
2320
2343
  if takeProfit is not None and (takeProfit != ''):
2321
- takeProfitPrice = self.safe_number(takeProfit, 'takeProfit')
2344
+ takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'takeProfit'))
2322
2345
  if (takeProfit is not None) and ((not isinstance(takeProfit, numbers.Real))) and (takeProfit != ''):
2323
2346
  # takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
2324
2347
  if isinstance(takeProfit, str):
2325
2348
  takeProfit = self.parse_json(takeProfit)
2326
- takeProfitPrice = self.safe_number(takeProfit, 'stopPrice')
2349
+ takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'stopPrice'))
2350
+ rawType = self.safe_string_lower_2(order, 'type', 'o')
2351
+ stopPrice = self.omit_zero(self.safe_string_2(order, 'StopPrice', 'stopPrice'))
2352
+ triggerPrice = stopPrice
2353
+ if stopPrice is not None:
2354
+ if (rawType.find('stop') > -1) and (stopLossPrice is None):
2355
+ stopLossPrice = stopPrice
2356
+ triggerPrice = None
2357
+ if (rawType.find('take') > -1) and (takeProfitPrice is None):
2358
+ takeProfitPrice = stopPrice
2359
+ triggerPrice = None
2327
2360
  return self.safe_order({
2328
2361
  'info': info,
2329
2362
  'id': self.safe_string_2(order, 'orderId', 'i'),
@@ -2333,13 +2366,13 @@ class bingx(Exchange, ImplicitAPI):
2333
2366
  'datetime': self.iso8601(timestamp),
2334
2367
  'lastTradeTimestamp': lastTradeTimestamp,
2335
2368
  'lastUpdateTimestamp': self.safe_integer(order, 'updateTime'),
2336
- 'type': self.parse_order_type(self.safe_string_lower_2(order, 'type', 'o')),
2369
+ 'type': self.parse_order_type(rawType),
2337
2370
  'timeInForce': self.safe_string(order, 'timeInForce'),
2338
2371
  'postOnly': None,
2339
2372
  'side': self.parse_order_side(side),
2340
2373
  'price': self.safe_string_2(order, 'price', 'p'),
2341
- 'stopPrice': self.safe_number(order, 'stopPrice'),
2342
- 'triggerPrice': self.safe_number(order, 'stopPrice'),
2374
+ 'stopPrice': triggerPrice,
2375
+ 'triggerPrice': triggerPrice,
2343
2376
  'stopLossPrice': stopLossPrice,
2344
2377
  'takeProfitPrice': takeProfitPrice,
2345
2378
  'average': self.safe_string_2(order, 'avgPrice', 'ap'),
@@ -779,6 +779,7 @@ class bitget(Exchange, ImplicitAPI):
779
779
  'v2/earn/loan/borrow-history': 2,
780
780
  'v2/earn/loan/debts': 2,
781
781
  'v2/earn/loan/reduces': 2,
782
+ 'v2/earn/account/assets': 2,
782
783
  },
783
784
  'post': {
784
785
  'v2/earn/savings/subscribe': 2,
@@ -54,7 +54,7 @@ class bitmart(Exchange, ImplicitAPI):
54
54
  'borrowIsolatedMargin': True,
55
55
  'cancelAllOrders': True,
56
56
  'cancelOrder': True,
57
- 'cancelOrders': False,
57
+ 'cancelOrders': True,
58
58
  'createMarketBuyOrderWithCost': True,
59
59
  'createMarketOrderWithCost': False,
60
60
  'createMarketSellOrderWithCost': False,
@@ -198,7 +198,7 @@ class bitmart(Exchange, ImplicitAPI):
198
198
  'spot/v2/orders': 5,
199
199
  'spot/v1/trades': 5,
200
200
  # newer order endpoint
201
- 'spot/v2/trades': 5,
201
+ 'spot/v2/trades': 4,
202
202
  'spot/v3/orders': 5,
203
203
  'spot/v2/order_detail': 1,
204
204
  # margin
@@ -242,6 +242,7 @@ class bitmart(Exchange, ImplicitAPI):
242
242
  'spot/v4/query/history-orders': 5, # 12 times/2 sec = 6/s => 30/6 = 5
243
243
  'spot/v4/query/trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
244
244
  'spot/v4/query/order-trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
245
+ 'spot/v4/cancel_orders': 3,
245
246
  # newer endpoint
246
247
  'spot/v3/cancel_order': 1,
247
248
  'spot/v2/batch_orders': 1,
@@ -2523,6 +2524,60 @@ class bitmart(Exchange, ImplicitAPI):
2523
2524
  order = self.parse_order(id, market)
2524
2525
  return self.extend(order, {'id': id})
2525
2526
 
2527
+ async def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
2528
+ """
2529
+ cancel multiple orders
2530
+ :see: https://developer-pro.bitmart.com/en/spot/#cancel-batch-order-v4-signed
2531
+ :param str[] ids: order ids
2532
+ :param str symbol: unified symbol of the market the order was made in
2533
+ :param dict [params]: extra parameters specific to the exchange API endpoint
2534
+ :param str[] [params.clientOrderIds]: client order ids
2535
+ :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
2536
+ """
2537
+ if symbol is None:
2538
+ raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
2539
+ await self.load_markets()
2540
+ market = self.market(symbol)
2541
+ if not market['spot']:
2542
+ raise NotSupported(self.id + ' cancelOrders() does not support ' + market['type'] + ' orders, only spot orders are accepted')
2543
+ clientOrderIds = self.safe_list(params, 'clientOrderIds')
2544
+ params = self.omit(params, ['clientOrderIds'])
2545
+ request = {
2546
+ 'symbol': market['id'],
2547
+ }
2548
+ if clientOrderIds is not None:
2549
+ request['clientOrderIds'] = clientOrderIds
2550
+ else:
2551
+ request['orderIds'] = ids
2552
+ response = await self.privatePostSpotV4CancelOrders(self.extend(request, params))
2553
+ #
2554
+ # {
2555
+ # "message": "OK",
2556
+ # "code": 1000,
2557
+ # "trace": "c4edbce860164203954f7c3c81d60fc6.309.17022669632770001",
2558
+ # "data": {
2559
+ # "successIds": [
2560
+ # "213055379155243012"
2561
+ # ],
2562
+ # "failIds": [],
2563
+ # "totalCount": 1,
2564
+ # "successCount": 1,
2565
+ # "failedCount": 0
2566
+ # }
2567
+ # }
2568
+ #
2569
+ data = self.safe_dict(response, 'data', {})
2570
+ allOrders = []
2571
+ successIds = self.safe_list(data, 'successIds', [])
2572
+ for i in range(0, len(successIds)):
2573
+ id = successIds[i]
2574
+ allOrders.append(self.safe_order({'id': id, 'status': 'canceled'}, market))
2575
+ failIds = self.safe_list(data, 'failIds', [])
2576
+ for i in range(0, len(failIds)):
2577
+ id = failIds[i]
2578
+ allOrders.append(self.safe_order({'id': id, 'status': 'failed'}, market))
2579
+ return allOrders
2580
+
2526
2581
  async def cancel_all_orders(self, symbol: Str = None, params={}):
2527
2582
  """
2528
2583
  cancel all open orders in a market
@@ -2845,7 +2845,7 @@ class coinbase(Exchange, ImplicitAPI):
2845
2845
  marketId = self.safe_string(order, 'product_id')
2846
2846
  symbol = self.safe_symbol(marketId, market, '-')
2847
2847
  if symbol is not None:
2848
- market = self.market(symbol)
2848
+ market = self.safe_market(symbol, market)
2849
2849
  orderConfiguration = self.safe_dict(order, 'order_configuration', {})
2850
2850
  limitGTC = self.safe_dict(orderConfiguration, 'limit_limit_gtc')
2851
2851
  limitGTD = self.safe_dict(orderConfiguration, 'limit_limit_gtd')
@@ -2099,7 +2099,7 @@ class krakenfutures(Exchange, ImplicitAPI):
2099
2099
 
2100
2100
  async def fetch_positions(self, symbols: Strings = None, params={}):
2101
2101
  """
2102
- :see: https://docs.futures.kraken.com/#websocket-api-private-feeds-open-positions
2102
+ :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-open-positions
2103
2103
  Fetches current contract trading positions
2104
2104
  :param str[] symbols: List of unified symbols
2105
2105
  :param dict [params]: Not used by krakenfutures
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.27'
7
+ __version__ = '4.3.28'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2655,6 +2655,7 @@ class Exchange(object):
2655
2655
  shouldParseFees = parseFee or parseFees
2656
2656
  fees = self.safe_list(order, 'fees', [])
2657
2657
  trades = []
2658
+ isTriggerOrSLTpOrder = ((self.safe_string(order, 'triggerPrice') is not None or (self.safe_string(order, 'stopLossPrice') is not None)) or (self.safe_string(order, 'takeProfitPrice') is not None))
2658
2659
  if parseFilled or parseCost or shouldParseFees:
2659
2660
  rawTrades = self.safe_value(order, 'trades', trades)
2660
2661
  oldNumber = self.number
@@ -2805,7 +2806,7 @@ class Exchange(object):
2805
2806
  postOnly = self.safe_value(order, 'postOnly')
2806
2807
  # timeInForceHandling
2807
2808
  if timeInForce is None:
2808
- if self.safe_string(order, 'type') == 'market':
2809
+ if not isTriggerOrSLTpOrder and (self.safe_string(order, 'type') == 'market'):
2809
2810
  timeInForce = 'IOC'
2810
2811
  # allow postOnly override
2811
2812
  if postOnly:
@@ -2078,6 +2078,10 @@ class bingx(Exchange, ImplicitAPI):
2078
2078
  types = {
2079
2079
  'trigger_market': 'market',
2080
2080
  'trigger_limit': 'limit',
2081
+ 'stop_limit': 'limit',
2082
+ 'stop_market': 'market',
2083
+ 'take_profit_market': 'market',
2084
+ 'stop': 'limit',
2081
2085
  }
2082
2086
  return self.safe_string(types, type, type)
2083
2087
 
@@ -2281,6 +2285,25 @@ class bingx(Exchange, ImplicitAPI):
2281
2285
  # side: 'SELL'
2282
2286
  # }
2283
2287
  # }
2288
+ # stop loss order
2289
+ # {
2290
+ # "symbol": "ETH-USDT",
2291
+ # "orderId": "1792461744476422144",
2292
+ # "price": "2775.65",
2293
+ # "StopPrice": "2778.42",
2294
+ # "origQty": "0.032359",
2295
+ # "executedQty": "0",
2296
+ # "cummulativeQuoteQty": "0",
2297
+ # "status": "NEW",
2298
+ # "type": "TAKE_STOP_LIMIT",
2299
+ # "side": "SELL",
2300
+ # "time": "1716191156868",
2301
+ # "updateTime": "1716191156868",
2302
+ # "origQuoteOrderQty": "0",
2303
+ # "fee": "0",
2304
+ # "feeAsset": "USDT",
2305
+ # "clientOrderID": ""
2306
+ # }
2284
2307
  #
2285
2308
  info = order
2286
2309
  newOrder = self.safe_dict_2(order, 'newOrderResponse', 'orderOpenResponse')
@@ -2308,21 +2331,31 @@ class bingx(Exchange, ImplicitAPI):
2308
2331
  stopLoss = self.safe_value(order, 'stopLoss')
2309
2332
  stopLossPrice = None
2310
2333
  if (stopLoss is not None) and (stopLoss != ''):
2311
- stopLossPrice = self.safe_number(stopLoss, 'stopLoss')
2334
+ stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopLoss'))
2312
2335
  if (stopLoss is not None) and ((not isinstance(stopLoss, numbers.Real))) and (stopLoss != ''):
2313
2336
  # stopLoss: '{"stopPrice":50,"workingType":"MARK_PRICE","type":"STOP_MARKET","quantity":1}',
2314
2337
  if isinstance(stopLoss, str):
2315
2338
  stopLoss = self.parse_json(stopLoss)
2316
- stopLossPrice = self.safe_number(stopLoss, 'stopPrice')
2339
+ stopLossPrice = self.omit_zero(self.safe_string(stopLoss, 'stopPrice'))
2317
2340
  takeProfit = self.safe_value(order, 'takeProfit')
2318
2341
  takeProfitPrice = None
2319
2342
  if takeProfit is not None and (takeProfit != ''):
2320
- takeProfitPrice = self.safe_number(takeProfit, 'takeProfit')
2343
+ takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'takeProfit'))
2321
2344
  if (takeProfit is not None) and ((not isinstance(takeProfit, numbers.Real))) and (takeProfit != ''):
2322
2345
  # takeProfit: '{"stopPrice":150,"workingType":"MARK_PRICE","type":"TAKE_PROFIT_MARKET","quantity":1}',
2323
2346
  if isinstance(takeProfit, str):
2324
2347
  takeProfit = self.parse_json(takeProfit)
2325
- takeProfitPrice = self.safe_number(takeProfit, 'stopPrice')
2348
+ takeProfitPrice = self.omit_zero(self.safe_string(takeProfit, 'stopPrice'))
2349
+ rawType = self.safe_string_lower_2(order, 'type', 'o')
2350
+ stopPrice = self.omit_zero(self.safe_string_2(order, 'StopPrice', 'stopPrice'))
2351
+ triggerPrice = stopPrice
2352
+ if stopPrice is not None:
2353
+ if (rawType.find('stop') > -1) and (stopLossPrice is None):
2354
+ stopLossPrice = stopPrice
2355
+ triggerPrice = None
2356
+ if (rawType.find('take') > -1) and (takeProfitPrice is None):
2357
+ takeProfitPrice = stopPrice
2358
+ triggerPrice = None
2326
2359
  return self.safe_order({
2327
2360
  'info': info,
2328
2361
  'id': self.safe_string_2(order, 'orderId', 'i'),
@@ -2332,13 +2365,13 @@ class bingx(Exchange, ImplicitAPI):
2332
2365
  'datetime': self.iso8601(timestamp),
2333
2366
  'lastTradeTimestamp': lastTradeTimestamp,
2334
2367
  'lastUpdateTimestamp': self.safe_integer(order, 'updateTime'),
2335
- 'type': self.parse_order_type(self.safe_string_lower_2(order, 'type', 'o')),
2368
+ 'type': self.parse_order_type(rawType),
2336
2369
  'timeInForce': self.safe_string(order, 'timeInForce'),
2337
2370
  'postOnly': None,
2338
2371
  'side': self.parse_order_side(side),
2339
2372
  'price': self.safe_string_2(order, 'price', 'p'),
2340
- 'stopPrice': self.safe_number(order, 'stopPrice'),
2341
- 'triggerPrice': self.safe_number(order, 'stopPrice'),
2373
+ 'stopPrice': triggerPrice,
2374
+ 'triggerPrice': triggerPrice,
2342
2375
  'stopLossPrice': stopLossPrice,
2343
2376
  'takeProfitPrice': takeProfitPrice,
2344
2377
  'average': self.safe_string_2(order, 'avgPrice', 'ap'),
@@ -778,6 +778,7 @@ class bitget(Exchange, ImplicitAPI):
778
778
  'v2/earn/loan/borrow-history': 2,
779
779
  'v2/earn/loan/debts': 2,
780
780
  'v2/earn/loan/reduces': 2,
781
+ 'v2/earn/account/assets': 2,
781
782
  },
782
783
  'post': {
783
784
  'v2/earn/savings/subscribe': 2,
@@ -54,7 +54,7 @@ class bitmart(Exchange, ImplicitAPI):
54
54
  'borrowIsolatedMargin': True,
55
55
  'cancelAllOrders': True,
56
56
  'cancelOrder': True,
57
- 'cancelOrders': False,
57
+ 'cancelOrders': True,
58
58
  'createMarketBuyOrderWithCost': True,
59
59
  'createMarketOrderWithCost': False,
60
60
  'createMarketSellOrderWithCost': False,
@@ -198,7 +198,7 @@ class bitmart(Exchange, ImplicitAPI):
198
198
  'spot/v2/orders': 5,
199
199
  'spot/v1/trades': 5,
200
200
  # newer order endpoint
201
- 'spot/v2/trades': 5,
201
+ 'spot/v2/trades': 4,
202
202
  'spot/v3/orders': 5,
203
203
  'spot/v2/order_detail': 1,
204
204
  # margin
@@ -242,6 +242,7 @@ class bitmart(Exchange, ImplicitAPI):
242
242
  'spot/v4/query/history-orders': 5, # 12 times/2 sec = 6/s => 30/6 = 5
243
243
  'spot/v4/query/trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
244
244
  'spot/v4/query/order-trades': 5, # 12 times/2 sec = 6/s => 30/6 = 5
245
+ 'spot/v4/cancel_orders': 3,
245
246
  # newer endpoint
246
247
  'spot/v3/cancel_order': 1,
247
248
  'spot/v2/batch_orders': 1,
@@ -2523,6 +2524,60 @@ class bitmart(Exchange, ImplicitAPI):
2523
2524
  order = self.parse_order(id, market)
2524
2525
  return self.extend(order, {'id': id})
2525
2526
 
2527
+ def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
2528
+ """
2529
+ cancel multiple orders
2530
+ :see: https://developer-pro.bitmart.com/en/spot/#cancel-batch-order-v4-signed
2531
+ :param str[] ids: order ids
2532
+ :param str symbol: unified symbol of the market the order was made in
2533
+ :param dict [params]: extra parameters specific to the exchange API endpoint
2534
+ :param str[] [params.clientOrderIds]: client order ids
2535
+ :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
2536
+ """
2537
+ if symbol is None:
2538
+ raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
2539
+ self.load_markets()
2540
+ market = self.market(symbol)
2541
+ if not market['spot']:
2542
+ raise NotSupported(self.id + ' cancelOrders() does not support ' + market['type'] + ' orders, only spot orders are accepted')
2543
+ clientOrderIds = self.safe_list(params, 'clientOrderIds')
2544
+ params = self.omit(params, ['clientOrderIds'])
2545
+ request = {
2546
+ 'symbol': market['id'],
2547
+ }
2548
+ if clientOrderIds is not None:
2549
+ request['clientOrderIds'] = clientOrderIds
2550
+ else:
2551
+ request['orderIds'] = ids
2552
+ response = self.privatePostSpotV4CancelOrders(self.extend(request, params))
2553
+ #
2554
+ # {
2555
+ # "message": "OK",
2556
+ # "code": 1000,
2557
+ # "trace": "c4edbce860164203954f7c3c81d60fc6.309.17022669632770001",
2558
+ # "data": {
2559
+ # "successIds": [
2560
+ # "213055379155243012"
2561
+ # ],
2562
+ # "failIds": [],
2563
+ # "totalCount": 1,
2564
+ # "successCount": 1,
2565
+ # "failedCount": 0
2566
+ # }
2567
+ # }
2568
+ #
2569
+ data = self.safe_dict(response, 'data', {})
2570
+ allOrders = []
2571
+ successIds = self.safe_list(data, 'successIds', [])
2572
+ for i in range(0, len(successIds)):
2573
+ id = successIds[i]
2574
+ allOrders.append(self.safe_order({'id': id, 'status': 'canceled'}, market))
2575
+ failIds = self.safe_list(data, 'failIds', [])
2576
+ for i in range(0, len(failIds)):
2577
+ id = failIds[i]
2578
+ allOrders.append(self.safe_order({'id': id, 'status': 'failed'}, market))
2579
+ return allOrders
2580
+
2526
2581
  def cancel_all_orders(self, symbol: Str = None, params={}):
2527
2582
  """
2528
2583
  cancel all open orders in a market
@@ -2844,7 +2844,7 @@ class coinbase(Exchange, ImplicitAPI):
2844
2844
  marketId = self.safe_string(order, 'product_id')
2845
2845
  symbol = self.safe_symbol(marketId, market, '-')
2846
2846
  if symbol is not None:
2847
- market = self.market(symbol)
2847
+ market = self.safe_market(symbol, market)
2848
2848
  orderConfiguration = self.safe_dict(order, 'order_configuration', {})
2849
2849
  limitGTC = self.safe_dict(orderConfiguration, 'limit_limit_gtc')
2850
2850
  limitGTD = self.safe_dict(orderConfiguration, 'limit_limit_gtd')
@@ -2099,7 +2099,7 @@ class krakenfutures(Exchange, ImplicitAPI):
2099
2099
 
2100
2100
  def fetch_positions(self, symbols: Strings = None, params={}):
2101
2101
  """
2102
- :see: https://docs.futures.kraken.com/#websocket-api-private-feeds-open-positions
2102
+ :see: https://docs.futures.kraken.com/#http-api-trading-v3-api-account-information-get-open-positions
2103
2103
  Fetches current contract trading positions
2104
2104
  :param str[] symbols: List of unified symbols
2105
2105
  :param dict [params]: Not used by krakenfutures
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.27'
7
+ __version__ = '4.3.28'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -235,13 +235,17 @@ class coinbase(ccxt.async_support.coinbase):
235
235
  #
236
236
  channel = self.safe_string(message, 'channel')
237
237
  events = self.safe_value(message, 'events', [])
238
+ datetime = self.safe_string(message, 'timestamp')
239
+ timestamp = self.parse8601(datetime)
238
240
  newTickers = []
239
241
  for i in range(0, len(events)):
240
242
  tickersObj = events[i]
241
- tickers = self.safe_value(tickersObj, 'tickers', [])
243
+ tickers = self.safe_list(tickersObj, 'tickers', [])
242
244
  for j in range(0, len(tickers)):
243
245
  ticker = tickers[j]
244
246
  result = self.parse_ws_ticker(ticker)
247
+ result['timestamp'] = timestamp
248
+ result['datetime'] = datetime
245
249
  symbol = result['symbol']
246
250
  self.tickers[symbol] = result
247
251
  wsMarketId = self.safe_string(ticker, 'product_id')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.27
3
+ Version: 4.3.28
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
@@ -228,13 +228,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
228
228
 
229
229
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
230
230
 
231
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.27/dist/ccxt.browser.js
232
- * unpkg: https://unpkg.com/ccxt@4.3.27/dist/ccxt.browser.js
231
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.28/dist/ccxt.browser.js
232
+ * unpkg: https://unpkg.com/ccxt@4.3.28/dist/ccxt.browser.js
233
233
 
234
234
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
235
235
 
236
236
  ```HTML
237
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.27/dist/ccxt.browser.js"></script>
237
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.28/dist/ccxt.browser.js"></script>
238
238
  ```
239
239
 
240
240
  Creates a global `ccxt` object:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.3.27",
3
+ "version": "4.3.28",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.js",
6
6
  "type": "module",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes