ccxt 4.3.18__py2.py3-none-any.whl → 4.3.19__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 (193) hide show
  1. ccxt/__init__.py +3 -1
  2. ccxt/abstract/bybit.py +1 -0
  3. ccxt/abstract/okx.py +1 -0
  4. ccxt/abstract/woofipro.py +119 -0
  5. ccxt/ace.py +1 -1
  6. ccxt/ascendex.py +7 -8
  7. ccxt/async_support/__init__.py +3 -1
  8. ccxt/async_support/ace.py +1 -1
  9. ccxt/async_support/ascendex.py +7 -8
  10. ccxt/async_support/base/exchange.py +23 -2
  11. ccxt/async_support/bigone.py +4 -4
  12. ccxt/async_support/binance.py +9 -9
  13. ccxt/async_support/bingx.py +4 -4
  14. ccxt/async_support/bit2c.py +1 -1
  15. ccxt/async_support/bitbank.py +1 -1
  16. ccxt/async_support/bitbns.py +1 -1
  17. ccxt/async_support/bitfinex.py +28 -4
  18. ccxt/async_support/bitfinex2.py +62 -54
  19. ccxt/async_support/bitflyer.py +1 -1
  20. ccxt/async_support/bitget.py +8 -11
  21. ccxt/async_support/bithumb.py +1 -1
  22. ccxt/async_support/bitmart.py +8 -8
  23. ccxt/async_support/bitmex.py +2 -2
  24. ccxt/async_support/bitopro.py +1 -1
  25. ccxt/async_support/bitrue.py +3 -3
  26. ccxt/async_support/bitso.py +1 -1
  27. ccxt/async_support/bitstamp.py +3 -5
  28. ccxt/async_support/bitteam.py +1 -1
  29. ccxt/async_support/bitvavo.py +1 -1
  30. ccxt/async_support/bl3p.py +1 -1
  31. ccxt/async_support/blockchaincom.py +1 -1
  32. ccxt/async_support/blofin.py +3 -3
  33. ccxt/async_support/btcalpha.py +1 -1
  34. ccxt/async_support/btcbox.py +1 -1
  35. ccxt/async_support/btcmarkets.py +1 -1
  36. ccxt/async_support/btcturk.py +1 -1
  37. ccxt/async_support/bybit.py +9 -8
  38. ccxt/async_support/cex.py +1 -1
  39. ccxt/async_support/coinbase.py +2 -2
  40. ccxt/async_support/coinbasepro.py +1 -1
  41. ccxt/async_support/coincheck.py +1 -1
  42. ccxt/async_support/coinex.py +320 -520
  43. ccxt/async_support/coinlist.py +6 -7
  44. ccxt/async_support/coinmate.py +1 -1
  45. ccxt/async_support/coinmetro.py +1 -1
  46. ccxt/async_support/coinone.py +1 -1
  47. ccxt/async_support/coinsph.py +1 -1
  48. ccxt/async_support/coinspot.py +1 -1
  49. ccxt/async_support/cryptocom.py +1 -1
  50. ccxt/async_support/currencycom.py +2 -2
  51. ccxt/async_support/delta.py +4 -4
  52. ccxt/async_support/deribit.py +8 -8
  53. ccxt/async_support/digifinex.py +5 -5
  54. ccxt/async_support/exmo.py +1 -1
  55. ccxt/async_support/gate.py +5 -5
  56. ccxt/async_support/gemini.py +1 -1
  57. ccxt/async_support/hitbtc.py +3 -3
  58. ccxt/async_support/hollaex.py +4 -4
  59. ccxt/async_support/htx.py +2 -2
  60. ccxt/async_support/huobijp.py +1 -1
  61. ccxt/async_support/idex.py +1 -1
  62. ccxt/async_support/independentreserve.py +1 -1
  63. ccxt/async_support/indodax.py +2 -2
  64. ccxt/async_support/kraken.py +2 -2
  65. ccxt/async_support/krakenfutures.py +3 -3
  66. ccxt/async_support/kucoin.py +3 -3
  67. ccxt/async_support/kucoinfutures.py +3 -3
  68. ccxt/async_support/kuna.py +1 -1
  69. ccxt/async_support/latoken.py +6 -6
  70. ccxt/async_support/lbank.py +1 -1
  71. ccxt/async_support/luno.py +1 -1
  72. ccxt/async_support/lykke.py +1 -1
  73. ccxt/async_support/mercado.py +1 -1
  74. ccxt/async_support/mexc.py +7 -7
  75. ccxt/async_support/ndax.py +1 -1
  76. ccxt/async_support/novadax.py +3 -4
  77. ccxt/async_support/okcoin.py +3 -3
  78. ccxt/async_support/okx.py +27 -10
  79. ccxt/async_support/onetrading.py +1 -1
  80. ccxt/async_support/paymium.py +3 -3
  81. ccxt/async_support/phemex.py +5 -5
  82. ccxt/async_support/poloniex.py +3 -4
  83. ccxt/async_support/poloniexfutures.py +1 -1
  84. ccxt/async_support/probit.py +1 -1
  85. ccxt/async_support/timex.py +1 -1
  86. ccxt/async_support/tokocrypto.py +1 -1
  87. ccxt/async_support/upbit.py +1 -1
  88. ccxt/async_support/wavesexchange.py +3 -3
  89. ccxt/async_support/wazirx.py +1 -1
  90. ccxt/async_support/whitebit.py +2 -2
  91. ccxt/async_support/woo.py +25 -10
  92. ccxt/async_support/woofipro.py +2524 -0
  93. ccxt/async_support/yobit.py +1 -1
  94. ccxt/async_support/zaif.py +1 -1
  95. ccxt/async_support/zonda.py +3 -3
  96. ccxt/base/exchange.py +62 -16
  97. ccxt/base/types.py +20 -0
  98. ccxt/bigone.py +4 -4
  99. ccxt/binance.py +9 -9
  100. ccxt/bingx.py +4 -4
  101. ccxt/bit2c.py +1 -1
  102. ccxt/bitbank.py +1 -1
  103. ccxt/bitbns.py +1 -1
  104. ccxt/bitfinex.py +28 -4
  105. ccxt/bitfinex2.py +62 -54
  106. ccxt/bitflyer.py +1 -1
  107. ccxt/bitget.py +8 -11
  108. ccxt/bithumb.py +1 -1
  109. ccxt/bitmart.py +8 -8
  110. ccxt/bitmex.py +2 -2
  111. ccxt/bitopro.py +1 -1
  112. ccxt/bitrue.py +3 -3
  113. ccxt/bitso.py +1 -1
  114. ccxt/bitstamp.py +3 -5
  115. ccxt/bitteam.py +1 -1
  116. ccxt/bitvavo.py +1 -1
  117. ccxt/bl3p.py +1 -1
  118. ccxt/blockchaincom.py +1 -1
  119. ccxt/blofin.py +3 -3
  120. ccxt/btcalpha.py +1 -1
  121. ccxt/btcbox.py +1 -1
  122. ccxt/btcmarkets.py +1 -1
  123. ccxt/btcturk.py +1 -1
  124. ccxt/bybit.py +9 -8
  125. ccxt/cex.py +1 -1
  126. ccxt/coinbase.py +2 -2
  127. ccxt/coinbasepro.py +1 -1
  128. ccxt/coincheck.py +1 -1
  129. ccxt/coinex.py +320 -520
  130. ccxt/coinlist.py +6 -7
  131. ccxt/coinmate.py +1 -1
  132. ccxt/coinmetro.py +1 -1
  133. ccxt/coinone.py +1 -1
  134. ccxt/coinsph.py +1 -1
  135. ccxt/coinspot.py +1 -1
  136. ccxt/cryptocom.py +1 -1
  137. ccxt/currencycom.py +2 -2
  138. ccxt/delta.py +4 -4
  139. ccxt/deribit.py +8 -8
  140. ccxt/digifinex.py +5 -5
  141. ccxt/exmo.py +1 -1
  142. ccxt/gate.py +5 -5
  143. ccxt/gemini.py +1 -1
  144. ccxt/hitbtc.py +3 -3
  145. ccxt/hollaex.py +4 -4
  146. ccxt/htx.py +2 -2
  147. ccxt/huobijp.py +1 -1
  148. ccxt/idex.py +1 -1
  149. ccxt/independentreserve.py +1 -1
  150. ccxt/indodax.py +2 -2
  151. ccxt/kraken.py +2 -2
  152. ccxt/krakenfutures.py +3 -3
  153. ccxt/kucoin.py +3 -3
  154. ccxt/kucoinfutures.py +3 -3
  155. ccxt/kuna.py +1 -1
  156. ccxt/latoken.py +6 -6
  157. ccxt/lbank.py +1 -1
  158. ccxt/luno.py +1 -1
  159. ccxt/lykke.py +1 -1
  160. ccxt/mercado.py +1 -1
  161. ccxt/mexc.py +7 -7
  162. ccxt/ndax.py +1 -1
  163. ccxt/novadax.py +3 -4
  164. ccxt/okcoin.py +3 -3
  165. ccxt/okx.py +27 -10
  166. ccxt/onetrading.py +1 -1
  167. ccxt/paymium.py +3 -3
  168. ccxt/phemex.py +5 -5
  169. ccxt/poloniex.py +3 -4
  170. ccxt/poloniexfutures.py +1 -1
  171. ccxt/pro/__init__.py +3 -1
  172. ccxt/pro/bitget.py +127 -190
  173. ccxt/pro/coinbaseinternational.py +11 -4
  174. ccxt/pro/okx.py +79 -1
  175. ccxt/pro/woofipro.py +1183 -0
  176. ccxt/probit.py +1 -1
  177. ccxt/test/test_async.py +31 -1
  178. ccxt/test/test_sync.py +31 -1
  179. ccxt/timex.py +1 -1
  180. ccxt/tokocrypto.py +1 -1
  181. ccxt/upbit.py +1 -1
  182. ccxt/wavesexchange.py +3 -3
  183. ccxt/wazirx.py +1 -1
  184. ccxt/whitebit.py +2 -2
  185. ccxt/woo.py +25 -10
  186. ccxt/woofipro.py +2524 -0
  187. ccxt/yobit.py +1 -1
  188. ccxt/zaif.py +1 -1
  189. ccxt/zonda.py +3 -3
  190. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/METADATA +8 -6
  191. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/RECORD +193 -189
  192. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/WHEEL +0 -0
  193. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/top_level.txt +0 -0
@@ -936,9 +936,9 @@ class bitfinex2(Exchange, ImplicitAPI):
936
936
  # same message v1
937
937
  self.throw_exactly_matched_exception(self.exceptions['exact'], message, self.id + ' ' + message)
938
938
  raise ExchangeError(self.id + ' ' + message)
939
- return self.parse_transfer(response, currency)
939
+ return self.parse_transfer({'result': response}, currency)
940
940
 
941
- def parse_transfer(self, transfer, currency: Currency = None):
941
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
942
942
  #
943
943
  # transfer
944
944
  #
@@ -962,12 +962,13 @@ class bitfinex2(Exchange, ImplicitAPI):
962
962
  # "1.0 Tether USDt transfered from Exchange to Margin"
963
963
  # ]
964
964
  #
965
- timestamp = self.safe_integer(transfer, 0)
966
- info = self.safe_value(transfer, 4)
965
+ result = self.safe_list(transfer, 'result')
966
+ timestamp = self.safe_integer(result, 0)
967
+ info = self.safe_value(result, 4)
967
968
  fromAccount = self.safe_string(info, 1)
968
969
  toAccount = self.safe_string(info, 2)
969
970
  currencyId = self.safe_string(info, 5)
970
- status = self.safe_string(transfer, 6)
971
+ status = self.safe_string(result, 6)
971
972
  return {
972
973
  'id': None,
973
974
  'timestamp': timestamp,
@@ -977,10 +978,10 @@ class bitfinex2(Exchange, ImplicitAPI):
977
978
  'currency': self.safe_currency_code(currencyId, currency),
978
979
  'fromAccount': fromAccount,
979
980
  'toAccount': toAccount,
980
- 'info': transfer,
981
+ 'info': result,
981
982
  }
982
983
 
983
- def parse_transfer_status(self, status):
984
+ def parse_transfer_status(self, status: Str) -> Str:
984
985
  statuses = {
985
986
  'SUCCESS': 'ok',
986
987
  'ERROR': 'failed',
@@ -1051,71 +1052,77 @@ class bitfinex2(Exchange, ImplicitAPI):
1051
1052
  result['asks'] = self.sort_by(result['asks'], 0)
1052
1053
  return result
1053
1054
 
1054
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1055
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1055
1056
  #
1056
1057
  # on trading pairs(ex. tBTCUSD)
1057
1058
  #
1058
- # [
1059
- # SYMBOL,
1060
- # BID,
1061
- # BID_SIZE,
1062
- # ASK,
1063
- # ASK_SIZE,
1064
- # DAILY_CHANGE,
1065
- # DAILY_CHANGE_RELATIVE,
1066
- # LAST_PRICE,
1067
- # VOLUME,
1068
- # HIGH,
1069
- # LOW
1070
- # ]
1059
+ # {
1060
+ # 'result': [
1061
+ # SYMBOL,
1062
+ # BID,
1063
+ # BID_SIZE,
1064
+ # ASK,
1065
+ # ASK_SIZE,
1066
+ # DAILY_CHANGE,
1067
+ # DAILY_CHANGE_RELATIVE,
1068
+ # LAST_PRICE,
1069
+ # VOLUME,
1070
+ # HIGH,
1071
+ # LOW
1072
+ # ]
1073
+ # }
1074
+ #
1071
1075
  #
1072
1076
  # on funding currencies(ex. fUSD)
1073
1077
  #
1074
- # [
1075
- # SYMBOL,
1076
- # FRR,
1077
- # BID,
1078
- # BID_PERIOD,
1079
- # BID_SIZE,
1080
- # ASK,
1081
- # ASK_PERIOD,
1082
- # ASK_SIZE,
1083
- # DAILY_CHANGE,
1084
- # DAILY_CHANGE_RELATIVE,
1085
- # LAST_PRICE,
1086
- # VOLUME,
1087
- # HIGH,
1088
- # LOW,
1089
- # _PLACEHOLDER,
1090
- # _PLACEHOLDER,
1091
- # FRR_AMOUNT_AVAILABLE
1092
- # ]
1078
+ # {
1079
+ # 'result': [
1080
+ # SYMBOL,
1081
+ # FRR,
1082
+ # BID,
1083
+ # BID_PERIOD,
1084
+ # BID_SIZE,
1085
+ # ASK,
1086
+ # ASK_PERIOD,
1087
+ # ASK_SIZE,
1088
+ # DAILY_CHANGE,
1089
+ # DAILY_CHANGE_RELATIVE,
1090
+ # LAST_PRICE,
1091
+ # VOLUME,
1092
+ # HIGH,
1093
+ # LOW,
1094
+ # _PLACEHOLDER,
1095
+ # _PLACEHOLDER,
1096
+ # FRR_AMOUNT_AVAILABLE
1097
+ # ]
1098
+ # }
1093
1099
  #
1100
+ result = self.safe_list(ticker, 'result')
1094
1101
  symbol = self.safe_symbol(None, market)
1095
- length = len(ticker)
1096
- last = self.safe_string(ticker, length - 4)
1097
- percentage = self.safe_string(ticker, length - 5)
1102
+ length = len(result)
1103
+ last = self.safe_string(result, length - 4)
1104
+ percentage = self.safe_string(result, length - 5)
1098
1105
  return self.safe_ticker({
1099
1106
  'symbol': symbol,
1100
1107
  'timestamp': None,
1101
1108
  'datetime': None,
1102
- 'high': self.safe_string(ticker, length - 2),
1103
- 'low': self.safe_string(ticker, length - 1),
1104
- 'bid': self.safe_string(ticker, length - 10),
1105
- 'bidVolume': self.safe_string(ticker, length - 9),
1106
- 'ask': self.safe_string(ticker, length - 8),
1107
- 'askVolume': self.safe_string(ticker, length - 7),
1109
+ 'high': self.safe_string(result, length - 2),
1110
+ 'low': self.safe_string(result, length - 1),
1111
+ 'bid': self.safe_string(result, length - 10),
1112
+ 'bidVolume': self.safe_string(result, length - 9),
1113
+ 'ask': self.safe_string(result, length - 8),
1114
+ 'askVolume': self.safe_string(result, length - 7),
1108
1115
  'vwap': None,
1109
1116
  'open': None,
1110
1117
  'close': last,
1111
1118
  'last': last,
1112
1119
  'previousClose': None,
1113
- 'change': self.safe_string(ticker, length - 6),
1120
+ 'change': self.safe_string(result, length - 6),
1114
1121
  'percentage': Precise.string_mul(percentage, '100'),
1115
1122
  'average': None,
1116
- 'baseVolume': self.safe_string(ticker, length - 3),
1123
+ 'baseVolume': self.safe_string(result, length - 3),
1117
1124
  'quoteVolume': None,
1118
- 'info': ticker,
1125
+ 'info': result,
1119
1126
  }, market)
1120
1127
 
1121
1128
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
@@ -1180,7 +1187,7 @@ class bitfinex2(Exchange, ImplicitAPI):
1180
1187
  marketId = self.safe_string(ticker, 0)
1181
1188
  market = self.safe_market(marketId)
1182
1189
  symbol = market['symbol']
1183
- result[symbol] = self.parse_ticker(ticker, market)
1190
+ result[symbol] = self.parse_ticker({'result': ticker}, market)
1184
1191
  return self.filter_by_array_tickers(result, 'symbol', symbols)
1185
1192
 
1186
1193
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
@@ -1197,7 +1204,8 @@ class bitfinex2(Exchange, ImplicitAPI):
1197
1204
  'symbol': market['id'],
1198
1205
  }
1199
1206
  ticker = await self.publicGetTickerSymbol(self.extend(request, params))
1200
- return self.parse_ticker(ticker, market)
1207
+ result = {'result': ticker}
1208
+ return self.parse_ticker(result, market)
1201
1209
 
1202
1210
  def parse_trade(self, trade, market: Market = None) -> Trade:
1203
1211
  #
@@ -358,7 +358,7 @@ class bitflyer(Exchange, ImplicitAPI):
358
358
  orderbook = await self.publicGetGetboard(self.extend(request, params))
359
359
  return self.parse_order_book(orderbook, market['symbol'], None, 'bids', 'asks', 'price', 'size')
360
360
 
361
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
361
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
362
362
  symbol = self.safe_symbol(None, market)
363
363
  timestamp = self.parse8601(self.safe_string(ticker, 'timestamp'))
364
364
  last = self.safe_string(ticker, 'ltp')
@@ -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, Conversion, CrossBorrowRate, Currencies, Currency, FundingHistory, Int, IsolatedBorrowRate, Leverage, Liquidation, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
11
+ from ccxt.base.types import Balances, Conversion, CrossBorrowRate, Currencies, Currency, FundingHistory, Int, IsolatedBorrowRate, Leverage, Liquidation, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry, TransferEntries
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import AuthenticationError
@@ -2493,7 +2493,7 @@ class bitget(Exchange, ImplicitAPI):
2493
2493
  timestamp = self.safe_integer(data, 'ts')
2494
2494
  return self.parse_order_book(data, market['symbol'], timestamp)
2495
2495
 
2496
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
2496
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
2497
2497
  #
2498
2498
  # spot: fetchTicker, fetchTickers
2499
2499
  #
@@ -2566,10 +2566,7 @@ class bitget(Exchange, ImplicitAPI):
2566
2566
  #
2567
2567
  marketId = self.safe_string(ticker, 'symbol')
2568
2568
  close = self.safe_string(ticker, 'lastPr')
2569
- timestampString = self.omit_zero(self.safe_string(ticker, 'ts')) # exchange sometimes provided 0
2570
- timestamp = None
2571
- if timestampString is not None:
2572
- timestamp = self.parse_to_int(timestampString)
2569
+ timestamp = self.safe_integer_omit_zero(ticker, 'ts') # exchange bitget provided 0
2573
2570
  change = self.safe_string(ticker, 'change24h')
2574
2571
  open24 = self.safe_string(ticker, 'open24')
2575
2572
  open = self.safe_string(ticker, 'open')
@@ -6590,7 +6587,7 @@ class bitget(Exchange, ImplicitAPI):
6590
6587
  data = self.safe_dict(response, 'data', {})
6591
6588
  return self.parse_leverage(data, market)
6592
6589
 
6593
- def parse_leverage(self, leverage, market=None) -> Leverage:
6590
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
6594
6591
  return {
6595
6592
  'info': leverage,
6596
6593
  'symbol': market['symbol'],
@@ -6802,7 +6799,7 @@ class bitget(Exchange, ImplicitAPI):
6802
6799
  'info': interest,
6803
6800
  }, market)
6804
6801
 
6805
- async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
6802
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> TransferEntries:
6806
6803
  """
6807
6804
  fetch a history of internal transfers made on an account
6808
6805
  :see: https://www.bitget.com/api-doc/spot/account/Get-Account-TransferRecords
@@ -6903,7 +6900,7 @@ class bitget(Exchange, ImplicitAPI):
6903
6900
  data['ts'] = self.safe_integer(response, 'requestTime')
6904
6901
  return self.parse_transfer(data, currency)
6905
6902
 
6906
- def parse_transfer(self, transfer, currency: Currency = None):
6903
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
6907
6904
  #
6908
6905
  # transfer
6909
6906
  #
@@ -6948,7 +6945,7 @@ class bitget(Exchange, ImplicitAPI):
6948
6945
  'status': self.parse_transfer_status(status),
6949
6946
  }
6950
6947
 
6951
- def parse_transfer_status(self, status):
6948
+ def parse_transfer_status(self, status: Str) -> Str:
6952
6949
  statuses = {
6953
6950
  'successful': 'ok',
6954
6951
  }
@@ -8067,7 +8064,7 @@ class bitget(Exchange, ImplicitAPI):
8067
8064
  dataList = self.safe_list(data, 'dataList', [])
8068
8065
  return self.parse_conversions(dataList, code, 'fromCoin', 'toCoin', since, limit)
8069
8066
 
8070
- def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
8067
+ def parse_conversion(self, conversion: dict, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
8071
8068
  #
8072
8069
  # fetchConvertQuote
8073
8070
  #
@@ -355,7 +355,7 @@ class bithumb(Exchange, ImplicitAPI):
355
355
  timestamp = self.safe_integer(data, 'timestamp')
356
356
  return self.parse_order_book(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity')
357
357
 
358
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
358
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
359
359
  #
360
360
  # fetchTicker, fetchTickers
361
361
  #
@@ -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, Currencies, Currency, Int, IsolatedBorrowRate, IsolatedBorrowRates, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
9
+ from ccxt.base.types import Balances, Currencies, Currency, Int, IsolatedBorrowRate, IsolatedBorrowRates, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry, TransferEntries
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -1121,7 +1121,7 @@ class bitmart(Exchange, ImplicitAPI):
1121
1121
  data = response['data']
1122
1122
  return self.parse_deposit_withdraw_fee(data)
1123
1123
 
1124
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1124
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1125
1125
  #
1126
1126
  # spot(REST)
1127
1127
  #
@@ -2424,7 +2424,7 @@ class bitmart(Exchange, ImplicitAPI):
2424
2424
  elif isMarketOrder:
2425
2425
  # for market buy it requires the amount of quote currency to spend
2426
2426
  if side == 'buy':
2427
- notional = self.safe_number_2(params, 'cost', 'notional')
2427
+ notional = self.safe_string_2(params, 'cost', 'notional')
2428
2428
  params = self.omit(params, 'cost')
2429
2429
  createMarketBuyOrderRequiresPrice = True
2430
2430
  createMarketBuyOrderRequiresPrice, params = self.handle_option_and_params(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', True)
@@ -2434,9 +2434,9 @@ class bitmart(Exchange, ImplicitAPI):
2434
2434
  else:
2435
2435
  amountString = self.number_to_string(amount)
2436
2436
  priceString = self.number_to_string(price)
2437
- notional = self.parse_number(Precise.string_mul(amountString, priceString))
2437
+ notional = Precise.string_mul(amountString, priceString)
2438
2438
  else:
2439
- notional = amount if (notional is None) else notional
2439
+ notional = self.number_to_string(amount) if (notional is None) else notional
2440
2440
  request['notional'] = self.decimal_to_precision(notional, TRUNCATE, market['precision']['price'], self.precisionMode)
2441
2441
  elif side == 'sell':
2442
2442
  request['size'] = self.amount_to_precision(symbol, amount)
@@ -3549,7 +3549,7 @@ class bitmart(Exchange, ImplicitAPI):
3549
3549
  'status': self.parse_transfer_status(self.safe_string_2(response, 'code', 'message')),
3550
3550
  })
3551
3551
 
3552
- def parse_transfer_status(self, status):
3552
+ def parse_transfer_status(self, status: Str) -> Str:
3553
3553
  statuses = {
3554
3554
  '1000': 'ok',
3555
3555
  'OK': 'ok',
@@ -3571,7 +3571,7 @@ class bitmart(Exchange, ImplicitAPI):
3571
3571
  }
3572
3572
  return self.safe_string(types, type, type)
3573
3573
 
3574
- def parse_transfer(self, transfer, currency: Currency = None):
3574
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
3575
3575
  #
3576
3576
  # margin
3577
3577
  #
@@ -3610,7 +3610,7 @@ class bitmart(Exchange, ImplicitAPI):
3610
3610
  'status': self.parse_transfer_status(self.safe_string(transfer, 'state')),
3611
3611
  }
3612
3612
 
3613
- async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
3613
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> TransferEntries:
3614
3614
  """
3615
3615
  fetch a history of internal transfers made on an account, only transfers between spot and swap are supported
3616
3616
  :see: https://developer-pro.bitmart.com/en/futures/#get-transfer-list-signed
@@ -1340,7 +1340,7 @@ class bitmex(Exchange, ImplicitAPI):
1340
1340
  result[symbol] = ticker
1341
1341
  return self.filter_by_array_tickers(result, 'symbol', symbols)
1342
1342
 
1343
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1343
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1344
1344
  # see response sample under "fetchMarkets" because same endpoint is being used here
1345
1345
  marketId = self.safe_string(ticker, 'symbol')
1346
1346
  symbol = self.safe_symbol(marketId, market)
@@ -2016,7 +2016,7 @@ class bitmex(Exchange, ImplicitAPI):
2016
2016
  leverages = await self.fetch_positions(symbols, params)
2017
2017
  return self.parse_leverages(leverages, symbols, 'symbol')
2018
2018
 
2019
- def parse_leverage(self, leverage, market=None) -> Leverage:
2019
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
2020
2020
  marketId = self.safe_string(leverage, 'symbol')
2021
2021
  return {
2022
2022
  'info': leverage,
@@ -377,7 +377,7 @@ class bitopro(Exchange, ImplicitAPI):
377
377
  'info': market,
378
378
  }
379
379
 
380
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
380
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
381
381
  #
382
382
  # {
383
383
  # "pair":"btc_twd",
@@ -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 Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry, TransferEntries
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import AuthenticationError
@@ -1147,7 +1147,7 @@ class bitrue(Exchange, ImplicitAPI):
1147
1147
  orderbook['nonce'] = self.safe_integer(response, 'lastUpdateId')
1148
1148
  return orderbook
1149
1149
 
1150
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1150
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1151
1151
  #
1152
1152
  # fetchBidsAsks
1153
1153
  #
@@ -2728,7 +2728,7 @@ class bitrue(Exchange, ImplicitAPI):
2728
2728
  'status': 'ok',
2729
2729
  }
2730
2730
 
2731
- async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
2731
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> TransferEntries:
2732
2732
  """
2733
2733
  fetch a history of internal transfers made on an account
2734
2734
  :see: https://www.bitrue.com/api-docs#get-future-account-transfer-history-list-user_data-hmac-sha256
@@ -550,7 +550,7 @@ class bitso(Exchange, ImplicitAPI):
550
550
  timestamp = self.parse8601(self.safe_string(orderbook, 'updated_at'))
551
551
  return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'amount')
552
552
 
553
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
553
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
554
554
  #
555
555
  # {
556
556
  # "high":"37446.85",
@@ -721,7 +721,7 @@ class bitstamp(Exchange, ImplicitAPI):
721
721
  orderbook['nonce'] = microtimestamp
722
722
  return orderbook
723
723
 
724
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
724
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
725
725
  #
726
726
  # {
727
727
  # "timestamp": "1686068944",
@@ -2020,10 +2020,8 @@ class bitstamp(Exchange, ImplicitAPI):
2020
2020
  """
2021
2021
  await self.load_markets()
2022
2022
  currency = self.currency(code)
2023
- amount = self.currency_to_precision(code, amount)
2024
- amount = self.parse_to_numeric(amount)
2025
2023
  request = {
2026
- 'amount': amount,
2024
+ 'amount': self.parse_to_numeric(self.currency_to_precision(code, amount)),
2027
2025
  'currency': currency['id'].upper(),
2028
2026
  }
2029
2027
  response = None
@@ -2061,7 +2059,7 @@ class bitstamp(Exchange, ImplicitAPI):
2061
2059
  'status': self.parse_transfer_status(status),
2062
2060
  }
2063
2061
 
2064
- def parse_transfer_status(self, status):
2062
+ def parse_transfer_status(self, status: Str) -> Str:
2065
2063
  statuses = {
2066
2064
  'ok': 'ok',
2067
2065
  'error': 'failed',
@@ -1482,7 +1482,7 @@ class bitteam(Exchange, ImplicitAPI):
1482
1482
  pair = self.safe_dict(result, 'pair', {})
1483
1483
  return self.parse_ticker(pair, market)
1484
1484
 
1485
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1485
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1486
1486
  #
1487
1487
  # fetchTicker
1488
1488
  # {
@@ -591,7 +591,7 @@ class bitvavo(Exchange, ImplicitAPI):
591
591
  #
592
592
  return self.parse_ticker(response, market)
593
593
 
594
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
594
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
595
595
  #
596
596
  # fetchTicker
597
597
  #
@@ -178,7 +178,7 @@ class bl3p(Exchange, ImplicitAPI):
178
178
  orderbook = self.safe_dict(response, 'data')
179
179
  return self.parse_order_book(orderbook, market['symbol'], None, 'bids', 'asks', 'price_int', 'amount_int')
180
180
 
181
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
181
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
182
182
  #
183
183
  # {
184
184
  # "currency":"BTC",
@@ -392,7 +392,7 @@ class blockchaincom(Exchange, ImplicitAPI):
392
392
  response = await self.publicGetL2Symbol(self.extend(request, params))
393
393
  return self.parse_order_book(response, market['symbol'], None, 'bids', 'asks', 'px', 'qty')
394
394
 
395
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
395
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
396
396
  #
397
397
  # {
398
398
  # "symbol": "BTC-USD",
@@ -491,7 +491,7 @@ class blofin(Exchange, ImplicitAPI):
491
491
  timestamp = self.safe_integer(first, 'ts')
492
492
  return self.parse_order_book(first, symbol, timestamp)
493
493
 
494
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
494
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
495
495
  timestamp = self.safe_integer(ticker, 'ts')
496
496
  marketId = self.safe_string(ticker, 'instId')
497
497
  market = self.safe_market(marketId, market, '-')
@@ -1643,7 +1643,7 @@ class blofin(Exchange, ImplicitAPI):
1643
1643
  data = self.safe_dict(response, 'data', {})
1644
1644
  return self.parse_transfer(data, currency)
1645
1645
 
1646
- def parse_transfer(self, transfer, currency: Currency = None):
1646
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
1647
1647
  id = self.safe_string(transfer, 'transferId')
1648
1648
  return {
1649
1649
  'info': transfer,
@@ -1859,7 +1859,7 @@ class blofin(Exchange, ImplicitAPI):
1859
1859
  data = self.safe_dict(response, 'data', {})
1860
1860
  return self.parse_leverage(data, market)
1861
1861
 
1862
- def parse_leverage(self, leverage, market=None) -> Leverage:
1862
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
1863
1863
  marketId = self.safe_string(leverage, 'instId')
1864
1864
  leverageValue = self.safe_integer(leverage, 'leverage')
1865
1865
  return {
@@ -302,7 +302,7 @@ class btcalpha(Exchange, ImplicitAPI):
302
302
  #
303
303
  return self.parse_ticker(response, market)
304
304
 
305
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
305
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
306
306
  #
307
307
  # {
308
308
  # "timestamp": "1674658.445272",
@@ -181,7 +181,7 @@ class btcbox(Exchange, ImplicitAPI):
181
181
  response = await self.publicGetDepth(self.extend(request, params))
182
182
  return self.parse_order_book(response, market['symbol'])
183
183
 
184
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
184
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
185
185
  symbol = self.safe_symbol(None, market)
186
186
  last = self.safe_string(ticker, 'last')
187
187
  return self.safe_ticker({
@@ -572,7 +572,7 @@ class btcmarkets(Exchange, ImplicitAPI):
572
572
  orderbook['nonce'] = self.safe_integer(response, 'snapshotId')
573
573
  return orderbook
574
574
 
575
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
575
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
576
576
  #
577
577
  # fetchTicker
578
578
  #
@@ -354,7 +354,7 @@ class btcturk(Exchange, ImplicitAPI):
354
354
  timestamp = self.safe_integer(data, 'timestamp')
355
355
  return self.parse_order_book(data, market['symbol'], timestamp, 'bids', 'asks', 0, 1)
356
356
 
357
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
357
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
358
358
  #
359
359
  # {
360
360
  # "pair": "BTCTRY",
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bybit import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
- from ccxt.base.types import Balances, CrossBorrowRate, Currencies, Currency, Greeks, Int, Leverage, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, CancellationRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
10
+ from ccxt.base.types import Balances, CrossBorrowRate, Currencies, Currency, Greeks, Int, Leverage, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, CancellationRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry, TransferEntries
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import AuthenticationError
@@ -361,6 +361,7 @@ class bybit(Exchange, ImplicitAPI):
361
361
  'v5/asset/coin/query-info': 28, # should be 25 but exceeds ratelimit unless the weight is 28 or higher
362
362
  'v5/asset/withdraw/query-record': 10, # 5/s => cost = 50 / 5 = 10
363
363
  'v5/asset/withdraw/withdrawable-amount': 5,
364
+ 'v5/asset/withdraw/vasp/list': 5,
364
365
  # user
365
366
  'v5/user/query-sub-members': 5, # 10/s => cost = 50 / 10 = 5
366
367
  'v5/user/query-api': 5, # 10/s => cost = 50 / 10 = 5
@@ -1853,7 +1854,7 @@ class bybit(Exchange, ImplicitAPI):
1853
1854
  }))
1854
1855
  return result
1855
1856
 
1856
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1857
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1857
1858
  #
1858
1859
  # spot
1859
1860
  #
@@ -6157,7 +6158,7 @@ class bybit(Exchange, ImplicitAPI):
6157
6158
  position = await self.fetch_position(symbol, params)
6158
6159
  return self.parse_leverage(position, market)
6159
6160
 
6160
- def parse_leverage(self, leverage, market=None) -> Leverage:
6161
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
6161
6162
  marketId = self.safe_string(leverage, 'symbol')
6162
6163
  leverageValue = self.safe_integer(leverage, 'leverage')
6163
6164
  return {
@@ -6665,7 +6666,7 @@ class bybit(Exchange, ImplicitAPI):
6665
6666
  'status': status,
6666
6667
  })
6667
6668
 
6668
- async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
6669
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> TransferEntries:
6669
6670
  """
6670
6671
  fetch a history of internal transfers made on an account
6671
6672
  :see: https://bybit-exchange.github.io/docs/v5/asset/inter-transfer-list
@@ -6810,7 +6811,7 @@ class bybit(Exchange, ImplicitAPI):
6810
6811
  'info': info,
6811
6812
  }
6812
6813
 
6813
- def parse_transfer_status(self, status):
6814
+ def parse_transfer_status(self, status: Str) -> Str:
6814
6815
  statuses = {
6815
6816
  '0': 'ok',
6816
6817
  'OK': 'ok',
@@ -6818,7 +6819,7 @@ class bybit(Exchange, ImplicitAPI):
6818
6819
  }
6819
6820
  return self.safe_string(statuses, status, status)
6820
6821
 
6821
- def parse_transfer(self, transfer, currency: Currency = None):
6822
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
6822
6823
  #
6823
6824
  # transfer
6824
6825
  #
@@ -7402,7 +7403,7 @@ class bybit(Exchange, ImplicitAPI):
7402
7403
  'datetime': self.iso8601(timestamp),
7403
7404
  })
7404
7405
 
7405
- def parse_greeks(self, greeks, market: Market = None):
7406
+ def parse_greeks(self, greeks: dict, market: Market = None) -> Greeks:
7406
7407
  #
7407
7408
  # {
7408
7409
  # "symbol": "BTC-26JAN24-39000-C",
@@ -7877,7 +7878,7 @@ class bybit(Exchange, ImplicitAPI):
7877
7878
  resultList = self.safe_list(result, 'list', [])
7878
7879
  return self.parse_option_chain(resultList, None, 'symbol')
7879
7880
 
7880
- def parse_option(self, chain, currency: Currency = None, market: Market = None):
7881
+ def parse_option(self, chain: dict, currency: Currency = None, market: Market = None) -> Option:
7881
7882
  #
7882
7883
  # {
7883
7884
  # "symbol": "BTC-27DEC24-55000-P",
ccxt/async_support/cex.py CHANGED
@@ -562,7 +562,7 @@ class cex(Exchange, ImplicitAPI):
562
562
  return []
563
563
  return None
564
564
 
565
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
565
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
566
566
  timestamp = self.safe_timestamp(ticker, 'timestamp')
567
567
  volume = self.safe_string(ticker, 'volume')
568
568
  high = self.safe_string(ticker, 'high')