ccxt 4.4.58__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 (309) hide show
  1. ccxt/__init__.py +1 -3
  2. ccxt/ace.py +2 -2
  3. ccxt/alpaca.py +4 -4
  4. ccxt/ascendex.py +3 -3
  5. ccxt/async_support/__init__.py +1 -3
  6. ccxt/async_support/ace.py +2 -2
  7. ccxt/async_support/alpaca.py +4 -4
  8. ccxt/async_support/ascendex.py +3 -3
  9. ccxt/async_support/base/exchange.py +1 -1
  10. ccxt/async_support/bequant.py +2 -1
  11. ccxt/async_support/bigone.py +5 -5
  12. ccxt/async_support/binance.py +3 -3
  13. ccxt/async_support/binancecoinm.py +2 -1
  14. ccxt/async_support/binanceus.py +2 -1
  15. ccxt/async_support/binanceusdm.py +2 -1
  16. ccxt/async_support/bingx.py +3 -3
  17. ccxt/async_support/bit2c.py +9 -9
  18. ccxt/async_support/bitbank.py +2 -2
  19. ccxt/async_support/bitbns.py +2 -2
  20. ccxt/async_support/bitcoincom.py +2 -1
  21. ccxt/async_support/bitfinex.py +2 -2
  22. ccxt/async_support/bitfinex1.py +2 -2
  23. ccxt/async_support/bitflyer.py +2 -2
  24. ccxt/async_support/bitget.py +4 -4
  25. ccxt/async_support/bithumb.py +2 -2
  26. ccxt/async_support/bitmart.py +137 -86
  27. ccxt/async_support/bitmex.py +2 -2
  28. ccxt/async_support/bitopro.py +2 -2
  29. ccxt/async_support/bitpanda.py +2 -1
  30. ccxt/async_support/bitrue.py +3 -3
  31. ccxt/async_support/bitso.py +2 -2
  32. ccxt/async_support/bitstamp.py +2 -2
  33. ccxt/async_support/bitteam.py +2 -2
  34. ccxt/async_support/bitvavo.py +3 -3
  35. ccxt/async_support/bl3p.py +2 -2
  36. ccxt/async_support/blockchaincom.py +2 -2
  37. ccxt/async_support/blofin.py +2 -2
  38. ccxt/async_support/btcalpha.py +2 -2
  39. ccxt/async_support/btcbox.py +2 -2
  40. ccxt/async_support/btcmarkets.py +3 -3
  41. ccxt/async_support/btcturk.py +2 -2
  42. ccxt/async_support/bybit.py +4 -4
  43. ccxt/async_support/cex.py +3 -3
  44. ccxt/async_support/coinbase.py +4 -4
  45. ccxt/async_support/coinbaseadvanced.py +2 -1
  46. ccxt/async_support/coinbaseexchange.py +3 -3
  47. ccxt/async_support/coinbaseinternational.py +3 -4
  48. ccxt/async_support/coincatch.py +3 -3
  49. ccxt/async_support/coincheck.py +2 -2
  50. ccxt/async_support/coinex.py +3 -3
  51. ccxt/async_support/coinlist.py +3 -3
  52. ccxt/async_support/coinmate.py +2 -2
  53. ccxt/async_support/coinmetro.py +2 -2
  54. ccxt/async_support/coinone.py +2 -2
  55. ccxt/async_support/coinsph.py +3 -3
  56. ccxt/async_support/coinspot.py +2 -2
  57. ccxt/async_support/cryptocom.py +2 -2
  58. ccxt/async_support/currencycom.py +3 -3
  59. ccxt/async_support/defx.py +3 -3
  60. ccxt/async_support/delta.py +3 -3
  61. ccxt/async_support/deribit.py +3 -3
  62. ccxt/async_support/digifinex.py +3 -3
  63. ccxt/async_support/ellipx.py +1 -1
  64. ccxt/async_support/exmo.py +2 -2
  65. ccxt/async_support/fmfwio.py +2 -1
  66. ccxt/async_support/gate.py +3 -3
  67. ccxt/async_support/gateio.py +2 -1
  68. ccxt/async_support/gemini.py +2 -2
  69. ccxt/async_support/hashkey.py +2 -2
  70. ccxt/async_support/hitbtc.py +3 -3
  71. ccxt/async_support/hollaex.py +2 -2
  72. ccxt/async_support/htx.py +3 -3
  73. ccxt/async_support/huobi.py +2 -1
  74. ccxt/async_support/huobijp.py +3 -3
  75. ccxt/async_support/hyperliquid.py +83 -3
  76. ccxt/async_support/idex.py +3 -3
  77. ccxt/async_support/independentreserve.py +2 -2
  78. ccxt/async_support/indodax.py +3 -3
  79. ccxt/async_support/kraken.py +3 -3
  80. ccxt/async_support/krakenfutures.py +2 -2
  81. ccxt/async_support/kucoin.py +3 -3
  82. ccxt/async_support/kucoinfutures.py +3 -3
  83. ccxt/async_support/kuna.py +3 -3
  84. ccxt/async_support/latoken.py +3 -3
  85. ccxt/async_support/lbank.py +3 -3
  86. ccxt/async_support/luno.py +2 -2
  87. ccxt/async_support/mercado.py +2 -2
  88. ccxt/async_support/mexc.py +3 -3
  89. ccxt/async_support/myokx.py +2 -1
  90. ccxt/async_support/ndax.py +2 -2
  91. ccxt/async_support/novadax.py +3 -3
  92. ccxt/async_support/oceanex.py +3 -3
  93. ccxt/async_support/okcoin.py +3 -3
  94. ccxt/async_support/okx.py +3 -4
  95. ccxt/async_support/onetrading.py +3 -3
  96. ccxt/async_support/oxfun.py +2 -2
  97. ccxt/async_support/p2b.py +2 -2
  98. ccxt/async_support/paradex.py +3 -3
  99. ccxt/async_support/paymium.py +2 -2
  100. ccxt/async_support/phemex.py +2 -2
  101. ccxt/async_support/poloniex.py +3 -3
  102. ccxt/async_support/poloniexfutures.py +3 -3
  103. ccxt/async_support/probit.py +3 -3
  104. ccxt/async_support/timex.py +3 -3
  105. ccxt/async_support/tokocrypto.py +3 -3
  106. ccxt/async_support/tradeogre.py +2 -2
  107. ccxt/async_support/upbit.py +2 -2
  108. ccxt/async_support/vertex.py +4 -4
  109. ccxt/async_support/wavesexchange.py +2 -3
  110. ccxt/async_support/whitebit.py +3 -3
  111. ccxt/async_support/woo.py +3 -4
  112. ccxt/async_support/woofipro.py +3 -4
  113. ccxt/async_support/xt.py +3 -3
  114. ccxt/async_support/yobit.py +2 -2
  115. ccxt/async_support/zaif.py +2 -2
  116. ccxt/async_support/zonda.py +2 -2
  117. ccxt/base/errors.py +6 -0
  118. ccxt/base/exchange.py +4 -3
  119. ccxt/bequant.py +2 -1
  120. ccxt/bigone.py +5 -5
  121. ccxt/binance.py +3 -3
  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 +4 -4
  134. ccxt/bithumb.py +2 -2
  135. ccxt/bitmart.py +137 -86
  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 +2 -2
  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 +4 -4
  152. ccxt/cex.py +3 -3
  153. ccxt/coinbase.py +4 -4
  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 +83 -3
  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 +2 -3
  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 +2 -2
  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/timex.py +3 -3
  290. ccxt/tokocrypto.py +3 -3
  291. ccxt/tradeogre.py +2 -2
  292. ccxt/upbit.py +2 -2
  293. ccxt/vertex.py +4 -4
  294. ccxt/wavesexchange.py +2 -3
  295. ccxt/whitebit.py +3 -3
  296. ccxt/woo.py +3 -4
  297. ccxt/woofipro.py +3 -4
  298. ccxt/xt.py +3 -3
  299. ccxt/yobit.py +2 -2
  300. ccxt/zaif.py +2 -2
  301. ccxt/zonda.py +2 -2
  302. {ccxt-4.4.58.dist-info → ccxt-4.4.59.dist-info}/METADATA +30 -33
  303. {ccxt-4.4.58.dist-info → ccxt-4.4.59.dist-info}/RECORD +306 -309
  304. ccxt/abstract/wazirx.py +0 -30
  305. ccxt/async_support/wazirx.py +0 -1336
  306. ccxt/wazirx.py +0 -1336
  307. {ccxt-4.4.58.dist-info → ccxt-4.4.59.dist-info}/LICENSE.txt +0 -0
  308. {ccxt-4.4.58.dist-info → ccxt-4.4.59.dist-info}/WHEEL +0 -0
  309. {ccxt-4.4.58.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.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',
@@ -544,9 +544,10 @@ class bitmart(Exchange, ImplicitAPI):
544
544
  'TRU': 'Truebit', # conflict with TrueFi
545
545
  },
546
546
  'options': {
547
- 'defaultNetwork': 'ERC20',
548
547
  'defaultNetworks': {
549
- 'USDT': 'ERC20',
548
+ 'USDT': 'TRC20',
549
+ 'BTC': 'BTC',
550
+ 'ETH': 'ERC20',
550
551
  },
551
552
  'timeDifference': 0, # the difference between system clock and exchange clock
552
553
  'adjustForTimeDifference': False, # controls the adjustment logic upon instantiation
@@ -588,7 +589,7 @@ class bitmart(Exchange, ImplicitAPI):
588
589
  'KSM': 'KSM',
589
590
  'ZEC': 'ZEC',
590
591
  'NAS': 'NAS',
591
- # 'POLYGON': ['MATIC', 'Polygon', 'POLYGON'], # todo: after unification
592
+ 'POLYGON': 'MATIC',
592
593
  'HRC20': 'HECO',
593
594
  'XDC': 'XDC',
594
595
  'ONE': 'ONE',
@@ -597,7 +598,7 @@ class bitmart(Exchange, ImplicitAPI):
597
598
  'ICP': 'Computer',
598
599
  'XTZ': 'XTZ',
599
600
  'MINA': 'MINA',
600
- # 'BEP20': ['BEP20', 'BSC_BNB', 'bep20'], # todo: after unification
601
+ 'BEP20': 'BSC_BNB',
601
602
  'THETA': 'THETA',
602
603
  'AKT': 'AKT',
603
604
  'AR': 'AR',
@@ -701,6 +702,12 @@ class bitmart(Exchange, ImplicitAPI):
701
702
  # undetermined chains:
702
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),
703
704
  },
705
+ 'networksById': {
706
+ 'ETH': 'ERC20',
707
+ 'Ethereum': 'ERC20',
708
+ 'USDT': 'OMNI', # the default USDT network for bitmart is OMNI
709
+ 'Bitcoin': 'BTC',
710
+ },
704
711
  'defaultType': 'spot', # 'spot', 'swap'
705
712
  'fetchBalance': {
706
713
  'type': 'spot', # 'spot', 'swap', 'account'
@@ -860,7 +867,7 @@ class bitmart(Exchange, ImplicitAPI):
860
867
  },
861
868
  })
862
869
 
863
- async def fetch_time(self, params={}):
870
+ async def fetch_time(self, params={}) -> Int:
864
871
  """
865
872
  fetches the current integer timestamp in milliseconds from the exchange server
866
873
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1175,61 +1182,129 @@ class bitmart(Exchange, ImplicitAPI):
1175
1182
  :param dict [params]: extra parameters specific to the exchange API endpoint
1176
1183
  :returns dict: an associative dictionary of currencies
1177
1184
  """
1178
- response = await self.publicGetSpotV1Currencies(params)
1185
+ response = await self.publicGetAccountV1Currencies(params)
1179
1186
  #
1180
1187
  # {
1181
- # "message":"OK",
1188
+ # "message": "OK",
1182
1189
  # "code":1000,
1183
- # "trace":"8c768b3c-025f-413f-bec5-6d6411d46883",
1184
- # "data":{
1185
- # "currencies":[
1186
- # {"currency":"MATIC","name":"Matic Network","withdraw_enabled":true,"deposit_enabled":true},
1187
- # {"currency":"KTN","name":"Kasoutuuka News","withdraw_enabled":true,"deposit_enabled":false},
1188
- # {"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
+ # }
1189
1203
  # ]
1190
1204
  # }
1191
1205
  # }
1192
1206
  #
1193
1207
  data = self.safe_dict(response, 'data', {})
1194
1208
  currencies = self.safe_list(data, 'currencies', [])
1195
- result: dict = {}
1209
+ result = {}
1196
1210
  for i in range(0, len(currencies)):
1197
1211
  currency = currencies[i]
1198
- id = self.safe_string(currency, 'id')
1199
- code = self.safe_currency_code(id)
1200
- name = self.safe_string(currency, 'name')
1201
- withdrawEnabled = self.safe_bool(currency, 'withdraw_enabled')
1202
- depositEnabled = self.safe_bool(currency, 'deposit_enabled')
1203
- active = withdrawEnabled and depositEnabled
1204
- result[code] = {
1205
- 'id': id,
1206
- 'code': code,
1207
- 'name': name,
1208
- 'info': currency, # the original payload
1209
- 'active': active,
1210
- 'deposit': depositEnabled,
1211
- 'withdraw': withdrawEnabled,
1212
- 'fee': None,
1213
- '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
1214
1246
  'limits': {
1215
- 'amount': {'min': None, 'max': None},
1216
- '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
+ },
1217
1255
  },
1218
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)
1219
1263
  return result
1220
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
+
1221
1293
  async def fetch_transaction_fee(self, code: str, params={}):
1222
1294
  """
1223
1295
  @deprecated
1224
1296
  please use fetchDepositWithdrawFee instead
1225
1297
  :param str code: unified currency code
1226
1298
  :param dict [params]: extra parameters specific to the exchange API endpoint
1299
+ :param str [params.network]: the network code of the currency
1227
1300
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1228
1301
  """
1229
1302
  await self.load_markets()
1230
1303
  currency = self.currency(code)
1304
+ network: Str = None
1305
+ network, params = self.handle_network_code_and_params(params)
1231
1306
  request: dict = {
1232
- 'currency': currency['id'],
1307
+ 'currency': self.get_currency_id_from_code_and_network(currency['code'], network),
1233
1308
  }
1234
1309
  response = await self.privateGetAccountV1WithdrawCharge(self.extend(request, params))
1235
1310
  #
@@ -1281,12 +1356,14 @@ class bitmart(Exchange, ImplicitAPI):
1281
1356
  fetch the fee for deposits and withdrawals
1282
1357
  :param str code: unified currency code
1283
1358
  :param dict [params]: extra parameters specific to the exchange API endpoint
1359
+ :param str [params.network]: the network code of the currency
1284
1360
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1285
1361
  """
1286
1362
  await self.load_markets()
1287
- currency = self.currency(code)
1363
+ network: Str = None
1364
+ network, params = self.handle_network_code_and_params(params)
1288
1365
  request: dict = {
1289
- 'currency': currency['id'],
1366
+ 'currency': self.get_currency_id_from_code_and_network(code, network),
1290
1367
  }
1291
1368
  response = await self.privateGetAccountV1WithdrawCharge(self.extend(request, params))
1292
1369
  #
@@ -3418,24 +3495,11 @@ class bitmart(Exchange, ImplicitAPI):
3418
3495
  """
3419
3496
  await self.load_markets()
3420
3497
  currency = self.currency(code)
3421
- currencyId = currency['id']
3498
+ network: Str = None
3499
+ network, params = self.handle_network_code_and_params(params)
3422
3500
  request: dict = {
3423
- 'currency': currencyId,
3501
+ 'currency': self.get_currency_id_from_code_and_network(code, network),
3424
3502
  }
3425
- if code == 'USDT':
3426
- defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
3427
- defaultNetwork = self.safe_string_upper(defaultNetworks, code)
3428
- networks = self.safe_dict(self.options, 'networks', {})
3429
- networkInner = self.safe_string_upper(params, 'network', defaultNetwork) # self line allows the user to specify either ERC20 or ETH
3430
- networkInner = self.safe_string(networks, networkInner, networkInner) # handle ERC20>ETH alias
3431
- if networkInner is not None:
3432
- 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
3433
- params = self.omit(params, 'network')
3434
- else:
3435
- networkCode = None
3436
- networkCode, params = self.handle_network_code_and_params(params)
3437
- if networkCode is not None:
3438
- request['currency'] = currencyId + '-' + self.network_code_to_id(networkCode)
3439
3503
  response = await self.privateGetAccountV1DepositAddress(self.extend(request, params))
3440
3504
  #
3441
3505
  # {
@@ -3463,23 +3527,20 @@ class bitmart(Exchange, ImplicitAPI):
3463
3527
  # }
3464
3528
  #
3465
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
3466
3537
  address = self.safe_string(depositAddress, 'address')
3467
- chain = self.safe_string(depositAddress, 'chain')
3468
- network = None
3469
3538
  currency = self.safe_currency(currencyId, currency)
3470
- if chain is not None:
3471
- parts = chain.split('-')
3472
- partsLength = len(parts)
3473
- networkId = self.safe_string(parts, partsLength - 1)
3474
- if networkId == self.safe_string(currency, 'name'):
3475
- network = self.safe_string(currency, 'code')
3476
- else:
3477
- network = self.network_id_to_code(networkId)
3478
3539
  self.check_address(address)
3479
3540
  return {
3480
3541
  'info': depositAddress,
3481
3542
  'currency': self.safe_string(currency, 'code'),
3482
- 'network': network,
3543
+ 'network': self.network_id_to_code(network),
3483
3544
  'address': address,
3484
3545
  'tag': self.safe_string(depositAddress, 'address_memo'),
3485
3546
  }
@@ -3492,29 +3553,23 @@ class bitmart(Exchange, ImplicitAPI):
3492
3553
  :param str address: the address to withdraw to
3493
3554
  :param str tag:
3494
3555
  :param dict [params]: extra parameters specific to the exchange API endpoint
3556
+ :param str [params.network]: the network name for self withdrawal
3495
3557
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
3496
3558
  """
3497
3559
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
3498
3560
  self.check_address(address)
3499
3561
  await self.load_markets()
3500
3562
  currency = self.currency(code)
3563
+ network: Str = None
3564
+ network, params = self.handle_network_code_and_params(params)
3501
3565
  request: dict = {
3502
- 'currency': currency['id'],
3566
+ 'currency': self.get_currency_id_from_code_and_network(code, network),
3503
3567
  'amount': amount,
3504
3568
  'destination': 'To Digital Address', # To Digital Address, To Binance, To OKEX
3505
3569
  'address': address,
3506
3570
  }
3507
3571
  if tag is not None:
3508
3572
  request['address_memo'] = tag
3509
- if code == 'USDT':
3510
- defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
3511
- defaultNetwork = self.safe_string_upper(defaultNetworks, code)
3512
- networks = self.safe_dict(self.options, 'networks', {})
3513
- network = self.safe_string_upper(params, 'network', defaultNetwork) # self line allows the user to specify either ERC20 or ETH
3514
- network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
3515
- if network is not None:
3516
- 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
3517
- params = self.omit(params, 'network')
3518
3573
  response = await self.privatePostAccountV1WithdrawApply(self.extend(request, params))
3519
3574
  #
3520
3575
  # {
@@ -3547,16 +3602,6 @@ class bitmart(Exchange, ImplicitAPI):
3547
3602
  if code is not None:
3548
3603
  currency = self.currency(code)
3549
3604
  request['currency'] = currency['id']
3550
- if code == 'USDT':
3551
- defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
3552
- defaultNetwork = self.safe_string_upper(defaultNetworks, code)
3553
- networks = self.safe_dict(self.options, 'networks', {})
3554
- network = self.safe_string_upper(params, 'network', defaultNetwork) # self line allows the user to specify either ERC20 or ETH
3555
- network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
3556
- if network is not None:
3557
- 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
3558
- currency['code'] = request['currency'] # update currency code to filter
3559
- params = self.omit(params, 'network')
3560
3605
  response = await self.privateGetAccountV2DepositWithdrawHistory(self.extend(request, params))
3561
3606
  #
3562
3607
  # {
@@ -3734,6 +3779,11 @@ class bitmart(Exchange, ImplicitAPI):
3734
3779
  amount = self.safe_number(transaction, 'arrival_amount')
3735
3780
  timestamp = self.safe_integer(transaction, 'apply_time')
3736
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)
3737
3787
  code = self.safe_currency_code(currencyId, currency)
3738
3788
  status = self.parse_transaction_status(self.safe_string(transaction, 'status'))
3739
3789
  feeCost = self.safe_number(transaction, 'fee')
@@ -3751,7 +3801,7 @@ class bitmart(Exchange, ImplicitAPI):
3751
3801
  'id': id,
3752
3802
  'currency': code,
3753
3803
  'amount': amount,
3754
- 'network': None,
3804
+ 'network': self.network_id_to_code(networkId),
3755
3805
  'address': address,
3756
3806
  'addressFrom': None,
3757
3807
  'addressTo': None,
@@ -4929,6 +4979,7 @@ class bitmart(Exchange, ImplicitAPI):
4929
4979
  else:
4930
4980
  direction = 'in'
4931
4981
  currencyId = self.safe_string(item, 'asset')
4982
+ currency = self.safe_currency(currencyId, currency)
4932
4983
  timestamp = self.safe_integer(item, 'time')
4933
4984
  type = self.safe_string(item, 'type')
4934
4985
  return self.safe_ledger_entry({
@@ -4939,7 +4990,7 @@ class bitmart(Exchange, ImplicitAPI):
4939
4990
  'referenceAccount': None,
4940
4991
  'referenceId': self.safe_string(item, 'tradeId'),
4941
4992
  'type': self.parse_ledger_entry_type(type),
4942
- 'currency': self.safe_currency_code(currencyId, currency),
4993
+ 'currency': currency['code'],
4943
4994
  'amount': self.parse_number(amount),
4944
4995
  'timestamp': timestamp,
4945
4996
  'datetime': self.iso8601(timestamp),
@@ -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',
@@ -5,7 +5,7 @@
5
5
 
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitteam import ImplicitAPI
8
- from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
8
+ from ccxt.base.types import Any, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
11
  from ccxt.base.errors import AuthenticationError
@@ -21,7 +21,7 @@ from ccxt.base.precise import Precise
21
21
 
22
22
  class bitteam(Exchange, ImplicitAPI):
23
23
 
24
- def describe(self):
24
+ def describe(self) -> Any:
25
25
  return self.deep_extend(super(bitteam, self).describe(), {
26
26
  'id': 'bitteam',
27
27
  'name': 'BIT.TEAM',
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitvavo import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
9
+ from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, 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
@@ -31,7 +31,7 @@ from ccxt.base.precise import Precise
31
31
 
32
32
  class bitvavo(Exchange, ImplicitAPI):
33
33
 
34
- def describe(self):
34
+ def describe(self) -> Any:
35
35
  return self.deep_extend(super(bitvavo, self).describe(), {
36
36
  'id': 'bitvavo',
37
37
  'name': 'Bitvavo',
@@ -382,7 +382,7 @@ class bitvavo(Exchange, ImplicitAPI):
382
382
  # Prices submit with a precision larger than 5 will be cut by the API.
383
383
  return self.decimal_to_precision(price, TRUNCATE, 8, DECIMAL_PLACES)
384
384
 
385
- async def fetch_time(self, params={}):
385
+ async def fetch_time(self, params={}) -> Int:
386
386
  """
387
387
  fetches the current integer timestamp in milliseconds from the exchange server
388
388
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bl3p import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, IndexType, Int, Market, Num, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees
9
+ from ccxt.base.types import Any, Balances, Currency, IndexType, Int, Market, Num, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees
10
10
  from typing import List
11
11
  from ccxt.base.decimal_to_precision import TICK_SIZE
12
12
  from ccxt.base.precise import Precise
@@ -14,7 +14,7 @@ from ccxt.base.precise import Precise
14
14
 
15
15
  class bl3p(Exchange, ImplicitAPI):
16
16
 
17
- def describe(self):
17
+ def describe(self) -> Any:
18
18
  return self.deep_extend(super(bl3p, self).describe(), {
19
19
  'id': 'bl3p',
20
20
  'name': 'BL3P',
@@ -5,7 +5,7 @@
5
5
 
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.blockchaincom import ImplicitAPI
8
- from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
8
+ from ccxt.base.types import Any, Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
11
  from ccxt.base.errors import AuthenticationError
@@ -18,7 +18,7 @@ from ccxt.base.precise import Precise
18
18
 
19
19
  class blockchaincom(Exchange, ImplicitAPI):
20
20
 
21
- def describe(self):
21
+ def describe(self) -> Any:
22
22
  return self.deep_extend(super(blockchaincom, self).describe(), {
23
23
  'id': 'blockchaincom',
24
24
  'secret': None,
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.blofin import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, LedgerEntry, Leverage, Leverages, MarginMode, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, TransferEntry
9
+ from ccxt.base.types import Any, Balances, Currency, Int, LedgerEntry, Leverage, Leverages, MarginMode, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -22,7 +22,7 @@ from ccxt.base.precise import Precise
22
22
 
23
23
  class blofin(Exchange, ImplicitAPI):
24
24
 
25
- def describe(self):
25
+ def describe(self) -> Any:
26
26
  return self.deep_extend(super(blofin, self).describe(), {
27
27
  'id': 'blofin',
28
28
  'name': 'BloFin',
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.btcalpha import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Any, Balances, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import InsufficientFunds
@@ -17,7 +17,7 @@ from ccxt.base.precise import Precise
17
17
 
18
18
  class btcalpha(Exchange, ImplicitAPI):
19
19
 
20
- def describe(self):
20
+ def describe(self) -> Any:
21
21
  return self.deep_extend(super(btcalpha, self).describe(), {
22
22
  'id': 'btcalpha',
23
23
  'name': 'BTC-Alpha',
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.btcbox import ImplicitAPI
8
8
  import hashlib
9
9
  import json
10
- from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
10
+ from ccxt.base.types import Any, Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import AuthenticationError
@@ -23,7 +23,7 @@ from ccxt.base.precise import Precise
23
23
 
24
24
  class btcbox(Exchange, ImplicitAPI):
25
25
 
26
- def describe(self):
26
+ def describe(self) -> Any:
27
27
  return self.deep_extend(super(btcbox, self).describe(), {
28
28
  'id': 'btcbox',
29
29
  'name': 'BtcBox',