ccxt 4.4.57__py2.py3-none-any.whl → 4.4.59__py2.py3-none-any.whl

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 (310) hide show
  1. ccxt/__init__.py +1 -3
  2. ccxt/abstract/xt.py +1 -0
  3. ccxt/ace.py +2 -2
  4. ccxt/alpaca.py +4 -4
  5. ccxt/ascendex.py +5 -3
  6. ccxt/async_support/__init__.py +1 -3
  7. ccxt/async_support/ace.py +2 -2
  8. ccxt/async_support/alpaca.py +4 -4
  9. ccxt/async_support/ascendex.py +5 -3
  10. ccxt/async_support/base/exchange.py +1 -1
  11. ccxt/async_support/bequant.py +2 -1
  12. ccxt/async_support/bigone.py +5 -5
  13. ccxt/async_support/binance.py +22 -6
  14. ccxt/async_support/binancecoinm.py +2 -1
  15. ccxt/async_support/binanceus.py +2 -1
  16. ccxt/async_support/binanceusdm.py +2 -1
  17. ccxt/async_support/bingx.py +3 -3
  18. ccxt/async_support/bit2c.py +9 -9
  19. ccxt/async_support/bitbank.py +2 -2
  20. ccxt/async_support/bitbns.py +2 -2
  21. ccxt/async_support/bitcoincom.py +2 -1
  22. ccxt/async_support/bitfinex.py +2 -2
  23. ccxt/async_support/bitfinex1.py +2 -2
  24. ccxt/async_support/bitflyer.py +2 -2
  25. ccxt/async_support/bitget.py +8 -3
  26. ccxt/async_support/bithumb.py +2 -2
  27. ccxt/async_support/bitmart.py +150 -89
  28. ccxt/async_support/bitmex.py +2 -2
  29. ccxt/async_support/bitopro.py +2 -2
  30. ccxt/async_support/bitpanda.py +2 -1
  31. ccxt/async_support/bitrue.py +3 -3
  32. ccxt/async_support/bitso.py +2 -2
  33. ccxt/async_support/bitstamp.py +2 -2
  34. ccxt/async_support/bitteam.py +2 -2
  35. ccxt/async_support/bitvavo.py +3 -3
  36. ccxt/async_support/bl3p.py +2 -2
  37. ccxt/async_support/blockchaincom.py +2 -2
  38. ccxt/async_support/blofin.py +3 -4
  39. ccxt/async_support/btcalpha.py +2 -2
  40. ccxt/async_support/btcbox.py +2 -2
  41. ccxt/async_support/btcmarkets.py +3 -3
  42. ccxt/async_support/btcturk.py +2 -2
  43. ccxt/async_support/bybit.py +17 -6
  44. ccxt/async_support/cex.py +3 -3
  45. ccxt/async_support/coinbase.py +12 -5
  46. ccxt/async_support/coinbaseadvanced.py +2 -1
  47. ccxt/async_support/coinbaseexchange.py +3 -3
  48. ccxt/async_support/coinbaseinternational.py +3 -4
  49. ccxt/async_support/coincatch.py +3 -3
  50. ccxt/async_support/coincheck.py +2 -2
  51. ccxt/async_support/coinex.py +3 -3
  52. ccxt/async_support/coinlist.py +3 -3
  53. ccxt/async_support/coinmate.py +2 -2
  54. ccxt/async_support/coinmetro.py +2 -2
  55. ccxt/async_support/coinone.py +2 -2
  56. ccxt/async_support/coinsph.py +3 -3
  57. ccxt/async_support/coinspot.py +2 -2
  58. ccxt/async_support/cryptocom.py +2 -2
  59. ccxt/async_support/currencycom.py +3 -3
  60. ccxt/async_support/defx.py +3 -3
  61. ccxt/async_support/delta.py +3 -3
  62. ccxt/async_support/deribit.py +3 -3
  63. ccxt/async_support/digifinex.py +3 -3
  64. ccxt/async_support/ellipx.py +1 -1
  65. ccxt/async_support/exmo.py +2 -2
  66. ccxt/async_support/fmfwio.py +2 -1
  67. ccxt/async_support/gate.py +3 -3
  68. ccxt/async_support/gateio.py +2 -1
  69. ccxt/async_support/gemini.py +2 -2
  70. ccxt/async_support/hashkey.py +2 -2
  71. ccxt/async_support/hitbtc.py +3 -3
  72. ccxt/async_support/hollaex.py +2 -2
  73. ccxt/async_support/htx.py +3 -3
  74. ccxt/async_support/huobi.py +2 -1
  75. ccxt/async_support/huobijp.py +3 -3
  76. ccxt/async_support/hyperliquid.py +91 -6
  77. ccxt/async_support/idex.py +3 -3
  78. ccxt/async_support/independentreserve.py +2 -2
  79. ccxt/async_support/indodax.py +3 -3
  80. ccxt/async_support/kraken.py +3 -3
  81. ccxt/async_support/krakenfutures.py +2 -2
  82. ccxt/async_support/kucoin.py +3 -3
  83. ccxt/async_support/kucoinfutures.py +3 -3
  84. ccxt/async_support/kuna.py +3 -3
  85. ccxt/async_support/latoken.py +3 -3
  86. ccxt/async_support/lbank.py +3 -3
  87. ccxt/async_support/luno.py +2 -2
  88. ccxt/async_support/mercado.py +2 -2
  89. ccxt/async_support/mexc.py +3 -3
  90. ccxt/async_support/myokx.py +2 -1
  91. ccxt/async_support/ndax.py +2 -2
  92. ccxt/async_support/novadax.py +3 -3
  93. ccxt/async_support/oceanex.py +3 -3
  94. ccxt/async_support/okcoin.py +3 -3
  95. ccxt/async_support/okx.py +3 -4
  96. ccxt/async_support/onetrading.py +3 -3
  97. ccxt/async_support/oxfun.py +2 -2
  98. ccxt/async_support/p2b.py +2 -2
  99. ccxt/async_support/paradex.py +3 -3
  100. ccxt/async_support/paymium.py +2 -2
  101. ccxt/async_support/phemex.py +2 -2
  102. ccxt/async_support/poloniex.py +3 -3
  103. ccxt/async_support/poloniexfutures.py +3 -3
  104. ccxt/async_support/probit.py +3 -3
  105. ccxt/async_support/timex.py +15 -5
  106. ccxt/async_support/tokocrypto.py +3 -3
  107. ccxt/async_support/tradeogre.py +2 -2
  108. ccxt/async_support/upbit.py +2 -2
  109. ccxt/async_support/vertex.py +5 -5
  110. ccxt/async_support/wavesexchange.py +2 -3
  111. ccxt/async_support/whitebit.py +5 -4
  112. ccxt/async_support/woo.py +3 -4
  113. ccxt/async_support/woofipro.py +3 -4
  114. ccxt/async_support/xt.py +57 -4
  115. ccxt/async_support/yobit.py +2 -2
  116. ccxt/async_support/zaif.py +2 -2
  117. ccxt/async_support/zonda.py +2 -2
  118. ccxt/base/exchange.py +5 -4
  119. ccxt/bequant.py +2 -1
  120. ccxt/bigone.py +5 -5
  121. ccxt/binance.py +22 -6
  122. ccxt/binancecoinm.py +2 -1
  123. ccxt/binanceus.py +2 -1
  124. ccxt/binanceusdm.py +2 -1
  125. ccxt/bingx.py +3 -3
  126. ccxt/bit2c.py +9 -9
  127. ccxt/bitbank.py +2 -2
  128. ccxt/bitbns.py +2 -2
  129. ccxt/bitcoincom.py +2 -1
  130. ccxt/bitfinex.py +2 -2
  131. ccxt/bitfinex1.py +2 -2
  132. ccxt/bitflyer.py +2 -2
  133. ccxt/bitget.py +8 -3
  134. ccxt/bithumb.py +2 -2
  135. ccxt/bitmart.py +150 -89
  136. ccxt/bitmex.py +2 -2
  137. ccxt/bitopro.py +2 -2
  138. ccxt/bitpanda.py +2 -1
  139. ccxt/bitrue.py +3 -3
  140. ccxt/bitso.py +2 -2
  141. ccxt/bitstamp.py +2 -2
  142. ccxt/bitteam.py +2 -2
  143. ccxt/bitvavo.py +3 -3
  144. ccxt/bl3p.py +2 -2
  145. ccxt/blockchaincom.py +2 -2
  146. ccxt/blofin.py +3 -4
  147. ccxt/btcalpha.py +2 -2
  148. ccxt/btcbox.py +2 -2
  149. ccxt/btcmarkets.py +3 -3
  150. ccxt/btcturk.py +2 -2
  151. ccxt/bybit.py +17 -6
  152. ccxt/cex.py +3 -3
  153. ccxt/coinbase.py +12 -5
  154. ccxt/coinbaseadvanced.py +2 -1
  155. ccxt/coinbaseexchange.py +3 -3
  156. ccxt/coinbaseinternational.py +3 -4
  157. ccxt/coincatch.py +3 -3
  158. ccxt/coincheck.py +2 -2
  159. ccxt/coinex.py +3 -3
  160. ccxt/coinlist.py +3 -3
  161. ccxt/coinmate.py +2 -2
  162. ccxt/coinmetro.py +2 -2
  163. ccxt/coinone.py +2 -2
  164. ccxt/coinsph.py +3 -3
  165. ccxt/coinspot.py +2 -2
  166. ccxt/cryptocom.py +2 -2
  167. ccxt/currencycom.py +3 -3
  168. ccxt/defx.py +3 -3
  169. ccxt/delta.py +3 -3
  170. ccxt/deribit.py +3 -3
  171. ccxt/digifinex.py +3 -3
  172. ccxt/ellipx.py +1 -1
  173. ccxt/exmo.py +2 -2
  174. ccxt/fmfwio.py +2 -1
  175. ccxt/gate.py +3 -3
  176. ccxt/gateio.py +2 -1
  177. ccxt/gemini.py +2 -2
  178. ccxt/hashkey.py +2 -2
  179. ccxt/hitbtc.py +3 -3
  180. ccxt/hollaex.py +2 -2
  181. ccxt/htx.py +3 -3
  182. ccxt/huobi.py +2 -1
  183. ccxt/huobijp.py +3 -3
  184. ccxt/hyperliquid.py +91 -6
  185. ccxt/idex.py +3 -3
  186. ccxt/independentreserve.py +2 -2
  187. ccxt/indodax.py +3 -3
  188. ccxt/kraken.py +3 -3
  189. ccxt/krakenfutures.py +2 -2
  190. ccxt/kucoin.py +3 -3
  191. ccxt/kucoinfutures.py +3 -3
  192. ccxt/kuna.py +3 -3
  193. ccxt/latoken.py +3 -3
  194. ccxt/lbank.py +3 -3
  195. ccxt/luno.py +2 -2
  196. ccxt/mercado.py +2 -2
  197. ccxt/mexc.py +3 -3
  198. ccxt/myokx.py +2 -1
  199. ccxt/ndax.py +2 -2
  200. ccxt/novadax.py +3 -3
  201. ccxt/oceanex.py +3 -3
  202. ccxt/okcoin.py +3 -3
  203. ccxt/okx.py +3 -4
  204. ccxt/onetrading.py +3 -3
  205. ccxt/oxfun.py +2 -2
  206. ccxt/p2b.py +2 -2
  207. ccxt/paradex.py +3 -3
  208. ccxt/paymium.py +2 -2
  209. ccxt/phemex.py +2 -2
  210. ccxt/poloniex.py +3 -3
  211. ccxt/poloniexfutures.py +3 -3
  212. ccxt/pro/__init__.py +1 -3
  213. ccxt/pro/alpaca.py +2 -2
  214. ccxt/pro/ascendex.py +2 -2
  215. ccxt/pro/bequant.py +2 -1
  216. ccxt/pro/binance.py +2 -3
  217. ccxt/pro/binancecoinm.py +2 -1
  218. ccxt/pro/binanceus.py +3 -2
  219. ccxt/pro/binanceusdm.py +2 -1
  220. ccxt/pro/bingx.py +2 -2
  221. ccxt/pro/bitcoincom.py +2 -1
  222. ccxt/pro/bitfinex.py +2 -2
  223. ccxt/pro/bitfinex1.py +2 -2
  224. ccxt/pro/bitget.py +2 -3
  225. ccxt/pro/bithumb.py +2 -2
  226. ccxt/pro/bitmart.py +2 -2
  227. ccxt/pro/bitmex.py +2 -2
  228. ccxt/pro/bitopro.py +2 -2
  229. ccxt/pro/bitpanda.py +2 -1
  230. ccxt/pro/bitrue.py +2 -2
  231. ccxt/pro/bitstamp.py +2 -2
  232. ccxt/pro/bitvavo.py +2 -2
  233. ccxt/pro/blockchaincom.py +2 -2
  234. ccxt/pro/blofin.py +1 -1
  235. ccxt/pro/bybit.py +6 -4
  236. ccxt/pro/cex.py +2 -2
  237. ccxt/pro/coinbase.py +2 -2
  238. ccxt/pro/coinbaseadvanced.py +2 -1
  239. ccxt/pro/coinbaseexchange.py +2 -2
  240. ccxt/pro/coinbaseinternational.py +2 -2
  241. ccxt/pro/coincatch.py +2 -3
  242. ccxt/pro/coincheck.py +2 -2
  243. ccxt/pro/coinex.py +2 -2
  244. ccxt/pro/coinone.py +2 -2
  245. ccxt/pro/cryptocom.py +2 -3
  246. ccxt/pro/currencycom.py +2 -2
  247. ccxt/pro/defx.py +2 -3
  248. ccxt/pro/deribit.py +2 -2
  249. ccxt/pro/exmo.py +2 -2
  250. ccxt/pro/gate.py +2 -3
  251. ccxt/pro/gateio.py +2 -1
  252. ccxt/pro/gemini.py +2 -2
  253. ccxt/pro/hashkey.py +2 -2
  254. ccxt/pro/hitbtc.py +2 -2
  255. ccxt/pro/hollaex.py +2 -2
  256. ccxt/pro/htx.py +2 -2
  257. ccxt/pro/huobi.py +2 -1
  258. ccxt/pro/huobijp.py +2 -2
  259. ccxt/pro/hyperliquid.py +2 -3
  260. ccxt/pro/idex.py +2 -2
  261. ccxt/pro/independentreserve.py +2 -2
  262. ccxt/pro/kraken.py +2 -2
  263. ccxt/pro/krakenfutures.py +2 -2
  264. ccxt/pro/kucoin.py +2 -3
  265. ccxt/pro/kucoinfutures.py +2 -3
  266. ccxt/pro/lbank.py +2 -2
  267. ccxt/pro/luno.py +2 -2
  268. ccxt/pro/mexc.py +5 -3
  269. ccxt/pro/myokx.py +2 -1
  270. ccxt/pro/ndax.py +2 -2
  271. ccxt/pro/okcoin.py +2 -2
  272. ccxt/pro/okx.py +2 -3
  273. ccxt/pro/onetrading.py +2 -2
  274. ccxt/pro/oxfun.py +2 -2
  275. ccxt/pro/p2b.py +2 -2
  276. ccxt/pro/paradex.py +2 -2
  277. ccxt/pro/phemex.py +2 -2
  278. ccxt/pro/poloniex.py +2 -2
  279. ccxt/pro/poloniexfutures.py +2 -2
  280. ccxt/pro/probit.py +2 -2
  281. ccxt/pro/upbit.py +2 -2
  282. ccxt/pro/vertex.py +2 -2
  283. ccxt/pro/wazirx.py +2 -2
  284. ccxt/pro/whitebit.py +2 -2
  285. ccxt/pro/woo.py +2 -2
  286. ccxt/pro/woofipro.py +2 -2
  287. ccxt/pro/xt.py +2 -2
  288. ccxt/probit.py +3 -3
  289. ccxt/test/tests_init.py +2 -2
  290. ccxt/timex.py +15 -5
  291. ccxt/tokocrypto.py +3 -3
  292. ccxt/tradeogre.py +2 -2
  293. ccxt/upbit.py +2 -2
  294. ccxt/vertex.py +5 -5
  295. ccxt/wavesexchange.py +2 -3
  296. ccxt/whitebit.py +5 -4
  297. ccxt/woo.py +3 -4
  298. ccxt/woofipro.py +3 -4
  299. ccxt/xt.py +57 -4
  300. ccxt/yobit.py +2 -2
  301. ccxt/zaif.py +2 -2
  302. ccxt/zonda.py +2 -2
  303. {ccxt-4.4.57.dist-info → ccxt-4.4.59.dist-info}/METADATA +30 -33
  304. {ccxt-4.4.57.dist-info → ccxt-4.4.59.dist-info}/RECORD +307 -310
  305. ccxt/abstract/wazirx.py +0 -30
  306. ccxt/async_support/wazirx.py +0 -1336
  307. ccxt/wazirx.py +0 -1336
  308. {ccxt-4.4.57.dist-info → ccxt-4.4.59.dist-info}/LICENSE.txt +0 -0
  309. {ccxt-4.4.57.dist-info → ccxt-4.4.59.dist-info}/WHEEL +0 -0
  310. {ccxt-4.4.57.dist-info → ccxt-4.4.59.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitflyer import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface
9
+ from ccxt.base.types import Any, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import ArgumentsRequired
@@ -18,7 +18,7 @@ from ccxt.base.precise import Precise
18
18
 
19
19
  class bitflyer(Exchange, ImplicitAPI):
20
20
 
21
- def describe(self):
21
+ def describe(self) -> Any:
22
22
  return self.deep_extend(super(bitflyer, self).describe(), {
23
23
  'id': 'bitflyer',
24
24
  'name': 'bitFlyer',
@@ -8,7 +8,7 @@ from ccxt.abstract.bitget import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
10
  import json
11
- from ccxt.base.types import Balances, BorrowInterest, Conversion, CrossBorrowRate, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, LedgerEntry, Leverage, LeverageTier, Liquidation, LongShortRatio, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
11
+ from ccxt.base.types import Any, Balances, BorrowInterest, Conversion, CrossBorrowRate, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, LedgerEntry, Leverage, LeverageTier, Liquidation, LongShortRatio, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import AuthenticationError
@@ -35,7 +35,7 @@ from ccxt.base.precise import Precise
35
35
 
36
36
  class bitget(Exchange, ImplicitAPI):
37
37
 
38
- def describe(self):
38
+ def describe(self) -> Any:
39
39
  return self.deep_extend(super(bitget, self).describe(), {
40
40
  'id': 'bitget',
41
41
  'name': 'Bitget',
@@ -1749,7 +1749,7 @@ class bitget(Exchange, ImplicitAPI):
1749
1749
  params = self.omit(params, 'productType')
1750
1750
  return [productType, params]
1751
1751
 
1752
- async def fetch_time(self, params={}):
1752
+ async def fetch_time(self, params={}) -> Int:
1753
1753
  """
1754
1754
  fetches the current integer timestamp in milliseconds from the exchange server
1755
1755
 
@@ -8855,4 +8855,9 @@ class bitget(Exchange, ImplicitAPI):
8855
8855
  }
8856
8856
  if method == 'POST':
8857
8857
  headers['Content-Type'] = 'application/json'
8858
+ sandboxMode = self.safe_bool(self.options, 'sandboxMode', False)
8859
+ if sandboxMode:
8860
+ if headers is None:
8861
+ headers = {}
8862
+ headers['PAPTRADING'] = '1'
8858
8863
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bithumb import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, MarketInterface
10
+ from ccxt.base.types import Any, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, MarketInterface
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import AuthenticationError
@@ -25,7 +25,7 @@ from ccxt.base.precise import Precise
25
25
 
26
26
  class bithumb(Exchange, ImplicitAPI):
27
27
 
28
- def describe(self):
28
+ def describe(self) -> Any:
29
29
  return self.deep_extend(super(bithumb, self).describe(), {
30
30
  'id': 'bithumb',
31
31
  'name': 'Bithumb',
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitmart import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, BorrowInterest, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, IsolatedBorrowRates, LedgerEntry, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface, TransferEntry
9
+ from ccxt.base.types import Any, Balances, BorrowInterest, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, IsolatedBorrowRates, LedgerEntry, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -32,7 +32,7 @@ from ccxt.base.precise import Precise
32
32
 
33
33
  class bitmart(Exchange, ImplicitAPI):
34
34
 
35
- def describe(self):
35
+ def describe(self) -> Any:
36
36
  return self.deep_extend(super(bitmart, self).describe(), {
37
37
  'id': 'bitmart',
38
38
  'name': 'BitMart',
@@ -528,7 +528,10 @@ class bitmart(Exchange, ImplicitAPI):
528
528
  '40049': InvalidOrder, # 403, The maximum length of clientOrderId cannot exceed 32
529
529
  '40050': InvalidOrder, # 403, Client OrderId duplicated with existing orders
530
530
  },
531
- 'broad': {},
531
+ 'broad': {
532
+ 'You contract account available balance not enough': InsufficientFunds,
533
+ 'you contract account available balance not enough': InsufficientFunds,
534
+ },
532
535
  },
533
536
  'commonCurrencies': {
534
537
  '$GM': 'GOLDMINER',
@@ -541,9 +544,10 @@ class bitmart(Exchange, ImplicitAPI):
541
544
  'TRU': 'Truebit', # conflict with TrueFi
542
545
  },
543
546
  'options': {
544
- 'defaultNetwork': 'ERC20',
545
547
  'defaultNetworks': {
546
- 'USDT': 'ERC20',
548
+ 'USDT': 'TRC20',
549
+ 'BTC': 'BTC',
550
+ 'ETH': 'ERC20',
547
551
  },
548
552
  'timeDifference': 0, # the difference between system clock and exchange clock
549
553
  'adjustForTimeDifference': False, # controls the adjustment logic upon instantiation
@@ -585,7 +589,7 @@ class bitmart(Exchange, ImplicitAPI):
585
589
  'KSM': 'KSM',
586
590
  'ZEC': 'ZEC',
587
591
  'NAS': 'NAS',
588
- # 'POLYGON': ['MATIC', 'Polygon', 'POLYGON'], # todo: after unification
592
+ 'POLYGON': 'MATIC',
589
593
  'HRC20': 'HECO',
590
594
  'XDC': 'XDC',
591
595
  'ONE': 'ONE',
@@ -594,7 +598,7 @@ class bitmart(Exchange, ImplicitAPI):
594
598
  'ICP': 'Computer',
595
599
  'XTZ': 'XTZ',
596
600
  'MINA': 'MINA',
597
- # 'BEP20': ['BEP20', 'BSC_BNB', 'bep20'], # todo: after unification
601
+ 'BEP20': 'BSC_BNB',
598
602
  'THETA': 'THETA',
599
603
  'AKT': 'AKT',
600
604
  'AR': 'AR',
@@ -698,6 +702,12 @@ class bitmart(Exchange, ImplicitAPI):
698
702
  # undetermined chains:
699
703
  # LEX(for LexThum), TAYCAN(for TRICE), SFL(probably TAYCAN), OMNIA(for APEX), NAC(for NAC), KAG(Kinesis), CEM(crypto emergency), XVM(for Venidium), NEVM(for NEVM), IGT20(for IGNITE), FILM(FILMCredits), CC(CloudCoin), MERGE(MERGE), LTNM(Bitcoin latinum), PLUGCN( PlugChain), DINGO(dingo), LED(LEDGIS), AVAT(AVAT), VSOL(Vsolidus), EPIC(EPIC cash), NFC(netflowcoin), mrx(Metrix Coin), Idena(idena network), PKT(PKT Cash), BondDex(BondDex), XBN(XBN), KALAM(Kalamint), REV(RChain), KRC20(MyDeFiPet), ARC20(Hurricane Token), GMD(Coop network), BERS(Berith), ZEBI(Zebi), BRC(Baer Chain), DAPS(DAPS Coin), APL(Gold Secured Currency), NDAU(NDAU), WICC(WICC), UPG(Unipay God), TSL(TreasureSL), MXW(Maxonrow), CLC(Cifculation), SMH(SMH Coin), XIN(CPCoin), RDD(ReddCoin), OK(Okcash), KAR(KAR), CCX(ConcealNetwork),
700
704
  },
705
+ 'networksById': {
706
+ 'ETH': 'ERC20',
707
+ 'Ethereum': 'ERC20',
708
+ 'USDT': 'OMNI', # the default USDT network for bitmart is OMNI
709
+ 'Bitcoin': 'BTC',
710
+ },
701
711
  'defaultType': 'spot', # 'spot', 'swap'
702
712
  'fetchBalance': {
703
713
  'type': 'spot', # 'spot', 'swap', 'account'
@@ -857,7 +867,7 @@ class bitmart(Exchange, ImplicitAPI):
857
867
  },
858
868
  })
859
869
 
860
- async def fetch_time(self, params={}):
870
+ async def fetch_time(self, params={}) -> Int:
861
871
  """
862
872
  fetches the current integer timestamp in milliseconds from the exchange server
863
873
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -968,6 +978,7 @@ class bitmart(Exchange, ImplicitAPI):
968
978
  data = self.safe_dict(response, 'data', {})
969
979
  symbols = self.safe_list(data, 'symbols', [])
970
980
  result = []
981
+ fees = self.fees['trading']
971
982
  for i in range(0, len(symbols)):
972
983
  market = symbols[i]
973
984
  id = self.safe_string(market, 'symbol')
@@ -1006,6 +1017,8 @@ class bitmart(Exchange, ImplicitAPI):
1006
1017
  'expiryDatetime': None,
1007
1018
  'strike': None,
1008
1019
  'optionType': None,
1020
+ 'maker': fees['maker'],
1021
+ 'taker': fees['taker'],
1009
1022
  'precision': {
1010
1023
  'amount': baseMinSize,
1011
1024
  'price': self.parse_number(self.parse_precision(self.safe_string(market, 'price_max_precision'))),
@@ -1077,6 +1090,7 @@ class bitmart(Exchange, ImplicitAPI):
1077
1090
  data = self.safe_dict(response, 'data', {})
1078
1091
  symbols = self.safe_list(data, 'symbols', [])
1079
1092
  result = []
1093
+ fees = self.fees['trading']
1080
1094
  for i in range(0, len(symbols)):
1081
1095
  market = symbols[i]
1082
1096
  id = self.safe_string(market, 'symbol')
@@ -1118,6 +1132,8 @@ class bitmart(Exchange, ImplicitAPI):
1118
1132
  'expiryDatetime': self.iso8601(expiry),
1119
1133
  'strike': None,
1120
1134
  'optionType': None,
1135
+ 'maker': fees['maker'],
1136
+ 'taker': fees['taker'],
1121
1137
  'precision': {
1122
1138
  'amount': self.safe_number(market, 'vol_precision'),
1123
1139
  'price': self.safe_number(market, 'price_precision'),
@@ -1166,61 +1182,129 @@ class bitmart(Exchange, ImplicitAPI):
1166
1182
  :param dict [params]: extra parameters specific to the exchange API endpoint
1167
1183
  :returns dict: an associative dictionary of currencies
1168
1184
  """
1169
- response = await self.publicGetSpotV1Currencies(params)
1185
+ response = await self.publicGetAccountV1Currencies(params)
1170
1186
  #
1171
1187
  # {
1172
- # "message":"OK",
1188
+ # "message": "OK",
1173
1189
  # "code":1000,
1174
- # "trace":"8c768b3c-025f-413f-bec5-6d6411d46883",
1175
- # "data":{
1176
- # "currencies":[
1177
- # {"currency":"MATIC","name":"Matic Network","withdraw_enabled":true,"deposit_enabled":true},
1178
- # {"currency":"KTN","name":"Kasoutuuka News","withdraw_enabled":true,"deposit_enabled":false},
1179
- # {"currency":"BRT","name":"Berith","withdraw_enabled":true,"deposit_enabled":true},
1190
+ # "trace": "9eaec51cd80d46d48a1c6b447206c4d6.71.17392193317851454",
1191
+ # "data": {
1192
+ # "currencies": [
1193
+ # {
1194
+ # "currency": "BTC",
1195
+ # "name": "Bitcoin",
1196
+ # "contract_address": null,
1197
+ # "network": "BTC",
1198
+ # "withdraw_enabled": True,
1199
+ # "deposit_enabled": True,
1200
+ # "withdraw_minsize": "0.0003",
1201
+ # "withdraw_minfee": "9.74"
1202
+ # }
1180
1203
  # ]
1181
1204
  # }
1182
1205
  # }
1183
1206
  #
1184
1207
  data = self.safe_dict(response, 'data', {})
1185
1208
  currencies = self.safe_list(data, 'currencies', [])
1186
- result: dict = {}
1209
+ result = {}
1187
1210
  for i in range(0, len(currencies)):
1188
1211
  currency = currencies[i]
1189
- id = self.safe_string(currency, 'id')
1190
- code = self.safe_currency_code(id)
1191
- name = self.safe_string(currency, 'name')
1192
- withdrawEnabled = self.safe_bool(currency, 'withdraw_enabled')
1193
- depositEnabled = self.safe_bool(currency, 'deposit_enabled')
1194
- active = withdrawEnabled and depositEnabled
1195
- result[code] = {
1196
- 'id': id,
1197
- 'code': code,
1198
- 'name': name,
1199
- 'info': currency, # the original payload
1200
- 'active': active,
1201
- 'deposit': depositEnabled,
1202
- 'withdraw': withdrawEnabled,
1203
- 'fee': None,
1204
- 'precision': None,
1212
+ fullId = self.safe_string(currency, 'currency')
1213
+ currencyId = fullId
1214
+ networkId = self.safe_string(currency, 'network')
1215
+ if fullId.find('NFT') < 0:
1216
+ parts = fullId.split('-')
1217
+ currencyId = self.safe_string(parts, 0)
1218
+ second = self.safe_string(parts, 1)
1219
+ if second is not None:
1220
+ networkId = second.upper()
1221
+ currencyCode = self.safe_currency_code(currencyId)
1222
+ entry = self.safe_dict(result, currencyCode)
1223
+ if entry is None:
1224
+ entry = {
1225
+ 'info': currency,
1226
+ 'id': currencyId,
1227
+ 'code': currencyCode,
1228
+ 'precision': None,
1229
+ 'name': self.safe_string(currency, 'name'),
1230
+ 'deposit': None,
1231
+ 'withdraw': None,
1232
+ 'active': None,
1233
+ 'networks': {},
1234
+ }
1235
+ networkCode = self.network_id_to_code(networkId)
1236
+ withdraw = self.safe_bool(currency, 'withdraw_enabled')
1237
+ deposit = self.safe_bool(currency, 'deposit_enabled')
1238
+ entry['networks'][networkCode] = {
1239
+ 'info': currency,
1240
+ 'id': networkId,
1241
+ 'code': networkCode,
1242
+ 'withdraw': withdraw,
1243
+ 'deposit': deposit,
1244
+ 'active': withdraw and deposit,
1245
+ 'fee': self.safe_number(currency, 'withdraw_minfee'), # todo check
1205
1246
  'limits': {
1206
- 'amount': {'min': None, 'max': None},
1207
- 'withdraw': {'min': None, 'max': None},
1247
+ 'withdraw': {
1248
+ 'min': self.safe_number(currency, 'withdraw_minsize'),
1249
+ 'max': None,
1250
+ },
1251
+ 'deposit': {
1252
+ 'min': None,
1253
+ 'max': None,
1254
+ },
1208
1255
  },
1209
1256
  }
1257
+ result[currencyCode] = entry
1258
+ keys = list(result.keys())
1259
+ for i in range(0, len(keys)):
1260
+ key = keys[i]
1261
+ currency = result[key]
1262
+ result[key] = self.safe_currency_structure(currency)
1210
1263
  return result
1211
1264
 
1265
+ def get_currency_id_from_code_and_network(self, currencyCode: Str, networkCode: Str) -> Str:
1266
+ if networkCode is None:
1267
+ networkCode = self.default_network_code(currencyCode) # use default network code if not provided
1268
+ currency = self.currency(currencyCode)
1269
+ id = currency['id']
1270
+ idFromNetwork: Str = None
1271
+ networks = self.safe_dict(currency, 'networks', {})
1272
+ networkInfo: dict = {}
1273
+ if networkCode is None:
1274
+ # network code is not provided and there is no default network code
1275
+ network = self.safe_dict(networks, currencyCode) # trying to find network that has the same code
1276
+ if network is None:
1277
+ # use the first network in the networks list if there is no network code with the same code
1278
+ keys = list(networks.keys())
1279
+ length = len(keys)
1280
+ if length > 0:
1281
+ network = self.safe_value(networks, keys[0])
1282
+ networkInfo = self.safe_dict(network, 'info', {})
1283
+ idFromNetwork = self.safe_string(networkInfo, 'currency') # use currency name from network
1284
+ else:
1285
+ providedOrDefaultNetwork = self.safe_dict(networks, networkCode)
1286
+ if providedOrDefaultNetwork is not None:
1287
+ networkInfo = self.safe_dict(providedOrDefaultNetwork, 'info', {})
1288
+ idFromNetwork = self.safe_string(networkInfo, 'currency') # use currency name from network
1289
+ else:
1290
+ id += '-' + self.network_code_to_id(networkCode, currencyCode) # use concatenated currency id and network code if network is not found
1291
+ return idFromNetwork if (idFromNetwork is not None) else id
1292
+
1212
1293
  async def fetch_transaction_fee(self, code: str, params={}):
1213
1294
  """
1214
1295
  @deprecated
1215
1296
  please use fetchDepositWithdrawFee instead
1216
1297
  :param str code: unified currency code
1217
1298
  :param dict [params]: extra parameters specific to the exchange API endpoint
1299
+ :param str [params.network]: the network code of the currency
1218
1300
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1219
1301
  """
1220
1302
  await self.load_markets()
1221
1303
  currency = self.currency(code)
1304
+ network: Str = None
1305
+ network, params = self.handle_network_code_and_params(params)
1222
1306
  request: dict = {
1223
- 'currency': currency['id'],
1307
+ 'currency': self.get_currency_id_from_code_and_network(currency['code'], network),
1224
1308
  }
1225
1309
  response = await self.privateGetAccountV1WithdrawCharge(self.extend(request, params))
1226
1310
  #
@@ -1272,12 +1356,14 @@ class bitmart(Exchange, ImplicitAPI):
1272
1356
  fetch the fee for deposits and withdrawals
1273
1357
  :param str code: unified currency code
1274
1358
  :param dict [params]: extra parameters specific to the exchange API endpoint
1359
+ :param str [params.network]: the network code of the currency
1275
1360
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1276
1361
  """
1277
1362
  await self.load_markets()
1278
- currency = self.currency(code)
1363
+ network: Str = None
1364
+ network, params = self.handle_network_code_and_params(params)
1279
1365
  request: dict = {
1280
- 'currency': currency['id'],
1366
+ 'currency': self.get_currency_id_from_code_and_network(code, network),
1281
1367
  }
1282
1368
  response = await self.privateGetAccountV1WithdrawCharge(self.extend(request, params))
1283
1369
  #
@@ -3409,24 +3495,11 @@ class bitmart(Exchange, ImplicitAPI):
3409
3495
  """
3410
3496
  await self.load_markets()
3411
3497
  currency = self.currency(code)
3412
- currencyId = currency['id']
3498
+ network: Str = None
3499
+ network, params = self.handle_network_code_and_params(params)
3413
3500
  request: dict = {
3414
- 'currency': currencyId,
3501
+ 'currency': self.get_currency_id_from_code_and_network(code, network),
3415
3502
  }
3416
- if code == 'USDT':
3417
- defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
3418
- defaultNetwork = self.safe_string_upper(defaultNetworks, code)
3419
- networks = self.safe_dict(self.options, 'networks', {})
3420
- networkInner = self.safe_string_upper(params, 'network', defaultNetwork) # self line allows the user to specify either ERC20 or ETH
3421
- networkInner = self.safe_string(networks, networkInner, networkInner) # handle ERC20>ETH alias
3422
- if networkInner is not None:
3423
- request['currency'] = currencyId + '-' + networkInner # when network the currency need to be changed to currency + '-' + network https://developer-pro.bitmart.com/en/account/withdraw_apply.html on the end of page
3424
- params = self.omit(params, 'network')
3425
- else:
3426
- networkCode = None
3427
- networkCode, params = self.handle_network_code_and_params(params)
3428
- if networkCode is not None:
3429
- request['currency'] = currencyId + '-' + self.network_code_to_id(networkCode)
3430
3503
  response = await self.privateGetAccountV1DepositAddress(self.extend(request, params))
3431
3504
  #
3432
3505
  # {
@@ -3454,23 +3527,20 @@ class bitmart(Exchange, ImplicitAPI):
3454
3527
  # }
3455
3528
  #
3456
3529
  currencyId = self.safe_string(depositAddress, 'currency')
3530
+ network = self.safe_string(depositAddress, 'chain')
3531
+ if currencyId.find('NFT') < 0:
3532
+ parts = currencyId.split('-')
3533
+ currencyId = self.safe_string(parts, 0)
3534
+ secondPart = self.safe_string(parts, 1)
3535
+ if secondPart is not None:
3536
+ network = secondPart
3457
3537
  address = self.safe_string(depositAddress, 'address')
3458
- chain = self.safe_string(depositAddress, 'chain')
3459
- network = None
3460
3538
  currency = self.safe_currency(currencyId, currency)
3461
- if chain is not None:
3462
- parts = chain.split('-')
3463
- partsLength = len(parts)
3464
- networkId = self.safe_string(parts, partsLength - 1)
3465
- if networkId == self.safe_string(currency, 'name'):
3466
- network = self.safe_string(currency, 'code')
3467
- else:
3468
- network = self.network_id_to_code(networkId)
3469
3539
  self.check_address(address)
3470
3540
  return {
3471
3541
  'info': depositAddress,
3472
3542
  'currency': self.safe_string(currency, 'code'),
3473
- 'network': network,
3543
+ 'network': self.network_id_to_code(network),
3474
3544
  'address': address,
3475
3545
  'tag': self.safe_string(depositAddress, 'address_memo'),
3476
3546
  }
@@ -3483,29 +3553,23 @@ class bitmart(Exchange, ImplicitAPI):
3483
3553
  :param str address: the address to withdraw to
3484
3554
  :param str tag:
3485
3555
  :param dict [params]: extra parameters specific to the exchange API endpoint
3556
+ :param str [params.network]: the network name for self withdrawal
3486
3557
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
3487
3558
  """
3488
3559
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
3489
3560
  self.check_address(address)
3490
3561
  await self.load_markets()
3491
3562
  currency = self.currency(code)
3563
+ network: Str = None
3564
+ network, params = self.handle_network_code_and_params(params)
3492
3565
  request: dict = {
3493
- 'currency': currency['id'],
3566
+ 'currency': self.get_currency_id_from_code_and_network(code, network),
3494
3567
  'amount': amount,
3495
3568
  'destination': 'To Digital Address', # To Digital Address, To Binance, To OKEX
3496
3569
  'address': address,
3497
3570
  }
3498
3571
  if tag is not None:
3499
3572
  request['address_memo'] = tag
3500
- if code == 'USDT':
3501
- defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
3502
- defaultNetwork = self.safe_string_upper(defaultNetworks, code)
3503
- networks = self.safe_dict(self.options, 'networks', {})
3504
- network = self.safe_string_upper(params, 'network', defaultNetwork) # self line allows the user to specify either ERC20 or ETH
3505
- network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
3506
- if network is not None:
3507
- request['currency'] = request['currency'] + '-' + network # when network the currency need to be changed to currency + '-' + network https://developer-pro.bitmart.com/en/account/withdraw_apply.html on the end of page
3508
- params = self.omit(params, 'network')
3509
3573
  response = await self.privatePostAccountV1WithdrawApply(self.extend(request, params))
3510
3574
  #
3511
3575
  # {
@@ -3538,16 +3602,6 @@ class bitmart(Exchange, ImplicitAPI):
3538
3602
  if code is not None:
3539
3603
  currency = self.currency(code)
3540
3604
  request['currency'] = currency['id']
3541
- if code == 'USDT':
3542
- defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
3543
- defaultNetwork = self.safe_string_upper(defaultNetworks, code)
3544
- networks = self.safe_dict(self.options, 'networks', {})
3545
- network = self.safe_string_upper(params, 'network', defaultNetwork) # self line allows the user to specify either ERC20 or ETH
3546
- network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
3547
- if network is not None:
3548
- request['currency'] = request['currency'] + '-' + network # when network the currency need to be changed to currency + '-' + network https://developer-pro.bitmart.com/en/account/withdraw_apply.html on the end of page
3549
- currency['code'] = request['currency'] # update currency code to filter
3550
- params = self.omit(params, 'network')
3551
3605
  response = await self.privateGetAccountV2DepositWithdrawHistory(self.extend(request, params))
3552
3606
  #
3553
3607
  # {
@@ -3725,6 +3779,11 @@ class bitmart(Exchange, ImplicitAPI):
3725
3779
  amount = self.safe_number(transaction, 'arrival_amount')
3726
3780
  timestamp = self.safe_integer(transaction, 'apply_time')
3727
3781
  currencyId = self.safe_string(transaction, 'currency')
3782
+ networkId: Str = None
3783
+ if currencyId.find('NFT') < 0:
3784
+ parts = currencyId.split('-')
3785
+ currencyId = self.safe_string(parts, 0)
3786
+ networkId = self.safe_string(parts, 1)
3728
3787
  code = self.safe_currency_code(currencyId, currency)
3729
3788
  status = self.parse_transaction_status(self.safe_string(transaction, 'status'))
3730
3789
  feeCost = self.safe_number(transaction, 'fee')
@@ -3742,7 +3801,7 @@ class bitmart(Exchange, ImplicitAPI):
3742
3801
  'id': id,
3743
3802
  'currency': code,
3744
3803
  'amount': amount,
3745
- 'network': None,
3804
+ 'network': self.network_id_to_code(networkId),
3746
3805
  'address': address,
3747
3806
  'addressFrom': None,
3748
3807
  'addressTo': None,
@@ -4920,6 +4979,7 @@ class bitmart(Exchange, ImplicitAPI):
4920
4979
  else:
4921
4980
  direction = 'in'
4922
4981
  currencyId = self.safe_string(item, 'asset')
4982
+ currency = self.safe_currency(currencyId, currency)
4923
4983
  timestamp = self.safe_integer(item, 'time')
4924
4984
  type = self.safe_string(item, 'type')
4925
4985
  return self.safe_ledger_entry({
@@ -4930,7 +4990,7 @@ class bitmart(Exchange, ImplicitAPI):
4930
4990
  'referenceAccount': None,
4931
4991
  'referenceId': self.safe_string(item, 'tradeId'),
4932
4992
  'type': self.parse_ledger_entry_type(type),
4933
- 'currency': self.safe_currency_code(currencyId, currency),
4993
+ 'currency': currency['code'],
4934
4994
  'amount': self.parse_number(amount),
4935
4995
  'timestamp': timestamp,
4936
4996
  'datetime': self.iso8601(timestamp),
@@ -5085,6 +5145,7 @@ class bitmart(Exchange, ImplicitAPI):
5085
5145
  # {"message":"Bad Request [from is empty]","code":50000,"trace":"579986f7-c93a-4559-926b-06ba9fa79d76","data":{}}
5086
5146
  # {"message":"Kline size over 500","code":50004,"trace":"d625caa8-e8ca-4bd2-b77c-958776965819","data":{}}
5087
5147
  # {"message":"Balance not enough","code":50020,"trace":"7c709d6a-3292-462c-98c5-32362540aeef","data":{}}
5148
+ # {"code":40012,"message":"You contract account available balance not enough.","trace":"..."}
5088
5149
  #
5089
5150
  # contract
5090
5151
  #
@@ -5096,9 +5157,9 @@ class bitmart(Exchange, ImplicitAPI):
5096
5157
  isErrorCode = (errorCode is not None) and (errorCode != '1000')
5097
5158
  if isErrorCode or isErrorMessage:
5098
5159
  feedback = self.id + ' ' + body
5099
- self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
5100
- self.throw_broadly_matched_exception(self.exceptions['broad'], errorCode, feedback)
5101
5160
  self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
5102
5161
  self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
5162
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
5163
+ self.throw_broadly_matched_exception(self.exceptions['broad'], errorCode, feedback)
5103
5164
  raise ExchangeError(feedback) # unknown message
5104
5165
  return None
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitmex import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Leverage, Leverages, Market, MarketType, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, Transaction
9
+ from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Leverage, Leverages, Market, MarketType, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -25,7 +25,7 @@ from ccxt.base.precise import Precise
25
25
 
26
26
  class bitmex(Exchange, ImplicitAPI):
27
27
 
28
- def describe(self):
28
+ def describe(self) -> Any:
29
29
  return self.deep_extend(super(bitmex, self).describe(), {
30
30
  'id': 'bitmex',
31
31
  'name': 'BitMEX',
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitopro import ImplicitAPI
8
8
  import hashlib
9
9
  import math
10
- from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
10
+ from ccxt.base.types import Any, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import AuthenticationError
@@ -21,7 +21,7 @@ from ccxt.base.precise import Precise
21
21
 
22
22
  class bitopro(Exchange, ImplicitAPI):
23
23
 
24
- def describe(self):
24
+ def describe(self) -> Any:
25
25
  return self.deep_extend(super(bitopro, self).describe(), {
26
26
  'id': 'bitopro',
27
27
  'name': 'BitoPro',
@@ -5,11 +5,12 @@
5
5
 
6
6
  from ccxt.async_support.onetrading import onetrading
7
7
  from ccxt.abstract.bitpanda import ImplicitAPI
8
+ from ccxt.base.types import Any
8
9
 
9
10
 
10
11
  class bitpanda(onetrading, ImplicitAPI):
11
12
 
12
- def describe(self):
13
+ def describe(self) -> Any:
13
14
  return self.deep_extend(super(bitpanda, self).describe(), {
14
15
  'id': 'bitpanda',
15
16
  'alias': True,
@@ -8,7 +8,7 @@ from ccxt.abstract.bitrue import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
10
  import json
11
- from ccxt.base.types import Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
11
+ from ccxt.base.types import Any, Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import AuthenticationError
@@ -34,7 +34,7 @@ from ccxt.base.precise import Precise
34
34
 
35
35
  class bitrue(Exchange, ImplicitAPI):
36
36
 
37
- def describe(self):
37
+ def describe(self) -> Any:
38
38
  return self.deep_extend(super(bitrue, self).describe(), {
39
39
  'id': 'bitrue',
40
40
  'name': 'Bitrue',
@@ -657,7 +657,7 @@ class bitrue(Exchange, ImplicitAPI):
657
657
  'info': response,
658
658
  }
659
659
 
660
- async def fetch_time(self, params={}):
660
+ async def fetch_time(self, params={}) -> Int:
661
661
  """
662
662
  fetches the current integer timestamp in milliseconds from the exchange server
663
663
 
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitso import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, TradingFees, Transaction
9
+ from ccxt.base.types import Any, Balances, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -21,7 +21,7 @@ from ccxt.base.precise import Precise
21
21
 
22
22
  class bitso(Exchange, ImplicitAPI):
23
23
 
24
- def describe(self):
24
+ def describe(self) -> Any:
25
25
  return self.deep_extend(super(bitso, self).describe(), {
26
26
  'id': 'bitso',
27
27
  'name': 'Bitso',
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitstamp import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
9
+ from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -26,7 +26,7 @@ from ccxt.base.precise import Precise
26
26
 
27
27
  class bitstamp(Exchange, ImplicitAPI):
28
28
 
29
- def describe(self):
29
+ def describe(self) -> Any:
30
30
  return self.deep_extend(super(bitstamp, self).describe(), {
31
31
  'id': 'bitstamp',
32
32
  'name': 'Bitstamp',