ccxt 4.4.27__py2.py3-none-any.whl → 4.4.29__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 (156) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +7 -0
  3. ccxt/abstract/binancecoinm.py +7 -0
  4. ccxt/abstract/binanceus.py +7 -0
  5. ccxt/abstract/binanceusdm.py +7 -0
  6. ccxt/abstract/bybit.py +0 -13
  7. ccxt/alpaca.py +45 -41
  8. ccxt/async_support/__init__.py +1 -1
  9. ccxt/async_support/alpaca.py +45 -41
  10. ccxt/async_support/base/exchange.py +4 -1
  11. ccxt/async_support/bigone.py +1 -1
  12. ccxt/async_support/binance.py +8 -1
  13. ccxt/async_support/bingx.py +1 -1
  14. ccxt/async_support/bitbank.py +1 -1
  15. ccxt/async_support/bitfinex.py +1 -1
  16. ccxt/async_support/bitfinex2.py +1 -1
  17. ccxt/async_support/bitflyer.py +1 -1
  18. ccxt/async_support/bitget.py +96 -8
  19. ccxt/async_support/bithumb.py +1 -1
  20. ccxt/async_support/bitmart.py +1 -1
  21. ccxt/async_support/bitmex.py +1 -1
  22. ccxt/async_support/bitopro.py +22 -22
  23. ccxt/async_support/bitrue.py +29 -29
  24. ccxt/async_support/bitso.py +1 -1
  25. ccxt/async_support/bitstamp.py +1 -1
  26. ccxt/async_support/bitvavo.py +4 -1
  27. ccxt/async_support/blockchaincom.py +1 -1
  28. ccxt/async_support/btcmarkets.py +1 -1
  29. ccxt/async_support/bybit.py +50 -585
  30. ccxt/async_support/coinbase.py +1 -1
  31. ccxt/async_support/coinbaseexchange.py +1 -1
  32. ccxt/async_support/coinbaseinternational.py +1 -1
  33. ccxt/async_support/coincatch.py +25 -5
  34. ccxt/async_support/coinex.py +1 -1
  35. ccxt/async_support/coinlist.py +1 -1
  36. ccxt/async_support/coinmate.py +1 -1
  37. ccxt/async_support/coinsph.py +1 -1
  38. ccxt/async_support/cryptocom.py +1 -1
  39. ccxt/async_support/deribit.py +1 -1
  40. ccxt/async_support/digifinex.py +1 -1
  41. ccxt/async_support/exmo.py +1 -1
  42. ccxt/async_support/gate.py +1 -1
  43. ccxt/async_support/gemini.py +1 -1
  44. ccxt/async_support/hashkey.py +1 -1
  45. ccxt/async_support/hitbtc.py +1 -1
  46. ccxt/async_support/hollaex.py +1 -1
  47. ccxt/async_support/htx.py +1 -1
  48. ccxt/async_support/huobijp.py +1 -1
  49. ccxt/async_support/idex.py +1 -1
  50. ccxt/async_support/independentreserve.py +1 -1
  51. ccxt/async_support/indodax.py +1 -1
  52. ccxt/async_support/kraken.py +44 -36
  53. ccxt/async_support/kucoin.py +1 -1
  54. ccxt/async_support/kuna.py +1 -1
  55. ccxt/async_support/lbank.py +6 -1
  56. ccxt/async_support/lykke.py +1 -1
  57. ccxt/async_support/mercado.py +1 -1
  58. ccxt/async_support/mexc.py +1 -1
  59. ccxt/async_support/ndax.py +1 -1
  60. ccxt/async_support/novadax.py +1 -1
  61. ccxt/async_support/okcoin.py +1 -1
  62. ccxt/async_support/okx.py +1 -1
  63. ccxt/async_support/onetrading.py +1 -1
  64. ccxt/async_support/oxfun.py +1 -1
  65. ccxt/async_support/phemex.py +1 -1
  66. ccxt/async_support/poloniex.py +1 -1
  67. ccxt/async_support/probit.py +1 -1
  68. ccxt/async_support/tokocrypto.py +1 -1
  69. ccxt/async_support/upbit.py +1 -1
  70. ccxt/async_support/vertex.py +52 -8
  71. ccxt/async_support/wavesexchange.py +2 -1
  72. ccxt/async_support/whitebit.py +1 -1
  73. ccxt/async_support/woo.py +1 -1
  74. ccxt/async_support/woofipro.py +1 -1
  75. ccxt/async_support/xt.py +1 -1
  76. ccxt/async_support/yobit.py +2 -2
  77. ccxt/async_support/zaif.py +1 -1
  78. ccxt/async_support/zonda.py +1 -1
  79. ccxt/base/exchange.py +4 -1
  80. ccxt/bigone.py +1 -1
  81. ccxt/binance.py +8 -1
  82. ccxt/bingx.py +1 -1
  83. ccxt/bitbank.py +1 -1
  84. ccxt/bitfinex.py +1 -1
  85. ccxt/bitfinex2.py +1 -1
  86. ccxt/bitflyer.py +1 -1
  87. ccxt/bitget.py +96 -8
  88. ccxt/bithumb.py +1 -1
  89. ccxt/bitmart.py +1 -1
  90. ccxt/bitmex.py +1 -1
  91. ccxt/bitopro.py +22 -22
  92. ccxt/bitrue.py +29 -29
  93. ccxt/bitso.py +1 -1
  94. ccxt/bitstamp.py +1 -1
  95. ccxt/bitvavo.py +4 -1
  96. ccxt/blockchaincom.py +1 -1
  97. ccxt/btcmarkets.py +1 -1
  98. ccxt/bybit.py +50 -585
  99. ccxt/coinbase.py +1 -1
  100. ccxt/coinbaseexchange.py +1 -1
  101. ccxt/coinbaseinternational.py +1 -1
  102. ccxt/coincatch.py +25 -5
  103. ccxt/coinex.py +1 -1
  104. ccxt/coinlist.py +1 -1
  105. ccxt/coinmate.py +1 -1
  106. ccxt/coinsph.py +1 -1
  107. ccxt/cryptocom.py +1 -1
  108. ccxt/deribit.py +1 -1
  109. ccxt/digifinex.py +1 -1
  110. ccxt/exmo.py +1 -1
  111. ccxt/gate.py +1 -1
  112. ccxt/gemini.py +1 -1
  113. ccxt/hashkey.py +1 -1
  114. ccxt/hitbtc.py +1 -1
  115. ccxt/hollaex.py +1 -1
  116. ccxt/htx.py +1 -1
  117. ccxt/huobijp.py +1 -1
  118. ccxt/idex.py +1 -1
  119. ccxt/independentreserve.py +1 -1
  120. ccxt/indodax.py +1 -1
  121. ccxt/kraken.py +44 -36
  122. ccxt/kucoin.py +1 -1
  123. ccxt/kuna.py +1 -1
  124. ccxt/lbank.py +6 -1
  125. ccxt/lykke.py +1 -1
  126. ccxt/mercado.py +1 -1
  127. ccxt/mexc.py +1 -1
  128. ccxt/ndax.py +1 -1
  129. ccxt/novadax.py +1 -1
  130. ccxt/okcoin.py +1 -1
  131. ccxt/okx.py +1 -1
  132. ccxt/onetrading.py +1 -1
  133. ccxt/oxfun.py +1 -1
  134. ccxt/phemex.py +1 -1
  135. ccxt/poloniex.py +1 -1
  136. ccxt/pro/__init__.py +1 -1
  137. ccxt/pro/binance.py +4 -5
  138. ccxt/pro/bitvavo.py +2 -1
  139. ccxt/pro/mexc.py +187 -30
  140. ccxt/probit.py +1 -1
  141. ccxt/tokocrypto.py +1 -1
  142. ccxt/upbit.py +1 -1
  143. ccxt/vertex.py +52 -8
  144. ccxt/wavesexchange.py +2 -1
  145. ccxt/whitebit.py +1 -1
  146. ccxt/woo.py +1 -1
  147. ccxt/woofipro.py +1 -1
  148. ccxt/xt.py +1 -1
  149. ccxt/yobit.py +2 -2
  150. ccxt/zaif.py +1 -1
  151. ccxt/zonda.py +1 -1
  152. {ccxt-4.4.27.dist-info → ccxt-4.4.29.dist-info}/METADATA +4 -4
  153. {ccxt-4.4.27.dist-info → ccxt-4.4.29.dist-info}/RECORD +156 -156
  154. {ccxt-4.4.27.dist-info → ccxt-4.4.29.dist-info}/LICENSE.txt +0 -0
  155. {ccxt-4.4.27.dist-info → ccxt-4.4.29.dist-info}/WHEEL +0 -0
  156. {ccxt-4.4.27.dist-info → ccxt-4.4.29.dist-info}/top_level.txt +0 -0
ccxt/bitopro.py CHANGED
@@ -233,7 +233,7 @@ class bitopro(Exchange, ImplicitAPI):
233
233
  :returns dict: an associative dictionary of currencies
234
234
  """
235
235
  response = self.publicGetProvisioningCurrencies(params)
236
- currencies = self.safe_value(response, 'data', [])
236
+ currencies = self.safe_list(response, 'data', [])
237
237
  #
238
238
  # {
239
239
  # "data":[
@@ -255,8 +255,8 @@ class bitopro(Exchange, ImplicitAPI):
255
255
  currency = currencies[i]
256
256
  currencyId = self.safe_string(currency, 'currency')
257
257
  code = self.safe_currency_code(currencyId)
258
- deposit = self.safe_value(currency, 'deposit')
259
- withdraw = self.safe_value(currency, 'withdraw')
258
+ deposit = self.safe_bool(currency, 'deposit')
259
+ withdraw = self.safe_bool(currency, 'withdraw')
260
260
  fee = self.safe_number(currency, 'withdrawFee')
261
261
  withdrawMin = self.safe_number(currency, 'minWithdraw')
262
262
  withdrawMax = self.safe_number(currency, 'maxWithdraw')
@@ -293,7 +293,7 @@ class bitopro(Exchange, ImplicitAPI):
293
293
  :returns dict[]: an array of objects representing market data
294
294
  """
295
295
  response = self.publicGetProvisioningTradingPairs()
296
- markets = self.safe_value(response, 'data', [])
296
+ markets = self.safe_list(response, 'data', [])
297
297
  #
298
298
  # {
299
299
  # "data":[
@@ -317,7 +317,7 @@ class bitopro(Exchange, ImplicitAPI):
317
317
  return self.parse_markets(markets)
318
318
 
319
319
  def parse_market(self, market: dict) -> Market:
320
- active = not self.safe_value(market, 'maintain')
320
+ active = not self.safe_bool(market, 'maintain')
321
321
  id = self.safe_string(market, 'pair')
322
322
  uppercaseId = id.upper()
323
323
  baseId = self.safe_string(market, 'base')
@@ -429,7 +429,7 @@ class bitopro(Exchange, ImplicitAPI):
429
429
  'pair': market['id'],
430
430
  }
431
431
  response = self.publicGetTickersPair(self.extend(request, params))
432
- ticker = self.safe_value(response, 'data', {})
432
+ ticker = self.safe_dict(response, 'data', {})
433
433
  #
434
434
  # {
435
435
  # "data":{
@@ -455,7 +455,7 @@ class bitopro(Exchange, ImplicitAPI):
455
455
  """
456
456
  self.load_markets()
457
457
  response = self.publicGetTickers()
458
- tickers = self.safe_value(response, 'data', [])
458
+ tickers = self.safe_list(response, 'data', [])
459
459
  #
460
460
  # {
461
461
  # "data":[
@@ -551,7 +551,7 @@ class bitopro(Exchange, ImplicitAPI):
551
551
  type = self.safe_string_lower(trade, 'type')
552
552
  side = self.safe_string_lower(trade, 'action')
553
553
  if side is None:
554
- isBuyer = self.safe_value(trade, 'isBuyer')
554
+ isBuyer = self.safe_bool(trade, 'isBuyer')
555
555
  if isBuyer:
556
556
  side = 'buy'
557
557
  else:
@@ -568,7 +568,7 @@ class bitopro(Exchange, ImplicitAPI):
568
568
  'currency': feeSymbol,
569
569
  'rate': None,
570
570
  }
571
- isTaker = self.safe_value(trade, 'isTaker')
571
+ isTaker = self.safe_bool(trade, 'isTaker')
572
572
  takerOrMaker = None
573
573
  if isTaker is not None:
574
574
  if isTaker:
@@ -607,7 +607,7 @@ class bitopro(Exchange, ImplicitAPI):
607
607
  'pair': market['id'],
608
608
  }
609
609
  response = self.publicGetTradesPair(self.extend(request, params))
610
- trades = self.safe_value(response, 'data', [])
610
+ trades = self.safe_list(response, 'data', [])
611
611
  #
612
612
  # {
613
613
  # "data":[
@@ -631,7 +631,7 @@ class bitopro(Exchange, ImplicitAPI):
631
631
  """
632
632
  self.load_markets()
633
633
  response = self.publicGetProvisioningLimitationsAndFees(params)
634
- tradingFeeRate = self.safe_value(response, 'tradingFeeRate', {})
634
+ tradingFeeRate = self.safe_dict(response, 'tradingFeeRate', {})
635
635
  first = self.safe_value(tradingFeeRate, 0)
636
636
  #
637
637
  # {
@@ -753,7 +753,7 @@ class bitopro(Exchange, ImplicitAPI):
753
753
  request['from'] = int(math.floor(since / 1000))
754
754
  request['to'] = self.sum(request['from'], limit * timeframeInSeconds)
755
755
  response = self.publicGetTradingHistoryPair(self.extend(request, params))
756
- data = self.safe_value(response, 'data', [])
756
+ data = self.safe_list(response, 'data', [])
757
757
  #
758
758
  # {
759
759
  # "data":[
@@ -841,7 +841,7 @@ class bitopro(Exchange, ImplicitAPI):
841
841
  """
842
842
  self.load_markets()
843
843
  response = self.privateGetAccountsBalance(params)
844
- balances = self.safe_value(response, 'data', [])
844
+ balances = self.safe_list(response, 'data', [])
845
845
  #
846
846
  # {
847
847
  # "data":[
@@ -1101,7 +1101,7 @@ class bitopro(Exchange, ImplicitAPI):
1101
1101
  response = self.privateDeleteOrdersPair(self.extend(request, params))
1102
1102
  else:
1103
1103
  response = self.privateDeleteOrdersAll(self.extend(request, params))
1104
- data = self.safe_value(response, 'data', {})
1104
+ data = self.safe_dict(response, 'data', {})
1105
1105
  #
1106
1106
  # {
1107
1107
  # "data":{
@@ -1183,7 +1183,7 @@ class bitopro(Exchange, ImplicitAPI):
1183
1183
  if limit is not None:
1184
1184
  request['limit'] = limit
1185
1185
  response = self.privateGetOrdersAllPair(self.extend(request, params))
1186
- orders = self.safe_value(response, 'data')
1186
+ orders = self.safe_list(response, 'data', [])
1187
1187
  if orders is None:
1188
1188
  orders = []
1189
1189
  #
@@ -1253,7 +1253,7 @@ class bitopro(Exchange, ImplicitAPI):
1253
1253
  'pair': market['id'],
1254
1254
  }
1255
1255
  response = self.privateGetOrdersTradesPair(self.extend(request, params))
1256
- trades = self.safe_value(response, 'data', [])
1256
+ trades = self.safe_list(response, 'data', [])
1257
1257
  #
1258
1258
  # {
1259
1259
  # "data":[
@@ -1395,7 +1395,7 @@ class bitopro(Exchange, ImplicitAPI):
1395
1395
  if limit is not None:
1396
1396
  request['limit'] = limit
1397
1397
  response = self.privateGetWalletDepositHistoryCurrency(self.extend(request, params))
1398
- result = self.safe_value(response, 'data', [])
1398
+ result = self.safe_list(response, 'data', [])
1399
1399
  #
1400
1400
  # {
1401
1401
  # "data":[
@@ -1442,7 +1442,7 @@ class bitopro(Exchange, ImplicitAPI):
1442
1442
  if limit is not None:
1443
1443
  request['limit'] = limit
1444
1444
  response = self.privateGetWalletWithdrawHistoryCurrency(self.extend(request, params))
1445
- result = self.safe_value(response, 'data', [])
1445
+ result = self.safe_list(response, 'data', [])
1446
1446
  #
1447
1447
  # {
1448
1448
  # "data":[
@@ -1481,7 +1481,7 @@ class bitopro(Exchange, ImplicitAPI):
1481
1481
  'currency': currency['id'],
1482
1482
  }
1483
1483
  response = self.privateGetWalletWithdrawCurrencySerial(self.extend(request, params))
1484
- result = self.safe_value(response, 'data', {})
1484
+ result = self.safe_dict(response, 'data', {})
1485
1485
  #
1486
1486
  # {
1487
1487
  # "data":{
@@ -1500,7 +1500,7 @@ class bitopro(Exchange, ImplicitAPI):
1500
1500
  #
1501
1501
  return self.parse_transaction(result, currency)
1502
1502
 
1503
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1503
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1504
1504
  """
1505
1505
  make a withdrawal
1506
1506
  :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/create_an_withdraw_invoice.md
@@ -1521,7 +1521,7 @@ class bitopro(Exchange, ImplicitAPI):
1521
1521
  'address': address,
1522
1522
  }
1523
1523
  if 'network' in params:
1524
- networks = self.safe_value(self.options, 'networks', {})
1524
+ networks = self.safe_dict(self.options, 'networks', {})
1525
1525
  requestedNetwork = self.safe_string_upper(params, 'network')
1526
1526
  params = self.omit(params, ['network'])
1527
1527
  networkId = self.safe_string(networks, requestedNetwork)
@@ -1531,7 +1531,7 @@ class bitopro(Exchange, ImplicitAPI):
1531
1531
  if tag is not None:
1532
1532
  request['message'] = tag
1533
1533
  response = self.privatePostWalletWithdrawCurrency(self.extend(request, params))
1534
- result = self.safe_value(response, 'data', {})
1534
+ result = self.safe_dict(response, 'data', {})
1535
1535
  #
1536
1536
  # {
1537
1537
  # "data":{
ccxt/bitrue.py CHANGED
@@ -633,7 +633,7 @@ class bitrue(Exchange, ImplicitAPI):
633
633
  # }
634
634
  #
635
635
  result: dict = {}
636
- coins = self.safe_value(response, 'coins', [])
636
+ coins = self.safe_list(response, 'coins', [])
637
637
  for i in range(0, len(coins)):
638
638
  currency = coins[i]
639
639
  id = self.safe_string(currency, 'coin')
@@ -644,15 +644,15 @@ class bitrue(Exchange, ImplicitAPI):
644
644
  minWithdrawString = None
645
645
  maxWithdrawString = None
646
646
  minWithdrawFeeString = None
647
- networkDetails = self.safe_value(currency, 'chainDetail', [])
647
+ networkDetails = self.safe_list(currency, 'chainDetail', [])
648
648
  networks: dict = {}
649
649
  for j in range(0, len(networkDetails)):
650
650
  entry = networkDetails[j]
651
651
  networkId = self.safe_string(entry, 'chain')
652
652
  network = self.network_id_to_code(networkId, code)
653
- enableDeposit = self.safe_value(entry, 'enableDeposit')
653
+ enableDeposit = self.safe_bool(entry, 'enableDeposit')
654
654
  deposit = enableDeposit if (enableDeposit) else deposit
655
- enableWithdraw = self.safe_value(entry, 'enableWithdraw')
655
+ enableWithdraw = self.safe_bool(entry, 'enableWithdraw')
656
656
  withdraw = enableWithdraw if (enableWithdraw) else withdraw
657
657
  networkWithdrawFeeString = self.safe_string(entry, 'withdrawFee')
658
658
  if networkWithdrawFeeString is not None:
@@ -828,11 +828,11 @@ class bitrue(Exchange, ImplicitAPI):
828
828
  symbol = base + '/' + quote
829
829
  if settle is not None:
830
830
  symbol += ':' + settle
831
- filters = self.safe_value(market, 'filters', [])
831
+ filters = self.safe_list(market, 'filters', [])
832
832
  filtersByType = self.index_by(filters, 'filterType')
833
833
  status = self.safe_string(market, 'status')
834
- priceFilter = self.safe_value(filtersByType, 'PRICE_FILTER', {})
835
- amountFilter = self.safe_value(filtersByType, 'LOT_SIZE', {})
834
+ priceFilter = self.safe_dict(filtersByType, 'PRICE_FILTER', {})
835
+ amountFilter = self.safe_dict(filtersByType, 'LOT_SIZE', {})
836
836
  defaultPricePrecision = self.safe_string(market, 'pricePrecision')
837
837
  defaultAmountPrecision = self.safe_string(market, 'quantityPrecision')
838
838
  pricePrecision = self.safe_string(priceFilter, 'priceScale', defaultPricePrecision)
@@ -980,7 +980,7 @@ class bitrue(Exchange, ImplicitAPI):
980
980
  if type == 'swap':
981
981
  if subType is not None and subType == 'inverse':
982
982
  response = self.dapiV2PrivateGetAccount(params)
983
- result = self.safe_value(response, 'data', {})
983
+ result = self.safe_dict(response, 'data', {})
984
984
  #
985
985
  # {
986
986
  # "code":"0",
@@ -1013,7 +1013,7 @@ class bitrue(Exchange, ImplicitAPI):
1013
1013
  #
1014
1014
  else:
1015
1015
  response = self.fapiV2PrivateGetAccount(params)
1016
- result = self.safe_value(response, 'data', {})
1016
+ result = self.safe_dict(response, 'data', {})
1017
1017
  #
1018
1018
  # {
1019
1019
  # "code":"0",
@@ -1228,7 +1228,7 @@ class bitrue(Exchange, ImplicitAPI):
1228
1228
  'symbol': market['id'],
1229
1229
  }
1230
1230
  response = self.spotV1PublicGetTicker24hr(self.extend(request, params))
1231
- data = self.safe_value(response, 0, {})
1231
+ data = self.safe_dict(response, 0, {})
1232
1232
  else:
1233
1233
  raise NotSupported(self.id + ' fetchTicker only support spot & swap markets')
1234
1234
  #
@@ -1286,11 +1286,11 @@ class bitrue(Exchange, ImplicitAPI):
1286
1286
  """
1287
1287
  self.load_markets()
1288
1288
  market = self.market(symbol)
1289
- timeframes = self.safe_value(self.options, 'timeframes', {})
1289
+ timeframes = self.safe_dict(self.options, 'timeframes', {})
1290
1290
  response = None
1291
1291
  data = None
1292
1292
  if market['swap']:
1293
- timeframesFuture = self.safe_value(timeframes, 'future', {})
1293
+ timeframesFuture = self.safe_dict(timeframes, 'future', {})
1294
1294
  request: dict = {
1295
1295
  'contractName': market['id'],
1296
1296
  # 1min / 5min / 15min / 30min / 1h / 1day / 1week / 1month
@@ -1304,7 +1304,7 @@ class bitrue(Exchange, ImplicitAPI):
1304
1304
  response = self.dapiV1PublicGetKlines(self.extend(request, params))
1305
1305
  data = response
1306
1306
  elif market['spot']:
1307
- timeframesSpot = self.safe_value(timeframes, 'spot', {})
1307
+ timeframesSpot = self.safe_dict(timeframes, 'spot', {})
1308
1308
  request: dict = {
1309
1309
  'symbol': market['id'],
1310
1310
  # 1m / 5m / 15m / 30m / 1H / 2H / 4H / 12H / 1D / 1W
@@ -1315,7 +1315,7 @@ class bitrue(Exchange, ImplicitAPI):
1315
1315
  if since is not None:
1316
1316
  request['fromIdx'] = since
1317
1317
  response = self.spotV1PublicGetMarketKline(self.extend(request, params))
1318
- data = self.safe_value(response, 'data', [])
1318
+ data = self.safe_list(response, 'data', [])
1319
1319
  else:
1320
1320
  raise NotSupported(self.id + ' fetchOHLCV only support spot & swap markets')
1321
1321
  #
@@ -1522,7 +1522,7 @@ class bitrue(Exchange, ImplicitAPI):
1522
1522
  # https://github.com/ccxt/ccxt/issues/13856
1523
1523
  tickers: dict = {}
1524
1524
  for i in range(0, len(data)):
1525
- ticker = self.safe_value(data, i, {})
1525
+ ticker = self.safe_dict(data, i, {})
1526
1526
  market = self.market(self.safe_value(ticker, 'symbol'))
1527
1527
  tickers[market['id']] = ticker
1528
1528
  return self.parse_tickers(tickers, symbols)
@@ -1584,8 +1584,8 @@ class bitrue(Exchange, ImplicitAPI):
1584
1584
  orderId = self.safe_string(trade, 'orderId')
1585
1585
  id = self.safe_string_2(trade, 'id', 'tradeId')
1586
1586
  side = None
1587
- buyerMaker = self.safe_value(trade, 'isBuyerMaker') # ignore "m" until Bitrue fixes api
1588
- isBuyer = self.safe_value(trade, 'isBuyer')
1587
+ buyerMaker = self.safe_bool(trade, 'isBuyerMaker') # ignore "m" until Bitrue fixes api
1588
+ isBuyer = self.safe_bool(trade, 'isBuyer')
1589
1589
  if buyerMaker is not None:
1590
1590
  side = 'sell' if buyerMaker else 'buy'
1591
1591
  if isBuyer is not None:
@@ -1597,7 +1597,7 @@ class bitrue(Exchange, ImplicitAPI):
1597
1597
  'currency': self.safe_currency_code(self.safe_string(trade, 'commissionAssert')),
1598
1598
  }
1599
1599
  takerOrMaker = None
1600
- isMaker = self.safe_value(trade, 'isMaker')
1600
+ isMaker = self.safe_bool(trade, 'isMaker')
1601
1601
  if isMaker is not None:
1602
1602
  takerOrMaker = 'maker' if isMaker else 'taker'
1603
1603
  return self.safe_trade({
@@ -1750,7 +1750,7 @@ class bitrue(Exchange, ImplicitAPI):
1750
1750
  id = self.safe_string(order, 'orderId')
1751
1751
  type = self.safe_string_lower(order, 'type')
1752
1752
  side = self.safe_string_lower(order, 'side')
1753
- fills = self.safe_value(order, 'fills', [])
1753
+ fills = self.safe_list(order, 'fills', [])
1754
1754
  clientOrderId = self.safe_string(order, 'clientOrderId')
1755
1755
  timeInForce = self.safe_string(order, 'timeInForce')
1756
1756
  postOnly = (type == 'limit_maker') or (timeInForce == 'GTX') or (type == 'post_only')
@@ -1880,7 +1880,7 @@ class bitrue(Exchange, ImplicitAPI):
1880
1880
  response = self.fapiV2PrivatePostOrder(self.extend(request, params))
1881
1881
  elif market['inverse']:
1882
1882
  response = self.dapiV2PrivatePostOrder(self.extend(request, params))
1883
- data = self.safe_value(response, 'data', {})
1883
+ data = self.safe_dict(response, 'data', {})
1884
1884
  elif market['spot']:
1885
1885
  request['symbol'] = market['id']
1886
1886
  request['quantity'] = self.amount_to_precision(symbol, amount)
@@ -1955,7 +1955,7 @@ class bitrue(Exchange, ImplicitAPI):
1955
1955
  response = self.fapiV2PrivateGetOrder(self.extend(request, params))
1956
1956
  elif market['inverse']:
1957
1957
  response = self.dapiV2PrivateGetOrder(self.extend(request, params))
1958
- data = self.safe_value(response, 'data', {})
1958
+ data = self.safe_dict(response, 'data', {})
1959
1959
  elif market['spot']:
1960
1960
  request['orderId'] = id # spot market id is mandatory
1961
1961
  request['symbol'] = market['id']
@@ -2085,7 +2085,7 @@ class bitrue(Exchange, ImplicitAPI):
2085
2085
  response = self.fapiV2PrivateGetOpenOrders(self.extend(request, params))
2086
2086
  elif market['inverse']:
2087
2087
  response = self.dapiV2PrivateGetOpenOrders(self.extend(request, params))
2088
- data = self.safe_value(response, 'data', [])
2088
+ data = self.safe_list(response, 'data', [])
2089
2089
  elif market['spot']:
2090
2090
  request['symbol'] = market['id']
2091
2091
  response = self.spotV1PrivateGetOpenOrders(self.extend(request, params))
@@ -2173,7 +2173,7 @@ class bitrue(Exchange, ImplicitAPI):
2173
2173
  response = self.fapiV2PrivatePostCancel(self.extend(request, params))
2174
2174
  elif market['inverse']:
2175
2175
  response = self.dapiV2PrivatePostCancel(self.extend(request, params))
2176
- data = self.safe_value(response, 'data', {})
2176
+ data = self.safe_dict(response, 'data', {})
2177
2177
  elif market['spot']:
2178
2178
  request['symbol'] = market['id']
2179
2179
  response = self.spotV1PrivateDeleteOrder(self.extend(request, params))
@@ -2224,7 +2224,7 @@ class bitrue(Exchange, ImplicitAPI):
2224
2224
  response = self.fapiV2PrivatePostAllOpenOrders(self.extend(request, params))
2225
2225
  elif market['inverse']:
2226
2226
  response = self.dapiV2PrivatePostAllOpenOrders(self.extend(request, params))
2227
- data = self.safe_value(response, 'data', [])
2227
+ data = self.safe_list(response, 'data', [])
2228
2228
  else:
2229
2229
  raise NotSupported(self.id + ' cancelAllOrders only support future markets')
2230
2230
  #
@@ -2269,7 +2269,7 @@ class bitrue(Exchange, ImplicitAPI):
2269
2269
  response = self.fapiV2PrivateGetMyTrades(self.extend(request, params))
2270
2270
  elif market['inverse']:
2271
2271
  response = self.dapiV2PrivateGetMyTrades(self.extend(request, params))
2272
- data = self.safe_value(response, 'data', [])
2272
+ data = self.safe_list(response, 'data', [])
2273
2273
  elif market['spot']:
2274
2274
  request['symbol'] = market['id']
2275
2275
  response = self.spotV2PrivateGetMyTrades(self.extend(request, params))
@@ -2456,7 +2456,7 @@ class bitrue(Exchange, ImplicitAPI):
2456
2456
  '6': 'canceled',
2457
2457
  },
2458
2458
  }
2459
- statuses = self.safe_value(statusesByType, type, {})
2459
+ statuses = self.safe_dict(statusesByType, type, {})
2460
2460
  return self.safe_string(statuses, status, status)
2461
2461
 
2462
2462
  def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
@@ -2579,7 +2579,7 @@ class bitrue(Exchange, ImplicitAPI):
2579
2579
  'fee': fee,
2580
2580
  }
2581
2581
 
2582
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2582
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2583
2583
  """
2584
2584
  make a withdrawal
2585
2585
  :see: https://github.com/Bitrue-exchange/Spot-official-api-docs#withdraw-commit--withdraw_data
@@ -2637,7 +2637,7 @@ class bitrue(Exchange, ImplicitAPI):
2637
2637
  # "chainDetail": [[Object]]
2638
2638
  # }
2639
2639
  #
2640
- chainDetails = self.safe_value(fee, 'chainDetail', [])
2640
+ chainDetails = self.safe_list(fee, 'chainDetail', [])
2641
2641
  chainDetailLength = len(chainDetails)
2642
2642
  result: dict = {
2643
2643
  'info': fee,
@@ -2778,7 +2778,7 @@ class bitrue(Exchange, ImplicitAPI):
2778
2778
  """
2779
2779
  self.load_markets()
2780
2780
  currency = self.currency(code)
2781
- accountTypes = self.safe_value(self.options, 'accountsByType', {})
2781
+ accountTypes = self.safe_dict(self.options, 'accountsByType', {})
2782
2782
  fromId = self.safe_string(accountTypes, fromAccount, fromAccount)
2783
2783
  toId = self.safe_string(accountTypes, toAccount, toAccount)
2784
2784
  request: dict = {
ccxt/bitso.py CHANGED
@@ -1500,7 +1500,7 @@ class bitso(Exchange, ImplicitAPI):
1500
1500
  result[code]['info'][code] = withdrawFee
1501
1501
  return result
1502
1502
 
1503
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1503
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1504
1504
  """
1505
1505
  make a withdrawal
1506
1506
  :param str code: unified currency code
ccxt/bitstamp.py CHANGED
@@ -2009,7 +2009,7 @@ class bitstamp(Exchange, ImplicitAPI):
2009
2009
  'tag': tag,
2010
2010
  }
2011
2011
 
2012
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2012
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2013
2013
  """
2014
2014
  make a withdrawal
2015
2015
  :see: https://www.bitstamp.net/api/#tag/Withdrawals/operation/RequestFiatWithdrawal
ccxt/bitvavo.py CHANGED
@@ -1081,6 +1081,9 @@ class bitvavo(Exchange, ImplicitAPI):
1081
1081
  request['timeInForce'] = timeInForce
1082
1082
  if postOnly:
1083
1083
  request['postOnly'] = True
1084
+ clientOrderId = self.safe_string(params, 'clientOrderId')
1085
+ if clientOrderId is None:
1086
+ request['clientOrderId'] = self.uuid22()
1084
1087
  return self.extend(request, params)
1085
1088
 
1086
1089
  def create_order(self, symbol: Str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
@@ -1631,7 +1634,7 @@ class bitvavo(Exchange, ImplicitAPI):
1631
1634
  request['paymentId'] = tag
1632
1635
  return self.extend(request, params)
1633
1636
 
1634
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1637
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1635
1638
  """
1636
1639
  make a withdrawal
1637
1640
  :param str code: unified currency code
ccxt/blockchaincom.py CHANGED
@@ -880,7 +880,7 @@ class blockchaincom(Exchange, ImplicitAPI):
880
880
  'fee': fee,
881
881
  }
882
882
 
883
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
883
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
884
884
  """
885
885
  make a withdrawal
886
886
  :see: https://api.blockchain.com/v3/#createwithdrawal
ccxt/btcmarkets.py CHANGED
@@ -1131,7 +1131,7 @@ class btcmarkets(Exchange, ImplicitAPI):
1131
1131
  #
1132
1132
  return self.parse_trades(response, market, since, limit)
1133
1133
 
1134
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1134
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1135
1135
  """
1136
1136
  make a withdrawal
1137
1137
  :see: https://docs.btcmarkets.net/v3/#tag/Fund-Management-APIs/paths/~1v3~1withdrawals/post