ccxt 4.4.58__py2.py3-none-any.whl → 4.4.60__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 (311) hide show
  1. ccxt/__init__.py +1 -3
  2. ccxt/ace.py +2 -2
  3. ccxt/alpaca.py +12 -7
  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 +12 -7
  8. ccxt/async_support/ascendex.py +3 -3
  9. ccxt/async_support/base/exchange.py +4 -1
  10. ccxt/async_support/bequant.py +2 -1
  11. ccxt/async_support/bigone.py +5 -5
  12. ccxt/async_support/binance.py +84 -4
  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 +6 -5
  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 +9 -6
  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 +3 -3
  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 +3 -3
  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 +15 -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 +8 -3
  119. ccxt/bequant.py +2 -1
  120. ccxt/bigone.py +5 -5
  121. ccxt/binance.py +84 -4
  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 +6 -5
  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 +9 -6
  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 +3 -3
  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 +3 -3
  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 +110 -4
  288. ccxt/probit.py +3 -3
  289. ccxt/test/tests_async.py +11 -0
  290. ccxt/test/tests_sync.py +11 -0
  291. ccxt/timex.py +3 -3
  292. ccxt/tokocrypto.py +3 -3
  293. ccxt/tradeogre.py +2 -2
  294. ccxt/upbit.py +2 -2
  295. ccxt/vertex.py +4 -4
  296. ccxt/wavesexchange.py +2 -3
  297. ccxt/whitebit.py +3 -3
  298. ccxt/woo.py +3 -4
  299. ccxt/woofipro.py +3 -4
  300. ccxt/xt.py +15 -3
  301. ccxt/yobit.py +2 -2
  302. ccxt/zaif.py +2 -2
  303. ccxt/zonda.py +2 -2
  304. {ccxt-4.4.58.dist-info → ccxt-4.4.60.dist-info}/METADATA +30 -33
  305. {ccxt-4.4.58.dist-info → ccxt-4.4.60.dist-info}/RECORD +308 -311
  306. ccxt/abstract/wazirx.py +0 -30
  307. ccxt/async_support/wazirx.py +0 -1336
  308. ccxt/wazirx.py +0 -1336
  309. {ccxt-4.4.58.dist-info → ccxt-4.4.60.dist-info}/LICENSE.txt +0 -0
  310. {ccxt-4.4.58.dist-info → ccxt-4.4.60.dist-info}/WHEEL +0 -0
  311. {ccxt-4.4.58.dist-info → ccxt-4.4.60.dist-info}/top_level.txt +0 -0
@@ -5,11 +5,12 @@
5
5
 
6
6
  from ccxt.async_support.fmfwio import fmfwio
7
7
  from ccxt.abstract.bitcoincom import ImplicitAPI
8
+ from ccxt.base.types import Any
8
9
 
9
10
 
10
11
  class bitcoincom(fmfwio, ImplicitAPI):
11
12
 
12
- def describe(self):
13
+ def describe(self) -> Any:
13
14
  return self.deep_extend(super(bitcoincom, self).describe(), {
14
15
  'id': 'bitcoincom',
15
16
  'name': 'Bitcoin.com',
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitfinex import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
- from ccxt.base.types import Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFees, Transaction, TransferEntry
10
+ from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFees, Transaction, TransferEntry
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import AuthenticationError
@@ -32,7 +32,7 @@ from ccxt.base.precise import Precise
32
32
 
33
33
  class bitfinex(Exchange, ImplicitAPI):
34
34
 
35
- def describe(self):
35
+ def describe(self) -> Any:
36
36
  return self.deep_extend(super(bitfinex, self).describe(), {
37
37
  'id': 'bitfinex',
38
38
  'name': 'Bitfinex',
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitfinex1 import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
- from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry
10
+ from ccxt.base.types import Any, Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import AuthenticationError
@@ -30,7 +30,7 @@ from ccxt.base.precise import Precise
30
30
 
31
31
  class bitfinex1(Exchange, ImplicitAPI):
32
32
 
33
- def describe(self):
33
+ def describe(self) -> Any:
34
34
  return self.deep_extend(super(bitfinex1, self).describe(), {
35
35
  'id': 'bitfinex1',
36
36
  'name': 'Bitfinex',
@@ -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
 
@@ -8856,8 +8856,9 @@ class bitget(Exchange, ImplicitAPI):
8856
8856
  if method == 'POST':
8857
8857
  headers['Content-Type'] = 'application/json'
8858
8858
  sandboxMode = self.safe_bool(self.options, 'sandboxMode', False)
8859
- if sandboxMode:
8859
+ if sandboxMode and (path != 'v2/public/time'):
8860
+ # https://github.com/ccxt/ccxt/issues/25252#issuecomment-2662742336
8860
8861
  if headers is None:
8861
8862
  headers = {}
8862
- headers['PAPTRADING'] = 1
8863
+ headers['PAPTRADING'] = '1'
8863
8864
  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',
@@ -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',